diff --git a/.idea/inspectionProfiles/idea_default.xml b/.idea/inspectionProfiles/idea_default.xml
index 60950c712066..46a1e1effbc3 100644
--- a/.idea/inspectionProfiles/idea_default.xml
+++ b/.idea/inspectionProfiles/idea_default.xml
@@ -65,13 +65,17 @@
-
+
+
+
-
+
+
+
@@ -109,6 +113,7 @@
+
@@ -138,6 +143,7 @@
+
@@ -167,6 +173,7 @@
+
+
@@ -263,12 +271,7 @@
-
-
-
-
-
-
+
diff --git a/.idea/inspectionProfiles/idea_default_no_spellchecker.xml b/.idea/inspectionProfiles/idea_default_no_spellchecker.xml
index d815dc710bdf..659d9c39b097 100644
--- a/.idea/inspectionProfiles/idea_default_no_spellchecker.xml
+++ b/.idea/inspectionProfiles/idea_default_no_spellchecker.xml
@@ -65,13 +65,17 @@
-
+
+
+
-
+
+
+
@@ -109,6 +113,7 @@
+
@@ -138,6 +143,7 @@
+
@@ -167,6 +173,7 @@
+
+
@@ -263,12 +271,7 @@
-
-
-
-
-
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 68c989a28ef6..e9537356e97a 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -3,7 +3,10 @@
-
+
+
+
+
@@ -70,11 +73,11 @@
-
+
diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant
index de219770142e..403876d24d65 100644
--- a/build/scripts/layouts.gant
+++ b/build/scripts/layouts.gant
@@ -156,7 +156,17 @@ def layoutFull(String home, String targetDirectory) {
layoutPlugin("ant", "ant", "antIntegration")
layoutPlugin("InspectionGadgets", "InspectionGadgetsPlugin")
- layoutPlugin("IntelliLang", "IntelliLangJava")
+ dir("IntelliLang") {
+ dir("lib") {
+ jar("IntelliLang.jar") {
+ module("IntelliLangJava")
+ module("IntelliLang-java")
+ module("IntelliLang-xml")
+ module("IntelliLang-javaee")
+ }
+ }
+ }
+
layoutPlugin("IntentionPowerPack", "IntentionPowerPackPlugin")
layoutPlugin("ToString", "generate-tostring", "toString")
diff --git a/java/java-impl/src/com/intellij/lang/java/JavaLiteralEscaper.java b/java/java-impl/src/com/intellij/lang/java/JavaLiteralEscaper.java
index 8134060faac1..2ada4772a8e0 100644
--- a/java/java-impl/src/com/intellij/lang/java/JavaLiteralEscaper.java
+++ b/java/java-impl/src/com/intellij/lang/java/JavaLiteralEscaper.java
@@ -31,4 +31,12 @@ public class JavaLiteralEscaper implements LiteralEscaper {
}
return originalText;
}
+
+ public String escapeText(String originalText) {
+ return StringUtil.escapeStringCharacters(originalText);
+ }
+
+ public String unescapeText(String originalText) {
+ return StringUtil.unescapeStringCharacters(originalText);
+ }
}
diff --git a/platform/lang-api/src/com/intellij/lang/LanguageLiteralEscapers.java b/platform/lang-api/src/com/intellij/lang/LanguageLiteralEscapers.java
index e6b4b937582f..7941a013ae75 100644
--- a/platform/lang-api/src/com/intellij/lang/LanguageLiteralEscapers.java
+++ b/platform/lang-api/src/com/intellij/lang/LanguageLiteralEscapers.java
@@ -29,6 +29,14 @@ public class LanguageLiteralEscapers extends LanguageExtension {
public String getEscapedText(final PsiElement context, final String originalText) {
return originalText;
}
+
+ public String escapeText(String originalText) {
+ return originalText;
+ }
+
+ public String unescapeText(String originalText) {
+ return originalText;
+ }
});
}
}
diff --git a/platform/lang-api/src/com/intellij/lang/LiteralEscaper.java b/platform/lang-api/src/com/intellij/lang/LiteralEscaper.java
index 466c7cd84f78..2108f2cd136a 100644
--- a/platform/lang-api/src/com/intellij/lang/LiteralEscaper.java
+++ b/platform/lang-api/src/com/intellij/lang/LiteralEscaper.java
@@ -23,4 +23,6 @@ import com.intellij.psi.PsiElement;
*/
public interface LiteralEscaper {
String getEscapedText(PsiElement context, String originalText);
+ String escapeText(String originalText);
+ String unescapeText(String originalText);
}
diff --git a/platform/platform-resources/src/META-INF/XmlPlugin.xml b/platform/platform-resources/src/META-INF/XmlPlugin.xml
index 19e768f3bdfd..3d7f6bf339da 100644
--- a/platform/platform-resources/src/META-INF/XmlPlugin.xml
+++ b/platform/platform-resources/src/META-INF/XmlPlugin.xml
@@ -44,6 +44,7 @@
+
diff --git a/plugins/IntelliLang/IntelliLang-java.iml b/plugins/IntelliLang/IntelliLang-java.iml
new file mode 100644
index 000000000000..a9a38446a280
--- /dev/null
+++ b/plugins/IntelliLang/IntelliLang-java.iml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/IntelliLang/IntelliLang-javaee.iml b/plugins/IntelliLang/IntelliLang-javaee.iml
new file mode 100644
index 000000000000..bfbccd5a1eac
--- /dev/null
+++ b/plugins/IntelliLang/IntelliLang-javaee.iml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/IntelliLang/IntelliLang-xml.iml b/plugins/IntelliLang/IntelliLang-xml.iml
new file mode 100644
index 000000000000..d57e3f2a4b2d
--- /dev/null
+++ b/plugins/IntelliLang/IntelliLang-xml.iml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/IntelliLang/IntelliLangJava.iml b/plugins/IntelliLang/IntelliLangJava.iml
index e6aaec1b47c5..c286c6a5c90f 100644
--- a/plugins/IntelliLang/IntelliLangJava.iml
+++ b/plugins/IntelliLang/IntelliLangJava.iml
@@ -7,18 +7,10 @@
-
-
-
-
-
-
-
-
diff --git a/plugins/IntelliLang/src/inspectionDescriptions/InjectionNotApplicable.html b/plugins/IntelliLang/java-support/inspectionDescriptions/InjectionNotApplicable.html
similarity index 100%
rename from plugins/IntelliLang/src/inspectionDescriptions/InjectionNotApplicable.html
rename to plugins/IntelliLang/java-support/inspectionDescriptions/InjectionNotApplicable.html
diff --git a/plugins/IntelliLang/src/inspectionDescriptions/LanguageMismatch.html b/plugins/IntelliLang/java-support/inspectionDescriptions/LanguageMismatch.html
similarity index 100%
rename from plugins/IntelliLang/src/inspectionDescriptions/LanguageMismatch.html
rename to plugins/IntelliLang/java-support/inspectionDescriptions/LanguageMismatch.html
diff --git a/plugins/IntelliLang/src/inspectionDescriptions/PatternNotApplicable.html b/plugins/IntelliLang/java-support/inspectionDescriptions/PatternNotApplicable.html
similarity index 100%
rename from plugins/IntelliLang/src/inspectionDescriptions/PatternNotApplicable.html
rename to plugins/IntelliLang/java-support/inspectionDescriptions/PatternNotApplicable.html
diff --git a/plugins/IntelliLang/src/inspectionDescriptions/PatternOverriddenByNonAnnotatedMethod.html b/plugins/IntelliLang/java-support/inspectionDescriptions/PatternOverriddenByNonAnnotatedMethod.html
similarity index 100%
rename from plugins/IntelliLang/src/inspectionDescriptions/PatternOverriddenByNonAnnotatedMethod.html
rename to plugins/IntelliLang/java-support/inspectionDescriptions/PatternOverriddenByNonAnnotatedMethod.html
diff --git a/plugins/IntelliLang/src/inspectionDescriptions/PatternValidation.html b/plugins/IntelliLang/java-support/inspectionDescriptions/PatternValidation.html
similarity index 100%
rename from plugins/IntelliLang/src/inspectionDescriptions/PatternValidation.html
rename to plugins/IntelliLang/java-support/inspectionDescriptions/PatternValidation.html
diff --git a/plugins/IntelliLang/src/inspectionDescriptions/UnknownLanguage.html b/plugins/IntelliLang/java-support/inspectionDescriptions/UnknownLanguage.html
similarity index 100%
rename from plugins/IntelliLang/src/inspectionDescriptions/UnknownLanguage.html
rename to plugins/IntelliLang/java-support/inspectionDescriptions/UnknownLanguage.html
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/AdvancedSettingsUI.form b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/AdvancedSettingsUI.form
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/AdvancedSettingsUI.form
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/AdvancedSettingsUI.form
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/AdvancedSettingsUI.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/AdvancedSettingsUI.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/AdvancedSettingsUI.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/AdvancedSettingsUI.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/MethodParameterInjection.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/MethodParameterInjection.java
similarity index 83%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/MethodParameterInjection.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/MethodParameterInjection.java
index bb60a711e4db..7be07abb49a8 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/MethodParameterInjection.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/MethodParameterInjection.java
@@ -117,7 +117,7 @@ public class MethodParameterInjection extends BaseInjection {
@Override
protected List generatePlaces() {
- return PatternBasedInjectionHelper.getPatternString(this);
+ return getPatternString(this);
}
@SuppressWarnings({"RedundantIfStatement"})
@@ -230,6 +230,45 @@ public class MethodParameterInjection extends BaseInjection {
return null;
}
+ public static String getParameterTypesString(final String signature) {
+ @NonNls final StringBuilder sb = new StringBuilder();
+ final StringTokenizer st = new StringTokenizer(signature, "(,)");
+ //noinspection ForLoopThatDoesntUseLoopVariable
+ for (int i = 0; st.hasMoreTokens(); i++) {
+ final String token = st.nextToken().trim();
+ if (i > 1) sb.append(", ");
+ final int idx;
+ if (i == 0) {
+ // nothing
+ }
+ else {
+ sb.append('\"');
+ if ((idx = token.indexOf(' ')) > -1) {
+ sb.append(token.substring(0, idx));
+ }
+ else {
+ sb.append(token);
+ }
+ sb.append('\"');
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getPatternStringForJavaPlace(final String methodName, final String parametersStrings, final int parameterIndex, final String className) {
+ final StringBuilder sb = new StringBuilder();
+ if (parameterIndex >= 0) {
+ sb.append("psiParameter().ofMethod(").append(parameterIndex).append(", ");
+ }
+ sb.append("psiMethod().withName(\"").append(methodName)
+ .append("\").withParameters(").append(parametersStrings)
+ .append(").definedInClass(\"").append(className).append("\")");
+ if (parameterIndex >= 0) {
+ sb.append(")");
+ }
+ return sb.toString();
+ }
+
public static class MethodInfo {
@NotNull
final String methodSignature;
@@ -343,5 +382,24 @@ public class MethodParameterInjection extends BaseInjection {
}
}
+ public static List getPatternString(final MethodParameterInjection injection) {
+ final ArrayList list = new ArrayList();
+ final String className = injection.getClassName();
+ for (MethodParameterInjection.MethodInfo info : injection.getMethodInfos()) {
+ final boolean[] paramFlags = info.getParamFlags();
+ final int paramFlagsLength = paramFlags.length;
+ final String methodName = info.getMethodName();
+ final String typesString = getParameterTypesString(info.getMethodSignature());
+ if (info.isReturnFlag()) {
+ list.add(getPatternStringForJavaPlace(methodName, typesString, -1, className));
+ }
+ for (int i = 0; i < paramFlagsLength; i++) {
+ if (paramFlags[i]) {
+ list.add(getPatternStringForJavaPlace(methodName, typesString, i, className));
+ }
+ }
+ }
+ return list;
+ }
}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.form b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.form
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.form
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.form
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/ui/MethodParameterPanel.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/configurables/MethodParameterInjectionConfigurable.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/ui/configurables/MethodParameterInjectionConfigurable.java
similarity index 99%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/configurables/MethodParameterInjectionConfigurable.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/ui/configurables/MethodParameterInjectionConfigurable.java
index b2490b47b64e..229126aba4ab 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/configurables/MethodParameterInjectionConfigurable.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/config/ui/configurables/MethodParameterInjectionConfigurable.java
@@ -38,4 +38,4 @@ public class MethodParameterInjectionConfigurable extends InjectionConfigurable<
public Icon getIcon() {
return Icons.METHOD_ICON;
}
-}
\ No newline at end of file
+}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
similarity index 96%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
index 2c42f8e638a6..1000db367163 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java
@@ -45,7 +45,6 @@ import com.intellij.ui.SimpleColoredText;
import com.intellij.ui.SimpleTextAttributes;
import org.intellij.plugins.intelliLang.AdvancedSettingsUI;
import org.intellij.plugins.intelliLang.Configuration;
-import org.intellij.plugins.intelliLang.PatternBasedInjectionHelper;
import org.intellij.plugins.intelliLang.inject.AbstractLanguageInjectionSupport;
import org.intellij.plugins.intelliLang.inject.EditInjectionSettingsAction;
import org.intellij.plugins.intelliLang.inject.InjectLanguageAction;
@@ -66,6 +65,8 @@ import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
+import static org.intellij.plugins.intelliLang.inject.config.MethodParameterInjection.*;
+
/**
* @author Gregory.Shrago
*/
@@ -245,7 +246,7 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
final MethodParameterInjection injection = new MethodParameterInjection();
injection.setInjectedLanguageId(languageId);
injection.setClassName(className);
- final MethodParameterInjection.MethodInfo info = MethodParameterInjection.createMethodInfo(psiMethod);
+ final MethodParameterInjection.MethodInfo info = createMethodInfo(psiMethod);
if (parameterIndex < 0) {
info.setReturnFlag(true);
}
@@ -389,8 +390,8 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
final PsiModifierList modifiers = method.getModifierList();
if (modifiers.hasModifierProperty(PsiModifier.PRIVATE) || modifiers.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)) continue;
boolean add = false;
- final MethodParameterInjection.MethodInfo methodInfo = MethodParameterInjection.createMethodInfo(method);
- if (MethodParameterInjection.isInjectable(method.getReturnType(), method.getProject())) {
+ final MethodParameterInjection.MethodInfo methodInfo = createMethodInfo(method);
+ if (isInjectable(method.getReturnType(), method.getProject())) {
final int parameterIndex = -1;
final InjectionPlace place = injection.findPlaceByText(getPatternStringForJavaPlace(method, parameterIndex));
methodInfo.setReturnFlag(place != null && place.isEnabled() || includeAllPlaces);
@@ -399,7 +400,7 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
final PsiParameter[] parameters = method.getParameterList().getParameters();
for (int i = 0; i < parameters.length; i++) {
final PsiParameter p = parameters[i];
- if (MethodParameterInjection.isInjectable(p.getType(), p.getProject())) {
+ if (isInjectable(p.getType(), p.getProject())) {
final InjectionPlace place = injection.findPlaceByText(getPatternStringForJavaPlace(method, i));
methodInfo.getParamFlags()[i] = place != null && place.isEnabled() || includeAllPlaces;
add = true;
@@ -426,8 +427,8 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
public static String getPatternStringForJavaPlace(final PsiMethod method, final int parameterIndex) {
final PsiClass psiClass = method.getContainingClass();
final String className = psiClass == null ? "" : StringUtil.notNullize(psiClass.getQualifiedName());
- final String signature = MethodParameterInjection.createMethodInfo(method).getMethodSignature();
- return PatternBasedInjectionHelper.getPatternStringForJavaPlace(method.getName(), PatternBasedInjectionHelper.getParameterTypesString(signature), parameterIndex, className);
+ final String signature = createMethodInfo(method).getMethodSignature();
+ return MethodParameterInjection.getPatternStringForJavaPlace(method.getName(), getParameterTypesString(signature), parameterIndex, className);
}
@Override
@@ -476,4 +477,4 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo
super.setupPresentation(injection, presentation, isSelected);
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReference.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/LanguageReferenceProvider.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReferenceProvider.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/LanguageReferenceProvider.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/LanguageReferenceProvider.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/RegExpEnumReference.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/RegExpEnumReference.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/RegExpEnumReference.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/RegExpEnumReference.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/InjectionNotApplicable.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/InjectionNotApplicable.java
similarity index 99%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/InjectionNotApplicable.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/InjectionNotApplicable.java
index 32a840c119d5..bc9d66c82fcd 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/InjectionNotApplicable.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/InjectionNotApplicable.java
@@ -97,4 +97,4 @@ public class InjectionNotApplicable extends LocalInspectionTool {
public String getShortName() {
return "InjectionNotApplicable";
}
-}
\ No newline at end of file
+}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/InspectionProvider.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/InspectionProvider.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/InspectionProvider.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/InspectionProvider.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/LanguageMismatch.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/LanguageMismatch.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/LanguageMismatch.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/LanguageMismatch.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/validation/UnknownLanguageID.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/InspectionProvider.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/InspectionProvider.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/InspectionProvider.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/InspectionProvider.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/PatternAnnotationNotApplicable.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/PatternAnnotationNotApplicable.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/PatternAnnotationNotApplicable.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/PatternAnnotationNotApplicable.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/PatternOverriddenByNonAnnotatedMethod.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/PatternOverriddenByNonAnnotatedMethod.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/PatternOverriddenByNonAnnotatedMethod.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/PatternOverriddenByNonAnnotatedMethod.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/PatternValidator.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/PatternValidator.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/PatternValidator.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/PatternValidator.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/AnnotationBasedInstrumentingCompiler.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/AnnotationBasedInstrumentingCompiler.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/AnnotationBasedInstrumentingCompiler.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/AnnotationBasedInstrumentingCompiler.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationException.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationException.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationException.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationException.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationItem.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationItem.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationItem.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/InstrumentationItem.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/Instrumenter.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/Instrumenter.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/Instrumenter.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/Instrumenter.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/InstrumentationAdapter.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/impl/InstrumentationAdapter.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/InstrumentationAdapter.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/impl/InstrumentationAdapter.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationInstrumenter.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationInstrumenter.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationInstrumenter.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationInstrumenter.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotateFix.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotateFix.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotateFix.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotateFix.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/ContextComputationProcessor.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/ContextComputationProcessor.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/ContextComputationProcessor.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/ContextComputationProcessor.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/InitializerRequirement.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/InitializerRequirement.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/InitializerRequirement.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/InitializerRequirement.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/PsiUtilEx.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/PsiUtilEx.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/PsiUtilEx.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/PsiUtilEx.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/RemoveAnnotationFix.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/RemoveAnnotationFix.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/RemoveAnnotationFix.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/RemoveAnnotationFix.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/StringLiteralReference.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/StringLiteralReference.java
similarity index 99%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/StringLiteralReference.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/StringLiteralReference.java
index 1e2c8596a856..8bf9b38560f9 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/StringLiteralReference.java
+++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/StringLiteralReference.java
@@ -63,4 +63,4 @@ public abstract class StringLiteralReference implements PsiReference {
return (String)myValue.getValue();
}
-}
\ No newline at end of file
+}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/SubstitutedExpressionEvaluationHelper.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/SubstitutedExpressionEvaluationHelper.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/SubstitutedExpressionEvaluationHelper.java
rename to plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/SubstitutedExpressionEvaluationHelper.java
diff --git a/plugins/IntelliLang/src/resources/javaInjections.xml b/plugins/IntelliLang/java-support/resources/javaInjections.xml
similarity index 100%
rename from plugins/IntelliLang/src/resources/javaInjections.xml
rename to plugins/IntelliLang/java-support/resources/javaInjections.xml
diff --git a/plugins/IntelliLang/javaee-support/org/intellij/plugins/intelliLang/inject/config/JspSupportProxyImpl.java b/plugins/IntelliLang/javaee-support/org/intellij/plugins/intelliLang/inject/config/JspSupportProxyImpl.java
new file mode 100644
index 000000000000..8bca634e7851
--- /dev/null
+++ b/plugins/IntelliLang/javaee-support/org/intellij/plugins/intelliLang/inject/config/JspSupportProxyImpl.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2000-2010 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 org.intellij.plugins.intelliLang.inject.config;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.psi.impl.source.jsp.JspManager;
+import org.jetbrains.annotations.NotNull;
+
+/**
+* @author Gregory.Shrago
+*/
+public class JspSupportProxyImpl extends JspSupportProxy {
+ @NotNull
+ @Override
+ public String[] getPossibleTldUris(Module module) {
+ return JspManager.getInstance(module.getProject()).getPossibleTldUris(module);
+ }
+}
diff --git a/plugins/IntelliLang/src/META-INF/intellilang-javaee-support.xml b/plugins/IntelliLang/src/META-INF/intellilang-javaee-support.xml
index 611d06a73218..19d55a8d9aac 100644
--- a/plugins/IntelliLang/src/META-INF/intellilang-javaee-support.xml
+++ b/plugins/IntelliLang/src/META-INF/intellilang-javaee-support.xml
@@ -4,6 +4,6 @@
+ serviceImplementation="org.intellij.plugins.intelliLang.inject.config.JspSupportProxyImpl"/>
\ No newline at end of file
diff --git a/plugins/IntelliLang/src/META-INF/intellilang-xpath-support.xml b/plugins/IntelliLang/src/META-INF/intellilang-xpath-support.xml
index 98415dea0f7d..16caabfc5ecc 100644
--- a/plugins/IntelliLang/src/META-INF/intellilang-xpath-support.xml
+++ b/plugins/IntelliLang/src/META-INF/intellilang-xpath-support.xml
@@ -4,7 +4,7 @@
+ serviceImplementation="org.intellij.plugins.intelliLang.inject.config.XPathSupportProxyImpl"/>
\ No newline at end of file
diff --git a/plugins/IntelliLang/src/META-INF/plugin.xml b/plugins/IntelliLang/src/META-INF/plugin.xml
index 08fc53463f67..280f1c804e79 100644
--- a/plugins/IntelliLang/src/META-INF/plugin.xml
+++ b/plugins/IntelliLang/src/META-INF/plugin.xml
@@ -9,7 +9,6 @@
com.intellij.modules.java
com.intellij.javaee
com.intellij.modules.xml
- org.intellij.groovy
Sascha Weinreuter
@@ -45,4 +44,4 @@
-
\ No newline at end of file
+
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java
index 4ee6369b793d..2610c4e47330 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java
@@ -122,21 +122,7 @@ public final class Configuration implements PersistentStateComponent {
for (LanguageInjectionSupport support : Extensions.getExtensions(LanguageInjectionSupport.EP_NAME)) {
supports.put(support.getId(), support);
}
- myInjections.get(LanguageInjectionSupport.XML_SUPPORT_ID).addAll(readExternal(element.getChild(TAG_INJECTION_NAME), new Factory() {
- public XmlTagInjection create() {
- return new XmlTagInjection();
- }
- }));
- myInjections.get(LanguageInjectionSupport.XML_SUPPORT_ID).addAll(readExternal(element.getChild(ATTRIBUTE_INJECTION_NAME), new Factory() {
- public XmlAttributeInjection create() {
- return new XmlAttributeInjection();
- }
- }));
- myInjections.get(LanguageInjectionSupport.JAVA_SUPPORT_ID).addAll(readExternal(element.getChild(PARAMETER_INJECTION_NAME), new Factory() {
- public MethodParameterInjection create() {
- return new MethodParameterInjection();
- }
- }));
+ loadStateOld(element, supports.get(LanguageInjectionSupport.XML_SUPPORT_ID), supports.get(LanguageInjectionSupport.JAVA_SUPPORT_ID));
for (Element child : (List)element.getChildren("injection")){
final String key = child.getAttributeValue("injector-id");
final LanguageInjectionSupport support = supports.get(key);
@@ -163,6 +149,31 @@ public final class Configuration implements PersistentStateComponent {
}
}
+ private void loadStateOld(Element element, final LanguageInjectionSupport xmlSupport, final LanguageInjectionSupport javaSupport) {
+ if (xmlSupport != null) {
+ final Element xmlTagMarker = new Element("XmlTagInjection");
+ myInjections.get(LanguageInjectionSupport.XML_SUPPORT_ID).addAll(readExternal(element.getChild(TAG_INJECTION_NAME), new Factory() {
+ public BaseInjection create() {
+ return xmlSupport.createInjection(xmlTagMarker);
+ }
+ }));
+ final Element xmlAttributeMarker = new Element("XmlAttributeInjection");
+ myInjections.get(LanguageInjectionSupport.XML_SUPPORT_ID).addAll(readExternal(element.getChild(ATTRIBUTE_INJECTION_NAME), new Factory() {
+ public BaseInjection create() {
+ return xmlSupport.createInjection(xmlAttributeMarker);
+ }
+ }));
+ }
+ if (javaSupport != null) {
+ final Element javaMethodMarker = new Element("MethodParameterInjection");
+ myInjections.get(LanguageInjectionSupport.JAVA_SUPPORT_ID).addAll(readExternal(element.getChild(PARAMETER_INJECTION_NAME), new Factory() {
+ public BaseInjection create() {
+ return javaSupport.createInjection(javaMethodMarker);
+ }
+ }));
+ }
+ }
+
private static boolean readBoolean(Element element, String key, boolean defValue) {
final String value = JDOMExternalizerUtil.readField(element, key);
if (value == null) return defValue;
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/PatternBasedInjectionHelper.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/PatternBasedInjectionHelper.java
index 71e6bd075247..0b3801acdcd8 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/PatternBasedInjectionHelper.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/PatternBasedInjectionHelper.java
@@ -18,7 +18,6 @@ package org.intellij.plugins.intelliLang;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.util.text.StringUtil;
import com.intellij.patterns.ElementPattern;
import com.intellij.psi.PsiElement;
import com.intellij.util.Function;
@@ -27,9 +26,6 @@ import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.Stack;
import gnu.trove.THashSet;
import org.intellij.plugins.intelliLang.inject.LanguageInjectionSupport;
-import org.intellij.plugins.intelliLang.inject.config.AbstractTagInjection;
-import org.intellij.plugins.intelliLang.inject.config.MethodParameterInjection;
-import org.intellij.plugins.intelliLang.inject.config.XmlAttributeInjection;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
@@ -71,86 +67,6 @@ public class PatternBasedInjectionHelper {
// return StandardPatterns.or(list.toArray(new ElementPattern[list.size()]));
//}
- public static List getPatternString(final MethodParameterInjection injection) {
- final ArrayList list = new ArrayList();
- final String className = injection.getClassName();
- for (MethodParameterInjection.MethodInfo info : injection.getMethodInfos()) {
- final boolean[] paramFlags = info.getParamFlags();
- final int paramFlagsLength = paramFlags.length;
- final String methodName = info.getMethodName();
- final String typesString = getParameterTypesString(info.getMethodSignature());
- if (info.isReturnFlag()) {
- list.add(getPatternStringForJavaPlace(methodName, typesString, -1, className));
- }
- for (int i = 0; i < paramFlagsLength; i++) {
- if (paramFlags[i]) {
- list.add(getPatternStringForJavaPlace(methodName, typesString, i, className));
- }
- }
- }
- return list;
- }
-
- public static String getParameterTypesString(final String signature) {
- @NonNls final StringBuilder sb = new StringBuilder();
- final StringTokenizer st = new StringTokenizer(signature, "(,)");
- //noinspection ForLoopThatDoesntUseLoopVariable
- for (int i = 0; st.hasMoreTokens(); i++) {
- final String token = st.nextToken().trim();
- if (i > 1) sb.append(", ");
- final int idx;
- if (i == 0) {
- // nothing
- }
- else {
- sb.append('\"');
- if ((idx = token.indexOf(' ')) > -1) {
- sb.append(token.substring(0, idx));
- }
- else {
- sb.append(token);
- }
- sb.append('\"');
- }
- }
- return sb.toString();
- }
-
- public static String getPatternStringForJavaPlace(final String methodName, final String parametersStrings, final int parameterIndex, final String className) {
- final StringBuilder sb = new StringBuilder();
- if (parameterIndex >= 0) {
- sb.append("psiParameter().ofMethod(").append(parameterIndex).append(", ");
- }
- sb.append("psiMethod().withName(\"").append(methodName)
- .append("\").withParameters(").append(parametersStrings)
- .append(").definedInClass(\"").append(className).append("\")");
- if (parameterIndex >= 0) {
- sb.append(")");
- }
- return sb.toString();
- }
-
- public static String getPatternString(final XmlAttributeInjection injection) {
- final String name = injection.getAttributeName();
- final String namespace = injection.getAttributeNamespace();
- final StringBuilder result = new StringBuilder("xmlAttribute()");
- if (StringUtil.isNotEmpty(name)) result.append(".withLocalName(string().matches(\"").append(name).append("\"))");
- if (StringUtil.isNotEmpty(namespace)) result.append(".withNamespace(string().matches(\"").append(namespace).append("\"))");
- if (StringUtil.isNotEmpty(injection.getTagName()) || StringUtil.isNotEmpty(injection.getTagNamespace())) {
- result.append(".inside(").append(getPatternString((AbstractTagInjection)injection)).append(")");
- }
- return result.toString();
- }
-
- public static String getPatternString(final AbstractTagInjection injection) {
- final String name = injection.getTagName();
- final String namespace = injection.getTagNamespace();
- final StringBuilder result = new StringBuilder("xmlTag()");
- if (StringUtil.isNotEmpty(name)) result.append(".withLocalName(string().matches(\"").append(name).append("\"))");
- if (StringUtil.isNotEmpty(namespace)) result.append(".withNamespace(string().matches(\"").append(namespace).append("\"))");
- return result.toString();
- }
-
@Nullable
public static ElementPattern createElementPattern(final String text, final String displayName, final String supportId) {
return createElementPatternNoGroovy(text, displayName, supportId);
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectorUtils.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectorUtils.java
index 7069c6c48dd2..e39c71a7fc42 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectorUtils.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectorUtils.java
@@ -17,20 +17,17 @@
package org.intellij.plugins.intelliLang.inject;
import com.intellij.lang.Language;
+import com.intellij.lang.LanguageLiteralEscapers;
+import com.intellij.lang.LiteralEscaper;
import com.intellij.lang.injection.MultiHostRegistrar;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.Trinity;
import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLanguageInjectionHost;
-import com.intellij.psi.PsiLiteralExpression;
-import com.intellij.psi.xml.XmlElement;
import com.intellij.util.NotNullFunction;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -56,17 +53,6 @@ public class InjectorUtils {
registrar.addPlace(prefix, suffix, host, textRange);
}
- public static String getUnescapedText(final PsiElement host, final String text) {
- if (host instanceof PsiLiteralExpression) {
- return StringUtil.unescapeStringCharacters(text);
- }
- else if (host instanceof XmlElement) {
- return XmlUtil.unescape(text);
- }
- else {
- return text;
- }
- }// Avoid sticking text and prefix/suffix together in a way that it would form a single token.
// See http://www.jetbrains.net/jira/browse/IDEADEV-8302#action_111865
// This code assumes that for the injected language a single space character is a token separator
// that doesn't (significantly) change the semantics if added to the prefix/suffix
@@ -117,6 +103,7 @@ public class InjectorUtils {
if (language == null/* && (pair.second.getLength() > 0*/) {
return;
}
+ final LiteralEscaper literalEscaper = LanguageLiteralEscapers.INSTANCE.forLanguage(containingFile.getLanguage());
boolean injectionStarted = false;
for (Trinity trinity : list) {
final PsiLanguageInjectionHost host = trinity.first;
@@ -134,7 +121,10 @@ public class InjectorUtils {
// useful cases may break. This system is far from perfect still...
final StringBuilder prefix = new StringBuilder(injectedLanguage.getPrefix());
final StringBuilder suffix = new StringBuilder(injectedLanguage.getSuffix());
- adjustPrefixAndSuffix(getUnescapedText(host, textRange.substring(host.getText())), prefix, suffix);
+ final String text = textRange.substring(host.getText());
+ final String result = literalEscaper != null ? literalEscaper.unescapeText(text) : text;
+
+ adjustPrefixAndSuffix(result, prefix, suffix);
addPlaceSafe(registrar, prefix.toString(), suffix.toString(), host, textRange);
}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/JspSupportProxy.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/JspSupportProxy.java
index 6c503dad460a..9a6507d9a650 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/JspSupportProxy.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/JspSupportProxy.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 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.
@@ -18,7 +18,6 @@ package org.intellij.plugins.intelliLang.inject.config;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.module.Module;
-import com.intellij.psi.impl.source.jsp.JspManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -44,12 +43,4 @@ public abstract class JspSupportProxy {
isInitialized = true;
}
}
-
- public static class Impl extends JspSupportProxy {
- @NotNull
- @Override
- public String[] getPossibleTldUris(Module module) {
- return JspManager.getInstance(module.getProject()).getPossibleTldUris(module);
- }
- }
}
\ No newline at end of file
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxy.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxy.java
deleted file mode 100644
index 44756b5455d9..000000000000
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxy.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2000-2009 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 org.intellij.plugins.intelliLang.inject.config;
-
-import com.intellij.openapi.components.ServiceManager;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.xml.XmlTokenImpl;
-import com.intellij.psi.xml.XmlElement;
-import com.intellij.psi.xml.XmlElementType;
-import org.intellij.lang.xpath.context.ContextProvider;
-import org.intellij.lang.xpath.context.ContextType;
-import org.intellij.lang.xpath.context.NamespaceContext;
-import org.intellij.lang.xpath.context.VariableContext;
-import org.intellij.lang.xpath.psi.XPathExpression;
-import org.intellij.lang.xpath.psi.XPathType;
-import org.intellij.plugins.xpathView.support.XPathSupport;
-import org.intellij.plugins.xpathView.util.Namespace;
-import org.jaxen.JaxenException;
-import org.jaxen.XPath;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.xml.namespace.QName;
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * Proxy class that allows to avoid a hard compile time dependency on the XPathView plugin.
- */
-public abstract class XPathSupportProxy {
- private static final Logger LOG = Logger.getInstance("org.intellij.plugins.intelliLang.inject.config.XPathSupportProxy");
-
- public static final Object UNSUPPORTED = "UNSUPPORTED";
- public static final Object INVALID = "INVALID";
-
- @NotNull
- public abstract XPath createXPath(String expression) throws JaxenException;
-
- public abstract void attachContext(@NotNull PsiFile file);
-
- private static XPathSupportProxy ourInstance;
- private static boolean isInitialized;
-
- @Nullable
- public static synchronized XPathSupportProxy getInstance() {
- if (isInitialized) {
- return ourInstance;
- }
- try {
- return ourInstance = ServiceManager.getService(XPathSupportProxy.class);
- } finally {
- if (ourInstance == null) {
- LOG.info("XPath Support is not available");
- }
- isInitialized = true;
- }
- }
-
- public static class Impl extends XPathSupportProxy {
- private static class Provider extends ContextProvider {
- private final XmlTokenImpl myDummyContext = new XmlTokenImpl(XmlElementType.XML_CONTENT_EMPTY, "") {
- @Override
- public boolean isValid() {
- return true;
- }
- };
-
- @NotNull
- public ContextType getContextType() {
- return XPathSupport.TYPE;
- }
-
- @NotNull
- @Override
- public XPathType getExpectedType(XPathExpression expr) {
- return XPathType.BOOLEAN;
- }
-
- public XmlElement getContextElement() {
- // needed because the static method ContextProvider.isValid() checks this to determine if the provider
- // is still valid - refactor this into an instance method ContextProvider.isValid()?
- return myDummyContext;
- }
-
- public NamespaceContext getNamespaceContext() {
- return null;
- }
-
- public VariableContext getVariableContext() {
- return null;
- }
-
- public Set getAttributes(boolean forValidation) {
- return null;
- }
-
- public Set getElements(boolean forValidation) {
- return null;
- }
- }
-
- private final ContextProvider myProvider = new Provider();
- private final XPathSupport mySupport = XPathSupport.getInstance();
-
- @NotNull
- public XPath createXPath(String expression) throws JaxenException {
- return mySupport.createXPath(null, expression, Collections.emptyList());
- }
-
- public void attachContext(@NotNull PsiFile file) {
- myProvider.attachTo(file);
- }
- }
-}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.form b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.form
index 5e247344962d..1fefd7a3b6d1 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.form
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.form
@@ -8,10 +8,10 @@
-
+
-
+
@@ -33,23 +33,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java
index a5931af8d00a..934cdb0be3d8 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java
+++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java
@@ -20,9 +20,6 @@ import com.intellij.psi.PsiFile;
import com.intellij.ui.EditorTextField;
import com.intellij.util.Consumer;
import org.intellij.lang.regexp.RegExpLanguage;
-import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
-import org.intellij.plugins.intelliLang.inject.config.AbstractTagInjection;
-import org.intellij.plugins.intelliLang.inject.config.XPathSupportProxy;
import org.intellij.plugins.intelliLang.inject.config.BaseInjection;
import org.intellij.plugins.intelliLang.util.LanguageTextField;
@@ -33,34 +30,21 @@ public class AdvancedPanel extends AbstractInjectionPanel {
private JPanel myRoot;
private EditorTextField myValuePattern;
- private EditorTextField myXPathCondition;
- private JLabel myXPathConditionLabel;
private JCheckBox mySingleFileCheckBox;
public AdvancedPanel(Project project, BaseInjection injection) {
super(injection, project);
$$$setupUI$$$(); // see IDEA-9987
- if (!(injection instanceof AbstractTagInjection)) {
- myXPathCondition.setVisible(false);
- myXPathConditionLabel.setVisible(false);
- }
-
}
protected void apply(BaseInjection other) {
other.setValuePattern(myValuePattern.getText());
other.setSingleFile(mySingleFileCheckBox.isSelected());
- if (myOrigInjection instanceof AbstractTagInjection) {
- ((AbstractTagInjection)other).setXPathCondition(myXPathCondition.getText());
- }
}
protected void resetImpl() {
myValuePattern.setText(myOrigInjection.getValuePattern());
mySingleFileCheckBox.setSelected(myOrigInjection.isSingleFile());
- if (myOrigInjection instanceof AbstractTagInjection) {
- myXPathCondition.setText(((AbstractTagInjection)myOrigInjection).getXPathCondition());
- }
}
public JPanel getComponent() {
@@ -73,26 +57,8 @@ public class AdvancedPanel extends AbstractInjectionPanel {
psiFile.putCopyableUserData(ValueRegExpAnnotator.KEY, Boolean.TRUE);
}
});
-
- if (myOrigInjection instanceof AbstractTagInjection) {
-// don't even bother to look up the language when xpath-evaluation isn't possible
- final XPathSupportProxy proxy = XPathSupportProxy.getInstance();
- myXPathCondition = new LanguageTextField(proxy != null ? InjectedLanguage.findLanguageById("XPath") : null, myProject,
- ((AbstractTagInjection)myOrigInjection).getXPathCondition(), new Consumer() {
- public void consume(PsiFile psiFile) {
- // important to get proper validation & completion for Jaxen's built-in and PSI functions
- // like lower-case(), file-type(), file-ext(), file-name(), etc.
- if (proxy != null) {
- proxy.attachContext(psiFile);
- }
- }
- });
- }
- else {
- myXPathCondition = new EditorTextField();
- }
}
private void $$$setupUI$$$() {
}
-}
\ No newline at end of file
+}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/AbstractTagInjection.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/AbstractTagInjection.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/AbstractTagInjection.java
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/AbstractTagInjection.java
diff --git a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxy.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxy.java
new file mode 100644
index 000000000000..107335864e19
--- /dev/null
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxy.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2000-2010 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 org.intellij.plugins.intelliLang.inject.config;
+
+import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.psi.PsiFile;
+import org.jaxen.JaxenException;
+import org.jaxen.XPath;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Proxy class that allows to avoid a hard compile time dependency on the XPathView plugin.
+ */
+public abstract class XPathSupportProxy {
+ private static final Logger LOG = Logger.getInstance("org.intellij.plugins.intelliLang.inject.config.XPathSupportProxy");
+
+ public static final Object UNSUPPORTED = "UNSUPPORTED";
+ public static final Object INVALID = "INVALID";
+
+ @NotNull
+ public abstract XPath createXPath(String expression) throws JaxenException;
+
+ public abstract void attachContext(@NotNull PsiFile file);
+
+ private static XPathSupportProxy ourInstance;
+ private static boolean isInitialized;
+
+ @Nullable
+ public static synchronized XPathSupportProxy getInstance() {
+ if (isInitialized) {
+ return ourInstance;
+ }
+ try {
+ return ourInstance = ServiceManager.getService(XPathSupportProxy.class);
+ } finally {
+ if (ourInstance == null) {
+ LOG.info("XPath Support is not available");
+ }
+ isInitialized = true;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxyImpl.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxyImpl.java
new file mode 100644
index 000000000000..e581327a321f
--- /dev/null
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XPathSupportProxyImpl.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2000-2010 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 org.intellij.plugins.intelliLang.inject.config;
+
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.impl.source.xml.XmlTokenImpl;
+import com.intellij.psi.xml.XmlElement;
+import com.intellij.psi.xml.XmlElementType;
+import org.intellij.lang.xpath.context.ContextProvider;
+import org.intellij.lang.xpath.context.ContextType;
+import org.intellij.lang.xpath.context.NamespaceContext;
+import org.intellij.lang.xpath.context.VariableContext;
+import org.intellij.lang.xpath.psi.XPathExpression;
+import org.intellij.lang.xpath.psi.XPathType;
+import org.intellij.plugins.xpathView.support.XPathSupport;
+import org.intellij.plugins.xpathView.util.Namespace;
+import org.jaxen.JaxenException;
+import org.jaxen.XPath;
+import org.jetbrains.annotations.NotNull;
+
+import javax.xml.namespace.QName;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+* @author Gregory.Shrago
+*/
+public class XPathSupportProxyImpl extends XPathSupportProxy {
+ private static class Provider extends ContextProvider {
+ private final XmlTokenImpl myDummyContext = new XmlTokenImpl(XmlElementType.XML_CONTENT_EMPTY, "") {
+ @Override
+ public boolean isValid() {
+ return true;
+ }
+ };
+
+ @NotNull
+ public ContextType getContextType() {
+ return XPathSupport.TYPE;
+ }
+
+ @NotNull
+ @Override
+ public XPathType getExpectedType(XPathExpression expr) {
+ return XPathType.BOOLEAN;
+ }
+
+ public XmlElement getContextElement() {
+ // needed because the static method ContextProvider.isValid() checks this to determine if the provider
+ // is still valid - refactor this into an instance method ContextProvider.isValid()?
+ return myDummyContext;
+ }
+
+ public NamespaceContext getNamespaceContext() {
+ return null;
+ }
+
+ public VariableContext getVariableContext() {
+ return null;
+ }
+
+ public Set getAttributes(boolean forValidation) {
+ return null;
+ }
+
+ public Set getElements(boolean forValidation) {
+ return null;
+ }
+ }
+
+ private final ContextProvider myProvider = new Provider();
+ private final XPathSupport mySupport = XPathSupport.getInstance();
+
+ @NotNull
+ public XPath createXPath(String expression) throws JaxenException {
+ return mySupport.createXPath(null, expression, Collections.emptyList());
+ }
+
+ public void attachContext(@NotNull PsiFile file) {
+ myProvider.attachTo(file);
+ }
+}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XmlAttributeInjection.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XmlAttributeInjection.java
similarity index 83%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XmlAttributeInjection.java
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XmlAttributeInjection.java
index 972fb1bfaede..fa715cc33206 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XmlAttributeInjection.java
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XmlAttributeInjection.java
@@ -16,6 +16,7 @@
package org.intellij.plugins.intelliLang.inject.config;
import com.intellij.openapi.util.JDOMExternalizer;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlAttributeValue;
@@ -75,7 +76,7 @@ public class XmlAttributeInjection extends AbstractTagInjection {
@Override
protected List generatePlaces() {
- return Collections.singletonList(PatternBasedInjectionHelper.getPatternString(this));
+ return Collections.singletonList(getPatternString(this));
}
private boolean matches(@NotNull XmlAttribute attr) {
@@ -135,4 +136,17 @@ public class XmlAttributeInjection extends AbstractTagInjection {
result = 31 * result + myAttributeNamespace.hashCode();
return result;
}
+
+ public static String getPatternString(final XmlAttributeInjection injection) {
+ final String name = injection.getAttributeName();
+ final String namespace = injection.getAttributeNamespace();
+ final StringBuilder result = new StringBuilder("xmlAttribute()");
+ if (StringUtil.isNotEmpty(name)) result.append(".withLocalName(string().matches(\"").append(name).append("\"))");
+ if (StringUtil.isNotEmpty(namespace)) result.append(".withNamespace(string().matches(\"").append(namespace).append("\"))");
+ if (StringUtil.isNotEmpty(injection.getTagName()) || StringUtil.isNotEmpty(injection.getTagNamespace())) {
+ result.append(".inside(").append(XmlTagInjection.getPatternString(injection)).append(")");
+ }
+ return result.toString();
+ }
+
}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XmlTagInjection.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XmlTagInjection.java
similarity index 69%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XmlTagInjection.java
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XmlTagInjection.java
index b28b4acce4cb..6ccaee639ece 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/XmlTagInjection.java
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/XmlTagInjection.java
@@ -15,6 +15,7 @@
*/
package org.intellij.plugins.intelliLang.inject.config;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.xml.XmlTag;
import org.intellij.plugins.intelliLang.PatternBasedInjectionHelper;
import org.jetbrains.annotations.NotNull;
@@ -50,6 +51,17 @@ public class XmlTagInjection extends AbstractTagInjection {
@Override
protected List generatePlaces() {
- return Collections.singletonList(PatternBasedInjectionHelper.getPatternString(this));
+ return Collections.singletonList(getPatternString(this));
}
+
+ public static String getPatternString(final AbstractTagInjection injection) {
+ final String name = injection.getTagName();
+ final String namespace = injection.getTagNamespace();
+ final StringBuilder result = new StringBuilder("xmlTag()");
+ if (StringUtil.isNotEmpty(name)) result.append(".withLocalName(string().matches(\"").append(name).append("\"))");
+ if (StringUtil.isNotEmpty(namespace)) result.append(".withNamespace(string().matches(\"").append(namespace).append("\"))");
+ return result.toString();
+ }
+
+
}
diff --git a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.form b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.form
new file mode 100644
index 000000000000..fac897331d1e
--- /dev/null
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.form
@@ -0,0 +1,65 @@
+
+
diff --git a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.java
new file mode 100644
index 000000000000..ef664eeefd23
--- /dev/null
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2006 Sascha Weinreuter
+ *
+ * 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 org.intellij.plugins.intelliLang.inject.config.ui;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiFile;
+import com.intellij.ui.EditorTextField;
+import com.intellij.util.Consumer;
+import org.intellij.lang.regexp.RegExpLanguage;
+import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
+import org.intellij.plugins.intelliLang.inject.config.AbstractTagInjection;
+import org.intellij.plugins.intelliLang.inject.config.BaseInjection;
+import org.intellij.plugins.intelliLang.inject.config.XPathSupportProxy;
+import org.intellij.plugins.intelliLang.util.LanguageTextField;
+
+import javax.swing.*;
+
+public class AdvancedXmlPanel extends AbstractInjectionPanel {
+
+ private JPanel myRoot;
+
+ private EditorTextField myValuePattern;
+ private EditorTextField myXPathCondition;
+ private JLabel myXPathConditionLabel;
+ private JCheckBox mySingleFileCheckBox;
+
+ public AdvancedXmlPanel(Project project, BaseInjection injection) {
+ super(injection, project);
+ $$$setupUI$$$(); // see IDEA-9987
+ if (!(injection instanceof AbstractTagInjection)) {
+ myXPathCondition.setVisible(false);
+ myXPathConditionLabel.setVisible(false);
+ }
+
+ }
+
+ protected void apply(BaseInjection other) {
+ other.setValuePattern(myValuePattern.getText());
+ other.setSingleFile(mySingleFileCheckBox.isSelected());
+ if (myOrigInjection instanceof AbstractTagInjection) {
+ ((AbstractTagInjection)other).setXPathCondition(myXPathCondition.getText());
+ }
+ }
+
+ protected void resetImpl() {
+ myValuePattern.setText(myOrigInjection.getValuePattern());
+ mySingleFileCheckBox.setSelected(myOrigInjection.isSingleFile());
+ if (myOrigInjection instanceof AbstractTagInjection) {
+ myXPathCondition.setText(((AbstractTagInjection)myOrigInjection).getXPathCondition());
+ }
+ }
+
+ public JPanel getComponent() {
+ return myRoot;
+ }
+
+ private void createUIComponents() {
+ myValuePattern = new LanguageTextField(RegExpLanguage.INSTANCE, myProject, myOrigInjection.getValuePattern(), new Consumer() {
+ public void consume(PsiFile psiFile) {
+ psiFile.putCopyableUserData(ValueRegExpAnnotator.KEY, Boolean.TRUE);
+ }
+ });
+
+ if (myOrigInjection instanceof AbstractTagInjection) {
+// don't even bother to look up the language when xpath-evaluation isn't possible
+ final XPathSupportProxy proxy = XPathSupportProxy.getInstance();
+ myXPathCondition = new LanguageTextField(proxy != null ? InjectedLanguage.findLanguageById("XPath") : null, myProject,
+ ((AbstractTagInjection)myOrigInjection).getXPathCondition(), new Consumer() {
+ public void consume(PsiFile psiFile) {
+ // important to get proper validation & completion for Jaxen's built-in and PSI functions
+ // like lower-case(), file-type(), file-ext(), file-name(), etc.
+ if (proxy != null) {
+ proxy.attachContext(psiFile);
+ }
+ }
+ });
+ }
+ else {
+ myXPathCondition = new EditorTextField();
+ }
+ }
+
+ private void $$$setupUI$$$() {
+ }
+}
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.form b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.form
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.form
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.form
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.java
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/TagPanel.java
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.form b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.form
similarity index 97%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.form
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.form
index 8c43e593a2ae..ce2490d0a4a5 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.form
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.form
@@ -69,7 +69,7 @@
-
+
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.java
similarity index 95%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.java
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.java
index 481b8e846988..ffb890b805ea 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.java
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlAttributePanel.java
@@ -31,7 +31,7 @@ public class XmlAttributePanel extends AbstractInjectionPanel
-
+
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlTagPanel.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlTagPanel.java
similarity index 93%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlTagPanel.java
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlTagPanel.java
index 2c92a3bb1218..ffc92143ba0c 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/XmlTagPanel.java
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/XmlTagPanel.java
@@ -25,7 +25,7 @@ public class XmlTagPanel extends AbstractInjectionPanel {
// read by reflection
LanguagePanel myLanguagePanel;
TagPanel myPanel;
- AdvancedPanel myAdvancedPanel;
+ AdvancedXmlPanel myAdvancedPanel;
private JPanel myRoot;
@@ -51,7 +51,7 @@ public class XmlTagPanel extends AbstractInjectionPanel {
private void createUIComponents() {
myLanguagePanel = new LanguagePanel(myProject, myOrigInjection);
myPanel = new TagPanel(myProject, myOrigInjection);
- myAdvancedPanel = new AdvancedPanel(myProject, myOrigInjection);
+ myAdvancedPanel = new AdvancedXmlPanel(myProject, myOrigInjection);
}
private void $$$setupUI$$$() {
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/configurables/XmlAttributeInjectionConfigurable.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/configurables/XmlAttributeInjectionConfigurable.java
similarity index 99%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/configurables/XmlAttributeInjectionConfigurable.java
rename to plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/configurables/XmlAttributeInjectionConfigurable.java
index e063875b9239..f4f5e94914de 100644
--- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/configurables/XmlAttributeInjectionConfigurable.java
+++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/configurables/XmlAttributeInjectionConfigurable.java
@@ -38,4 +38,4 @@ public class XmlAttributeInjectionConfigurable extends InjectionConfigurable
+
diff --git a/plugins/IntelliLang/src/META-INF/intellilang-groovy-support.xml b/plugins/groovy/src/META-INF/intellilang-groovy-support.xml
similarity index 95%
rename from plugins/IntelliLang/src/META-INF/intellilang-groovy-support.xml
rename to plugins/groovy/src/META-INF/intellilang-groovy-support.xml
index 241b30708fd5..365491c9511e 100644
--- a/plugins/IntelliLang/src/META-INF/intellilang-groovy-support.xml
+++ b/plugins/groovy/src/META-INF/intellilang-groovy-support.xml
@@ -7,4 +7,4 @@
config="/resources/groovyInjections.xml"/>
-
\ No newline at end of file
+
diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml
index 5d0536d3d6b8..4896b89518a7 100644
--- a/plugins/groovy/src/META-INF/plugin.xml
+++ b/plugins/groovy/src/META-INF/plugin.xml
@@ -24,6 +24,7 @@
com.intellij.properties
com.intellij.copyright
+ org.intellij.intelliLang
diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java
similarity index 100%
rename from plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java
rename to plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/GroovyLanguageInjectionSupport.java
diff --git a/plugins/IntelliLang/src/resources/groovyInjections.xml b/plugins/groovy/src/resources/groovyInjections.xml
similarity index 100%
rename from plugins/IntelliLang/src/resources/groovyInjections.xml
rename to plugins/groovy/src/resources/groovyInjections.xml
diff --git a/xml/impl/src/com/intellij/lang/xml/XmlLiteralEscaper.java b/xml/impl/src/com/intellij/lang/xml/XmlLiteralEscaper.java
new file mode 100644
index 000000000000..9a33f59a946a
--- /dev/null
+++ b/xml/impl/src/com/intellij/lang/xml/XmlLiteralEscaper.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2000-2010 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.lang.xml;
+
+import com.intellij.lang.LiteralEscaper;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.PsiElement;
+
+/**
+ * @author Gregory.Shrago
+ */
+public class XmlLiteralEscaper implements LiteralEscaper {
+ public String getEscapedText(PsiElement context, String originalText) {
+ return escapeText(originalText);
+ }
+
+ public String escapeText(String originalText) {
+ return StringUtil.escapeXml(originalText);
+ }
+
+ public String unescapeText(String originalText) {
+ return StringUtil.unescapeXml(originalText);
+ }
+}