Speed search for "Dynamic properties", IDEA-60400 - remove strange tooltip
authorMaxim.Medvedev <maxim.medvedev@jetbrains.com>
Wed, 1 Feb 2012 11:57:51 +0000 (15:57 +0400)
committerMaxim.Medvedev <maxim.medvedev@jetbrains.com>
Wed, 1 Feb 2012 12:00:27 +0000 (16:00 +0400)
plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicToolWindowWrapper.java

index ce0da39232b0d7181bd870769954ec5204e944e2..a5164249602b137a5363f24e8baab472ebda5493 100644 (file)
@@ -44,6 +44,7 @@ import com.intellij.ui.treeStructure.treetable.TreeTableTree;
 import com.intellij.util.IncorrectOperationException;
 import com.intellij.util.NullableFunction;
 import com.intellij.util.containers.ContainerUtil;
+import com.intellij.util.containers.Convertor;
 import com.intellij.util.ui.AbstractTableCellEditor;
 import com.intellij.util.ui.ColumnInfo;
 import com.intellij.util.ui.UIUtil;
@@ -57,8 +58,6 @@ import org.jetbrains.plugins.groovy.GroovyIcons;
 import org.jetbrains.plugins.groovy.annotator.intentions.QuickfixUtil;
 import org.jetbrains.plugins.groovy.annotator.intentions.dynamic.elements.*;
 import org.jetbrains.plugins.groovy.debugger.fragments.GroovyCodeFragment;
-import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
-import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
 
 import javax.swing.*;
 import javax.swing.event.CellEditorListener;
