mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] compute the set duplicated signatures instead of method->signature map
This should fix the `GroovyHighlightingTest.testDuplicateMethods()`
This commit is contained in:
+7
-2
@@ -1964,8 +1964,13 @@ public class GroovyAnnotator extends GroovyElementVisitor {
|
||||
}
|
||||
|
||||
private void doCheckDuplicateMethod(@NotNull GrMethod method, @NotNull PsiClass clazz) {
|
||||
MethodSignature signature = GrClassImplUtil.getDuplicatedMethods(clazz).get(method);
|
||||
if (signature == null) return;
|
||||
Set<MethodSignature> duplicatedSignatures = GrClassImplUtil.getDuplicatedSignatures(clazz);
|
||||
if (duplicatedSignatures.isEmpty()) return; // optimization
|
||||
|
||||
PsiSubstitutor substitutor = JavaPsiFacade.getElementFactory(method.getProject()).createRawSubstitutor(method);
|
||||
MethodSignature signature = method.getSignature(substitutor);
|
||||
if (!duplicatedSignatures.contains(signature)) return;
|
||||
|
||||
String signaturePresentation = GroovyPresentationUtil.getSignaturePresentation(signature);
|
||||
GrMethod original = method instanceof GrReflectedMethod ? ((GrReflectedMethod)method).getBaseMethod() : method;
|
||||
myHolder.createErrorAnnotation(
|
||||
|
||||
+3
-7
@@ -619,23 +619,19 @@ public class GrClassImplUtil {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Map<PsiMethod, MethodSignature> getDuplicatedMethods(@NotNull PsiClass clazz) {
|
||||
public static Set<MethodSignature> getDuplicatedSignatures(@NotNull PsiClass clazz) {
|
||||
return CachedValuesManager.getCachedValue(clazz, () -> {
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(clazz.getProject()).getElementFactory();
|
||||
|
||||
MostlySingularMultiMap<MethodSignature, PsiMethod> signatures = MostlySingularMultiMap.newMap();
|
||||
for (PsiMethod method : clazz.getMethods()) {
|
||||
MethodSignature signature = method.getSignature(factory.createRawSubstitutor(method));
|
||||
signatures.add(signature, method);
|
||||
}
|
||||
|
||||
Map<PsiMethod, MethodSignature> result = ContainerUtil.newHashMap();
|
||||
Set<MethodSignature> result = ContainerUtil.newHashSet();
|
||||
for (MethodSignature signature : signatures.keySet()) {
|
||||
if (signatures.valuesForKey(signature) > 1) {
|
||||
signatures.processForKey(signature, m -> {
|
||||
result.put(m, signature);
|
||||
return true;
|
||||
});
|
||||
result.add(signature);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user