do not suggest @FunctionalInterface for interfaces with generics methods

This commit is contained in:
Anna Kozlova
2014-02-03 20:50:58 +04:00
parent 17853f2232
commit ed67544a5a
2 changed files with 12 additions and 1 deletions
@@ -250,7 +250,7 @@ public class LambdaUtil {
}
@Nullable
static List<MethodSignature> findFunctionCandidates(PsiClass psiClass) {
public static List<MethodSignature> findFunctionCandidates(PsiClass psiClass) {
if (psiClass instanceof PsiAnonymousClass) {
psiClass = PsiUtil.resolveClassInType(((PsiAnonymousClass)psiClass).getBaseClassType());
}
@@ -20,6 +20,7 @@ import com.intellij.psi.LambdaHighlightingUtil;
import com.intellij.psi.LambdaUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiNameValuePair;
import com.intellij.psi.util.MethodSignature;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
@@ -30,6 +31,8 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* @author Bas Leijdekkers
*/
@@ -74,6 +77,14 @@ public class InterfaceMayBeAnnotatedFunctionalInspection extends BaseInspection
if (LambdaHighlightingUtil.checkInterfaceFunctional(aClass) != null) {
return;
}
final List<MethodSignature> candidates = LambdaUtil.findFunctionCandidates(aClass);
if (candidates == null || candidates.size() != 1) {
return;
}
final MethodSignature signature = candidates.get(0);
if (signature.getTypeParameters().length > 0) {
return;
}
registerClassError(aClass, aClass);
}
}