diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java index 55b1d3b25530..54c92fefe925 100644 --- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java +++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java @@ -51,6 +51,7 @@ import org.intellij.plugins.intelliLang.Configuration; import org.intellij.plugins.intelliLang.inject.AbstractLanguageInjectionSupport; import org.intellij.plugins.intelliLang.inject.EditInjectionSettingsAction; import org.intellij.plugins.intelliLang.inject.InjectLanguageAction; +import org.intellij.plugins.intelliLang.inject.InjectorUtils; import org.intellij.plugins.intelliLang.inject.config.BaseInjection; import org.intellij.plugins.intelliLang.inject.config.InjectionPlace; import org.intellij.plugins.intelliLang.inject.config.MethodParameterInjection; @@ -114,7 +115,7 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo final String placeText = getPatternStringForJavaPlace(pair.first, pair.second); final BaseInjection newInjection = injection.copy(); newInjection.setPlaceEnabled(placeText, false); - return newInjection; + return InjectorUtils.canBeRemoved(newInjection)? null : newInjection; } }); configuration.replaceInjectionsWithUndo(project, newInjections, originalInjections, annotations); @@ -307,7 +308,7 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo } private static void doEditInjection(final Project project, final MethodParameterInjection template, final PsiMethod contextMethod) { - final Configuration configuration = Configuration.getProjectInstance(project); + final Configuration configuration = InjectorUtils.getEditableInstance(project); final BaseInjection baseTemplate = new BaseInjection(template.getSupportId()).copyFrom(template); final MethodParameterInjection allMethodParameterInjection = createFrom(project, baseTemplate, contextMethod, true); // find existing injection for this class. 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 ee77adeac395..deecc2ef0f7c 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectorUtils.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectorUtils.java @@ -19,14 +19,18 @@ package org.intellij.plugins.intelliLang.inject; import com.intellij.lang.Language; import com.intellij.lang.injection.MultiHostRegistrar; import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.Trinity; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiLanguageInjectionHost; import com.intellij.psi.impl.source.tree.injected.MultiHostRegistrarImpl; import com.intellij.psi.impl.source.tree.injected.Place; import com.intellij.util.ArrayUtil; +import org.intellij.plugins.intelliLang.Configuration; +import org.intellij.plugins.intelliLang.inject.config.BaseInjection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -166,4 +170,16 @@ public class InjectorUtils { psiFile.putUserData(LanguageInjectionSupport.SETTINGS_EDITOR, support); } } + + @SuppressWarnings("UnusedParameters") + public static Configuration getEditableInstance(Project project) { + return Configuration.getInstance(); + } + + public static boolean canBeRemoved(BaseInjection injection) { + if (injection.isEnabled()) return false; + if (StringUtil.isNotEmpty(injection.getPrefix()) || StringUtil.isNotEmpty(injection.getSuffix())) return false; + if (StringUtil.isNotEmpty(injection.getValuePattern())) return false; + return true; + } } diff --git a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/xml/XmlLanguageInjectionSupport.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/xml/XmlLanguageInjectionSupport.java index 5833fc395fd2..e3bea1aaa51c 100644 --- a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/xml/XmlLanguageInjectionSupport.java +++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/xml/XmlLanguageInjectionSupport.java @@ -40,6 +40,7 @@ import org.intellij.plugins.intelliLang.Configuration; import org.intellij.plugins.intelliLang.inject.AbstractLanguageInjectionSupport; import org.intellij.plugins.intelliLang.inject.EditInjectionSettingsAction; import org.intellij.plugins.intelliLang.inject.InjectLanguageAction; +import org.intellij.plugins.intelliLang.inject.InjectorUtils; import org.intellij.plugins.intelliLang.inject.config.*; import org.intellij.plugins.intelliLang.inject.config.ui.AbstractInjectionPanel; import org.intellij.plugins.intelliLang.inject.config.ui.XmlAttributePanel; @@ -109,6 +110,8 @@ public class XmlLanguageInjectionSupport extends AbstractLanguageInjectionSuppor for (BaseInjection injection : injections) { final BaseInjection newInjection = injection.copy(); newInjection.setPlaceEnabled(null, false); + if (InjectorUtils.canBeRemoved(newInjection)) continue; + newInjections.add(newInjection); } configuration.replaceInjectionsWithUndo( project, newInjections, injections, Collections.emptyList()); @@ -274,7 +277,7 @@ public class XmlLanguageInjectionSupport extends AbstractLanguageInjectionSuppor } private static void doEditInjection(final Project project, final XmlTagInjection template) { - final Configuration configuration = Configuration.getProjectInstance(project); + final Configuration configuration = InjectorUtils.getEditableInstance(project); final AbstractTagInjection originalInjection = (AbstractTagInjection)configuration.findExistingInjection(template); final XmlTagInjection newInjection = originalInjection == null? template : new XmlTagInjection().copyFrom(originalInjection); @@ -304,7 +307,7 @@ public class XmlLanguageInjectionSupport extends AbstractLanguageInjectionSuppor } private static void doEditInjection(final Project project, final XmlAttributeInjection template) { - final Configuration configuration = Configuration.getProjectInstance(project); + final Configuration configuration = InjectorUtils.getEditableInstance(project); final BaseInjection originalInjection = configuration.findExistingInjection(template); final BaseInjection newInjection = originalInjection == null ? template : originalInjection.copy(); if (InjectLanguageAction.doEditConfigurable(project, new XmlAttributeInjectionConfigurable((XmlAttributeInjection)newInjection, null, project))) {