mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-354817 [java]: find constructors correctly with both "Usages" and "Usages of constructors" is selected
GitOrigin-RevId: 3f75d7e0a6ace0dd4124fc0a9dd1d4e67be6e9b6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b3c05c67c6
commit
ddaea40aba
+2
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.daemon.impl;
|
||||
|
||||
import com.intellij.codeInsight.daemon.ImplicitUsageProvider;
|
||||
@@ -283,6 +283,7 @@ public final class UnusedSymbolUtil {
|
||||
}
|
||||
else if (member instanceof PsiClass) {
|
||||
options = new JavaClassFindUsagesOptions(useScope);
|
||||
((JavaClassFindUsagesOptions)options).isConstructorUsages = false;
|
||||
options.isSearchForTextOccurrences = true;
|
||||
}
|
||||
else if (member instanceof PsiMethod method) {
|
||||
|
||||
@@ -279,13 +279,10 @@ public final class JavaFindUsagesHelper {
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!options.isUsages || !options.isConstructorUsages) { // ReferencesSearch on class already includes new instance creations.
|
||||
PsiMethod[] methods = ReadAction.compute(() -> aClass.getMethods());
|
||||
for (PsiMethod method : methods) {
|
||||
boolean include = ReadAction.compute(() -> method.isConstructor()) ? options.isConstructorUsages : options.isMethodsUsages;
|
||||
if (!include) continue;
|
||||
if (!addElementUsages(method, options, processor)) return false;
|
||||
}
|
||||
for (PsiMethod method : ReadAction.compute(() -> aClass.getMethods())) {
|
||||
boolean include = ReadAction.compute(() -> method.isConstructor()) ? options.isConstructorUsages : options.isMethodsUsages;
|
||||
if (!include) continue;
|
||||
if (!addElementUsages(method, options, processor)) return false;
|
||||
}
|
||||
if (!options.isUsages && options.isConstructorUsages) {
|
||||
PsiMethod defaultConstructor = ReadAction.compute(() -> LightDefaultConstructor.create(aClass));
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
public class SomeClass<caret> {
|
||||
SomeClass() {
|
||||
}
|
||||
|
||||
SomeClass(int i) {
|
||||
this();
|
||||
}
|
||||
}
|
||||
@@ -121,20 +121,35 @@ public class FindUsagesTest extends JavaPsiTestCase {
|
||||
}
|
||||
|
||||
public void testFindConstructorUsagesFromClass() {
|
||||
PsiClass aClass = myJavaFacade.findClass("HeadlessHorsewoman", GlobalSearchScope.allScope(myProject));
|
||||
JavaClassFindUsagesOptions options = new JavaClassFindUsagesOptions(getProject());
|
||||
options.isUsages = true;
|
||||
options.isConstructorUsages = true;
|
||||
doTestFindUsages("SomeClass", options, "this()");
|
||||
options.isUsages = false;
|
||||
doTestFindUsages("SomeClass", options, "this()");
|
||||
options.isUsages = true;
|
||||
options.isConstructorUsages = false;
|
||||
doTestFindUsages("SomeClass", options, "");
|
||||
}
|
||||
|
||||
public void testFindDefaultConstructorUsagesFromClass() {
|
||||
JavaClassFindUsagesOptions options = new JavaClassFindUsagesOptions(getProject());
|
||||
options.isUsages = false;
|
||||
options.isConstructorUsages = true;
|
||||
doTestFindUsages("HeadlessHorsewoman", options, "new HeadlessHorsewoman()");
|
||||
}
|
||||
|
||||
private void doTestFindUsages(String className, JavaClassFindUsagesOptions options, String expected) {
|
||||
PsiClass aClass = myJavaFacade.findClass(className, GlobalSearchScope.allScope(myProject));
|
||||
CommonProcessors.CollectProcessor<UsageInfo> processor = new CommonProcessors.CollectProcessor<>();
|
||||
FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(myProject)).getFindUsagesManager();
|
||||
FindUsagesHandler handler = findUsagesManager.getFindUsagesHandler(aClass, false);
|
||||
assertNotNull(handler);
|
||||
handler.processElementUsages(aClass, processor, options);
|
||||
Collection<UsageInfo> usages = processor.getResults();
|
||||
assertEquals(1, usages.size());
|
||||
assertEquals("new HeadlessHorsewoman()", StringUtil.join(usages, u -> u.getElement().getParent().getText() , ", "));
|
||||
}
|
||||
|
||||
assertEquals(expected, StringUtil.join(usages, u -> u.getElement().getParent().getText() , "\n"));
|
||||
}
|
||||
|
||||
public void testDefaultConstructor() {
|
||||
PsiClass aClass = myJavaFacade.findClass("Animal", GlobalSearchScope.allScope(myProject));
|
||||
PsiMethod main = aClass.findMethodsByName("main", false)[0];
|
||||
|
||||
Reference in New Issue
Block a user