类com.intellij.psi.templateLanguages.TemplateLanguageFileViewProvider源码实例Demo

下面列出了怎么用com.intellij.psi.templateLanguages.TemplateLanguageFileViewProvider的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: consulo   文件: CommentByBlockCommentHandler.java
@Nullable
public static Commenter getCommenter(final PsiFile file, final Editor editor, final Language lineStartLanguage, final Language lineEndLanguage) {

  final FileViewProvider viewProvider = file.getViewProvider();

  for (MultipleLangCommentProvider provider : MultipleLangCommentProvider.EP_NAME.getExtensions()) {
    if (provider.canProcess(file, viewProvider)) {
      return provider.getLineCommenter(file, editor, lineStartLanguage, lineEndLanguage);
    }
  }

  final Language fileLanguage = file.getLanguage();
  Language lang = lineStartLanguage == null || LanguageCommenters.INSTANCE.forLanguage(lineStartLanguage) == null || fileLanguage.getBaseLanguage() == lineStartLanguage
                  // file language is a more specific dialect of the line language
                  ? fileLanguage
                  : lineStartLanguage;

  if (viewProvider instanceof TemplateLanguageFileViewProvider && lang == ((TemplateLanguageFileViewProvider)viewProvider).getTemplateDataLanguage()) {
    lang = viewProvider.getBaseLanguage();
  }

  return LanguageCommenters.INSTANCE.forLanguage(lang);
}
 
源代码2 项目: consulo   文件: StructureViewElementWrapper.java
@Nullable
private Navigatable getNavigatableInTemplateLanguageFile() {
  PsiElement element = (PsiElement)myTreeElement.getValue();
  if (element == null) return null;

  int offset = element.getTextRange().getStartOffset();
  final Language dataLanguage = ((TemplateLanguageFileViewProvider)myMainFile.getViewProvider()).getTemplateDataLanguage();
  final PsiFile dataFile = myMainFile.getViewProvider().getPsi(dataLanguage);
  if (dataFile == null) return null;

  PsiElement tlElement = dataFile.findElementAt(offset);
  while(true) {
    if (tlElement == null || tlElement.getTextRange().getStartOffset() != offset) break;
    if (tlElement instanceof Navigatable) {
      return (Navigatable)tlElement;
    }
    tlElement = tlElement.getParent();
  }
  return null;
}
 
protected Block getRootBlock(PsiElement element, FileViewProvider viewProvider, CodeStyleSettings settings) {
  ASTNode node = element.getNode();
  if (node == null) {
    return createDummyBlock(node);
  }
  if (viewProvider instanceof TemplateLanguageFileViewProvider) {
    final Language dataLanguage = ((TemplateLanguageFileViewProvider)viewProvider).getTemplateDataLanguage();
    final FormattingModelBuilder builder = LanguageFormatting.INSTANCE.forLanguage(dataLanguage);
    if (builder instanceof DelegatingFormattingModelBuilder && ((DelegatingFormattingModelBuilder)builder).dontFormatMyModel()) {
      return createDummyBlock(node);
    }
    if (builder != null) {
      final FormattingModel model = builder.createModel(viewProvider.getPsi(dataLanguage), settings);
      List<DataLanguageBlockWrapper> childWrappers = buildChildWrappers(model.getRootBlock());
      if (childWrappers.size() == 1) {
        childWrappers = buildChildWrappers(childWrappers.get(0).getOriginal());
      }
      return createTemplateLanguageBlock(node, Wrap.createWrap(WrapType.NONE, false), null,
                                         filterBlocksByRange(childWrappers, node.getTextRange()), settings);
    }
  }
  return createTemplateLanguageBlock(node,  Wrap.createWrap(WrapType.NONE, false), null, Collections.<DataLanguageBlockWrapper>emptyList(), settings);
}
 
@Nullable
@Override
public CommonCodeStyleSettings.IndentOptions getIndentOptions(@NotNull CodeStyleSettings settings, @NotNull PsiFile file) {
    if (file instanceof FluidFile) {
        if (file.getViewProvider() instanceof TemplateLanguageFileViewProvider) {
            Language language = ((TemplateLanguageFileViewProvider) file.getViewProvider()).getTemplateDataLanguage();

            return settings.getCommonSettings(language).getIndentOptions();
        }
    }

    return null;
}
 
源代码5 项目: consulo   文件: InjectedFileViewProvider.java
static InjectedFileViewProvider create(@Nonnull PsiManagerEx manager, @Nonnull VirtualFileWindowImpl file, @Nonnull DocumentWindowImpl window, @Nonnull Language language) {
  AbstractFileViewProvider original = (AbstractFileViewProvider)manager.getFileManager().createFileViewProvider(file, false);
  return original instanceof TemplateLanguageFileViewProvider
         ? new MultipleRootsInjectedFileViewProvider.Template(manager, file, window, language, original)
         : original instanceof MultiplePsiFilesPerDocumentFileViewProvider
           ? new MultipleRootsInjectedFileViewProvider(manager, file, window, language, original)
           : new SingleRootInjectedFileViewProvider(manager, file, window, language);
}
 
@Nonnull
private static JBIterable<Language> getLanguages(@Nullable PsiFile psiFile) {
  if (psiFile == null) return JBIterable.empty();
  FileViewProvider provider = psiFile.getViewProvider();

  Language baseLanguage = provider.getBaseLanguage();
  Language dataLanguage = provider instanceof TemplateLanguageFileViewProvider ? ((TemplateLanguageFileViewProvider)provider).getTemplateDataLanguage() : null;
  return JBIterable.of(baseLanguage).append(dataLanguage).append(JBIterable.from(provider.getLanguages()).filter(o -> o != baseLanguage && o != dataLanguage));
}
 
源代码7 项目: consulo   文件: SelectInContextImpl.java
@Override
public Object getSelectorInFile() {
  if (myPsiFile.getViewProvider() instanceof TemplateLanguageFileViewProvider) {
    return super.getSelectorInFile();
  }
  final int offset = myEditor.getEditor().getCaretModel().getOffset();

  if (offset >= 0 && offset < myPsiFile.getTextLength()) {
    return myPsiFile.findElementAt(offset);
  }
  return super.getSelectorInFile();
}
 
@Nonnull
@Override
public Language getTemplateDataLanguage() {
  return ((TemplateLanguageFileViewProvider)myOriginalProvider).getTemplateDataLanguage();
}
 
@Override
public IElementType getContentElementType(@Nonnull Language language) {
  return ((TemplateLanguageFileViewProvider)myOriginalProvider).getContentElementType(language);
}
 
 类所在包
 同包方法