remove duplication
authorpeter <peter.gromov@jetbrains.com>
Sun, 2 May 2010 10:38:01 +0000 (11:38 +0100)
committerpeter <peter.gromov@jetbrains.com>
Tue, 4 May 2010 15:05:51 +0000 (16:05 +0100)
java/java-impl/src/com/intellij/util/xml/impl/ExtendsClassChecker.java
java/openapi/src/com/intellij/psi/util/PsiUtil.java

index 5bdba4cb4c3c435a764248199adb82401b999eda..c54ff5089a644f5d59e7dc5703b52d727160a2ff 100644 (file)
@@ -21,9 +21,10 @@ import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassRe
 import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider;
 import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.psi.util.InheritanceUtil;
+import com.intellij.psi.util.PsiUtil;
+import com.intellij.util.ProcessingContext;
 import com.intellij.util.ReflectionCache;
 import com.intellij.util.SmartList;
-import com.intellij.util.ProcessingContext;
 import com.intellij.util.xml.*;
 import com.intellij.util.xml.highlighting.DomCustomAnnotationChecker;
 import com.intellij.util.xml.highlighting.DomElementAnnotationHolder;
@@ -97,7 +98,7 @@ public class ExtendsClassChecker extends DomCustomAnnotationChecker<ExtendClass>
       else if (!allowNonPublic && !value.hasModifierProperty(PsiModifier.PUBLIC)) {
         list.add(holder.createProblem(element, DomBundle.message("class.is.not.public", value.getQualifiedName())));
       }
-      else if (!hasDefaultConstructor(value)) {
+      else if (!PsiUtil.hasDefaultConstructor(value, true)) {
         if (canBeDecorator) {
           boolean hasConstructor = false;
 
@@ -134,21 +135,6 @@ public class ExtendsClassChecker extends DomCustomAnnotationChecker<ExtendClass>
     return list;
   }
 
-  public static boolean hasDefaultConstructor(PsiClass clazz) {
-    final PsiMethod[] constructors = clazz.getConstructors();
-    if (constructors.length > 0) {
-      for (PsiMethod cls: constructors) {
-        if ((cls.hasModifierProperty(PsiModifier.PUBLIC) || cls.hasModifierProperty(PsiModifier.PROTECTED)) && cls.getParameterList().getParametersCount() == 0) {
-          return true;
-        }
-      }
-    } else {
-      final PsiClass superClass = clazz.getSuperClass();
-      return superClass == null || hasDefaultConstructor(superClass);
-    }
-    return false;
-  }
-
   public static List<DomElementProblemDescriptor> checkExtendsClassInReferences(final GenericDomValue element, final DomElementAnnotationHolder holder) {
     final Object valueObject = element.getValue();
     if (!(valueObject instanceof PsiClass)) return Collections.emptyList();
index 3713fbadef72a41e2aec03aa0d3649df4e4820f6..533180026e22f0e4bff0cfa66722fd1b54134736 100644 (file)
@@ -785,10 +785,16 @@ public final class PsiUtil extends PsiUtilBase {
   }
 
   public static boolean hasDefaultConstructor(PsiClass clazz) {
+    return hasDefaultConstructor(clazz, false);
+  }
+  
+  public static boolean hasDefaultConstructor(PsiClass clazz, boolean allowProtected) {
     final PsiMethod[] constructors = clazz.getConstructors();
     if (constructors.length > 0) {
       for (PsiMethod cls: constructors) {
-        if (cls.hasModifierProperty(PsiModifier.PUBLIC) && cls.getParameterList().getParametersCount() == 0) {
+        if ((cls.hasModifierProperty(PsiModifier.PUBLIC) ||
+             allowProtected && cls.hasModifierProperty(PsiModifier.PROTECTED)) &&
+            cls.getParameterList().getParametersCount() == 0) {
           return true;
         }
       }