diff --git a/src/main/grammar/JastAddAspect.bnf b/src/main/grammar/JastAddAspect.bnf index 256965b9f0a7dc7314ce59872a6ac67cb8852fcb..d967e0e51bf9d7992b01310ec78f7025b4b1ad3f 100644 --- a/src/main/grammar/JastAddAspect.bnf +++ b/src/main/grammar/JastAddAspect.bnf @@ -40,17 +40,17 @@ // aspect_body_declarations_eof ::= aspect_body_declaration* EOF -jastaddAspectFile ::= ( aspect_declaration | comment )* - -comment ::= (MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT) +//jastaddAspectFile ::= ( aspect_declaration | comment )* +// +//comment ::= (MULTI_LINE_COMMENT | DOC_COMMENT | SINGLE_LINE_COMMENT) compilation_unit ::= import_declaration* type_declaration* -import_declaration ::= IMPORT STATIC? name (DOT STAR)? SEMICOLON +import_declaration ::= IMPORT STATIC? name_name (DOT STAR)? SEMICOLON modifiers ::= (PUBLIC | STATIC | PROTECTED | PRIVATE | FINAL | ABSTRACT | SYNCHRONIZED | NATIVE | TRANSIENT | VOLATILE | STRICTFP)* -type_declaration ::= SEMICOLON | (modifiers ( class_declaration | interface_declaration | unmodified_enum_declaration | annotation_type_declaration | aspect_declaration ) ) +type_declaration ::= SEMICOLON | (modifiers ( class_declaration | interface_declaration | enum_declaration | annotation_type_declaration | aspect_declaration ) ) aspect_declaration ::= ASPECT IDENTIFIER aspect_body @@ -77,9 +77,7 @@ aspect_body_declaration ::= ( aspect_refine_inh_equation | aspect_field_declaration | aspect_cache_declaration ) -aspect_class_declaration ::= modifiers CLASS IDENTIFIER type_parameters (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? aspect_class_body - -aspect_class_body ::= class_body_declaration_in_paren // including curly braces +aspect_class_declaration ::= modifiers class_declaration aspect_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE @@ -90,17 +88,17 @@ aspect_interface_member_declaration ::= ( aspect_nested_class_declaration | aspect_interface_method_declaration | aspect_interface_field_declaration ) -aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SEMICOLON +aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? SEMICOLON -aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SEMICOLON +aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? SEMICOLON aspect_interface_method_declaration ::= (PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED )* aspect_result_type method_declarator (THROWS name_list ) SEMICOLON aspect_interface_field_declaration ::= modifiers aspect_type variable_declarator (COMMA variable_declarator)* SEMICOLON -aspect_nested_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? EXTENDS? LBRACE JAVA_INTERFACE_MEMBER_DECLARATIONS RBRACE +aspect_nested_interface_declaration ::= modifiers interface_declaration -aspect_nested_class_declaration ::= modifiers CLASS IDENTIFIER type_parameters? (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? java_class_body_declaration +aspect_nested_class_declaration ::= modifiers class_declaration aspect_method_declaration ::= modifiers type_parameters? aspect_result_type IDENTIFIER DOT method_declarator (THROWS name_list)? (block | SEMICOLON) @@ -112,9 +110,9 @@ aspect_refine_constructor_declaration ::= REFINE IDENTIFIER (PUBLIC | PROTECTED aspect_field_declaration ::= modifiers aspect_type IDENTIFIER DOT variable_declarator (COMMA variable_declarator)* SEMICOLON -aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? ( ASSIGN JAVA_EXPRESSION SEMICOLON | block | SEMICOLON ) +aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? ( ASSIGN JAVA_EXPRESSION SEMICOLON | block | SEMICOLON ) -aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SEMICOLON +aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? (CIRCULAR expression_in_brackets)? SEMICOLON aspect_rewrite ::= REWRITE IDENTIFIER (IDENTIFIER DOT IDENTIFIER LPAREN RPAREN)? LBRACE ((WHEN LPAREN JAVA_EXPRESSION RPAREN)? TO aspect_type ( JAVA_EXPRESSION SEMICOLON | block ))+ RBRACE @@ -126,7 +124,7 @@ aspect_inh_equation ::= annotation* EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (I aspect_refine_inh_equation ::= REFINE IDENTIFIER EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (INT IDENTIFIER)? RPAREN DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN JAVA_EXPRESSION | block) -collection_attribute ::= annotation* COLL aspect_type IDENTIFIER DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET JAVA_EXPRESSION RBRACKET)? (WITH IDENTIFIER)? (ROOT IDENTIFIER)? SEMICOLON +collection_attribute ::= annotation* COLL aspect_type IDENTIFIER DOT attribute_name LPAREN RPAREN CIRCULAR? (expression_in_brackets)? (WITH IDENTIFIER)? (ROOT IDENTIFIER)? SEMICOLON collection_contribution ::= annotation* CONTRIBUTES ( NTA JAVA_EXPRESSION TO IDENTIFIER DOT attribute_name LPAREN RPAREN | EACH? JAVA_EXPRESSION (WHEN JAVA_EXPRESSION)? TO IDENTIFIER DOT attribute_name LPAREN RPAREN (FOR EACH? JAVA_EXPRESSION)? | block TO IDENTIFIER DOT attribute_name LPAREN RPAREN ) SEMICOLON @@ -145,21 +143,18 @@ block_statement ::= (FINAL? type java_identifier local_variable_declaration SEMI aspect_cache_declaration ::= (CACHE | UNCACHE) IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER? (type IDENTIFIER?)* )? RPAREN SEMICOLON +java_identifier ::= IDENTIFIER | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE // Attribute type names can not start with JastAdd reserved words such as 'syn', 'eq', etc. aspect_type ::= aspect_reference_type | ( primitive_type (LBRACKET RBRACKET)? ) formal_parameters ::= LPAREN ( formal_parameter ( COMMA formal_parameter )* )? RPAREN -name_list ::= name (COMMA name)* - formal_parameter ::= FINAL? type DOTS? variable_declarator_id variable_declarator_id ::= java_identifier ( LBRACKET RBRACKET )* -java_identifier ::= IDENTIFIER | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE - -aspect_enum_declaration ::= modifiers ENUM IDENTIFIER (IMPLEMENTS type_name_list)? JAVA_ENUM_BODY +aspect_enum_declaration ::= modifiers enum_declaration variable_declarator ::= variable_declarator_id ( ASSIGN variable_initializer )? @@ -185,6 +180,80 @@ wildcard_bounds ::= (EXTENDS reference_type) | SUPER reference_type primitive_type ::= boolean | char | byte | short | int | long | float | double +result_type ::= VOID | type + +name_name ::= java_identifier (DOT java_identifier)* + +name_list ::= name_name (COMMA name_name)* + +expression ::= lambda_expression | ( conditional_expression (assignment_operator expression)? ) + +assignment_operator ::= ASSIGN | STARASSIGN | SLASHASSIGN | REMASSIGN | PLUSASSIGN | MINUSASSIGN | LSHIFTASSIGN | RSIGNEDSHIFTASSIGN | RUNSIGNEDSHIFTASSIGN | ANDASSIGN | XORASSIGN | ORASSIGN + +conditional_expression ::= conditional_or_expression ( HOOK expression COLON conditional_expression)? + +conditional_or_expression ::= conditional_and_expression ( SC_OR expression COLON conditional_expression )* + +conditional_and_expression ::= inclusive_or_expression ( SC_AND inclusive_or_expression )* + +inclusive_or_expression ::= exclusive_or_expression ( BIT_OR exclusive_or_expression )* + +exclusive_or_expression ::= and_expression ( XOR and_expression )* + +and_expression ::= equality_expression ( BIT_AND equality_expression )* + +equality_expression ::= instance_of_expression ( (EQ | NE) instance_of_expression )* + +instance_of_expression ::= relational_expression ( INSTANCEOF type )? + +relational_expression ::= shift_expression ( (LT | GT | LE | GE) shift_expression )* + +shift_expression ::= additive_expression ( ( (LSHIFT) | (GT GT GT?) ) additive_expression )* + +additive_expression ::= multiplicative_expression ( (PLUS | MINUS) multiplicative_expression )* + +multiplicative_expression ::= unary_expression ( (STAR | SLASH | REM) unary_expression )* + +unary_expression ::= ( (PLUS | MINUS) unary_expression ) | pre_increment_expression | pre_decrement_expression | unary_expression_not_plus_minus + +pre_increment_expression ::= INCR primary_expression + +pre_decrement_expression ::= DECR primary_expression + +unary_expression_not_plus_minus ::= ( (TILDE | BANG) unary_expression ) | cast_expression | postfix_expression + +postfix_expression ::= primary_expression (INCR | DECR)? + +cast_expression ::= LPAREN type RPAREN unary_expression_not_plus_minus + +primary_expression ::= primary_prefix (primary_suffix)* + +primary_prefix ::= literal | THIS | (SUPER DOT java_identifier) | (LPAREN expression RPAREN) | allocation_expression | (result_type DOT CLASS) | name_name + +primary_suffix ::= (DOT THIS) | (DOT allocation_expression) | (DOT type_arguments java_identifier) | (LBRACKET expression RBRACKET) | (DOT java_identifier) | arguments | DOUBLECOLON NEW | DOUBLECOLON java_identifier + +literal ::= INTEGER_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | boolean_literal | null_literal + +boolean_literal ::= TRUE | FALSE + +null_literal ::= NULL + +arguments ::= LPAREN argument_list RPAREN + +argument_list ::= expression (COMMA expression)* + +allocation_expression ::= ( NEW primitive_type array_dims_and_inits ) | (NEW class_or_interface_type type_arguments? (array_dims_and_inits | (arguments class_body?)) ) + +array_dims_and_inits ::= ( (LBRACKET expression RBRACKET)+ (LBRACKET RBRACKET)* ) | ( (LBRACKET RBRACKET)+ array_initializer ) + +lambda_expression ::= lambda_parameters ARROW ( expression | block ) + +lambda_parameters ::= name_name | (LPAREN (typed_lambda_parameter | untyped_lambda_parameter)? RPAREN) + +typed_lambda_parameter ::= type name_name (COMMA type name_name)* + +untyped_lambda_parameter ::= name_name (COMMA name_name)* + local_variable_declaration ::= FINAL? type variable_declarator (COMMA variable_declarator)* type_parameters ::= LT type_parameter (COMMA type_parameter)* GT @@ -197,24 +266,43 @@ aspect_result_type ::= VOID | aspect_type method_declarator ::= java_identifier formal_parameters (LBRACKET RBRACKET)* +// TODO maybe change order! annotation ::= ( normal_annotation | single_member_annotation | marker_annotation ) -normal_annotation ::= AT name java_member_value_pairs_in_paren -marker_annotation ::= AT name -single_member_annotation ::= AT name java_member_value_in_paren // island things -class_body_declaration_in_paren ::= JAVA_IN_PAREN +//class_body_declaration_in_paren ::= JAVA_IN_PAREN //{ // implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlockExtension" // extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension" //} -java_member_value_in_paren ::= JAVA_IN_PAREN // LPAREN member_value RPAREN +// should be parsed after circular and in collection attributes +expression_in_brackets ::= LBRACKET_ANYTHING_RBRACKET // LBRACKET expression RBRACKET + +// at symbol only in these rules +marker_annotation ::= AT_NAME +normal_annotation ::= AT_NAME_LPAREN_ANYTHING_RPAREN // TODO! +single_member_annotation ::= AT_NAME_LPAREN_ANYTHING_RPAREN // TODO! +annotation_type_declaration ::= AT_INTERFACE_ANYTHING_LBRACE_ANYTHING_RBRACE // AT INTERFACE java_indentifier LBRACE annotation_type_member_declaration RBRACE + + +// previous token must not be DOT! +class_declaration ::= CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE // CLASS IDENTIFIER (EXTENDS class_or_type_interface)? (implements type_name_list)? LBRACE class_body_declaration RBRACE + +// must not be directly in an aspect, but can be in a class or interface (or enum?) in an aspect +interface_declaration ::= INTERFACE_ANYTHING_LBRACE_ANYTHING_RBRACE // INTERFACE java_indentifier LBRACE interface_member_declaration RBRACE + +// can be anywhere +enum_declaration ::= ENUM_ANYTHING_LPAREN_ANYTHING_RPAREN // ENUM java_identifier (implements type_name_list)? LBRACE enum_constant (COMMA enum_constant)* (SEMICOLON class_body_declaration* )? RBRACE + + + +// TODO unsupported -java_member_value_pairs_in_paren ::= JAVA_IN_PAREN // LPAREN member_value_pairs? RPAREN +class_body ::= CLASS_BODY_UNSUPPORTED diff --git a/src/main/grammar/JastAddAspect.flex b/src/main/grammar/JastAddAspect.flex index 2120cab7c3864636ffb3fe10e468d897cd49de75..07135a56e8ba0861a53ef315c810c47862aedb76 100644 --- a/src/main/grammar/JastAddAspect.flex +++ b/src/main/grammar/JastAddAspect.flex @@ -30,10 +30,10 @@ MultiLineComment = "/*" [^*]+ [*]+([^*/][^*]*[*]+)*[/] NotParenthesis = [^{}]+ // from jjt -// DecimalLiteral = [1-9] [0-9]* -// HexLiteral = 0 [xX] [0-9a-fA-F]+ -// OctalLiteral = 0 [0-7]* -// IntegerLiteral = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]? +DecimalLiteral = [1-9] [0-9]* +HexLiteral = 0 [xX] [0-9a-fA-F]+ +OctalLiteral = 0 [0-7]* +IntegerLiteral = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]? Exponent = [eE] [+-]? [0-9]+ FloatingPointLiteral = [0-9]+ "." [0-9]* {Exponent}? [fFdD]? @@ -93,9 +93,9 @@ Identifier = [:jletter:] [:jletterdigit:]* //"do" { return JastAddAspectTypes.DO; } "double" { return JastAddAspectTypes.DOUBLE; } //"else" { return JastAddAspectTypes.ELSE; } - "enum" { return JastAddAspectTypes.ENUM; } +//"enum" { return JastAddAspectTypes.ENUM; } "extends" { return JastAddAspectTypes.EXTENDS; } -//"false" { return JastAddAspectTypes.FALSE; } + "false" { return JastAddAspectTypes.FALSE; } "final" { return JastAddAspectTypes.FINAL; } //"finally" { return JastAddAspectTypes.FINALLY; } "float" { return JastAddAspectTypes.FLOAT; } @@ -104,13 +104,13 @@ Identifier = [:jletter:] [:jletterdigit:]* //"if" { return JastAddAspectTypes.IF; } "implements" { return JastAddAspectTypes.IMPLEMENTS; } "import" { return JastAddAspectTypes.IMPORT; } -//"instanceof" { return JastAddAspectTypes.INSTANCEOF; } + "instanceof" { return JastAddAspectTypes.INSTANCEOF; } "int" { return JastAddAspectTypes.INT; } "interface" { return JastAddAspectTypes.INTERFACE; } "long" { return JastAddAspectTypes.LONG; } "native" { return JastAddAspectTypes.NATIVE; } //"new" { return JastAddAspectTypes.NEW; } -//"null" { return JastAddAspectTypes.NULL; } + "null" { return JastAddAspectTypes.NULL; } //"package" { return JastAddAspectTypes.PACKAGE; } "private" { return JastAddAspectTypes.PRIVATE; } "protected" { return JastAddAspectTypes.PROTECTED; } @@ -126,7 +126,7 @@ Identifier = [:jletter:] [:jletterdigit:]* //"throw" { return JastAddAspectTypes.THROW; } "throws" { return JastAddAspectTypes.THROWS; } "transient" { return JastAddAspectTypes.TRANSIENT; } -//"true" { return JastAddAspectTypes.TRUE; } + "true" { return JastAddAspectTypes.TRUE; } //"try" { return JastAddAspectTypes.TRY; } "void" { return JastAddAspectTypes.VOID; } "volatile" { return JastAddAspectTypes.VOLATILE; } @@ -161,10 +161,10 @@ Identifier = [:jletter:] [:jletterdigit:]* <YYINITIAL, COLLECTION_DECL> { // LITERALS -//{IntegerLiteral} { return JastAddAspectTypes.INTEGER_LITERAL; } -//{FloatingPointLiteral} { return JastAddAspectTypes.FLOATING_POINT_LITERAL; } -//{CharacterLiteral} { return JastAddAspectTypes.CHARACTER_LITERAL; } -//{StringLiteral} { return JastAddAspectTypes.STRING_LITERAL; } + {IntegerLiteral} { return JastAddAspectTypes.INTEGER_LITERAL; } + {FloatingPointLiteral} { return JastAddAspectTypes.FLOATING_POINT_LITERAL; } + {CharacterLiteral} { return JastAddAspectTypes.CHARACTER_LITERAL; } + {StringLiteral} { return JastAddAspectTypes.STRING_LITERAL; } // IDENTIFIERS {Identifier} { return JastAddAspectTypes.IDENTIFIER; } @@ -182,43 +182,43 @@ Identifier = [:jletter:] [:jletterdigit:]* "@" { return JastAddAspectTypes.AT; } // OPERATORS -//"=" { return JastAddAspectTypes.ASSIGN; } + "=" { return JastAddAspectTypes.ASSIGN; } "<" { return JastAddAspectTypes.LT; } -//"!" { return JastAddAspectTypes.BANG; } -//"~" { return JastAddAspectTypes.TILDE; } -//"?" { return JastAddAspectTypes.HOOK; } -//":" { return JastAddAspectTypes.COLON; } -//"==" { return JastAddAspectTypes.EQ; } -//"<=" { return JastAddAspectTypes.LE; } -//">=" { return JastAddAspectTypes.GE; } -//"!=" { return JastAddAspectTypes.NE; } -//"||" { return JastAddAspectTypes.SC_OR; } -//"&&" { return JastAddAspectTypes.SC_AND; } -//"++" { return JastAddAspectTypes.INCR; } -//"--" { return JastAddAspectTypes.DECR; } -//"+" { return JastAddAspectTypes.PLUS; } -//"-" { return JastAddAspectTypes.MINUS; } + "!" { return JastAddAspectTypes.BANG; } + "~" { return JastAddAspectTypes.TILDE; } + "?" { return JastAddAspectTypes.HOOK; } + ":" { return JastAddAspectTypes.COLON; } + "==" { return JastAddAspectTypes.EQ; } + "<=" { return JastAddAspectTypes.LE; } + ">=" { return JastAddAspectTypes.GE; } + "!=" { return JastAddAspectTypes.NE; } + "||" { return JastAddAspectTypes.SC_OR; } + "&&" { return JastAddAspectTypes.SC_AND; } + "++" { return JastAddAspectTypes.INCR; } + "--" { return JastAddAspectTypes.DECR; } + "+" { return JastAddAspectTypes.PLUS; } + "-" { return JastAddAspectTypes.MINUS; } "*" { return JastAddAspectTypes.STAR; } -//"/" { return JastAddAspectTypes.SLASH; } -//"&" { return JastAddAspectTypes.BIT_AND; } -//"|" { return JastAddAspectTypes.BIT_OR; } -//"^" { return JastAddAspectTypes.XOR; } -//"%" { return JastAddAspectTypes.REM; } -//"<<" { return JastAddAspectTypes.LSHIFT; } -//"+=" { return JastAddAspectTypes.PLUSASSIGN; } -//"-=" { return JastAddAspectTypes.MINUSASSIGN; } -//"*=" { return JastAddAspectTypes.STARASSIGN; } -//"/=" { return JastAddAspectTypes.SLASHASSIGN; } -//"&=" { return JastAddAspectTypes.ANDASSIGN; } -//"|=" { return JastAddAspectTypes.ORASSIGN; } -//"^=" { return JastAddAspectTypes.XORASSIGN; } -//"%=" { return JastAddAspectTypes.REMASSIGN; } -//"<<=" { return JastAddAspectTypes.LSHIFTASSIGN; } -//">>=" { return JastAddAspectTypes.RSIGNEDSHIFTASSIGN; } -//">>>=" { return JastAddAspectTypes.RUNSIGNEDSHIFTASSIGN; } + "/" { return JastAddAspectTypes.SLASH; } + "&" { return JastAddAspectTypes.BIT_AND; } + "|" { return JastAddAspectTypes.BIT_OR; } + "^" { return JastAddAspectTypes.XOR; } + "%" { return JastAddAspectTypes.REM; } + "<<" { return JastAddAspectTypes.LSHIFT; } + "+=" { return JastAddAspectTypes.PLUSASSIGN; } + "-=" { return JastAddAspectTypes.MINUSASSIGN; } + "*=" { return JastAddAspectTypes.STARASSIGN; } + "/=" { return JastAddAspectTypes.SLASHASSIGN; } + "&=" { return JastAddAspectTypes.ANDASSIGN; } + "|=" { return JastAddAspectTypes.ORASSIGN; } + "^=" { return JastAddAspectTypes.XORASSIGN; } + "%=" { return JastAddAspectTypes.REMASSIGN; } + "<<=" { return JastAddAspectTypes.LSHIFTASSIGN; } + ">>=" { return JastAddAspectTypes.RSIGNEDSHIFTASSIGN; } + ">>>=" { return JastAddAspectTypes.RUNSIGNEDSHIFTASSIGN; } //"..." { return JastAddAspectTypes.ELLIPSIS; } -//"->" { return JastAddAspectTypes.ARROW; } -//"::" { return JastAddAspectTypes.DOUBLECOLON; } + "->" { return JastAddAspectTypes.ARROW; } + "::" { return JastAddAspectTypes.DOUBLECOLON; } // TODO RUNSIGNEDSHIFT >>> and RSIGNEDSHIFT >> are not parsed diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java index 7a749b6acc908ba9305e764fbb83c093fd19e981..8e9ce5c8b187dc668deca297009558e10789506d 100644 --- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java +++ b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java @@ -19,7 +19,8 @@ import org.jetbrains.annotations.NotNull; public class JastAddAspectParserDefinition implements ParserDefinition { public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE); - public static final TokenSet COMMENTS = TokenSet.create(JastAddAspectTypes.COMMENT); + public static final TokenSet COMMENTS = TokenSet.create(JastAddAspectTypes.SINGLE_LINE_COMMENT, JastAddAspectTypes.MULTI_LINE_COMMENT, JastAddAspectTypes.FORMAL_COMMENT); + public static final TokenSet STRING_LITERALS = TokenSet.create(JastAddAspectTypes.STRING_LITERAL); public static final IFileElementType FILE = new IFileElementType(JastAddAspectLanguage.INSTANCE); @@ -44,7 +45,7 @@ public class JastAddAspectParserDefinition implements ParserDefinition { @NotNull @Override public TokenSet getStringLiteralElements() { - return TokenSet.EMPTY; + return STRING_LITERALS; } @NotNull diff --git a/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java b/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java index c2a7cb99dc4d9b7b02d792021d454b5a1dacceb0..609f83528ec73a718569295fc67a166e571376f5 100644 --- a/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java +++ b/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java @@ -6,7 +6,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.InjectedLanguagePlaces; import com.intellij.psi.LanguageInjector; import com.intellij.psi.PsiLanguageInjectionHost; -import org.jastadd.tooling.aspect.psi.JastAddAspectClassBodyDeclarationInParen; +import org.jastadd.tooling.aspect.psi.*; import org.jetbrains.annotations.NotNull; public class JavaBlockLanguageInjector implements LanguageInjector { @@ -21,9 +21,23 @@ public class JavaBlockLanguageInjector implements LanguageInjector { */ @Override public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost host, @NotNull InjectedLanguagePlaces injectionPlacesRegistrar) { - if (host.isValidHost() && host instanceof JastAddAspectClassBodyDeclarationInParen) { - System.out.println(host.getText()); - injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m(){", "}"); + if (host.isValidHost()) { + if (host instanceof JastAddAspectExpressionInBrackets) { + // TODO + injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m(){", "}"); + } else if (host instanceof JastAddAspectNormalAnnotation) { + // TODO + } else if (host instanceof JastAddAspectSingleMemberAnnotation) { + // TODO + } else if (host instanceof JastAddAspectClassDeclaration) { + // TODO + } else if (host instanceof JastAddAspectInterfaceDeclaration) { + // TODO + } else if (host instanceof JastAddAspectEnumDeclaration) { + // TODO + } else if (host instanceof JastAddAspectAnnotationTypeDeclaration) { + // TODO + } } } }