Skip to content

Commit

Permalink
Merge pull request #5422 from timothyjward/fix/m2e-version
Browse files Browse the repository at this point in the history
[m2e] Remove references to internal packages and avoid static methods
  • Loading branch information
bjhargrave committed Nov 11, 2022
2 parents 6e6d57f + 2f264b7 commit 8598911
Show file tree
Hide file tree
Showing 16 changed files with 286 additions and 150 deletions.
2 changes: 1 addition & 1 deletion bndtools.m2e/bnd.bnd
Expand Up @@ -45,7 +45,7 @@ Bundle-ActivationPolicy: lazy
Import-Package: \
org.apache.maven.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,4);${@bundleversion}}";version=!,\
org.eclipse.aether.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,4);${@bundleversion}}";version=!,\
org.eclipse.m2e.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,4);${@bundleversion}}";version=!,\
org.eclipse.m2e.core.*;bundle-symbolic-name="${@bundlesymbolicname}";bundle-version="${range;[==,3);${@bundleversion}}";version=!,\
${eclipse.importpackage},\
*

Expand Down
9 changes: 6 additions & 3 deletions bndtools.m2e/src/bndtools/m2e/AbstractMavenRepository.java
Expand Up @@ -7,7 +7,6 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.ArtifactKey;
import org.eclipse.m2e.core.project.IMavenProjectChangedListener;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
Expand All @@ -19,9 +18,13 @@
import aQute.bnd.service.RepositoryPlugin;

