inject to global cfg by default, don't keep trivial injections

This commit is contained in:
Gregory.Shrago
2012-11-19 22:57:10 +04:00
parent d1e2d02631
commit f972d99aaa
3 changed files with 24 additions and 4 deletions
@@ -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.
@@ -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;
}
}
@@ -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.<PsiElement>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))) {