diff --git a/ast/src/main/ast/pork.yml b/ast/src/main/ast/pork.yml index 5d3c05b..e8d1cd8 100644 --- a/ast/src/main/ast/pork.yml +++ b/ast/src/main/ast/pork.yml @@ -261,6 +261,7 @@ types: parent: Expression referencedElementValue: symbol referencedElementType: Node + namedElementValue: symbol values: - name: symbol type: Symbol diff --git a/ast/src/main/kotlin/gay/pizza/pork/ast/Node.kt b/ast/src/main/kotlin/gay/pizza/pork/ast/Node.kt index 8c0528c..f622cfd 100644 --- a/ast/src/main/kotlin/gay/pizza/pork/ast/Node.kt +++ b/ast/src/main/kotlin/gay/pizza/pork/ast/Node.kt @@ -1,9 +1,9 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.ast -import kotlinx.serialization.Transient import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient @Serializable @SerialName("node") diff --git a/buildext/src/main/kotlin/gay/pizza/pork/buildext/ast/AstPorkIdeaCodegen.kt b/buildext/src/main/kotlin/gay/pizza/pork/buildext/ast/AstPorkIdeaCodegen.kt index 1ddb2de..9929574 100644 --- a/buildext/src/main/kotlin/gay/pizza/pork/buildext/ast/AstPorkIdeaCodegen.kt +++ b/buildext/src/main/kotlin/gay/pizza/pork/buildext/ast/AstPorkIdeaCodegen.kt @@ -70,13 +70,15 @@ class AstPorkIdeaCodegen(pkg: String, outputDirectory: Path, world: AstWorld) : ), inherits = mutableListOf("${baseType}(node)"), imports = mutableListOf( - "com.intellij.lang.ASTNode" + "com.intellij.lang.ASTNode", + "gay.pizza.pork.idea.psi.PorkElementHelpers", + "javax.swing.Icon", + "com.intellij.navigation.ItemPresentation" ) ) if (baseType == "PorkNamedElement") { kotlinClass.imports.add(0, "com.intellij.psi.PsiElement") - kotlinClass.imports.add("gay.pizza.pork.idea.psi.PorkElementHelpers") val getNameFunction = KotlinFunction( "getName", overridden = true, @@ -111,7 +113,6 @@ class AstPorkIdeaCodegen(pkg: String, outputDirectory: Path, world: AstWorld) : if (type.referencedElementValue != null && type.referencedElementType != null) { kotlinClass.imports.add(0, "com.intellij.psi.PsiReference") kotlinClass.imports.add("gay.pizza.pork.ast.NodeType") - kotlinClass.imports.add("gay.pizza.pork.idea.psi.PorkElementHelpers") val getReferenceFunction = KotlinFunction( "getReference", @@ -123,6 +124,27 @@ class AstPorkIdeaCodegen(pkg: String, outputDirectory: Path, world: AstWorld) : kotlinClass.functions.add(getReferenceFunction) } + val getIconFunction = KotlinFunction( + "getIcon", + overridden = true, + returnType = "Icon?", + parameters = mutableListOf( + KotlinParameter("flags", "Int") + ), + isImmediateExpression = true + ) + getIconFunction.body.add("PorkElementHelpers.iconOf(this)") + kotlinClass.functions.add(getIconFunction) + + val getPresentationFunction = KotlinFunction( + "getPresentation", + overridden = true, + returnType = "ItemPresentation?", + isImmediateExpression = true + ) + getPresentationFunction.body.add("PorkElementHelpers.presentationOf(this)") + kotlinClass.functions.add(getPresentationFunction) + write("${type.name}Element.kt", KotlinWriter(kotlinClass)) } diff --git a/buildext/src/main/kotlin/gay/pizza/pork/buildext/codegen/KotlinWriter.kt b/buildext/src/main/kotlin/gay/pizza/pork/buildext/codegen/KotlinWriter.kt index 93c4d53..0151c12 100644 --- a/buildext/src/main/kotlin/gay/pizza/pork/buildext/codegen/KotlinWriter.kt +++ b/buildext/src/main/kotlin/gay/pizza/pork/buildext/codegen/KotlinWriter.kt @@ -195,7 +195,7 @@ class KotlinWriter() { appendLine("package $pkg") appendLine() - for (import in imports) { + for (import in imports.toSortedSet()) { appendLine("import $import") } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkElementManipulator.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkElementManipulator.kt new file mode 100644 index 0000000..413af88 --- /dev/null +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkElementManipulator.kt @@ -0,0 +1,23 @@ +package gay.pizza.pork.idea + +import com.intellij.openapi.util.TextRange +import com.intellij.psi.AbstractElementManipulator +import com.intellij.psi.PsiFileFactory +import com.intellij.psi.impl.PsiFileFactoryImpl +import com.intellij.psi.util.elementType +import gay.pizza.pork.idea.psi.gen.PorkElement + +class PorkElementManipulator : AbstractElementManipulator() { + override fun handleContentChange(element: PorkElement, range: TextRange, newContent: String): PorkElement? { + val sourceText = element.text + val beforeText = sourceText.substring(0, range.startOffset) + val afterText = sourceText.substring(range.endOffset) + val changedText = beforeText + newContent + afterText + return element.replace(produce(element, changedText)) as PorkElement? + } + + fun produce(element: PorkElement, changed: String): PorkElement { + val factory = PsiFileFactory.getInstance(element.project) as PsiFileFactoryImpl + return factory.createElementFromText(changed, PorkLanguage, element.elementType!!, element.context) as PorkElement + } +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkFunctionSymbol.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkFunctionSymbol.kt deleted file mode 100644 index b70dd36..0000000 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkFunctionSymbol.kt +++ /dev/null @@ -1,11 +0,0 @@ -package gay.pizza.pork.idea - -import com.intellij.model.Pointer -import com.intellij.model.Symbol - -@Suppress("UnstableApiUsage") -data class PorkFunctionSymbol(val id: String) : Symbol { - override fun createPointer(): Pointer { - return Pointer { this } - } -} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkNodeKey.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkNodeKey.kt deleted file mode 100644 index 39d0ce1..0000000 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkNodeKey.kt +++ /dev/null @@ -1,6 +0,0 @@ -package gay.pizza.pork.idea - -import com.intellij.openapi.util.Key -import gay.pizza.pork.ast.Node - -object PorkNodeKey : Key("PorkAstNode") diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkParser.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkParser.kt index c04ab2e..0d14c6c 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkParser.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkParser.kt @@ -3,18 +3,26 @@ package gay.pizza.pork.idea import com.intellij.lang.ASTNode import com.intellij.lang.PsiBuilder import com.intellij.lang.PsiParser -import com.intellij.psi.impl.PsiElementBase import com.intellij.psi.tree.IElementType +import com.intellij.psi.tree.IFileElementType +import gay.pizza.pork.ast.NodeType +import gay.pizza.pork.ast.parse import gay.pizza.pork.parser.Parser class PorkParser : PsiParser { override fun parse(root: IElementType, builder: PsiBuilder): ASTNode { + val nodeTypeForParse = if (root is IFileElementType) { + NodeType.CompilationUnit + } else { + PorkElementTypes.nodeTypeFor(root) ?: + throw RuntimeException("Unable to parse element type: $root") + } val marker = builder.mark() val psiBuilderMarkAttribution = PsiBuilderMarkAttribution(builder) val source = PsiBuilderTokenSource(builder) val parser = Parser(source, psiBuilderMarkAttribution) try { - parser.parseCompilationUnit() + parser.parse(nodeTypeForParse) } catch (_: ExitParser) {} marker.done(root) return builder.treeBuilt diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkSymbolDeclaration.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkSymbolDeclaration.kt deleted file mode 100644 index 36205b8..0000000 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkSymbolDeclaration.kt +++ /dev/null @@ -1,27 +0,0 @@ -package gay.pizza.pork.idea - -import com.intellij.model.Symbol -import com.intellij.model.psi.PsiSymbolDeclaration -import com.intellij.openapi.util.TextRange -import com.intellij.psi.PsiElement -import com.intellij.psi.util.elementType -import gay.pizza.pork.ast.NodeType - -@Suppress("UnstableApiUsage") -class PorkSymbolDeclaration(val element: PsiElement) : PsiSymbolDeclaration { - override fun getDeclaringElement(): PsiElement = element - override fun getRangeInDeclaringElement(): TextRange { - return getSymbolElement().textRange - } - - override fun getSymbol(): Symbol { - val element = getSymbolElement() - return PorkFunctionSymbol(element.text.trim()) - } - - private fun getSymbolElement(): PsiElement { - return element.children.first { - it.elementType == PorkElementTypes.elementTypeFor(NodeType.Symbol) - } - } -} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkSymbolDeclarationProvider.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkSymbolDeclarationProvider.kt deleted file mode 100644 index c554c74..0000000 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PorkSymbolDeclarationProvider.kt +++ /dev/null @@ -1,21 +0,0 @@ -package gay.pizza.pork.idea - -import com.intellij.model.psi.PsiSymbolDeclaration -import com.intellij.model.psi.PsiSymbolDeclarationProvider -import com.intellij.psi.PsiElement -import com.intellij.psi.util.elementType -import gay.pizza.pork.ast.NodeType - -@Suppress("UnstableApiUsage") -class PorkSymbolDeclarationProvider : PsiSymbolDeclarationProvider { - override fun getDeclarations( - element: PsiElement, - offsetInElement: Int - ): MutableCollection { - val symbolDeclarations = mutableListOf() - if (element.elementType == PorkElementTypes.elementTypeFor(NodeType.FunctionDefinition)) { - symbolDeclarations.add(PorkSymbolDeclaration(element)) - } - return symbolDeclarations - } -} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PsiBuilderMarkAttribution.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PsiBuilderMarkAttribution.kt index 212c02d..75dce1a 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PsiBuilderMarkAttribution.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/PsiBuilderMarkAttribution.kt @@ -5,11 +5,8 @@ import gay.pizza.pork.ast.Node import gay.pizza.pork.ast.NodeType import gay.pizza.pork.parser.ParseError import gay.pizza.pork.parser.ParserNodeAttribution -import java.util.IdentityHashMap class PsiBuilderMarkAttribution(val builder: PsiBuilder) : ParserNodeAttribution() { - private val map = IdentityHashMap() - override fun guarded(type: NodeType?, block: () -> T): T { val marker = builder.mark() val result = try { @@ -32,10 +29,6 @@ class PsiBuilderMarkAttribution(val builder: PsiBuilder) : ParserNodeAttribution marker.done(PorkElementTypes.FailedToParse) throw e } - if (map[result] != null) { - marker.drop() - } - map[result] = result return result } } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkElementHelpers.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkElementHelpers.kt index 6aa41f6..5b95253 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkElementHelpers.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkElementHelpers.kt @@ -1,31 +1,74 @@ package gay.pizza.pork.idea.psi +import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFileFactory import com.intellij.psi.PsiReference +import com.intellij.psi.impl.PsiFileFactoryImpl +import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.childrenOfType +import com.intellij.util.PlatformIcons import gay.pizza.pork.ast.NodeType import gay.pizza.pork.idea.PorkElementTypes -import gay.pizza.pork.idea.psi.gen.PorkElement -import gay.pizza.pork.idea.psi.gen.PorkNamedElement -import gay.pizza.pork.idea.psi.gen.SymbolElement +import gay.pizza.pork.idea.PorkLanguage +import gay.pizza.pork.idea.psi.gen.* +import javax.swing.Icon object PorkElementHelpers { private val symbolElementType = PorkElementTypes.elementTypeFor(NodeType.Symbol) fun nameOfNamedElement(element: PorkNamedElement): String? { - val child = element.node.findChildByType(symbolElementType) - return child?.text + val child = symbolOf(element) ?: return null + return child.text } - fun setNameOfNamedElement(element: PorkNamedElement, name: String): PsiElement = element + fun setNameOfNamedElement(element: PorkNamedElement, name: String): PsiElement { + val child = symbolOf(element) ?: return element + val factory = PsiFileFactory.getInstance(element.project) as PsiFileFactoryImpl + val created = factory.createElementFromText(name, PorkLanguage, child.elementType, element.context) as PorkElement + element.node.replaceChild(child, created.node) + return element + } + + fun symbolOf(element: PorkElement): ASTNode? { + var child = element.node.findChildByType(symbolElementType) + if (child == null) { + child = PsiTreeUtil.collectElementsOfType(element, SymbolElement::class.java).firstOrNull()?.node + } + return child + } fun nameIdentifierOfNamedElement(element: PorkNamedElement): PsiElement? { - val child = element.node.findChildByType(symbolElementType) - return child?.psi + return symbolOf(element)?.psi } fun referenceOfElement(element: PorkElement, type: NodeType): PsiReference? { val textRangeOfSymbolInElement = element.childrenOfType().firstOrNull()?.textRangeInParent ?: return null return PorkIdentifierReference(element, textRangeOfSymbolInElement) } + + fun iconOf(element: PorkElement): Icon? { + return when (element) { + is LetDefinitionElement -> PlatformIcons.FIELD_ICON + is FunctionDefinitionElement -> PlatformIcons.FUNCTION_ICON + is LetAssignmentElement -> PlatformIcons.VARIABLE_READ_ACCESS + is VarAssignmentElement -> PlatformIcons.VARIABLE_RW_ACCESS + is ArgumentSpecElement -> PlatformIcons.VARIABLE_READ_ACCESS + else -> null + } + } + + fun presentationOf(element: PorkElement): ItemPresentation? { + val icon = iconOf(element) + if (element is FunctionDefinitionElement || element is LetDefinitionElement) { + return PorkPresentable(element.name, icon, element.containingFile.virtualFile?.name) + } + + if (element is LetAssignmentElement || element is VarAssignmentElement) { + return PorkPresentable(element.name, icon) + } + + return null + } } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkIdentifierReference.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkIdentifierReference.kt index 6e1fa81..bb78afc 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkIdentifierReference.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkIdentifierReference.kt @@ -17,7 +17,8 @@ class PorkIdentifierReference(element: PorkElement, textRange: TextRange) : Pork } override fun getVariants(): Array { - return findAllCandidates().toTypedArray() + val candidates = findAllCandidates() + return candidates.toTypedArray() } fun findAllCandidates(name: String? = null): List = @@ -25,9 +26,7 @@ class PorkIdentifierReference(element: PorkElement, textRange: TextRange) : Pork fun findAnyLocals(name: String? = null): List { val functionDefinitionElement = PsiTreeUtil.getParentOfType(element, FunctionDefinitionElement::class.java) - if (functionDefinitionElement == null) { - return emptyList() - } + ?: return emptyList() val locals = mutableListOf() fun check(localCandidate: PsiElement, upward: Boolean) { @@ -35,10 +34,6 @@ class PorkIdentifierReference(element: PorkElement, textRange: TextRange) : Pork return } - if (localCandidate == element) { - return - } - if (localCandidate is ArgumentSpecElement || localCandidate is LetAssignmentElement || localCandidate is VarAssignmentElement) { @@ -46,8 +41,10 @@ class PorkIdentifierReference(element: PorkElement, textRange: TextRange) : Pork } if (localCandidate is ForInElement) { - val forInItem = localCandidate.childrenOfType().first() - locals.add(forInItem) + val forInItem = localCandidate.childrenOfType().firstOrNull() + if (forInItem != null) { + locals.add(forInItem) + } } localCandidate.children.forEach { check(it, false) } @@ -55,6 +52,9 @@ class PorkIdentifierReference(element: PorkElement, textRange: TextRange) : Pork PsiTreeUtil.treeWalkUp(element, functionDefinitionElement) { _, localCandidate -> if (localCandidate != null) { + if (element == functionDefinitionElement) { + return@treeWalkUp true + } check(localCandidate, true) } true @@ -62,7 +62,8 @@ class PorkIdentifierReference(element: PorkElement, textRange: TextRange) : Pork val argumentSpecElements = functionDefinitionElement.childrenOfType() locals.addAll(argumentSpecElements) - return locals.filter { it.name == name } + val finalLocals = locals.distinctBy { it.textRange } + return finalLocals.filter { if (name != null) it.name == name else true } } fun findAnyDefinitions(name: String? = null): List { diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkPresentable.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkPresentable.kt new file mode 100644 index 0000000..f813712 --- /dev/null +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/PorkPresentable.kt @@ -0,0 +1,10 @@ +package gay.pizza.pork.idea.psi + +import com.intellij.navigation.ItemPresentation +import javax.swing.Icon + +class PorkPresentable(val porkText: String?, val porkIcon: Icon? = null, val porkLocation: String? = null) : ItemPresentation { + override fun getPresentableText(): String? = porkText + override fun getIcon(unused: Boolean): Icon? = porkIcon + override fun getLocationString(): String? = porkLocation +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ArgumentSpecElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ArgumentSpecElement.kt index 905bfc9..071905a 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ArgumentSpecElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ArgumentSpecElement.kt @@ -1,9 +1,11 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiElement import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiElement import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon class ArgumentSpecElement(node: ASTNode) : PorkNamedElement(node) { override fun getName(): String? = @@ -14,4 +16,10 @@ class ArgumentSpecElement(node: ASTNode) : PorkNamedElement(node) { override fun getNameIdentifier(): PsiElement? = PorkElementHelpers.nameIdentifierOfNamedElement(this) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BlockElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BlockElement.kt index c430511..2dc9f0c 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BlockElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BlockElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class BlockElement(node: ASTNode) : PorkElement(node) +class BlockElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BooleanLiteralElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BooleanLiteralElement.kt index 93075c4..399aeba 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BooleanLiteralElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BooleanLiteralElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class BooleanLiteralElement(node: ASTNode) : PorkElement(node) +class BooleanLiteralElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BreakElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BreakElement.kt index e409555..552249a 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BreakElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/BreakElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class BreakElement(node: ASTNode) : PorkElement(node) +class BreakElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/CompilationUnitElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/CompilationUnitElement.kt index c689703..858cab4 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/CompilationUnitElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/CompilationUnitElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class CompilationUnitElement(node: ASTNode) : PorkElement(node) +class CompilationUnitElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ContinueElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ContinueElement.kt index ce9aff9..83ee759 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ContinueElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ContinueElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class ContinueElement(node: ASTNode) : PorkElement(node) +class ContinueElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/DoubleLiteralElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/DoubleLiteralElement.kt index 8a1afdc..4e877fc 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/DoubleLiteralElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/DoubleLiteralElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class DoubleLiteralElement(node: ASTNode) : PorkElement(node) +class DoubleLiteralElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInElement.kt index ad3c1a1..c40c17c 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class ForInElement(node: ASTNode) : PorkElement(node) +class ForInElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInItemElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInItemElement.kt index 6d26830..7d5ef71 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInItemElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ForInItemElement.kt @@ -1,9 +1,11 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiElement import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiElement import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon class ForInItemElement(node: ASTNode) : PorkNamedElement(node) { override fun getName(): String? = @@ -14,4 +16,10 @@ class ForInItemElement(node: ASTNode) : PorkNamedElement(node) { override fun getNameIdentifier(): PsiElement? = PorkElementHelpers.nameIdentifierOfNamedElement(this) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionCallElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionCallElement.kt index ef3230c..71022c2 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionCallElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionCallElement.kt @@ -1,12 +1,20 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiReference import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiReference import gay.pizza.pork.ast.NodeType import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon class FunctionCallElement(node: ASTNode) : PorkElement(node) { override fun getReference(): PsiReference? = PorkElementHelpers.referenceOfElement(this, NodeType.FunctionDefinition) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionDefinitionElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionDefinitionElement.kt index 4c2cbef..3fde7db 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionDefinitionElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/FunctionDefinitionElement.kt @@ -1,9 +1,11 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiElement import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiElement import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon class FunctionDefinitionElement(node: ASTNode) : PorkNamedElement(node) { override fun getName(): String? = @@ -14,4 +16,10 @@ class FunctionDefinitionElement(node: ASTNode) : PorkNamedElement(node) { override fun getNameIdentifier(): PsiElement? = PorkElementHelpers.nameIdentifierOfNamedElement(this) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IfElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IfElement.kt index f08534b..e3ea5e1 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IfElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IfElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class IfElement(node: ASTNode) : PorkElement(node) +class IfElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ImportDeclarationElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ImportDeclarationElement.kt index 008fa94..83267ba 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ImportDeclarationElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ImportDeclarationElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class ImportDeclarationElement(node: ASTNode) : PorkElement(node) +class ImportDeclarationElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IndexedByElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IndexedByElement.kt index 043e537..d452ce2 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IndexedByElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IndexedByElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class IndexedByElement(node: ASTNode) : PorkElement(node) +class IndexedByElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/InfixOperationElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/InfixOperationElement.kt index 3d53e9c..8adc0c6 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/InfixOperationElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/InfixOperationElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class InfixOperationElement(node: ASTNode) : PorkElement(node) +class InfixOperationElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IntegerLiteralElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IntegerLiteralElement.kt index 3498aaa..51f6111 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IntegerLiteralElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/IntegerLiteralElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class IntegerLiteralElement(node: ASTNode) : PorkElement(node) +class IntegerLiteralElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetAssignmentElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetAssignmentElement.kt index 9133d42..06a5c56 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetAssignmentElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetAssignmentElement.kt @@ -1,9 +1,11 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiElement import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiElement import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon class LetAssignmentElement(node: ASTNode) : PorkNamedElement(node) { override fun getName(): String? = @@ -14,4 +16,10 @@ class LetAssignmentElement(node: ASTNode) : PorkNamedElement(node) { override fun getNameIdentifier(): PsiElement? = PorkElementHelpers.nameIdentifierOfNamedElement(this) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetDefinitionElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetDefinitionElement.kt index 1a124f8..4fb25cc 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetDefinitionElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LetDefinitionElement.kt @@ -1,9 +1,11 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiElement import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiElement import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon class LetDefinitionElement(node: ASTNode) : PorkNamedElement(node) { override fun getName(): String? = @@ -14,4 +16,10 @@ class LetDefinitionElement(node: ASTNode) : PorkNamedElement(node) { override fun getNameIdentifier(): PsiElement? = PorkElementHelpers.nameIdentifierOfNamedElement(this) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ListLiteralElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ListLiteralElement.kt index ebae2ca..dfb5a41 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ListLiteralElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ListLiteralElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class ListLiteralElement(node: ASTNode) : PorkElement(node) +class ListLiteralElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LongLiteralElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LongLiteralElement.kt index 6266951..0ade7f5 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LongLiteralElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/LongLiteralElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class LongLiteralElement(node: ASTNode) : PorkElement(node) +class LongLiteralElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NativeElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NativeElement.kt index 89ea106..8ea92c5 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NativeElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NativeElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class NativeElement(node: ASTNode) : PorkElement(node) +class NativeElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NoneLiteralElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NoneLiteralElement.kt index c57729c..0f4cc43 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NoneLiteralElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/NoneLiteralElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class NoneLiteralElement(node: ASTNode) : PorkElement(node) +class NoneLiteralElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ParenthesesElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ParenthesesElement.kt index 7772494..6a55ecd 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ParenthesesElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/ParenthesesElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class ParenthesesElement(node: ASTNode) : PorkElement(node) +class ParenthesesElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/PrefixOperationElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/PrefixOperationElement.kt index a3a6c38..ec0c6e5 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/PrefixOperationElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/PrefixOperationElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class PrefixOperationElement(node: ASTNode) : PorkElement(node) +class PrefixOperationElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SetAssignmentElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SetAssignmentElement.kt index 12bd63b..66d62ad 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SetAssignmentElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SetAssignmentElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class SetAssignmentElement(node: ASTNode) : PorkElement(node) +class SetAssignmentElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/StringLiteralElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/StringLiteralElement.kt index 0542013..ae52bb3 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/StringLiteralElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/StringLiteralElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class StringLiteralElement(node: ASTNode) : PorkElement(node) +class StringLiteralElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SuffixOperationElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SuffixOperationElement.kt index 6f13135..563ab9c 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SuffixOperationElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SuffixOperationElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class SuffixOperationElement(node: ASTNode) : PorkElement(node) +class SuffixOperationElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolElement.kt index 1dd0e97..5d334a7 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class SymbolElement(node: ASTNode) : PorkElement(node) +class SymbolElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolReferenceElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolReferenceElement.kt index 936be11..df72050 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolReferenceElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/SymbolReferenceElement.kt @@ -1,12 +1,30 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiReference import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiReference import gay.pizza.pork.ast.NodeType import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon + +class SymbolReferenceElement(node: ASTNode) : PorkNamedElement(node) { + override fun getName(): String? = + PorkElementHelpers.nameOfNamedElement(this) + + override fun setName(name: String): PsiElement = + PorkElementHelpers.setNameOfNamedElement(this, name) + + override fun getNameIdentifier(): PsiElement? = + PorkElementHelpers.nameIdentifierOfNamedElement(this) -class SymbolReferenceElement(node: ASTNode) : PorkElement(node) { override fun getReference(): PsiReference? = PorkElementHelpers.referenceOfElement(this, NodeType.Node) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/VarAssignmentElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/VarAssignmentElement.kt index c1f584f..0f79db4 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/VarAssignmentElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/VarAssignmentElement.kt @@ -1,9 +1,11 @@ // GENERATED CODE FROM PORK AST CODEGEN package gay.pizza.pork.idea.psi.gen -import com.intellij.psi.PsiElement import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import com.intellij.psi.PsiElement import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon class VarAssignmentElement(node: ASTNode) : PorkNamedElement(node) { override fun getName(): String? = @@ -14,4 +16,10 @@ class VarAssignmentElement(node: ASTNode) : PorkNamedElement(node) { override fun getNameIdentifier(): PsiElement? = PorkElementHelpers.nameIdentifierOfNamedElement(this) + + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) } diff --git a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/WhileElement.kt b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/WhileElement.kt index be117a2..1177042 100644 --- a/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/WhileElement.kt +++ b/support/pork-idea/src/main/kotlin/gay/pizza/pork/idea/psi/gen/WhileElement.kt @@ -2,5 +2,14 @@ package gay.pizza.pork.idea.psi.gen import com.intellij.lang.ASTNode +import com.intellij.navigation.ItemPresentation +import gay.pizza.pork.idea.psi.PorkElementHelpers +import javax.swing.Icon -class WhileElement(node: ASTNode) : PorkElement(node) +class WhileElement(node: ASTNode) : PorkElement(node) { + override fun getIcon(flags: Int): Icon? = + PorkElementHelpers.iconOf(this) + + override fun getPresentation(): ItemPresentation? = + PorkElementHelpers.presentationOf(this) +} diff --git a/support/pork-idea/src/main/resources/META-INF/plugin.xml b/support/pork-idea/src/main/resources/META-INF/plugin.xml index 005f081..36066ae 100644 --- a/support/pork-idea/src/main/resources/META-INF/plugin.xml +++ b/support/pork-idea/src/main/resources/META-INF/plugin.xml @@ -23,7 +23,9 @@ - +