fix stack overflow; remove some unnecessary indirection via PsiAdapter

This commit is contained in:
Dmitry Jemerov
2010-04-22 22:23:07 +04:00
parent 6fca237f5c
commit 02dafea28d
6 changed files with 29 additions and 197 deletions
@@ -71,7 +71,7 @@ public class GenerateToStringUtils {
List<PsiField> availableFields = new ArrayList<PsiField>();
// performs til filtering process
PsiField[] fields = psi.getFields(clazz);
PsiField[] fields = clazz.getFields();
for (PsiField field : fields) {
FieldElement fe = ElementFactory.newFieldElement(project, field, psi);
if (log.isDebugEnabled()) log.debug("Field being filtered: " + fe);
@@ -103,7 +103,7 @@ public class GenerateToStringUtils {
List<PsiMethod> availableMethods = new ArrayList<PsiMethod>();
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(clazz.getProject()).getElementFactory();
PsiMethod[] methods = psi.getMethods(clazz);
PsiMethod[] methods = clazz.getMethods();
for (PsiMethod method : methods) {
MethodElement me = ElementFactory.newMethodElement(method, elementFactory, psi);
@@ -65,7 +65,7 @@ public class GenerateToStringWorker {
this.psi = PsiAdapterFactory.getPsiAdapter();
this.editor = editor;
this.elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
this.codeStyleManager = psi.getCodeStyleManager(project);
this.codeStyleManager = CodeStyleManager.getInstance(project);
this.containingFile = clazz.getContainingFile();
this.config = GenerateToStringContext.getConfig();
this.hasOverrideAnnotation = insertAtOverride;
@@ -55,9 +55,9 @@ public class ElementFactory {
ce.setImplementNames(psi.getImplementsClassnames(clazz));
// other
ce.setEnum(psi.isEnumClass(clazz));
ce.setDeprecated(psi.isDeprecatedClass(clazz));
ce.setException(psi.isExceptionClass(clazz));
ce.setEnum(clazz.isEnum());
ce.setDeprecated(clazz.isDeprecated());
ce.setException(PsiAdapter.isExceptionClass(clazz));
ce.setAbstract(psi.isAbstractClass(clazz));
return ce;
@@ -83,8 +83,8 @@ public class ElementFactory {
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);
if (modifiers.hasModifierProperty(PsiModifier.TRANSIENT)) fe.setModifierTransient(true);
if (modifiers.hasModifierProperty(PsiModifier.VOLATILE)) fe.setModifierVolatile(true);
}
setElementInfo(fe, factory, type, modifiers, psi);
@@ -126,11 +126,11 @@ public class ElementFactory {
// misc
me.setReturnTypeVoid(psi.isTypeOfVoid(method.getReturnType()));
me.setDeprecated(psi.isDeprecatedMethod(method));
me.setDeprecated(method.isDeprecated());
// modifiers
if (psi.isModifierAbstract(modifiers)) me.setModifierAbstract(true);
if (psi.isModifierSynchronized(modifiers)) me.setModifierSynchronzied(true);
if (modifiers.hasModifierProperty(PsiModifier.ABSTRACT)) me.setModifierAbstract(true);
if (modifiers.hasModifierProperty(PsiModifier.SYNCHRONIZED)) me.setModifierSynchronzied(true);
return me;
}
@@ -184,18 +184,18 @@ public class ElementFactory {
// modifiers
if (modifiers != null) {
if (psi.isModifierStatic(modifiers)) element.setModifierStatic(true);
if (psi.isModifierFinal(modifiers)) element.setModifierFinal(true);
if (psi.isModifierPublic(modifiers)) {
if (modifiers.hasModifierProperty(PsiModifier.STATIC)) element.setModifierStatic(true);
if (modifiers.hasModifierProperty(PsiModifier.FINAL)) element.setModifierFinal(true);
if (modifiers.hasModifierProperty(PsiModifier.PUBLIC)) {
element.setModifierPublic(true);
}
else if (psi.isModifierProtected(modifiers)) {
else if (modifiers.hasModifierProperty(PsiModifier.PROTECTED)) {
element.setModifierProtected(true);
}
else if (psi.isModifierPackageLocal(modifiers)) {
else if (modifiers.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)) {
element.setModifierPackageLocal(true);
}
else if (psi.isModifierPrivate(modifiers)) element.setModifierPrivate(true);
else if (modifiers.hasModifierProperty(PsiModifier.PRIVATE)) element.setModifierPrivate(true);
}
}
@@ -85,19 +85,19 @@ public class ClassHasNoToStringMethodInspection extends AbstractToStringInspecti
PsiAdapter psi = PsiAdapterFactory.getPsiAdapter();
// must not be an exception
if (excludeException && psi.isExceptionClass(clazz)) {
if (excludeException && PsiAdapter.isExceptionClass(clazz)) {
log.debug("This class is an exception");
return;
}
// must not be deprecated
if (excludeDeprecated && psi.isDeprecatedClass(clazz)) {
if (excludeDeprecated && clazz.isDeprecated()) {
log.debug("Class is deprecated");
return;
}
// must not be enum
if (excludeEnum && psi.isEnumClass(clazz)) {
if (excludeEnum && clazz.isEnum()) {
log.debug("Class is an enum");
return;
}
@@ -117,7 +117,7 @@ public class ClassHasNoToStringMethodInspection extends AbstractToStringInspecti
}
// must have fields
PsiField[] fields = psi.getFields(clazz);
PsiField[] fields = clazz.getFields();
if (fields.length == 0) {
log.debug("Class does not have any fields");
return;
@@ -83,7 +83,7 @@ public class FieldNotUsedInToStringInspection extends AbstractToStringInspection
// must have fields
PsiAdapter psi = PsiAdapterFactory.getPsiAdapter();
PsiField[] fields = psi.getFields(clazz);
PsiField[] fields = clazz.getFields();
if (fields.length == 0) {
log.debug("Class does not have any fields");
return;
@@ -181,7 +181,7 @@ public class FieldNotUsedInToStringInspection extends AbstractToStringInspection
}
// must have methods
PsiMethod[] methods = psi.getMethods(clazz);
PsiMethod[] methods = clazz.getMethods();
if (methods.length == 0) {
log.debug("Class does not have any methods");
return;
@@ -22,6 +22,7 @@ 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.psi.util.InheritanceUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.Nullable;
@@ -39,16 +40,6 @@ public abstract class PsiAdapter {
}
/**
* Get's the fields for the class.
*
* @param clazz class.
* @return the fields for the class. If the class doesn't have any fields the array's size is 0.
*/
public PsiField[] getFields(PsiClass clazz) {
return clazz.getFields();
}
/**
* Finds the class for the given element.
* <p/>
* Will look in the element's parent hieracy.
@@ -271,116 +262,6 @@ public abstract class PsiAdapter {
}
}
/**
* Is there a <code>transient</code> modifier?
* <p/>eg: <code>private transient String myField;</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierTransient(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.TRANSIENT);
}
/**
* Is there a <code>volatile</code> modifier?
* <p/>eg: <code>private volatile Image screen;</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierVolatile(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.VOLATILE);
}
/**
* Is there a <code>public</code> modifier?
* <p/>eg: <code>public String myField;</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierPublic(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.PUBLIC);
}
/**
* Is there a <code>protected</code> modifier?
* <p/>eg: <code>public String myField;</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierProtected(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.PROTECTED);
}
/**
* Is there a <code>package-local</code> modifier?
* <p/>eg: <code>String myField;</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierPackageLocal(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.PACKAGE_LOCAL);
}
/**
* Is there a <code>private</code> modifier?
* <p/>eg: <code>private static String myField;</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierPrivate(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.PRIVATE);
}
/**
* Is there a <code>abstract</code> modifier?
* <p/>eg: <code>public abstract String getConfiguration()</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierAbstract(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.ABSTRACT);
}
/**
* Is there a <code>final</code> modifier?
* <p/>eg: <code>final static boolean DEBUG = false;</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierFinal(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.FINAL);
}
/**
* Is there a <code>static</code> modifier?
* <p/>eg: <code>private static String getMyField()</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierStatic(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.STATIC);
}
/**
* Is there a <code>synchronized</code> modifier?
* <p/>eg: <code>public synchronized void putInCache()</code>.
*
* @param modifiers the modifiers
*/
public boolean isModifierSynchronized(PsiModifierList modifiers) {
return modifiers.hasModifierProperty(PsiModifier.SYNCHRONIZED);
}
/**
* Get's the CodeStyleManager for the project.
*
* @param project project.
* @return the CodeStyleManager.
*/
public CodeStyleManager getCodeStyleManager(Project project) {
return CodeStyleManager.getInstance(project);
}
/**
* Does the javafile have the import statement?
*
@@ -592,17 +473,7 @@ public abstract class PsiAdapter {
}
}
/**
* Get's the methods for the class.
*
* @param clazz class.
* @return the methods for the class. If the class doesn't have any methods the array's size is 0.
*/
public PsiMethod[] getMethods(PsiClass clazz) {
return clazz.getMethods();
}
/**
/**
* Find's an existing field with the given name.
* If there isn't a field with the name, null is returned.
*
@@ -725,38 +596,8 @@ public abstract class PsiAdapter {
return false;
}
return isEnumClass(clazz);
}
/**
* Returns true if the class is enum (JDK1.5).
*
* @param clazz class to check if it's a enum
* @return true if enum.
*/
public boolean isEnumClass(PsiClass clazz) {
return clazz.isEnum();
}
/**
* Returns true if the class is deprecated.
*
* @param clazz class to check if it's deprecated
* @return true if deprecated.
*/
public boolean isDeprecatedClass(PsiClass clazz) {
return clazz.isDeprecated();
}
/**
* Returns true if the method is deprecated.
*
* @param method method to check if it's deprecated
* @return true if deprecated.
*/
public boolean isDeprecatedMethod(PsiMethod method) {
return method.isDeprecated();
}
}
/**
* Is the class an exception - extends Throwable (will check super).
@@ -764,17 +605,8 @@ public abstract class PsiAdapter {
* @param clazz class to check.
* @return true if class is an exception.
*/
public boolean isExceptionClass(PsiClass clazz) {
PsiClass[] supers = clazz.getSupers();
for (PsiClass sup : supers) {
if ("java.lang.Throwable".equals(sup.getQualifiedName())) {
return true;
} else if (isExceptionClass(sup)) {
return true;
}
}
return false;
public static boolean isExceptionClass(PsiClass clazz) {
return InheritanceUtil.isInheritor(clazz, CommonClassNames.JAVA_LANG_THROWABLE);
}
/**
@@ -788,7 +620,7 @@ public abstract class PsiAdapter {
if (list == null) {
return false;
}
return isModifierAbstract(clazz.getModifierList());
return clazz.getModifierList().hasModifierProperty(PsiModifier.ABSTRACT);
}
/**