diff --git a/src/main/grammar/Aspect.bnf b/src/main/grammar/Aspect.bnf index fd079b1fad7fb79b1a9a75893d7e63f57c5d8980..65e0e185e86f5ea428ef7233c62d45a150761909 100644 --- a/src/main/grammar/Aspect.bnf +++ b/src/main/grammar/Aspect.bnf @@ -86,13 +86,13 @@ aspect_interface_member_declaration ::= ( aspect_nested_class_declaration aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON { implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute" - extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectSynAttributeImpl" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectSynAttributeDeclarationImplExtension" } aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON { implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute" - extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectInhAttributeImpl" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectInhAttributeDeclarationImplExtension" } aspect_interface_method_declaration ::= (PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED )* aspect_result_type method_declarator (THROWS name_list)? SEMICOLON @@ -118,13 +118,13 @@ aspect_field_declaration ::= modifiers aspect_type ast_type_name DOT variable_de aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type ast_type_name DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? ( ASSIGN expression SEMICOLON | block | SEMICOLON ) { implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute" - extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectSynAttributeImpl" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectSynAttributeDeclarationImplExtension" } aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type ast_type_name DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON { implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute" - extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectInhAttributeImpl" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectInhAttributeDeclarationImplExtension" } // FIXME parentheses are not required around the WHEN expression? @@ -141,7 +141,7 @@ aspect_refine_inh_equation ::= REFINE aspect_name EQUATION ast_type_name DOT att collection_attribute ::= annotation* COLL aspect_type ast_type_name DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET expression RBRACKET)? (WITH method_name)? (ROOT ast_type_name)? SEMICOLON { implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute" - extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectCollAttributeImpl" + extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectCollectionAttributeImplExtension" } collection_contribution ::= annotation* ast_type_name CONTRIBUTES ( NTA expression TO ast_type_name DOT attribute_name LPAREN RPAREN | EACH? expression (WHEN expression)? TO ast_type_name DOT attribute_name LPAREN RPAREN (FOR EACH? expression)? | block TO ast_type_name DOT attribute_name LPAREN RPAREN ) SEMICOLON diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java index e3e4c7b1d0e78a52d89086ecdd2222bb2aa8c4a4..961119593abda78feb39dd0864eba7e668433d81 100644 --- a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java +++ b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java @@ -4,4 +4,7 @@ import com.intellij.psi.PsiElement; import org.jastadd.tooling.grammar.psi.GrammarNamedElement; public interface JastAddAspectAttribute extends PsiElement, GrammarNamedElement { + + String signature(); + } diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java index a077cbc5ab79f8cb7f9aea825be891efba273532..bac6dcc17deace69d231bde12882c8f1c2385d35 100644 --- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java +++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java @@ -52,15 +52,9 @@ public class JastAddAspectAspectDeclarationImplExtension extends GrammarNamedEle return "aspect " + getName(); } - @Override - public String getLocationString() { - Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile()); - return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : ""; - } - @Override public Icon getIcon(boolean unused) { - return JastAddIcons.FILE; + return JastAddIcons.ASPECT; } }; } diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java similarity index 70% rename from src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java rename to src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java index 5b2692b74af86411604202bd14d08a2574653c9b..91838ecc4b6e0d8fab4583012637b6b13d6b2f6d 100644 --- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java +++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java @@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement; import com.intellij.util.IncorrectOperationException; import org.jastadd.tooling.aspect.psi.AspectTypes; import org.jastadd.tooling.aspect.psi.JastAddAspectAspectInhAttributeDeclaration; +import org.jastadd.tooling.aspect.psi.JastAddAspectAspectSynAttributeDeclaration; import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute; import org.jastadd.tooling.grammar.psi.impl.GrammarNamedElementImpl; import org.jastadd.tooling.util.JastAddIcons; @@ -16,9 +17,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.stream.Collectors; -public abstract class JastAddAspectInhAttributeImpl extends GrammarNamedElementImpl implements JastAddAspectAttribute { - public JastAddAspectInhAttributeImpl(@NotNull ASTNode node) { +public abstract class JastAddAspectAspectInhAttributeDeclarationImplExtension extends GrammarNamedElementImpl implements JastAddAspectAttribute { + public JastAddAspectAspectInhAttributeDeclarationImplExtension(@NotNull ASTNode node) { super(node); } @@ -47,19 +49,19 @@ public abstract class JastAddAspectInhAttributeImpl extends GrammarNamedElementI return this; } + @Override + public String signature() { + JastAddAspectAspectInhAttributeDeclaration decl = (JastAddAspectAspectInhAttributeDeclaration) this; + return "inh " + decl.getAstTypeName().getText() + "." + decl.getAttributeName().getText() + "(" + decl.getTypeList().stream().map(PsiElement::getText).collect(Collectors.joining(", ")) + ") : " + decl.getAspectType().getText(); + } + @Override public ItemPresentation getPresentation() { return new ItemPresentation() { @Nullable @Override public String getPresentableText() { - return "inh " + getName(); - } - - @Override - public String getLocationString() { - Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile()); - return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : ""; + return signature(); } @Override diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java similarity index 72% rename from src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java rename to src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java index 358e467052a897db4dbfedad710656846a190dcd..ecb2e41b38bb4ae0d6bb908b81aff09a143747ea 100644 --- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java +++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java @@ -16,9 +16,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.stream.Collectors; -public abstract class JastAddAspectSynAttributeImpl extends GrammarNamedElementImpl implements JastAddAspectAttribute { - public JastAddAspectSynAttributeImpl(@NotNull ASTNode node) { +public abstract class JastAddAspectAspectSynAttributeDeclarationImplExtension extends GrammarNamedElementImpl implements JastAddAspectAttribute { + public JastAddAspectAspectSynAttributeDeclarationImplExtension(@NotNull ASTNode node) { super(node); } @@ -48,19 +49,19 @@ public abstract class JastAddAspectSynAttributeImpl extends GrammarNamedElementI return this; } + @Override + public String signature() { + JastAddAspectAspectSynAttributeDeclaration decl = (JastAddAspectAspectSynAttributeDeclaration) this; + return "syn " + decl.getAstTypeName().getText() + "." + decl.getAttributeName().getText() + "(" + decl.getTypeList().stream().map(PsiElement::getText).collect(Collectors.joining(", ")) + ") : " + decl.getAspectType().getText(); + } + @Override public ItemPresentation getPresentation() { return new ItemPresentation() { @Nullable @Override public String getPresentableText() { - return "syn " + getName(); - } - - @Override - public String getLocationString() { - Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile()); - return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : ""; + return signature(); } @Override diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java similarity index 72% rename from src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java rename to src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java index 931466e895e289596cfd9c53ae2c486e530511c6..7fde5d31a6de5cf298746728fe2f956072f8f007 100644 --- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java +++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java @@ -2,8 +2,6 @@ package org.jastadd.tooling.aspect.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.navigation.ItemPresentation; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.util.NlsSafe; import com.intellij.psi.PsiElement; import com.intellij.util.IncorrectOperationException; @@ -17,8 +15,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; -public abstract class JastAddAspectCollAttributeImpl extends GrammarNamedElementImpl implements JastAddAspectAttribute { - public JastAddAspectCollAttributeImpl(@NotNull ASTNode node) { +public abstract class JastAddAspectCollectionAttributeImplExtension extends GrammarNamedElementImpl implements JastAddAspectAttribute { + public JastAddAspectCollectionAttributeImplExtension(@NotNull ASTNode node) { super(node); } @@ -47,19 +45,19 @@ public abstract class JastAddAspectCollAttributeImpl extends GrammarNamedElement return this; } + @Override + public String signature() { + JastAddAspectCollectionAttribute decl = (JastAddAspectCollectionAttribute) this; + return "coll " + decl.getAstTypeNameList().get(0).getText() + "." + decl.getAttributeName().getText() + "() : " + decl.getAspectType().getText(); + } + @Override public ItemPresentation getPresentation() { return new ItemPresentation() { @Nullable @Override public String getPresentableText() { - return "coll " + getName(); - } - - @Override - public String getLocationString() { - Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile()); - return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : ""; + return signature(); } @Override