public abstract class AbstractMavenRepository extends BaseRepository
implements MavenRunListenerHelper, Repository, RepositoryPlugin, IMavenProjectChangedListener {
implements Repository, RepositoryPlugin, IMavenProjectChangedListener {

final IMavenProjectRegistry mavenProjectRegistry = MavenPlugin.getMavenProjectRegistry();
final IMavenProjectRegistry mavenProjectRegistry;

protected AbstractMavenRepository(IMavenProjectRegistry mavenProjectRegistry) {
this.mavenProjectRegistry = mavenProjectRegistry;
}

@Override
public boolean canWrite() {
Expand Down
47 changes: 37 additions & 10 deletions bndtools.m2e/src/bndtools/m2e/Activator.java
@@ -1,32 +1,59 @@
package bndtools.m2e;

import org.eclipse.m2e.core.internal.MavenPluginActivator;
import org.eclipse.m2e.core.internal.project.registry.MavenProjectManager;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.project.IMavenProjectRegistry;
import org.osgi.annotation.bundle.Header;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;

import aQute.bnd.osgi.Constants;

@Header(name = Constants.BUNDLE_ACTIVATOR, value = "${@class}")
public class Activator implements BundleActivator {

/**
* M2E version 2 has implicit support for whiteboard listeners and registers
* services. This activator helps us to work in both situations.
*/
private boolean isM2E_v2;

private MavenProjectChangedListenersTracker projectChangedListenersTracker;

@Override
public void start(BundleContext context) throws Exception {
projectChangedListenersTracker = new MavenProjectChangedListenersTracker();
MavenProjectManager projectManager = MavenPluginActivator.getDefault()
.getMavenProjectManager();
projectManager.addMavenProjectChangedListener(projectChangedListenersTracker);
Bundle bundle = FrameworkUtil.getBundle(MavenPlugin.class);
isM2E_v2 = bundle.getVersion()
.getMajor() == 2;

if (!isM2E_v2) {
projectChangedListenersTracker = new MavenProjectChangedListenersTracker();
IMavenProjectRegistry projectManager = MavenPlugin.getMavenProjectRegistry();
projectManager.addMavenProjectChangedListener(projectChangedListenersTracker);

registerM2EServices(context);
}
}

/**
* These services should only be registered if running on M2E 1.x
*
* @param context
*/
private void registerM2EServices(BundleContext context) {
context.registerService(IMaven.class, MavenPlugin.getMaven(), null);
context.registerService(IMavenProjectRegistry.class, MavenPlugin.getMavenProjectRegistry(), null);
}

@Override
public void stop(BundleContext context) throws Exception {
MavenProjectManager projectManager = MavenPluginActivator.getDefault()
.getMavenProjectManager();
projectManager.removeMavenProjectChangedListener(projectChangedListenersTracker);
projectChangedListenersTracker.close();
if (!isM2E_v2) {
IMavenProjectRegistry projectManager = MavenPlugin.getMavenProjectRegistry();
projectManager.removeMavenProjectChangedListener(projectChangedListenersTracker);
projectChangedListenersTracker.close();
}
}

}
28 changes: 9 additions & 19 deletions bndtools.m2e/src/bndtools/m2e/BndConfigurator.java
Expand Up @@ -33,18 +33,13 @@
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.core.IJavaModelMarker;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.ArtifactKey;
import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
import org.eclipse.m2e.core.internal.MavenPluginActivator;
import org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager;
import org.eclipse.m2e.core.lifecyclemapping.model.IPluginExecutionMetadata;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.project.ResolverConfiguration;
import org.eclipse.m2e.core.project.IMavenProjectRegistry;
import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant;
import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant2;
import org.eclipse.m2e.core.project.configurator.AbstractProjectConfigurator;
import org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant;
import org.eclipse.m2e.core.project.configurator.ProjectConfigurationRequest;
import org.osgi.service.component.annotations.Component;
Expand All @@ -55,7 +50,7 @@
import aQute.bnd.osgi.Jar;
import aQute.bnd.osgi.Packages;

public class BndConfigurator extends AbstractProjectConfigurator {
public class BndConfigurator extends ServiceAwareM2EConfigurator {

private static final String ARTIFACT_PATTERN = "%s-%s.%s";
private static final String CLASSIFIER_ARTIFACT_PATTERN = "%s-%s-%s.%s";
Expand Down Expand Up @@ -190,7 +185,8 @@ public Set<IProject> build(int kind, IProgressMonitor monitor) throws Exception
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
try {
SubMonitor progress = SubMonitor.convert(monitor, 3);
execJarMojo(projectFacade, progress.split(1, SubMonitor.SUPPRESS_NONE), isTest);
execJarMojo(getMaven(), getRegistry(), projectFacade,
progress.split(1, SubMonitor.SUPPRESS_NONE), isTest);

// We need to trigger a refresh
IPath targetDirPath = Path.fromOSString(targetDirectory);
Expand Down Expand Up @@ -299,19 +295,13 @@ private MavenProject getMavenProject(final IMavenProjectFacade projectFacade, IP
return mavenProject;
}

private void execJarMojo(final IMavenProjectFacade projectFacade, IProgressMonitor monitor, boolean isTest)
private void execJarMojo(IMaven maven, IMavenProjectRegistry projectRegistry,
final IMavenProjectFacade projectFacade, IProgressMonitor monitor, boolean isTest)
throws CoreException {
final IMaven maven = MavenPlugin.getMaven();
ProjectRegistryManager projectRegistryManager = MavenPluginActivator.getDefault()
.getMavenProjectManagerImpl();
projectFacade.getResolverConfiguration()
.setResolveWorkspaceProjects(true);

ResolverConfiguration resolverConfiguration = new ResolverConfiguration();
resolverConfiguration.setResolveWorkspaceProjects(true);

IMavenExecutionContext context = projectRegistryManager.createExecutionContext(projectFacade.getPom(),
resolverConfiguration);

context.execute((context1, monitor1) -> {
projectRegistry.execute(projectFacade, (context1, monitor1) -> {
SubMonitor progress = SubMonitor.convert(monitor1);
MavenProject mavenProject = getMavenProject(projectFacade, progress.split(1));

Expand Down
41 changes: 23 additions & 18 deletions bndtools.m2e/src/bndtools/m2e/IndexConfigurator.java
Expand Up @@ -36,22 +36,21 @@
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.core.IJavaModelMarker;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.ArtifactKey;
import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
import org.eclipse.m2e.core.lifecyclemapping.model.IPluginExecutionMetadata;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.project.IMavenProjectRegistry;
import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant;
import org.eclipse.m2e.core.project.configurator.AbstractProjectConfigurator;
import org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant;
import org.eclipse.m2e.core.project.configurator.MojoExecutionKey;
import org.eclipse.m2e.core.project.configurator.ProjectConfigurationRequest;

import aQute.bnd.exceptions.Exceptions;
import aQute.maven.api.Archive;

public class IndexConfigurator extends AbstractProjectConfigurator implements IResourceChangeListener {
public class IndexConfigurator extends ServiceAwareM2EConfigurator implements IResourceChangeListener {

private static final String INDEXER_PLUGIN_ARTIFACT_ID = "bnd-indexer-maven-plugin";
private static final String INDEXER_PLUGIN_GROUP_ID = "biz.aQute.bnd";
Expand All @@ -67,6 +66,13 @@ private static final class IndexerWorkspaceRepository extends LocalArtifactRepos

private final WorkspaceRepository wr = new WorkspaceRepository("index", getClass());

private final IMavenProjectRegistry registry;

public IndexerWorkspaceRepository(IMavenProjectRegistry registry) {
super();
this.registry = registry;
}

@Override
public boolean hasLocalMetadata() {
return false;
Expand All @@ -86,8 +92,7 @@ public Artifact find(Artifact artifact) {
}

private File find(String groupId, String artifactId, String version, String extension) {
IMavenProjectFacade found = MavenPlugin.getMavenProjectRegistry()
.getMavenProject(groupId, artifactId, version);
IMavenProjectFacade found = registry.getMavenProject(groupId, artifactId, version);

if (found != null) {
return getMavenOutputFile(extension, found, progress.split(1));
Expand All @@ -104,8 +109,7 @@ public File findArtifact(org.eclipse.aether.artifact.Artifact artifact) {
@Override
public List<String> findVersions(org.eclipse.aether.artifact.Artifact artifact) {
List<String> versions = new ArrayList<>();
for (IMavenProjectFacade facade : MavenPlugin.getMavenProjectRegistry()
.getProjects()) {
for (IMavenProjectFacade facade : registry.getProjects()) {
ArtifactKey key = facade.getArtifactKey();
if (key.getArtifactId()
.equals(artifact.getArtifactId())
Expand All @@ -132,8 +136,14 @@ private static final class RebuildIndexCheck extends WorkspaceJob {

private boolean noMoreEvents;

public RebuildIndexCheck(String name, IResourceChangeEvent event, IMavenProjectFacade facade) {
private final IMaven maven;
private final IMavenProjectRegistry registry;

public RebuildIndexCheck(IMaven maven, IMavenProjectRegistry registry, String name, IResourceChangeEvent event,
IMavenProjectFacade facade) {
super(name);
this.maven = maven;
this.registry = registry;
this.events.add(event);
this.facade = facade;
}
Expand Down Expand Up @@ -176,8 +186,7 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
IProject[] refs = facade.getProject()
.getReferencedProjects();
for (int i = 0; !needsBuild && i < refs.length; i++) {
IMavenProjectFacade pf = MavenPlugin.getMavenProjectRegistry()
.getProject(refs[i]);
IMavenProjectFacade pf = registry.getProject(refs[i]);
needsBuild = pf != null ? needsBuild(delta, keysToTypes, pf, progress.split(1)) : false;
}

Expand All @@ -199,8 +208,7 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
list.size());
list.forEach(me -> {
try {
MavenPlugin.getMaven()
.execute(getMavenProject(facade, indexMonitor), me, indexMonitor);
maven.execute(getMavenProject(facade, indexMonitor), me, indexMonitor);
} catch (CoreException e) {
logger.logError(
"An error occurred attempting to build the index for project " + facade.getProject()
Expand Down Expand Up @@ -310,11 +318,9 @@ public Set<IProject> build(int kind, IProgressMonitor monitor) throws Exception

final SubMonitor progress = SubMonitor.convert(monitor, "Executing indexer plugin", 2);

final IMaven maven = MavenPlugin.getMaven();

IMavenExecutionContext context = maven.createExecutionContext();
context.getExecutionRequest()
.setWorkspaceReader(new IndexerWorkspaceRepository());
.setWorkspaceReader(new IndexerWorkspaceRepository(getRegistry()));

final MavenProject mavenProject = getMavenProject(projectFacade, progress.split(1));

Expand Down Expand Up @@ -361,8 +367,7 @@ private static MavenProject getMavenProject(final IMavenProjectFacade projectFac
*/
@Override
public void resourceChanged(final IResourceChangeEvent event) {
projects: for (IMavenProjectFacade facade : MavenPlugin.getMavenProjectRegistry()
.getProjects()) {
projects: for (IMavenProjectFacade facade : getRegistry().getProjects()) {
IProject currentProject = facade.getProject();
synchronized (pendingJobs) {
RebuildIndexCheck existing = pendingJobs.get(currentProject);
Expand Down Expand Up @@ -390,7 +395,7 @@ public void resourceChanged(final IResourceChangeEvent event) {
.findMember(projects[i].getFullPath()) != null;
}
if (doFullCheck) {
RebuildIndexCheck job = new RebuildIndexCheck(
RebuildIndexCheck job = new RebuildIndexCheck(getMaven(), getRegistry(),
"Checking index project " + currentProject.getName() + " for rebuild", event, facade);

// If someone else beat us to the punch then don't
Expand Down
23 changes: 17 additions & 6 deletions bndtools.m2e/src/bndtools/m2e/LaunchPropertyTester.java
@@ -1,5 +1,8 @@
package bndtools.m2e;

import static bndtools.m2e.MavenRunListenerHelper.getMavenProjectFacade;
import static bndtools.m2e.MavenRunListenerHelper.hasBndTestingMavenPlugin;

import org.bndtools.api.ILogger;
import org.bndtools.api.Logger;
import org.eclipse.core.expressions.PropertyTester;
Expand All @@ -8,8 +11,9 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.project.IMavenProjectRegistry;

public class LaunchPropertyTester extends PropertyTester implements MavenRunListenerHelper {
public class LaunchPropertyTester extends PropertyTester {
private static final ILogger logger = Logger
.getLogger(LaunchPropertyTester.class);

Expand All @@ -18,6 +22,13 @@ public class LaunchPropertyTester extends PropertyTester implements MavenRunList
public static final String PROP_IS_TESTABLE_BND_MAVEN_PROJECT = "isTestableBndMavenProject";
static final String MAVEN_NATURE = "org.eclipse.m2e.core.maven2Nature";

private final IMavenProjectRegistry mavenProjectRegistry;

public LaunchPropertyTester(IMavenProjectRegistry mavenProjectRegistry) {
this.mavenProjectRegistry = mavenProjectRegistry;

}

@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
IResource resource = null;
Expand Down Expand Up @@ -48,27 +59,27 @@ public boolean test(Object receiver, String property, Object[] args, Object expe
switch (property) {
case PROP_IS_IN_BND_MAVEN_PROJECT :
try {
IMavenProjectFacade projectFacade = getMavenProjectFacade(resource);
IMavenProjectFacade projectFacade = getMavenProjectFacade(mavenProjectRegistry, resource);

return (projectFacade != null) && hasBndMavenPlugin(projectFacade);
return (projectFacade != null) && MavenRunListenerHelper.hasBndMavenPlugin(projectFacade);
} catch (CoreException e) {
logger.logError("Error testing '" + PROP_IS_IN_BND_MAVEN_PROJECT + "' property on java element.",
e);
return false;
}
case PROP_IS_RESOLVABLE_BND_MAVEN_PROJECT :
try {
IMavenProjectFacade projectFacade = getMavenProjectFacade(resource);
IMavenProjectFacade projectFacade = getMavenProjectFacade(mavenProjectRegistry, resource);

return (projectFacade != null) && hasBndResolverMavenPlugin(projectFacade);
return (projectFacade != null) && MavenRunListenerHelper.hasBndResolverMavenPlugin(projectFacade);
} catch (CoreException e) {
logger.logError(
"Error testing '" + PROP_IS_RESOLVABLE_BND_MAVEN_PROJECT + "' property on java element.", e);
return false;
}
case PROP_IS_TESTABLE_BND_MAVEN_PROJECT :
try {
IMavenProjectFacade projectFacade = getMavenProjectFacade(resource);
IMavenProjectFacade projectFacade = getMavenProjectFacade(mavenProjectRegistry, resource);

return (projectFacade != null) && hasBndTestingMavenPlugin(projectFacade);
} catch (CoreException e) {
Expand Down
8 changes: 8 additions & 0 deletions bndtools.m2e/src/bndtools/m2e/M2ETypeAccess.java
@@ -0,0 +1,8 @@
package bndtools.m2e;

import org.osgi.service.component.annotations.Component;

@Component(service = M2ETypeAccess.class)
public class M2ETypeAccess {

}

0 comments on commit 8598911

Please sign in to comment.