AnonymousCanBeLambdaInspection/AnonymousHasLambdaAlternativeInspection: extract common condition (IDEA-CR-14331)

This commit is contained in:
Tagir Valeev
2016-10-11 17:02:29 +03:00
parent 2b6398e139
commit 23167ac5e7
2 changed files with 19 additions and 21 deletions
@@ -195,6 +195,19 @@ public class AnonymousCanBeLambdaInspection extends BaseJavaBatchLocalInspection
return canBeConvertedToLambda(aClass, acceptParameterizedFunctionTypes, true, ignoredRuntimeAnnotations);
}
public static boolean isClassAndMethodSuitableForConversion(PsiAnonymousClass aClass,
PsiMethod method,
Set<String> ignoredRuntimeAnnotations) {
return aClass.getFields().length == 0 &&
aClass.getInnerClasses().length == 0 &&
aClass.getInitializers().length == 0 &&
method.getBody() != null &&
method.getDocComment() == null &&
!hasRuntimeAnnotations(method, ignoredRuntimeAnnotations) &&
!method.hasModifierProperty(PsiModifier.SYNCHRONIZED) &&
!hasForbiddenRefsInsideBody(method, aClass);
}
public static boolean canBeConvertedToLambda(PsiAnonymousClass aClass,
boolean acceptParameterizedFunctionTypes,
boolean reportNotAnnotatedInterfaces,
@@ -210,16 +223,9 @@ public class AnonymousCanBeLambdaInspection extends BaseJavaBatchLocalInspection
final PsiMethod interfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(resolveResult);
if (interfaceMethod != null && (acceptParameterizedFunctionTypes || !interfaceMethod.hasTypeParameters())) {
final PsiMethod[] methods = aClass.getMethods();
if (methods.length == 1 &&
aClass.getFields().length == 0 &&
aClass.getInnerClasses().length == 0 &&
aClass.getInitializers().length == 0) {
if (methods.length == 1) {
final PsiMethod method = methods[0];
if (method.getBody() != null &&
method.getDocComment() == null &&
!hasRuntimeAnnotations(method, ignoredRuntimeAnnotations) &&
!method.hasModifierProperty(PsiModifier.SYNCHRONIZED) &&
!hasForbiddenRefsInsideBody(method, aClass)) {
if (isClassAndMethodSuitableForConversion(aClass, method, ignoredRuntimeAnnotations)) {
final PsiType inferredType = getInferredType(aClass, method);
if (inferredType == null) {
return false;
@@ -67,19 +67,11 @@ public class AnonymousHasLambdaAlternativeInspection extends BaseJavaBatchLocalI
public void visitAnonymousClass(final PsiAnonymousClass aClass) {
super.visitAnonymousClass(aClass);
PsiMethod[] methods = aClass.getMethods();
if(methods.length == 1 &&
aClass.getFields().length == 0 &&
aClass.getInnerClasses().length == 0 &&
aClass.getInitializers().length == 0) {
PsiExpressionList argumentList = aClass.getArgumentList();
if(methods.length == 1) {
PsiMethod method = methods[0];
if (argumentList != null &&
argumentList.getExpressions().length == 0 &&
method.getBody() != null &&
method.getDocComment() == null &&
!AnonymousCanBeLambdaInspection.hasRuntimeAnnotations(method, Collections.emptySet()) &&
!method.hasModifierProperty(PsiModifier.SYNCHRONIZED) &&
!AnonymousCanBeLambdaInspection.hasForbiddenRefsInsideBody(method, aClass)) {
PsiExpressionList argumentList = aClass.getArgumentList();
if (AnonymousCanBeLambdaInspection.isClassAndMethodSuitableForConversion(aClass, method, Collections.emptySet()) &&
argumentList != null && argumentList.getExpressions().length == 0) {
PsiClassType type = aClass.getBaseClassType();
AnonymousLambdaAlternative alternative = getAlternative(type.resolve(), method);
if(alternative != null) {