diff --git a/src/main/grammar/Aspect.bnf b/src/main/grammar/Aspect.bnf index e8bdb09b894c75068adbab329f8217ce80f1e15f..1bd54a8a035025a82dcca39fbdb23ac6e17bfe29 100644 --- a/src/main/grammar/Aspect.bnf +++ b/src/main/grammar/Aspect.bnf @@ -128,7 +128,7 @@ aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_ty } // FIXME parentheses are not required around the WHEN expression? -aspect_rewrite ::= REWRITE aspect_name (ast_type_name DOT method_name LPAREN RPAREN)? LBRACE ((WHEN LPAREN expression RPAREN)? TO aspect_type ( expression SEMICOLON | block ))+ RBRACE +aspect_rewrite ::= REWRITE ast_type_name (ast_type_name DOT method_name LPAREN RPAREN)? LBRACE ((WHEN LPAREN expression RPAREN)? TO aspect_type ( expression SEMICOLON | block ))+ RBRACE aspect_syn_equation ::= annotation* EQUATION ast_type_name DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)*)? RPAREN ( ASSIGN expression SEMICOLON | block ) diff --git a/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewElement.java b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewElement.java index 23b477df6712205245ae6545fe99065ca491a6ec..a59a0a9af4643085f3ade78dcfe93dc06472cbdf 100644 --- a/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewElement.java +++ b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewElement.java @@ -133,6 +133,18 @@ public class AspectStructureViewElement implements StructureViewTreeElement, Sor return AllIcons.Nodes.Method; } }; + } else if (myElement instanceof JastAddAspectAspectRewrite) { + presentation = new ItemPresentation() { + @Override + public String getPresentableText() { + return AspectStructureViewElement.getPresentableText((JastAddAspectAspectRewrite) myElement); + } + + @Override + public Icon getIcon(boolean unused) { + return JastAddIcons.REWRITE; + } + }; } } @@ -161,6 +173,11 @@ public class AspectStructureViewElement implements StructureViewTreeElement, Sor + " : " + decl.getAspectType().getText(); } + private static String getPresentableText(JastAddAspectAspectRewrite rewrite) { + return "rewrite " + rewrite.getAstTypeNameList().get(0).getText() + + " to " + rewrite.getAspectTypeList().stream().map(JastAddAspectAspectType::getText).collect(Collectors.joining("/")); + } + private static String getPresentableText(JastAddAspectAspectConstructorDeclaration decl) { return decl.getModifiers().getText() + " " + decl.getAstTypeNameList().get(0).getText() @@ -217,6 +234,8 @@ public class AspectStructureViewElement implements StructureViewTreeElement, Sor return new AspectStructureViewElement((JastAddAspectAspectFieldDeclarationImpl) decl.getAspectFieldDeclaration()); } else if (decl.getAspectConstructorDeclaration()!= null) { return new AspectStructureViewElement((JastAddAspectAspectConstructorDeclarationImpl) decl.getAspectConstructorDeclaration()); + }else if (decl.getAspectRewrite()!= null) { + return new AspectStructureViewElement((JastAddAspectAspectRewriteImpl) decl.getAspectRewrite()); } return null; }) @@ -227,7 +246,6 @@ public class AspectStructureViewElement implements StructureViewTreeElement, Sor // aspect_refine_method_declaration // aspect_refine_constructor_declaration - // aspect_rewrite // aspect_add_interface // aspect_extend_interface diff --git a/src/main/java/org/jastadd/tooling/util/JastAddIcons.java b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java index 898c025802d254586501a1b8c90dd9085e2e0a3f..86cf9542d6e2ddd0b0022003703eac9a30a90ff2 100644 --- a/src/main/java/org/jastadd/tooling/util/JastAddIcons.java +++ b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java @@ -14,6 +14,7 @@ public class JastAddIcons { public static final Icon INH_ATTRIBUTE = ATTRIBUTE; public static final Icon SYN_ATTRIBUTE = ATTRIBUTE; public static final Icon INTERTYPE_DECL = IconLoader.getIcon("/META-INF/intertypeIcon.svg", JastAddIcons.class); + public static final Icon REWRITE = IconLoader.getIcon("/META-INF/rewriteIcon.svg", JastAddIcons.class); private JastAddIcons() { throw new IllegalStateException("Utility class");