Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java')
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java109
1 files changed, 52 insertions, 57 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java
index 94773c48..d2c49a25 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java
@@ -11,14 +11,12 @@
package org.eclipse.m2e.core.internal.builder;
-import static org.eclipse.core.resources.IncrementalProjectBuilder.AUTO_BUILD;
import static org.eclipse.core.resources.IncrementalProjectBuilder.FULL_BUILD;
-import static org.eclipse.core.resources.IncrementalProjectBuilder.INCREMENTAL_BUILD;
import java.io.File;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -36,6 +34,7 @@ import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -46,22 +45,19 @@ import org.apache.maven.execution.MavenExecutionResult;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
-import org.sonatype.plexus.build.incremental.ThreadBuildContext;
-
+import org.eclipse.m2e.core.internal.ExtensionReader;
import org.eclipse.m2e.core.internal.IMavenConstants;
import org.eclipse.m2e.core.internal.MavenPluginActivator;
+import org.eclipse.m2e.core.internal.builder.BuildResultCollector.Message;
+import org.eclipse.m2e.core.internal.builder.IIncrementalBuildFramework.BuildContext;
import org.eclipse.m2e.core.internal.builder.plexusbuildapi.AbstractEclipseBuildContext;
-import org.eclipse.m2e.core.internal.builder.plexusbuildapi.AbstractEclipseBuildContext.Message;
-import org.eclipse.m2e.core.internal.builder.plexusbuildapi.EclipseBuildContext;
-import org.eclipse.m2e.core.internal.builder.plexusbuildapi.EclipseEmptyBuildContext;
-import org.eclipse.m2e.core.internal.builder.plexusbuildapi.EclipseIncrementalBuildContext;
+import org.eclipse.m2e.core.internal.builder.plexusbuildapi.PlexusBuildAPI;
import org.eclipse.m2e.core.internal.embedder.MavenProjectMutableState;
import org.eclipse.m2e.core.internal.markers.IMavenMarkerManager;
import org.eclipse.m2e.core.internal.markers.SourceLocation;
import org.eclipse.m2e.core.internal.markers.SourceLocationHelper;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant;
-import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant2;
import org.eclipse.m2e.core.project.configurator.MojoExecutionKey;
@@ -74,8 +70,18 @@ public class MavenBuilderImpl {
private final DeltaProvider deltaProvider;
+ private final List<IIncrementalBuildFramework> incrementalBuildFrameworks;
+
public MavenBuilderImpl(DeltaProvider deltaProvider) {
this.deltaProvider = deltaProvider;
+ this.incrementalBuildFrameworks = loadIncrementalBuildFrameworks();
+ }
+
+ private List<IIncrementalBuildFramework> loadIncrementalBuildFrameworks() {
+ List<IIncrementalBuildFramework> frameworks = new ArrayList<IIncrementalBuildFramework>();
+ frameworks.add(new PlexusBuildAPI());
+ frameworks.addAll(ExtensionReader.readIncrementalBuildFrameworks());
+ return frameworks;
}
public MavenBuilderImpl() {
@@ -98,41 +104,27 @@ public class MavenBuilderImpl {
IResourceDelta delta = getDeltaProvider().getDelta(project);
- @SuppressWarnings("unchecked")
- Map<String, Object> contextState = (Map<String, Object>) project.getSessionProperty(BUILD_CONTEXT_KEY);
- AbstractEclipseBuildContext buildContext;
- if(delta != null && contextState != null && (INCREMENTAL_BUILD == kind || AUTO_BUILD == kind)) {
- buildContext = new EclipseIncrementalBuildContext(delta, contextState);
- } else {
- contextState = new HashMap<String, Object>();
- project.setSessionProperty(BUILD_CONTEXT_KEY, contextState);
- if(AbstractBuildParticipant2.PRECONFIGURE_BUILD == kind) {
- buildContext = new EclipseEmptyBuildContext(project, contextState);
- } else {
- // must be full build
- buildContext = new EclipseBuildContext(project, contextState);
- }
- }
+ final BuildResultCollector participantResults = new BuildResultCollector();
+ List<BuildContext> incrementalContexts = setupProjectBuildContext(project, kind, delta, participantResults);
debugBuildStart(debugHooks, projectFacade, kind, args, participants, delta, monitor);
Map<Throwable, MojoExecutionKey> buildErrors = new LinkedHashMap<Throwable, MojoExecutionKey>();
- ThreadBuildContext.setThreadBuildContext(buildContext);
MavenProjectMutableState snapshot = MavenProjectMutableState.takeSnapshot(mavenProject);
try {
for(Entry<MojoExecutionKey, List<AbstractBuildParticipant>> entry : participants.entrySet()) {
MojoExecutionKey mojoExecutionKey = entry.getKey();
for(InternalBuildParticipant participant : entry.getValue()) {
- Set<File> debugRefreshFiles = !debugHooks.isEmpty() ? new LinkedHashSet<File>(buildContext.getFiles()) : null;
+ Set<File> debugRefreshFiles = !debugHooks.isEmpty() ? new LinkedHashSet<File>(participantResults.getFiles())
+ : null;
log.debug("Executing build participant {} for plugin execution {}", participant.getClass().getName(),
mojoExecutionKey.toString());
- String stringMojoExecutionKey = mojoExecutionKey.getKeyString();
- buildContext.setCurrentBuildParticipantId(stringMojoExecutionKey + "-" + participant.getClass().getName());
+ participantResults.setParticipantId(mojoExecutionKey.getKeyString() + "-" + participant.getClass().getName());
participant.setMavenProjectFacade(projectFacade);
participant.setGetDeltaCallback(getDeltaProvider());
participant.setSession(session);
- participant.setBuildContext(buildContext);
+ participant.setBuildContext((AbstractEclipseBuildContext) incrementalContexts.get(0));
if(participant instanceof InternalBuildParticipant2) {
((InternalBuildParticipant2) participant).setArgs(args);
}
@@ -163,28 +155,37 @@ public class MavenBuilderImpl {
}
debugBuildParticipant(debugHooks, projectFacade, mojoExecutionKey, (AbstractBuildParticipant) participant,
- diff(debugRefreshFiles, buildContext.getFiles()), monitor);
+ diff(debugRefreshFiles, participantResults.getFiles()), monitor);
}
}
} catch(Exception e) {
buildErrors.put(e, null);
} finally {
snapshot.restore(mavenProject);
- ThreadBuildContext.setThreadBuildContext(null);
+ for(IIncrementalBuildFramework.BuildContext context : incrementalContexts) {
+ context.release();
+ }
}
// Refresh files modified by build participants/maven plugins
- refreshResources(project, buildContext, monitor);
+ refreshResources(project, participantResults.getFiles(), monitor);
// Process errors and warnings
MavenExecutionResult result = session.getResult();
- processBuildResults(project, mavenProject, result, buildContext, buildErrors);
-
- debugBuildEnd(debugHooks, projectFacade, buildContext, monitor);
+ processBuildResults(project, mavenProject, result, participantResults, buildErrors);
return dependencies;
}
+ private List<IIncrementalBuildFramework.BuildContext> setupProjectBuildContext(IProject project, int kind,
+ IResourceDelta delta, IIncrementalBuildFramework.BuildResultCollector results) throws CoreException {
+ List<IIncrementalBuildFramework.BuildContext> contexts = new ArrayList<IIncrementalBuildFramework.BuildContext>();
+ for(IIncrementalBuildFramework framework : incrementalBuildFrameworks) {
+ contexts.add(framework.setupProjectBuildContext(project, kind, delta, results));
+ }
+ return contexts;
+ }
+
private void debugBuildParticipant(Collection<BuildDebugHook> hooks, IMavenProjectFacade projectFacade,
MojoExecutionKey mojoExecutionKey, AbstractBuildParticipant participant, Set<File> files, IProgressMonitor monitor) {
for(BuildDebugHook hook : hooks) {
@@ -209,12 +210,6 @@ public class MavenBuilderImpl {
}
}
- private void debugBuildEnd(Collection<BuildDebugHook> hooks, IMavenProjectFacade projectFacade,
- AbstractEclipseBuildContext buildContext, IProgressMonitor monitor) {
- for(BuildDebugHook hook : hooks) {
- }
- }
-
protected boolean isApplicable(InternalBuildParticipant participant, int kind, IResourceDelta delta) {
return FULL_BUILD == kind || delta != null || participant.callOnEmptyDelta();
}
@@ -230,9 +225,9 @@ public class MavenBuilderImpl {
}
}
- private void refreshResources(IProject project, AbstractEclipseBuildContext buildContext, IProgressMonitor monitor)
+ private void refreshResources(IProject project, Collection<File> resources, IProgressMonitor monitor)
throws CoreException {
- for(File file : buildContext.getFiles()) {
+ for(File file : resources) {
IPath path = getProjectRelativePath(project, file);
if(path == null) {
log.debug("Could not get relative path for file: ", file.getAbsoluteFile());
@@ -287,11 +282,11 @@ public class MavenBuilderImpl {
}
private void processBuildResults(IProject project, MavenProject mavenProject, MavenExecutionResult result,
- AbstractEclipseBuildContext buildContext, Map<Throwable, MojoExecutionKey> buildErrors) {
+ BuildResultCollector results, Map<Throwable, MojoExecutionKey> buildErrors) {
IMavenMarkerManager markerManager = MavenPluginActivator.getDefault().getMavenMarkerManager();
// Remove obsolete markers for problems reported by build participants
- for(Entry<String, List<File>> entry : buildContext.getRemoveMessages().entrySet()) {
+ for(Entry<String, List<File>> entry : results.getRemoveMessages().entrySet()) {
String buildParticipantId = entry.getKey();
for(File file : entry.getValue()) {
deleteBuildParticipantMarkers(project, markerManager, file, buildParticipantId);
@@ -299,7 +294,7 @@ public class MavenBuilderImpl {
}
// Create new markers for problems reported by build participants
- for(Entry<String, List<Message>> messageEntry : buildContext.getMessages().entrySet()) {
+ for(Entry<String, List<Message>> messageEntry : results.getMessages().entrySet()) {
String buildParticipantId = messageEntry.getKey();
for(Message buildMessage : messageEntry.getValue()) {
addBuildParticipantMarker(project, markerManager, buildMessage, buildParticipantId);
@@ -378,22 +373,20 @@ public class MavenBuilderImpl {
// TODO flush relevant caches
- project.setSessionProperty(BUILD_CONTEXT_KEY, null); // clean context state
+ final BuildResultCollector participantResults = new BuildResultCollector();
+ List<BuildContext> incrementalContexts = setupProjectBuildContext(project, IncrementalProjectBuilder.CLEAN_BUILD,
+ null, participantResults);
Map<Throwable, MojoExecutionKey> buildErrors = new LinkedHashMap<Throwable, MojoExecutionKey>();
- Map<String, Object> contextState = new HashMap<String, Object>();
- EclipseBuildContext buildContext = new EclipseBuildContext(project, contextState);
- ThreadBuildContext.setThreadBuildContext(buildContext);
try {
for(Entry<MojoExecutionKey, List<AbstractBuildParticipant>> entry : participants.entrySet()) {
MojoExecutionKey mojoExecutionKey = entry.getKey();
for(InternalBuildParticipant participant : entry.getValue()) {
- String stringMojoExecutionKey = mojoExecutionKey.getKeyString();
- buildContext.setCurrentBuildParticipantId(stringMojoExecutionKey + "-" + participant.getClass().getName());
+ participantResults.setParticipantId(mojoExecutionKey.getKeyString() + "-" + participant.getClass().getName());
participant.setMavenProjectFacade(projectFacade);
participant.setGetDeltaCallback(getDeltaProvider());
participant.setSession(session);
- participant.setBuildContext(buildContext);
+ participant.setBuildContext((AbstractEclipseBuildContext) incrementalContexts.get(0));
try {
participant.clean(monitor);
} catch(Exception e) {
@@ -412,14 +405,16 @@ public class MavenBuilderImpl {
} catch(Exception e) {
buildErrors.put(e, null);
} finally {
- ThreadBuildContext.setThreadBuildContext(null);
+ for(IIncrementalBuildFramework.BuildContext context : incrementalContexts) {
+ context.release();
+ }
}
// Refresh files modified by build participants/maven plugins
- refreshResources(project, buildContext, monitor);
+ refreshResources(project, participantResults.getFiles(), monitor);
MavenExecutionResult result = session.getResult();
- processBuildResults(project, mavenProject, result, buildContext, buildErrors);
+ processBuildResults(project, mavenProject, result, participantResults, buildErrors);
}
DeltaProvider getDeltaProvider() {

Back to the top