Replaced checking for ClsFileImpl/PsiCompiledElement with checking for PsiCompiledFile & invoking getDecompiledPsiFile() instead of getMirror()

This commit is contained in:
Evgeny Gerashchenko
2012-03-13 17:09:06 +04:00
parent 9f35f07f73
commit 4f9a41d964
9 changed files with 30 additions and 18 deletions
@@ -23,7 +23,6 @@ import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.compiled.ClsClassImpl;
import com.intellij.psi.impl.compiled.ClsFileImpl;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.Nullable;
@@ -39,7 +38,7 @@ public class JavaEditorFileSwapper extends EditorFileSwapper {
TextEditorImpl oldEditor = findSinglePsiAwareEditor(editorWithProviderComposite.getEditors());
if (oldEditor != null) {
ClsFileImpl clsFile = (ClsFileImpl)PsiManager.getInstance(project).findFile(file);
PsiCompiledFile clsFile = (PsiCompiledFile)PsiManager.getInstance(project).findFile(file);
assert clsFile != null;
int offset = oldEditor.getEditor().getCaretModel().getOffset();
@@ -79,7 +78,7 @@ public class JavaEditorFileSwapper extends EditorFileSwapper {
@Nullable
public static VirtualFile findSourceFile(Project project, VirtualFile eachFile) {
PsiFile psiFile = PsiManager.getInstance(project).findFile(eachFile);
if (!(psiFile instanceof ClsFileImpl)) return null;
if (!(psiFile instanceof PsiCompiledFile)) return null;
String fqn = getFQN(psiFile);
if (fqn == null) return null;
@@ -43,8 +43,8 @@ public abstract class CopyPasteReferenceProcessor<TRef extends PsiElement> imple
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.editorActions.CopyPasteReferenceProcessor");
public ReferenceTransferableData collectTransferableData(PsiFile file, final Editor editor, final int[] startOffsets, final int[] endOffsets) {
if (file instanceof PsiCompiledElement) {
file = (PsiFile) ((PsiCompiledElement) file).getMirror();
if (file instanceof PsiCompiledFile) {
file = ((PsiCompiledFile) file).getDecompiledPsiFile();
}
if (!(file instanceof PsiClassOwner)) {
return null;
@@ -99,8 +99,8 @@ public class TargetElementUtilBase {
offset = adjustOffset(document, offset);
if (file instanceof PsiCompiledElement) {
return ((PsiCompiledElement)file).getMirror().findReferenceAt(offset);
if (file instanceof PsiCompiledFile) {
return ((PsiCompiledFile) file).getDecompiledPsiFile().findReferenceAt(offset);
}
return file.findReferenceAt(offset);
@@ -22,7 +22,7 @@ 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.psi.PsiCompiledElement;
import com.intellij.psi.PsiCompiledFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.PsiFileEx;
@@ -64,9 +64,9 @@ public class TextEditorBackgroundHighlighter implements BackgroundEditorHighligh
private void renewFile() {
if (myFile == null || !myFile.isValid()) {
myFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myDocument);
myCompiled = myFile instanceof PsiCompiledElement;
myCompiled = myFile instanceof PsiCompiledFile;
if (myCompiled) {
myFile = (PsiFile)((PsiCompiledElement)myFile).getMirror();
myFile = ((PsiCompiledFile)myFile).getDecompiledPsiFile();
}
if (myFile != null && !myFile.isValid()) {
myFile = null;
@@ -79,8 +79,8 @@ public class SelectWordHandler extends EditorActionHandler {
}
private static void doAction(@NotNull Editor editor, @NotNull PsiFile file) {
if (file instanceof PsiCompiledElement) {
file = (PsiFile)((PsiCompiledElement)file).getMirror();
if (file instanceof PsiCompiledFile) {
file = ((PsiCompiledFile)file).getDecompiledPsiFile();
if (file == null) return;
}
@@ -26,6 +26,8 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileTypes.ContentBasedFileSubstitutor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
@@ -88,7 +90,9 @@ public class FoldingUpdate {
final boolean applyDefaultState) {
final FoldingMap elementsToFoldMap = new FoldingMap();
getFoldingsFor(file instanceof PsiCompiledElement ? (PsiFile)((PsiCompiledElement)file).getMirror() : file, document, elementsToFoldMap, quick);
if (!isContentSubstituted(file, project)) {
getFoldingsFor(file instanceof PsiCompiledFile ? ((PsiCompiledFile)file).getDecompiledPsiFile() : file, document, elementsToFoldMap, quick);
}
final UpdateFoldRegionsOperation operation = new UpdateFoldRegionsOperation(project, editor, file, elementsToFoldMap, applyDefaultState, false);
Runnable runnable = new Runnable() {
@@ -104,6 +108,16 @@ public class FoldingUpdate {
return CachedValueProvider.Result.create(runnable, ArrayUtil.toObjectArray(dependencies));
}
private static boolean isContentSubstituted(PsiFile file, Project project) {
final ContentBasedFileSubstitutor[] processors = Extensions.getExtensions(ContentBasedFileSubstitutor.EP_NAME);
for (ContentBasedFileSubstitutor processor : processors) {
if (processor.isApplicable(project, file.getVirtualFile())) {
return true;
}
}
return false;
}
private static final Key<Object> LAST_UPDATE_INJECTED_STAMP_KEY = Key.create("LAST_UPDATE_INJECTED_STAMP_KEY");
@Nullable
public static Runnable updateInjectedFoldRegions(@NotNull final Editor editor, @NotNull final PsiFile file, final boolean applyDefaultState) {
@@ -124,7 +124,7 @@ public class PsiElement2UsageTargetAdapter implements PsiElementUsageTarget, Typ
public void highlightUsages(PsiFile file, Editor editor, boolean clearHighlights) {
PsiElement target = getElement();
if (file instanceof PsiCompiledElement) file = (PsiFile)((PsiCompiledElement)file).getMirror();
if (file instanceof PsiCompiledFile) file = ((PsiCompiledFile)file).getDecompiledPsiFile();
final FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(target.getProject())).getFindUsagesManager();
final FindUsagesHandler handler = findUsagesManager.getFindUsagesHandler(target, true);
@@ -48,8 +48,8 @@ abstract class CodeStyleManagerRunnable<T> {
}
public T perform(PsiFile file, int offset, @Nullable TextRange range, T defaultValue) {
if (file instanceof PsiCompiledElement) {
file = (PsiFile)((PsiCompiledElement)file).getMirror();
if (file instanceof PsiCompiledFile) {
file = ((PsiCompiledFile)file).getDecompiledPsiFile();
}
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(myCodeStyleManager.getProject());
@@ -27,7 +27,6 @@ import com.intellij.lang.java.JavaDocumentationProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.compiled.ClsFileImpl;
import com.intellij.psi.impl.source.javadoc.PsiDocParamRef;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
@@ -367,7 +366,7 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
if (navigationElement != null) {
element = navigationElement;
if (element.getContainingFile() instanceof ClsFileImpl) {
if (element.getContainingFile() instanceof PsiCompiledFile) {
navigationElement = element.getNavigationElement();
if (navigationElement != null) {
element = navigationElement;