Skip to content

Commit cfb7ce8

Browse files
authored
[MNG-8558] Move JavaToolchain (#2107)
* move JavaToolchain support to maven-impl * deprecate Maven 3 toolchain support classes * add a factory to create toolchain managers wrapping both v3 and v4 toolchains
1 parent 59e066b commit cfb7ce8

File tree

15 files changed

+326
-35
lines changed

15 files changed

+326
-35
lines changed

compat/maven-compat/src/main/java/org/apache/maven/toolchain/DefaultToolchain.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
* to avoid rewriting usual code.
3333
*
3434
* @since 2.0.9
35+
* @deprecated Use {@link org.apache.maven.api.Toolchain} instead.
3536
*/
37+
@Deprecated(since = "4.0.0")
3638
public abstract class DefaultToolchain // should have been AbstractToolchain...
3739
implements Toolchain, ToolchainPrivate {
3840
private final Logger logger;

compat/maven-compat/src/main/java/org/apache/maven/toolchain/MisconfiguredToolchainException.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
/**
2222
*
2323
*/
24+
@Deprecated(since = "4.0.0")
2425
public class MisconfiguredToolchainException extends Exception {
2526

2627
public MisconfiguredToolchainException(String message) {

compat/maven-compat/src/main/java/org/apache/maven/toolchain/RequirementMatcher.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
/**
2222
*
2323
*/
24+
@Deprecated(since = "4.0.0")
2425
public interface RequirementMatcher {
2526

2627
boolean matches(String requirement);

compat/maven-compat/src/main/java/org/apache/maven/toolchain/RequirementMatcherFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
/**
2626
*
2727
*/
28+
@Deprecated(since = "4.0.0")
2829
public final class RequirementMatcherFactory {
2930
private RequirementMatcherFactory() {}
3031

compat/maven-compat/src/main/java/org/apache/maven/toolchain/Toolchain.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
* Toolchain interface.
2323
*
2424
* @since 2.0.9
25+
* @deprecated Use {@link org.apache.maven.api.Toolchain} instead.
2526
*/
27+
@Deprecated(since = "4.0.0")
2628
public interface Toolchain {
2729

2830
/**

compat/maven-compat/src/main/java/org/apache/maven/toolchain/ToolchainFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
* Internal toolchain factory, to prepare toolchains instances.
2525
*
2626
* @since 2.0.9
27+
* @deprecated Use {@link org.apache.maven.api.services.ToolchainFactory} instead.
2728
*/
29+
@Deprecated(since = "4.0.0")
2830
public interface ToolchainFactory {
2931
/**
3032
* Create instance of toolchain.

compat/maven-compat/src/main/java/org/apache/maven/toolchain/ToolchainManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
* Public API for a toolchain-aware plugin to get expected toolchain instance.
2828
*
2929
* @since 2.0.9
30+
* @deprecated Use {@link org.apache.maven.api.services.ToolchainManager} instead.
3031
*/
32+
@Deprecated(since = "4.0.0")
3133
public interface ToolchainManager {
3234

3335
// NOTE: Some plugins like Surefire access this field directly!

compat/maven-compat/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java renamed to compat/maven-compat/src/main/java/org/apache/maven/toolchain/ToolchainManagerFactory.java

Lines changed: 86 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,34 +23,55 @@
2323
import java.util.Map;
2424
import java.util.Optional;
2525

26+
import org.apache.maven.api.Session;
2627
import org.apache.maven.api.annotations.Nonnull;
28+
import org.apache.maven.api.annotations.Nullable;
2729
import org.apache.maven.api.di.Inject;
2830
import org.apache.maven.api.di.Named;
31+
import org.apache.maven.api.di.Priority;
32+
import org.apache.maven.api.di.Provides;
2933
import org.apache.maven.api.di.Singleton;
34+
import org.apache.maven.api.di.Typed;
3035
import org.apache.maven.api.services.Lookup;
3136
import org.apache.maven.api.services.ToolchainFactoryException;
37+
import org.apache.maven.api.services.ToolchainManagerException;
3238
import org.apache.maven.execution.MavenSession;
3339
import org.apache.maven.impl.MappedList;
3440
import org.apache.maven.toolchain.model.ToolchainModel;
3541
import org.slf4j.Logger;
3642

3743
@Named
3844
@Singleton
39-
public class DefaultToolchainManager implements ToolchainManager, ToolchainManagerPrivate {
45+
@Deprecated(since = "4.0.0")
46+
public class ToolchainManagerFactory {
4047

4148
private final Lookup lookup;
4249
private final Logger logger;
4350

4451
@Inject
45-
public DefaultToolchainManager(Lookup lookup) {
52+
ToolchainManagerFactory(Lookup lookup) {
4653
this(lookup, null);
4754
}
4855

49-
protected DefaultToolchainManager(Lookup lookup, Logger logger) {
56+
protected ToolchainManagerFactory(Lookup lookup, Logger logger) {
5057
this.lookup = lookup;
5158
this.logger = logger;
5259
}
5360

61+
@Provides
62+
@Typed({ToolchainManager.class, ToolchainManagerPrivate.class})
63+
@Named // qualifier is required for SiduDIBridge to work
64+
DefaultToolchainManagerV3 v3Manager() {
65+
return new DefaultToolchainManagerV3();
66+
}
67+
68+
@Provides
69+
@Priority(10)
70+
@Typed(org.apache.maven.api.services.ToolchainManager.class)
71+
DefaultToolchainManagerV4 v4Manager() {
72+
return new DefaultToolchainManagerV4();
73+
}
74+
5475
private org.apache.maven.impl.DefaultToolchainManager getDelegate() {
5576
return getToolchainManager(lookup, logger);
5677
}
@@ -86,43 +107,80 @@ public org.apache.maven.api.Toolchain createToolchain(
86107
public Optional<org.apache.maven.api.Toolchain> createDefaultToolchain()
87108
throws ToolchainFactoryException {
88109
return Optional.ofNullable(v3Factory.createDefaultToolchain())
89-
.map(DefaultToolchainManager.this::getToolchainV4);
110+
.map(ToolchainManagerFactory.this::getToolchainV4);
90111
}
91112
});
92113
}
93114
allFactories.putAll(v4Factories);
94115
return new org.apache.maven.impl.DefaultToolchainManager(allFactories, logger) {};
95116
}
96117

97-
@Override
98-
public Toolchain getToolchainFromBuildContext(String type, MavenSession session) {
99-
return getDelegate()
100-
.getToolchainFromBuildContext(session.getSession(), type)
101-
.map(this::getToolchainV3)
102-
.orElse(null);
103-
}
118+
public class DefaultToolchainManagerV4 implements org.apache.maven.api.services.ToolchainManager {
119+
@Nonnull
120+
@Override
121+
public List<org.apache.maven.api.Toolchain> getToolchains(
122+
@Nonnull Session session, @Nonnull String type, @Nullable Map<String, String> requirements)
123+
throws ToolchainManagerException {
124+
return getDelegate().getToolchains(session, type, requirements);
125+
}
104126

105-
@Override
106-
public List<Toolchain> getToolchains(MavenSession session, String type, Map<String, String> requirements) {
107-
return new MappedList<>(
108-
getDelegate().getToolchains(session.getSession(), type, requirements), this::getToolchainV3);
109-
}
127+
@Nonnull
128+
@Override
129+
public Optional<org.apache.maven.api.Toolchain> getToolchainFromBuildContext(
130+
@Nonnull Session session, @Nonnull String type) throws ToolchainManagerException {
131+
return getDelegate().getToolchainFromBuildContext(session, type);
132+
}
133+
134+
@Override
135+
public void storeToolchainToBuildContext(
136+
@Nonnull Session session, @Nonnull org.apache.maven.api.Toolchain toolchain) {
137+
getDelegate().storeToolchainToBuildContext(session, toolchain);
138+
}
110139

111-
@Override
112-
public ToolchainPrivate[] getToolchainsForType(String type, MavenSession session)
113-
throws MisconfiguredToolchainException {
114-
try {
115-
List<org.apache.maven.api.Toolchain> toolchains = getDelegate().getToolchains(session.getSession(), type);
116-
return toolchains.stream().map(this::getToolchainV3).toArray(ToolchainPrivate[]::new);
117-
} catch (org.apache.maven.api.services.ToolchainManagerException e) {
118-
throw new MisconfiguredToolchainException(e.getMessage(), e);
140+
@Nonnull
141+
@Override
142+
public List<org.apache.maven.api.Toolchain> getToolchains(@Nonnull Session session, @Nonnull String type)
143+
throws ToolchainManagerException {
144+
return getDelegate().getToolchains(session, type);
119145
}
120146
}
121147

122-
@Override
123-
public void storeToolchainToBuildContext(ToolchainPrivate toolchain, MavenSession session) {
124-
org.apache.maven.api.Toolchain tc = getToolchainV4(toolchain);
125-
getDelegate().storeToolchainToBuildContext(session.getSession(), tc);
148+
public class DefaultToolchainManagerV3 implements ToolchainManager, ToolchainManagerPrivate {
149+
150+
@Override
151+
public Toolchain getToolchainFromBuildContext(String type, MavenSession session) {
152+
return getDelegate()
153+
.getToolchainFromBuildContext(session.getSession(), type)
154+
.map(ToolchainManagerFactory.this::getToolchainV3)
155+
.orElse(null);
156+
}
157+
158+
@Override
159+
public List<Toolchain> getToolchains(MavenSession session, String type, Map<String, String> requirements) {
160+
return new MappedList<>(
161+
getDelegate().getToolchains(session.getSession(), type, requirements),
162+
ToolchainManagerFactory.this::getToolchainV3);
163+
}
164+
165+
@Override
166+
public ToolchainPrivate[] getToolchainsForType(String type, MavenSession session)
167+
throws MisconfiguredToolchainException {
168+
try {
169+
List<org.apache.maven.api.Toolchain> toolchains =
170+
getDelegate().getToolchains(session.getSession(), type);
171+
return toolchains.stream()
172+
.map(ToolchainManagerFactory.this::getToolchainV3)
173+
.toArray(ToolchainPrivate[]::new);
174+
} catch (org.apache.maven.api.services.ToolchainManagerException e) {
175+
throw new MisconfiguredToolchainException(e.getMessage(), e);
176+
}
177+
}
178+
179+
@Override
180+
public void storeToolchainToBuildContext(ToolchainPrivate toolchain, MavenSession session) {
181+
org.apache.maven.api.Toolchain tc = getToolchainV4(toolchain);
182+
getDelegate().storeToolchainToBuildContext(session.getSession(), tc);
183+
}
126184
}
127185

128186
private org.apache.maven.api.Toolchain getToolchainV4(ToolchainPrivate toolchain) {

compat/maven-compat/src/main/java/org/apache/maven/toolchain/ToolchainManagerPrivate.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
*
3030
* @since 2.0.9
3131
* @see ToolchainManager#getToolchainFromBuildContext(String, MavenSession)
32+
* @deprecated Use {@link org.apache.maven.api.services.ToolchainManager} instead.
3233
*/
34+
@Deprecated(since = "4.0.0")
3335
public interface ToolchainManagerPrivate {
3436

3537
/**

compat/maven-compat/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@
2424

2525
/**
2626
* a private contract between the toolchains plugin and the components.
27+
*
28+
* @deprecated Use {@link org.apache.maven.api.Toolchain} instead.
2729
*/
30+
@Deprecated(since = "4.0.0")
2831
public interface ToolchainPrivate extends Toolchain {
2932

3033
/**

0 commit comments

Comments
 (0)