@@ -73,7 +72,6 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
@@ -139,12 +137,8 @@ public class DynamicToolWindowWrapper {
 
     myBigPanel.setBackground(UIUtil.getFieldForegroundColor());
 
-    final DynamicFilterComponent filter = new DynamicFilterComponent(GroovyBundle.message("dynamic.toolwindow.property.filter"), 10);
-    filter.setBackground(UIUtil.getLabelBackground());
-
     final JPanel panel = new JPanel(new BorderLayout());
     myBigPanel.add(panel, BorderLayout.CENTER);
-    panel.add(filter, BorderLayout.NORTH);
 
     myTreeTablePanel = new JPanel(new BorderLayout());
     rebuildTreePanel();
@@ -223,6 +217,20 @@ public class DynamicToolWindowWrapper {
 
     myTreeTable = new MyTreeTable(myTreeTableModel);
 
+    new TreeTableSpeedSearch(myTreeTable, new Convertor<TreePath, String>() {
+      @Override
+      public String convert(TreePath o) {
+        final Object node = o.getLastPathComponent();
+        if (node instanceof DefaultMutableTreeNode) {
+          final Object object = ((DefaultMutableTreeNode)node).getUserObject();
+          if (object instanceof DNamedElement) {
+            return ((DNamedElement)object).getName();
+          }
+        }
+        return "";
+      }
+    });
+
     DefaultActionGroup group = new DefaultActionGroup();
     group.add(ActionManager.getInstance().getAction(RemoveDynamicAction.GROOVY_DYNAMIC_REMOVE));
     PopupHandler.installUnknownPopupHandler(myTreeTable, group, ActionManager.getInstance());
@@ -237,13 +245,10 @@ public class DynamicToolWindowWrapper {
                                                      int row,
                                                      int column) {
         if (value instanceof String) {
-          final GrTypeElement typeElement;
           try {
-            typeElement = GroovyPsiElementFactory.getInstance(myProject).createTypeElement(((String)value));
-            if (typeElement != null){
-              String shortName = typeElement.getType().getPresentableText();
-              return new JLabel(shortName);
-            }
+            final PsiType type = JavaPsiFacade.getElementFactory(myProject).createTypeFromText((String)value, null);
+            String shortName = type.getPresentableText();
+            return new JLabel(shortName);
           }
           catch (IncorrectOperationException e) {
             LOG.debug("Type cannot be created", e);
@@ -274,11 +279,9 @@ public class DynamicToolWindowWrapper {
         }
 
         try {
-          GrTypeElement typeElement = GroovyPsiElementFactory.getInstance(myProject).createTypeElement(newTypeValue);
-          if (typeElement != null) {
-            String canonical = typeElement.getType().getCanonicalText();
-            if (canonical != null) newTypeValue = canonical;
-          }
+          final PsiType type = JavaPsiFacade.getElementFactory(myProject).createTypeFromText(newTypeValue, null);
+          String canonical = type.getCanonicalText();
+          if (canonical != null) newTypeValue = canonical;
         }
         catch (IncorrectOperationException ex) {
           //do nothing in case bad string is entered
@@ -310,8 +313,8 @@ public class DynamicToolWindowWrapper {
 
         if (dynamicElement instanceof DPropertyElement) {
           DynamicManager.getInstance(myProject).replaceDynamicPropertyType(className, name, (String)oldTypeValue, newTypeValue);
-
-        else if (dynamicElement instanceof DMethodElement) {
+        }
+        else if (dynamicElement instanceof DMethodElement) {
           final List<ParamInfo> myPairList = ((DMethodElement)dynamicElement).getPairs();
           DynamicManager.getInstance(myProject).replaceDynamicMethodType(className, name, myPairList, (String)oldTypeValue, newTypeValue);
         }
@@ -460,20 +463,6 @@ public class DynamicToolWindowWrapper {
 
     removeNamedElement(((DNamedElement)namedElement));
 
-    /*final Object selectionNode = selectionPath.getLastPathComponent();
-    if (!(selectionNode instanceof DefaultMutableTreeNode)) return false;
-
-    DefaultMutableTreeNode toSelect = (parent.getChildAfter(child) != null || parent.getChildCount() == 1 ?
-        ((DefaultMutableTreeNode) selectionNode).getNextNode() :
-        ((DefaultMutableTreeNode) selectionNode).getPreviousNode());
-
-//    DefaultMutableTreeNode toSelect = toSelect != null ? (DefaultMutableTreeNode) toSelect.getLastPathComponent() : null;
-
-    removeFromParent(parent, child);
-    if (toSelect != null) {
-      setSelectedNode(toSelect, myProject);
-    }*/
-
     return true;
   }
 
@@ -551,81 +540,6 @@ public class DynamicToolWindowWrapper {
     }
   }
 
-  class DynamicFilterComponent extends FilterComponent {
-
-    public DynamicFilterComponent(@NonNls String propertyName, int historySize) {
-      super(propertyName, historySize);
-    }
-
-    public void filter() {
-      DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
-      buildTree(rootNode);
-
-      String filterText;
-      List<DefaultMutableTreeNode> classes = new ArrayList<DefaultMutableTreeNode>();
-      List<DefaultMutableTreeNode> dynamicNodes = new ArrayList<DefaultMutableTreeNode>();
-
-      if (rootNode.isLeaf()) return;
-      DefaultMutableTreeNode classNode = (DefaultMutableTreeNode)rootNode.getFirstChild();
-      while (classNode != null) {
-
-        if (classNode.isLeaf()) {
-          classNode = (DefaultMutableTreeNode)rootNode.getChildAfter(classNode);
-          continue;
-        }
-
-        DefaultMutableTreeNode dynamicNode = (DefaultMutableTreeNode)classNode.getFirstChild();
-        while (dynamicNode != null) {
-
-          final Object childObject = dynamicNode.getUserObject();
-          if (!(childObject instanceof DItemElement)) break;
-
-          filterText = getFilter();
-          if (filterText == null || filterText.isEmpty()) {
-            ((DItemElement)childObject).setHighlightedText("");
-
-            dynamicNodes.add(dynamicNode);
-            dynamicNode = (DefaultMutableTreeNode)classNode.getChildAfter(dynamicNode);
-            continue;
-          }
-
-          final String name = (((DItemElement)childObject)).getName();
-
-          if (name.contains(filterText)) {
-            ((DItemElement)childObject).setHighlightedText(filterText);
-            dynamicNodes.add(dynamicNode);
-          }
-
-          dynamicNode = (DefaultMutableTreeNode)classNode.getChildAfter(dynamicNode);
-        }
-
-        if (!dynamicNodes.isEmpty()) {
-          classes.add(classNode);
-        }
-
-        classNode.removeAllChildren();
-
-        for (DefaultMutableTreeNode node : dynamicNodes) {
-          classNode.add(node);
-        }
-
-        dynamicNodes.clear();
-
-        classNode = (DefaultMutableTreeNode)rootNode.getChildAfter(classNode);
-      }
-      rootNode.removeAllChildren();
-
-      for (DefaultMutableTreeNode aClass : classes) {
-        rootNode.add(aClass);
-      }
-
-      classes.clear();
-
-      rebuildTreeView(rootNode, true);
-      myBigPanel.invalidate();
-    }
-  }
-
   public ListTreeTableModelOnColumns getTreeTableModel() {
     getToolWindow();
 
@@ -665,9 +579,7 @@ public class DynamicToolWindowWrapper {
         }
 
         if (value instanceof DMethodElement) {
-          appendMethodParameters(name, (DMethodElement)value);
-        } else if (value instanceof DPropertyElement) {
-          setToolTipText(name);
+          appendMethodParameters((DMethodElement)value);
         }
       }
     }
@@ -687,7 +599,7 @@ public class DynamicToolWindowWrapper {
       append(name, SimpleTextAttributes.SIMPLE_CELL_ATTRIBUTES);
     }
 
-    private void appendMethodParameters(final String name, DMethodElement value) {
+    private void appendMethodParameters(DMethodElement value) {
       StringBuilder buffer = new StringBuilder();
       buffer.append("(");
 
@@ -701,7 +613,6 @@ public class DynamicToolWindowWrapper {
       buffer.append(")");
 
       append(buffer.toString(), SimpleTextAttributes.SIMPLE_CELL_ATTRIBUTES);
-      setToolTipText(name + buffer.toString());
     }
 
     private static String[] mapToUnqualified(final String[] argumentsNames) {
@@ -786,8 +697,7 @@ public class DynamicToolWindowWrapper {
         final DClassElement classElement = (DClassElement)userObject;
 
         try {
-          final GrTypeElement typeElement = GroovyPsiElementFactory.getInstance(myProject).createTypeElement(classElement.getName());
-          PsiType type = typeElement.getType();
+          PsiType type  = JavaPsiFacade.getElementFactory(myProject).createTypeFromText(classElement.getName(), null);
 
           if (type instanceof PsiPrimitiveType) {
             type = ((PsiPrimitiveType)type).getBoxedType(PsiManager.getInstance(myProject), GlobalSearchScope.allScope(myProject));