diff options
author | Igor Fedorenko | 2011-07-31 07:58:16 +0000 |
---|---|---|
committer | Igor Fedorenko | 2011-07-31 07:58:16 +0000 |
commit | c47e215285d7c562d2e8c98c52a80349abe070b6 (patch) | |
tree | 7960aca2bfe35fdf5b1745332a7bb24c1b407dfd | |
parent | e288b8a47e935b50a091b259cb96beebbe5c3ee7 (diff) | |
parent | 74e41f5cadf4d515ccb47e38a8656a7b111ef457 (diff) | |
download | m2e-core-c47e215285d7c562d2e8c98c52a80349abe070b6.tar.gz m2e-core-c47e215285d7c562d2e8c98c52a80349abe070b6.tar.xz m2e-core-c47e215285d7c562d2e8c98c52a80349abe070b6.zip |
Merge remote-tracking branch 'origin/master' into m2e-self-hosting
13 files changed, 176 insertions, 91 deletions
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/SelectionUtil.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/SelectionUtil.java index 6266dc6c..eb678252 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/SelectionUtil.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/actions/SelectionUtil.java @@ -325,7 +325,7 @@ public class SelectionUtil { request.setRecursive(false); request.setPom(pomFile); - MavenExecutionResult result = maven.execute(request, monitor); + MavenExecutionResult result = maven.readProject(request, monitor); MavenProject project = result.getProject(); if(project!=null) { diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java index 8efc3c68..e68e5293 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java @@ -131,7 +131,9 @@ public class PomEdits { Node child = list.item(i); if (child instanceof Text) { Text text = (Text)child; - buff.append(text.getData()); + buff.append(text.getData().trim()); //352416 the value is trimmed because of the multiline values + //that get trimmed by maven itself as well, any comparison to resolved model needs to do the trimming + // or risks false negative results. } } return buff.toString(); @@ -414,9 +416,9 @@ public class PomEdits { if (tuple.isReadOnly()) { domModel.releaseFromRead(); } else { - //for ducuments saving shall only happen when the model is not held elsewhere (eg. in opened view) + //for ducuments saving shall generally only happen when the model is not held elsewhere (eg. in opened view) //for files, save always - if(tuple.getFile() != null || domModel.getReferenceCountForEdit() == 1) { + if(tuple.isForceSave() || domModel.getReferenceCountForEdit() == 1) { domModel.save(); } domModel.releaseFromEdit(); @@ -432,6 +434,7 @@ public class PomEdits { private final IDocument document; private final IDOMModel model; private boolean readOnly = false; + private boolean forceSave = false; /** * operation on top of IFile is always saved @@ -445,6 +448,7 @@ public class PomEdits { this.operation = operation; document = null; model = null; + forceSave = true; } /** * operation on top of IDocument is only saved when noone else is editing the document. @@ -482,6 +486,17 @@ public class PomEdits { } /** + * force saving the document after performing the operation + */ + public void setForceSave() { + forceSave = true; + } + + public boolean isForceSave() { + return forceSave; + } + + /** * @return Returns the readOnly. */ public boolean isReadOnly() { diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomHelper.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomHelper.java index 00dae4b4..97c765f6 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomHelper.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomHelper.java @@ -8,25 +8,7 @@ package org.eclipse.m2e.core.ui.internal.editing; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.ARTIFACT_ID; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.CLASSIFIER; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.DEPENDENCIES; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.DEPENDENCY; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.GROUP_ID; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.PLUGIN; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.SCOPE; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.TYPE; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.VERSION; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.childEquals; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.createElement; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.createElementWithText; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.findChild; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.findChilds; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.format; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.getChild; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.performOnDOMDocument; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.removeChild; -import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.setText; +import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.*; import java.util.List; @@ -37,6 +19,8 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.text.IDocument; import org.eclipse.ltk.core.refactoring.TextChange; +import org.eclipse.ltk.core.refactoring.TextFileChange; + import org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator; import org.eclipse.m2e.core.ui.internal.Messages; import org.eclipse.m2e.core.ui.internal.editing.PomEdits.Operation; @@ -90,9 +74,17 @@ public final class PomHelper { } return false; } - + /** + * + * @param file + * @param operation + * @param label + * @param forceSave if true will save all files, no matter if associated document is opened in editor area or not. + * @return + * @throws CoreException + */ @SuppressWarnings("restriction") - public static TextChange createChange(IFile file, Operation operation, String label) throws CoreException { + public static TextChange createChange(IFile file, Operation operation, String label, boolean forceSave) throws CoreException { IStructuredModel model = null; try { model = StructuredModelManager.getModelManager().getModelForRead(file); @@ -104,7 +96,13 @@ public final class PomHelper { IDocument tempDocument = tempModel.getStructuredDocument(); performOnDOMDocument(new OperationTuple((IDOMModel) tempModel, operation)); - return new ChangeCreator(existing ? null : file, document, tempDocument, label).createChange(); + TextChange change = new ChangeCreator(!forceSave && existing ? null : file, document, tempDocument, label).createChange(); + if (forceSave) assert change instanceof TextFileChange; //if assert not fullfilled, we will not get the file saved.. + + if (forceSave && change instanceof TextFileChange) { + ((TextFileChange)change).setSaveMode(TextFileChange.FORCE_SAVE); + } + return change; } catch(Exception exc) { LOG.error(Messages.PomHelper_errorCreatingChange, exc); throw new CoreException(new Status(IStatus.ERROR, M2EUIPluginActivator.PLUGIN_ID, @@ -117,6 +115,18 @@ public final class PomHelper { } /** + * by default will create a change that won't save files with opened documents + * @param file + * @param operation + * @param label + * @return + * @throws CoreException + */ + public static TextChange createChange(IFile file, Operation operation, String label) throws CoreException { + return createChange(file, operation, label, false); + } + + /** * creates and adds new plugin to the parent. Formats the result. * @param parentList * @param groupId null or value diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/markers/MarkerResolutionGenerator.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/markers/MarkerResolutionGenerator.java index d22bf72f..18f66844 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/markers/MarkerResolutionGenerator.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/markers/MarkerResolutionGenerator.java @@ -53,18 +53,27 @@ public class MarkerResolutionGenerator implements IMarkerResolutionGenerator, IM //important for 335299 IMarkerResolution[] cached = (IMarkerResolution[]) marker.getResource().getSessionProperty(QUALIFIED); if (cached == null) { - cached = new IMarkerResolution[] {new RefreshResolution()}; + cached = new IMarkerResolution[] {new RefreshResolution(marker)}; marker.getResource().setSessionProperty(QUALIFIED, cached); } return cached; } catch(CoreException e) { - return new IMarkerResolution[] {new RefreshResolution()}; + return new IMarkerResolution[] {new RefreshResolution(marker)}; } } private class RefreshResolution extends WorkbenchMarkerResolution { + private IMarker marker; + + /** + * @param marker + */ + public RefreshResolution(IMarker marker) { + this.marker = marker; + } + /* (non-Javadoc) * @see org.eclipse.ui.IMarkerResolution2#getDescription() */ @@ -127,7 +136,7 @@ public class MarkerResolutionGenerator implements IMarkerResolutionGenerator, IM List<IMarker> toRet = new ArrayList<IMarker>(); for (IMarker m : markers) { try { - if (IMavenConstants.MARKER_CONFIGURATION_ID.equals(m.getType())) { + if (IMavenConstants.MARKER_CONFIGURATION_ID.equals(m.getType()) && m != marker) { //TODO is this the only condition for lifecycle markers toRet.add(m); } 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 169fa3b8..b08ac264 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 @@ -174,6 +174,7 @@ public class MavenBuilder extends IncrementalProjectBuilder { participant.setGetDeltaCallback(getDeltaCallback); participant.setSession(session); participant.setBuildContext(buildContext); + long executionStartTime = System.currentTimeMillis(); try { if(FULL_BUILD == kind || delta != null || participant.callOnEmptyDelta()) { Set<IProject> sub = participant.build(kind, monitor); @@ -185,6 +186,9 @@ public class MavenBuilder extends IncrementalProjectBuilder { log.debug("Exception in build participant {}", participant.getClass().getName(), e); buildErrors.put(e, mojoExecutionKey); } finally { + log.debug("Finished executing build participant {} for plugin execution {} in {} ms", new Object[] { + participant.getClass().getName(), mojoExecutionKey.toString(), + System.currentTimeMillis() - executionStartTime}); participant.setMavenProjectFacade(null); participant.setGetDeltaCallback(null); participant.setSession(null); diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java index 5d35bdb0..056a9d93 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java @@ -20,12 +20,17 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Properties; +import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -74,7 +79,9 @@ import org.apache.maven.execution.MavenExecutionResult; import org.apache.maven.execution.MavenSession; import org.apache.maven.lifecycle.LifecycleExecutor; import org.apache.maven.lifecycle.MavenExecutionPlan; +import org.apache.maven.lifecycle.internal.DependencyContext; import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator; +import org.apache.maven.lifecycle.internal.MojoExecutor; import org.apache.maven.model.ConfigurationContainer; import org.apache.maven.model.InputLocation; import org.apache.maven.model.Model; @@ -286,10 +293,31 @@ public class MavenImpl implements IMaven, IMavenConfigurationChangeListener { } public void execute(MavenSession session, MojoExecution execution, IProgressMonitor monitor) { + Map<MavenProject, Set<Artifact>> artifacts = new HashMap<MavenProject, Set<Artifact>>(); + for(MavenProject project : session.getProjects()) { + artifacts.put(project, new LinkedHashSet<Artifact>(project.getArtifacts())); + } try { + MojoExecutor mojoExecutor = lookup(MojoExecutor.class); + DependencyContext dependencyContext = mojoExecutor.newDependencyContext(session, + Collections.singletonList(execution)); + + // workaround for http://jira.codehaus.org/browse/MNG-5141 + // use reflection until we can get maven 3.0.4+, which has MNG-5141 fixed + Method ensureDependenciesAreResolved = mojoExecutor.getClass().getDeclaredMethod("ensureDependenciesAreResolved", + MojoDescriptor.class, MavenSession.class, DependencyContext.class); + ensureDependenciesAreResolved.setAccessible(true); + ensureDependenciesAreResolved.invoke(mojoExecutor, execution.getMojoDescriptor(), session, dependencyContext); + lookup(BuildPluginManager.class).executeMojo(session, execution); } catch(Exception ex) { session.getResult().addException(ex); + } finally { + for(MavenProject project : session.getProjects()) { + project.setArtifactFilter(null); + project.setResolvedArtifacts(null); + project.setArtifacts(artifacts.get(project)); + } } } diff --git a/org.eclipse.m2e.editor.xml/src/main/java/org/eclipse/m2e/editor/xml/InsertArtifactProposal.java b/org.eclipse.m2e.editor.xml/src/main/java/org/eclipse/m2e/editor/xml/InsertArtifactProposal.java index e9e6b570..3587ff0d 100644 --- a/org.eclipse.m2e.editor.xml/src/main/java/org/eclipse/m2e/editor/xml/InsertArtifactProposal.java +++ b/org.eclipse.m2e.editor.xml/src/main/java/org/eclipse/m2e/editor/xml/InsertArtifactProposal.java @@ -209,6 +209,13 @@ public class InsertArtifactProposal implements ICompletionProposal, ICompletionP if (fDialog.getSelectedScope() != null && !"compile".equals(fDialog.getSelectedScope())) { setText(getChild(dependency, SCOPE), fDialog.getSelectedScope()); } + if (af.type != null && !"jar".equals(af.type) + && !"null".equals(af.type)) { // guard against MNGECLIPSE-622 //$NON-NLS-1$) + setText(getChild(dependency, TYPE), af.type); + } + if (af.classifier != null) { + setText(getChild(dependency, CLASSIFIER), af.classifier); + } format(toFormat); generatedOffset = ((IndexedRegion)toFormat).getStartOffset(); generatedLength = ((IndexedRegion)toFormat).getEndOffset() - generatedOffset; diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java index b6ff0272..d3c23aae 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java @@ -607,26 +607,6 @@ public class DependenciesComposite extends Composite { } - /** mkleint: apparently this methods shall find the version in resolved pom for the given dependency - * not sure if getBaseVersion is the way to go.. - * Note: duplicated in DependencyDetailsComposite - * @param groupId - * @param artifactId - * @param monitor - * @return - */ - String getVersion(String groupId, String artifactId, IProgressMonitor monitor) { - try { - MavenProject mavenProject = editorPage.getPomEditor().readMavenProject(false, monitor); - Artifact a = mavenProject.getArtifactMap().get(groupId + ":" + artifactId); //$NON-NLS-1$ - if(a != null) { - return a.getBaseVersion(); - } - } catch(CoreException ex) { - log.error(ex.getMessage(), ex); - } - return null; - } public static class DependencyFilter extends ViewerFilter { private SearchMatcher searchMatcher; diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java index ebef4b0f..324f3bdb 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java @@ -139,7 +139,7 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene StructuredTextEditor effectivePomSourcePage; - List<MavenPomEditorPage> pages = new ArrayList<MavenPomEditorPage>(); + private List<MavenPomEditorPage> mavenpomEditorPages = new ArrayList<MavenPomEditorPage>(); private Map<String, org.sonatype.aether.graph.DependencyNode> rootNodes = new HashMap<String, org.sonatype.aether.graph.DependencyNode>(); @@ -300,7 +300,7 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene Display.getDefault().asyncExec(new Runnable() { public void run() { - for(MavenPomEditorPage page : pages) { + for(MavenPomEditorPage page : getMavenPomEditorPages()) { page.setErrorMessage(msg, msg == null ? IMessageProvider.NONE : severity); } } @@ -322,8 +322,11 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene public void reload() { int active = getActivePage(); - if (active > -1) { - MavenPomEditorPage page = getPages().get(active); + //this code assumes the MavenPomEditorPages are the first ones in the list.. + //currenty the case, effective+xml editor are at the end.. + //if this constraint changes, we need to find the active page in the super.pages list first and check for instanceof + if (active > -1 && active < getMavenPomEditorPages().size()) { + MavenPomEditorPage page = getMavenPomEditorPages().get(active); page.loadData(); } if(isEffectiveActive()){ @@ -666,7 +669,7 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene private int addPomPage(IFormPage page) { try { if(page instanceof MavenPomEditorPage) { - pages.add((MavenPomEditorPage) page); + mavenpomEditorPages.add((MavenPomEditorPage) page); } if (page instanceof IPomFileChangedListener) { fileChangeListeners.add((IPomFileChangedListener) page); @@ -858,8 +861,22 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene return sourcePage.isDirty(); } + /** + * returns only the pages that implement MavenPomEditorPage + * will not return the effective pom and xml editor page for example.. + * @return + */ + public List<MavenPomEditorPage> getMavenPomEditorPages() { + return mavenpomEditorPages; + } + + /** + * use the <code>getMavenPomEditorPages()</code> method instead + * @return + */ + @Deprecated public List<MavenPomEditorPage> getPages() { - return pages; + return getMavenPomEditorPages(); } public void showDependencyHierarchy(ArtifactKey artifactKey) { @@ -1089,7 +1106,7 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene if (getContainer() != null && !getContainer().isDisposed()) getContainer().getDisplay().asyncExec(new Runnable() { public void run() { - for (MavenPomEditorPage page : getPages()) { + for (MavenPomEditorPage page : getMavenPomEditorPages()) { page.mavenProjectHasChanged(); } } diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java index f5e58998..3ca126af 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java @@ -338,8 +338,8 @@ public abstract class MavenPomEditorPage extends FormPage { if (getPartControl() != null && !getPartControl().isDisposed()) { getPartControl().getDisplay().asyncExec(new Runnable() { public void run() { - FormHoverProvider.Execute runnable = FormHoverProvider.createHoverRunnable(getManagedForm().getForm().getShell(), markers, getPomEditor().getSourcePage().getTextViewer()); if (!getManagedForm().getForm().isDisposed()) { + FormHoverProvider.Execute runnable = FormHoverProvider.createHoverRunnable(getManagedForm().getForm().getShell(), markers, getPomEditor().getSourcePage().getTextViewer()); if (runnable != null) { FormUtils.setMessageWithPerformer(getManagedForm().getForm(), msg, severity, runnable); } else { diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/IClasspathDescriptor.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/IClasspathDescriptor.java index 426dd3aa..9633121d 100644 --- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/IClasspathDescriptor.java +++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/IClasspathDescriptor.java @@ -22,7 +22,7 @@ import org.eclipse.m2e.core.project.IMavenProjectFacade; /** - * Instances of this class can be used to incrementally define IClasspathEntry[] arrays used by JDT to decribe Java + * Instances of this class can be used to incrementally define IClasspathEntry[] arrays used by JDT to describe Java * Project classpath and contents of Java classpath containers. * * @author igor diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java index 00147116..e0a69e4d 100644 --- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java +++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java @@ -253,37 +253,41 @@ public abstract class AbstractJavaProjectConfigurator extends AbstractProjectCon MavenSession mavenSession = request.getMavenSession(); - for(MojoExecution compile : projectFacade.getMojoExecutions(COMPILER_PLUGIN_GROUP_ID, - COMPILER_PLUGIN_ARTIFACT_ID, mon.newChild(1), GOAL_COMPILE)) { - mainSourceEncoding = maven.getMojoParameterValue(mavenSession, compile, "encoding", String.class); //$NON-NLS-1$ - try { - inclusion = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, - "includes", String[].class)); //$NON-NLS-1$ - } catch(CoreException ex) { - log.error("Failed to determine compiler inclusions, assuming defaults", ex); - } - try { - exclusion = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, - "excludes", String[].class)); //$NON-NLS-1$ - } catch(CoreException ex) { - log.error("Failed to determine compiler exclusions, assuming defaults", ex); + List<MojoExecution> executions = getCompilerMojoExecutions(request, mon.newChild(1)); + + for(MojoExecution compile : executions) { + if(isCompileExecution(compile)) { + mainSourceEncoding = maven.getMojoParameterValue(mavenSession, compile, "encoding", String.class); //$NON-NLS-1$ + try { + inclusion = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, + "includes", String[].class)); //$NON-NLS-1$ + } catch(CoreException ex) { + log.error("Failed to determine compiler inclusions, assuming defaults", ex); + } + try { + exclusion = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, + "excludes", String[].class)); //$NON-NLS-1$ + } catch(CoreException ex) { + log.error("Failed to determine compiler exclusions, assuming defaults", ex); + } } } - for(MojoExecution compile : projectFacade.getMojoExecutions(COMPILER_PLUGIN_GROUP_ID, - COMPILER_PLUGIN_ARTIFACT_ID, mon.newChild(1), GOAL_TESTCOMPILE)) { - testSourceEncoding = maven.getMojoParameterValue(mavenSession, compile, "encoding", String.class); //$NON-NLS-1$ - try { - inclusionTest = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, - "testIncludes", String[].class)); //$NON-NLS-1$ - } catch(CoreException ex) { - log.error("Failed to determine compiler test inclusions, assuming defaults", ex); - } - try { - exclusionTest = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, - "testExcludes", String[].class)); //$NON-NLS-1$ - } catch(CoreException ex) { - log.error("Failed to determine compiler test exclusions, assuming defaults", ex); + for(MojoExecution compile : executions) { + if(isTestCompileExecution(compile)) { + testSourceEncoding = maven.getMojoParameterValue(mavenSession, compile, "encoding", String.class); //$NON-NLS-1$ + try { + inclusionTest = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, + "testIncludes", String[].class)); //$NON-NLS-1$ + } catch(CoreException ex) { + log.error("Failed to determine compiler test inclusions, assuming defaults", ex); + } + try { + exclusionTest = toPaths(maven.getMojoParameterValue(request.getMavenSession(), compile, + "testExcludes", String[].class)); //$NON-NLS-1$ + } catch(CoreException ex) { + log.error("Failed to determine compiler test exclusions, assuming defaults", ex); + } } } @@ -311,6 +315,14 @@ public abstract class AbstractJavaProjectConfigurator extends AbstractProjectCon } } + protected boolean isTestCompileExecution(MojoExecution execution) { + return GOAL_TESTCOMPILE.equals(execution.getGoal()); + } + + protected boolean isCompileExecution(MojoExecution execution) { + return GOAL_COMPILE.equals(execution.getGoal()); + } + private IPath[] toPaths(String[] values) { if(values == null) { return new IPath[0]; @@ -410,12 +422,9 @@ public abstract class AbstractJavaProjectConfigurator extends AbstractProjectCon String source = null, target = null; - for(MojoExecution execution : request.getMavenProjectFacade().getMojoExecutions(COMPILER_PLUGIN_GROUP_ID, - COMPILER_PLUGIN_ARTIFACT_ID, monitor, GOAL_COMPILE, GOAL_TESTCOMPILE)) { - + for(MojoExecution execution : getCompilerMojoExecutions(request, monitor)) { source = getCompilerLevel(mavenSession, execution, "source", source, SOURCES); //$NON-NLS-1$ target = getCompilerLevel(mavenSession, execution, "target", target, TARGETS); //$NON-NLS-1$ - } if(source == null) { @@ -434,6 +443,12 @@ public abstract class AbstractJavaProjectConfigurator extends AbstractProjectCon options.put(JavaCore.COMPILER_PB_FORBIDDEN_REFERENCE, "warning"); //$NON-NLS-1$ } + protected List<MojoExecution> getCompilerMojoExecutions(ProjectConfigurationRequest request, IProgressMonitor monitor) + throws CoreException { + return request.getMavenProjectFacade().getMojoExecutions(COMPILER_PLUGIN_GROUP_ID, + COMPILER_PLUGIN_ARTIFACT_ID, monitor, GOAL_COMPILE, GOAL_TESTCOMPILE); + } + private String getCompilerLevel(MavenSession session, MojoExecution execution, String parameter, String source, List<String> levels) { int levelIdx = getLevelIndex(source, levels); diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/launch/MavenRuntimeClasspathProvider.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/launch/MavenRuntimeClasspathProvider.java index 93260fa2..938ec521 100644 --- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/launch/MavenRuntimeClasspathProvider.java +++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/launch/MavenRuntimeClasspathProvider.java @@ -139,7 +139,7 @@ public class MavenRuntimeClasspathProvider extends StandardClasspathProvider { IJavaProject javaProject = JavaRuntime.getJavaProject(configuration); MavenJdtPlugin plugin = MavenJdtPlugin.getDefault(); IClasspathManager buildpathManager = plugin.getBuildpathManager(); - IClasspathEntry[] cp = buildpathManager.getClasspath(javaProject.getProject(), scope, false, new NullProgressMonitor()); + IClasspathEntry[] cp = buildpathManager.getClasspath(javaProject.getProject(), scope, false, monitor); for(IClasspathEntry entry : cp) { switch (entry.getEntryKind()) { case IClasspathEntry.CPE_PROJECT: |