diff --git a/smali/src/main/antlr/smaliParser.g b/smali/src/main/antlr/smaliParser.g index bf84af43..1dfcabc5 100644 --- a/smali/src/main/antlr/smaliParser.g +++ b/smali/src/main/antlr/smaliParser.g @@ -129,8 +129,6 @@ tokens { OPEN_BRACE; OPEN_PAREN; PACKED_SWITCH_DIRECTIVE; - PARAM_LIST_END; - PARAM_LIST_START; PARAM_LIST_OR_ID_PRIMITIVE_TYPE; PARAMETER_DIRECTIVE; POSITIVE_INTEGER_LITERAL; @@ -582,8 +580,7 @@ method_prototype -> ^(I_METHOD_PROTOTYPE[$start, "I_METHOD_PROTOTYPE"] ^(I_METHOD_RETURN_TYPE type_descriptor) param_list?); param_list - : PARAM_LIST_START nonvoid_type_descriptor* PARAM_LIST_END -> nonvoid_type_descriptor* - | (PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE])+ + : (PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE])+ | nonvoid_type_descriptor*; array_descriptor diff --git a/smali/src/main/jflex/smaliLexer.jflex b/smali/src/main/jflex/smaliLexer.jflex index 7a1134b2..36eb2508 100644 --- a/smali/src/main/jflex/smaliLexer.jflex +++ b/smali/src/main/jflex/smaliLexer.jflex @@ -316,8 +316,8 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | {PrimitiveType} { return newToken(PRIMITIVE_TYPE); } {ClassDescriptor} { return newToken(CLASS_DESCRIPTOR); } {ArrayPrefix} { return newToken(ARRAY_TYPE_PREFIX); } - [^] { yypushback(1); yybegin(YYINITIAL); return newToken(PARAM_LIST_END); } - <> { yybegin(YYINITIAL); return newToken(PARAM_LIST_END); } + [^] { yypushback(1); yybegin(YYINITIAL);} + <> { yybegin(YYINITIAL);} } { @@ -638,9 +638,9 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | } {Type} {Type}+ { + // go back and re-lex it as a PARAM_LIST yypushback(yylength()); yybegin(PARAM_LIST); - return newToken(PARAM_LIST_START); } {SimpleName} { return newToken(SIMPLE_NAME); } diff --git a/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens b/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens index 71f9b169..f9b096fb 100644 --- a/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens +++ b/smali/src/test/resources/LexerTest/RealSmaliFileTest.tokens @@ -554,13 +554,11 @@ METHOD_DIRECTIVE(".method") ACCESS_SPEC("public") SIMPLE_NAME("setCallForwardingOption") OPEN_PAREN("(") -PARAM_LIST_START("") PRIMITIVE_TYPE("I") PRIMITIVE_TYPE("I") CLASS_DESCRIPTOR("Ljava/lang/String;") PRIMITIVE_TYPE("I") CLASS_DESCRIPTOR("Landroid/os/Message;") -PARAM_LIST_END("") CLOSE_PAREN(")") VOID_TYPE("V") REGISTERS_DIRECTIVE(".registers") @@ -705,12 +703,10 @@ CLASS_DESCRIPTOR("Lcom/android/internal/telephony/gsm/GSMPhone$MyHandler;") ARROW("->") SIMPLE_NAME("obtainMessage") OPEN_PAREN("(") -PARAM_LIST_START("") PRIMITIVE_TYPE("I") PRIMITIVE_TYPE("I") PRIMITIVE_TYPE("I") CLASS_DESCRIPTOR("Ljava/lang/Object;") -PARAM_LIST_END("") CLOSE_PAREN(")") CLASS_DESCRIPTOR("Landroid/os/Message;") INSTRUCTION_FORMAT11x("move-result-object") @@ -762,14 +758,12 @@ CLASS_DESCRIPTOR("Lcom/android/internal/telephony/CommandsInterface;") ARROW("->") SIMPLE_NAME("setCallForward") OPEN_PAREN("(") -PARAM_LIST_START("") PRIMITIVE_TYPE("I") PRIMITIVE_TYPE("I") PRIMITIVE_TYPE("I") CLASS_DESCRIPTOR("Ljava/lang/String;") PRIMITIVE_TYPE("I") CLASS_DESCRIPTOR("Landroid/os/Message;") -PARAM_LIST_END("") CLOSE_PAREN(")") VOID_TYPE("V") LINE_DIRECTIVE(".line") diff --git a/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens b/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens index 0e850f4a..b0b66dbd 100644 --- a/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens +++ b/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens @@ -53,42 +53,32 @@ PARAM_LIST_OR_ID_PRIMITIVE_TYPE("J") PARAM_LIST_OR_ID_PRIMITIVE_TYPE("F") PARAM_LIST_OR_ID_PRIMITIVE_TYPE("D") -PARAM_LIST_START("") PRIMITIVE_TYPE("I") CLASS_DESCRIPTOR("La;") ARRAY_TYPE_PREFIX("[") CLASS_DESCRIPTOR("La;") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("I") -PARAM_LIST_END("") -PARAM_LIST_START("") CLASS_DESCRIPTOR("Ljava/lang/String;") CLASS_DESCRIPTOR("Ljava/lang/String;") -PARAM_LIST_END("") -PARAM_LIST_START("") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("I") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("I") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("I") -PARAM_LIST_END("") -PARAM_LIST_START("") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("I") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("Z") -PARAM_LIST_END("") -PARAM_LIST_START("") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("I") ARRAY_TYPE_PREFIX("[") CLASS_DESCRIPTOR("Ljava/lang/String;") -PARAM_LIST_END("") MEMBER_NAME("") MEMBER_NAME("") diff --git a/smalidea/src/main/antlr3/smalideaParser.g b/smalidea/src/main/antlr3/smalideaParser.g index 1d18269d..e9a7dd60 100644 --- a/smalidea/src/main/antlr3/smalideaParser.g +++ b/smalidea/src/main/antlr3/smalideaParser.g @@ -477,8 +477,7 @@ colon } param_list_inner - : ((PARAM_LIST_START param* PARAM_LIST_END) - | (param+)); + : param+; catch [RecognitionException re] { Marker errorMarker = mark(); recover(input, re); @@ -509,8 +508,7 @@ param_list_reference @init { Marker marker = mark(); } - : ((PARAM_LIST_START nonvoid_type_descriptor* PARAM_LIST_END) - | (nonvoid_type_descriptor)*) + : nonvoid_type_descriptor* { marker.done(SmaliElementTypes.METHOD_REFERENCE_PARAM_LIST); }; catch [RecognitionException re] { recover(input, re); diff --git a/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java b/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java index 18bd35a1..83327649 100644 --- a/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java +++ b/smalidea/src/main/java/org/jf/smalidea/SmaliTokens.java @@ -141,8 +141,6 @@ public class SmaliTokens { @SuppressWarnings({"UnusedDeclaration"}) public static IElementType OPEN_BRACE; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType OPEN_PAREN; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType PACKED_SWITCH_DIRECTIVE; - @SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAM_LIST_END; - @SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAM_LIST_START; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAM_LIST_OR_ID_PRIMITIVE_TYPE; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAMETER_DIRECTIVE; @SuppressWarnings({"UnusedDeclaration"}) public static IElementType POSITIVE_INTEGER_LITERAL; @@ -261,9 +259,7 @@ public class SmaliTokens { tokenColors.put("OPEN_BRACE", SmaliHighlightingColors.BRACES); tokenColors.put("OPEN_PAREN", SmaliHighlightingColors.PARENS); tokenColors.put("PACKED_SWITCH_DIRECTIVE", SmaliHighlightingColors.DIRECTIVE); - tokenColors.put("PARAM_LIST_END", SmaliHighlightingColors.TYPE); tokenColors.put("PARAM_LIST_OR_ID_PRIMITIVE_TYPE", SmaliHighlightingColors.TYPE); - tokenColors.put("PARAM_LIST_START", SmaliHighlightingColors.TYPE); tokenColors.put("PARAMETER_DIRECTIVE", SmaliHighlightingColors.DIRECTIVE); tokenColors.put("POSITIVE_INTEGER_LITERAL", SmaliHighlightingColors.NUMBER); tokenColors.put("PRIMITIVE_TYPE", SmaliHighlightingColors.TYPE); diff --git a/smalidea/testData/InvalidMethodReference.txt b/smalidea/testData/InvalidMethodReference.txt index a3cba170..490d38cf 100644 --- a/smalidea/testData/InvalidMethodReference.txt +++ b/smalidea/testData/InvalidMethodReference.txt @@ -43,6 +43,8 @@ smali.FILE PsiWhiteSpace('\n') PsiElement(MEMBER_NAME) + PsiElement(METHOD_REFERENCE_PARAM_LIST) + PsiElement(END_METHOD_DIRECTIVE)('.end method') PsiWhiteSpace('\n\n') SmaliMethod(METHOD) @@ -85,6 +87,8 @@ smali.FILE PsiWhiteSpace('\n') PsiElement(MEMBER_NAME) + PsiElement(METHOD_REFERENCE_PARAM_LIST) + PsiElement(END_METHOD_DIRECTIVE)('.end method') PsiWhiteSpace('\n\n') SmaliMethod(METHOD)