Skip to content
Snippets Groups Projects
Commit 34ba46d9 authored by Johannes Mey's avatar Johannes Mey
Browse files

switch to kotlin gradle dsl and make build gradle compliant

parent 9029afb7
Branches
Tags
No related merge requests found
Showing
with 320 additions and 200 deletions
<!-- Keep a Changelog guide -> https://keepachangelog.com -->
# JastAdd Plugin Changelog
## [Unreleased]
### Changed
- Changed build script to Kotlin DSL
# JastAdd Language Support
<!-- Plugin description -->
This plugin provides support for JastAdd and Relational RAGs
<!-- Plugin description end -->
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
}
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())
}
}
# 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
rootProject.name = "JastAddGrammar"
rootProject.name = "JastAddGrammar"
...@@ -21,9 +21,8 @@ comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT) ...@@ -21,9 +21,8 @@ comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
type_decl ::= ABSTRACT? declared_name (COL type_reference)? (ASSIGN (component | nta_component)*)? SCOL type_decl ::= ABSTRACT? declared_name (COL type_reference)? (ASSIGN (component | nta_component)*)? SCOL
{ {
mixin="org.jastadd.tooling.psi.impl.RelAstGrammarNamedElementImpl" extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeDeclImplExtension"
implements="org.jastadd.tooling.psi.RelAstGrammarNamedElement" implements="org.jastadd.tooling.psi.RelAstGrammarTypeDeclExtension"
methods=[getName setName getNameIdentifier]
} }
nta_component ::= SLASH component SLASH nta_component ::= SLASH component SLASH
...@@ -46,9 +45,8 @@ navigable_role ::= type_reference DOT declared_name (STAR | QUESTION_MARK)? ...@@ -46,9 +45,8 @@ navigable_role ::= type_reference DOT declared_name (STAR | QUESTION_MARK)?
declared_name ::= ID declared_name ::= ID
type_reference ::= ID type_reference ::= ID
{ {
mixin="org.jastadd.tooling.psi.impl.RelAstGrammarNamedElementImpl" extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeReferenceImplExtension"
implements="org.jastadd.tooling.psi.RelAstGrammarNamedElement" implements="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceExtension"
methods=[getName setName getNameIdentifier]
} }
java_name ::= ID java_name ::= ID
...@@ -7,10 +7,13 @@ import com.intellij.util.ProcessingContext; ...@@ -7,10 +7,13 @@ import com.intellij.util.ProcessingContext;
import org.jastadd.tooling.parser.RelAstGrammarTypes; import org.jastadd.tooling.parser.RelAstGrammarTypes;
import org.jastadd.tooling.psi.RelAstGrammarElementFactory; import org.jastadd.tooling.psi.RelAstGrammarElementFactory;
import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class RelAstGrammarCompletionContributor extends CompletionContributor { public class RelAstGrammarCompletionContributor extends CompletionContributor {
public static final String COMPLETION_ELEMENT_SUFFIX = "IntellijIdeaRulezzz";
public RelAstGrammarCompletionContributor() { public RelAstGrammarCompletionContributor() {
// add completion in definition of relations // add completion in definition of relations
...@@ -20,7 +23,8 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { ...@@ -20,7 +23,8 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
@NotNull ProcessingContext context, @NotNull ProcessingContext context,
@NotNull CompletionResultSet resultSet) { @NotNull CompletionResultSet resultSet) {
for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) { 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 { ...@@ -28,7 +32,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
// add "* ", "? " after REL ID DOT ID // add "* ", "? " after REL ID DOT ID
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.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(".")
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))), .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))),
...@@ -45,7 +49,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { ...@@ -45,7 +49,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
// add "*", "?" after <- ID DOT ID // add "*", "?" after <- ID DOT ID
// add "*", "?" after <-> ID DOT ID // add "*", "?" after <-> ID DOT ID
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.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(".")
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))) .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
.afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("<-", "<->"))), .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("<-", "<->"))),
...@@ -95,7 +99,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor { ...@@ -95,7 +99,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
// add "." after <-> ID // add "." after <-> ID
// add "." after <- ID // add "." after <- ID
extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.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", "<->", "<-"), .afterLeaf("rel", "<->", "<-"),
new CompletionProvider<>() { new CompletionProvider<>() {
public void addCompletions(@NotNull CompletionParameters parameters, public void addCompletions(@NotNull CompletionParameters parameters,
......
...@@ -47,18 +47,20 @@ public class RelAstGrammarFindUsageProvider implements FindUsagesProvider { ...@@ -47,18 +47,20 @@ public class RelAstGrammarFindUsageProvider implements FindUsagesProvider {
@NotNull @NotNull
@Override @Override
public String getDescriptiveName(@NotNull PsiElement element) { public String getDescriptiveName(@NotNull PsiElement element) {
if (element instanceof RelAstGrammarTypeDecl && ((RelAstGrammarTypeDecl) element).getName() != null) { if (element instanceof RelAstGrammarTypeDecl) {
return ((RelAstGrammarTypeDecl) element).getName(); RelAstGrammarTypeDecl decl = (RelAstGrammarTypeDecl) element;
} else { if (decl.getName() != null) {
return ""; return decl.getName();
} }
} }
return "";
}
@NotNull @NotNull
@Override @Override
public String getNodeText(@NotNull PsiElement element, boolean useFullName) { public String getNodeText(@NotNull PsiElement element, boolean useFullName) {
if (element instanceof RelAstGrammarTypeDecl) { if (element instanceof RelAstGrammarTypeDecl) {
return ((RelAstGrammarTypeDecl) element).getText(); return element.getText();
} else { } else {
return ""; return "";
} }
......
...@@ -6,7 +6,6 @@ import com.intellij.openapi.project.Project; ...@@ -6,7 +6,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*; import com.intellij.psi.*;
import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
import org.jastadd.tooling.psi.impl.RelAstGrammarPsiImplUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
...@@ -24,7 +23,7 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme ...@@ -24,7 +23,7 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme
@NotNull @NotNull
@Override @Override
public ResolveResult[] multiResolve(boolean incompleteCode) { public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) {
Project project = myElement.getProject(); Project project = myElement.getProject();
final List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, key); final List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, key);
List<ResolveResult> results = new ArrayList<>(); List<ResolveResult> results = new ArrayList<>();
...@@ -43,14 +42,15 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme ...@@ -43,14 +42,15 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme
@NotNull @NotNull
@Override @Override
public Object[] getVariants() { public Object @NotNull [] getVariants() {
Project project = myElement.getProject(); Project project = myElement.getProject();
List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project); List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project);
List<LookupElement> variants = new ArrayList<>(); List<LookupElement> variants = new ArrayList<>();
for (final RelAstGrammarTypeDecl typeDecl : typeDecls) { 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 variants.add(LookupElementBuilder
.create(typeDecl).withIcon(JastAddIcons.FILE) .create(typeDecl).withIcon(JastAddIcons.FILE)
.withPresentableText(typeDecl.getName())
.withTypeText(typeDecl.getContainingFile().getName()) .withTypeText(typeDecl.getContainingFile().getName())
); );
} }
......
package org.jastadd.tooling; 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.project.Project;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*; import com.intellij.psi.*;
...@@ -18,11 +14,15 @@ import org.jastadd.tooling.psi.RelAstGrammarTypeDecl; ...@@ -18,11 +14,15 @@ import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
public class RelAstGrammarUtil { 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. * Searches the entire project for RelAst grammar files with TypeDecls with the given name.
* *
...@@ -41,9 +41,7 @@ public class RelAstGrammarUtil { ...@@ -41,9 +41,7 @@ public class RelAstGrammarUtil {
RelAstGrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, RelAstGrammarTypeDecl.class); RelAstGrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, RelAstGrammarTypeDecl.class);
if (typeDecls != null) { if (typeDecls != null) {
for (RelAstGrammarTypeDecl typeDecl : typeDecls) { for (RelAstGrammarTypeDecl typeDecl : typeDecls) {
// FIXME workaround because mixins are not working with gradle-grammar-kit-plugin if (name.equals(typeDecl.getName())) {
// see https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/23
if (name.equals(org.jastadd.tooling.psi.impl.RelAstGrammarPsiImplUtil.getName(typeDecl))) {
result.add(typeDecl); result.add(typeDecl);
} }
} }
......
package org.jastadd.tooling.psi;
public interface RelAstGrammarTypeDeclExtension extends RelAstGrammarNamedElement {
}
package org.jastadd.tooling.psi;
public interface RelAstGrammarTypeReferenceExtension extends RelAstGrammarNamedElement {
}
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;
}
}
}
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;
}
}
}
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();
}
}
...@@ -3,9 +3,6 @@ ...@@ -3,9 +3,6 @@
<name>JastAdd Grammar Language</name> <name>JastAdd Grammar Language</name>
<vendor email="johannes.mey@tu-dresden.de" url="jastadd.org">The JastAdd Team</vendor> <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 <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products --> on how to target different products -->
...@@ -37,7 +34,8 @@ ...@@ -37,7 +34,8 @@
<lang.refactoringSupport language="JastAddGrammar" <lang.refactoringSupport language="JastAddGrammar"
implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/> 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" <lang.findUsagesProvider language="JastAddGrammar"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment