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

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

源代码1 项目: intellij-latte   文件: ErrorFilter.java
public boolean shouldHighlightErrorElement(@NotNull PsiErrorElement element) {
	PsiFile templateLanguageFile = PsiUtilCore.getTemplateLanguageFile(element.getContainingFile());
	if (templateLanguageFile == null) {
		return true;
	}
	Language language = templateLanguageFile.getLanguage();
	if (language != LatteLanguage.INSTANCE) {
		return true;
	}
	if (element.getParent() instanceof XmlElement || element.getParent() instanceof CssElement) {
		return false;
	}
	if (element.getParent().getLanguage() == LatteLanguage.INSTANCE) {
		return true;
	}
	PsiElement nextSibling;
	for (nextSibling = PsiTreeUtil.nextLeaf(element); nextSibling instanceof PsiWhiteSpace; nextSibling = nextSibling.getNextSibling());

	PsiElement psiElement = nextSibling == null ? null : PsiTreeUtil.findCommonParent(nextSibling, element);
	boolean nextIsOuterLanguageElement = nextSibling instanceof OuterLanguageElement || nextSibling instanceof LatteMacroClassic;
	return !nextIsOuterLanguageElement || psiElement == null || psiElement instanceof PsiFile;
}
 
@Override
@Nullable
public PsiElement findElementAt(int offset, @Nonnull Class<? extends Language> lang) {
  final PsiFile mainRoot = getPsi(getBaseLanguage());
  PsiElement ret = null;
  for (final Language language : getLanguages()) {
    if (!ReflectionUtil.isAssignable(lang, language.getClass())) continue;
    if (lang.equals(Language.class) && !getLanguages().contains(language)) continue;

    final PsiFile psiRoot = getPsi(language);
    final PsiElement psiElement = findElementAt(psiRoot, offset);
    if (psiElement == null || psiElement instanceof OuterLanguageElement) continue;
    if (ret == null || psiRoot != mainRoot) {
      ret = psiElement;
    }
  }
  return ret;
}
 
源代码3 项目: consulo   文件: SharedPsiElementImplUtil.java
@Nullable
@RequiredReadAction
public static PsiReference findReferenceAt(PsiElement thisElement, int offset, @Nullable Language lang) {
  if (thisElement == null) return null;
  PsiElement element = lang != null ? thisElement.getContainingFile().getViewProvider().findElementAt(offset, lang) :
                       thisElement.findElementAt(offset);
  if (element == null || element instanceof OuterLanguageElement) return null;
  offset = thisElement.getTextRange().getStartOffset() + offset - element.getTextRange().getStartOffset();

  List<PsiReference> referencesList = new ArrayList<PsiReference>();
  while (element != null) {
    addReferences(offset, element, referencesList);
    if (element instanceof PsiFile) break;
    if (element instanceof HintedReferenceHost &&
        !((HintedReferenceHost)element).shouldAskParentForReferences(new PsiReferenceService.Hints(null, offset))) {
      break;
    }
    offset = element.getStartOffsetInParent() + offset;
    element = element.getParent();
  }

  if (referencesList.isEmpty()) return null;
  if (referencesList.size() == 1) return referencesList.get(0);
  return new PsiMultiReference(referencesList.toArray(new PsiReference[referencesList.size()]),
                               referencesList.get(referencesList.size() - 1).getElement());
}
 
源代码4 项目: consulo   文件: CommentByBlockCommentHandler.java
private boolean testSelectionForNonComments() {
  if (!myCaret.hasSelection()) {
    return true;
  }
  TextRange range = new TextRange(myCaret.getSelectionStart(), myCaret.getSelectionEnd() - 1);
  for (PsiElement element = myFile.findElementAt(range.getStartOffset()); element != null && range.intersects(element.getTextRange()); element = element.getNextSibling()) {
    if (element instanceof OuterLanguageElement) {
      if (!isInjectedWhiteSpace(range, (OuterLanguageElement)element)) {
        return false;
      }
    }
    else {
      if (!isWhiteSpaceOrComment(element, range)) {
        return false;
      }
    }
  }
  return true;
}
 
源代码5 项目: consulo   文件: PsiTreeUtil.java
public static List<PsiElement> getInjectedElements(@Nonnull OuterLanguageElement outerLanguageElement) {
  PsiElement psi = outerLanguageElement.getContainingFile().getViewProvider().getPsi(outerLanguageElement.getLanguage());
  TextRange injectionRange = outerLanguageElement.getTextRange();
  List<PsiElement> res = ContainerUtil.newArrayList();

  assert psi != null : outerLanguageElement;
  for (PsiElement element = psi.findElementAt(injectionRange.getStartOffset()); element != null && injectionRange.intersectsStrict(element.getTextRange()); element = element.getNextSibling()) {
    res.add(element);
  }

  return res;
}
 
源代码6 项目: consulo   文件: PsiErrorElementImpl.java
@Override
@Nonnull
public Language getLanguage() {
  PsiElement master = this;
  while (true) {
    master = master.getNextSibling();
    if (master == null || master instanceof OuterLanguageElement) return getParent().getLanguage();
    if (master instanceof PsiWhiteSpace || master instanceof PsiErrorElement) continue;
    return master.getLanguage();
  }
}
 
源代码7 项目: consulo   文件: TreeUtil.java
public static boolean containsOuterLanguageElements(@Nonnull ASTNode node) {
  AtomicBoolean result = new AtomicBoolean(false);
  ((TreeElement)node).acceptTree(new RecursiveTreeElementWalkingVisitor() {
    @Override
    protected void visitNode(TreeElement element) {
      if (element instanceof OuterLanguageElement) {
        result.set(true);
        stopWalking();
        return;
      }
      super.visitNode(element);
    }
  });
  return result.get();
}
 
源代码8 项目: consulo   文件: CodeEditUtil.java
public static void checkForOuters(ASTNode element) {
  if (element instanceof OuterLanguageElement && element.getCopyableUserData(OUTER_OK) == null) {
    throw new IllegalArgumentException("Outer element " + element + " is not allowed here");
  }

  ASTNode child = element.getFirstChildNode();
  while (child != null) {
    checkForOuters(child);
    child = child.getTreeNext();
  }
}
 
源代码9 项目: consulo   文件: CommentByBlockCommentHandler.java
private boolean isInjectedWhiteSpace(@Nonnull TextRange range, @Nonnull OuterLanguageElement element) {
  PsiElement psi = element.getContainingFile().getViewProvider().getPsi(element.getLanguage());
  if (psi == null) {
    return false;
  }
  List<PsiElement> injectedElements = PsiTreeUtil.getInjectedElements(element);
  for (PsiElement el : injectedElements) {
    if (!isWhiteSpaceOrComment(el, range)) {
      return false;
    }
  }
  return true;
}
 
源代码10 项目: consulo   文件: PsiElementVisitor.java
public void visitOuterLanguageElement(OuterLanguageElement element) {
  visitElement(element);
}
 
源代码11 项目: consulo   文件: GenericDynamicContextProvider.java
protected boolean isDynamic(PsiElement child) {
  return child instanceof OuterLanguageElement;
}
 
源代码12 项目: consulo   文件: DataLanguageBlockWrapper.java
@Nullable
public static DataLanguageBlockWrapper create(@Nonnull final Block original, @Nullable final Indent indent) {
  final boolean doesntNeedWrapper = original instanceof ASTBlock && ((ASTBlock)original).getNode() instanceof OuterLanguageElement;
  return doesntNeedWrapper ? null : new DataLanguageBlockWrapper(original);
}
 
 类所在包
 同包方法