Skip to content

Commit a79a8ae

Browse files
Merge pull request #56 from apex-dev-tools/fix-lexer-hex
Fix lexer hex characters
2 parents eb37247 + 9344ab9 commit a79a8ae

File tree

16 files changed

+266
-106
lines changed

16 files changed

+266
-106
lines changed

.github/workflows/Build.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ jobs:
1212
runs-on: ubuntu-latest
1313

1414
steps:
15-
- uses: actions/checkout@v3
15+
- uses: actions/checkout@v4
1616

17-
- name: Set up Node 14
18-
uses: actions/setup-node@v3
17+
- name: Set up Node
18+
uses: actions/setup-node@v4
1919
with:
20-
node-version: 14
20+
node-version: 20
2121

2222
- name: Set up JDK 8
23-
uses: actions/setup-java@v3
23+
uses: actions/setup-java@v4
2424
with:
2525
distribution: "temurin"
2626
java-version: 8
@@ -30,12 +30,12 @@ jobs:
3030
run: npm run build
3131

3232
- name: Checkout samples repo
33-
uses: actions/checkout@v3
33+
uses: actions/checkout@v4
3434
with:
3535
submodules: recursive
3636
repository: apex-dev-tools/apex-samples
3737
path: apex-samples
38-
ref: v1.0.2
38+
ref: v1.2.0
3939

4040
- name: Set samples env
4141
run: echo "SAMPLES=$GITHUB_WORKSPACE/apex-samples" >> "$GITHUB_ENV"

.github/workflows/PublishMaven.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,26 @@ name: Publish to Maven
22

33
on:
44
release:
5-
types: [ released ]
5+
types: [released]
66
workflow_dispatch:
77

88
jobs:
99
publish:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v3
12+
- uses: actions/checkout@v4
1313

14-
- name: Set up Node 14
15-
uses: actions/setup-node@v3
14+
- name: Set up Node
15+
uses: actions/setup-node@v4
1616
with:
17-
node-version: 14
17+
node-version: 20
1818

1919
- name: Set up Maven Central Repository
20-
uses: actions/setup-java@v3
20+
uses: actions/setup-java@v4
2121
with:
22-
java-version: '8'
23-
distribution: 'temurin'
24-
cache: 'maven'
22+
java-version: "8"
23+
distribution: "temurin"
24+
cache: "maven"
2525
server-id: ossrh
2626
server-username: MAVEN_USERNAME
2727
server-password: MAVEN_TOKEN

.github/workflows/PublishNPM.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ name: Publish to NPM
22

33
on:
44
release:
5-
types: [ released ]
5+
types: [released]
66
workflow_dispatch:
77

88
jobs:
99
publish:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v3
12+
- uses: actions/checkout@v4
1313

14-
- name: Set up Node 14
15-
uses: actions/setup-node@v3
14+
- name: Set up Node
15+
uses: actions/setup-node@v4
1616
with:
17-
node-version: 14
18-
registry-url: 'https://registry.npmjs.org'
17+
node-version: 20
18+
registry-url: "https://registry.npmjs.org"
1919

2020
- name: Publish package
2121
run: |

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# apex-parser - Changelog
22

3+
## 4.3.1 - 2024-11-12
4+
5+
- Fix Lexer support for uppercase Hex
6+
- Fix parser `whenValue` to support type refs
7+
38
## 4.3.0 - 2024-09-26
49

510
- Add `convertCurrency` and `FORMAT` SOQL/SOSL functions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ Maven
4848
<dependency>
4949
<groupId>io.github.apex-dev-tools</groupId>
5050
<artifactId>apex-parser</artifactId>
51-
<version>4.3.0</version>
51+
<version>4.3.1</version>
5252
</dependency>
5353

5454
NPM
5555

56-
"@apexdevtools/apex-parser": "^4.3.0"
56+
"@apexdevtools/apex-parser": "^4.3.1"
5757

5858
## Building
5959

antlr/ApexLexer.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ NumberLiteral
310310

311311
fragment
312312
HexCharacter
313-
: Digit | 'a' | 'b' | 'c' | 'd' | 'e' | 'f'
313+
: [0-9a-fA-F]
314314
;
315315

316316
fragment

antlr/ApexParser.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ whenControl
314314
whenValue
315315
: ELSE
316316
| whenLiteral (COMMA whenLiteral)*
317-
| id id
317+
| typeRef id
318318
;
319319

320320
whenLiteral

jvm/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>io.github.apex-dev-tools</groupId>
77
<artifactId>apex-parser</artifactId>
8-
<version>4.3.0</version>
8+
<version>4.3.1</version>
99
<packaging>jar</packaging>
1010

1111
<name>apex-parser</name>

jvm/src/test/java/io/github/apexdevtools/apexparser/ApexLexerTest.java

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,42 +13,53 @@
1313
*/
1414
package io.github.apexdevtools.apexparser;
1515

16-
import org.antlr.v4.runtime.CharStreams;
17-
import org.antlr.v4.runtime.CommonTokenStream;
16+
import org.antlr.v4.runtime.*;
1817
import org.junit.jupiter.api.Test;
1918

