Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2013-01-24 04:24:23 +0000
committerIgor Fedorenko2013-02-16 16:41:50 +0000
commite03d2925e0632053312539edef7350e37783963f (patch)
treee22c59b784215ec6512729446c198f2322c3c56a /org.eclipse.m2e.core
parent293a1c09ed3ec5401093b7b3b783ea161838b6f0 (diff)
downloadm2e-core-e03d2925e0632053312539edef7350e37783963f.tar.gz
m2e-core-e03d2925e0632053312539edef7350e37783963f.tar.xz
m2e-core-e03d2925e0632053312539edef7350e37783963f.zip
initial prototype of build troubleshooting view
Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (limited to 'org.eclipse.m2e.core')
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/BuildDebugHook.java39
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java34
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilderImpl.java46
3 files changed, 118 insertions, 1 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/BuildDebugHook.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/BuildDebugHook.java
new file mode 100644
index 00000000..e81d2cf6
--- /dev/null
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/BuildDebugHook.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Igor Fedorenko
+ * 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:
+ * Igor Fedorenko - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.core.internal.builder;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.m2e.core.project.IMavenProjectFacade;
+import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant;
+import org.eclipse.m2e.core.project.configurator.MojoExecutionKey;
+
+
+/**
+ * @noreference This internal interface can be changed or removed without notice.
+ * @since 1.4
+ */
+public interface BuildDebugHook {
+
+ public void buildStart(IMavenProjectFacade projectFacade, int kind, Map<String, String> args,
+ Map<MojoExecutionKey, List<AbstractBuildParticipant>> participants, IResourceDelta delta, IProgressMonitor monitor);
+
+ public void buildParticipant(IMavenProjectFacade projectFacade, MojoExecutionKey mojoExecutionKey,
+ AbstractBuildParticipant participant, Set<File> files, IProgressMonitor monitor);
+
+}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java
index ae424ab9..616d2781 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java
@@ -11,8 +11,11 @@
package org.eclipse.m2e.core.internal.builder;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
@@ -204,4 +207,35 @@ public class MavenBuilder extends IncrementalProjectBuilder implements DeltaProv
return projectFacade;
}
+
+ private static final List<BuildDebugHook> debugHooks = new ArrayList<BuildDebugHook>();
+
+ public static void addDebugHook(BuildDebugHook hook) {
+ synchronized(debugHooks) {
+ for(BuildDebugHook other : debugHooks) {
+ if(other == hook) {
+ return;
+ }
+ }
+ debugHooks.add(hook);
+ }
+ }
+
+ public static void removeDebugHook(BuildDebugHook hook) {
+ synchronized(debugHooks) {
+ ListIterator<BuildDebugHook> iter = debugHooks.listIterator();
+ while(iter.hasNext()) {
+ if(iter.next() == hook) {
+ iter.remove();
+ break;
+ }
+ }
+ }
+ }
+
+ public static Collection<BuildDebugHook> getDebugHooks() {
+ synchronized(debugHooks) {
+ return new ArrayList<BuildDebugHook>(debugHooks);
+ }
+ }
}
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 49907418..91aeee8d 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
@@ -16,10 +16,12 @@ 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.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -83,6 +85,8 @@ public class MavenBuilderImpl {
public Set<IProject> build(MavenSession session, IMavenProjectFacade projectFacade, int kind,
Map<String, String> args, Map<MojoExecutionKey, List<AbstractBuildParticipant>> participants,
IProgressMonitor monitor) throws CoreException {
+ Collection<BuildDebugHook> debugHooks = MavenBuilder.getDebugHooks();
+
Set<IProject> dependencies = new HashSet<IProject>();
MavenProject mavenProject = projectFacade.getMavenProject();
@@ -106,13 +110,17 @@ public class MavenBuilderImpl {
}
}
+ 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()) {
- MojoExecutionKey mojoExecutionKey = entry.getKey();
+ Set<File> debugRefreshFiles = !debugHooks.isEmpty() ? new LinkedHashSet<File>(buildContext.getFiles()) : null;
+
log.debug("Executing build participant {} for plugin execution {}", participant.getClass().getName(),
mojoExecutionKey.toString());
String stringMojoExecutionKey = mojoExecutionKey.getKeyString();
@@ -149,6 +157,9 @@ public class MavenBuilderImpl {
processMavenSessionErrors(session, mojoExecutionKey, buildErrors);
}
+
+ debugBuildParticipant(debugHooks, projectFacade, mojoExecutionKey, (AbstractBuildParticipant) participant,
+ diff(debugRefreshFiles, buildContext.getFiles()), monitor);
}
}
} catch(Exception e) {
@@ -164,9 +175,42 @@ public class MavenBuilderImpl {
// Process errors and warnings
MavenExecutionResult result = session.getResult();
processBuildResults(project, mavenProject, result, buildContext, buildErrors);
+
+ debugBuildEnd(debugHooks, projectFacade, buildContext, monitor);
+
return dependencies;
}
+ private void debugBuildParticipant(Collection<BuildDebugHook> hooks, IMavenProjectFacade projectFacade,
+ MojoExecutionKey mojoExecutionKey, AbstractBuildParticipant participant, Set<File> files, IProgressMonitor monitor) {
+ for(BuildDebugHook hook : hooks) {
+ hook.buildParticipant(projectFacade, mojoExecutionKey, participant, files, monitor);
+ }
+ }
+
+ private Set<File> diff(Set<File> before, Set<File> after) {
+ if(before == null) {
+ return after;
+ }
+ Set<File> result = new LinkedHashSet<File>(after);
+ result.removeAll(before);
+ return result;
+ }
+
+ private void debugBuildStart(Collection<BuildDebugHook> hooks, IMavenProjectFacade projectFacade, int kind,
+ Map<String, String> args, Map<MojoExecutionKey, List<AbstractBuildParticipant>> participants,
+ IResourceDelta delta, IProgressMonitor monitor) {
+ for(BuildDebugHook hook : hooks) {
+ hook.buildStart(projectFacade, kind, args, participants, delta, monitor);
+ }
+ }
+
+ 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();
}

Back to the top