下面列出了com.intellij.psi.xml.XmlTag#getParentTag ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static boolean isInTopLevelTag(XmlTag tag) {
boolean inTopLevel = false;
XmlTag current = tag;
while (!inTopLevel && current != null) {
inTopLevel = MuleConfigUtils.isTopLevelTag(current);
if (!inTopLevel)
current = current.getParentTag();
}
return inTopLevel;
}
public static String getMulePath(XmlTag tag) {
final LinkedList<XmlTag> elements = new LinkedList<>();
while (!isMuleTag(tag)) {
elements.push(tag);
tag = tag.getParentTag();
}
String path = "";
for (int i = 0; i < elements.size(); i++) {
final XmlTag element = elements.get(i);
switch (i) {
case 0: {
final XmlAttribute name = element.getAttribute(MuleConfigConstants.NAME_ATTRIBUTE);
if (name != null) {
path = "/" + MulePathUtils.escape(name.getValue()) + getGlobalElementCategory(element);
}
break;
}
default: {
final XmlTag parentTag = element.getParentTag();
int index = 0;
for (XmlTag xmlTag : parentTag.getSubTags()) {
if (xmlTag == element) {
break;
}
final MuleElementType muleElementType = getMuleElementTypeFromXmlElement(xmlTag);
if (muleElementType == MuleElementType.MESSAGE_PROCESSOR) {
index = index + 1;
}
}
path = path + "/" + index;
}
}
}
System.out.println("path = " + path);
return path;
}
private boolean isCamelRouteStartTag(XmlTag tag) {
String name = tag.getLocalName();
XmlTag parentTag = tag.getParentTag();
if (parentTag != null) {
//TODO: unsure about this, <rest> cannot be a child of <routes> according to blueprint xsd, see issue #475
return "routes".equals(parentTag.getLocalName()) && "rest".equals(name)
|| "route".equals(parentTag.getLocalName()) && "from".equals(name);
}
return false;
}
public PsiClass getPropertyBeanClass(XmlTag propertyTag) {
XmlTag beanTag = propertyTag.getParentTag();
if (beanTag != null && isBeanDeclaration(beanTag)) {
IdeaUtils ideaUtils = IdeaUtils.getService();
JavaClassUtils javaClassUtils = JavaClassUtils.getService();
return ideaUtils.findAttributeValue(beanTag, "class")
.map(javaClassUtils::findClassReference)
.map(javaClassUtils::resolveClassReference)
.orElse(null);
}
return null;
}
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
if (ServiceManager.getService(project, CamelService.class).isCamelPresent()) {
// special for xml
XmlTag xml = PsiTreeUtil.getParentOfType(element, XmlTag.class);
if (xml != null) {
// special check for poll enrich where we add the endpoint on a child node (camel expression)
XmlTag parent = xml.getParentTag();
if (parent != null && parent.getLocalName().equals("pollEnrich")) {
return true;
}
}
String text = null;
// special for java token
if (element instanceof PsiJavaToken) {
// if its a string literal
PsiJavaToken token = (PsiJavaToken) element;
if (token.getTokenType() == JavaTokenType.STRING_LITERAL) {
text = getIdeaUtils().getInnerText(token.getText());
}
} else {
// should be a literal element and therefore dont fallback to generic
text = getIdeaUtils().extractTextFromElement(element, false, false, true);
}
return text != null && text.trim().isEmpty();
}
return false;
}
@Override
public XmlElementDescriptor getElementDescriptor(XmlTag childTag, XmlTag contextTag) {
XmlTag parent = contextTag.getParentTag();
if (parent == null) return null;
final XmlNSDescriptor descriptor = parent.getNSDescriptor(childTag.getNamespace(), true);
return descriptor == null ? null : descriptor.getElementDescriptor(childTag);
}
@Override
public XmlElementDescriptor getElementDescriptor(XmlTag childTag, XmlTag contextTag) {
XmlTag parent = contextTag.getParentTag();
if (parent == null) return null;
final XmlNSDescriptor descriptor = parent.getNSDescriptor(childTag.getNamespace(), true);
return descriptor == null ? null : descriptor.getElementDescriptor(childTag);
}
@Override
public XmlElementDescriptor getElementDescriptor(XmlTag childTag, XmlTag contextTag) {
XmlTag parent = contextTag.getParentTag();
if (parent == null) return null;
final XmlNSDescriptor descriptor = parent.getNSDescriptor(childTag.getNamespace(), true);
return descriptor == null ? null : descriptor.getElementDescriptor(childTag);
}
@Override
public XmlElementDescriptor getElementDescriptor(XmlTag childTag, XmlTag contextTag) {
XmlTag parent = contextTag.getParentTag();
if (parent == null) return null;
final XmlNSDescriptor descriptor = parent.getNSDescriptor(childTag.getNamespace(), true);
return descriptor == null ? null : descriptor.getElementDescriptor(childTag);
}
@Override
public XmlElementDescriptor getElementDescriptor(XmlTag childTag, XmlTag contextTag) {
XmlTag parent = contextTag.getParentTag();
if (parent == null) return null;
final XmlNSDescriptor descriptor = parent.getNSDescriptor(childTag.getNamespace(), true);
return descriptor == null ? null : descriptor.getElementDescriptor(childTag);
}
@Override
public XmlElementDescriptor getElementDescriptor(XmlTag childTag, XmlTag contextTag) {
XmlTag parent = contextTag.getParentTag();
if (parent == null) return null;
final XmlNSDescriptor descriptor = parent.getNSDescriptor(childTag.getNamespace(), true);
return descriptor == null ? null : descriptor.getElementDescriptor(childTag);
}
@Override
public XmlElementDescriptor getElementDescriptor(XmlTag childTag, XmlTag contextTag) {
XmlTag parent = contextTag.getParentTag();
if (parent == null) return null;
final XmlNSDescriptor descriptor = parent.getNSDescriptor(childTag.getNamespace(), true);
return descriptor == null ? null : descriptor.getElementDescriptor(childTag);
}
/**
* Is the given element from a XML tag with any of the given tag names
*
* @param xml the xml tag
* @param parentTag a special parent tag name to match first
* @return <tt>true</tt> if matched, <tt>false</tt> otherwise
*/
public boolean hasParentXmlTag(@NotNull XmlTag xml, @NotNull String parentTag) {
XmlTag parent = xml.getParentTag();
return parent != null && parent.getLocalName().equals(parentTag);
}