From 927d293e4db7710ec9e850d543a7e805be64bb58 Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Thu, 2 Dec 2021 01:41:22 +0100
Subject: [PATCH] add filters in structure view

---
 .../aspect/AspectStructureViewModel.java      |  2 +-
 .../aspect/JastAddAspectIntertypeFilter.java  | 52 +++++++++++++++++++
 .../aspect/JastAddAspectRewriteFilter.java    | 44 ++++++++++++++++
 3 files changed, 97 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/org/jastadd/tooling/aspect/JastAddAspectIntertypeFilter.java
 create mode 100644 src/main/java/org/jastadd/tooling/aspect/JastAddAspectRewriteFilter.java

diff --git a/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewModel.java b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewModel.java
index d2af7e5..e14181b 100644
--- a/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewModel.java
+++ b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewModel.java
@@ -43,6 +43,6 @@ public class AspectStructureViewModel extends StructureViewModelBase implements
 
   @Override
   public Filter @NotNull [] getFilters() {
-    return new Filter[]{new JastAddAspectAttributeFilter()};
+    return new Filter[]{new JastAddAspectAttributeFilter(), new JastAddAspectIntertypeFilter(), new JastAddAspectRewriteFilter()};
   }
 }
diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectIntertypeFilter.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectIntertypeFilter.java
new file mode 100644
index 0000000..5f03719
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectIntertypeFilter.java
@@ -0,0 +1,52 @@
+package org.jastadd.tooling.aspect;
+
+import com.intellij.ide.util.treeView.smartTree.ActionPresentation;
+import com.intellij.ide.util.treeView.smartTree.ActionPresentationData;
+import com.intellij.ide.util.treeView.smartTree.Filter;
+import com.intellij.ide.util.treeView.smartTree.TreeElement;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectEnumDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectFieldDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectInterfaceDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectMethodDeclaration;
+import org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectClassDeclarationImpl;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class JastAddAspectIntertypeFilter implements Filter {
+  @NonNls
+  public static final String ID = "HIDE_INTERTYPE_DECLS";
+
+  @Override
+  public boolean isVisible(TreeElement treeNode) {
+    if (treeNode instanceof AspectStructureViewElement) {
+      return !(
+        ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectMethodDeclaration
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectClassDeclarationImpl
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectEnumDeclaration
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectInterfaceDeclaration
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectFieldDeclaration
+      );
+    } else {
+      return true;
+    }
+  }
+
+  @Override
+  @NotNull
+  public ActionPresentation getPresentation() {
+    // TODO use i18n and string bundle like JavaStructureViewBundle
+    return new ActionPresentationData("Hide Intertype Declarations", null, JastAddIcons.INTERTYPE_DECL);
+  }
+
+  @Override
+  @NotNull
+  public String getName() {
+    return ID;
+  }
+
+  @Override
+  public boolean isReverted() {
+    return false;
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectRewriteFilter.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectRewriteFilter.java
new file mode 100644
index 0000000..bd82e1a
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectRewriteFilter.java
@@ -0,0 +1,44 @@
+package org.jastadd.tooling.aspect;
+
+import com.intellij.ide.util.treeView.smartTree.ActionPresentation;
+import com.intellij.ide.util.treeView.smartTree.ActionPresentationData;
+import com.intellij.ide.util.treeView.smartTree.Filter;
+import com.intellij.ide.util.treeView.smartTree.TreeElement;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectRewrite;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class JastAddAspectRewriteFilter implements Filter {
+  @NonNls
+  public static final String ID = "HIDE_REWRITES";
+
+  @Override
+  public boolean isVisible(TreeElement treeNode) {
+    if (treeNode instanceof AspectStructureViewElement) {
+      return !(((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectRewrite);
+    }
+    else {
+      return true;
+    }
+  }
+
+  @Override
+  @NotNull
+  public ActionPresentation getPresentation() {
+    // TODO use i18n and string bundle like JavaStructureViewBundle
+    return new ActionPresentationData("Hide Rewrites", null, JastAddIcons.REWRITE);
+  }
+
+  @Override
+  @NotNull
+  public String getName() {
+    return ID;
+  }
+
+  @Override
+  public boolean isReverted() {
+    return false;
+  }
+}
-- 
GitLab