diff --git a/build.gradle b/build.gradle index 8c990bf5..ddd80a20 100644 --- a/build.gradle +++ b/build.gradle @@ -69,8 +69,8 @@ subprojects { depends = [guava: 'com.google.guava:guava:14.0', findbugs: 'com.google.code.findbugs:jsr305:1.3.9', junit: 'junit:junit:4.6', - antlr_runtime: 'org.antlr:antlr-runtime:3.2', - antlr: 'org.antlr:antlr:3.2', + antlr_runtime: 'org.antlr:antlr-runtime:3.5', + antlr: 'org.antlr:antlr:3.5', commons_cli: 'commons-cli:commons-cli:1.2', jflex: 'de.jflex:jflex:1.4.3', proguard: 'net.sf.proguard:proguard-base:4.8' diff --git a/dexlib2/accessorTestGenerator/build.gradle b/dexlib2/accessorTestGenerator/build.gradle index 4c344595..e50bdc0a 100644 --- a/dexlib2/accessorTestGenerator/build.gradle +++ b/dexlib2/accessorTestGenerator/build.gradle @@ -33,7 +33,7 @@ dependencies { compile project(':util') compile 'com.google.code.findbugs:jsr305:1.3.9' compile 'com.google.guava:guava:13.0.1' - compile 'org.antlr:stringtemplate:4.0.2' + compile 'org.antlr:ST4:4.0.7' testCompile 'junit:junit:4.6' } \ No newline at end of file diff --git a/smali/src/main/antlr3/smaliTreeWalker.g b/smali/src/main/antlr3/smaliTreeWalker.g index e160a581..a26ac859 100644 --- a/smali/src/main/antlr3/smaliTreeWalker.g +++ b/smali/src/main/antlr3/smaliTreeWalker.g @@ -255,7 +255,7 @@ literal returns[EncodedValue encodedValue] | bool_literal { $encodedValue = ImmutableBooleanEncodedValue.forBoolean($bool_literal.value); } | NULL_LITERAL { $encodedValue = ImmutableNullEncodedValue.INSTANCE; } | type_descriptor { $encodedValue = new ImmutableTypeEncodedValue($type_descriptor.type); } - | array_literal { $encodedValue = new ImmutableArrayEncodedValue($array_literal.values); } + | array_literal { $encodedValue = new ImmutableArrayEncodedValue($array_literal.elements); } | subannotation { $encodedValue = new ImmutableAnnotationEncodedValue($subannotation.annotationType, $subannotation.elements); } | field_literal { $encodedValue = new ImmutableFieldEncodedValue($field_literal.value); } | method_literal { $encodedValue = new ImmutableMethodEncodedValue($method_literal.value); } @@ -295,12 +295,12 @@ fixed_32bit_literal returns[int value] | char_literal { $value = $char_literal.value; } | bool_literal { $value = $bool_literal.value?1:0; }; -array_elements returns[List values] - : {$values = new ArrayList();} +array_elements returns[List elements] + : {$elements = Lists.newArrayList();} ^(I_ARRAY_ELEMENTS (fixed_size_literal { - $values.add($fixed_size_literal.value); + $elements.add($fixed_size_literal.value); })*); packed_switch_elements[int baseAddress, int firstKey] returns[List elements] @@ -1221,7 +1221,7 @@ insn_array_data_directive[int totalMethodRegisters, int methodParameterRegisters // TODO: reimplement, after changing how it's parsed /* int elementWidth = $short_integral_literal.value; - List byteValues = $array_elements.values; + List byteValues = $array_elements.elements; int length = 0; for (byte[] byteValue: byteValues) { @@ -1345,13 +1345,9 @@ string_literal returns[String value] bool_literal returns[boolean value] : BOOL_LITERAL { $value = Boolean.parseBoolean($BOOL_LITERAL.text); }; -array_literal returns[List values] - : {ArrayList valuesList = new ArrayList();} - ^(I_ENCODED_ARRAY (literal {valuesList.add($literal.encodedValue);})*) - { - $values = valuesList; - }; - +array_literal returns[List elements] + : {$elements = Lists.newArrayList();} + ^(I_ENCODED_ARRAY (literal {$elements.add($literal.encodedValue);})*); annotations returns[Set annotations] : {HashMap annotationMap = Maps.newHashMap();} diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex index 99cfe888..ac2fe6f1 100644 --- a/smali/src/main/jflex/smaliLexer.flex +++ b/smali/src/main/jflex/smaliLexer.flex @@ -45,7 +45,7 @@ import static org.jf.smali.smaliParser.*; } catch (java.io.IOException e) { System.err.println("shouldn't happen: " + e.getMessage()); - return Token.EOF_TOKEN; + return newToken(EOF); } } diff --git a/smali/src/test/java/LexerTest.java b/smali/src/test/java/LexerTest.java index ec7f0119..c1b70435 100644 --- a/smali/src/test/java/LexerTest.java +++ b/smali/src/test/java/LexerTest.java @@ -30,15 +30,21 @@ import org.antlr.runtime.ANTLRInputStream; import org.antlr.runtime.CommonToken; import org.antlr.runtime.CommonTokenStream; import org.antlr.runtime.RecognitionException; -import org.jf.smali.*; -import static org.jf.smali.expectedTokensTestGrammarParser.ExpectedToken; +import org.jf.smali.expectedTokensTestGrammarLexer; +import org.jf.smali.expectedTokensTestGrammarParser; +import org.jf.smali.smaliFlexLexer; +import org.jf.smali.smaliParser; import org.junit.Assert; import org.junit.Test; -import java.io.*; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.List; +import static org.jf.smali.expectedTokensTestGrammarParser.ExpectedToken; + public class LexerTest { private static final HashMap tokenTypesByName; @@ -157,11 +163,12 @@ public class LexerTest { lexer.setSuppressErrors(true); CommonTokenStream tokenStream = new CommonTokenStream(lexer); + tokenStream.fill(); List tokens = tokenStream.getTokens(); int expectedTokenIndex = 0; CommonToken token; - for (int i=0; i