diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..201bebf1782a5c06760d67e09db1c1c2d3c2c210 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +<!-- Keep a Changelog guide -> https://keepachangelog.com --> + +# JastAdd Plugin Changelog + +## [Unreleased] +### Changed +- Changed build script to Kotlin DSL diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9136fd64c14dc1bab1d4bbfb3a26a61259a84f6c --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# JastAdd Language Support + +<!-- Plugin description --> +This plugin provides support for JastAdd and Relational RAGs +<!-- Plugin description end --> diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 92351823fc92e56b7d79732121c8cfd8e1348e9c..0000000000000000000000000000000000000000 --- a/build.gradle +++ /dev/null @@ -1,94 +0,0 @@ -plugins { - id 'java' - id 'org.jetbrains.intellij' version '0.6.5' - id "org.jetbrains.grammarkit" version "2020.3.2" - id 'idea' -} - -group = "org.jastadd" -version = "1.0-SNAPSHOT" - -repositories { - mavenCentral() -} - -runIde { - jvmArgs '--add-exports', 'java.base/jdk.internal.vm=ALL-UNNAMED' -} - -//Kotlin DSL: -// -//tasks.runIde { -// jvmArgs("--add-exports", "java.base/jdk.internal.vm=ALL-UNNAMED") -//} - - -sourceSets { - main.java.srcDirs += "src/gen/java" -} - -apply plugin: 'idea' -apply plugin: 'org.jetbrains.grammarkit' - -idea { - module { - generatedSourceDirs += file('src/gen/java') - } -} - -dependencies { - testImplementation group: 'junit', name: 'junit', version: '4.12' -} - -// See https://github.com/JetBrains/gradle-intellij-plugin/ -intellij { - version = "2020.2.4" - plugins = ['java'] -} - - - -import org.jetbrains.grammarkit.tasks.* - -grammarKit { - // version of IntelliJ patched JFlex (see bintray link below), Default is 1.7.0-1 - jflexRelease = '1.7.0-1' - - // tag or short commit hash of Grammar-Kit to use (see link below). Default is 2020.3.1 - grammarKitRelease = '2020.3.1' -} - -patchPluginXml { - changeNotes """ - Add change notes here.<br> - <em>most HTML tags may be used</em>""" -} - -task generateRelAstGrammarParser(type: GenerateParser) { - - // source bnf file - source = "src/main/grammar/RelAstGrammar.bnf" - - // optional, task-specific root for the generated files. Default: none - targetRoot = 'src/gen/java' - - // path to a parser file, relative to the targetRoot - pathToParser = '/org/jastadd/tooling/RelAstGrammarParser.java' - - // path to a directory with generated psi files, relative to the targetRoot - pathToPsiRoot = '/org/jastadd/tooling/psi' - - // if set, plugin will remove a parser output file and psi output directory before generating new ones. Default: false - purgeOldFiles = true -} - -task generateRelAstGrammarLexer(type: GenerateLexer) { - - source = "src/main/grammar/RelAstGrammar.flex" - - targetDir = 'src/gen/java/org/jastadd/tooling/lexer/' - - targetClass = 'RelAstGrammarLexer' - - purgeOldFiles = true -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000000000000000000000000000000000000..0bf2dc5fbc76ba94304158c94ccc3b6ba3a4fc84 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,164 @@ +import org.jetbrains.changelog.closure +import org.jetbrains.changelog.markdownToHTML +import org.jetbrains.grammarkit.tasks.GenerateLexer +import org.jetbrains.grammarkit.tasks.GenerateParser + +plugins { + // IDE support + idea + // Java support + id("java") + // gradle-intellij-plugin - read more: https://github.com/JetBrains/gradle-intellij-plugin + id("org.jetbrains.intellij") version "0.6.5" + // gradle-changelog-plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin + id("org.jetbrains.changelog") version "0.6.2" + // Grammar-Kit - read more: https://github.com/JetBrains/Grammar-Kit + id("org.jetbrains.grammarkit") version "2020.3.2" +} + +// Import variables from gradle.properties file +val pluginGroup: String by project +// `pluginName_` variable ends with `_` because of the collision with Kotlin magic getter in the `intellij` closure. +// Read more about the issue: https://github.com/JetBrains/intellij-platform-plugin-template/issues/29 +val pluginName_: String by project +val pluginVersion: String by project +val pluginSinceBuild: String by project +val pluginUntilBuild: String by project +val pluginVerifierIdeVersions: String by project + +val platformType: String by project +val platformVersion: String by project +val platformPlugins: String by project +val platformDownloadSources: String by project + + + +apply { + plugin("idea") + plugin("org.jetbrains.grammarkit") + plugin("org.jetbrains.intellij") +} + +group = pluginGroup +version = pluginVersion + +// Configure project's dependencies +repositories { + mavenCentral() + jcenter() +} + +idea { + module { + generatedSourceDirs.add(file("src/gen")) + } +} + +// Configure gradle-intellij-plugin plugin. +// Read more: https://github.com/JetBrains/gradle-intellij-plugin +intellij { + pluginName = pluginName_ +// version = platformVersion +// type = platformType + downloadSources = platformDownloadSources.toBoolean() + updateSinceUntilBuild = true + + // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file. + setPlugins("java") +} + +sourceSets { + main { + java.srcDir("src/gen/java") + } +} + +//import org.jetbrains.grammarkit.tasks.* +// +grammarKit { + // version of IntelliJ patched JFlex (see bintray link below), Default is 1.7.0-1 + jflexRelease = "1.7.0-1" + + // tag or short commit hash of Grammar-Kit to use (see link below). Default is 2020.3.1 + grammarKitRelease = "2020.3.1" +} + +tasks { + + val generateRelAstGrammarLexer = task<GenerateLexer>("generateRelAstGrammarLexer") { + source = "src/main/grammar/RelAstGrammar.flex" + targetDir = "src/gen/java/org/jastadd/tooling/lexer/" + targetClass = "RelAstGrammarLexer" + purgeOldFiles = true + } + + // not fully working because of https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/3 + val generateRelAstGrammarParser = task<GenerateParser>("generateRelAstGrammarParser") { + source = "src/main/grammar/RelAstGrammar.bnf" + targetRoot = "src/gen/java" + pathToParser = "/org/jastadd/tooling/RelAstGrammarParser.java" + pathToPsiRoot = "/org/jastadd/tooling/psi" + purgeOldFiles = true + } + + compileJava { + dependsOn(generateRelAstGrammarLexer) + dependsOn(generateRelAstGrammarParser) + } + + withType<JavaCompile> { + sourceCompatibility = "11" // "1.8" + targetCompatibility = "11" // "1.8" + } + + runIde { + jvmArgs("--add-exports", "java.base/jdk.internal.vm=ALL-UNNAMED") + } + + buildSearchableOptions { + jvmArgs("--add-exports", "java.base/jdk.internal.vm=ALL-UNNAMED") + enabled = false // see https://youtrack.jetbrains.com/issue/KTIJ-782 + } + + patchPluginXml { + + version(pluginVersion) + setSinceBuild(pluginSinceBuild) + untilBuild(pluginUntilBuild) + + // Extract the <!-- Plugin description --> section from README.md and provide for the plugin's manifest + pluginDescription( + closure { + File("./README.md").readText().lines().run { + val start = "<!-- Plugin description -->" + val end = "<!-- Plugin description end -->" + + if (!containsAll(listOf(start, end))) { + throw GradleException("Plugin description section not found in README.md:\n$start ... $end") + } + subList(indexOf(start) + 1, indexOf(end)) + }.joinToString("\n").run { markdownToHTML(this) } + } + ) + + // Get the latest available change notes from the changelog file + changeNotes( + closure { + changelog.getLatest().toHTML() + } + ) + } + + runPluginVerifier { + ideVersions(pluginVerifierIdeVersions) + } + + publishPlugin { + dependsOn("patchChangelog") + token(System.getenv("PUBLISH_TOKEN")) + // pluginVersion is based on the SemVer (https://semver.org) and supports pre-release labels, like 2.1.7-alpha.3 + // Specify pre-release label to publish the plugin in a custom Release Channel automatically. Read more: + // https://jetbrains.org/intellij/sdk/docs/tutorials/build_system/deployment.html#specifying-a-release-channel + channels(pluginVersion.split('-').getOrElse(1) { "default" }.split('.').first()) + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000000000000000000000000000000000000..a548210f6c459d251296cd1a90ac909e96b5ebf4 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,22 @@ +# IntelliJ Platform Artifacts Repositories +# -> https://www.jetbrains.org/intellij/sdk/docs/reference_guide/intellij_artifacts.html + +pluginGroup = org.jastadd +pluginName_ = JastAddGrammar +pluginVersion = 0.1.0 +pluginSinceBuild = 201 +pluginUntilBuild = 203.* +# Plugin Verifier integration -> https://github.com/JetBrains/gradle-intellij-plugin#plugin-verifier-dsl +# See https://jb.gg/intellij-platform-builds-list for available build versions +pluginVerifierIdeVersions = 2020.3.1 + +platformType = IC +platformVersion = 2020.2.4 +platformDownloadSources = true +# Plugin Dependencies -> https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html +# Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22 +platformPlugins = com.intellij.modules.java + +# Opt-out flag for bundling Kotlin standard library. +# See https://kotlinlang.org/docs/reference/using-gradle.html#dependency-on-the-standard-library for details. +kotlin.stdlib.default.dependency = false diff --git a/settings.gradle b/settings.gradle.kts similarity index 100% rename from settings.gradle rename to settings.gradle.kts index cbf5c3bc9c34d9efeb6139aea300ee0325d1a97d..2f0d5d41705f0afcd0af77de1b01f669f2825d8b 100644 --- a/settings.gradle +++ b/settings.gradle.kts @@ -1,2 +1,2 @@ -rootProject.name = "JastAddGrammar" +rootProject.name = "JastAddGrammar" diff --git a/src/main/grammar/RelAstGrammar.bnf b/src/main/grammar/RelAstGrammar.bnf index 9e632fc1ed3b88e584102aad6fa817a3ca8f93cb..081d3f4ba93d185634a64fed29706bdb69bd429d 100644 --- a/src/main/grammar/RelAstGrammar.bnf +++ b/src/main/grammar/RelAstGrammar.bnf @@ -21,9 +21,8 @@ comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT) type_decl ::= ABSTRACT? declared_name (COL type_reference)? (ASSIGN (component | nta_component)*)? SCOL { - mixin="org.jastadd.tooling.psi.impl.RelAstGrammarNamedElementImpl" - implements="org.jastadd.tooling.psi.RelAstGrammarNamedElement" - methods=[getName setName getNameIdentifier] + extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeDeclImplExtension" + implements="org.jastadd.tooling.psi.RelAstGrammarTypeDeclExtension" } nta_component ::= SLASH component SLASH @@ -46,9 +45,8 @@ navigable_role ::= type_reference DOT declared_name (STAR | QUESTION_MARK)? declared_name ::= ID type_reference ::= ID { - mixin="org.jastadd.tooling.psi.impl.RelAstGrammarNamedElementImpl" - implements="org.jastadd.tooling.psi.RelAstGrammarNamedElement" - methods=[getName setName getNameIdentifier] + extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeReferenceImplExtension" + implements="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceExtension" } java_name ::= ID diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java b/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java index 84290018dea71e54249295ff3e40f41b0f78568d..e871cccf11540cb21c3808b1413e6e78dcb4bece 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java @@ -7,10 +7,13 @@ import com.intellij.util.ProcessingContext; import org.jastadd.tooling.parser.RelAstGrammarTypes; import org.jastadd.tooling.psi.RelAstGrammarElementFactory; import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; +import org.jastadd.tooling.psi.RelAstGrammarTypeReference; import org.jetbrains.annotations.NotNull; public class RelAstGrammarCompletionContributor extends CompletionContributor { + public static final String COMPLETION_ELEMENT_SUFFIX = "IntellijIdeaRulezzz"; + public RelAstGrammarCompletionContributor() { // add completion in definition of relations @@ -20,7 +23,8 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { @NotNull ProcessingContext context, @NotNull CompletionResultSet resultSet) { for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) { - resultSet.addElement(LookupElementBuilder.create(RelAstGrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName()))); + RelAstGrammarTypeReference ref = RelAstGrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName()); + resultSet.addElement(LookupElementBuilder.create(ref).withIcon(JastAddIcons.FILE).withTypeText(decl.getContainingFile().getName())); } } } @@ -28,7 +32,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { // add "* ", "? " after REL ID DOT ID extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) - .withTextLengthLongerThan("IntellijIdeaRulezzz".length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string + .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string .afterLeaf(".") .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))), @@ -45,7 +49,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { // add "*", "?" after <- ID DOT ID // add "*", "?" after <-> ID DOT ID extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) - .withTextLengthLongerThan("IntellijIdeaRulezzz".length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string + .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string .afterLeaf(".") .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("<-", "<->"))), @@ -95,7 +99,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { // add "." after <-> ID // add "." after <- ID extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID) - .withTextLengthLongerThan("IntellijIdeaRulezzz".length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string + .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string .afterLeaf("rel", "<->", "<-"), new CompletionProvider<>() { public void addCompletions(@NotNull CompletionParameters parameters, diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java b/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java index 3f8f4c50910dd4c7730f8896ab66b9d93c2ffe52..4133679bf7727239aa2a36d69a0d4ed09d678e8d 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java @@ -47,18 +47,20 @@ public class RelAstGrammarFindUsageProvider implements FindUsagesProvider { @NotNull @Override public String getDescriptiveName(@NotNull PsiElement element) { - if (element instanceof RelAstGrammarTypeDecl && ((RelAstGrammarTypeDecl) element).getName() != null) { - return ((RelAstGrammarTypeDecl) element).getName(); - } else { - return ""; + if (element instanceof RelAstGrammarTypeDecl) { + RelAstGrammarTypeDecl decl = (RelAstGrammarTypeDecl) element; + if (decl.getName() != null) { + return decl.getName(); + } } + return ""; } @NotNull @Override public String getNodeText(@NotNull PsiElement element, boolean useFullName) { if (element instanceof RelAstGrammarTypeDecl) { - return ((RelAstGrammarTypeDecl) element).getText(); + return element.getText(); } else { return ""; } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java b/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java index 09a4de0533fd15fcad069da798988e38450f1662..ae8f8733bd756ee80d9a0038a75dc5c04a49cb8c 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java @@ -6,7 +6,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; -import org.jastadd.tooling.psi.impl.RelAstGrammarPsiImplUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,7 +23,7 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme @NotNull @Override - public ResolveResult[] multiResolve(boolean incompleteCode) { + public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) { Project project = myElement.getProject(); final List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, key); List<ResolveResult> results = new ArrayList<>(); @@ -43,14 +42,15 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme @NotNull @Override - public Object[] getVariants() { + public Object @NotNull [] getVariants() { Project project = myElement.getProject(); List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project); List<LookupElement> variants = new ArrayList<>(); for (final RelAstGrammarTypeDecl typeDecl : typeDecls) { - if (RelAstGrammarPsiImplUtil.getName(typeDecl) != null && typeDecl.getName().length() > 0) { + if (typeDecl.getName() != null && typeDecl.getName().length() > 0) { variants.add(LookupElementBuilder .create(typeDecl).withIcon(JastAddIcons.FILE) + .withPresentableText(typeDecl.getName()) .withTypeText(typeDecl.getContainingFile().getName()) ); } diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java b/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java index fe5c59bb15ae313966c0b0e564e0dcc2ce13f0ae..8a480a0330cf26425481e92f2a957056b2b6899e 100644 --- a/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java +++ b/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java @@ -1,10 +1,6 @@ package org.jastadd.tooling; -import com.intellij.codeInspection.ProblemHighlightType; -import com.intellij.lang.annotation.AnnotationHolder; -import com.intellij.lang.annotation.HighlightSeverity; -import com.intellij.openapi.editor.DefaultLanguageHighlighterColors; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -18,11 +14,15 @@ import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; import org.jetbrains.annotations.NotNull; import java.util.*; -import java.util.stream.Collectors; public class RelAstGrammarUtil { + private RelAstGrammarUtil() { + // appease SonarLint java:S1118 + throw new IllegalStateException("Utility class"); + } + /** * Searches the entire project for RelAst grammar files with TypeDecls with the given name. * @@ -41,9 +41,7 @@ public class RelAstGrammarUtil { RelAstGrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, RelAstGrammarTypeDecl.class); if (typeDecls != null) { for (RelAstGrammarTypeDecl typeDecl : typeDecls) { - // FIXME workaround because mixins are not working with gradle-grammar-kit-plugin - // see https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/23 - if (name.equals(org.jastadd.tooling.psi.impl.RelAstGrammarPsiImplUtil.getName(typeDecl))) { + if (name.equals(typeDecl.getName())) { result.add(typeDecl); } } diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..79837b70315b8c0d8c0913811f5057a5196ea71b --- /dev/null +++ b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java @@ -0,0 +1,4 @@ +package org.jastadd.tooling.psi; + +public interface RelAstGrammarTypeDeclExtension extends RelAstGrammarNamedElement { +} diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..a6c95e7553e773c28c39c0d0f764074eaba5ccc2 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java @@ -0,0 +1,4 @@ +package org.jastadd.tooling.psi; + +public interface RelAstGrammarTypeReferenceExtension extends RelAstGrammarNamedElement { +} diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarPsiImplUtil.java b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarPsiImplUtil.java deleted file mode 100644 index 22766e52a9b2e17d66e52a625cf4babe5efaa6f1..0000000000000000000000000000000000000000 --- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarPsiImplUtil.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.jastadd.tooling.psi.impl; - -import com.intellij.lang.ASTNode; -import com.intellij.psi.PsiElement; -import org.jastadd.tooling.parser.RelAstGrammarTypes; -import org.jastadd.tooling.psi.RelAstGrammarDeclaredName; -import org.jastadd.tooling.psi.RelAstGrammarElementFactory; -import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; -import org.jastadd.tooling.psi.RelAstGrammarTypeReference; - -public class RelAstGrammarPsiImplUtil { - public static String getName(RelAstGrammarTypeDecl element) { - // this finds the *first* ID, which is what we want - ASTNode keyNode = element.getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); - if (keyNode != null) { - return keyNode.getText(); - } else { - System.out.println("getName NULL"); - return null; - } - } - - public static PsiElement setName(RelAstGrammarTypeDecl element, String newName) { - ASTNode keyNode = element.getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); - if (keyNode != null) { - RelAstGrammarDeclaredName name = RelAstGrammarElementFactory.createDeclaredName(element.getProject(), newName); - ASTNode newKeyNode = name.getNode(); - element.getNode().replaceChild(keyNode, newKeyNode); - } - return element; - } - - public static PsiElement getNameIdentifier(RelAstGrammarTypeDecl element) { - ASTNode keyNode = element.getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); - if (keyNode != null) { - return keyNode.getPsi(); - } else { - System.out.println("getNameIdentifier NULL"); - return null; - } - } - - public static String getName(RelAstGrammarTypeReference element) { - // this finds the *first* ID, which is what we want - ASTNode keyNode = element.getNode(); - if (keyNode != null) { - return keyNode.getText(); - } else { - System.out.println("RelAstGrammarTypeReference.getName() returned NULL"); - return null; - } - } - - public static PsiElement setName(RelAstGrammarTypeReference element, String newName) { - ASTNode keyNode = element.getNode().getFirstChildNode(); - if (keyNode != null) { - RelAstGrammarTypeReference name = RelAstGrammarElementFactory.createTypeReference(element.getProject(), newName); - ASTNode newKeyNode = name.getNode().getFirstChildNode(); - element.getNode().replaceChild(keyNode, newKeyNode); - } - return element; - } - - public static PsiElement getNameIdentifier(RelAstGrammarTypeReference element) { - ASTNode keyNode = element.getNode(); - if (keyNode != null) { - return keyNode.getPsi(); - } else { - System.out.println("getNameIdentifier2 NULL"); - return null; - } - } - -} diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..b51ed4fec649f326781dd67a61489f086485536d --- /dev/null +++ b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java @@ -0,0 +1,47 @@ +package org.jastadd.tooling.psi.impl; + +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import org.jastadd.tooling.parser.RelAstGrammarTypes; +import org.jastadd.tooling.psi.RelAstGrammarDeclaredName; +import org.jastadd.tooling.psi.RelAstGrammarElementFactory; +import org.jastadd.tooling.psi.RelAstGrammarTypeDeclExtension; +import org.jetbrains.annotations.NotNull; + +public class RelAstGrammarTypeDeclImplExtension extends RelAstGrammarNamedElementImpl implements RelAstGrammarTypeDeclExtension { + + public RelAstGrammarTypeDeclImplExtension(@NotNull ASTNode node) { + super(node); + } + + public String getName() { + // this finds the *first* ID, which is what we want + ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); + if (keyNode != null) { + return keyNode.getText(); + } else { + return null; + } + } + + public PsiElement setName(@NotNull String newName) { + ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); + if (keyNode != null) { + RelAstGrammarDeclaredName name = RelAstGrammarElementFactory.createDeclaredName(getProject(), newName); + ASTNode newKeyNode = name.getNode(); + getNode().replaceChild(keyNode, newKeyNode); + } + return this; + } + + public PsiElement getNameIdentifier() { + ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME); + if (keyNode != null) { + return keyNode.getPsi(); + } else { + return null; + } + } + + +} diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..74f719d63b2e0c086a2be79132133eb4bba65919 --- /dev/null +++ b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java @@ -0,0 +1,35 @@ +package org.jastadd.tooling.psi.impl; + +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import org.jastadd.tooling.psi.RelAstGrammarElementFactory; +import org.jastadd.tooling.psi.RelAstGrammarTypeReference; +import org.jastadd.tooling.psi.RelAstGrammarTypeReferenceExtension; +import org.jetbrains.annotations.NotNull; + +public class RelAstGrammarTypeReferenceImplExtension extends RelAstGrammarNamedElementImpl implements RelAstGrammarTypeReferenceExtension { + + public RelAstGrammarTypeReferenceImplExtension(@NotNull ASTNode node) { + super(node); + } + + public String getName() { + // this finds the *first* ID, which is what we want + return getNode().getText(); + } + + public PsiElement setName(@NotNull String newName) { + ASTNode keyNode = getNode().getFirstChildNode(); + if (keyNode != null) { + RelAstGrammarTypeReference name = RelAstGrammarElementFactory.createTypeReference(getProject(), newName); + ASTNode newKeyNode = name.getNode().getFirstChildNode(); + getNode().replaceChild(keyNode, newKeyNode); + } + return this; + } + + public PsiElement getNameIdentifier() { + return getNode().getPsi(); + } + +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 7bb097d05c32c16a757a723a855c5212d4879a59..321963c6945774ea7cc9d107882e92da476cb18f 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -3,9 +3,6 @@ <name>JastAdd Grammar Language</name> <vendor email="johannes.mey@tu-dresden.de" url="jastadd.org">The JastAdd Team</vendor> - <description><![CDATA[ - A plugin for JastAdd grammars specified in ast and relast files. - ]]></description> <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html on how to target different products --> @@ -37,7 +34,8 @@ <lang.refactoringSupport language="JastAddGrammar" implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/> - <lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/> + <lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" + implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/> <lang.findUsagesProvider language="JastAddGrammar"