This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-plugin-testing.git
The following commit(s) were added to refs/heads/master by this push: new b66bbfc Upgrade to Maven 4.0.0-rc-3. (#84) b66bbfc is described below commit b66bbfcdf0d93584ee663eb563fb6885ab77aacc Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Fri Mar 21 20:24:18 2025 +0100 Upgrade to Maven 4.0.0-rc-3. (#84) * Add missing `@Override` annotations. * Upgrade to Maven 4.0.0-rc-3. * Added private fields and public setter methods for the new methods added in `ProjectStub`. No setter added for `SessionStub` because the previously existing methods were already returning null or empty collections. * Add an empty `LookupStub` returned by `Session.getService(Lookup.class)` mock. It resolves the `NullPointerException` observed during compiler plugin tests. --- .github/release-drafter.yml | 4 +- .../maven/api/plugin/testing/MojoExtension.java | 6 +- .../api/plugin/testing/stubs/ArtifactStub.java | 5 +- .../maven/api/plugin/testing/stubs/LookupStub.java | 68 ++++++++++++++++++++++ .../api/plugin/testing/stubs/ProjectStub.java | 46 ++++++++++++++- .../testing/stubs/RepositorySystemSupplier.java | 64 ++++++++++---------- .../api/plugin/testing/stubs/SessionMock.java | 14 +++-- .../api/plugin/testing/stubs/SessionStub.java | 12 ++++ pom.xml | 2 +- 9 files changed, 175 insertions(+), 46 deletions(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 245ddc2..f829205 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -23,6 +23,6 @@ tag-template: maven-plugin-testing-$RESOLVED_VERSION include-pre-releases: true prerelease: true -header: | +header: | > [!WARNING] - > This plugin is a Maven 4 plugin and requires Maven 4.0.0-rc-2 to run. + > This plugin is a Maven 4 plugin and requires Maven 4.0.0-rc-3 to run. diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java index 1c813a3..e300672 100644 --- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java +++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java @@ -80,10 +80,10 @@ import org.apache.maven.configuration.internal.EnhancedComponentConfigurator; import org.apache.maven.di.Injector; import org.apache.maven.di.Key; import org.apache.maven.di.impl.DIException; +import org.apache.maven.impl.InternalSession; +import org.apache.maven.impl.model.DefaultModelPathTranslator; +import org.apache.maven.impl.model.DefaultPathTranslator; import org.apache.maven.internal.impl.DefaultLog; -import org.apache.maven.internal.impl.InternalSession; -import org.apache.maven.internal.impl.model.DefaultModelPathTranslator; -import org.apache.maven.internal.impl.model.DefaultPathTranslator; import org.apache.maven.internal.xml.XmlNodeImpl; import org.apache.maven.internal.xml.XmlPlexusConfiguration; import org.apache.maven.lifecycle.internal.MojoDescriptorCreator; diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ArtifactStub.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ArtifactStub.java index df9e5c2..b1689d4 100644 --- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ArtifactStub.java +++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ArtifactStub.java @@ -25,8 +25,8 @@ import org.apache.maven.api.ArtifactCoordinates; import org.apache.maven.api.Version; import org.apache.maven.api.VersionConstraint; import org.apache.maven.api.annotations.Nonnull; -import org.apache.maven.internal.impl.DefaultModelVersionParser; -import org.apache.maven.internal.impl.DefaultVersionParser; +import org.apache.maven.impl.DefaultModelVersionParser; +import org.apache.maven.impl.DefaultVersionParser; import org.eclipse.aether.util.version.GenericVersionScheme; /** @@ -96,6 +96,7 @@ public class ArtifactStub implements Artifact { this.version = version; } + @Override public Version getBaseVersion() { return getParser().parseVersion(baseVersion != null ? baseVersion : version); } diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/LookupStub.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/LookupStub.java new file mode 100644 index 0000000..15f4e91 --- /dev/null +++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/LookupStub.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.maven.api.plugin.testing.stubs; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import org.apache.maven.api.services.Lookup; +import org.apache.maven.api.services.LookupException; + +public class LookupStub implements Lookup { + /** + * A stub where all methods return an empty value when possible, or throw an exception otherwise. + */ + public static final Lookup EMPTY = new LookupStub(); + + /** + * For sub-class constructors. + */ + protected LookupStub() {} + + @Override + public <T> T lookup(Class<T> type) { + throw new LookupException("This is only a stub."); + } + + @Override + public <T> T lookup(Class<T> type, String string) { + throw new LookupException("This is only a stub."); + } + + @Override + public <T> Optional<T> lookupOptional(Class<T> type) { + return Optional.empty(); + } + + @Override + public <T> Optional<T> lookupOptional(Class<T> type, String string) { + return Optional.empty(); + } + + @Override + public <T> List<T> lookupList(Class<T> type) { + return List.of(); + } + + @Override + public <T> Map<String, T> lookupMap(Class<T> type) { + return Map.of(); + } +} diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java index 81b9021..e08d32c 100644 --- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java +++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java @@ -36,6 +36,7 @@ import org.apache.maven.api.Type; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.model.Model; import org.apache.maven.api.model.PluginContainer; +import org.apache.maven.api.model.Profile; /** * @author Olivier Lamy @@ -49,8 +50,11 @@ public class ProjectStub implements Project { private Path pomPath; private boolean topProject; private Path rootDirectory; - private Map<String, String> properties = new HashMap<>(); private ProducedArtifact mainArtifact; + private List<Profile> declaredProfiles = List.of(); + private List<Profile> effectiveProfiles = List.of(); + private List<Profile> declaredActiveProfiles = List.of(); + private List<Profile> effectiveActiveProfiles = List.of(); public void setModel(Model model) { this.model = model; @@ -254,4 +258,44 @@ public class ProjectStub implements Project { model = model.withProperties(props); return this; } + + @Override + @SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable. + public List<Profile> getDeclaredProfiles() { + return declaredProfiles; + } + + public void setDeclaredProfiles(List<Profile> values) { + declaredProfiles = List.copyOf(values); + } + + @Override + @SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable. + public List<Profile> getEffectiveProfiles() { + return effectiveProfiles; + } + + public void setEffectiveProfiles(List<Profile> values) { + effectiveProfiles = List.copyOf(values); + } + + @Override + @SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable. + public List<Profile> getDeclaredActiveProfiles() { + return declaredActiveProfiles; + } + + public void setDeclaredActiveProfiles(List<Profile> values) { + declaredActiveProfiles = List.copyOf(values); + } + + @Override + @SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable. + public List<Profile> getEffectiveActiveProfiles() { + return effectiveActiveProfiles; + } + + public void setEffectiveActiveProfiles(List<Profile> values) { + effectiveActiveProfiles = List.copyOf(values); + } } diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java index 7f8244b..5f7246d 100644 --- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java +++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java @@ -26,38 +26,37 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; import org.apache.maven.api.services.ModelBuilder; -import org.apache.maven.internal.impl.DefaultModelUrlNormalizer; -import org.apache.maven.internal.impl.DefaultModelVersionParser; -import org.apache.maven.internal.impl.DefaultModelXmlFactory; -import org.apache.maven.internal.impl.DefaultPluginConfigurationExpander; -import org.apache.maven.internal.impl.DefaultSuperPomProvider; -import org.apache.maven.internal.impl.DefaultUrlNormalizer; -import org.apache.maven.internal.impl.model.DefaultDependencyManagementImporter; -import org.apache.maven.internal.impl.model.DefaultDependencyManagementInjector; -import org.apache.maven.internal.impl.model.DefaultInheritanceAssembler; -import org.apache.maven.internal.impl.model.DefaultInterpolator; -import org.apache.maven.internal.impl.model.DefaultModelBuilder; -import org.apache.maven.internal.impl.model.DefaultModelCacheFactory; -import org.apache.maven.internal.impl.model.DefaultModelInterpolator; -import org.apache.maven.internal.impl.model.DefaultModelNormalizer; -import org.apache.maven.internal.impl.model.DefaultModelPathTranslator; -import org.apache.maven.internal.impl.model.DefaultModelProcessor; -import org.apache.maven.internal.impl.model.DefaultModelValidator; -import org.apache.maven.internal.impl.model.DefaultPathTranslator; -import org.apache.maven.internal.impl.model.DefaultPluginManagementInjector; -import org.apache.maven.internal.impl.model.DefaultProfileInjector; -import org.apache.maven.internal.impl.model.DefaultProfileSelector; -import org.apache.maven.internal.impl.model.rootlocator.DefaultRootLocator; -import org.apache.maven.internal.impl.resolver.DefaultArtifactDescriptorReader; -import org.apache.maven.internal.impl.resolver.DefaultModelResolver; -import org.apache.maven.internal.impl.resolver.DefaultVersionRangeResolver; -import org.apache.maven.internal.impl.resolver.DefaultVersionResolver; -import org.apache.maven.internal.impl.resolver.MavenArtifactRelocationSource; -import org.apache.maven.internal.impl.resolver.PluginsMetadataGeneratorFactory; -import org.apache.maven.internal.impl.resolver.SnapshotMetadataGeneratorFactory; -import org.apache.maven.internal.impl.resolver.VersionsMetadataGeneratorFactory; -import org.apache.maven.internal.impl.resolver.relocation.DistributionManagementArtifactRelocationSource; -import org.apache.maven.internal.impl.resolver.relocation.UserPropertiesArtifactRelocationSource; +import org.apache.maven.impl.DefaultModelUrlNormalizer; +import org.apache.maven.impl.DefaultModelVersionParser; +import org.apache.maven.impl.DefaultModelXmlFactory; +import org.apache.maven.impl.DefaultPluginConfigurationExpander; +import org.apache.maven.impl.DefaultSuperPomProvider; +import org.apache.maven.impl.DefaultUrlNormalizer; +import org.apache.maven.impl.model.DefaultDependencyManagementImporter; +import org.apache.maven.impl.model.DefaultDependencyManagementInjector; +import org.apache.maven.impl.model.DefaultInheritanceAssembler; +import org.apache.maven.impl.model.DefaultInterpolator; +import org.apache.maven.impl.model.DefaultModelBuilder; +import org.apache.maven.impl.model.DefaultModelInterpolator; +import org.apache.maven.impl.model.DefaultModelNormalizer; +import org.apache.maven.impl.model.DefaultModelPathTranslator; +import org.apache.maven.impl.model.DefaultModelProcessor; +import org.apache.maven.impl.model.DefaultModelValidator; +import org.apache.maven.impl.model.DefaultPathTranslator; +import org.apache.maven.impl.model.DefaultPluginManagementInjector; +import org.apache.maven.impl.model.DefaultProfileInjector; +import org.apache.maven.impl.model.DefaultProfileSelector; +import org.apache.maven.impl.model.rootlocator.DefaultRootLocator; +import org.apache.maven.impl.resolver.DefaultArtifactDescriptorReader; +import org.apache.maven.impl.resolver.DefaultModelResolver; +import org.apache.maven.impl.resolver.DefaultVersionRangeResolver; +import org.apache.maven.impl.resolver.DefaultVersionResolver; +import org.apache.maven.impl.resolver.MavenArtifactRelocationSource; +import org.apache.maven.impl.resolver.PluginsMetadataGeneratorFactory; +import org.apache.maven.impl.resolver.SnapshotMetadataGeneratorFactory; +import org.apache.maven.impl.resolver.VersionsMetadataGeneratorFactory; +import org.apache.maven.impl.resolver.relocation.DistributionManagementArtifactRelocationSource; +import org.apache.maven.impl.resolver.relocation.UserPropertiesArtifactRelocationSource; import org.eclipse.aether.RepositoryListener; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory; @@ -1076,7 +1075,6 @@ public class RepositorySystemSupplier implements Supplier<RepositorySystem> { new DefaultPluginConfigurationExpander(), new DefaultModelVersionParser(getVersionScheme()), List.of(), - new DefaultModelCacheFactory(), new DefaultModelResolver(), new DefaultInterpolator(), new DefaultPathTranslator(), diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java index 9b99161..77d66d5 100644 --- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java +++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java @@ -49,6 +49,7 @@ import org.apache.maven.api.services.ArtifactInstaller; import org.apache.maven.api.services.ArtifactInstallerRequest; import org.apache.maven.api.services.ArtifactManager; import org.apache.maven.api.services.LocalRepositoryManager; +import org.apache.maven.api.services.Lookup; import org.apache.maven.api.services.ProjectBuilder; import org.apache.maven.api.services.ProjectBuilderRequest; import org.apache.maven.api.services.ProjectBuilderResult; @@ -56,10 +57,10 @@ import org.apache.maven.api.services.ProjectManager; import org.apache.maven.api.services.RepositoryFactory; import org.apache.maven.api.services.VersionParser; import org.apache.maven.api.services.xml.ModelXmlFactory; -import org.apache.maven.internal.impl.DefaultModelVersionParser; -import org.apache.maven.internal.impl.DefaultModelXmlFactory; -import org.apache.maven.internal.impl.DefaultVersionParser; -import org.apache.maven.internal.impl.InternalSession; +import org.apache.maven.impl.DefaultModelVersionParser; +import org.apache.maven.impl.DefaultModelXmlFactory; +import org.apache.maven.impl.DefaultVersionParser; +import org.apache.maven.impl.InternalSession; import org.apache.maven.model.v4.MavenStaxReader; import org.eclipse.aether.util.version.GenericVersionScheme; import org.mockito.ArgumentMatchers; @@ -383,6 +384,11 @@ public class SessionMock { // when(session.getService(ModelXmlFactory.class)).thenReturn(new DefaultModelXmlFactory()); + // + // Lookup + // + when(session.getService(Lookup.class)).thenReturn(LookupStub.EMPTY); + // // Other // diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java index 3190b0e..050fcd9 100644 --- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java +++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java @@ -54,6 +54,7 @@ import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.model.Repository; import org.apache.maven.api.settings.Settings; +import org.apache.maven.api.toolchain.ToolchainModel; /** */ @@ -109,6 +110,7 @@ public class SessionStub implements Session { } @Nonnull + @Override public Map<String, String> getEffectiveProperties(@Nullable Project project) { HashMap<String, String> result = new HashMap<>(getSystemProperties()); if (project != null) { @@ -443,4 +445,14 @@ public class SessionStub implements Session { public PathScope requirePathScope(String id) { return null; } + + @Override + public Optional<Version> resolveHighestVersion(ArtifactCoordinates artifact, List<RemoteRepository> repositories) { + return Optional.empty(); + } + + @Override + public Collection<ToolchainModel> getToolchains() { + return List.of(); + } } diff --git a/pom.xml b/pom.xml index adce11c..51e4b9f 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ under the License. <properties> <surefire.version>3.5.1</surefire.version> - <mavenVersion>4.0.0-rc-2</mavenVersion> + <mavenVersion>4.0.0-rc-3</mavenVersion> <maven.site.path>plugin-testing-archives/LATEST</maven.site.path> <javaVersion>17</javaVersion> <project.build.outputTimestamp>2025-01-27T19:27:57Z</project.build.outputTimestamp>