PY-15074
authorIlya.Kazakevich <Ilya.Kazakevich@jetbrains.com>
Fri, 27 Feb 2015 14:25:10 +0000 (17:25 +0300)
committerIlya.Kazakevich <Ilya.Kazakevich@jetbrains.com>
Fri, 27 Feb 2015 14:25:10 +0000 (17:25 +0300)
Temporary solution: JsonScriptContentProvider added for better JSON to HTML injection

json/json.iml
json/src/com/intellij/json/JsonLanguage.java
json/src/com/intellij/json/JsonScriptContentProvider.java [new file with mode: 0644]
platform/platform-resources/src/META-INF/JsonPlugin.xml

index 558f2e07197df5405c62ba953dc160eeb2179bb9..dac5731b3411df4b55fc285ac916dc91dc80f45f 100644 (file)
@@ -15,5 +15,7 @@
     <orderEntry type="module" module-name="xml-openapi" />
     <orderEntry type="module" module-name="spellchecker" />
     <orderEntry type="library" name="Guava" level="project" />
+    <orderEntry type="module" module-name="xml-psi-impl" />
+    <orderEntry type="module" module-name="javascript-psi-impl" />
   </component>
 </module>
\ No newline at end of file
index 09e2807c1cfd460982a07a0d067f9213f71cbfa7..411794c59f0b59a2eb548833eba1f5df28a20bf9 100644 (file)
@@ -1,8 +1,9 @@
 package com.intellij.json;
 
+import com.intellij.lang.DependentLanguage;
 import com.intellij.lang.Language;
 
-public class JsonLanguage extends Language {
+public class JsonLanguage extends Language implements DependentLanguage /*To prevent HtmlScriptLanguageInjector */  {
   public static final JsonLanguage INSTANCE = new JsonLanguage();
 
   private JsonLanguage() {
diff --git a/json/src/com/intellij/json/JsonScriptContentProvider.java b/json/src/com/intellij/json/JsonScriptContentProvider.java
new file mode 100644 (file)
index 0000000..6c62132
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2000-2015 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.json;/*
+ * Copyright 2000-2015 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import com.intellij.embedding.EmbeddingElementType;
+import com.intellij.javascript.JSScriptContentProvider;
+import com.intellij.lang.HtmlScriptContentProvider;
+import com.intellij.lexer.Lexer;
+import com.intellij.psi.tree.IElementType;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Json as  embedded script
+ *
+ * @author Ilya.Kazakevich
+ */
+public final class JsonScriptContentProvider implements HtmlScriptContentProvider {
+
+  private static final JsonEmbedded JSON_EMBEDDED = new JsonEmbedded();
+
+  @Override
+  public IElementType getScriptElementType() {
+    return JSON_EMBEDDED;
+  }
+
+  @Nullable
+  @Override
+  public Lexer getHighlightingLexer() {
+    // TODO: temporary solution:
+    /**
+     * We do not have highlighting JSON lexer for embedded environment for now, so we reuse JScript
+     */
+    return new JSScriptContentProvider().getHighlightingLexer();
+  }
+
+  private static final class JsonEmbedded extends IElementType implements EmbeddingElementType {
+    private JsonEmbedded() {
+      super("JSON_EMBEDDED", JsonLanguage.INSTANCE);
+    }
+  }
+}
index 7b8edfc66c4697cb26d3baaf0e91ead85a98ba09..16773f42fa55dd126ece80a20638153d09f55b33 100644 (file)
@@ -15,6 +15,7 @@
   </actions>
 
   <extensions defaultExtensionNs="com.intellij">
+    <html.scriptContentProvider language="JSON" implementationClass="com.intellij.json.JsonScriptContentProvider"/>
     <fileTypeFactory implementation="com.intellij.json.JsonFileTypeFactory"/>
     <lang.parserDefinition language="JSON" implementationClass="com.intellij.json.JsonParserDefinition"/>
     <lang.syntaxHighlighterFactory key="JSON" implementationClass="com.intellij.json.highlighting.JsonSyntaxHighlighterFactory"/>