20-
import java.io.IOException;
21-
import java.io.StringReader;
19+
import java.util.Map;
2220

21+
import static io.github.apexdevtools.apexparser.SyntaxErrorCounter.createLexer;
2322
import static org.junit.jupiter.api.Assertions.assertEquals;
2423

2524
public class ApexLexerTest {
2625

2726
@Test
2827
void testLexerGeneratesTokens() {
29-
ApexLexer lexer = new ApexLexer(CharStreams.fromString("public class Hello {}"));
30-
CommonTokenStream tokens = new CommonTokenStream(lexer);
28+
Map.Entry<ApexLexer, SyntaxErrorCounter> lexerAndCounter = createLexer("public class Hello {}", false);
29+
CommonTokenStream tokens = new CommonTokenStream(lexerAndCounter.getKey());
3130
assertEquals(6, tokens.getNumberOfOnChannelTokens());
31+
assertEquals(0, lexerAndCounter.getValue().getNumErrors());
3232
}
3333

3434
@Test
35-
void testCaseInsensitivityLowerCase() throws IOException {
36-
ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(CharStreams.fromString("public")));
37-
CommonTokenStream tokens = new CommonTokenStream(lexer);
35+
void testCaseInsensitivityLowerCase() {
36+
Map.Entry<ApexLexer, SyntaxErrorCounter> lexerAndCounter = createLexer("public", true);
37+
CommonTokenStream tokens = new CommonTokenStream(lexerAndCounter.getKey());
3838
assertEquals(2, tokens.getNumberOfOnChannelTokens());
39+
assertEquals(0, lexerAndCounter.getValue().getNumErrors());
3940
}
4041

4142
@Test
42-
void testCaseInsensitivityUpperCase() throws IOException {
43-
ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(CharStreams.fromString("PUBLIC")));
44-
CommonTokenStream tokens = new CommonTokenStream(lexer);
43+
void testCaseInsensitivityUpperCase() {
44+
Map.Entry<ApexLexer, SyntaxErrorCounter> lexerAndCounter = createLexer("PUBLIC", true);
45+
CommonTokenStream tokens = new CommonTokenStream(lexerAndCounter.getKey());
4546
assertEquals(2, tokens.getNumberOfOnChannelTokens());
47+
assertEquals(0, lexerAndCounter.getValue().getNumErrors());
4648
}
4749

4850
@Test
49-
void testCaseInsensitivityMixedCase() throws IOException {
50-
ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(CharStreams.fromString("PuBliC")));
51-
CommonTokenStream tokens = new CommonTokenStream(lexer);
51+
void testCaseInsensitivityMixedCase() {
52+
Map.Entry<ApexLexer, SyntaxErrorCounter> lexerAndCounter = createLexer("PuBliC", true);
53+
CommonTokenStream tokens = new CommonTokenStream(lexerAndCounter.getKey());
5254
assertEquals(2, tokens.getNumberOfOnChannelTokens());
55+
assertEquals(0, lexerAndCounter.getValue().getNumErrors());
56+
}
57+
58+
@Test
59+
void testLexerUnicodeEscapes() {
60+
Map.Entry<ApexLexer, SyntaxErrorCounter> lexerAndCounter = createLexer("'Fran\\u00E7ois'", false);
61+
CommonTokenStream tokens = new CommonTokenStream(lexerAndCounter.getKey());
62+
assertEquals(2, tokens.getNumberOfOnChannelTokens());
63+
assertEquals(0, lexerAndCounter.getValue().getNumErrors());
5364
}
5465
}

jvm/src/test/java/io/github/apexdevtools/apexparser/SyntaxErrorCounter.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ public int getNumErrors() {
3636
return this.numErrors;
3737
}
3838

39+
public static Map.Entry<ApexLexer, SyntaxErrorCounter> createLexer(String input, Boolean caseInsensitive) {
40+
CharStream stream = CharStreams.fromString(input);
41+
ApexLexer lexer = new ApexLexer(caseInsensitive ? new CaseInsensitiveInputStream(stream) : stream);
42+
43+
lexer.removeErrorListeners();
44+
SyntaxErrorCounter errorCounter = new SyntaxErrorCounter();
45+
lexer.addErrorListener(errorCounter);
46+
47+
return new AbstractMap.SimpleEntry<>(lexer, errorCounter);
48+
}
49+
3950
public static Map.Entry<ApexParser, SyntaxErrorCounter> createParser(String input) {
4051
ApexLexer lexer = new ApexLexer(new CaseInsensitiveInputStream(CharStreams.fromString(input)));
4152
CommonTokenStream tokens = new CommonTokenStream(lexer);
@@ -45,6 +56,6 @@ public static Map.Entry<ApexParser, SyntaxErrorCounter> createParser(String inpu
4556
SyntaxErrorCounter errorCounter = new SyntaxErrorCounter();
4657
parser.addErrorListener(errorCounter);
4758

48-
return new AbstractMap.SimpleEntry<ApexParser, SyntaxErrorCounter>(parser, errorCounter);
59+
return new AbstractMap.SimpleEntry<>(parser, errorCounter);
4960
}
5061
}

0 commit comments

Comments
 (0)