public void replaceInjectionsWithUndo( final Project project, final List<? extends BaseInjection> newInjections, final List<? extends BaseInjection> originalInjections, final List<? extends PsiElement> psiElementsToRemove) { replaceInjectionsWithUndo( project, newInjections, originalInjections, psiElementsToRemove, new PairProcessor<List<? extends BaseInjection>, List<? extends BaseInjection>>() { public boolean process( final List<? extends BaseInjection> add, final List<? extends BaseInjection> remove) { replaceInjections(add, remove); return true; } }); }
public boolean setHostInjectionEnabled( final PsiLanguageInjectionHost host, final Collection<String> languages, final boolean enabled) { final ArrayList<BaseInjection> originalInjections = new ArrayList<BaseInjection>(); final ArrayList<BaseInjection> newInjections = new ArrayList<BaseInjection>(); for (String supportId : getAllInjectorIds()) { for (BaseInjection injection : getInjections(supportId)) { if (!languages.contains(injection.getInjectedLanguageId())) continue; boolean replace = false; final ArrayList<InjectionPlace> newPlaces = new ArrayList<InjectionPlace>(); for (InjectionPlace place : injection.getInjectionPlaces()) { if (place.isEnabled() != enabled && place.getElementPattern() != null && (place.getElementPattern().accepts(host) || place.getElementPattern().accepts(host.getParent()))) { newPlaces.add(new InjectionPlace(place.getText(), place.getElementPattern(), enabled)); replace = true; } else newPlaces.add(place); } if (replace) { originalInjections.add(injection); final BaseInjection newInjection = injection.copy(); newInjection.getInjectionPlaces().clear(); newInjection.getInjectionPlaces().addAll(newPlaces); newInjections.add(newInjection); } } } if (!originalInjections.isEmpty()) { replaceInjectionsWithUndo( host.getProject(), newInjections, originalInjections, Collections.<PsiElement>emptyList()); return true; } return false; }