package com.jetbrains.lang.dart.ide; import com.intellij.lang.BracePair; import com.intellij.lang.PairedBraceMatcher; import com.intellij.psi.PsiFile; import com.intellij.psi.tree.IElementType; import com.jetbrains.lang.dart.DartTokenTypes; import com.jetbrains.lang.dart.DartTokenTypesSets; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class DartBraceMatcher implements PairedBraceMatcher { private static final BracePair[] BRACE_PAIRS = { new BracePair(DartTokenTypes.LBRACE, DartTokenTypes.RBRACE, true), new BracePair(DartTokenTypes.LBRACKET, DartTokenTypes.RBRACKET, false), new BracePair(DartTokenTypes.LPAREN, DartTokenTypes.RPAREN, false), new BracePair(DartTokenTypes.LONG_TEMPLATE_ENTRY_START, DartTokenTypes.LONG_TEMPLATE_ENTRY_END, false) }; @NotNull @Override public BracePair[] getPairs() { return BRACE_PAIRS; } @Override public boolean isPairedBracesAllowedBeforeType(@NotNull IElementType lbraceType, @Nullable IElementType contextType) { return contextType == null || !DartTokenTypesSets.STRINGS.contains(contextType); } @Override public int getCodeConstructStart(PsiFile file, int openingBraceOffset) { return openingBraceOffset; } }