Skip to content

Commit b66bbfc

Browse files
authored
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.
1 parent f18383c commit b66bbfc

File tree

9 files changed

+175
-46
lines changed

9 files changed

+175
-46
lines changed

.github/release-drafter.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ tag-template: maven-plugin-testing-$RESOLVED_VERSION
2323
include-pre-releases: true
2424
prerelease: true
2525

26-
header: |
26+
header: |
2727
> [!WARNING]
28-
> This plugin is a Maven 4 plugin and requires Maven 4.0.0-rc-2 to run.
28+
> This plugin is a Maven 4 plugin and requires Maven 4.0.0-rc-3 to run.

maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@
8080
import org.apache.maven.di.Injector;
8181
import org.apache.maven.di.Key;
8282
import org.apache.maven.di.impl.DIException;
83+
import org.apache.maven.impl.InternalSession;
84+
import org.apache.maven.impl.model.DefaultModelPathTranslator;
85+
import org.apache.maven.impl.model.DefaultPathTranslator;
8386
import org.apache.maven.internal.impl.DefaultLog;
84-
import org.apache.maven.internal.impl.InternalSession;
85-
import org.apache.maven.internal.impl.model.DefaultModelPathTranslator;
86-
import org.apache.maven.internal.impl.model.DefaultPathTranslator;
8787
import org.apache.maven.internal.xml.XmlNodeImpl;
8888
import org.apache.maven.internal.xml.XmlPlexusConfiguration;
8989
import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;

maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ArtifactStub.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import org.apache.maven.api.Version;
2626
import org.apache.maven.api.VersionConstraint;
2727
import org.apache.maven.api.annotations.Nonnull;
28-
import org.apache.maven.internal.impl.DefaultModelVersionParser;
29-
import org.apache.maven.internal.impl.DefaultVersionParser;
28+
import org.apache.maven.impl.DefaultModelVersionParser;
29+
import org.apache.maven.impl.DefaultVersionParser;
3030
import org.eclipse.aether.util.version.GenericVersionScheme;
3131

3232
/**
@@ -96,6 +96,7 @@ public void setVersion(String version) {
9696
this.version = version;
9797
}
9898

99+
@Override
99100
public Version getBaseVersion() {
100101
return getParser().parseVersion(baseVersion != null ? baseVersion : version);
101102
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.maven.api.plugin.testing.stubs;
20+
21+
import java.util.List;
22+
import java.util.Map;
23+
import java.util.Optional;
24+
25+
import org.apache.maven.api.services.Lookup;
26+
import org.apache.maven.api.services.LookupException;
27+
28+
public class LookupStub implements Lookup {
29+
/**
30+
* A stub where all methods return an empty value when possible, or throw an exception otherwise.
31+
*/
32+
public static final Lookup EMPTY = new LookupStub();
33+
34+
/**
35+
* For sub-class constructors.
36+
*/
37+
protected LookupStub() {}
38+
39+
@Override
40+
public <T> T lookup(Class<T> type) {
41+
throw new LookupException("This is only a stub.");
42+
}
43+
44+
@Override
45+
public <T> T lookup(Class<T> type, String string) {
46+
throw new LookupException("This is only a stub.");
47+
}
48+
49+
@Override
50+
public <T> Optional<T> lookupOptional(Class<T> type) {
51+
return Optional.empty();
52+
}
53+
54+
@Override
55+
public <T> Optional<T> lookupOptional(Class<T> type, String string) {
56+
return Optional.empty();
57+
}
58+
59+
@Override
60+
public <T> List<T> lookupList(Class<T> type) {
61+
return List.of();
62+
}
63+
64+
@Override
65+
public <T> Map<String, T> lookupMap(Class<T> type) {
66+
return Map.of();
67+
}
68+
}

maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.maven.api.annotations.Nonnull;
3737
import org.apache.maven.api.model.Model;
3838
import org.apache.maven.api.model.PluginContainer;
39+
import org.apache.maven.api.model.Profile;
3940

