mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EquivalenceChecker: flexible modifier list comparison; fixes in class comparison; test (IDEA-CR-38140)
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
// "Collapse if statement " "true"
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Main {
|
||||
|
||||
void test(int x) {
|
||||
Runnable r = new Runnable() {
|
||||
private final boolean field = x > 1;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println((x));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// "Collapse if statement " "true"
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Main {
|
||||
|
||||
void test(int x) {
|
||||
if<caret>(x > 0) {
|
||||
Runnable r = new Runnable() {
|
||||
private final boolean field = x > 1;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println((x));
|
||||
}
|
||||
};
|
||||
} else {
|
||||
Runnable r = new Runnable() {
|
||||
final private boolean field = 1 < x;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println(x);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
+17
-8
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.siyeh.ig.psiutils;
|
||||
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInsight.PsiEquivalenceUtil;
|
||||
import com.intellij.codeInspection.dataFlow.value.DfaRelationValue;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
@@ -215,7 +216,7 @@ public class EquivalenceChecker {
|
||||
if (modifierList1 == null || modifierList2 == null) {
|
||||
return Match.exact(modifierList1 == modifierList2);
|
||||
}
|
||||
if (!PsiEquivalenceUtil.areElementsEquivalent(modifierList1, modifierList2)) {
|
||||
if (!modifierListsAreEquivalent(modifierList1, modifierList2)) {
|
||||
return EXACT_MISMATCH;
|
||||
}
|
||||
final PsiExpression initializer1 = variable1.getInitializer();
|
||||
@@ -835,11 +836,9 @@ public class EquivalenceChecker {
|
||||
}
|
||||
if (child1 instanceof PsiMethod && child2 instanceof PsiMethod) {
|
||||
if (!methodsMatch((PsiMethod)child1, (PsiMethod)child2).isExactMatch()) return EXACT_MISMATCH;
|
||||
}
|
||||
if (child1 instanceof PsiField && child2 instanceof PsiField) {
|
||||
} else if (child1 instanceof PsiField && child2 instanceof PsiField) {
|
||||
if (!variablesAreEquivalent((PsiField)child1, (PsiField)child2).isExactMatch()) return EXACT_MISMATCH;
|
||||
}
|
||||
if (!PsiEquivalenceUtil.areElementsEquivalent(child1, child2)) {
|
||||
} else if (!PsiEquivalenceUtil.areElementsEquivalent(child1, child2)) {
|
||||
return EXACT_MISMATCH;
|
||||
}
|
||||
}
|
||||
@@ -853,10 +852,11 @@ public class EquivalenceChecker {
|
||||
for (int i = 0; i < children1.length; i++) {
|
||||
PsiElement child1 = children1[i];
|
||||
PsiElement child2 = children2[i];
|
||||
if (child1 instanceof PsiCodeBlock && child2 instanceof PsiCodeBlock) {
|
||||
if (child1 instanceof PsiModifierList && child2 instanceof PsiModifierList) {
|
||||
if (!modifierListsAreEquivalent((PsiModifierList)child1, (PsiModifierList)child2)) return EXACT_MISMATCH;
|
||||
} else if (child1 instanceof PsiCodeBlock && child2 instanceof PsiCodeBlock) {
|
||||
if (!codeBlocksAreEquivalent((PsiCodeBlock)child1, (PsiCodeBlock)child2)) return EXACT_MISMATCH;
|
||||
}
|
||||
if (!PsiEquivalenceUtil.areElementsEquivalent(child1, child2)) {
|
||||
} else if (!PsiEquivalenceUtil.areElementsEquivalent(child1, child2)) {
|
||||
return EXACT_MISMATCH;
|
||||
}
|
||||
}
|
||||
@@ -1038,4 +1038,13 @@ public class EquivalenceChecker {
|
||||
}
|
||||
return EXACT_MISMATCH;
|
||||
}
|
||||
|
||||
private static boolean modifierListsAreEquivalent(PsiModifierList modifierList1, PsiModifierList modifierList2) {
|
||||
for (String modifier : PsiModifier.MODIFIERS) {
|
||||
if (modifierList1.hasModifierProperty(modifier) != modifierList2.hasModifierProperty(modifier)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return AnnotationUtil.equal(modifierList1.getAnnotations(), modifierList2.getAnnotations());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user