diff options
Diffstat (limited to 'json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java')
-rw-r--r-- | json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java b/json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java new file mode 100644 index 00000000..99baebef --- /dev/null +++ b/json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java @@ -0,0 +1,45 @@ +package com.intellij.json.psi.impl; + +import com.intellij.lang.ASTNode; +import com.intellij.psi.LiteralTextEscaper; +import com.intellij.psi.PsiLanguageInjectionHost; +import com.intellij.psi.impl.source.tree.LeafElement; +import org.jetbrains.annotations.NotNull; + +/** + * @author Konstantin.Ulitin + */ +public abstract class JsonStringLiteralMixin extends JsonLiteralImpl implements PsiLanguageInjectionHost { + protected JsonStringLiteralMixin(ASTNode node) { + super(node); + } + + @Override + public boolean isValidHost() { + return true; + } + + @Override + public PsiLanguageInjectionHost updateText(@NotNull String text) { + ASTNode valueNode = getNode().getFirstChildNode(); + assert valueNode instanceof LeafElement; + ((LeafElement)valueNode).replaceWithText(text); + return this; + } + + @NotNull + @Override + public LiteralTextEscaper<? extends PsiLanguageInjectionHost> createLiteralTextEscaper() { + return new JSStringLiteralEscaper<PsiLanguageInjectionHost>(this) { + @Override + protected boolean isRegExpLiteral() { + return false; + } + }; + } + + @Override + public void subtreeChanged() { + putUserData(JsonPsiImplUtils.STRING_FRAGMENTS, null); + } +} |