Skip to content
Snippets Groups Projects
Commit 191eb4ff authored by Johannes Mey's avatar Johannes Mey
Browse files

WIP

parent 097a80cf
No related branches found
No related tags found
No related merge requests found
...@@ -11,11 +11,23 @@ ...@@ -11,11 +11,23 @@
elementTypeHolderClass="org.jastadd.tooling.aspect.psi.JastAddAspectTypes" elementTypeHolderClass="org.jastadd.tooling.aspect.psi.JastAddAspectTypes"
elementTypeClass="org.jastadd.tooling.aspect.JastAddAspectElementType" elementTypeClass="org.jastadd.tooling.aspect.JastAddAspectElementType"
tokenTypeClass="org.jastadd.tooling.aspect.JastAddAspectTokenType" tokenTypeClass="org.jastadd.tooling.aspect.JastAddAspectTokenType"
tokens = [
WhiteSpace = 'regexp:[ \t\n\r\f]'
SingleLineComment = 'regexp:[/][/] [^\n\r]* (\n | \r | \r\n)'
FormalComment = 'regexp:[/][*][*] [^*]* [*]+([^*/][^*]*[*]+)*[/]'
MultiLineComment = 'regexp:[/][*] [^*]+ [*]+([^*/][^*]*[*]+)*[/]'
NotParenthesis = 'regexp:[^{}]+'
MULTI_LINE_COMMENT = 'regexp:[/][*] [^*]+ [*]+([^*/][^*]*[*]+)*[/]'
FORMAL_COMMENT = 'regexp:[/][*][*] [^*]* [*]+([^*/][^*]*[*]+)*[/]'
SINGLE_LINE_COMMENT = 'regexp:[/][/] [^\n\r]* (\n | \r | \r\n)'
]
} }
jastaddAspectFile ::= (aspect_declaration|comment)*
comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
//attribute_equation ::= EQ java_block //attribute_equation ::= EQ java_block
// //
...@@ -25,7 +37,22 @@ comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT) ...@@ -25,7 +37,22 @@ comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
// extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension" // extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension"
//} //}
aspect_declaration ::= ASPECT aspect_body // aspect_body_declarations_eof ::= aspect_body_declaration* EOF
jastaddAspectFile ::= ( aspect_declaration | comment )*
comment ::= (MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
compilation_unit ::= import_declaration* type_declaration*
import_declaration ::= IMPORT STATIC? 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 ) )
aspect_declaration ::= ASPECT IDENTIFIER aspect_body
aspect_body ::= LBRACE aspect_body_declaration* RBRACE aspect_body ::= LBRACE aspect_body_declaration* RBRACE
...@@ -50,13 +77,11 @@ aspect_body_declaration ::= ( aspect_refine_inh_equation ...@@ -50,13 +77,11 @@ aspect_body_declaration ::= ( aspect_refine_inh_equation
| aspect_field_declaration | aspect_field_declaration
| aspect_cache_declaration ) | aspect_cache_declaration )
aspect_body_declarations_eof ::= aspect_body_declaration* EOF aspect_class_declaration ::= modifiers CLASS IDENTIFIER type_parameters (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? aspect_class_body
aspect_class_declaration ::= modifiers CLASS id type_parameters (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? aspect_class_body
aspect_class_body ::= JAVA_CLASS_BODY_DECLARATION // including curly braces aspect_class_body ::= class_body_declaration_in_paren // including curly braces
aspect_interface_declaration ::= modifiers INTERFACE id type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE aspect_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE
aspect_interface_member_declaration ::= ( aspect_nested_class_declaration aspect_interface_member_declaration ::= ( aspect_nested_class_declaration
| aspect_nested_interface_declaration | aspect_nested_interface_declaration
...@@ -65,62 +90,61 @@ aspect_interface_member_declaration ::= ( aspect_nested_class_declaration ...@@ -65,62 +90,61 @@ aspect_interface_member_declaration ::= ( aspect_nested_class_declaration
| aspect_interface_method_declaration | aspect_interface_method_declaration
| aspect_interface_field_declaration ) | aspect_interface_field_declaration )
aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type ID (COMMA type ID)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SCOL 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_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type ID (COMMA type ID)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SCOL 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_method_declaration ::= (PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED )* aspect_result_type method_declarator (THROWS name_list ) SCOL 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)* SCOL aspect_interface_field_declaration ::= modifiers aspect_type variable_declarator (COMMA variable_declarator)* SEMICOLON
aspect_nested_interface_declaration ::= modifiers INTERFACE ID type_parameters? EXTENDS? LBRACE JAVA_INTERFACE_MEMBER_DECLARATIONS RBRACE aspect_nested_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? EXTENDS? LBRACE JAVA_INTERFACE_MEMBER_DECLARATIONS RBRACE
aspect_nested_class_declaration ::= modifiers CLASS ID type_parameters? (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? JAVA_CLASS_BODY_DECLARATION aspect_nested_class_declaration ::= modifiers CLASS IDENTIFIER type_parameters? (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? java_class_body_declaration
aspect_method_declaration ::= modifiers type_parameters? aspect_result_type ID DOT method_declarator (THROWS name_list)? (block | SCOL) aspect_method_declaration ::= modifiers type_parameters? aspect_result_type IDENTIFIER DOT method_declarator (THROWS name_list)? (block | SEMICOLON)
aspect_refine_method_declaration ::= REFINE [ID] modifers type_parameters? aspect_result_type ID DOT method_declarator (THROWS name_list)? (block | SCOL) aspect_refine_method_declaration ::= REFINE [IDENTIFIER] modifers type_parameters? aspect_result_type IDENTIFIER DOT method_declarator (THROWS name_list)? (block | SEMICOLON)
aspect_constructor_declaration ::= modifiers ID DOT ID formal_parameters (THROWS name_list)? LBRACE JAVA_EXPLICIT_CONSTRUCTUR_BLOCK RBRACE aspect_constructor_declaration ::= modifiers IDENTIFIER DOT IDENTIFIER formal_parameters (THROWS name_list)? LBRACE JAVA_EXPLICIT_CONSTRUCTUR_BLOCK RBRACE
aspect_refine_constructor_declaration ::= REFINE ID (PUBLIC | PROTECTED | PRIVATE) ID DOT ID formal_parameters (THROWS name_list)? LBRACE block_statement* RBRACE aspect_refine_constructor_declaration ::= REFINE IDENTIFIER (PUBLIC | PROTECTED | PRIVATE) IDENTIFIER DOT IDENTIFIER formal_parameters (THROWS name_list)? LBRACE block_statement* RBRACE
aspect_field_declaration ::= modifiers aspect_type ID DOT variable_declarator (COMMA variable_declarator)* SCOL 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 ID DOT attribute_name LPAREN type ID (COMMA type ID)* RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? ( EQ JAVA_EXPRESSION SCOL | block | SCOL ) 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_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type ID DOT attribute_name LPAREN (type ID (COMMA type ID)* )? (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SCOL 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_rewrite ::= REWRITE ID (ID DOT ID LPAREN RPAREN)? LBRACE ((WHEN LPAREN JAVA_EXPRESSION RPAREN)? TO aspect_type ( JAVA_EXPRESSION SCOL | block ))+ RBRACE aspect_rewrite ::= REWRITE IDENTIFIER (IDENTIFIER DOT IDENTIFIER LPAREN RPAREN)? LBRACE ((WHEN LPAREN JAVA_EXPRESSION RPAREN)? TO aspect_type ( JAVA_EXPRESSION SEMICOLON | block ))+ RBRACE
aspect_syn_equation ::= annotation* ID DOT attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN ( EQ JAVA_EXPRESSION SCOL | block ) aspect_syn_equation ::= annotation* EQUATION IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN ( ASSIGN JAVA_EXPRESSION SEMICOLON | block )
aspect_refine_syn_equation ::= REFINE ID EQ ID attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN (EQ JAVA_EXPRESSION SCOL | block) aspect_refine_syn_equation ::= REFINE IDENTIFIER EQUATION IDENTIFIER attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN JAVA_EXPRESSION SEMICOLON | block)
aspect_inh_equation ::= annotation* EQ ID DOT ID LPAREN (INT ID)? DOT attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN (EQ JAVA_EXPRESSION | block) aspect_inh_equation ::= annotation* EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (INT IDENTIFIER)? DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN JAVA_EXPRESSION | block)
aspect_refine_inh_equation ::= REFINE ID EQ ID DOT ID LPAREN (INT ID)? RPAREN DOT attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN (EQ JAVA_EXPRESSION | block) 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 ID DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET JAVA_EXPRESSION RBRACKET)? (WITH ID)? (ROOT ID)? SCOL collection_attribute ::= annotation* COLL aspect_type IDENTIFIER DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET JAVA_EXPRESSION RBRACKET)? (WITH IDENTIFIER)? (ROOT IDENTIFIER)? SEMICOLON
collection_contribution ::= annotation* CONTRIBUTES ( NTA JAVA_EXPRESSION TO ID DOT attribute_name LPAREN RPAREN | EACH? JAVA_EXPRESSION (WHEN JAVA_EXPRESSION)? TO ID DOT attribute_name LPAREN RPAREN (FOR EACH? JAVA_EXPRESSION)? | block TO ID DOT attribute_name LPAREN RPAREN ) SCOL 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
aspect_add_interface ::= IO IMPLEMENTS type_name_list SCOL aspect_add_interface ::= IO IMPLEMENTS type_name_list SEMICOLON
aspect_extend_interface ::= ID EXTENDS type_name_list SCOL aspect_extend_interface ::= IDENTIFIER EXTENDS type_name_list SEMICOLON
// added // added
type_name_list ::= class_or_interface_type (COMMA class_or_interface_type)* type_name_list ::= class_or_interface_type (COMMA class_or_interface_type)*
attribute_name ::= ID attribute_name ::= IDENTIFIER
// TODO | UnmodifiedClassDeclaration("") // TODO | UnmodifiedClassDeclaration("")
block_statement ::= (FINAL? type java_identifier local_variable_declaration SCOL) | statement block_statement ::= (FINAL? type java_identifier local_variable_declaration SEMICOLON) | statement
aspect_cache_declaration ::= (CACHE | UNCACHE) ID DOT attribute_name LPAREN (type ID? (type ID?)* )? RPAREN SCOL aspect_cache_declaration ::= (CACHE | UNCACHE) IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER? (type IDENTIFIER?)* )? RPAREN SEMICOLON
modifiers ::= (PUBLIC | STATIC | PROTECTED | PRIVATE | FINAL | ABSTRACT | SYNCHRONIZED | NATIVE | TRANSIENT | VOLATILE | STRICTFP)*
// Attribute type names can not start with JastAdd reserved words such as 'syn', 'eq', etc. // Attribute type names can not start with JastAdd reserved words such as 'syn', 'eq', etc.
aspect_type ::= aspect_reference_type | ( primitive_type (LBRACKET RBRACKET)? ) aspect_type ::= aspect_reference_type | ( primitive_type (LBRACKET RBRACKET)? )
...@@ -133,35 +157,37 @@ formal_parameter ::= FINAL? type DOTS? variable_declarator_id ...@@ -133,35 +157,37 @@ formal_parameter ::= FINAL? type DOTS? variable_declarator_id
variable_declarator_id ::= java_identifier ( LBRACKET RBRACKET )* variable_declarator_id ::= java_identifier ( LBRACKET RBRACKET )*
java_identifier ::= ID | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE java_identifier ::= IDENTIFIER | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE
aspect_enum_declaration ::= modifiers ENUM ID (IMPLEMENTS type_name_list)? JAVA_ENUM_BODY aspect_enum_declaration ::= modifiers ENUM IDENTIFIER (IMPLEMENTS type_name_list)? JAVA_ENUM_BODY
variable_declarator ::= variable_declarator_id ( EQ variable_initializer )? variable_declarator ::= variable_declarator_id ( ASSIGN variable_initializer )?
variable_initializer ::= array_initializer | expression variable_initializer ::= array_initializer | expression
array_initializer ::= LBRACE ( variable_initializer (COMMA variable_initializer)* )? RBRACE array_initializer ::= LBRACE ( variable_initializer (COMMA variable_initializer)* )? RBRACE
primitive_type ::= boolean | char | byte | short | int | long | float | double aspect_reference_type ::= aspect_class_or_interface_type (LBRACKET RBRACKET)*
aspect_class_or_interface_type ::= IDENTIFIER type_arguments? (DOT java_identifier type_arguments? )*
type ::= reference_type | primitive_type
reference_type ::= ( primitive_type (LBRACKET RBRACKET)+ ) | ( class_or_interface_type (LBRACKET RBRACKET)* )
class_or_interface_type ::= java_identifier type_arguments? (DOT java_identifier type_arguments? )* class_or_interface_type ::= java_identifier type_arguments? (DOT java_identifier type_arguments? )*
type_arguments ::= LESSTHAN (type_argument (COMMA type_argument)* )? MORETHAN type_arguments ::= LT (type_argument (COMMA type_argument)* )? GT
type_argument ::= reference_type | (QUESTIONMARK wildcard_bounds?) type_argument ::= reference_type | (QUESTIONMARK wildcard_bounds?)
wildcard_bounds ::= (EXTENDS reference_type) | SUPER reference_type wildcard_bounds ::= (EXTENDS reference_type) | SUPER reference_type
reference_type ::= ( primitive_type (LBRACKET RBRACKET)+ ) | ( class_or_interface_type (LBRACKET RBRACKET)* ) primitive_type ::= boolean | char | byte | short | int | long | float | double
aspect_reference_type ::= aspect_class_or_interface_type (LBRACKET RBRACKET)*
aspect_class_or_interface_type ::= ID type_arguments? (DOT java_identifier type_arguments? )*
local_variable_declaration ::= FINAL? type variable_declarator (COMMA variable_declarator)* local_variable_declaration ::= FINAL? type variable_declarator (COMMA variable_declarator)*
type_parameters ::= LESSTHAN type_parameter (COMMA type_parameter)* GREATERTHAN type_parameters ::= LT type_parameter (COMMA type_parameter)* GT
type_parameter ::= java_identifier type_bound? type_parameter ::= java_identifier type_bound?
...@@ -171,3 +197,24 @@ aspect_result_type ::= VOID | aspect_type ...@@ -171,3 +197,24 @@ aspect_result_type ::= VOID | aspect_type
method_declarator ::= java_identifier formal_parameters (LBRACKET RBRACKET)* method_declarator ::= java_identifier formal_parameters (LBRACKET RBRACKET)*
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
//{
// 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
java_member_value_pairs_in_paren ::= JAVA_IN_PAREN // LPAREN member_value_pairs? RPAREN
...@@ -19,87 +19,120 @@ import com.intellij.psi.TokenType; ...@@ -19,87 +19,120 @@ import com.intellij.psi.TokenType;
private int counter = 0; private int counter = 0;
%} %}
WhiteSpace = [ \t\n\r\f]
WhiteSpace = [ ] | \t | \f | \n | \r | \r\n // TODO what is /**/ in Java? Is this caputered here?
//ID = [a-zA-Z$_][a-zA-Z0-9$_]* SingleLineComment = "//" [^\n\r]* (\n | \r | \r\n)
//MultiLineComment = [/][*][^*]+[*]+([^*/][^*]*[*]+)*[/] FormalComment = "/**" [^*]* [*]+([^*/][^*]*[*]+)*[/]
//DocComment = [/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/] MultiLineComment = "/*" [^*]+ [*]+([^*/][^*]*[*]+)*[/]
//SingleLineComment = [/][/] [^\n\r]* (\n | \r | \r\n)
NotParenthesis = [^{}]*
%state JAVA
NotParenthesis = [^{}]+
// from jjt
// 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]?
| "." [0-9]+ {Exponent}? [fFdD]?
| [0-9]+ {Exponent} [fFdD]?
| [0-9]+ {Exponent}? [fFdD]
CharacterLiteral = ' ( [^'\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) ) '
StringLiteral = \" ( [^\"\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) )* \"
Identifier = [:jletter:] [:jletterdigit:]*
%state JASTADD
%state EXPECT_JAVA_IN_PAREN
%state JAVA_IN_PAREN
%state COLLECTION_DECL
%% %%
<YYINITIAL> { <YYINITIAL> {
{WhiteSpace}+ {} {WhiteSpace}+ { return TokenType.WHITE_SPACE; }
"EQ" { yybegin(YYINITIAL); return JastAddAspectTypes.EQ; } {SingleLineComment} { return JastAddAspectTypes.SINGLE_LINE_COMMENT; }
"{" { yybegin(JAVA); counter = 1; } {FormalComment} { return JastAddAspectTypes.FORMAL_COMMENT; }
{MultiLineComment} { return JastAddAspectTypes.MULTI_LINE_COMMENT; }
// "EQ" { yybegin(YYINITIAL); return JastAddAspectTypes.EQ; }
// "{" { yybegin(JAVA); counter = 1; }
} }
<JAVA_PARENTHESIS_BLOCK> { <EXPECT_JAVA_IN_PAREN> {
"{" { yybegin(JAVA_IN_PAREN); counter = 1; }
}
<JAVA_IN_PAREN> {
{SingleLineComment} {}
{FormalComment} {}
{MultiLineComment} {}
{CharacterLiteral} {}
{StringLiteral} {}
{NotParenthesis} {} {NotParenthesis} {}
"{" { counter++; yybegin(JAVA); } "{" { counter++; }
"}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.JAVABLOCK; } } "}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.JAVA_IN_PAREN; } }
} }
<JAVATOKENS> { <YYINITIAL,COLLECTION_DECL> {
"abstract" { return JastAddAspectTypes.ABSTRACT; } "abstract" { return JastAddAspectTypes.ABSTRACT; }
"assert" { return JastAddAspectTypes.ASSERT; } //"assert" { return JastAddAspectTypes.ASSERT; }
"boolean" { return JastAddAspectTypes.BOOLEAN; } "boolean" { return JastAddAspectTypes.BOOLEAN; }
"break" { return JastAddAspectTypes.BREAK; } //"break" { return JastAddAspectTypes.BREAK; }
"byte" { return JastAddAspectTypes.BYTE; } "byte" { return JastAddAspectTypes.BYTE; }
"case" { return JastAddAspectTypes.CASE; } //"case" { return JastAddAspectTypes.CASE; }
"catch" { return JastAddAspectTypes.CATCH; } //"catch" { return JastAddAspectTypes.CATCH; }
"char" { return JastAddAspectTypes.CHAR; } "char" { return JastAddAspectTypes.CHAR; }
"class" { return JastAddAspectTypes.CLASS; } "class" { return JastAddAspectTypes.CLASS; }
"const" { return JastAddAspectTypes.CONST; } //"const" { return JastAddAspectTypes.CONST; }
"continue" { return JastAddAspectTypes.CONTINUE; } //"continue" { return JastAddAspectTypes.CONTINUE; }
"default" { return JastAddAspectTypes._DEFAULT; } //"default" { return JastAddAspectTypes._DEFAULT; }
"do" { return JastAddAspectTypes.DO; } //"do" { return JastAddAspectTypes.DO; }
"double" { return JastAddAspectTypes.DOUBLE; } "double" { return JastAddAspectTypes.DOUBLE; }
"else" { return JastAddAspectTypes.ELSE; } //"else" { return JastAddAspectTypes.ELSE; }
"enum" { return JastAddAspectTypes.ENUM; } "enum" { return JastAddAspectTypes.ENUM; }
"extends" { return JastAddAspectTypes.EXTENDS; } "extends" { return JastAddAspectTypes.EXTENDS; }
"false" { return JastAddAspectTypes.FALSE; } //"false" { return JastAddAspectTypes.FALSE; }
"final" { return JastAddAspectTypes.FINAL; } "final" { return JastAddAspectTypes.FINAL; }
"finally" { return JastAddAspectTypes.FINALLY; } //"finally" { return JastAddAspectTypes.FINALLY; }
"float" { return JastAddAspectTypes.FLOAT; } "float" { return JastAddAspectTypes.FLOAT; }
"for" { return JastAddAspectTypes.FOR; } "for" { return JastAddAspectTypes.FOR; }
"goto" { return JastAddAspectTypes.GOTO; } //"goto" { return JastAddAspectTypes.GOTO; }
"if" { return JastAddAspectTypes.IF; } //"if" { return JastAddAspectTypes.IF; }
"implements" { return JastAddAspectTypes.IMPLEMENTS; } "implements" { return JastAddAspectTypes.IMPLEMENTS; }
"import" { return JastAddAspectTypes.IMPORT; } "import" { return JastAddAspectTypes.IMPORT; }
"instanceof" { return JastAddAspectTypes.INSTANCEOF; } //"instanceof" { return JastAddAspectTypes.INSTANCEOF; }
"int" { return JastAddAspectTypes.INT; } "int" { return JastAddAspectTypes.INT; }
"interface" { return JastAddAspectTypes.INTERFACE; } "interface" { return JastAddAspectTypes.INTERFACE; }
"long" { return JastAddAspectTypes.LONG; } "long" { return JastAddAspectTypes.LONG; }
"native" { return JastAddAspectTypes.NATIVE; } "native" { return JastAddAspectTypes.NATIVE; }
"new" { return JastAddAspectTypes.NEW; } //"new" { return JastAddAspectTypes.NEW; }
"null" { return JastAddAspectTypes.NULL; } //"null" { return JastAddAspectTypes.NULL; }
"package" { return JastAddAspectTypes.PACKAGE; } //"package" { return JastAddAspectTypes.PACKAGE; }
"private" { return JastAddAspectTypes.PRIVATE; } "private" { return JastAddAspectTypes.PRIVATE; }
"protected" { return JastAddAspectTypes.PROTECTED; } "protected" { return JastAddAspectTypes.PROTECTED; }
"public" { return JastAddAspectTypes.PUBLIC; } "public" { return JastAddAspectTypes.PUBLIC; }
"return" { return JastAddAspectTypes.RETURN; } //"return" { return JastAddAspectTypes.RETURN; }
"short" { return JastAddAspectTypes.SHORT; } "short" { return JastAddAspectTypes.SHORT; }
"static" { return JastAddAspectTypes.STATIC; } "static" { return JastAddAspectTypes.STATIC; }
"strictfp" { return JastAddAspectTypes.STRICTFP; } "strictfp" { return JastAddAspectTypes.STRICTFP; }
"super" { return JastAddAspectTypes.SUPER; } "super" { return JastAddAspectTypes.SUPER; }
"switch" { return JastAddAspectTypes.SWITCH; } //"switch" { return JastAddAspectTypes.SWITCH; }
"synchronized" { return JastAddAspectTypes.SYNCHRONIZED; } "synchronized" { return JastAddAspectTypes.SYNCHRONIZED; }
"this" { return JastAddAspectTypes.THIS; } //"this" { return JastAddAspectTypes.THIS; }
"throw" { return JastAddAspectTypes.THROW; } //"throw" { return JastAddAspectTypes.THROW; }
"throws" { return JastAddAspectTypes.THROWS; } "throws" { return JastAddAspectTypes.THROWS; }
"transient" { return JastAddAspectTypes.TRANSIENT; } "transient" { return JastAddAspectTypes.TRANSIENT; }
"true" { return JastAddAspectTypes.TRUE; } //"true" { return JastAddAspectTypes.TRUE; }
"try" { return JastAddAspectTypes.TRY; } //"try" { return JastAddAspectTypes.TRY; }
"void" { return JastAddAspectTypes.VOID; } "void" { return JastAddAspectTypes.VOID; }
"volatile" { return JastAddAspectTypes.VOLATILE; } "volatile" { return JastAddAspectTypes.VOLATILE; }
"while" { return JastAddAspectTypes.WHILE; } //"while" { return JastAddAspectTypes.WHILE; }
// JastAdd // JastAdd
"inh" { return JastAddAspectTypes.INH; } "inh" { return JastAddAspectTypes.INH; }
"syn" { return JastAddAspectTypes.SYN; } "syn" { return JastAddAspectTypes.SYN; }
"lazy" { return JastAddAspectTypes.LAZY; } "lazy" { return JastAddAspectTypes.LAZY; }
...@@ -115,4 +148,80 @@ NotParenthesis = [^{}]* ...@@ -115,4 +148,80 @@ NotParenthesis = [^{}]*
"nta" { return JastAddAspectTypes.NTA; } "nta" { return JastAddAspectTypes.NTA; }
"cache" { return JastAddAspectTypes.CACHE; } "cache" { return JastAddAspectTypes.CACHE; }
"uncache" { return JastAddAspectTypes.UNCACHE; } "uncache" { return JastAddAspectTypes.UNCACHE; }
// TODO this is strangely split in another Token block, check semantics of JJTree file!
"coll" { yybegin(COLLECTION_DECL); return JastAddAspectTypes.COLL; }
} }
<COLLECTION_DECL> {
"with" { return JastAddAspectTypes.WITH; }
"root" { return JastAddAspectTypes.ROOT; }
}
<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; }
// IDENTIFIERS
{Identifier} { return JastAddAspectTypes.IDENTIFIER; }
// SEPARATORS
"(" { return JastAddAspectTypes.LPAREN; }
")" { return JastAddAspectTypes.RPAREN; }
"{" { return JastAddAspectTypes.LBRACE; }
"}" { return JastAddAspectTypes.RBRACE; }
"[" { return JastAddAspectTypes.LBRACKET; }
"]" { return JastAddAspectTypes.RBRACKET; }
";" { return JastAddAspectTypes.SEMICOLON; }
"," { return JastAddAspectTypes.COMMA; }
"." { return JastAddAspectTypes.DOT; }
"@" { return JastAddAspectTypes.AT; }
// OPERATORS
//"=" { 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.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.ELLIPSIS; }
//"->" { return JastAddAspectTypes.ARROW; }
//"::" { return JastAddAspectTypes.DOUBLECOLON; }
// TODO RUNSIGNEDSHIFT >>> and RSIGNEDSHIFT >> are not parsed
">" { return JastAddAspectTypes.GT; }
}
...@@ -6,7 +6,7 @@ import com.intellij.openapi.util.TextRange; ...@@ -6,7 +6,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.InjectedLanguagePlaces; import com.intellij.psi.InjectedLanguagePlaces;
import com.intellij.psi.LanguageInjector; import com.intellij.psi.LanguageInjector;
import com.intellij.psi.PsiLanguageInjectionHost; import com.intellij.psi.PsiLanguageInjectionHost;
import org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlock; import org.jastadd.tooling.aspect.psi.JastAddAspectClassBodyDeclarationInParen;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class JavaBlockLanguageInjector implements LanguageInjector { public class JavaBlockLanguageInjector implements LanguageInjector {
...@@ -21,7 +21,7 @@ public class JavaBlockLanguageInjector implements LanguageInjector { ...@@ -21,7 +21,7 @@ public class JavaBlockLanguageInjector implements LanguageInjector {
*/ */
@Override @Override
public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost host, @NotNull InjectedLanguagePlaces injectionPlacesRegistrar) { public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost host, @NotNull InjectedLanguagePlaces injectionPlacesRegistrar) {
if (host.isValidHost() && host instanceof JastAddAspectJavaBlock) { if (host.isValidHost() && host instanceof JastAddAspectClassBodyDeclarationInParen) {
System.out.println(host.getText()); System.out.println(host.getText());
injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m(){", "}"); injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m(){", "}");
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment