From e87f1dcc5f8b2aa80eddf6c3e02bf1a215e62cee Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Sun, 14 Nov 2021 00:58:59 +0100
Subject: [PATCH] embedded java for attribute blocks

---
 CHANGELOG.md                                         |  3 +++
 src/main/grammar/Aspect.bnf                          | 12 ++++++++----
 ...nguageInjector.java => JavaLanguageInjector.java} |  5 +++--
 .../aspect/psi/JastAddAspectJavaBlockExtension.java  |  4 ----
 .../aspect/psi/JastAddAspectJavaExtension.java       |  4 ++++
 ...sion.java => JastAddAspectJavaImplExtension.java} | 10 ++++------
 src/main/resources/META-INF/plugin.xml               |  2 +-
 7 files changed, 23 insertions(+), 17 deletions(-)
 rename src/main/java/org/jastadd/tooling/aspect/{JavaBlockLanguageInjector.java => JavaLanguageInjector.java} (93%)
 delete mode 100644 src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaBlockExtension.java
 create mode 100644 src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaExtension.java
 rename src/main/java/org/jastadd/tooling/aspect/psi/impl/{JastAddAspectJavaBlockImplExtension.java => JastAddAspectJavaImplExtension.java} (76%)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 00613e2..d5c867b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@
 ### Added
 - Support for IntelliJ IDEA 2021.2.3.
 - Initial support for JastAdd aspect files.
+  - syntax highlighter and color settings
+  - two file types for jrag and jadd
+  - embedded java for attribute equation blocks
 
 ### Changed
 
diff --git a/src/main/grammar/Aspect.bnf b/src/main/grammar/Aspect.bnf
index c471de6..da2d4a5 100644
--- a/src/main/grammar/Aspect.bnf
+++ b/src/main/grammar/Aspect.bnf
@@ -33,8 +33,8 @@
 //
 //java_block ::= JAVABLOCK
 //{
-//  implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlockExtension"
-//  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension"
+//  implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaExtension"
+//  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaImplExtension"
 //}
 
 // aspect_body_declarations_eof ::= aspect_body_declaration* EOF
@@ -278,8 +278,8 @@ annotation ::= ( normal_annotation | single_member_annotation | marker_annotatio
 
 //class_body_declaration_in_paren ::= JAVA_IN_PAREN
 //{
-//  implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlockExtension"
-//  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension"
+//  implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaExtension"
+//  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaImplExtension"
 //}
 
 // should be parsed after circular and in collection attributes
@@ -303,6 +303,10 @@ enum_declaration ::= ENUM_ANYTHING_LBRACE_ANYTHING_RBRACE // ENUM java_identifie
 
 // only within attribute equations
 block ::= LBRACE_ANYTHING_RBRACE
+{
+  implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaExtension"
+  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaImplExtension"
+}
 
 // TODO unsupported
 
diff --git a/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java b/src/main/java/org/jastadd/tooling/aspect/JavaLanguageInjector.java
similarity index 93%
rename from src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java
rename to src/main/java/org/jastadd/tooling/aspect/JavaLanguageInjector.java
index 609f835..b07e711 100644
--- a/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java
+++ b/src/main/java/org/jastadd/tooling/aspect/JavaLanguageInjector.java
@@ -9,7 +9,7 @@ import com.intellij.psi.PsiLanguageInjectionHost;
 import org.jastadd.tooling.aspect.psi.*;
 import org.jetbrains.annotations.NotNull;
 
-public class JavaBlockLanguageInjector implements LanguageInjector {
+public class JavaLanguageInjector implements LanguageInjector {
 
   /**
    * @param host                     PSI element inside which your language will be injected.
@@ -24,7 +24,6 @@ public class JavaBlockLanguageInjector implements LanguageInjector {
     if (host.isValidHost()) {
       if (host instanceof JastAddAspectExpressionInBrackets) {
         // TODO
-        injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m(){", "}");
       } else if (host instanceof JastAddAspectNormalAnnotation) {
         // TODO
       } else if (host instanceof JastAddAspectSingleMemberAnnotation) {
@@ -37,6 +36,8 @@ public class JavaBlockLanguageInjector implements LanguageInjector {
         // TODO
       } else if (host instanceof JastAddAspectAnnotationTypeDeclaration) {
         // TODO
+      } else if (host instanceof JastAddAspectBlock) {
+        injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m()", "}");
       }
     }
   }
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaBlockExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaBlockExtension.java
deleted file mode 100644
index 75b2f3e..0000000
--- a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaBlockExtension.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.jastadd.tooling.aspect.psi;
-
-public interface JastAddAspectJavaBlockExtension extends com.intellij.psi.PsiLanguageInjectionHost {
-}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaExtension.java
new file mode 100644
index 0000000..31d4890
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectJavaExtension.java
@@ -0,0 +1,4 @@
+package org.jastadd.tooling.aspect.psi;
+
+public interface JastAddAspectJavaExtension extends com.intellij.psi.PsiLanguageInjectionHost {
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectJavaBlockImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectJavaImplExtension.java
similarity index 76%
rename from src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectJavaBlockImplExtension.java
rename to src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectJavaImplExtension.java
index f1a19e0..f29d91a 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectJavaBlockImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectJavaImplExtension.java
@@ -2,15 +2,13 @@ package org.jastadd.tooling.aspect.psi.impl;
 
 import com.intellij.extapi.psi.ASTWrapperPsiElement;
 import com.intellij.lang.ASTNode;
-import com.intellij.psi.LiteralTextEscaper;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiLanguageInjectionHost;
-import org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlockExtension;
+import com.intellij.psi.*;
+import org.jastadd.tooling.aspect.psi.JastAddAspectJavaExtension;
 import org.jetbrains.annotations.NotNull;
 
-public class JastAddAspectJavaBlockImplExtension extends ASTWrapperPsiElement implements JastAddAspectJavaBlockExtension {
+public class JastAddAspectJavaImplExtension extends ASTWrapperPsiElement implements JastAddAspectJavaExtension {
 
-  public JastAddAspectJavaBlockImplExtension(@NotNull ASTNode node) {
+  public JastAddAspectJavaImplExtension(@NotNull ASTNode node) {
     super(node);
   }
 
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 43ea39d..93ed476 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -67,7 +67,7 @@
 
         <lang.parserDefinition language="JastAddAspect"
                                implementationClass="org.jastadd.tooling.aspect.parser.AspectParserDefinition"/>
-        <languageInjector implementation="org.jastadd.tooling.aspect.JavaBlockLanguageInjector"/>
+        <languageInjector implementation="org.jastadd.tooling.aspect.JavaLanguageInjector"/>
 
         <lang.syntaxHighlighterFactory language="JastAddAspect"
                                        implementationClass="org.jastadd.tooling.aspect.AspectSyntaxHighlighterFactory"/>
-- 
GitLab