NPE fix plus a bunch of dead code removed
authorMaxim Shafirov <max@jetbrains.com>
Sun, 22 Nov 2009 14:16:16 +0000 (17:16 +0300)
committerMaxim Shafirov <max@jetbrains.com>
Sun, 22 Nov 2009 14:16:16 +0000 (17:16 +0300)
plugins/generate-tostring/src/org/jetbrains/generate/tostring/element/ElementFactory.java
plugins/generate-tostring/src/org/jetbrains/generate/tostring/psi/PsiAdapter.java

index f992fe43ea2dcc66025899cb77af345590780064..1cbeee5ce08e38c601d363331102e8b31eefbf0e 100644 (file)
@@ -25,189 +25,179 @@ import org.jetbrains.generate.tostring.psi.PsiAdapter;
  */
 public class ElementFactory {
 
-    private static final Logger log = Logger.getInstance("#org.jetbrains.generate.tostring.element.ElementFactory");
-
-    private ElementFactory() {
+  private static final Logger log = Logger.getInstance("#org.jetbrains.generate.tostring.element.ElementFactory");
+
+  private ElementFactory() {
+  }
+
+  /**
+   * Creates a new {@link ClassElement} object.
+   *
+   * @param project the IDEA project.
+   * @param clazz   class information.
+   * @param psi     the psi adapter
+   * @return a new {@link ClassElement} object.
+   */
+  public static ClassElement newClassElement(Project project, PsiClass clazz, PsiAdapter psi) {
+    ClassElement ce = new ClassElement();
+
+    // name
+    ce.setName(clazz.getName());
+    ce.setQualifiedName(clazz.getQualifiedName());
+
+    // super
+    ce.setHasSuper(psi.hasSuperClass(project, clazz));
+    PsiClass superClass = psi.getSuperClass(project, clazz);
+    ce.setSuperName(superClass == null ? null : superClass.getName());
+    ce.setSuperQualifiedName(superClass == null ? null : superClass.getQualifiedName());
+
+    // interfaces
+    ce.setImplementNames(psi.getImplementsClassnames(clazz));
+
+    // other
+    ce.setEnum(psi.isEnumClass(clazz));
+    ce.setDeprecated(psi.isDeprecatedClass(clazz));
+    ce.setException(psi.isExceptionClass(clazz));
+    ce.setAbstract(psi.isAbstractClass(clazz));
+
+    return ce;
+  }
+
+  /**
+   * Create a new {@link FieldElement} object.
+   *
+   * @param project the IDEA project.
+   * @param field   the {@link com.intellij.psi.PsiField} to get the information from.
+   * @param psi     the psi adapter
+   * @return a new {@link FieldElement} object.
+   */
+  public static FieldElement newFieldElement(Project project, PsiField field, PsiAdapter psi) {
+    PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
+
+    FieldElement fe = new FieldElement();
+    PsiType type = field.getType();
+
+    fe.setName(field.getName());
+
+    if (psi.isConstantField(field)) fe.setConstant(true);
+    if (psi.isEnumField(field)) fe.setEnum(true);
+    PsiModifierList modifiers = field.getModifierList();
+    if (modifiers != null) {
+      if (psi.isModifierTransient(modifiers)) fe.setModifierTransient(true);
+      if (psi.isModifierVolatile(modifiers)) fe.setModifierVolatile(true);
     }
 
-    /**
-     * Creates a new {@link ClassElement} object.
-     *
-     * @param project the IDEA project.
-     * @param clazz   class information.
-     * @param psi     the psi adapter
-     * @return a new {@link ClassElement} object.
-     */
-    public static ClassElement newClassElement(Project project, PsiClass clazz, PsiAdapter psi) {
-        ClassElement ce = new ClassElement();
-
-        // name
-        ce.setName(clazz.getName());
-        ce.setQualifiedName(clazz.getQualifiedName());
-
-        // super
-        ce.setHasSuper(psi.hasSuperClass(project, clazz));
-        PsiClass superClass = psi.getSuperClass(project, clazz);
-        ce.setSuperName(superClass == null ? null : superClass.getName());
-        ce.setSuperQualifiedName(superClass == null ? null : superClass.getQualifiedName());
-
-        // interfaces
-        ce.setImplementNames(psi.getImplementsClassnames(clazz));
-
-        // other
-        ce.setEnum(psi.isEnumClass(clazz));
-        ce.setDeprecated(psi.isDeprecatedClass(clazz));
-        ce.setException(psi.isExceptionClass(clazz));
-        ce.setAbstract(psi.isAbstractClass(clazz));
-
-        return ce;
+    setElementInfo(fe, factory, type, modifiers, psi);
+
+    return fe;
+  }
+
+  /**
+   * Creates a new {@link MethodElement} object.
+   *
+   * @param method  the PSI method object.
+   * @param factory the PsiAdapterFactory.
+   * @param psi     the psi adapter
+   * @return a new {@link MethodElement} object.
+   * @since 2.15
+   */
+  public static MethodElement newMethodElement(PsiMethod method, PsiElementFactory factory, PsiAdapter psi) {
+    MethodElement me = new MethodElement();
+    PsiType type = method.getReturnType();
+    PsiModifierList modifiers = method.getModifierList();
+
+    // if something is wrong:
+    // http://www.intellij.net/forums/thread.jsp?nav=false&forum=18&thread=88676&start=0&msRange=15
+    if (type == null) {
+      log.warn("This method does not have a valid return type: " + method.getName() + ", returnType=" + type);
+      return me;
     }
 
-    /**
-     * Create a new {@link FieldElement} object.
-     *
-     * @param project the IDEA project.
-     * @param field   the {@link com.intellij.psi.PsiField} to get the information from.
-     * @param psi     the psi adapter
-     * @return a new {@link FieldElement} object.
-     */
-    public static FieldElement newFieldElement(Project project, PsiField field, PsiAdapter psi) {
-        PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
-
-        FieldElement fe = new FieldElement();
-        PsiType type = field.getType();
-        PsiModifierList modifiers = field.getModifierList();
-
-        fe.setName(field.getName());
-
-        if (psi.isConstantField(field))
-            fe.setConstant(true);
-        if (psi.isEnumField(field))
-            fe.setEnum(true);
-        if (psi.isModifierTransient(modifiers))
-            fe.setModifierTransient(true);
-        if (psi.isModifierVolatile(modifiers))
-            fe.setModifierVolatile(true);
-
-        setElementInfo(fe, factory, type, modifiers, psi);
-
-        return fe;
-    }
+    setElementInfo(me, factory, type, modifiers, psi);
+
+    // names
+    String fieldName = psi.getGetterFieldName(factory, method);
+    me.setName(fieldName == null ? method.getName() : fieldName);
+    me.setFieldName(fieldName);
+    me.setMethodName(method.getName());
+
+    // getter
+    me.setGetter(psi.isGetterMethod(factory, method));
+
+    // misc
+    me.setReturnTypeVoid(psi.isTypeOfVoid(method.getReturnType()));
+    me.setDeprecated(psi.isDeprecatedMethod(method));
+
+    // modifiers
+    if (psi.isModifierAbstract(modifiers)) me.setModifierAbstract(true);
+    if (psi.isModifierSynchronized(modifiers)) me.setModifierSynchronzied(true);
+
+    return me;
+  }
+
+  /**
+   * Sets the basic element information from the given type.
+   *
+   * @param element   the element to set information from the type
+   * @param factory   the PsiAdapterFactory.
+   * @param type      the type
+   * @param psi       the psi adapter.
+   * @param modifiers modifier list
+   * @since 2.15
+   */
+  private static void setElementInfo(AbstractElement element,
+                                     PsiElementFactory factory,
+                                     PsiType type,
+                                     PsiModifierList modifiers,
+                                     PsiAdapter psi) {
+
+    // type names
+    element.setTypeName(psi.getTypeClassName(type));
+    element.setTypeQualifiedName(psi.getTypeQualifiedClassName(type));
+
+    // arrays, collections and maps types
+    if (psi.isObjectArrayType(type)) {
+      element.setObjectArray(true);
+      element.setArray(true);
+
+      // additional specify if the element is a string array
+      if (psi.isStringArrayType(type)) element.setStringArray(true);
 
-    /**
-     * Creates a new {@link MethodElement} object.
-     *
-     * @param method  the PSI method object.
-     * @param factory the PsiAdapterFactory.
-     * @param psi     the psi adapter
-     * @return a new {@link MethodElement} object.
-     * @since 2.15
-     */
-    public static MethodElement newMethodElement(PsiMethod method, PsiElementFactory factory, PsiAdapter psi) {
-        MethodElement me = new MethodElement();
-        PsiType type = method.getReturnType();
-        PsiModifierList modifiers = method.getModifierList();
-
-        // if something is wrong:
-        // http://www.intellij.net/forums/thread.jsp?nav=false&forum=18&thread=88676&start=0&msRange=15
-        if (type == null) {
-            log.warn("This method does not have a valid return type: " + method.getName() + ", returnType=" + type);
-            return me;
-        }
-
-        setElementInfo(me, factory, type, modifiers, psi);
-
-        // names
-        String fieldName = psi.getGetterFieldName(factory, method);
-        me.setName(fieldName == null ? method.getName() : fieldName);
-        me.setFieldName(fieldName);
-        me.setMethodName(method.getName());
-
-        // getter
-        me.setGetter(psi.isGetterMethod(factory, method));
-
-        // misc
-        me.setReturnTypeVoid(psi.isTypeOfVoid(method.getReturnType()));
-        me.setDeprecated(psi.isDeprecatedMethod(method));
-
-        // modifiers
-        if (psi.isModifierAbstract(modifiers))
-            me.setModifierAbstract(true);
-        if (psi.isModifierSynchronized(modifiers))
-            me.setModifierSynchronzied(true);
-
-        return me;
     }
-
-    /**
-     * Sets the basic element information from the given type.
-     *
-     * @param element    the element to set information from the type
-     * @param factory    the PsiAdapterFactory.
-     * @param type       the type
-     * @param psi        the psi adapter.
-     * @param modifiers  modifier list
-     * @since 2.15
-     */
-    private static void setElementInfo(AbstractElement element, PsiElementFactory factory, PsiType type,
-                                       PsiModifierList modifiers, PsiAdapter psi) {
-
-        // type names
-        element.setTypeName(psi.getTypeClassName(type));
-        element.setTypeQualifiedName(psi.getTypeQualifiedClassName(type));
-
-        // arrays, collections and maps types
-        if (psi.isObjectArrayType(type)) {
-            element.setObjectArray(true);
-            element.setArray(true);
-
-            // additional specify if the element is a string array
-            if (psi.isStringArrayType(type))
-                element.setStringArray(true);
-
-        } else if (psi.isPrimitiveArrayType(type)) {
-            element.setPrimitiveArray(true);
-            element.setArray(true);
-        }
-        if (psi.isCollectionType(factory, type))
-            element.setCollection(true);
-        if (psi.isListType(factory, type))
-            element.setList(true);
-        if (psi.isSetType(factory, type))
-            element.setSet(true);
-        if (psi.isMapType(factory, type))
-            element.setMap(true);
-
-        // other types
-        if (psi.isPrimitiveType(type))
-            element.setPrimitive(true);
-        if (psi.isObjectType(factory, type))
-            element.setObject(true);
-        if (psi.isStringType(factory, type))
-            element.setString(true);
-        if (psi.isNumericType(factory, type))
-            element.setNumeric(true);
-        if (psi.isDateType(factory, type))
-            element.setDate(true);
-        if (psi.isCalendarType(factory, type))
-            element.setCalendar(true);
-        if (psi.isBooleanType(factory, type))
-            element.setBoolean(true);
-
-        // modifiers
-        if (psi.isModifierStatic(modifiers))
-            element.setModifierStatic(true);
-        if (psi.isModifierFinal(modifiers))
-            element.setModifierFinal(true);
-        if (psi.isModifierPublic(modifiers))
-            element.setModifierPublic(true);
-        else if (psi.isModifierProtected(modifiers))
-            element.setModifierProtected(true);
-        else if (psi.isModifierPackageLocal(modifiers))
-            element.setModifierPackageLocal(true);
-        else if (psi.isModifierPrivate(modifiers))
-            element.setModifierPrivate(true);
-
+    else if (psi.isPrimitiveArrayType(type)) {
+      element.setPrimitiveArray(true);
+      element.setArray(true);
+    }
+    if (psi.isCollectionType(factory, type)) element.setCollection(true);
+    if (psi.isListType(factory, type)) element.setList(true);
+    if (psi.isSetType(factory, type)) element.setSet(true);
+    if (psi.isMapType(factory, type)) element.setMap(true);
+
+    // other types
+    if (psi.isPrimitiveType(type)) element.setPrimitive(true);
+    if (psi.isObjectType(factory, type)) element.setObject(true);
+    if (psi.isStringType(factory, type)) element.setString(true);
+    if (psi.isNumericType(factory, type)) element.setNumeric(true);
+    if (psi.isDateType(factory, type)) element.setDate(true);
+    if (psi.isCalendarType(factory, type)) element.setCalendar(true);
+    if (psi.isBooleanType(factory, type)) element.setBoolean(true);
+
+    // modifiers
+    if (modifiers != null) {
+      if (psi.isModifierStatic(modifiers)) element.setModifierStatic(true);
+      if (psi.isModifierFinal(modifiers)) element.setModifierFinal(true);
+      if (psi.isModifierPublic(modifiers)) {
+        element.setModifierPublic(true);
+      }
+      else if (psi.isModifierProtected(modifiers)) {
+        element.setModifierProtected(true);
+      }
+      else if (psi.isModifierPackageLocal(modifiers)) {
+        element.setModifierPackageLocal(true);
+      }
+      else if (psi.isModifierPrivate(modifiers)) element.setModifierPrivate(true);
     }
 
+  }
+
 }
index 6a448d207c717c4754db729913a824af32fa5bf3..b456cf0c774f19443ee6fd7a8a3ea6ad667fb8be 100644 (file)
  */
 package org.jetbrains.generate.tostring.psi;
 
-import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.command.CommandProcessor;
-import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.project.Project;
 import com.intellij.psi.*;
 import com.intellij.psi.codeStyle.CodeStyleManager;
 import com.intellij.psi.codeStyle.JavaCodeStyleManager;
 import com.intellij.psi.javadoc.PsiDocComment;
 import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.util.IncorrectOperationException;
 import com.intellij.util.ArrayUtil;
+import com.intellij.util.IncorrectOperationException;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.generate.tostring.util.StringUtil;
 
@@ -40,17 +38,7 @@ public abstract class PsiAdapter {
     protected PsiAdapter() {
     }
 
-    /**
-     * Get's the PSIManager.
-     *
-     * @param project IDEA project.
-     * @return the PSIManager.
-     */
-    public PsiManager getPsiManager(Project project) {
-        return PsiManager.getInstance(project);
-    }
-
-    /**
+  /**
      * Get's the fields for the class.
      *
      * @param clazz class.
@@ -283,17 +271,7 @@ public abstract class PsiAdapter {
         }
     }
 
-    /**
-     * Is the given type an array? (using [] in its name)
-     *
-     * @param type the type.
-     * @return true if it is an array, false if not.
-     */
-    private boolean isArray(PsiType type) {
-        return type.getCanonicalText().indexOf("[]") > 0;
-    }
-
-    /**
+  /**
      * Is there a <code>transient</code> modifier?
      * <p/>eg: <code>private transient String myField;</code>.
      *
@@ -403,17 +381,7 @@ public abstract class PsiAdapter {
         return CodeStyleManager.getInstance(project);
     }
 
-    /**
-     * Does the class have any fields?
-     *
-     * @param clazz the PsiClass.
-     * @return true if the class has fields.
-     */
-    public boolean hasFields(PsiClass clazz) {
-        return clazz.getFields().length > 0;
-    }
-
-    /**
+  /**
      * Does the javafile have the import statement?
      *
      * @param javaFile        javafile.
@@ -500,18 +468,7 @@ public abstract class PsiAdapter {
         return (!"Object".equals(superClass.getName()));
     }
 
-    /**
-     * Optimizes the imports on the given java file.
-     *
-     * @param project  the PSI project
-     * @param javaFile the java file
-     * @throws IncorrectOperationException error optimizing imports.
-     */
-    public void optimizeImports(Project project, PsiJavaFile javaFile) throws IncorrectOperationException {
-        JavaCodeStyleManager.getInstance(project).optimizeImports(javaFile);
-    }
-
-    /**
+  /**
      * Get's the fields fully qualified classname (etc java.lang.String, java.util.ArrayList)
      *
      * @param type the type.
@@ -553,82 +510,7 @@ public abstract class PsiAdapter {
         return name.substring(i + 1, name.length());
     }
 
-    /**
-     * Removes the action from the menu.
-     * <p/>
-     * The group must be of a DefaultActionGroup instance, if not this method returns false.
-     *
-     * @param actionId group id of the action to remove.
-     * @param menuId   id of the menu that contains the action. See ActionManager.xml in the IDEA openapi folder.
-     * @return true if the action was remove, false if not (action could not be found)
-     */
-    public boolean removeActionFromMenu(String actionId, String menuId) {
-        ActionManager am = ActionManager.getInstance();
-        AnAction group = am.getAction(menuId);
-
-        // must be default action group
-        if (group instanceof DefaultActionGroup) {
-            DefaultActionGroup defGroup = (DefaultActionGroup) group;
-
-            // loop children (actions) and remove the matching id
-            AnAction[] actions = defGroup.getChildren(null);
-            for (AnAction action : actions) {
-                String id = am.getId(action);
-
-                // if match id then remove action from menu
-                if (actionId.equals(id)) {
-                    defGroup.remove(action);
-                    return true;
-                }
-
-            }
-
-        }
-
-        // action to remove not found
-        return false;
-    }
-
-    /**
-     * Adds the action to the menu.
-     * <p/>
-     * The group must be of a DefaultActionGroup instance, if not this method returns false.
-     *
-     * @param actionId    group id of the action to add.
-     * @param menuId      id of the menu the action should be added to. See ActionManager.xml in the IDEA openapi folder.
-     * @param anchorId    id of the action to position relative to.  See ActionManager.xml in the IDEA openapi folder.
-     * @param afterAnchor true if the action should be added after the anchorId, false if before.
-     * @return true if the action was added, false if not.
-     */
-    public boolean addActionToMenu(String actionId, String menuId, String anchorId, boolean afterAnchor) {
-        ActionManager am = ActionManager.getInstance();
-        AnAction group = am.getAction(menuId);
-
-        // must be default action group
-        if (group instanceof DefaultActionGroup) {
-            DefaultActionGroup defGroup = (DefaultActionGroup) group;
-
-            // loop children (actions) and remove the matching id
-            AnAction[] actions = defGroup.getChildren(null);
-            for (AnAction action : actions) {
-                String id = am.getId(action);
-
-                // if match id then add action to menu
-                if (anchorId.equals(id)) {
-                    AnAction actionToAdd = am.getAction(actionId); // find the action to add
-                    defGroup.add(actionToAdd, new Constraints(afterAnchor ? Anchor.AFTER : Anchor.BEFORE, anchorId));
-                    return true;
-                }
-
-            }
-
-        }
-
-        // action to add next to not found
-        return false;
-    }
-
-    /**
+  /**
      * Finds the public static void main(String[] args) method.
      *
      * @param clazz the class.
@@ -817,27 +699,7 @@ public abstract class PsiAdapter {
         return null;
     }
 
-    /**
-     * Get's the javadoc for the given method as a String.
-     *
-     * @param method the method
-     * @return the javadoc, null if no javadoc.
-     */
-    @Nullable
-    public String getJavaDoc(PsiMethod method) {
-        if (method == null) {
-            return null;
-        }
-
-        PsiDocComment doc = method.getDocComment();
-        if (doc != null) {
-            return doc.getText();
-        }
-
-        return null;
-    }
-
-    /**
+  /**
      * Returns true if the field is enum (JDK1.5).
      *
      * @param field   field to check if it's a enum
@@ -929,22 +791,7 @@ public abstract class PsiAdapter {
         return isModifierAbstract(clazz.getModifierList());
     }
 
-    /**
-     * Finds the PsiElement at the current cursor position in the javafile.
-     *
-     * @param javaFile javafile for the class to find.
-     * @param editor   the editor.
-     * @return the elemenet, null if not found or not possible to find.
-     */
-    @Nullable
-    public PsiElement findElementAtCursorPosition(PsiJavaFile javaFile, Editor editor) {
-        if (javaFile == null) {
-            return null;
-        }
-        return javaFile.findElementAt(editor.getCaretModel().getOffset());
-    }
-
-    /**
+  /**
      * Finds the public boolean equals(Object o) method.
      *
      * @param clazz the class.
@@ -1172,23 +1019,7 @@ public abstract class PsiAdapter {
         }
     }
 
-    /**
-     * Looks for a PsiMethod within the elements parent.
-     *
-     * @param elem the element
-     * @return the parent method if found, <tt>null</tt> if not found.
-     */
-    @Nullable
-    public static PsiMethod findParentMethod(PsiElement elem) {
-        if (elem == null) {
-            return null;
-        } else if (elem instanceof PsiMethod) {
-            return (PsiMethod) elem;
-        }
-        return findParentMethod(elem.getParent());
-    }
-
-    /**
+  /**
      * Get's the full filename to this plugin .jar file
      *
      * @return the full filename to this plugin .jar file