summaryrefslogtreecommitdiff
path: root/json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java
diff options
context:
space:
mode:
Diffstat (limited to 'json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java')
-rw-r--r--json/src/com/intellij/json/psi/impl/JsonStringLiteralMixin.java45
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);
+ }
+}