diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java index 850b2d1d3906..75e7bd83acba 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/DummyEntryPointsTool.java @@ -44,9 +44,9 @@ public class DummyEntryPointsTool extends FilteringInspectionTool { return myFilter; } - public void runInspection(AnalysisScope scope, final InspectionManager manager) {} + public void runInspection(@NotNull AnalysisScope scope, @NotNull final InspectionManager manager) {} - public void exportResults(Element parentNode) {} + public void exportResults(@NotNull Element parentNode) {} @NotNull public JobDescriptor[] getJobDescriptors() { diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java index 702771906c5b..fa9af16865ce 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java @@ -38,7 +38,6 @@ import com.intellij.codeInspection.ui.EntryPointsNode; import com.intellij.codeInspection.ui.InspectionNode; import com.intellij.codeInspection.ui.InspectionTreeNode; import com.intellij.codeInspection.util.RefFilter; -import com.intellij.codeInspection.util.SpecialAnnotationsUtil; import com.intellij.ide.DataManager; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.actionSystem.PlatformDataKeys; @@ -63,7 +62,6 @@ import com.intellij.psi.util.PsiUtilBase; import com.intellij.refactoring.safeDelete.SafeDeleteHandler; import com.intellij.ui.SeparatorFactory; import com.intellij.util.IncorrectOperationException; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.text.CharArrayUtil; import com.intellij.util.text.DateFormatUtil; @@ -329,7 +327,7 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool { return serializableClass != null && aClass.isInheritor(serializableClass, true); } - public void runInspection(final AnalysisScope scope, final InspectionManager manager) { + public void runInspection(@NotNull final AnalysisScope scope, @NotNull final InspectionManager manager) { getRefManager().iterate(new RefJavaVisitor() { @Override public void visitElement(final RefEntity refEntity) { if (refEntity instanceof RefJavaElement) { @@ -643,7 +641,7 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool { return myComposer; } - public void exportResults(final Element parentNode) { + public void exportResults(@NotNull final Element parentNode) { final WeakUnreferencedFilter filter = new WeakUnreferencedFilter(this); getRefManager().iterate(new RefJavaVisitor() { @Override public void visitElement(RefEntity refEntity) { diff --git a/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java b/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java index 860af752e6c3..452e7e06659a 100644 --- a/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/ex/GlobalJavaInspectionContextImpl.java @@ -22,10 +22,7 @@ package com.intellij.codeInspection.ex; import com.intellij.CommonBundle; import com.intellij.analysis.AnalysisScope; -import com.intellij.codeInspection.GlobalInspectionContext; -import com.intellij.codeInspection.GlobalJavaInspectionContext; -import com.intellij.codeInspection.InspectionProfileEntry; -import com.intellij.codeInspection.InspectionsBundle; +import com.intellij.codeInspection.*; import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection; import com.intellij.codeInspection.reference.*; import com.intellij.lang.StdLanguages; @@ -207,7 +204,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext if (myDerivedClassesRequests != null) { final List sortedIDs = getSortedIDs(myDerivedClassesRequests); for (SmartPsiElementPointer sortedID : sortedIDs) { - final PsiClass psiClass = (PsiClass)sortedID.getElement(); + final PsiClass psiClass = (PsiClass)dereferenceInReadAction(sortedID); if (psiClass == null) continue; context.incrementJobDoneAmount(GlobalInspectionContextImpl.FIND_EXTERNAL_USAGES, ApplicationManager.getApplication().runReadAction( new Computable() { @@ -229,7 +226,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext if (myDerivedMethodsRequests != null) { final List sortedIDs = getSortedIDs(myDerivedMethodsRequests); for (SmartPsiElementPointer sortedID : sortedIDs) { - final PsiMethod psiMethod = (PsiMethod)sortedID.getElement(); + final PsiMethod psiMethod = (PsiMethod)dereferenceInReadAction(sortedID); if (psiMethod == null) continue; final RefMethod refMethod = (RefMethod)refManager.getReference(psiMethod); @@ -248,7 +245,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext if (myFieldUsagesRequests != null) { final List sortedIDs = getSortedIDs(myFieldUsagesRequests); for (SmartPsiElementPointer sortedID : sortedIDs) { - final PsiField psiField = (PsiField)sortedID.getElement(); + final PsiField psiField = (PsiField)dereferenceInReadAction(sortedID); if (psiField == null) continue; final List processors = myFieldUsagesRequests.get(sortedID); @@ -267,7 +264,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext if (myClassUsagesRequests != null) { final List sortedIDs = getSortedIDs(myClassUsagesRequests); for (SmartPsiElementPointer sortedID : sortedIDs) { - final PsiClass psiClass = (PsiClass)sortedID.getElement(); + final PsiClass psiClass = (PsiClass)dereferenceInReadAction(sortedID); if (psiClass == null) continue; final List processors = myClassUsagesRequests.get(sortedID); @@ -290,7 +287,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext if (myMethodUsagesRequests != null) { List sortedIDs = getSortedIDs(myMethodUsagesRequests); for (SmartPsiElementPointer sortedID : sortedIDs) { - final PsiMethod psiMethod = (PsiMethod)sortedID.getElement(); + final PsiMethod psiMethod = (PsiMethod)dereferenceInReadAction(sortedID); if (psiMethod == null) continue; final List processors = myMethodUsagesRequests.get(sortedID); @@ -307,6 +304,13 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext } } + private static PsiElement dereferenceInReadAction(final SmartPsiElementPointer sortedID) { + return ApplicationManager.getApplication().runReadAction(new Computable() { + public PsiElement compute() { + return sortedID.getElement(); + } + }); + } private static > PsiElementProcessorAdapter createMembersProcessor(final List

processors, final AnalysisScope scope) { @@ -417,7 +421,7 @@ public class GlobalJavaInspectionContextImpl extends GlobalJavaInspectionContext InspectionProfileEntry[] requestors = needRepeatSearchRequest.toArray(new InspectionProfileEntry[needRepeatSearchRequest.size()]); for (InspectionProfileEntry requestor : requestors) { if (requestor instanceof InspectionTool && - !((InspectionTool)requestor).queryExternalUsagesRequests(InspectionManagerEx.getInstance(context.getProject()))) { + !((InspectionTool)requestor).queryExternalUsagesRequests(InspectionManager.getInstance(context.getProject()))) { needRepeatSearchRequest.remove(requestor); } } diff --git a/java/java-impl/src/com/intellij/codeInspection/inconsistentLanguageLevel/InconsistentLanguageLevelInspection.java b/java/java-impl/src/com/intellij/codeInspection/inconsistentLanguageLevel/InconsistentLanguageLevelInspection.java index 4070cd6daf44..4b1329e43150 100644 --- a/java/java-impl/src/com/intellij/codeInspection/inconsistentLanguageLevel/InconsistentLanguageLevelInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/inconsistentLanguageLevel/InconsistentLanguageLevelInspection.java @@ -22,7 +22,9 @@ package com.intellij.codeInspection.inconsistentLanguageLevel; import com.intellij.analysis.AnalysisScope; import com.intellij.codeInsight.daemon.GroupNames; -import com.intellij.codeInspection.*; +import com.intellij.codeInspection.CommonProblemDescriptor; +import com.intellij.codeInspection.InspectionManager; +import com.intellij.codeInspection.QuickFix; import com.intellij.codeInspection.ex.DescriptorProviderInspection; import com.intellij.codeInspection.ex.JobDescriptor; import com.intellij.codeInspection.reference.RefModule; @@ -30,7 +32,6 @@ import com.intellij.codeInspection.unnecessaryModuleDependency.UnnecessaryModule import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.roots.*; @@ -38,7 +39,6 @@ import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; -import com.intellij.psi.PsiFile; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -49,7 +49,7 @@ import java.util.Set; public class InconsistentLanguageLevelInspection extends DescriptorProviderInspection{ private static final Logger LOGGER = Logger.getInstance("#" + InconsistentLanguageLevelInspection.class.getName()); - public void runInspection(AnalysisScope scope, InspectionManager manager) { + public void runInspection(@NotNull AnalysisScope scope, @NotNull InspectionManager manager) { final Set modules = new HashSet(); scope.accept(new PsiElementVisitor(){ public void visitElement(PsiElement element) { @@ -94,10 +94,6 @@ public class InconsistentLanguageLevelInspection extends DescriptorProviderInspe } } - public boolean isGraphNeeded() { - return false; - } - @NotNull public JobDescriptor[] getJobDescriptors() { return JobDescriptor.EMPTY_ARRAY; diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java b/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java index 8fd0e093d7d1..d83f1dc210ca 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java @@ -66,12 +66,13 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { private static final Logger LOG = Logger.getInstance("#" + UnusedLibrariesInspection.class.getName()); private static final JobDescriptor BACKWARD_ANALYSIS = new JobDescriptor(InspectionsBundle.message("unused.library.backward.analysis.job.description")); - public void runInspection(final AnalysisScope scope, final InspectionManager manager) { + public void runInspection(@NotNull final AnalysisScope scope, @NotNull final InspectionManager manager) { final Project project = getContext().getProject(); final ArrayList libraryRoots = new ArrayList(); if (scope.getScopeType() == AnalysisScope.PROJECT) { ContainerUtil.addAll(libraryRoots, LibraryUtil.getLibraryRoots(project, false, false)); - } else { + } + else { final Set modules = new HashSet(); scope.accept(new PsiRecursiveElementVisitor() { @Override @@ -89,6 +90,10 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { }); ContainerUtil.addAll(libraryRoots, LibraryUtil.getLibraryRoots(modules.toArray(new Module[modules.size()]), false, false)); } + if (libraryRoots.isEmpty()) { + return; + } + GlobalSearchScope searchScope; try { @NonNls final String libsName = "libs"; @@ -113,7 +118,7 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { }, new ProgressIndicatorBase() { public void setFraction(final double fraction) { super.setFraction(fraction); - BACKWARD_ANALYSIS.setDoneAmount(((int)fraction * BACKWARD_ANALYSIS.getTotalAmount())); + BACKWARD_ANALYSIS.setDoneAmount((int)fraction * BACKWARD_ANALYSIS.getTotalAmount()); getContext().incrementJobDoneAmount(BACKWARD_ANALYSIS, getText2()); } @@ -131,45 +136,42 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { } } } - if (libraryRoots.size() > 0) { - ProjectFileIndex projectIndex = ProjectRootManager.getInstance(project).getFileIndex(); - Map> unusedLibs = new HashMap>(); - for (VirtualFile libraryRoot : libraryRoots) { - final List orderEntries = projectIndex.getOrderEntriesForFile(libraryRoot); - for (OrderEntry orderEntry : orderEntries) { - Set files = unusedLibs.get(orderEntry); - if (files == null) { - files = new HashSet(); - unusedLibs.put(orderEntry, files); - } - files.add(libraryRoot); - } - } - final RefManager refManager = getRefManager(); - for (OrderEntry orderEntry : unusedLibs.keySet()) { - if (orderEntry instanceof LibraryOrderEntry) { - final RefModule refModule = refManager.getRefModule(orderEntry.getOwnerModule()); - final Set files = unusedLibs.get(orderEntry); - final VirtualFile[] roots = ((LibraryOrderEntry)orderEntry).getRootFiles(OrderRootType.CLASSES); - if (files.size() < roots.length) { - final String unusedLibraryRoots = StringUtil.join(files, new Function() { - public String fun(final VirtualFile file) { - return file.getPresentableName(); - } - }, ","); - addProblemElement(refModule, manager.createProblemDescriptor(InspectionsBundle.message( - "unused.library.roots.problem.descriptor", unusedLibraryRoots, orderEntry.getPresentableName()), new RemoveUnusedLibrary(refModule, orderEntry, files))); - } else { - addProblemElement(refModule, manager.createProblemDescriptor(InspectionsBundle.message("unused.library.problem.descriptor", - orderEntry.getPresentableName()), new RemoveUnusedLibrary(refModule, orderEntry, null))); - } + if (libraryRoots.isEmpty()) { + return; + } + ProjectFileIndex projectIndex = ProjectRootManager.getInstance(project).getFileIndex(); + Map> unusedLibs = new HashMap>(); + for (VirtualFile libraryRoot : libraryRoots) { + final List orderEntries = projectIndex.getOrderEntriesForFile(libraryRoot); + for (OrderEntry orderEntry : orderEntries) { + Set files = unusedLibs.get(orderEntry); + if (files == null) { + files = new HashSet(); + unusedLibs.put(orderEntry, files); } + files.add(libraryRoot); + } + } + final RefManager refManager = getRefManager(); + for (OrderEntry orderEntry : unusedLibs.keySet()) { + if (!(orderEntry instanceof LibraryOrderEntry)) continue; + final RefModule refModule = refManager.getRefModule(orderEntry.getOwnerModule()); + final Set files = unusedLibs.get(orderEntry); + final VirtualFile[] roots = ((LibraryOrderEntry)orderEntry).getRootFiles(OrderRootType.CLASSES); + if (files.size() < roots.length) { + final String unusedLibraryRoots = StringUtil.join(files, new Function() { + public String fun(final VirtualFile file) { + return file.getPresentableName(); + } + }, ","); + String message = InspectionsBundle.message("unused.library.roots.problem.descriptor", unusedLibraryRoots, orderEntry.getPresentableName()); + addProblemElement(refModule, manager.createProblemDescriptor(message, new RemoveUnusedLibrary(refModule, orderEntry, files))); + } + else { + String message = InspectionsBundle.message("unused.library.problem.descriptor", orderEntry.getPresentableName()); + addProblemElement(refModule, manager.createProblemDescriptor(message, new RemoveUnusedLibrary(refModule, orderEntry, null))); } } - } - - public boolean isGraphNeeded() { - return false; } @NotNull diff --git a/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java b/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java index 9a6771e4f2ef..9cee1870fc89 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java +++ b/platform/lang-api/src/com/intellij/codeInspection/ex/ScopeToolState.java @@ -55,7 +55,7 @@ public class ScopeToolState { myLevel = level; } - public ScopeToolState(String scopeName, InspectionProfileEntry tool, boolean enabled, HighlightDisplayLevel level) { + public ScopeToolState(String scopeName, @NotNull InspectionProfileEntry tool, boolean enabled, HighlightDisplayLevel level) { myScopeName = scopeName; myTool = tool; myEnabled = enabled; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index f4339b5141bd..340df6d95b98 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -148,7 +148,7 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass result.clear(); } - public void doInspectInBatch(final InspectionManagerEx iManager, List toolWrappers) { + public void doInspectInBatch(@NotNull InspectionManagerEx iManager, @NotNull List toolWrappers) { Map tool2Wrapper = new THashMap(toolWrappers.size()); for (InspectionProfileEntry toolWrapper : toolWrappers) { tool2Wrapper.put(((LocalInspectionToolWrapper)toolWrapper).getTool(), (LocalInspectionToolWrapper)toolWrapper); @@ -214,8 +214,8 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass } } - private void inspect(final List tools, - final InspectionManagerEx iManager, + private void inspect(@NotNull final List tools, + @NotNull final InspectionManagerEx iManager, final boolean isOnTheFly, boolean failFastOnAcquireReadAction, @NotNull final ProgressIndicator indicator) { diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorProviderInspection.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorProviderInspection.java index 5c345cccc601..f94b296f4b16 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorProviderInspection.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/DescriptorProviderInspection.java @@ -38,6 +38,7 @@ import gnu.trove.THashMap; import org.jdom.Element; import org.jdom.IllegalDataException; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.*; @@ -249,7 +250,7 @@ public abstract class DescriptorProviderInspection extends InspectionTool implem return myComposer; } - public void exportResults(final Element parentNode) { + public void exportResults(@NotNull final Element parentNode) { getRefManager().iterate(new RefVisitor() { @Override public void visitElement(final RefEntity refEntity) { if (getProblemElements().containsKey(refEntity)) { diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionToolWrapper.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionToolWrapper.java index 870447573efb..df88da851a11 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionToolWrapper.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionToolWrapper.java @@ -44,7 +44,7 @@ public class GlobalInspectionToolWrapper extends DescriptorProviderInspection { } } - public void runInspection(final AnalysisScope scope, final InspectionManager manager) { + public void runInspection(@NotNull final AnalysisScope scope, @NotNull final InspectionManager manager) { myTool.runInspection(scope, manager, getContext(), this); } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java index ba6ff2431c9d..a60b5cfba009 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionTool.java @@ -66,9 +66,9 @@ public abstract class InspectionTool extends InspectionProfileEntry { return myContext.getRefManager(); } - public abstract void runInspection(AnalysisScope scope, final InspectionManager manager); + public abstract void runInspection(@NotNull AnalysisScope scope, @NotNull InspectionManager manager); - public abstract void exportResults(Element parentNode); + public abstract void exportResults(@NotNull Element parentNode); public abstract boolean isGraphNeeded(); @Nullable @@ -83,11 +83,6 @@ public abstract class InspectionTool extends InspectionProfileEntry { return false; } - @NotNull - public HighlightDisplayLevel getDefaultLevel() { - return HighlightDisplayLevel.WARNING; - } - public boolean isEnabledByDefault() { return getDefaultLevel() != HighlightDisplayLevel.DO_NOT_SHOW; } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java index a0fabee196aa..95473b575a51 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/ToolsImpl.java @@ -23,7 +23,6 @@ package com.intellij.codeInspection.ex; import com.intellij.codeHighlighting.HighlightDisplayLevel; import com.intellij.codeInspection.InspectionProfile; import com.intellij.codeInspection.InspectionProfileEntry; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.InvalidDataException; @@ -45,7 +44,6 @@ import java.util.Collections; import java.util.List; public class ToolsImpl implements Tools { - private static final Logger LOG = Logger.getInstance("#" + ToolsImpl.class.getName()); public static final String ENABLED_TAG = "enabled_by_default"; private final String myShortName; diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java index 13d9c29eae62..13f6bb9ab537 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java @@ -44,7 +44,7 @@ public class ProjectFileIndexImpl implements ProjectFileIndex { private final ContentFilter myContentFilter; private final ProjectFileExclusionManager myFileExclusionManager; - public ProjectFileIndexImpl(Project project, DirectoryIndex directoryIndex, FileTypeManager fileTypeManager) { + public ProjectFileIndexImpl(@NotNull Project project, @NotNull DirectoryIndex directoryIndex, @NotNull FileTypeManager fileTypeManager) { myProject = project; myDirectoryIndex = directoryIndex; @@ -157,10 +157,10 @@ public class ProjectFileIndexImpl implements ProjectFileIndex { } public boolean isContentJavaSourceFile(@NotNull VirtualFile file) { - if (file.isDirectory()) return false; - if (myFileTypeManager.getFileTypeByFile(file) != StdFileTypes.JAVA) return false; - if (myFileTypeManager.isFileIgnored(file)) return false; - return isInSourceContent(file); + return !file.isDirectory() && + myFileTypeManager.getFileTypeByFile(file) == StdFileTypes.JAVA && + !myFileTypeManager.isFileIgnored(file) && + isInSourceContent(file); } public boolean isLibraryClassFile(@NotNull VirtualFile file) { @@ -175,8 +175,7 @@ public class ProjectFileIndexImpl implements ProjectFileIndex { public boolean isInSource(@NotNull VirtualFile fileOrDir) { if (fileOrDir.isDirectory()) { DirectoryInfo info = getInfoForDirectory(fileOrDir); - if (info == null) return false; - return info.isInModuleSource || info.isInLibrarySource; + return info != null && (info.isInModuleSource || info.isInLibrarySource); } else { VirtualFile parent = fileOrDir.getParent(); @@ -246,8 +245,8 @@ public class ProjectFileIndexImpl implements ProjectFileIndex { return info != null && info.module != null; } else { - if (myFileExclusionManager != null && myFileExclusionManager.isExcluded(file)) return false; - return !myFileTypeManager.isFileIgnored(file); + return (myFileExclusionManager == null || !myFileExclusionManager.isExcluded(file)) + && !myFileTypeManager.isFileIgnored(file); } } } diff --git a/platform/platform-api/src/com/intellij/openapi/roots/impl/FileIndexImplUtil.java b/platform/platform-api/src/com/intellij/openapi/roots/impl/FileIndexImplUtil.java index 8c9970b556f5..d8e734a47ec4 100644 --- a/platform/platform-api/src/com/intellij/openapi/roots/impl/FileIndexImplUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/roots/impl/FileIndexImplUtil.java @@ -19,12 +19,13 @@ package com.intellij.openapi.roots.impl; import com.intellij.openapi.roots.ContentIterator; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileFilter; +import org.jetbrains.annotations.NotNull; public class FileIndexImplUtil { private FileIndexImplUtil() { } - public static boolean iterateRecursively(VirtualFile root, VirtualFileFilter filter, ContentIterator iterator){ + public static boolean iterateRecursively(@NotNull VirtualFile root, @NotNull VirtualFileFilter filter, @NotNull ContentIterator iterator){ if (!root.isValid() || !filter.accept(root)) return true; if (!iterator.processFile(root)) return false; diff --git a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java index 0d6ed9bf36a2..b6ee40302f1f 100644 --- a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java +++ b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java @@ -71,15 +71,15 @@ public class FileUtil { return getRelativePath(basePath, filePath, File.separatorChar); } - public static String getRelativePath(String basePath, String filePath, final char separator) { + public static String getRelativePath(@NotNull String basePath, @NotNull String filePath, final char separator) { return getRelativePath(basePath, filePath, separator, SystemInfo.isFileSystemCaseSensitive); } - private static String ensureEnds(final String s, final char endsWith) { + private static String ensureEnds(@NotNull String s, final char endsWith) { return StringUtil.endsWithChar(s, endsWith) ? s : s + endsWith; } - public static String getRelativePath(String basePath, String filePath, final char separator, final boolean caseSensitive) { + public static String getRelativePath(@NotNull String basePath, @NotNull String filePath, final char separator, final boolean caseSensitive) { basePath = ensureEnds(basePath, separator); String basePathToCompare = caseSensitive ? basePath : basePath.toLowerCase(); @@ -108,7 +108,7 @@ public class FileUtil { return relativePath.toString(); } - public static boolean isAbsolute(String path) { + public static boolean isAbsolute(@NotNull String path) { return new File(path).isAbsolute(); } @@ -122,7 +122,7 @@ public class FileUtil { * @return {@code true} if {@code ancestor} is parent of {@code file}; {@code false} otherwise * @throws IOException this exception is never thrown and left here for backward compatibilty */ - public static boolean isAncestor(File ancestor, File file, boolean strict) throws IOException { + public static boolean isAncestor(@NotNull File ancestor, @NotNull File file, boolean strict) throws IOException { File parent = strict ? getParentFile(file) : file; while (true) { if (parent == null) { @@ -144,7 +144,7 @@ public class FileUtil { * @return a parent or the null if the file has no parent. */ @Nullable - public static File getParentFile(final File file) { + public static File getParentFile(@NotNull File file) { int skipCount = 0; File parentFile = file; while (true) { @@ -193,7 +193,7 @@ public class FileUtil { } @NotNull - public static char[] loadText(Reader reader, int length) throws IOException { + public static char[] loadText(@NotNull Reader reader, int length) throws IOException { char[] chars = new char[length]; int count = 0; while (count < chars.length) { @@ -212,7 +212,7 @@ public class FileUtil { } @NotNull - public static byte[] loadFileBytes(File file) throws IOException { + public static byte[] loadFileBytes(@NotNull File file) throws IOException { byte[] bytes; final InputStream stream = new FileInputStream(file); try{ @@ -234,7 +234,7 @@ public class FileUtil { } @NotNull - public static byte[] loadBytes(InputStream stream, int length) throws IOException{ + public static byte[] loadBytes(@NotNull InputStream stream, int length) throws IOException{ byte[] bytes = new byte[length]; int count = 0; while(count < length) { @@ -246,7 +246,7 @@ public class FileUtil { } @NotNull - public static byte[] loadBytes(InputStream stream) throws IOException{ + public static byte[] loadBytes(@NotNull InputStream stream) throws IOException{ ByteArrayOutputStream buffer = new ByteArrayOutputStream(); final byte[] bytes = BUFFER.get(); while(true) { @@ -259,7 +259,7 @@ public class FileUtil { } @NotNull - public static String loadTextAndClose(Reader reader) throws IOException { + public static String loadTextAndClose(@NotNull Reader reader) throws IOException { try { return new String(adaptiveLoadText(reader)); } @@ -269,7 +269,7 @@ public class FileUtil { } @NotNull - public static char[] adaptiveLoadText(Reader reader) throws IOException { + public static char[] adaptiveLoadText(@NotNull Reader reader) throws IOException { char[] chars = new char[4096]; List buffers = null; int count = 0; @@ -302,7 +302,7 @@ public class FileUtil { } @NotNull - public static byte[] adaptiveLoadBytes(InputStream stream) throws IOException{ + public static byte[] adaptiveLoadBytes(@NotNull InputStream stream) throws IOException{ byte[] bytes = new byte[4096]; List buffers = null; int count = 0; @@ -334,21 +334,24 @@ public class FileUtil { return result; } - public static File createTempDirectory(@NonNls String prefix, @NonNls String suffix) throws IOException{ + @NotNull + public static File createTempDirectory(@NotNull @NonNls String prefix, @NonNls String suffix) throws IOException{ File file = doCreateTempFile(prefix, suffix); file.delete(); file.mkdir(); return file; } - public static File createTempDirectory(File dir, @NonNls String prefix, @NonNls String suffix) throws IOException{ + @NotNull + public static File createTempDirectory(File dir, @NotNull @NonNls String prefix, @NonNls String suffix) throws IOException{ File file = doCreateTempFile(prefix, suffix, dir); file.delete(); file.mkdir(); return file; } - public static File createTempFile(@NonNls final File dir, @NonNls String prefix, @NonNls String suffix, final boolean create) throws IOException{ + @NotNull + public static File createTempFile(@NonNls final File dir, @NotNull @NonNls String prefix, @NonNls String suffix, final boolean create) throws IOException{ File file = doCreateTempFile(prefix, suffix, dir); file.delete(); if (create) { @@ -358,18 +361,20 @@ public class FileUtil { } @NotNull - public static File createTempFile(@NonNls String prefix, @NonNls String suffix) throws IOException{ + public static File createTempFile(@NotNull @NonNls String prefix, @NonNls String suffix) throws IOException{ File file = doCreateTempFile(prefix, suffix); file.delete(); file.createNewFile(); return file; } + @NotNull private static File doCreateTempFile(String prefix, String suffix) throws IOException { return doCreateTempFile(prefix, suffix, new File(getTempDirectory())); } - private static File doCreateTempFile(String prefix, String suffix, final File dir) throws IOException { + @NotNull + private static File doCreateTempFile(@NotNull String prefix, String suffix, final File dir) throws IOException { dir.mkdirs(); if (prefix.length() < 3) { @@ -471,7 +476,7 @@ public class FileUtil { } } - private static File renameToTempFileOrDelete(File file) { + private static File renameToTempFileOrDelete(@NotNull File file) { final File tempDir = new File(getTempDirectory()); boolean isSameDrive = true; if (SystemInfo.isWindows) { @@ -494,7 +499,7 @@ public class FileUtil { return null; } - private static File getTempFile(String originalFileName, File parent) { + private static File getTempFile(@NotNull String originalFileName, @NotNull File parent) { int randomSuffix = (int)(System.currentTimeMillis() % 1000); for (int i = randomSuffix; ; i++) { @NonNls String name = "___" + originalFileName + i + ASYNC_DELETE_EXTENSION; @@ -503,7 +508,7 @@ public class FileUtil { } } - public static boolean delete(File file){ + public static boolean delete(@NotNull File file){ File[] files = file.listFiles(); if (files != null) { for (File file1 : files) { @@ -523,7 +528,7 @@ public class FileUtil { return false; } - public static boolean createParentDirs(File file) { + public static boolean createParentDirs(@NotNull File file) { if (!file.exists()) { String parentDirPath = file.getParent(); if (parentDirPath != null) { @@ -534,7 +539,7 @@ public class FileUtil { return true; } - public static boolean createIfDoesntExist(File file) { + public static boolean createIfDoesntExist(@NotNull File file) { if (file.exists()) return true; try { if (!createParentDirs(file)) return false; @@ -549,21 +554,21 @@ public class FileUtil { } } - public static boolean ensureCanCreateFile(File file) { + public static boolean ensureCanCreateFile(@NotNull File file) { if (file.exists()) return file.canWrite(); if (!createIfDoesntExist(file)) return false; return delete(file); } - public static void copy(File fromFile, File toFile) throws IOException { + public static void copy(@NotNull File fromFile, @NotNull File toFile) throws IOException { performCopy(fromFile, toFile, true); } - public static void copyContent(File fromFile, File toFile) throws IOException { + public static void copyContent(@NotNull File fromFile, @NotNull File toFile) throws IOException { performCopy(fromFile, toFile, false); } - private static void performCopy(File fromFile, File toFile, final boolean syncTimestamp) throws IOException { + private static void performCopy(@NotNull File fromFile, @NotNull File toFile, final boolean syncTimestamp) throws IOException { FileOutputStream fos; try { fos = new FileOutputStream(toFile); @@ -606,7 +611,7 @@ public class FileUtil { } } - public static void copy(InputStream inputStream, OutputStream outputStream) throws IOException { + public static void copy(@NotNull InputStream inputStream, @NotNull OutputStream outputStream) throws IOException { final byte[] buffer = BUFFER.get(); while (true) { int read = inputStream.read(buffer); @@ -615,9 +620,9 @@ public class FileUtil { } } - public static void copy(InputStream inputStream, int size, OutputStream outputStream) throws IOException { + public static void copy(@NotNull InputStream inputStream, int maxSize, @NotNull OutputStream outputStream) throws IOException { final byte[] buffer = BUFFER.get(); - int toRead = size; + int toRead = maxSize; while (toRead > 0) { int read = inputStream.read(buffer, 0, Math.min(buffer.length, toRead)); if (read < 0) break; @@ -626,11 +631,11 @@ public class FileUtil { } } - public static void copyDir(File fromDir, File toDir) throws IOException { + public static void copyDir(@NotNull File fromDir, @NotNull File toDir) throws IOException { copyDir(fromDir, toDir, true); } - public static void copyDir(File fromDir, File toDir, boolean copySystemFiles) throws IOException { + public static void copyDir(@NotNull File fromDir, @NotNull File toDir, boolean copySystemFiles) throws IOException { copyDir(fromDir, toDir, copySystemFiles ? null : new FileFilter() { public boolean accept(File file) { return !file.getName().startsWith("."); @@ -638,7 +643,7 @@ public class FileUtil { }); } - public static void copyDir(File fromDir, File toDir, @Nullable final FileFilter filter) throws IOException { + public static void copyDir(@NotNull File fromDir, @NotNull File toDir, @Nullable final FileFilter filter) throws IOException { toDir.mkdirs(); if (isAncestor(fromDir, toDir, true)) { LOG.error(fromDir.getAbsolutePath() + " is ancestor of " + toDir + ". Can't copy to itself."); @@ -660,11 +665,13 @@ public class FileUtil { } } - public static String getNameWithoutExtension(File file) { + @NotNull + public static String getNameWithoutExtension(@NotNull File file) { return getNameWithoutExtension(file.getName()); } - public static String getNameWithoutExtension(String name) { + @NotNull + public static String getNameWithoutExtension(@NotNull String name) { int i = name.lastIndexOf('.'); if (i != -1) { name = name.substring(0, i); @@ -672,11 +679,11 @@ public class FileUtil { return name; } - public static String createSequentFileName(File aParentFolder, @NonNls String aFilePrefix, String aExtension) { + public static String createSequentFileName(@NotNull File aParentFolder, @NotNull @NonNls String aFilePrefix, @NotNull String aExtension) { return findSequentNonexistentFile(aParentFolder, aFilePrefix, aExtension).getName(); } - public static File findSequentNonexistentFile(final File aParentFolder, @NonNls final String aFilePrefix, final String aExtension) { + public static File findSequentNonexistentFile(@NotNull File aParentFolder, @NotNull @NonNls final String aFilePrefix, @NotNull String aExtension) { int postfix = 0; String ext = 0 == aExtension.length() ? "" : "." + aExtension; @@ -704,12 +711,13 @@ public class FileUtil { } @NotNull - public static String unquote(String urlString) { + public static String unquote(@NotNull String urlString) { urlString = urlString.replace('/', File.separatorChar); return URLUtil.unescapePercentSequences(urlString); } - public static boolean isFilePathAcceptable(File file, @Nullable FileFilter fileFilter) { + public static boolean isFilePathAcceptable(@NotNull File root, @Nullable FileFilter fileFilter) { + File file = root; do { if (fileFilter != null && !fileFilter.accept(file)) return false; file = file.getParentFile(); @@ -718,7 +726,7 @@ public class FileUtil { return true; } - public static void rename(final File source, final File target) throws IOException { + public static void rename(@NotNull File source, @NotNull File target) throws IOException { if (source.renameTo(target)) return; if (!source.exists()) return; @@ -726,11 +734,11 @@ public class FileUtil { delete(source); } - public static boolean startsWith(@NonNls String path, @NonNls String start) { + public static boolean startsWith(@NotNull @NonNls String path, @NotNull @NonNls String start) { return startsWith(path, start, SystemInfo.isFileSystemCaseSensitive); } - public static boolean startsWith(final String path, final String start, final boolean caseSensitive) { + public static boolean startsWith(@NotNull String path, @NotNull String start, final boolean caseSensitive) { final int length1 = path.length(); final int length2 = start.length(); if (length2 == 0) return true; @@ -748,15 +756,15 @@ public class FileUtil { return next1 == '/' || next1 == File.separatorChar; } - public static boolean pathsEqual(String path1, String path2) { + public static boolean pathsEqual(@NotNull String path1, @NotNull String path2) { return SystemInfo.isFileSystemCaseSensitive? path1.equals(path2) : path1.equalsIgnoreCase(path2); } - public static int comparePaths(String path1, String path2) { + public static int comparePaths(@NotNull String path1, @NotNull String path2) { return SystemInfo.isFileSystemCaseSensitive? path1.compareTo(path2) : path1.compareToIgnoreCase(path2); } - public static int pathHashCode(String path) { + public static int pathHashCode(@NotNull String path) { return SystemInfo.isFileSystemCaseSensitive? path.hashCode() : path.toLowerCase().hashCode(); } @@ -776,11 +784,11 @@ public class FileUtil { return path; } - public static void collectMatchedFiles(final File root, final Pattern pattern, final List files) { - collectMatchedFiles(root, root, pattern, files); + public static void collectMatchedFiles(@NotNull File root, @NotNull Pattern pattern, @NotNull List outFiles) { + collectMatchedFiles(root, root, pattern, outFiles); } - private static void collectMatchedFiles(final File absoluteRoot, final File root, final Pattern pattern, final List files) { + private static void collectMatchedFiles(@NotNull File absoluteRoot, @NotNull File root, @NotNull Pattern pattern, @NotNull List files) { final File[] dirs = root.listFiles(); if (dirs == null) return; for (File dir : dirs) { @@ -789,14 +797,16 @@ public class FileUtil { if (pattern.matcher(path).matches()) { files.add(dir); } - } else { + } + else { collectMatchedFiles(absoluteRoot, dir, pattern, files); } } } @RegExp - public static String convertAntToRegexp(String antPattern) { + @NotNull + public static String convertAntToRegexp(@NotNull String antPattern) { return convertAntToRegexp(antPattern, true); } @@ -809,7 +819,8 @@ public class FileUtil { * @see com.intellij.openapi.util.io.FileUtil#toSystemIndependentName */ @RegExp - public static String convertAntToRegexp(String antPattern, boolean ignoreStartingSlash) { + @NotNull + public static String convertAntToRegexp(@NotNull String antPattern, boolean ignoreStartingSlash) { final StringBuilder builder = new StringBuilder(antPattern.length()); int asteriskCount = 0; boolean recursive = true; @@ -872,7 +883,7 @@ public class FileUtil { return builder.toString(); } - public static boolean moveDirWithContent(File fromDir, File toDir) { + public static boolean moveDirWithContent(@NotNull File fromDir, @NotNull File toDir) { if (!toDir.exists()) return fromDir.renameTo(toDir); File[] files = fromDir.listFiles(); @@ -893,7 +904,8 @@ public class FileUtil { * Has duplicate: {@link com.intellij.coverage.listeners.CoverageListener#sanitize(java.lang.String, java.lang.String)} * as FileUtil is not available in client's vm */ - public static String sanitizeFileName(String name) { + @NotNull + public static String sanitizeFileName(@NotNull String name) { StringBuilder result = new StringBuilder(); for (int i = 0; i < name.length(); i++) { @@ -907,20 +919,16 @@ public class FileUtil { result.append("_"); } } - else { - - } - } return result.toString(); } - public static boolean canExecute(File file) { + public static boolean canExecute(@NotNull File file) { return file.canExecute(); } - public static void setReadOnlyAttribute(String path, boolean readOnlyStatus) throws IOException { + public static void setReadOnlyAttribute(@NotNull String path, boolean readOnlyStatus) throws IOException { new File(path).setWritable(!readOnlyStatus); } @@ -931,31 +939,31 @@ public class FileUtil { * @param executableFlag new value of executable attribute * @throws IOException if there is a problem with setting the flag */ - public static void setExecutableAttribute(String path, boolean executableFlag) throws IOException { + public static void setExecutableAttribute(@NotNull String path, boolean executableFlag) throws IOException { new File(path).setExecutable(executableFlag); } - public static void appendToFile(File file, String text) throws IOException { + public static void appendToFile(@NotNull File file, @NotNull String text) throws IOException { writeToFile(file, text.getBytes("UTF-8"), true); } - public static void writeToFile(final File file, final byte[] text) throws IOException { + public static void writeToFile(@NotNull File file, @NotNull byte[] text) throws IOException { writeToFile(file, text, false); } - public static void writeToFile(final File file, final String text) throws IOException { + public static void writeToFile(@NotNull File file, @NotNull String text) throws IOException { writeToFile(file, text.getBytes("UTF-8"), false); } - public static void writeToFile(final File file, final byte[] text, int off, int len) throws IOException { + public static void writeToFile(@NotNull File file, @NotNull byte[] text, int off, int len) throws IOException { writeToFile(file, text, off, len, false); } - public static void writeToFile(final File file, final byte[] text, boolean append) throws IOException { + public static void writeToFile(@NotNull File file, @NotNull byte[] text, boolean append) throws IOException { writeToFile(file, text, 0, text.length, append); } - private static void writeToFile(File file, byte[] text, final int off, final int len, boolean append) throws IOException { + private static void writeToFile(@NotNull File file, @NotNull byte[] text, final int off, final int len, boolean append) throws IOException { createParentDirs(file); OutputStream stream = new BufferedOutputStream(new FileOutputStream(file, append)); try { @@ -966,7 +974,7 @@ public class FileUtil { } } - public static boolean processFilesRecursively(final File root, final Processor processor) { + public static boolean processFilesRecursively(@NotNull File root, @NotNull Processor processor) { final LinkedList queue = new LinkedList(); queue.add(root); while (!queue.isEmpty()) { @@ -983,7 +991,7 @@ public class FileUtil { } @Nullable - public static File findFirstThatExist(String... paths) { + public static File findFirstThatExist(@NotNull String... paths) { for (String path : paths) { if (!StringUtil.isEmptyOrSpaces(path)) { File file = new File(toSystemDependentName(path)); @@ -994,7 +1002,8 @@ public class FileUtil { return null; } - public static List findFilesByMask(Pattern pattern, File dir) { + @NotNull + public static List findFilesByMask(@NotNull Pattern pattern, @NotNull File dir) { final ArrayList found = new ArrayList(); for (File file : dir.listFiles()) { if (file.isDirectory()) { diff --git a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/InconsistentResourceBundleInspection.java b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/InconsistentResourceBundleInspection.java index 0e2a3fb74098..5bdf4b69f9ed 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/InconsistentResourceBundleInspection.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/InconsistentResourceBundleInspection.java @@ -101,7 +101,7 @@ public class InconsistentResourceBundleInspection extends DescriptorProviderInsp } - public void runInspection(AnalysisScope scope, final InspectionManager manager) { + public void runInspection(@NotNull AnalysisScope scope, @NotNull final InspectionManager manager) { final Set visitedBundles = new THashSet(); scope.accept(new PsiRecursiveElementVisitor() { @Override public void visitFile(PsiFile file) { diff --git a/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java b/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java index 8c79fc4ac599..0a088252215c 100644 --- a/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java +++ b/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java @@ -70,7 +70,7 @@ public class DuplicatePropertyInspection extends DescriptorProviderInspection { public boolean CHECK_DUPLICATE_KEYS_WITH_DIFFERENT_VALUES = true; - public void runInspection(AnalysisScope scope, final InspectionManager manager) { + public void runInspection(@NotNull AnalysisScope scope, @NotNull final InspectionManager manager) { scope.accept(new PsiRecursiveElementVisitor() { @Override public void visitFile(PsiFile file) {