Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[m2e] Remove references to internal packages and avoid static methods #5422

Merged
merged 1 commit into from Nov 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be

Suggested change
.getMajor() == 2;
.getMajor() >= 2;

for some level of future proofing?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did wonder, but the boolean would need to be renamed too.
The whole codebase needs a refactor, and fundamentally this class will be removed completely once we have 2.x as a base. I therefore leaned towards “make it work for now”.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It’s also worth noting that the ceiling for the import is capped at 3.0.0) in the bnd file, so > 2 can’t occur without changing that.


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 {

}