diff --git a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java index 8e19910dd648..4fffe71c0ee6 100644 --- a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java @@ -1,6 +1,7 @@ package com.intellij.refactoring.copy; import com.intellij.codeInsight.actions.OptimizeImportsProcessor; +import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil; import com.intellij.featureStatistics.FeatureUsageTracker; import com.intellij.ide.util.EditorHelper; import com.intellij.openapi.application.ApplicationManager; @@ -26,7 +27,7 @@ public class CopyClassesHandler implements CopyHandlerDelegate { @Nullable private static PsiClass convertToTopLevelClass(final PsiElement[] elements) { - if (elements.length == 1) { + if (elements.length == 1 && !CollectHighlightsUtil.isOutOfSourceRootJavaFile(elements[0].getContainingFile())) { return getTopLevelClass(elements [0]); } return null; diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesHandler.java index 0889e4265bb1..f7e52a1c8308 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesHandler.java @@ -6,6 +6,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.ex.DataConstantsEx; import com.intellij.openapi.editor.Editor; +import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil; import org.jetbrains.annotations.Nullable; public class MoveClassesHandler extends MoveClassesOrPackagesHandlerBase { @@ -14,6 +15,7 @@ public class MoveClassesHandler extends MoveClassesOrPackagesHandlerBase { if (element instanceof JspClass) return false; if (!(element instanceof PsiClass)) return false; if (!(element.getParent() instanceof PsiFile)) return false; + if (CollectHighlightsUtil.isOutOfSourceRootJavaFile((PsiFile)element.getParent())) return false; } return super.canMove(elements, targetContainer); } @@ -25,6 +27,7 @@ public class MoveClassesHandler extends MoveClassesOrPackagesHandlerBase { public boolean tryToMove(final PsiElement element, final Project project, final DataContext dataContext, final PsiReference reference, final Editor editor) { + if (CollectHighlightsUtil.isOutOfSourceRootJavaFile(element.getContainingFile())) return false; if (isReferenceInAnonymousClass(reference)) return false; if (element instanceof PsiClass && !(element instanceof PsiAnonymousClass) && element.getParent() instanceof PsiFile) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CollectHighlightsUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CollectHighlightsUtil.java index 3fa885bdb26c..78b588036aa5 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CollectHighlightsUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CollectHighlightsUtil.java @@ -4,6 +4,10 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; @@ -107,4 +111,18 @@ public class CollectHighlightsUtil { } return root.findElementAt(offset); } + + public static boolean isOutOfSourceRootJavaFile(@Nullable PsiFile psiFile) { + if (psiFile == null) return false; + if (psiFile.getFileType() == StdFileTypes.JAVA) { + final VirtualFile file = psiFile.getVirtualFile(); + if (file != null) { + final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(psiFile.getProject()).getFileIndex(); + if (!projectFileIndex.isInSource(file) && !projectFileIndex.isInLibraryClasses(file)) { + return true; + } + } + } + return false; + } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/FileStatusMap.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/FileStatusMap.java index 51b2471326f5..e10313f27eee 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/FileStatusMap.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/FileStatusMap.java @@ -151,13 +151,14 @@ public class FileStatusMap { @Nullable public TextRange getFileDirtyScope(@NotNull Document document, int passId) { synchronized(myDocumentToStatusMap){ + PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(document); + if (CollectHighlightsUtil.isOutOfSourceRootJavaFile(file)) return null; FileStatus status = myDocumentToStatusMap.get(document); if (status == null){ - PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(document); return file == null ? null : file.getTextRange(); } if (status.defensivelyMarked) { - PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(document); + //PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(document); status.markWholeFile(file, document, myProject); status.defensivelyMarked = false; } @@ -235,6 +236,9 @@ public class FileStatusMap { public boolean allDirtyScopesAreNull(@NotNull Document document) { synchronized (myDocumentToStatusMap) { + PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(document); + if (CollectHighlightsUtil.isOutOfSourceRootJavaFile(file)) return true; + FileStatus status = myDocumentToStatusMap.get(document); return status != null && !status.defensivelyMarked && status.wolfPassFinfished && status.allDirtyScopesAreNull(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorHighlightingPassRegistrarImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorHighlightingPassRegistrarImpl.java index 80bb2b05e87a..b88ae768101c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorHighlightingPassRegistrarImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorHighlightingPassRegistrarImpl.java @@ -12,10 +12,6 @@ import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.fileTypes.StdFileTypes; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiCompiledElement; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; @@ -27,7 +23,6 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Set; -import java.util.Collections; /** * User: anna @@ -97,16 +92,6 @@ public class TextEditorHighlightingPassRegistrarImpl extends TextEditorHighlight @NotNull public List instantiatePasses(@NotNull final PsiFile psiFile, @NotNull final Editor editor, @NotNull final int[] passesToIgnore) { - if (psiFile.getFileType() == StdFileTypes.JAVA) { - final VirtualFile file = psiFile.getVirtualFile(); - if (file != null) { - final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex(); - if (!projectFileIndex.isInSource(file) && !projectFileIndex.isInLibraryClasses(file)) { - return Collections.emptyList(); - } - } - } - final int[] nextId = new int[1]; synchronized (this) { nextId[0] = nextAvailableId; diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java b/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java index a4f240791a42..ba213e225b98 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java @@ -20,6 +20,7 @@ import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.actions.BaseRefactoringAction; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.usageView.UsageViewUtil; +import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -66,6 +67,7 @@ public class PsiElementRenameHandler implements RenameHandler { } static boolean canRename(Project project, Editor editor, PsiElement element) { + if (CollectHighlightsUtil.isOutOfSourceRootJavaFile(element.getContainingFile())) return false; boolean hasRenameProcessor = RenamePsiElementProcessor.forElement(element) != RenamePsiElementProcessor.DEFAULT; boolean hasWritableMetaData = element instanceof PsiMetaOwner && ((PsiMetaOwner)element).getMetaData() instanceof PsiWritableMetaData;