package com.jetbrains.lang.dart.ide.structure;
import com.intellij.ide.structureView.StructureViewExtension;
import com.intellij.ide.structureView.StructureViewTreeElement;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlTag;
import com.intellij.xml.util.HtmlUtil;
import com.jetbrains.lang.dart.DartLanguage;
import com.jetbrains.lang.dart.psi.DartEmbeddedContent;
import org.jetbrains.annotations.Nullable;
public class DartStructureViewExtension implements StructureViewExtension {
@Override
public Class<? extends PsiElement> getType() {
return XmlTag.class;
}
@Override
@Nullable
public StructureViewTreeElement[] getChildren(final PsiElement parent) {
final DartEmbeddedContent dartContent = getDartEmbeddedContent((XmlTag)parent);
return dartContent != null ? new DartStructureViewElement(dartContent).getChildren() : null;
}
@Override
public Object getCurrentEditorElement(final Editor editor, final PsiElement parent) {
final DartEmbeddedContent dartContent = getDartEmbeddedContent((XmlTag)parent);
return dartContent != null ? new DartStructureViewModel(parent.getContainingFile(), editor).getCurrentEditorElement() : null;
}
private static DartEmbeddedContent getDartEmbeddedContent(final XmlTag xmlTag) {
return HtmlUtil.isScriptTag(xmlTag) && DartLanguage.DART_MIME_TYPE.equals(xmlTag.getAttributeValue("type"))
? PsiTreeUtil.getChildOfType(xmlTag, DartEmbeddedContent.class)
: null;
}
}