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;
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;
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();
}
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;
}
}