import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil;
+import com.intellij.psi.impl.source.tree.java.MethodReferenceResolver;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
result.consume(createConstructorReferenceLookup(functionalInterfaceType, eachReturnType));
}
}
- if (constructors.length == 0 && params.length == 0 && !psiClass.isInterface() && !psiClass.isEnum()) {
+ if (constructors.length == 0 && params.length == 0 && MethodReferenceResolver.canBeConstructed(psiClass)) {
result.consume(createConstructorReferenceLookup(functionalInterfaceType, eachReturnType));
}
}
final PsiElement element = reference.getReferenceNameElement();
final boolean isConstructor = reference.isConstructor();
if (element instanceof PsiIdentifier || isConstructor) {
- if (isConstructor && (containingClass.isEnum() ||
- containingClass.hasModifierProperty(PsiModifier.ABSTRACT) ||
- containingClass instanceof PsiTypeParameter)) {
+ if (isConstructor && !canBeConstructed(containingClass)) {
return JavaResolveResult.EMPTY_ARRAY;
}
final PsiType functionalInterfaceType = getInterfaceType(reference);
return JavaResolveResult.EMPTY_ARRAY;
}
+ public static boolean canBeConstructed(@NotNull PsiClass psiClass) {
+ return !psiClass.isEnum() && !psiClass.hasModifierProperty(PsiModifier.ABSTRACT) && !(psiClass instanceof PsiTypeParameter);
+ }
+
private static boolean isLocatedInStaticContext(PsiClass containingClass, PsiMethodReferenceExpression reference) {
final PsiClass gContainingClass = containingClass.getContainingClass();
if (gContainingClass == null || !containingClass.hasModifierProperty(PsiModifier.STATIC)) {