diff --git a/src/main/grammar/Aspect.bnf b/src/main/grammar/Aspect.bnf index c8885804b1b3bc4202ed34439788d51afa75890a..45f4a3caa18fbdf307aa5670f633d77276c88670 100644 --- a/src/main/grammar/Aspect.bnf +++ b/src/main/grammar/Aspect.bnf @@ -78,6 +78,10 @@ aspect_body_declaration ::= ( aspect_refine_inh_equation | aspect_cache_declaration ) aspect_class_declaration ::= modifiers class_declaration +{ + implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaExtension" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaImplExtension" +} aspect_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE @@ -208,6 +212,10 @@ name_name ::= java_identifier (DOT java_identifier)* name_list ::= name_name (COMMA name_name)* expression ::= lambda_expression | ( conditional_expression (assignment_operator expression)? ) +{ + implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaExtension" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaImplExtension" +} assignment_operator ::= ASSIGN | STARASSIGN | SLASHASSIGN | REMASSIGN | PLUSASSIGN | MINUSASSIGN | LSHIFTASSIGN | RSIGNEDSHIFTASSIGN | RUNSIGNEDSHIFTASSIGN | ANDASSIGN | XORASSIGN | ORASSIGN @@ -305,6 +313,10 @@ annotation ::= ( normal_annotation | single_member_annotation | marker_annotatio // should be parsed after circular and in collection attributes expression_in_brackets ::= LBRACKET_ANYTHING_RBRACKET // LBRACKET expression RBRACKET +{ + implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaExtension" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaImplExtension" +} // at symbol only in these rules marker_annotation ::= AT_NAME diff --git a/src/main/java/org/jastadd/tooling/aspect/JavaLanguageInjector.java b/src/main/java/org/jastadd/tooling/aspect/JavaLanguageInjector.java index b07e71120c9009083ea979d5470f9abd8113a8a3..13770ce19fd2a25f4a26ec253a9f7f9a0624ed83 100644 --- a/src/main/java/org/jastadd/tooling/aspect/JavaLanguageInjector.java +++ b/src/main/java/org/jastadd/tooling/aspect/JavaLanguageInjector.java @@ -22,14 +22,10 @@ public class JavaLanguageInjector implements LanguageInjector { @Override public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost host, @NotNull InjectedLanguagePlaces injectionPlacesRegistrar) { if (host.isValidHost()) { - if (host instanceof JastAddAspectExpressionInBrackets) { - // TODO - } else if (host instanceof JastAddAspectNormalAnnotation) { + 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) { @@ -37,7 +33,13 @@ public class JavaLanguageInjector implements LanguageInjector { } else if (host instanceof JastAddAspectAnnotationTypeDeclaration) { // TODO } else if (host instanceof JastAddAspectBlock) { - injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m()", "}"); + injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(1, host.getTextLength() - 1), "class X { public void m() {", "}}"); + } else if (host instanceof JastAddAspectExpression) { + injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m() {Object x = ", ";}}"); + } else if (host instanceof JastAddAspectExpressionInBrackets) { + injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(1, host.getTextLength() - 1), "class X { public void m() {Object x = ", ";}}"); + } else if (host instanceof JastAddAspectAspectClassDeclaration) { + injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "", ""); } } }