From 49dab59170c2f286e0057952d1925c5be746f6e6 Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Mon, 4 Jan 2021 01:42:23 +0100
Subject: [PATCH] add error when reference in grammar is undefined

---
 .../org/jastadd/tooling/RelAstGrammarAnnotator.java    | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java b/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java
index ce19247..91f4e0c 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java
+++ b/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java
@@ -8,6 +8,7 @@ import com.intellij.lang.annotation.HighlightSeverity;
 import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
 import com.intellij.psi.PsiElement;
 import org.jastadd.tooling.psi.RelAstGrammarComponent;
+import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
 import org.jetbrains.annotations.NotNull;
 
 public class RelAstGrammarAnnotator implements Annotator {
@@ -29,6 +30,15 @@ public class RelAstGrammarAnnotator implements Annotator {
             .create();
         }
       }
+    } else if (element instanceof RelAstGrammarTypeReference) {
+      RelAstGrammarTypeReference reference = (RelAstGrammarTypeReference) element;
+      if (RelAstGrammarUtil.findTypeDecl(element.getProject(), reference.getName()).isEmpty()) {
+        holder.newAnnotation(HighlightSeverity.ERROR, "Undefined reference")
+          .range(element.getTextRange())
+          .highlightType(ProblemHighlightType.ERROR)
+          .tooltip("Reference to unknown nonterminal type.")
+          .create();
+      }
     }
 
   }
-- 
GitLab