mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
look for usages in text files
This commit is contained in:
@@ -41,6 +41,9 @@ import com.intellij.codeInspection.unusedImport.UnusedImportLocalInspection;
|
||||
import com.intellij.codeInspection.unusedParameters.UnusedParametersInspection;
|
||||
import com.intellij.codeInspection.unusedSymbol.UnusedSymbolLocalInspection;
|
||||
import com.intellij.codeInspection.util.SpecialAnnotationsUtil;
|
||||
import com.intellij.find.FindManager;
|
||||
import com.intellij.find.findUsages.FindUsagesManager;
|
||||
import com.intellij.find.impl.FindManagerImpl;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.annotation.HighlightSeverity;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -68,14 +71,11 @@ import com.intellij.psi.jsp.JspSpiUtil;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.PsiSearchHelper;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.search.searches.MethodReferencesSearch;
|
||||
import com.intellij.psi.search.searches.OverridingMethodsSearch;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.search.searches.SuperMethodsSearch;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.Query;
|
||||
import gnu.trove.THashSet;
|
||||
import gnu.trove.TObjectIntHashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -549,15 +549,13 @@ public class PostHighlightingPass extends TextEditorHighlightingPass {
|
||||
}
|
||||
if (!canbeReferencedViaWeirdNames(member)) return true;
|
||||
}
|
||||
FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(myProject)).getFindUsagesManager();
|
||||
boolean used = findUsagesManager.isUsed(member, scope);
|
||||
|
||||
Query<PsiReference> query = member instanceof PsiMethod
|
||||
? MethodReferencesSearch.search((PsiMethod)member, scope, true)
|
||||
: ReferencesSearch.search(member, scope, true);
|
||||
final PsiReference first = query.findFirst();
|
||||
if (first == null && member instanceof PsiEnumConstant) {
|
||||
if (!used && member instanceof PsiEnumConstant) {
|
||||
return checkEnumValuesUsages(member, progress);
|
||||
}
|
||||
return first == null;
|
||||
return !used;
|
||||
}
|
||||
|
||||
private boolean checkEnumValuesUsages(PsiMember member, ProgressIndicator progress) {
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
public class <warning descr="Class 'XXX' is never used">XXX</warning> {
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.intellij.codeInsight.daemon;
|
||||
|
||||
import com.intellij.ExtensionPoints;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.codeInspection.LocalInspectionTool;
|
||||
import com.intellij.codeInspection.accessStaticViaInstance.AccessStaticViaInstance;
|
||||
import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection;
|
||||
@@ -23,6 +24,7 @@ import com.intellij.openapi.extensions.ExtensionPoint;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
@@ -239,6 +241,26 @@ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase {
|
||||
point.unregisterExtension(extension);
|
||||
}
|
||||
}
|
||||
public void testUnusedNonPrivateMembersReferencedFromText() throws Exception {
|
||||
UnusedDeclarationInspection deadCodeInspection = new UnusedDeclarationInspection();
|
||||
enableInspectionTool(deadCodeInspection);
|
||||
|
||||
doTest(true, false);
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
public void run() {
|
||||
PsiFile txt = myFile.getParent().createFile("x.txt");
|
||||
try {
|
||||
VfsUtil.saveText(txt.getVirtualFile(), "XXX");
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
List<HighlightInfo> infos = filter(doHighlighting(), HighlightSeverity.WARNING);
|
||||
assertEmpty(infos);
|
||||
}
|
||||
|
||||
public void testNamesHighlighting() throws Exception {
|
||||
LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5);
|
||||
|
||||
@@ -72,6 +72,7 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class FindUsagesManager implements JDOMExternalizable {
|
||||
@@ -310,6 +311,24 @@ public class FindUsagesManager implements JDOMExternalizable {
|
||||
return findUsagesOptions.searchScope;
|
||||
}
|
||||
|
||||
public boolean isUsed(@NotNull PsiElement element, @NotNull SearchScope scope) {
|
||||
FindUsagesHandler handler = getFindUsagesHandler(element, false);
|
||||
if (handler == null) return false;
|
||||
final UsageInfoToUsageConverter.TargetElementsDescriptor descriptor =
|
||||
new UsageInfoToUsageConverter.TargetElementsDescriptor(handler.getPrimaryElements(), handler.getSecondaryElements());
|
||||
FindUsagesOptions findUsagesOptions = handler.getFindUsagesOptions();
|
||||
findUsagesOptions.searchScope = scope;
|
||||
UsageSearcher usageSearcher = createUsageSearcher(descriptor, handler, findUsagesOptions, null);
|
||||
final AtomicBoolean used = new AtomicBoolean();
|
||||
usageSearcher.generate(new Processor<Usage>() {
|
||||
public boolean process(final Usage usage) {
|
||||
used.set(true);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return used.get();
|
||||
}
|
||||
|
||||
// return null on failure or cancel
|
||||
@Nullable
|
||||
public UsageViewPresentation processUsages(FindUsagesHandler handler, @NotNull final Processor<Usage> processor) {
|
||||
|
||||
Reference in New Issue
Block a user