package com.jetbrains.lang.dart; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; import com.intellij.psi.SyntaxTraverser; import com.intellij.psi.impl.PsiTreeChangeEventImpl; import com.intellij.psi.impl.PsiTreeChangePreprocessorBase; import com.intellij.psi.xml.XmlFile; import com.jetbrains.lang.dart.psi.DartEmbeddedContent; import com.jetbrains.lang.dart.psi.DartFile; import com.jetbrains.lang.dart.psi.DartPsiCompositeElement; import com.jetbrains.lang.dart.psi.IDartBlock; import org.jetbrains.annotations.NotNull; public class DartPsiTreeChangePreprocessor extends PsiTreeChangePreprocessorBase { public DartPsiTreeChangePreprocessor(@NotNull PsiManager psiManager) { super(psiManager); } @Override protected boolean acceptsEvent(@NotNull PsiTreeChangeEventImpl event) { return event.getFile() instanceof DartFile || event.getFile() instanceof XmlFile; } @Override protected boolean isOutOfCodeBlock(@NotNull PsiElement element) { boolean result = false; for (PsiElement p : SyntaxTraverser.psiApi().parents(element)) { if (p instanceof IDartBlock) return false; if (p instanceof DartEmbeddedContent) break; if (p instanceof DartPsiCompositeElement) result = true; } return result; } }