Java 类com.intellij.psi.PsiCompiledFile 实例源码

项目:intellij-ce-playground    文件:TextEditorBackgroundHighlighter.java   
private void renewFile() {
  if (myFile == null || !myFile.isValid()) {
    myFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myDocument);
    myCompiled = myFile instanceof PsiCompiledFile;
    if (myCompiled) {
      myFile = ((PsiCompiledFile)myFile).getDecompiledPsiFile();
    }
    if (myFile != null && !myFile.isValid()) {
      myFile = null;
    }
  }

  if (myFile != null) {
    myFile.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, Boolean.TRUE);
  }
}
项目:tools-idea    文件:TextEditorBackgroundHighlighter.java   
private void renewFile() {
  if (myFile == null || !myFile.isValid()) {
    myFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myDocument);
    myCompiled = myFile instanceof PsiCompiledFile;
    if (myCompiled) {
      myFile = ((PsiCompiledFile)myFile).getDecompiledPsiFile();
    }
    if (myFile != null && !myFile.isValid()) {
      myFile = null;
    }
  }

  if (myFile != null) {
    myFile.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, Boolean.TRUE);
  }
}
项目:consulo    文件:TextEditorBackgroundHighlighter.java   
@Nonnull
List<TextEditorHighlightingPass> getPasses(@Nonnull int[] passesToIgnore) {
  if (myProject.isDisposed()) return Collections.emptyList();

  Document[] uncommitted = PsiDocumentManager.getInstance(myProject).getUncommittedDocuments();
  LOG.assertTrue(uncommitted.length == 0, "Uncommitted documents: " + Arrays.asList(uncommitted));

  renewFile();
  PsiFile file = myFile;
  if (file == null) return Collections.emptyList();

  boolean compiled = file instanceof PsiCompiledFile;
  if (compiled) {
    file = ((PsiCompiledFile)file).getDecompiledPsiFile();
  }

  if (compiled) {
    passesToIgnore = EXCEPT_OVERRIDDEN;
  }
  else if (!DaemonCodeAnalyzer.getInstance(myProject).isHighlightingAvailable(file)) {
    return Collections.emptyList();
  }

  TextEditorHighlightingPassRegistrarEx passRegistrar = TextEditorHighlightingPassRegistrarEx.getInstanceEx(myProject);
  return passRegistrar.instantiatePasses(file, myEditor, passesToIgnore);
}
项目:consulo-java    文件:JavaClsStructureViewBuilderProvider.java   
@Override
@Nullable
public StructureViewBuilder getStructureViewBuilder(@NotNull FileType fileType, @NotNull VirtualFile file, @NotNull Project project)
{
    if(fileType == JavaClassFileType.INSTANCE)
    {
        PsiFile psiFile = PsiManager.getInstance(project).findFile(file);

        if(psiFile instanceof PsiCompiledFile)
        {
            psiFile = ((PsiCompiledFile) psiFile).getDecompiledPsiFile();
        }

        if(psiFile != null)
        {
            PsiStructureViewFactory factory = LanguageStructureViewBuilder.INSTANCE.forLanguage(psiFile.getLanguage());
            if(factory != null)
            {
                return factory.getStructureViewBuilder(psiFile);
            }
        }
    }

    return null;
}
项目:intellij-ce-playground    文件:CompletionUtilCoreImpl.java   
@Nullable
public static <T extends PsiElement> T getOriginalElement(@NotNull T psi, PsiFile containingFile) {
  if (containingFile == null) return psi;

  PsiFile originalFile = containingFile.getOriginalFile();
  if (originalFile != containingFile && !(originalFile instanceof PsiCompiledFile) && psi.getTextRange() != null) {
    TextRange range = psi.getTextRange();
    Integer start = range.getStartOffset();
    Integer end = range.getEndOffset();

    Document document = containingFile.getViewProvider().getDocument();
    if (document != null) {
      Document hostDocument = document instanceof DocumentWindow ? ((DocumentWindow)document).getDelegate() : document;
      OffsetTranslator translator = hostDocument.getUserData(OffsetTranslator.RANGE_TRANSLATION);
      if (translator != null) {
        if (document instanceof DocumentWindow) {
          TextRange translated = ((DocumentWindow)document).injectedToHost(new TextRange(start, end));
          start = translated.getStartOffset();
          end = translated.getEndOffset();
        }

        start = translator.translateOffset(start);
        end = translator.translateOffset(end);
        if (start == null || end == null) {
          return null;
        }

        if (document instanceof DocumentWindow) {
          start = ((DocumentWindow)document).hostToInjected(start);
          end = ((DocumentWindow)document).hostToInjected(end);
        }
      }
    }

    //noinspection unchecked
    return (T)PsiTreeUtil.findElementOfClassAtRange(originalFile, start, end, psi.getClass());
  }

  return psi;
}
项目:intellij-ce-playground    文件:DetectableIndentOptionsProvider.java   
private boolean isEnabled(@NotNull CodeStyleSettings settings, @NotNull PsiFile file) {
  if (file instanceof PsiCompiledFile) return false;
  if (ApplicationManager.getApplication().isUnitTestMode()) {
    return myIsEnabledInTest;
  }
  VirtualFile vFile = file.getVirtualFile();
  if (vFile == null || vFile instanceof LightVirtualFile || myDisabledFiles.contains(vFile)) return false;
  return LanguageFormatting.INSTANCE.forContext(file) != null && settings.AUTODETECT_INDENTS;
}
项目:consulo    文件:DetectableIndentOptionsProvider.java   
private boolean isEnabled(@Nonnull CodeStyleSettings settings, @Nonnull PsiFile file) {
  if (file instanceof PsiCompiledFile) return false;
  if (ApplicationManager.getApplication().isUnitTestMode()) {
    return myIsEnabledInTest;
  }
  VirtualFile vFile = file.getVirtualFile();
  if (vFile == null || vFile instanceof LightVirtualFile || myDisabledFiles.contains(vFile)) return false;
  return LanguageFormatting.INSTANCE.forContext(file) != null && settings.AUTODETECT_INDENTS;
}
项目:MultiHighlight    文件:MultiHighlightHandler.java   
private static void highlightPsiElement(@NotNull Project project,
        @NotNull PsiElement psiElement, @NotNull Editor editor, @NotNull PsiFile file,
        boolean shouldClear) {
    final PsiElement target = SmartPointerManager.getInstance(psiElement.getProject())
            .createSmartPsiElementPointer(psiElement)
            .getElement();

    if (target == null) {
        return;
    }

    if (file instanceof PsiCompiledFile) {
        file = ((PsiCompiledFile) file).getDecompiledPsiFile();
    }

    final Couple<List<TextRange>> usages = getUsages(target, file);

    final List<TextRange> readRanges = usages.first;
    final List<TextRange> writeRanges = usages.second;

    final HighlightManager highlightManager = HighlightManager.getInstance(project);
    if (shouldClear) {
        clearHighlights(editor, highlightManager, readRanges);
        clearHighlights(editor, highlightManager, writeRanges);
        WindowManager.getInstance().getStatusBar(project).setInfo("");
        return;
    }

    // TODO: 10/02/2017 pass target?
    final TextAttributes ta = TextAttributesFactory.getInstance().get();
    final Color scrollMarkColor;
    if (ta.getErrorStripeColor() != null) {
        scrollMarkColor = ta.getErrorStripeColor();
    } else if (ta.getBackgroundColor() != null) {
        scrollMarkColor = ta.getBackgroundColor().darker();
    } else {
        scrollMarkColor = null;
    }

    final String elementName = ElementDescriptionUtil.getElementDescription(target,
            HighlightUsagesDescriptionLocation.INSTANCE);

    // TODO: 06/02/2017 highlight write and read access
    ArrayList<RangeHighlighter> highlighters = new ArrayList<>();
    highlight(highlightManager, readRanges, editor, ta, highlighters, scrollMarkColor);
    highlight(highlightManager, writeRanges, editor, ta, highlighters, scrollMarkColor);

    final Document doc = editor.getDocument();
    for (RangeHighlighter highlighter : highlighters) {
        highlighter.setErrorStripeTooltip(
                HighlightHandlerBase.getLineTextErrorStripeTooltip(doc,
                        highlighter.getStartOffset(), true));
    }

    int refCount = readRanges.size() + writeRanges.size();
    String msg;
    if (refCount > 0) {
        msg = MessageFormat.format("{0} {0, choice, 1#usage|2#usages} of {1} found", refCount,
                elementName);
    } else {
        msg = MessageFormat.format("No usages of {0} found", elementName);
    }

    WindowManager.getInstance().getStatusBar(project).setInfo(msg);
}