4041
/**
4142
* @author Olivier Lamy
@@ -49,8 +50,11 @@ public class ProjectStub implements Project {
4950
private Path pomPath;
5051
private boolean topProject;
5152
private Path rootDirectory;
52-
private Map<String, String> properties = new HashMap<>();
5353
private ProducedArtifact mainArtifact;
54+
private List<Profile> declaredProfiles = List.of();
55+
private List<Profile> effectiveProfiles = List.of();
56+
private List<Profile> declaredActiveProfiles = List.of();
57+
private List<Profile> effectiveActiveProfiles = List.of();
5458

5559
public void setModel(Model model) {
5660
this.model = model;
@@ -254,4 +258,44 @@ public ProjectStub addProperty(String key, String value) {
254258
model = model.withProperties(props);
255259
return this;
256260
}
261+
262+
@Override
263+
@SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable.
264+
public List<Profile> getDeclaredProfiles() {
265+
return declaredProfiles;
266+
}
267+
268+
public void setDeclaredProfiles(List<Profile> values) {
269+
declaredProfiles = List.copyOf(values);
270+
}
271+
272+
@Override
273+
@SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable.
274+
public List<Profile> getEffectiveProfiles() {
275+
return effectiveProfiles;
276+
}
277+
278+
public void setEffectiveProfiles(List<Profile> values) {
279+
effectiveProfiles = List.copyOf(values);
280+
}
281+
282+
@Override
283+
@SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable.
284+
public List<Profile> getDeclaredActiveProfiles() {
285+
return declaredActiveProfiles;
286+
}
287+
288+
public void setDeclaredActiveProfiles(List<Profile> values) {
289+
declaredActiveProfiles = List.copyOf(values);
290+
}
291+
292+
@Override
293+
@SuppressWarnings("ReturnOfCollectionOrArrayField") // Safe because list is unmodifiable.
294+
public List<Profile> getEffectiveActiveProfiles() {
295+
return effectiveActiveProfiles;
296+
}
297+
298+
public void setEffectiveActiveProfiles(List<Profile> values) {
299+
effectiveActiveProfiles = List.copyOf(values);
300+
}
257301
}

maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/RepositorySystemSupplier.java

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,38 +26,37 @@
2626
import java.util.function.Supplier;
2727

2828
import org.apache.maven.api.services.ModelBuilder;
29-
import org.apache.maven.internal.impl.DefaultModelUrlNormalizer;
30-
import org.apache.maven.internal.impl.DefaultModelVersionParser;
31-
import org.apache.maven.internal.impl.DefaultModelXmlFactory;
32-
import org.apache.maven.internal.impl.DefaultPluginConfigurationExpander;
33-
import org.apache.maven.internal.impl.DefaultSuperPomProvider;
34-
import org.apache.maven.internal.impl.DefaultUrlNormalizer;
35-
import org.apache.maven.internal.impl.model.DefaultDependencyManagementImporter;
36-
import org.apache.maven.internal.impl.model.DefaultDependencyManagementInjector;
37-
import org.apache.maven.internal.impl.model.DefaultInheritanceAssembler;
38-
import org.apache.maven.internal.impl.model.DefaultInterpolator;
39-
import org.apache.maven.internal.impl.model.DefaultModelBuilder;
40-
import org.apache.maven.internal.impl.model.DefaultModelCacheFactory;
41-
import org.apache.maven.internal.impl.model.DefaultModelInterpolator;
42-
import org.apache.maven.internal.impl.model.DefaultModelNormalizer;
43-
import org.apache.maven.internal.impl.model.DefaultModelPathTranslator;
44-
import org.apache.maven.internal.impl.model.DefaultModelProcessor;
45-
import org.apache.maven.internal.impl.model.DefaultModelValidator;
46-
import org.apache.maven.internal.impl.model.DefaultPathTranslator;
47-
import org.apache.maven.internal.impl.model.DefaultPluginManagementInjector;
48-
import org.apache.maven.internal.impl.model.DefaultProfileInjector;
49-
import org.apache.maven.internal.impl.model.DefaultProfileSelector;
50-
import org.apache.maven.internal.impl.model.rootlocator.DefaultRootLocator;
51-
import org.apache.maven.internal.impl.resolver.DefaultArtifactDescriptorReader;
52-
import org.apache.maven.internal.impl.resolver.DefaultModelResolver;
53-
import org.apache.maven.internal.impl.resolver.DefaultVersionRangeResolver;
54-
import org.apache.maven.internal.impl.resolver.DefaultVersionResolver;
55-
import org.apache.maven.internal.impl.resolver.MavenArtifactRelocationSource;
56-
import org.apache.maven.internal.impl.resolver.PluginsMetadataGeneratorFactory;
57-
import org.apache.maven.internal.impl.resolver.SnapshotMetadataGeneratorFactory;
58-
import org.apache.maven.internal.impl.resolver.VersionsMetadataGeneratorFactory;
59-
import org.apache.maven.internal.impl.resolver.relocation.DistributionManagementArtifactRelocationSource;
60-
import org.apache.maven.internal.impl.resolver.relocation.UserPropertiesArtifactRelocationSource;
29+
import org.apache.maven.impl.DefaultModelUrlNormalizer;
30+
import org.apache.maven.impl.DefaultModelVersionParser;
31+
import org.apache.maven.impl.DefaultModelXmlFactory;
32+
import org.apache.maven.impl.DefaultPluginConfigurationExpander;
33+
import org.apache.maven.impl.DefaultSuperPomProvider;
34+
import org.apache.maven.impl.DefaultUrlNormalizer;
35+
import org.apache.maven.impl.model.DefaultDependencyManagementImporter;
36+
import org.apache.maven.impl.model.DefaultDependencyManagementInjector;
37+
import org.apache.maven.impl.model.DefaultInheritanceAssembler;
38+
import org.apache.maven.impl.model.DefaultInterpolator;
39+
import org.apache.maven.impl.model.DefaultModelBuilder;
40+
import org.apache.maven.impl.model.DefaultModelInterpolator;
41+
import org.apache.maven.impl.model.DefaultModelNormalizer;
42+
import org.apache.maven.impl.model.DefaultModelPathTranslator;
43+
import org.apache.maven.impl.model.DefaultModelProcessor;
44+
import org.apache.maven.impl.model.DefaultModelValidator;
45+
import org.apache.maven.impl.model.DefaultPathTranslator;
46+
import org.apache.maven.impl.model.DefaultPluginManagementInjector;
47+
import org.apache.maven.impl.model.DefaultProfileInjector;
48+
import org.apache.maven.impl.model.DefaultProfileSelector;
49+
import org.apache.maven.impl.model.rootlocator.DefaultRootLocator;
50+
import org.apache.maven.impl.resolver.DefaultArtifactDescriptorReader;
51+
import org.apache.maven.impl.resolver.DefaultModelResolver;
52+
import org.apache.maven.impl.resolver.DefaultVersionRangeResolver;
53+
import org.apache.maven.impl.resolver.DefaultVersionResolver;
54+
import org.apache.maven.impl.resolver.MavenArtifactRelocationSource;
55+
import org.apache.maven.impl.resolver.PluginsMetadataGeneratorFactory;
56+
import org.apache.maven.impl.resolver.SnapshotMetadataGeneratorFactory;
57+
import org.apache.maven.impl.resolver.VersionsMetadataGeneratorFactory;
58+
import org.apache.maven.impl.resolver.relocation.DistributionManagementArtifactRelocationSource;
59+
import org.apache.maven.impl.resolver.relocation.UserPropertiesArtifactRelocationSource;
6160
import org.eclipse.aether.RepositoryListener;
6261
import org.eclipse.aether.RepositorySystem;
6362
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
@@ -1076,7 +1075,6 @@ protected ModelBuilder createModelBuilder() {
10761075
new DefaultPluginConfigurationExpander(),
10771076
new DefaultModelVersionParser(getVersionScheme()),
10781077
List.of(),
1079-
new DefaultModelCacheFactory(),
10801078
new DefaultModelResolver(),
10811079
new DefaultInterpolator(),
10821080
new DefaultPathTranslator(),

maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,18 @@
4949
import org.apache.maven.api.services.ArtifactInstallerRequest;
5050
import org.apache.maven.api.services.ArtifactManager;
5151
import org.apache.maven.api.services.LocalRepositoryManager;
52+
import org.apache.maven.api.services.Lookup;
5253
import org.apache.maven.api.services.ProjectBuilder;
5354
import org.apache.maven.api.services.ProjectBuilderRequest;
5455
import org.apache.maven.api.services.ProjectBuilderResult;
5556
import org.apache.maven.api.services.ProjectManager;
5657
import org.apache.maven.api.services.RepositoryFactory;
5758
import org.apache.maven.api.services.VersionParser;
5859
import org.apache.maven.api.services.xml.ModelXmlFactory;
59-
import org.apache.maven.internal.impl.DefaultModelVersionParser;
60-
import org.apache.maven.internal.impl.DefaultModelXmlFactory;
61-
import org.apache.maven.internal.impl.DefaultVersionParser;
62-
import org.apache.maven.internal.impl.InternalSession;
60+
import org.apache.maven.impl.DefaultModelVersionParser;
61+
import org.apache.maven.impl.DefaultModelXmlFactory;
62+
import org.apache.maven.impl.DefaultVersionParser;
63+
import org.apache.maven.impl.InternalSession;
6364
import org.apache.maven.model.v4.MavenStaxReader;
6465
import org.eclipse.aether.util.version.GenericVersionScheme;
6566
import org.mockito.ArgumentMatchers;
@@ -383,6 +384,11 @@ public static InternalSession getMockSession(LocalRepository localRepository) {
383384
//
384385
when(session.getService(ModelXmlFactory.class)).thenReturn(new DefaultModelXmlFactory());
385386

387+
//
388+
// Lookup
389+
//
390+
when(session.getService(Lookup.class)).thenReturn(LookupStub.EMPTY);
391+
386392
//
387393
// Other
388394
//

maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import org.apache.maven.api.annotations.Nullable;
5555
import org.apache.maven.api.model.Repository;
5656
import org.apache.maven.api.settings.Settings;
57+
import org.apache.maven.api.toolchain.ToolchainModel;
5758

5859
/**
5960
*/
@@ -109,6 +110,7 @@ public Map<String, String> getUserProperties() {
109110
}
110111

111112
@Nonnull
113+
@Override
112114
public Map<String, String> getEffectiveProperties(@Nullable Project project) {
113115
HashMap<String, String> result = new HashMap<>(getSystemProperties());
114116
if (project != null) {
@@ -443,4 +445,14 @@ public DependencyScope requireDependencyScope(String id) {
443445
public PathScope requirePathScope(String id) {
444446
return null;
445447
}
448+
449+
@Override
450+
public Optional<Version> resolveHighestVersion(ArtifactCoordinates artifact, List<RemoteRepository> repositories) {
451+
return Optional.empty();
452+
}
453+
454+
@Override
455+
public Collection<ToolchainModel> getToolchains() {
456+
return List.of();
457+
}
446458
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ under the License.
6565

6666
<properties>
6767
<surefire.version>3.5.1</surefire.version>
68-
<mavenVersion>4.0.0-rc-2</mavenVersion>
68+
<mavenVersion>4.0.0-rc-3</mavenVersion>
6969
<maven.site.path>plugin-testing-archives/LATEST</maven.site.path>
7070
<javaVersion>17</javaVersion>
7171
<project.build.outputTimestamp>2025-01-27T19:27:57Z</project.build.outputTimestamp>

0 commit comments

Comments
 (0)