/******************************************************************************* * Copyright (c) 2015 Anton Tanasenko * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Anton Tanasenko - Refactor marker resolutions and quick fixes (Bug #484359) *******************************************************************************/ package org.eclipse.m2e.core.ui.internal.markers; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext; /** * @author atanasenko */ public abstract class EditorAwareMavenProblemResolution extends MavenProblemResolution { private IQuickAssistInvocationContext context; protected EditorAwareMavenProblemResolution(IMarker marker) { super(marker); } public IQuickAssistInvocationContext getQuickAssistContext() { return this.context; } public void setQuickAssistContext(IQuickAssistInvocationContext context) { this.context = context; } protected final void fix(IMarker[] markers, IDocument document, IProgressMonitor monitor) { Map<IResource, List<IMarker>> resourceMap = Stream.of(markers).collect(Collectors.groupingBy(IMarker::getResource)); // assume that the document comes from that resource if(resourceMap.size() == 1 && document != null) { fix(document, resourceMap.values().iterator().next(), monitor); return; } for(Map.Entry<IResource, List<IMarker>> e : resourceMap.entrySet()) { fix(e.getKey(), e.getValue(), monitor); } } protected abstract void fix(IResource resource, List<IMarker> markers, IProgressMonitor monitor); protected abstract void fix(IDocument document, List<IMarker> markers, IProgressMonitor monitor); }