fix tests: Comparator is a functional interface
authorpeter <peter@jetbrains.com>
Thu, 29 Sep 2016 14:09:33 +0000 (16:09 +0200)
committerpeter <peter@jetbrains.com>
Thu, 29 Sep 2016 14:10:19 +0000 (16:10 +0200)
java/java-psi-api/src/com/intellij/psi/LambdaUtil.java

index a51a2bec825bd5ca40c5456f7f43cfa0c050e0e9..a60752e623601b83f825f38679a0c367d800a19f 100644 (file)
@@ -176,13 +176,21 @@ public class LambdaUtil {
   private static boolean hasManyOwnAbstractMethods(@NotNull PsiClass psiClass) {
     int abstractCount = 0;
     for (PsiMethod method : psiClass.getMethods()) {
-      if (method.hasModifierProperty(PsiModifier.ABSTRACT) && ++abstractCount > 1) {
+      if (isDefinitelyAbstractInterfaceMethod(method) && ++abstractCount > 1) {
         return true;
       }
     }
     return false;
   }
 
+  private static boolean isDefinitelyAbstractInterfaceMethod(PsiMethod method) {
+    return method.hasModifierProperty(PsiModifier.ABSTRACT) && !isPublicObjectMethod(method.getName());
+  }
+
+  private static boolean isPublicObjectMethod(String methodName) {
+    return "equals".equals(methodName) || "hashCode".equals(methodName) || "toString".equals(methodName);
+  }
+
   private static boolean hasManyInheritedAbstractMethods(@NotNull PsiClass psiClass) {
     final Set<String> abstractNames = ContainerUtil.newHashSet();
     final Set<String> defaultNames = ContainerUtil.newHashSet();
@@ -190,7 +198,7 @@ public class LambdaUtil {
       @Override
       public boolean process(PsiClass psiClass) {
         for (PsiMethod method : psiClass.getMethods()) {
-          if (method.hasModifierProperty(PsiModifier.ABSTRACT)) {
+          if (isDefinitelyAbstractInterfaceMethod(method)) {
             abstractNames.add(method.getName());
           }
           else if (method.hasModifierProperty(PsiModifier.DEFAULT)) {