From 943fb04fd095587f16017e551840060a9072fc42 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 24 Jan 2024 18:06:53 +0100 Subject: [PATCH 01/17] Step 2: Changes: * Properties moved to Artifacts from Dependencies * snapshot check delegated to Aether Artifact * new types for build path, build path scope, dependency scope, language * changes propagated --- .../java/org/apache/maven/api/Artifact.java | 8 + ...roperties.java => ArtifactProperties.java} | 10 +- .../java/org/apache/maven/api/BuildPath.java | 48 ++++++ .../org/apache/maven/api/BuildPathScope.java | 46 ++++++ .../java/org/apache/maven/api/Dependency.java | 8 - .../org/apache/maven/api/DependencyScope.java | 148 ++++++++++++++++++ .../java/org/apache/maven/api/Language.java | 105 +++++++++++++ .../java/org/apache/maven/api/Packaging.java | 43 +++++ .../java/org/apache/maven/api/Session.java | 3 + .../main/java/org/apache/maven/api/Type.java | 26 ++- .../maven/api/services/LanguageManager.java | 34 ++++ .../maven/api/services/VersionParser.java | 8 +- .../artifact/handler/ArtifactHandler.java | 4 + .../DefaultArtifactHandlerManager.java | 8 +- .../internal/aether/TypeRegistryAdapter.java | 2 +- .../maven/internal/impl/DefaultArtifact.java | 11 +- ...es.java => DefaultArtifactProperties.java} | 16 +- .../internal/impl/DefaultDependency.java | 26 ++- .../maven/internal/impl/DefaultType.java | 37 +++-- .../internal/impl/DefaultTypeRegistry.java | 17 +- .../impl/language/DefaultLanguageManager.java | 47 ++++++ .../internal/impl/types/BomTypeProvider.java | 5 +- .../internal/impl/types/EarTypeProvider.java | 9 +- .../impl/types/EjbClientTypeProvider.java | 9 +- .../internal/impl/types/EjbTypeProvider.java | 9 +- .../internal/impl/types/JarTypeProvider.java | 9 +- .../impl/types/JavaSourceTypeProvider.java | 5 +- .../impl/types/JavadocTypeProvider.java | 9 +- .../impl/types/MavenPluginTypeProvider.java | 9 +- .../internal/impl/types/ParTypeProvider.java | 9 +- .../internal/impl/types/PomTypeProvider.java | 5 +- .../internal/impl/types/RarTypeProvider.java | 9 +- .../impl/types/TestJarTypeProvider.java | 9 +- .../internal/impl/types/WarTypeProvider.java | 9 +- 34 files changed, 627 insertions(+), 133 deletions(-) rename api/maven-api-core/src/main/java/org/apache/maven/api/{DependencyProperties.java => ArtifactProperties.java} (82%) create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/Language.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageManager.java rename maven-core/src/main/java/org/apache/maven/internal/impl/{DefaultDependencyProperties.java => DefaultArtifactProperties.java} (78%) create mode 100644 maven-core/src/main/java/org/apache/maven/internal/impl/language/DefaultLanguageManager.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java index bdc18b958c45..e92ffd732f1e 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java @@ -105,6 +105,14 @@ default String key() { */ boolean isSnapshot(); + /** + * The artifact properties. + * + * @return the artifact properties, never {@code null} + */ + @Nonnull + ArtifactProperties getArtifactProperties(); + /** * Shortcut for {@code session.createArtifactCoordinate(artifact)} * diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactProperties.java similarity index 82% rename from api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java rename to api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactProperties.java index 9f634168480b..fc3c197ccc45 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactProperties.java @@ -25,13 +25,13 @@ import org.apache.maven.api.annotations.Nonnull; /** - * Dependency properties supported by Maven Core. + * Artifact properties supported by Maven Core. * * @since 4.0.0 */ @Experimental @Immutable -public interface DependencyProperties { +public interface ArtifactProperties { /** * Boolean flag telling that dependency contains all of its dependencies. Value of this key should be parsed with * {@link Boolean#parseBoolean(String)} to obtain value. @@ -41,10 +41,12 @@ public interface DependencyProperties { String FLAG_INCLUDES_DEPENDENCIES = "includesDependencies"; /** - * Boolean flag telling that dependency is meant to be placed on class path. Value of this key should be parsed with + * Boolean flag telling that dependency is meant to be part of build path. Value of this key should be parsed with * {@link Boolean#parseBoolean(String)} to obtain value. + *

+ * Important: this flag must be kept in sync with resolver! (as is used during collection) */ - String FLAG_CLASS_PATH_CONSTITUENT = "classPathConstituent"; + String FLAG_BUILD_PATH_CONSTITUENT = "constitutesBuildPath"; /** * Returns immutable "map view" of all the properties. diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java new file mode 100644 index 000000000000..f370bde8b1a2 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java @@ -0,0 +1,48 @@ +/* + * 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; + +import java.util.Collection; + +import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Immutable; +import org.apache.maven.api.annotations.Nonnull; + +/** + * Build path. Build path is calculated for given {@link Project} and {@link BuildPathScope}. + * + * @since 4.0.0 + */ +@Experimental +@Immutable +public interface BuildPath { + @Nonnull + Project project(); + + @Nonnull + BuildPathScope buildPathScope(); + + @Nonnull + default Language language() { + return buildPathScope().language(); + } + + @Nonnull + Collection getArtifacts(); +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java new file mode 100644 index 000000000000..c63ebd3968ac --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java @@ -0,0 +1,46 @@ +/* + * 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; + +import java.util.Collection; + +import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Immutable; +import org.apache.maven.api.annotations.Nonnull; + +/** + * Build path scope. + *

+ * Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface + * can be used as keys. + * + * @since 4.0.0 + */ +@Experimental +@Immutable +public interface BuildPathScope { + @Nonnull + String id(); + + @Nonnull + Language language(); + + @Nonnull + Collection getDependencyScopes(); +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java index efad1415adf8..888e247fe1cf 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java @@ -30,14 +30,6 @@ public interface Dependency extends Artifact { @Nonnull Type getType(); - /** - * The dependency properties. - * - * @return the dependency properties, never {@code null} - */ - @Nonnull - DependencyProperties getDependencyProperties(); - @Nonnull Scope getScope(); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java new file mode 100644 index 000000000000..ab50e90f23de --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java @@ -0,0 +1,148 @@ +/* + * 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; + +import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Immutable; +import org.apache.maven.api.annotations.Nonnull; + +/** + * Dependency scope. + *

+ * Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface + * can be used as keys. + * + * @since 4.0.0 + */ +@Experimental +@Immutable +public interface DependencyScope { + @Nonnull + String id(); + + boolean isTransitive(); + + DependencyScope NONE = new DependencyScope() { + @Override + public String id() { + return "none"; + } + + @Override + public boolean isTransitive() { + return false; + } + }; + + DependencyScope COMPILE_ONLY = new DependencyScope() { + @Override + public String id() { + return "compile-only"; + } + + @Override + public boolean isTransitive() { + return false; + } + }; + + DependencyScope COMPILE = new DependencyScope() { + @Override + public String id() { + return "compile"; + } + + @Override + public boolean isTransitive() { + return true; + } + }; + + DependencyScope RUNTIME = new DependencyScope() { + @Override + public String id() { + return "runtime"; + } + + @Override + public boolean isTransitive() { + return true; + } + }; + + DependencyScope PROVIDED = new DependencyScope() { + @Override + public String id() { + return "provided"; + } + + @Override + public boolean isTransitive() { + return false; + } + }; + + DependencyScope TEST_ONLY = new DependencyScope() { + @Override + public String id() { + return "test-only"; + } + + @Override + public boolean isTransitive() { + return false; + } + }; + + DependencyScope TEST = new DependencyScope() { + @Override + public String id() { + return "test"; + } + + @Override + public boolean isTransitive() { + return false; + } + }; + + DependencyScope TEST_RUNTIME = new DependencyScope() { + @Override + public String id() { + return "test-runtime"; + } + + @Override + public boolean isTransitive() { + return false; + } + }; + + DependencyScope SYSTEM = new DependencyScope() { + @Override + public String id() { + return "system"; + } + + @Override + public boolean isTransitive() { + return false; + } + }; +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java new file mode 100644 index 000000000000..700c53f0da86 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java @@ -0,0 +1,105 @@ +/* + * 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; + +import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Immutable; +import org.apache.maven.api.annotations.Nonnull; +import org.apache.maven.api.annotations.Nullable; + +/** + * Language. + *

+ * Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface + * can be used as keys. + * + * @since 4.0.0 + */ +@Experimental +@Immutable +public interface Language { + /** + * The "none" language. It is not versioned, family is same to itself, and compatible with itself only. + * In turn, every {@link Language} implementation must be compatible with {@code NONE} language. + */ + Language NONE = new Language() { + @Override + public String id() { + return "none"; + } + + @Override + public Language family() { + return this; + } + + @Override + public Version version() { + return null; + } + + @Override + public boolean isCompatibleWith(Language language) { + return this == language; + } + }; + + Language JAVA_FAMILY = new Language() { + @Override + public String id() { + return "java"; + } + + @Override + public Language family() { + return this; + } + + @Override + public Version version() { + return null; + } + + public boolean isCompatibleWith(Language language) { + Language family = language.family(); + return this == family || NONE == family; + } + }; + + @Nonnull + String id(); + + @Nonnull + Language family(); + + @Nullable + Version version(); + + /** + * Returns {@code true} if this language is compatible with provided language. + * For example "Java 8" is compatible with "Java 11", but other way is not true. + *

+ * Important note: every implementation must return {@code true} if passed in language is {@link #NONE}. + *

+ * By default, every language is compatible with itself and {@link #NONE} language. Override if needed. + */ + default boolean isCompatibleWith(Language language) { + return this == language || NONE == language.family(); + } +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java new file mode 100644 index 000000000000..9327178c9802 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java @@ -0,0 +1,43 @@ +/* + * 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; + +import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Immutable; +import org.apache.maven.api.annotations.Nonnull; + +/** + * Interface representing a Maven project packaging. + * + * @since 4.0.0 + */ +@Experimental +@Immutable +public interface Packaging { + @Nonnull + String id(); + + @Nonnull + default Language language() { + return getType().getLanguage(); + } + + @Nonnull + Type getType(); +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java index 65d4798c7c6d..cd9dd024c7b7 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java @@ -385,6 +385,9 @@ Artifact createArtifact( * Checks whether a given artifact version is considered a {@code SNAPSHOT} or not. *

* Shortcut for {@code getService(ArtifactManager.class).isSnapshot(...)}. + *

+ * In case there is {@link Artifact} in scope, the recommended way to perform this check is + * use of {@link Artifact#isSnapshot()} instead. * * @see org.apache.maven.api.services.VersionParser#isSnapshot(String) */ diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java index 15ffc0b59a69..473d9a661152 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java @@ -30,21 +30,17 @@ *

* It provides information about the file type (or extension) of the associated artifact, * its default classifier, and how the artifact will be used in the build when creating - * classpaths. + * various build paths. *

* For example, the type {@code java-source} has a {@code jar} extension and a * {@code sources} classifier. The artifact and its dependencies should be added - * to the classpath. + * to the build path. * * @since 4.0.0 */ @Experimental @Immutable public interface Type { - - String LANGUAGE_NONE = "none"; - String LANGUAGE_JAVA = "java"; - /** * Returns the dependency type id. * The id uniquely identifies this dependency type. @@ -59,7 +55,8 @@ public interface Type { * * @return the language of this type, never {@code null}. */ - String getLanguage(); + @Nonnull + Language getLanguage(); /** * Get the file extension of artifacts of this type. @@ -80,13 +77,12 @@ public interface Type { String getClassifier(); /** - * Specifies if the artifact contains java classes and should be - * added to the classpath. + * Specifies if the artifact should be added to the build path. * - * @return if the artifact should be added to the class path + * @return if the artifact should be added to the build path */ - default boolean isAddedToClassPath() { - return getDependencyProperties().checkFlag(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT); + default boolean isBuildPathConstituent() { + return getArtifactProperties().checkFlag(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT); } /** @@ -97,14 +93,14 @@ default boolean isAddedToClassPath() { * @return if the artifact's dependencies are included in the artifact */ default boolean isIncludesDependencies() { - return getDependencyProperties().checkFlag(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES); + return getArtifactProperties().checkFlag(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES); } /** - * Gets the default properties associated with this dependency type. + * Gets the default properties associated with this type. * * @return the default properties, never {@code null}. */ @Nonnull - DependencyProperties getDependencyProperties(); + ArtifactProperties getArtifactProperties(); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageManager.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageManager.java new file mode 100644 index 000000000000..c322407be744 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageManager.java @@ -0,0 +1,34 @@ +/* + * 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.services; + +import java.util.Optional; + +import org.apache.maven.api.Language; +import org.apache.maven.api.Service; +import org.apache.maven.api.annotations.Nonnull; + +public interface LanguageManager extends Service { + @Nonnull + Optional lookupLanguageFamily(String id); + + default Language requireLanguageFamily(String id) { + return lookupLanguageFamily(id).orElseThrow(() -> new IllegalArgumentException("Unknown language")); + } +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java index d344122d7f19..a4f8484df042 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java @@ -18,10 +18,7 @@ */ package org.apache.maven.api.services; -import org.apache.maven.api.Service; -import org.apache.maven.api.Version; -import org.apache.maven.api.VersionConstraint; -import org.apache.maven.api.VersionRange; +import org.apache.maven.api.*; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -66,6 +63,9 @@ public interface VersionParser extends Service { /** * Checks whether a given artifact version is considered a {@code SNAPSHOT} or not. + *

+ * In case there is {@link Artifact} in scope, the recommended way to perform this check is + * use of {@link Artifact#isSnapshot()} instead. */ boolean isSnapshot(@Nonnull String version); } diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java b/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java index 92cca2a069dd..364e12425ee8 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java @@ -53,5 +53,9 @@ public interface ArtifactHandler { String getLanguage(); + /** + * IMPORTANT: this is WRONGLY NAMED method (and/or remnant for Maven2). + * Its meaning is "is added to build path", that is used to create classpath/modulepath/etc. + */ boolean isAddedToClasspath(); } diff --git a/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java b/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java index 87166eb29a75..f25856333bb6 100644 --- a/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java +++ b/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java @@ -70,9 +70,13 @@ public ArtifactHandler getArtifactHandler(String id) { null, null, type.isIncludesDependencies(), - type.getLanguage(), - type.isAddedToClassPath()); // TODO: watch out for module path + type.getLanguage().id(), + type.isBuildPathConstituent()); }); + + // Note: here, type decides is artifact added to "build path" (for example during resolution) + // and "build path" is intermediate data that is used to create actual Java classpath/modulepath + // but to create those, proper filtering should happen via Type properties. } public void addHandlers(Map handlers) { diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java index b5f3f9c61437..1d0dca3ee2d9 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java @@ -45,7 +45,7 @@ public ArtifactType get(String typeId) { type.getLanguage(), type.getExtension(), type.getClassifier(), - type.getDependencyProperties()); + type.getArtifactProperties()); } return null; } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java index 563797f05c49..35ca4439593c 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java @@ -22,9 +22,9 @@ import org.apache.maven.api.Artifact; import org.apache.maven.api.ArtifactCoordinate; +import org.apache.maven.api.ArtifactProperties; import org.apache.maven.api.Version; import org.apache.maven.api.annotations.Nonnull; -import org.apache.maven.repository.internal.DefaultModelVersionParser; import static org.apache.maven.internal.impl.Utils.nonNull; @@ -34,11 +34,13 @@ public class DefaultArtifact implements Artifact { private final @Nonnull InternalSession session; private final @Nonnull org.eclipse.aether.artifact.Artifact artifact; + private final @Nonnull ArtifactProperties artifactProperties; private final String key; public DefaultArtifact(@Nonnull InternalSession session, @Nonnull org.eclipse.aether.artifact.Artifact artifact) { this.session = nonNull(session, "session"); this.artifact = nonNull(artifact, "artifact"); + this.artifactProperties = new DefaultArtifactProperties(artifact.getProperties()); this.key = getGroupId() + ':' + getArtifactId() @@ -95,7 +97,12 @@ public String getClassifier() { @Override public boolean isSnapshot() { - return DefaultModelVersionParser.checkSnapshot(artifact.getVersion()); + return artifact.isSnapshot(); + } + + @Override + public ArtifactProperties getArtifactProperties() { + return artifactProperties; } @Nonnull diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactProperties.java similarity index 78% rename from maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java rename to maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactProperties.java index 2ee780713034..f3329620c42c 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactProperties.java @@ -18,13 +18,9 @@ */ package org.apache.maven.internal.impl; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; +import java.util.*; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; import org.apache.maven.api.annotations.Nonnull; import static org.apache.maven.internal.impl.Utils.nonNull; @@ -32,14 +28,14 @@ /** * Default implementation of artifact properties. */ -public class DefaultDependencyProperties implements DependencyProperties { +public class DefaultArtifactProperties implements ArtifactProperties { private final Map properties; - public DefaultDependencyProperties(String... flags) { + public DefaultArtifactProperties(String... flags) { this(Arrays.asList(flags)); } - public DefaultDependencyProperties(@Nonnull Collection flags) { + public DefaultArtifactProperties(@Nonnull Collection flags) { nonNull(flags, "flags"); HashMap map = new HashMap<>(); for (String flag : flags) { @@ -48,7 +44,7 @@ public DefaultDependencyProperties(@Nonnull Collection flags) { this.properties = Collections.unmodifiableMap(map); } - public DefaultDependencyProperties(@Nonnull Map properties) { + public DefaultArtifactProperties(@Nonnull Map properties) { this.properties = Collections.unmodifiableMap(nonNull(properties, "properties")); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java index 3f2f06893ebf..40381e965e24 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java @@ -20,33 +20,25 @@ import java.util.Objects; -import org.apache.maven.api.Artifact; -import org.apache.maven.api.Dependency; -import org.apache.maven.api.DependencyCoordinate; -import org.apache.maven.api.DependencyProperties; -import org.apache.maven.api.Scope; -import org.apache.maven.api.Type; -import org.apache.maven.api.Version; +import org.apache.maven.api.*; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.services.TypeRegistry; -import org.apache.maven.repository.internal.DefaultModelVersionParser; -import org.eclipse.aether.artifact.ArtifactProperties; import static org.apache.maven.internal.impl.Utils.nonNull; public class DefaultDependency implements Dependency { private final InternalSession session; private final org.eclipse.aether.graph.Dependency dependency; - private final DependencyProperties dependencyProperties; + private final ArtifactProperties artifactProperties; private final String key; public DefaultDependency( @Nonnull InternalSession session, @Nonnull org.eclipse.aether.graph.Dependency dependency) { this.session = nonNull(session, "session"); this.dependency = nonNull(dependency, "dependency"); - this.dependencyProperties = - new DefaultDependencyProperties(dependency.getArtifact().getProperties()); + this.artifactProperties = + new DefaultArtifactProperties(dependency.getArtifact().getProperties()); this.key = getGroupId() + ':' + getArtifactId() @@ -101,18 +93,20 @@ public String getExtension() { public Type getType() { String type = dependency .getArtifact() - .getProperty(ArtifactProperties.TYPE, dependency.getArtifact().getExtension()); + .getProperty( + org.eclipse.aether.artifact.ArtifactProperties.TYPE, + dependency.getArtifact().getExtension()); return session.getService(TypeRegistry.class).getType(type); } @Override - public DependencyProperties getDependencyProperties() { - return dependencyProperties; + public ArtifactProperties getArtifactProperties() { + return artifactProperties; } @Override public boolean isSnapshot() { - return DefaultModelVersionParser.checkSnapshot(dependency.getArtifact().getVersion()); + return dependency.getArtifact().isSnapshot(); } @Nonnull diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java index 6297f5c4dde0..4098cc9c058a 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java @@ -21,45 +21,44 @@ import java.util.HashMap; import java.util.Map; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.eclipse.aether.artifact.ArtifactProperties; import org.eclipse.aether.artifact.ArtifactType; import static org.apache.maven.internal.impl.Utils.nonNull; public class DefaultType implements Type, ArtifactType { + private final Language language; + private final String extension; private final String classifier; - private final DependencyProperties dependencyProperties; + private final ArtifactProperties artifactProperties; public DefaultType( - String id, - String language, - String extension, - String classifier, - DependencyProperties dependencyProperties) { + String id, Language language, String extension, String classifier, ArtifactProperties artifactProperties) { nonNull(id, "id"); nonNull(language, "language"); + this.language = language; this.extension = nonNull(extension, "extension"); this.classifier = classifier; - nonNull(dependencyProperties, "dependencyProperties"); - HashMap props = new HashMap<>(dependencyProperties.asMap()); - props.put(ArtifactProperties.TYPE, id); - props.put(ArtifactProperties.LANGUAGE, language); - this.dependencyProperties = new DefaultDependencyProperties(props); + nonNull(artifactProperties, "artifactProperties"); + HashMap props = new HashMap<>(artifactProperties.asMap()); + props.put(org.eclipse.aether.artifact.ArtifactProperties.TYPE, id); + props.put(org.eclipse.aether.artifact.ArtifactProperties.LANGUAGE, language.id()); + this.artifactProperties = new DefaultArtifactProperties(props); } @Override public String getId() { - return dependencyProperties.asMap().get(ArtifactProperties.TYPE); + return artifactProperties.asMap().get(org.eclipse.aether.artifact.ArtifactProperties.TYPE); } @Override - public String getLanguage() { - return dependencyProperties.asMap().get(ArtifactProperties.LANGUAGE); + public Language getLanguage() { + return language; } @Override @@ -73,12 +72,12 @@ public String getClassifier() { } @Override - public DependencyProperties getDependencyProperties() { - return dependencyProperties; + public ArtifactProperties getArtifactProperties() { + return artifactProperties; } @Override public Map getProperties() { - return getDependencyProperties().asMap(); + return getArtifactProperties().asMap(); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java index cebd30cc666a..346d40e5e012 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java @@ -26,9 +26,10 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; import org.apache.maven.api.Type; import org.apache.maven.api.annotations.Nonnull; +import org.apache.maven.api.services.LanguageManager; import org.apache.maven.api.services.TypeRegistry; import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.artifact.handler.manager.LegacyArtifactHandlerManager; @@ -42,6 +43,8 @@ public class DefaultTypeRegistry extends AbstractEventSpy implements TypeRegistry { private final Map types; + private final LanguageManager languageManager; + private final ConcurrentHashMap usedTypes; private final ConcurrentHashMap legacyTypes; @@ -49,8 +52,10 @@ public class DefaultTypeRegistry extends AbstractEventSpy implements TypeRegistr private final LegacyArtifactHandlerManager manager; @Inject - public DefaultTypeRegistry(Map types, LegacyArtifactHandlerManager manager) { + public DefaultTypeRegistry( + Map types, LanguageManager languageManager, LegacyArtifactHandlerManager manager) { this.types = nonNull(types, "types"); + this.languageManager = nonNull(languageManager, "languageManager"); this.usedTypes = new ConcurrentHashMap<>(); this.legacyTypes = new ConcurrentHashMap<>(); this.manager = nonNull(manager, "artifactHandlerManager"); @@ -80,17 +85,17 @@ public Type getType(String id) { ArtifactHandler handler = manager.getArtifactHandler(id); ArrayList flags = new ArrayList<>(); if (handler.isAddedToClasspath()) { - flags.add(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT); + flags.add(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT); } if (handler.isIncludesDependencies()) { - flags.add(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES); + flags.add(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES); } return new DefaultType( id, - handler.getLanguage(), + languageManager.requireLanguageFamily(handler.getLanguage()), handler.getExtension(), handler.getClassifier(), - new DefaultDependencyProperties(flags)); + new DefaultArtifactProperties(flags)); }); } return type; diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/language/DefaultLanguageManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/language/DefaultLanguageManager.java new file mode 100644 index 000000000000..c1ccdeaa17e4 --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/language/DefaultLanguageManager.java @@ -0,0 +1,47 @@ +/* + * 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.internal.impl.language; + +import javax.inject.Named; +import javax.inject.Singleton; + +import java.util.Objects; +import java.util.Optional; + +import org.apache.maven.api.Language; +import org.apache.maven.api.services.LanguageManager; + +/** + * TODO: this is session scoped as SPI can contribute. + */ +@Named +@Singleton +public class DefaultLanguageManager implements LanguageManager { + @Override + public Optional lookupLanguageFamily(String id) { + if (Objects.equals(Language.NONE.id(), id)) { + return Optional.of(Language.NONE); + } + // TODO: this is now just a shortcut; elaborate this, probably with some SPI LanguageSupport + if (Objects.equals(Language.JAVA_FAMILY.id(), id)) { + return Optional.of(Language.JAVA_FAMILY); + } + return Optional.empty(); + } +} diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java index d7387a1780b2..2683db3140c3 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java @@ -22,8 +22,9 @@ import javax.inject.Provider; import javax.inject.Singleton; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(BomTypeProvider.NAME) @@ -34,7 +35,7 @@ public class BomTypeProvider implements Provider { private final Type type; public BomTypeProvider() { - this.type = new DefaultType(NAME, Type.LANGUAGE_NONE, "pom", null, new DefaultDependencyProperties()); + this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultArtifactProperties()); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java index 489ed638bb53..be805b57abcf 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EarTypeProvider.NAME) @@ -37,10 +38,10 @@ public class EarTypeProvider implements Provider { public EarTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "ear", null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java index efbfe05a1cc0..506a1a697f5e 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EjbClientTypeProvider.NAME) @@ -37,10 +38,10 @@ public class EjbClientTypeProvider implements Provider { public EjbClientTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "jar", "client", - new DefaultDependencyProperties(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java index e6f8fbdb4b5e..316434b61ba4 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EjbTypeProvider.NAME) @@ -37,10 +38,10 @@ public class EjbTypeProvider implements Provider { public EjbTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "jar", null, - new DefaultDependencyProperties(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java index 974c34e0ed97..f989384f0b31 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JarTypeProvider.NAME) @@ -37,10 +38,10 @@ public class JarTypeProvider implements Provider { public JarTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "jar", null, - new DefaultDependencyProperties(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java index bef8acf716fd..aa45e054df0a 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java @@ -22,8 +22,9 @@ import javax.inject.Provider; import javax.inject.Singleton; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JavaSourceTypeProvider.NAME) @@ -34,7 +35,7 @@ public class JavaSourceTypeProvider implements Provider { private final Type type; public JavaSourceTypeProvider() { - this.type = new DefaultType(NAME, Type.LANGUAGE_JAVA, "jar", "sources", new DefaultDependencyProperties()); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "sources", new DefaultArtifactProperties()); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java index 1ccac4f04b49..a9f9c842a12b 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JavadocTypeProvider.NAME) @@ -37,10 +38,10 @@ public class JavadocTypeProvider implements Provider { public JavadocTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "jar", "javadoc", - new DefaultDependencyProperties(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java index bfdb424c2786..f1d9abc00054 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(MavenPluginTypeProvider.NAME) @@ -37,10 +38,10 @@ public class MavenPluginTypeProvider implements Provider { public MavenPluginTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "jar", null, - new DefaultDependencyProperties(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java index 91db9ba182da..7b27092c1d4d 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(ParTypeProvider.NAME) @@ -37,10 +38,10 @@ public class ParTypeProvider implements Provider { public ParTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "par", null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java index fe0f9705d0ea..4c1651773b90 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java @@ -22,8 +22,9 @@ import javax.inject.Provider; import javax.inject.Singleton; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(PomTypeProvider.NAME) @@ -34,7 +35,7 @@ public class PomTypeProvider implements Provider { private final Type type; public PomTypeProvider() { - this.type = new DefaultType(NAME, Type.LANGUAGE_NONE, "pom", null, new DefaultDependencyProperties()); + this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultArtifactProperties()); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java index ad5accd3cd0c..7e0a180393c1 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(RarTypeProvider.NAME) @@ -37,10 +38,10 @@ public class RarTypeProvider implements Provider { public RarTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "rar", null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java index 6bd7ea2da727..dfd7232d4016 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(TestJarTypeProvider.NAME) @@ -37,10 +38,10 @@ public class TestJarTypeProvider implements Provider { public TestJarTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "jar", "tests", - new DefaultDependencyProperties(DependencyProperties.FLAG_CLASS_PATH_CONSTITUENT)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java index a2b339001d46..d5a4d05046a5 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java @@ -22,9 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; +import org.apache.maven.internal.impl.DefaultArtifactProperties; import org.apache.maven.internal.impl.DefaultType; @Named(WarTypeProvider.NAME) @@ -37,10 +38,10 @@ public class WarTypeProvider implements Provider { public WarTypeProvider() { this.type = new DefaultType( NAME, - Type.LANGUAGE_JAVA, + Language.JAVA_FAMILY, "war", null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override From 37fb446bbc37509bc844d487965029c747f3bf24 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 24 Jan 2024 21:55:31 +0100 Subject: [PATCH 02/17] Step2b --- .../java/org/apache/maven/api/BuildPath.java | 2 +- .../org/apache/maven/api/BuildPathScope.java | 106 +++++++++++++++++- .../org/apache/maven/api/DependencyScope.java | 31 +++++ .../java/org/apache/maven/api/Packaging.java | 16 +++ .../java/org/apache/maven/api/Project.java | 12 +- .../org/apache/maven/api/ProjectScope.java | 76 +++++++++++++ .../maven/api/services/PackagingManager.java | 34 ++++++ .../DefaultLanguageManager.java | 2 +- .../impl/DefaultPackagingManager.java | 82 ++++++++++++++ .../maven/internal/impl/DefaultProject.java | 7 +- ...ginParameterExpressionEvaluatorV4Test.java | 3 +- .../scopes/MavenDependencyScopes.java | 20 ++-- 12 files changed, 374 insertions(+), 17 deletions(-) create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingManager.java rename maven-core/src/main/java/org/apache/maven/internal/impl/{language => }/DefaultLanguageManager.java (97%) create mode 100644 maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java index f370bde8b1a2..970e73e063b4 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java @@ -40,7 +40,7 @@ public interface BuildPath { @Nonnull default Language language() { - return buildPathScope().language(); + return project().getLanguage(); } @Nonnull diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java index c63ebd3968ac..3249b5e5936d 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java @@ -18,7 +18,10 @@ */ package org.apache.maven.api; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; @@ -39,8 +42,109 @@ public interface BuildPathScope { String id(); @Nonnull - Language language(); + ProjectScope projectScope(); @Nonnull Collection getDependencyScopes(); + + default BuildPathScope union(BuildPathScope other) { + return new BuildPathScope() { + @Override + public String id() { + return BuildPathScope.this.id() + "+" + other.id(); + } + + @Override + public ProjectScope projectScope() { + return BuildPathScope.this.projectScope().compareTo(other.projectScope()) < 1 + ? other.projectScope() + : BuildPathScope.this.projectScope(); + } + + @Override + public Collection getDependencyScopes() { + HashSet result = new HashSet<>(BuildPathScope.this.getDependencyScopes()); + result.addAll(other.getDependencyScopes()); + return result; + } + }; + } + + BuildPathScope MAIN_COMPILE = new BuildPathScope() { + @Override + public String id() { + return "main-compile"; + } + + @Override + public ProjectScope projectScope() { + return ProjectScope.MAIN; + } + + @Override + public Collection getDependencyScopes() { + return Collections.unmodifiableList( + Arrays.asList(DependencyScope.COMPILE_ONLY, DependencyScope.COMPILE, DependencyScope.PROVIDED)); + } + }; + + BuildPathScope MAIN_RUNTIME = new BuildPathScope() { + @Override + public String id() { + return "main-runtime"; + } + + @Override + public ProjectScope projectScope() { + return ProjectScope.MAIN; + } + + @Override + public Collection getDependencyScopes() { + return Collections.unmodifiableList(Arrays.asList(DependencyScope.COMPILE, DependencyScope.RUNTIME)); + } + }; + + BuildPathScope TEST_COMPILE = new BuildPathScope() { + @Override + public String id() { + return "test-compile"; + } + + @Override + public ProjectScope projectScope() { + return ProjectScope.TEST; + } + + @Override + public Collection getDependencyScopes() { + return Collections.unmodifiableList(Arrays.asList( + DependencyScope.COMPILE, + DependencyScope.PROVIDED, + DependencyScope.TEST_ONLY, + DependencyScope.TEST)); + } + }; + + BuildPathScope TEST_RUNTIME = new BuildPathScope() { + @Override + public String id() { + return "test-runtime"; + } + + @Override + public ProjectScope projectScope() { + return ProjectScope.TEST; + } + + @Override + public Collection getDependencyScopes() { + return Collections.unmodifiableList(Arrays.asList( + DependencyScope.COMPILE, + DependencyScope.RUNTIME, + DependencyScope.PROVIDED, + DependencyScope.TEST, + DependencyScope.TEST_RUNTIME)); + } + }; } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java index ab50e90f23de..de410b77f247 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java @@ -38,6 +38,10 @@ public interface DependencyScope { boolean isTransitive(); + /** + * None. Allows you to declare dependencies (for example to alter reactor build order) but in reality dependencies + * in this scope are not part of any build path scope. + */ DependencyScope NONE = new DependencyScope() { @Override public String id() { @@ -50,6 +54,9 @@ public boolean isTransitive() { } }; + /** + * Compile only. + */ DependencyScope COMPILE_ONLY = new DependencyScope() { @Override public String id() { @@ -62,6 +69,9 @@ public boolean isTransitive() { } }; + /** + * Compile. + */ DependencyScope COMPILE = new DependencyScope() { @Override public String id() { @@ -74,6 +84,9 @@ public boolean isTransitive() { } }; + /** + * Runtime. + */ DependencyScope RUNTIME = new DependencyScope() { @Override public String id() { @@ -86,6 +99,9 @@ public boolean isTransitive() { } }; + /** + * Provided. + */ DependencyScope PROVIDED = new DependencyScope() { @Override public String id() { @@ -98,6 +114,9 @@ public boolean isTransitive() { } }; + /** + * Test compile only. + */ DependencyScope TEST_ONLY = new DependencyScope() { @Override public String id() { @@ -110,6 +129,9 @@ public boolean isTransitive() { } }; + /** + * Test. + */ DependencyScope TEST = new DependencyScope() { @Override public String id() { @@ -122,6 +144,9 @@ public boolean isTransitive() { } }; + /** + * Test runtime. + */ DependencyScope TEST_RUNTIME = new DependencyScope() { @Override public String id() { @@ -134,6 +159,12 @@ public boolean isTransitive() { } }; + /** + * System scope. + *

+ * Important: this scope {@code id} MUST BE KEPT in sync with label in + * {@code org.eclipse.aether.util.artifact.Scopes#SYSTEM}. + */ DependencyScope SYSTEM = new DependencyScope() { @Override public String id() { diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java index 9327178c9802..b2e822f189e0 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java @@ -18,6 +18,8 @@ */ package org.apache.maven.api; +import java.util.Collection; + import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; import org.apache.maven.api.annotations.Nonnull; @@ -30,14 +32,28 @@ @Experimental @Immutable public interface Packaging { + /** + * The packaging id. + */ @Nonnull String id(); + /** + * The language of this packaging. + */ @Nonnull default Language language() { return getType().getLanguage(); } + /** + * The type of main artifact produced by this packaging. + */ @Nonnull Type getType(); + + /** + * Returns the ordered list of {@link BuildPathScope}s. + */ + Collection buildPathScopes(); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java index 1b448f9bc311..948bb2561211 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java @@ -76,7 +76,17 @@ public interface Project { * @see #getArtifacts() */ @Nonnull - String getPackaging(); + Packaging getPackaging(); + + /** + * Returns the project language. It is by default determined by {@link #getPackaging()}. + * + * @see #getPackaging() + */ + @Nonnull + default Language getLanguage() { + return getPackaging().language(); + } /** * Returns the project POM artifact, which is the artifact of the POM of this project. Every project have a POM diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java new file mode 100644 index 000000000000..6fc06eeac376 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java @@ -0,0 +1,76 @@ +/* + * 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; + +import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Immutable; +import org.apache.maven.api.annotations.Nonnull; + +/** + * Project scope. + *

+ * Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface + * can be used as keys. + * + * @since 4.0.0 + */ +@Experimental +@Immutable +@SuppressWarnings("checkstyle:magicnumber") +public interface ProjectScope extends Comparable { + @Nonnull + String id(); + + int ordinal(); + + @Override + default int compareTo(ProjectScope o) { + return this.ordinal() - o.ordinal(); + } + + /** + * Main scope. + */ + ProjectScope MAIN = new ProjectScope() { + @Override + public String id() { + return "main"; + } + + @Override + public int ordinal() { + return 10; + } + }; + + /** + * Test scope. + */ + ProjectScope TEST = new ProjectScope() { + @Override + public String id() { + return "test"; + } + + @Override + public int ordinal() { + return 20; + } + }; +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingManager.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingManager.java new file mode 100644 index 000000000000..07568b4f644d --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingManager.java @@ -0,0 +1,34 @@ +/* + * 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.services; + +import java.util.Optional; + +import org.apache.maven.api.Packaging; +import org.apache.maven.api.Service; +import org.apache.maven.api.annotations.Nonnull; + +public interface PackagingManager extends Service { + @Nonnull + Optional lookupPackaging(String id); + + default Packaging requirePackaging(String id) { + return lookupPackaging(id).orElseThrow(() -> new IllegalArgumentException("Unknown packaging")); + } +} diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/language/DefaultLanguageManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLanguageManager.java similarity index 97% rename from maven-core/src/main/java/org/apache/maven/internal/impl/language/DefaultLanguageManager.java rename to maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLanguageManager.java index c1ccdeaa17e4..c120eb83c506 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/language/DefaultLanguageManager.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLanguageManager.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.internal.impl.language; +package org.apache.maven.internal.impl; import javax.inject.Named; import javax.inject.Singleton; diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java new file mode 100644 index 000000000000..9db7c11ba6bb --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java @@ -0,0 +1,82 @@ +/* + * 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.internal.impl; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import java.util.*; + +import org.apache.maven.api.BuildPathScope; +import org.apache.maven.api.Packaging; +import org.apache.maven.api.Type; +import org.apache.maven.api.services.PackagingManager; +import org.apache.maven.api.services.TypeRegistry; +import org.apache.maven.lifecycle.mapping.LifecycleMapping; + +/** + * TODO: this is session scoped as SPI can contribute. + */ +@Named +@Singleton +public class DefaultPackagingManager implements PackagingManager { + private final Map lifecycleMappings; + + private final TypeRegistry typeRegistry; + + @Inject + public DefaultPackagingManager(Map lifecycleMappings, TypeRegistry typeRegistry) { + this.lifecycleMappings = lifecycleMappings; + this.typeRegistry = typeRegistry; + } + + @Override + public Optional lookupPackaging(String id) { + LifecycleMapping lifecycleMapping = lifecycleMappings.get(id); + if (lifecycleMapping == null) { + return Optional.empty(); + } + Type type = typeRegistry.getType(id); + if (type == null) { + return Optional.empty(); + } + + return Optional.of(new Packaging() { + @Override + public String id() { + return id; + } + + @Override + public Type getType() { + return type; + } + + @Override + public Collection buildPathScopes() { + return Collections.unmodifiableList(Arrays.asList( + BuildPathScope.MAIN_COMPILE, + BuildPathScope.MAIN_RUNTIME, + BuildPathScope.TEST_COMPILE, + BuildPathScope.TEST_RUNTIME)); + } + }); + } +} diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java index f438261aee5d..bd018ab05158 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java @@ -27,6 +27,7 @@ import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.model.DependencyManagement; import org.apache.maven.api.model.Model; +import org.apache.maven.api.services.PackagingManager; import org.apache.maven.api.services.TypeRegistry; import org.apache.maven.project.MavenProject; import org.apache.maven.project.artifact.ProjectArtifact; @@ -38,10 +39,12 @@ public class DefaultProject implements Project { private final InternalSession session; private final MavenProject project; + private final Packaging packaging; public DefaultProject(InternalSession session, MavenProject project) { this.session = session; this.project = project; + this.packaging = session.getService(PackagingManager.class).requirePackaging(project.getPackaging()); } public InternalSession getSession() { @@ -86,8 +89,8 @@ public List getArtifacts() { @Nonnull @Override - public String getPackaging() { - return project.getPackaging(); + public Packaging getPackaging() { + return packaging; } @Nonnull diff --git a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java index d90d9052e632..689ccbdca495 100644 --- a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java +++ b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java @@ -32,9 +32,8 @@ import org.apache.maven.AbstractCoreMavenComponentTestCase; import org.apache.maven.RepositoryUtils; -import org.apache.maven.api.Artifact; +import org.apache.maven.api.*; import org.apache.maven.api.MojoExecution; -import org.apache.maven.api.Session; import org.apache.maven.artifact.DefaultArtifact; import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.artifact.repository.ArtifactRepository; diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyScopes.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyScopes.java index 2d074a4e070a..fa0fe5b8f71e 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyScopes.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/scopes/MavenDependencyScopes.java @@ -18,7 +18,7 @@ */ package org.apache.maven.repository.internal.scopes; -import org.eclipse.aether.util.artifact.DependencyScopes; +import org.apache.maven.api.DependencyScope; /** * The dependency scopes used for Java dependencies in Maven. This class defines labels only, that are doing pass-thru @@ -31,21 +31,23 @@ public final class MavenDependencyScopes { /** * Important: keep this label in sync with Resolver. */ - public static final String SYSTEM = DependencyScopes.SYSTEM; + public static final String SYSTEM = DependencyScope.SYSTEM.id(); - public static final String COMPILE_ONLY = "compile-only"; + public static final String NONE = DependencyScope.NONE.id(); - public static final String COMPILE = "compile"; + public static final String COMPILE_ONLY = DependencyScope.COMPILE_ONLY.id(); - public static final String PROVIDED = "provided"; + public static final String COMPILE = DependencyScope.COMPILE.id(); - public static final String RUNTIME = "runtime"; + public static final String PROVIDED = DependencyScope.PROVIDED.id(); - public static final String TEST_ONLY = "test-only"; + public static final String RUNTIME = DependencyScope.RUNTIME.id(); - public static final String TEST = "test"; + public static final String TEST_ONLY = DependencyScope.TEST_ONLY.id(); - public static final String TEST_RUNTIME = "test-runtime"; + public static final String TEST = DependencyScope.TEST.id(); + + public static final String TEST_RUNTIME = DependencyScope.TEST_RUNTIME.id(); private MavenDependencyScopes() { // hide constructor From 944c3910b4b00c3608b125377a0203171aa284c7 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 24 Jan 2024 22:01:21 +0100 Subject: [PATCH 03/17] Remove unrelated --- .../src/main/java/org/apache/maven/api/Packaging.java | 5 ----- .../maven/internal/impl/DefaultPackagingManager.java | 10 ---------- 2 files changed, 15 deletions(-) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java index b2e822f189e0..404f6d28db4d 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java @@ -51,9 +51,4 @@ default Language language() { */ @Nonnull Type getType(); - - /** - * Returns the ordered list of {@link BuildPathScope}s. - */ - Collection buildPathScopes(); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java index 9db7c11ba6bb..7254bbeca61e 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java @@ -24,7 +24,6 @@ import java.util.*; -import org.apache.maven.api.BuildPathScope; import org.apache.maven.api.Packaging; import org.apache.maven.api.Type; import org.apache.maven.api.services.PackagingManager; @@ -68,15 +67,6 @@ public String id() { public Type getType() { return type; } - - @Override - public Collection buildPathScopes() { - return Collections.unmodifiableList(Arrays.asList( - BuildPathScope.MAIN_COMPILE, - BuildPathScope.MAIN_RUNTIME, - BuildPathScope.TEST_COMPILE, - BuildPathScope.TEST_RUNTIME)); - } }); } } From dcc0498ac0d7d323df76e5c1c69c63847c90a77a Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 24 Jan 2024 22:10:30 +0100 Subject: [PATCH 04/17] Remove unused --- .../src/main/java/org/apache/maven/api/Packaging.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java index 404f6d28db4d..94fddc0e8191 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java @@ -18,8 +18,6 @@ */ package org.apache.maven.api; -import java.util.Collection; - import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; import org.apache.maven.api.annotations.Nonnull; From 22b31adc54dbbe43563c9c69e0199486048d6208 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 24 Jan 2024 22:14:58 +0100 Subject: [PATCH 05/17] Add TODO --- .../src/main/java/org/apache/maven/api/Language.java | 1 + 1 file changed, 1 insertion(+) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java index 700c53f0da86..9c228da08f77 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java @@ -60,6 +60,7 @@ public boolean isCompatibleWith(Language language) { } }; + // TODO: this should be moved out from here to Java Support (builtin into core) Language JAVA_FAMILY = new Language() { @Override public String id() { From dc4b1e70f1e29d0a1c22c5cabc4d713c11acbded Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 11:27:23 +0100 Subject: [PATCH 06/17] Undo ArtifactProperties and Artifact#isSnapshot changes for now --- .../java/org/apache/maven/api/Artifact.java | 8 ----- .../java/org/apache/maven/api/Dependency.java | 8 +++++ ...perties.java => DependencyProperties.java} | 4 +-- .../main/java/org/apache/maven/api/Type.java | 6 ++-- .../maven/api/services/VersionParser.java | 8 ++--- .../internal/aether/TypeRegistryAdapter.java | 2 +- .../maven/internal/impl/DefaultArtifact.java | 11 ++----- .../internal/impl/DefaultDependency.java | 26 ++++++++++------- ....java => DefaultDependencyProperties.java} | 16 ++++++---- .../impl/DefaultPackagingManager.java | 3 +- .../maven/internal/impl/DefaultType.java | 29 +++++++++++-------- .../internal/impl/DefaultTypeRegistry.java | 8 ++--- .../internal/impl/types/BomTypeProvider.java | 4 +-- .../internal/impl/types/EarTypeProvider.java | 6 ++-- .../impl/types/EjbClientTypeProvider.java | 6 ++-- .../internal/impl/types/EjbTypeProvider.java | 6 ++-- .../internal/impl/types/JarTypeProvider.java | 6 ++-- .../impl/types/JavaSourceTypeProvider.java | 4 +-- .../impl/types/JavadocTypeProvider.java | 6 ++-- .../impl/types/MavenPluginTypeProvider.java | 6 ++-- .../internal/impl/types/ParTypeProvider.java | 6 ++-- .../internal/impl/types/PomTypeProvider.java | 4 +-- .../internal/impl/types/RarTypeProvider.java | 6 ++-- .../impl/types/TestJarTypeProvider.java | 6 ++-- .../internal/impl/types/WarTypeProvider.java | 6 ++-- ...ginParameterExpressionEvaluatorV4Test.java | 3 +- 26 files changed, 107 insertions(+), 97 deletions(-) rename api/maven-api-core/src/main/java/org/apache/maven/api/{ArtifactProperties.java => DependencyProperties.java} (95%) rename maven-core/src/main/java/org/apache/maven/internal/impl/{DefaultArtifactProperties.java => DefaultDependencyProperties.java} (78%) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java index e92ffd732f1e..bdc18b958c45 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java @@ -105,14 +105,6 @@ default String key() { */ boolean isSnapshot(); - /** - * The artifact properties. - * - * @return the artifact properties, never {@code null} - */ - @Nonnull - ArtifactProperties getArtifactProperties(); - /** * Shortcut for {@code session.createArtifactCoordinate(artifact)} * diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java index 888e247fe1cf..efad1415adf8 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java @@ -30,6 +30,14 @@ public interface Dependency extends Artifact { @Nonnull Type getType(); + /** + * The dependency properties. + * + * @return the dependency properties, never {@code null} + */ + @Nonnull + DependencyProperties getDependencyProperties(); + @Nonnull Scope getScope(); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactProperties.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java similarity index 95% rename from api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactProperties.java rename to api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java index fc3c197ccc45..4bcb5caeaf56 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactProperties.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java @@ -25,13 +25,13 @@ import org.apache.maven.api.annotations.Nonnull; /** - * Artifact properties supported by Maven Core. + * Dependency properties supported by Maven Core. * * @since 4.0.0 */ @Experimental @Immutable -public interface ArtifactProperties { +public interface DependencyProperties { /** * Boolean flag telling that dependency contains all of its dependencies. Value of this key should be parsed with * {@link Boolean#parseBoolean(String)} to obtain value. diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java index 473d9a661152..862049facf6e 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java @@ -82,7 +82,7 @@ public interface Type { * @return if the artifact should be added to the build path */ default boolean isBuildPathConstituent() { - return getArtifactProperties().checkFlag(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT); + return getDependencyProperties().checkFlag(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT); } /** @@ -93,7 +93,7 @@ default boolean isBuildPathConstituent() { * @return if the artifact's dependencies are included in the artifact */ default boolean isIncludesDependencies() { - return getArtifactProperties().checkFlag(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES); + return getDependencyProperties().checkFlag(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES); } /** @@ -102,5 +102,5 @@ default boolean isIncludesDependencies() { * @return the default properties, never {@code null}. */ @Nonnull - ArtifactProperties getArtifactProperties(); + DependencyProperties getDependencyProperties(); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java index a4f8484df042..d344122d7f19 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionParser.java @@ -18,7 +18,10 @@ */ package org.apache.maven.api.services; -import org.apache.maven.api.*; +import org.apache.maven.api.Service; +import org.apache.maven.api.Version; +import org.apache.maven.api.VersionConstraint; +import org.apache.maven.api.VersionRange; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -63,9 +66,6 @@ public interface VersionParser extends Service { /** * Checks whether a given artifact version is considered a {@code SNAPSHOT} or not. - *

- * In case there is {@link Artifact} in scope, the recommended way to perform this check is - * use of {@link Artifact#isSnapshot()} instead. */ boolean isSnapshot(@Nonnull String version); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java index 1d0dca3ee2d9..b5f3f9c61437 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java @@ -45,7 +45,7 @@ public ArtifactType get(String typeId) { type.getLanguage(), type.getExtension(), type.getClassifier(), - type.getArtifactProperties()); + type.getDependencyProperties()); } return null; } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java index 35ca4439593c..563797f05c49 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java @@ -22,9 +22,9 @@ import org.apache.maven.api.Artifact; import org.apache.maven.api.ArtifactCoordinate; -import org.apache.maven.api.ArtifactProperties; import org.apache.maven.api.Version; import org.apache.maven.api.annotations.Nonnull; +import org.apache.maven.repository.internal.DefaultModelVersionParser; import static org.apache.maven.internal.impl.Utils.nonNull; @@ -34,13 +34,11 @@ public class DefaultArtifact implements Artifact { private final @Nonnull InternalSession session; private final @Nonnull org.eclipse.aether.artifact.Artifact artifact; - private final @Nonnull ArtifactProperties artifactProperties; private final String key; public DefaultArtifact(@Nonnull InternalSession session, @Nonnull org.eclipse.aether.artifact.Artifact artifact) { this.session = nonNull(session, "session"); this.artifact = nonNull(artifact, "artifact"); - this.artifactProperties = new DefaultArtifactProperties(artifact.getProperties()); this.key = getGroupId() + ':' + getArtifactId() @@ -97,12 +95,7 @@ public String getClassifier() { @Override public boolean isSnapshot() { - return artifact.isSnapshot(); - } - - @Override - public ArtifactProperties getArtifactProperties() { - return artifactProperties; + return DefaultModelVersionParser.checkSnapshot(artifact.getVersion()); } @Nonnull diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java index 40381e965e24..3f2f06893ebf 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java @@ -20,25 +20,33 @@ import java.util.Objects; -import org.apache.maven.api.*; +import org.apache.maven.api.Artifact; +import org.apache.maven.api.Dependency; +import org.apache.maven.api.DependencyCoordinate; +import org.apache.maven.api.DependencyProperties; +import org.apache.maven.api.Scope; +import org.apache.maven.api.Type; +import org.apache.maven.api.Version; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.services.TypeRegistry; +import org.apache.maven.repository.internal.DefaultModelVersionParser; +import org.eclipse.aether.artifact.ArtifactProperties; import static org.apache.maven.internal.impl.Utils.nonNull; public class DefaultDependency implements Dependency { private final InternalSession session; private final org.eclipse.aether.graph.Dependency dependency; - private final ArtifactProperties artifactProperties; + private final DependencyProperties dependencyProperties; private final String key; public DefaultDependency( @Nonnull InternalSession session, @Nonnull org.eclipse.aether.graph.Dependency dependency) { this.session = nonNull(session, "session"); this.dependency = nonNull(dependency, "dependency"); - this.artifactProperties = - new DefaultArtifactProperties(dependency.getArtifact().getProperties()); + this.dependencyProperties = + new DefaultDependencyProperties(dependency.getArtifact().getProperties()); this.key = getGroupId() + ':' + getArtifactId() @@ -93,20 +101,18 @@ public String getExtension() { public Type getType() { String type = dependency .getArtifact() - .getProperty( - org.eclipse.aether.artifact.ArtifactProperties.TYPE, - dependency.getArtifact().getExtension()); + .getProperty(ArtifactProperties.TYPE, dependency.getArtifact().getExtension()); return session.getService(TypeRegistry.class).getType(type); } @Override - public ArtifactProperties getArtifactProperties() { - return artifactProperties; + public DependencyProperties getDependencyProperties() { + return dependencyProperties; } @Override public boolean isSnapshot() { - return dependency.getArtifact().isSnapshot(); + return DefaultModelVersionParser.checkSnapshot(dependency.getArtifact().getVersion()); } @Nonnull diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactProperties.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java similarity index 78% rename from maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactProperties.java rename to maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java index f3329620c42c..2ee780713034 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactProperties.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java @@ -18,9 +18,13 @@ */ package org.apache.maven.internal.impl; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.annotations.Nonnull; import static org.apache.maven.internal.impl.Utils.nonNull; @@ -28,14 +32,14 @@ /** * Default implementation of artifact properties. */ -public class DefaultArtifactProperties implements ArtifactProperties { +public class DefaultDependencyProperties implements DependencyProperties { private final Map properties; - public DefaultArtifactProperties(String... flags) { + public DefaultDependencyProperties(String... flags) { this(Arrays.asList(flags)); } - public DefaultArtifactProperties(@Nonnull Collection flags) { + public DefaultDependencyProperties(@Nonnull Collection flags) { nonNull(flags, "flags"); HashMap map = new HashMap<>(); for (String flag : flags) { @@ -44,7 +48,7 @@ public DefaultArtifactProperties(@Nonnull Collection flags) { this.properties = Collections.unmodifiableMap(map); } - public DefaultArtifactProperties(@Nonnull Map properties) { + public DefaultDependencyProperties(@Nonnull Map properties) { this.properties = Collections.unmodifiableMap(nonNull(properties, "properties")); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java index 7254bbeca61e..8364b1192670 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java @@ -22,7 +22,8 @@ import javax.inject.Named; import javax.inject.Singleton; -import java.util.*; +import java.util.Map; +import java.util.Optional; import org.apache.maven.api.Packaging; import org.apache.maven.api.Type; diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java index 4098cc9c058a..9b272c31a4b4 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java @@ -21,9 +21,10 @@ import java.util.HashMap; import java.util.Map; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; +import org.eclipse.aether.artifact.ArtifactProperties; import org.eclipse.aether.artifact.ArtifactType; import static org.apache.maven.internal.impl.Utils.nonNull; @@ -35,25 +36,29 @@ public class DefaultType implements Type, ArtifactType { private final String classifier; - private final ArtifactProperties artifactProperties; + private final DependencyProperties dependencyProperties; public DefaultType( - String id, Language language, String extension, String classifier, ArtifactProperties artifactProperties) { + String id, + Language language, + String extension, + String classifier, + DependencyProperties dependencyProperties) { nonNull(id, "id"); nonNull(language, "language"); this.language = language; this.extension = nonNull(extension, "extension"); this.classifier = classifier; - nonNull(artifactProperties, "artifactProperties"); - HashMap props = new HashMap<>(artifactProperties.asMap()); - props.put(org.eclipse.aether.artifact.ArtifactProperties.TYPE, id); - props.put(org.eclipse.aether.artifact.ArtifactProperties.LANGUAGE, language.id()); - this.artifactProperties = new DefaultArtifactProperties(props); + nonNull(dependencyProperties, "dependencyProperties"); + HashMap props = new HashMap<>(dependencyProperties.asMap()); + props.put(ArtifactProperties.TYPE, id); + props.put(ArtifactProperties.LANGUAGE, language.id()); + this.dependencyProperties = new DefaultDependencyProperties(props); } @Override public String getId() { - return artifactProperties.asMap().get(org.eclipse.aether.artifact.ArtifactProperties.TYPE); + return dependencyProperties.asMap().get(ArtifactProperties.TYPE); } @Override @@ -72,12 +77,12 @@ public String getClassifier() { } @Override - public ArtifactProperties getArtifactProperties() { - return artifactProperties; + public DependencyProperties getDependencyProperties() { + return dependencyProperties; } @Override public Map getProperties() { - return getArtifactProperties().asMap(); + return getDependencyProperties().asMap(); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java index 346d40e5e012..41174da40f5d 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java @@ -26,7 +26,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Type; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.services.LanguageManager; @@ -85,17 +85,17 @@ public Type getType(String id) { ArtifactHandler handler = manager.getArtifactHandler(id); ArrayList flags = new ArrayList<>(); if (handler.isAddedToClasspath()) { - flags.add(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT); + flags.add(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT); } if (handler.isIncludesDependencies()) { - flags.add(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES); + flags.add(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES); } return new DefaultType( id, languageManager.requireLanguageFamily(handler.getLanguage()), handler.getExtension(), handler.getClassifier(), - new DefaultArtifactProperties(flags)); + new DefaultDependencyProperties(flags)); }); } return type; diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java index 2683db3140c3..bc7f8042c9da 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java @@ -24,7 +24,7 @@ import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(BomTypeProvider.NAME) @@ -35,7 +35,7 @@ public class BomTypeProvider implements Provider { private final Type type; public BomTypeProvider() { - this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultArtifactProperties()); + this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultDependencyProperties()); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java index be805b57abcf..28dee7cf85c3 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EarTypeProvider.NAME) @@ -41,7 +41,7 @@ public EarTypeProvider() { Language.JAVA_FAMILY, "ear", null, - new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java index 506a1a697f5e..03a47874e932 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EjbClientTypeProvider.NAME) @@ -41,7 +41,7 @@ public EjbClientTypeProvider() { Language.JAVA_FAMILY, "jar", "client", - new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); + new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java index 316434b61ba4..ed3f50c7928a 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EjbTypeProvider.NAME) @@ -41,7 +41,7 @@ public EjbTypeProvider() { Language.JAVA_FAMILY, "jar", null, - new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); + new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java index f989384f0b31..a4221fbed3d9 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JarTypeProvider.NAME) @@ -41,7 +41,7 @@ public JarTypeProvider() { Language.JAVA_FAMILY, "jar", null, - new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); + new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java index aa45e054df0a..d16891826505 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java @@ -24,7 +24,7 @@ import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JavaSourceTypeProvider.NAME) @@ -35,7 +35,7 @@ public class JavaSourceTypeProvider implements Provider { private final Type type; public JavaSourceTypeProvider() { - this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "sources", new DefaultArtifactProperties()); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "sources", new DefaultDependencyProperties()); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java index a9f9c842a12b..cfe86c51c653 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JavadocTypeProvider.NAME) @@ -41,7 +41,7 @@ public JavadocTypeProvider() { Language.JAVA_FAMILY, "jar", "javadoc", - new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); + new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java index f1d9abc00054..128e3ee85613 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(MavenPluginTypeProvider.NAME) @@ -41,7 +41,7 @@ public MavenPluginTypeProvider() { Language.JAVA_FAMILY, "jar", null, - new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); + new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java index 7b27092c1d4d..d1dda01e349a 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(ParTypeProvider.NAME) @@ -41,7 +41,7 @@ public ParTypeProvider() { Language.JAVA_FAMILY, "par", null, - new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java index 4c1651773b90..b3a078fd2adc 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java @@ -24,7 +24,7 @@ import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(PomTypeProvider.NAME) @@ -35,7 +35,7 @@ public class PomTypeProvider implements Provider { private final Type type; public PomTypeProvider() { - this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultArtifactProperties()); + this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultDependencyProperties()); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java index 7e0a180393c1..59b0a2882786 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(RarTypeProvider.NAME) @@ -41,7 +41,7 @@ public RarTypeProvider() { Language.JAVA_FAMILY, "rar", null, - new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java index dfd7232d4016..11ceb7ef2d04 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(TestJarTypeProvider.NAME) @@ -41,7 +41,7 @@ public TestJarTypeProvider() { Language.JAVA_FAMILY, "jar", "tests", - new DefaultArtifactProperties(ArtifactProperties.FLAG_BUILD_PATH_CONSTITUENT)); + new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java index d5a4d05046a5..d9d36ea277cf 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java @@ -22,10 +22,10 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.ArtifactProperties; +import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultArtifactProperties; +import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(WarTypeProvider.NAME) @@ -41,7 +41,7 @@ public WarTypeProvider() { Language.JAVA_FAMILY, "war", null, - new DefaultArtifactProperties(ArtifactProperties.FLAG_INCLUDES_DEPENDENCIES)); + new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); } @Override diff --git a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java index 689ccbdca495..d90d9052e632 100644 --- a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java +++ b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorV4Test.java @@ -32,8 +32,9 @@ import org.apache.maven.AbstractCoreMavenComponentTestCase; import org.apache.maven.RepositoryUtils; -import org.apache.maven.api.*; +import org.apache.maven.api.Artifact; import org.apache.maven.api.MojoExecution; +import org.apache.maven.api.Session; import org.apache.maven.artifact.DefaultArtifact; import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.artifact.repository.ArtifactRepository; From 3e3aa04a87fd6596b3bf29fa74b59dcdaf90249c Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 11:45:11 +0100 Subject: [PATCH 07/17] Fix UT --- .../org/apache/maven/AbstractCoreMavenComponentTestCase.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java index 8feff0671724..8fb0163fbdab 100644 --- a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java @@ -34,6 +34,7 @@ import org.apache.maven.execution.DefaultMavenExecutionResult; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenSession; +import org.apache.maven.internal.impl.DefaultLookup; import org.apache.maven.internal.impl.DefaultSessionFactory; import org.apache.maven.model.Build; import org.apache.maven.model.Dependency; @@ -149,7 +150,8 @@ protected MavenSession createMavenSession(File pom, Properties executionProperti initRepoSession(configuration); DefaultSessionFactory defaultSessionFactory = - new DefaultSessionFactory(mock(RepositorySystem.class), null, null, null); + new DefaultSessionFactory(mock(RepositorySystem.class), + null, new DefaultLookup(container), null); MavenSession session = new MavenSession( getContainer(), configuration.getRepositorySession(), request, new DefaultMavenExecutionResult()); From 25369293f7e620996e2b33cdcb7b24f3922b0a67 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 14:48:10 +0100 Subject: [PATCH 08/17] Introduce "extensible enum" and provides registries, SPI providers, etc... --- .../org/apache/maven/api/BuildPathScope.java | 141 ++++-------------- .../maven/api/DependencyProperties.java | 4 - .../org/apache/maven/api/DependencyScope.java | 115 ++------------ .../org/apache/maven/api/ExtensibleEnum.java | 37 +++++ .../org/apache/maven/api/ExtensibleEnums.java | 118 +++++++++++++++ .../java/org/apache/maven/api/Language.java | 73 +-------- .../java/org/apache/maven/api/Packaging.java | 2 +- .../org/apache/maven/api/ProjectScope.java | 40 +---- .../java/org/apache/maven/api/Session.java | 14 ++ .../main/java/org/apache/maven/api/Type.java | 4 +- .../api/services/BuildPathScopeRegistry.java | 23 +++ .../DependencyCoordinateFactoryRequest.java | 2 +- .../api/services/DependencyScopeRegistry.java | 23 +++ ...nager.java => ExtensibleEnumRegistry.java} | 10 +- .../maven/api/services/LanguageRegistry.java | 28 +--- ...ingManager.java => PackagingRegistry.java} | 13 +- .../api/services/ProjectScopeRegistry.java | 26 ++++ .../maven/api/services/TypeRegistry.java | 5 +- .../maven/api/spi/BuildPathScopeProvider.java | 23 +++ .../api/spi/DependencyScopeProvider.java | 23 +++ .../maven/api/spi/ExtensibleEnumProvider.java | 28 ++++ .../maven/api/spi/LanguageProvider.java | 23 +++ .../maven/api/spi/PackagingProvider.java | 23 +++ .../maven/api/spi/ProjectScopeProvider.java | 23 +++ .../DefaultArtifactHandlerManager.java | 2 +- .../internal/aether/TypeRegistryAdapter.java | 4 +- .../maven/internal/impl/AbstractSession.java | 30 ++++ .../internal/impl/DefaultDependency.java | 2 +- .../impl/DefaultDependencyCoordinate.java | 2 +- ...ger.java => DefaultPackagingRegistry.java} | 10 +- .../maven/internal/impl/DefaultProject.java | 6 +- .../maven/internal/impl/DefaultType.java | 7 +- .../internal/impl/DefaultTypeRegistry.java | 18 ++- .../impl/ExtensibleEnumRegistries.java | 115 ++++++++++++++ .../AbstractCoreMavenComponentTestCase.java | 3 +- 35 files changed, 632 insertions(+), 388 deletions(-) create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnum.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/services/BuildPathScopeRegistry.java create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java rename api/maven-api-core/src/main/java/org/apache/maven/api/services/{LanguageManager.java => ExtensibleEnumRegistry.java} (75%) rename maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLanguageManager.java => api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageRegistry.java (51%) rename api/maven-api-core/src/main/java/org/apache/maven/api/services/{PackagingManager.java => PackagingRegistry.java} (69%) create mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectScopeRegistry.java create mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/BuildPathScopeProvider.java create mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java create mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ExtensibleEnumProvider.java create mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/LanguageProvider.java create mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java create mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ProjectScopeProvider.java rename maven-core/src/main/java/org/apache/maven/internal/impl/{DefaultPackagingManager.java => DefaultPackagingRegistry.java} (85%) create mode 100644 maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java index 3249b5e5936d..3142ee39bd71 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java @@ -18,15 +18,14 @@ */ package org.apache.maven.api; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; +import java.util.*; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; import org.apache.maven.api.annotations.Nonnull; +import static org.apache.maven.api.ExtensibleEnums.buildPathScope; + /** * Build path scope. *

@@ -37,114 +36,38 @@ */ @Experimental @Immutable -public interface BuildPathScope { - @Nonnull - String id(); +public interface BuildPathScope extends ExtensibleEnum { @Nonnull ProjectScope projectScope(); @Nonnull - Collection getDependencyScopes(); - - default BuildPathScope union(BuildPathScope other) { - return new BuildPathScope() { - @Override - public String id() { - return BuildPathScope.this.id() + "+" + other.id(); - } - - @Override - public ProjectScope projectScope() { - return BuildPathScope.this.projectScope().compareTo(other.projectScope()) < 1 - ? other.projectScope() - : BuildPathScope.this.projectScope(); - } - - @Override - public Collection getDependencyScopes() { - HashSet result = new HashSet<>(BuildPathScope.this.getDependencyScopes()); - result.addAll(other.getDependencyScopes()); - return result; - } - }; - } - - BuildPathScope MAIN_COMPILE = new BuildPathScope() { - @Override - public String id() { - return "main-compile"; - } - - @Override - public ProjectScope projectScope() { - return ProjectScope.MAIN; - } - - @Override - public Collection getDependencyScopes() { - return Collections.unmodifiableList( - Arrays.asList(DependencyScope.COMPILE_ONLY, DependencyScope.COMPILE, DependencyScope.PROVIDED)); - } - }; - - BuildPathScope MAIN_RUNTIME = new BuildPathScope() { - @Override - public String id() { - return "main-runtime"; - } - - @Override - public ProjectScope projectScope() { - return ProjectScope.MAIN; - } - - @Override - public Collection getDependencyScopes() { - return Collections.unmodifiableList(Arrays.asList(DependencyScope.COMPILE, DependencyScope.RUNTIME)); - } - }; - - BuildPathScope TEST_COMPILE = new BuildPathScope() { - @Override - public String id() { - return "test-compile"; - } - - @Override - public ProjectScope projectScope() { - return ProjectScope.TEST; - } - - @Override - public Collection getDependencyScopes() { - return Collections.unmodifiableList(Arrays.asList( - DependencyScope.COMPILE, - DependencyScope.PROVIDED, - DependencyScope.TEST_ONLY, - DependencyScope.TEST)); - } - }; - - BuildPathScope TEST_RUNTIME = new BuildPathScope() { - @Override - public String id() { - return "test-runtime"; - } - - @Override - public ProjectScope projectScope() { - return ProjectScope.TEST; - } - - @Override - public Collection getDependencyScopes() { - return Collections.unmodifiableList(Arrays.asList( - DependencyScope.COMPILE, - DependencyScope.RUNTIME, - DependencyScope.PROVIDED, - DependencyScope.TEST, - DependencyScope.TEST_RUNTIME)); - } - }; + Set getDependencyScopes(); + + BuildPathScope MAIN_COMPILE = buildPathScope( + "main-compile", + ProjectScope.MAIN, + DependencyScope.COMPILE_ONLY, + DependencyScope.COMPILE, + DependencyScope.PROVIDED); + + BuildPathScope MAIN_RUNTIME = + buildPathScope("main-runtime", ProjectScope.MAIN, DependencyScope.COMPILE, DependencyScope.RUNTIME); + + BuildPathScope TEST_COMPILE = buildPathScope( + "test-compile", + ProjectScope.TEST, + DependencyScope.COMPILE, + DependencyScope.PROVIDED, + DependencyScope.TEST_ONLY, + DependencyScope.TEST); + + BuildPathScope TEST_RUNTIME = buildPathScope( + "test-runtime", + ProjectScope.TEST, + DependencyScope.COMPILE, + DependencyScope.RUNTIME, + DependencyScope.PROVIDED, + DependencyScope.TEST, + DependencyScope.TEST_RUNTIME); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java index 4bcb5caeaf56..ad52851cd458 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java @@ -35,16 +35,12 @@ public interface DependencyProperties { /** * Boolean flag telling that dependency contains all of its dependencies. Value of this key should be parsed with * {@link Boolean#parseBoolean(String)} to obtain value. - *

- * Important: this flag must be kept in sync with resolver! (as is used during collection) */ String FLAG_INCLUDES_DEPENDENCIES = "includesDependencies"; /** * Boolean flag telling that dependency is meant to be part of build path. Value of this key should be parsed with * {@link Boolean#parseBoolean(String)} to obtain value. - *

- * Important: this flag must be kept in sync with resolver! (as is used during collection) */ String FLAG_BUILD_PATH_CONSTITUENT = "constitutesBuildPath"; diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java index de410b77f247..ab64575b8cda 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java @@ -20,7 +20,8 @@ import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; -import org.apache.maven.api.annotations.Nonnull; + +import static org.apache.maven.api.ExtensibleEnums.dependencyScope; /** * Dependency scope. @@ -32,9 +33,7 @@ */ @Experimental @Immutable -public interface DependencyScope { - @Nonnull - String id(); +public interface DependencyScope extends ExtensibleEnum { boolean isTransitive(); @@ -42,122 +41,42 @@ public interface DependencyScope { * None. Allows you to declare dependencies (for example to alter reactor build order) but in reality dependencies * in this scope are not part of any build path scope. */ - DependencyScope NONE = new DependencyScope() { - @Override - public String id() { - return "none"; - } - - @Override - public boolean isTransitive() { - return false; - } - }; + DependencyScope NONE = dependencyScope("none", false); /** * Compile only. */ - DependencyScope COMPILE_ONLY = new DependencyScope() { - @Override - public String id() { - return "compile-only"; - } - - @Override - public boolean isTransitive() { - return false; - } - }; + DependencyScope COMPILE_ONLY = dependencyScope("compile-only", false); /** * Compile. */ - DependencyScope COMPILE = new DependencyScope() { - @Override - public String id() { - return "compile"; - } - - @Override - public boolean isTransitive() { - return true; - } - }; + DependencyScope COMPILE = dependencyScope("compile", true); /** * Runtime. */ - DependencyScope RUNTIME = new DependencyScope() { - @Override - public String id() { - return "runtime"; - } - - @Override - public boolean isTransitive() { - return true; - } - }; + DependencyScope RUNTIME = dependencyScope("runtime", true); /** * Provided. */ - DependencyScope PROVIDED = new DependencyScope() { - @Override - public String id() { - return "provided"; - } - - @Override - public boolean isTransitive() { - return false; - } - }; + DependencyScope PROVIDED = dependencyScope("provided", false); /** * Test compile only. */ - DependencyScope TEST_ONLY = new DependencyScope() { - @Override - public String id() { - return "test-only"; - } - - @Override - public boolean isTransitive() { - return false; - } - }; + DependencyScope TEST_ONLY = dependencyScope("test-only", false); /** * Test. */ - DependencyScope TEST = new DependencyScope() { - @Override - public String id() { - return "test"; - } - - @Override - public boolean isTransitive() { - return false; - } - }; + DependencyScope TEST = dependencyScope("test", false); /** * Test runtime. */ - DependencyScope TEST_RUNTIME = new DependencyScope() { - @Override - public String id() { - return "test-runtime"; - } - - @Override - public boolean isTransitive() { - return false; - } - }; + DependencyScope TEST_RUNTIME = dependencyScope("test-runtime", true); /** * System scope. @@ -165,15 +84,5 @@ public boolean isTransitive() { * Important: this scope {@code id} MUST BE KEPT in sync with label in * {@code org.eclipse.aether.util.artifact.Scopes#SYSTEM}. */ - DependencyScope SYSTEM = new DependencyScope() { - @Override - public String id() { - return "system"; - } - - @Override - public boolean isTransitive() { - return false; - } - }; + DependencyScope SYSTEM = dependencyScope("system", false); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnum.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnum.java new file mode 100644 index 000000000000..87d80075dd5a --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnum.java @@ -0,0 +1,37 @@ +/* + * 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; + +import org.apache.maven.api.annotations.Nonnull; + +/** + * Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface + * can be used as keys. + */ +public interface ExtensibleEnum { + + /** + * The {@code id} uniquely represents a value for this extensible enum. + * This id should be used to compute the equality and hash code for the instance. + * + * @return the id + */ + @Nonnull + String id(); +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java new file mode 100644 index 000000000000..60f394b30b86 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java @@ -0,0 +1,118 @@ +/* + * 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; + +import java.util.*; + +abstract class ExtensibleEnums { + + static Language language(String id) { + return new DefaultLanguage(id); + } + + static DependencyScope dependencyScope(String id, boolean transitive) { + return new DefaultDependencyScope(id, transitive); + } + + static BuildPathScope buildPathScope(String id, ProjectScope projectScope, DependencyScope... dependencyScopes) { + return new DefaultBuildPathScope(id, projectScope, dependencyScopes); + } + + static ProjectScope projectScope(String id) { + return new DefaultProjectScope(id); + } + + private static class DefaultExtensibleEnum implements ExtensibleEnum { + + private final String id; + + DefaultExtensibleEnum(String id) { + this.id = Objects.requireNonNull(id); + } + + public String id() { + return id; + } + + @Override + public int hashCode() { + return id().hashCode(); + } + + @Override + public boolean equals(Object obj) { + return obj != null && getClass() == obj.getClass() && id().equals(((DefaultExtensibleEnum) obj).id()); + } + + @Override + public String toString() { + return getClass().getSimpleName() + "[" + id() + "]"; + } + } + + private static class DefaultDependencyScope extends DefaultExtensibleEnum implements DependencyScope { + private final boolean transitive; + + DefaultDependencyScope(String id, boolean transitive) { + super(id); + this.transitive = transitive; + } + + @Override + public boolean isTransitive() { + return transitive; + } + } + + private static class DefaultBuildPathScope extends DefaultExtensibleEnum implements BuildPathScope { + private final ProjectScope projectScope; + private final Set dependencyScopes; + + DefaultBuildPathScope(String id, ProjectScope projectScope, DependencyScope... dependencyScopes) { + super(id); + this.projectScope = Objects.requireNonNull(projectScope); + this.dependencyScopes = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(Objects.requireNonNull(dependencyScopes)))); + } + + @Override + public ProjectScope projectScope() { + return projectScope; + } + + @Override + public Set getDependencyScopes() { + return dependencyScopes; + } + } + + private static class DefaultProjectScope extends DefaultExtensibleEnum implements ProjectScope { + + DefaultProjectScope(String id) { + super(id); + } + } + + private static class DefaultLanguage extends DefaultExtensibleEnum implements Language { + + DefaultLanguage(String id) { + super(id); + } + } +} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java index 9c228da08f77..0fc459287b57 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java @@ -20,8 +20,8 @@ import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; -import org.apache.maven.api.annotations.Nonnull; -import org.apache.maven.api.annotations.Nullable; + +import static org.apache.maven.api.ExtensibleEnums.language; /** * Language. @@ -33,74 +33,15 @@ */ @Experimental @Immutable -public interface Language { +@SuppressWarnings("checkstyle:InterfaceIsType") +public interface Language extends ExtensibleEnum { + /** * The "none" language. It is not versioned, family is same to itself, and compatible with itself only. * In turn, every {@link Language} implementation must be compatible with {@code NONE} language. */ - Language NONE = new Language() { - @Override - public String id() { - return "none"; - } - - @Override - public Language family() { - return this; - } - - @Override - public Version version() { - return null; - } - - @Override - public boolean isCompatibleWith(Language language) { - return this == language; - } - }; + Language NONE = language("none"); // TODO: this should be moved out from here to Java Support (builtin into core) - Language JAVA_FAMILY = new Language() { - @Override - public String id() { - return "java"; - } - - @Override - public Language family() { - return this; - } - - @Override - public Version version() { - return null; - } - - public boolean isCompatibleWith(Language language) { - Language family = language.family(); - return this == family || NONE == family; - } - }; - - @Nonnull - String id(); - - @Nonnull - Language family(); - - @Nullable - Version version(); - - /** - * Returns {@code true} if this language is compatible with provided language. - * For example "Java 8" is compatible with "Java 11", but other way is not true. - *

- * Important note: every implementation must return {@code true} if passed in language is {@link #NONE}. - *

- * By default, every language is compatible with itself and {@link #NONE} language. Override if needed. - */ - default boolean isCompatibleWith(Language language) { - return this == language || NONE == language.family(); - } + Language JAVA_FAMILY = language("java"); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java index 94fddc0e8191..ede4c46b073f 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java @@ -29,7 +29,7 @@ */ @Experimental @Immutable -public interface Packaging { +public interface Packaging extends ExtensibleEnum { /** * The packaging id. */ diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java index 6fc06eeac376..e663e61463a0 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java @@ -20,7 +20,8 @@ import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; -import org.apache.maven.api.annotations.Nonnull; + +import static org.apache.maven.api.ExtensibleEnums.projectScope; /** * Project scope. @@ -32,45 +33,16 @@ */ @Experimental @Immutable -@SuppressWarnings("checkstyle:magicnumber") -public interface ProjectScope extends Comparable { - @Nonnull - String id(); - - int ordinal(); - - @Override - default int compareTo(ProjectScope o) { - return this.ordinal() - o.ordinal(); - } +@SuppressWarnings("checkstyle:InterfaceIsType") +public interface ProjectScope extends ExtensibleEnum { /** * Main scope. */ - ProjectScope MAIN = new ProjectScope() { - @Override - public String id() { - return "main"; - } - - @Override - public int ordinal() { - return 10; - } - }; + ProjectScope MAIN = projectScope("main"); /** * Test scope. */ - ProjectScope TEST = new ProjectScope() { - @Override - public String id() { - return "test"; - } - - @Override - public int ordinal() { - return 20; - } - }; + ProjectScope TEST = projectScope("test"); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java index cd9dd024c7b7..4a5089350963 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java @@ -31,6 +31,7 @@ import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.annotations.ThreadSafe; import org.apache.maven.api.model.Repository; +import org.apache.maven.api.services.BuildPathScopeRegistry; import org.apache.maven.api.services.DependencyCoordinateFactory; import org.apache.maven.api.settings.Settings; @@ -501,4 +502,17 @@ Artifact createArtifact( */ @Nonnull VersionConstraint parseVersionConstraint(@Nonnull String versionConstraint); + + Type requireType(String id); + + Language requireLanguage(String id); + + Packaging requirePackaging(String id); + + ProjectScope requireProjectScope(String id); + + DependencyScope requireDependencyScope(String id); + + BuildPathScope requireBuildPathScope(String id); + } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java index 862049facf6e..003459926865 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java @@ -40,7 +40,7 @@ */ @Experimental @Immutable -public interface Type { +public interface Type extends ExtensibleEnum { /** * Returns the dependency type id. * The id uniquely identifies this dependency type. @@ -48,7 +48,7 @@ public interface Type { * @return the id of this type, never {@code null}. */ @Nonnull - String getId(); + String id(); /** * Returns the dependency type language. diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/BuildPathScopeRegistry.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/BuildPathScopeRegistry.java new file mode 100644 index 000000000000..c3ff0c223ff2 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/BuildPathScopeRegistry.java @@ -0,0 +1,23 @@ +/* + * 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.services; + +import org.apache.maven.api.BuildPathScope; + +public interface BuildPathScopeRegistry extends ExtensibleEnumRegistry {} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java index 6db92dbe652a..34483be0de67 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java @@ -89,7 +89,7 @@ static DependencyCoordinateFactoryRequest build(@Nonnull Session session, @Nonnu .version(dependency.getVersion().asString()) .classifier(dependency.getClassifier()) .extension(dependency.getExtension()) - .type(dependency.getType().getId()) + .type(dependency.getType().id()) .scope(dependency.getScope().id()) .optional(dependency.isOptional()) .build(); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java new file mode 100644 index 000000000000..1b3df452a928 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java @@ -0,0 +1,23 @@ +/* + * 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.services; + +import org.apache.maven.api.DependencyScope; + +public interface DependencyScopeRegistry extends ExtensibleEnumRegistry {} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageManager.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ExtensibleEnumRegistry.java similarity index 75% rename from api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageManager.java rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/ExtensibleEnumRegistry.java index c322407be744..e51cc9941ce4 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageManager.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ExtensibleEnumRegistry.java @@ -20,15 +20,15 @@ import java.util.Optional; -import org.apache.maven.api.Language; +import org.apache.maven.api.ExtensibleEnum; import org.apache.maven.api.Service; import org.apache.maven.api.annotations.Nonnull; -public interface LanguageManager extends Service { +public interface ExtensibleEnumRegistry extends Service { @Nonnull - Optional lookupLanguageFamily(String id); + Optional lookup(String id); - default Language requireLanguageFamily(String id) { - return lookupLanguageFamily(id).orElseThrow(() -> new IllegalArgumentException("Unknown language")); + default T require(String id) { + return lookup(id).orElseThrow(() -> new IllegalArgumentException("Unknown extensible enum value " + id)); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLanguageManager.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageRegistry.java similarity index 51% rename from maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLanguageManager.java rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageRegistry.java index c120eb83c506..d2f0f0933157 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLanguageManager.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/LanguageRegistry.java @@ -16,32 +16,8 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.internal.impl; - -import javax.inject.Named; -import javax.inject.Singleton; - -import java.util.Objects; -import java.util.Optional; +package org.apache.maven.api.services; import org.apache.maven.api.Language; -import org.apache.maven.api.services.LanguageManager; -/** - * TODO: this is session scoped as SPI can contribute. - */ -@Named -@Singleton -public class DefaultLanguageManager implements LanguageManager { - @Override - public Optional lookupLanguageFamily(String id) { - if (Objects.equals(Language.NONE.id(), id)) { - return Optional.of(Language.NONE); - } - // TODO: this is now just a shortcut; elaborate this, probably with some SPI LanguageSupport - if (Objects.equals(Language.JAVA_FAMILY.id(), id)) { - return Optional.of(Language.JAVA_FAMILY); - } - return Optional.empty(); - } -} +public interface LanguageRegistry extends ExtensibleEnumRegistry {} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingManager.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingRegistry.java similarity index 69% rename from api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingManager.java rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingRegistry.java index 07568b4f644d..e114e2664058 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingManager.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/PackagingRegistry.java @@ -18,17 +18,6 @@ */ package org.apache.maven.api.services; -import java.util.Optional; - import org.apache.maven.api.Packaging; -import org.apache.maven.api.Service; -import org.apache.maven.api.annotations.Nonnull; - -public interface PackagingManager extends Service { - @Nonnull - Optional lookupPackaging(String id); - default Packaging requirePackaging(String id) { - return lookupPackaging(id).orElseThrow(() -> new IllegalArgumentException("Unknown packaging")); - } -} +public interface PackagingRegistry extends ExtensibleEnumRegistry {} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectScopeRegistry.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectScopeRegistry.java new file mode 100644 index 000000000000..a3b4f24a5d58 --- /dev/null +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectScopeRegistry.java @@ -0,0 +1,26 @@ +/* + * 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.services; + +import org.apache.maven.api.ProjectScope; + +/** + * Manager for {@link ProjectScope}. + */ +public interface ProjectScopeRegistry extends ExtensibleEnumRegistry {} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/TypeRegistry.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/TypeRegistry.java index c484df40f5db..ca4c40d48a19 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/TypeRegistry.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/TypeRegistry.java @@ -18,7 +18,6 @@ */ package org.apache.maven.api.services; -import org.apache.maven.api.Service; import org.apache.maven.api.Type; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -29,7 +28,7 @@ * @since 4.0.0 */ @Experimental -public interface TypeRegistry extends Service { +public interface TypeRegistry extends ExtensibleEnumRegistry { /** * Obtain the {@link Type} from the specified {@code id}. @@ -40,5 +39,5 @@ public interface TypeRegistry extends Service { * @return the type */ @Nonnull - Type getType(@Nonnull String id); + Type require(@Nonnull String id); } diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/BuildPathScopeProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/BuildPathScopeProvider.java new file mode 100644 index 000000000000..3e8a54652178 --- /dev/null +++ b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/BuildPathScopeProvider.java @@ -0,0 +1,23 @@ +/* + * 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.spi; + +import org.apache.maven.api.BuildPathScope; + +public interface BuildPathScopeProvider extends ExtensibleEnumProvider {} diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java new file mode 100644 index 000000000000..a7ed7e6568ba --- /dev/null +++ b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java @@ -0,0 +1,23 @@ +/* + * 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.spi; + +import org.apache.maven.api.DependencyScope; + +public interface DependencyScopeProvider extends ExtensibleEnumProvider {} diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ExtensibleEnumProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ExtensibleEnumProvider.java new file mode 100644 index 000000000000..514651088ac3 --- /dev/null +++ b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ExtensibleEnumProvider.java @@ -0,0 +1,28 @@ +/* + * 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.spi; + +import java.util.Collection; + +import org.apache.maven.api.ExtensibleEnum; + +public interface ExtensibleEnumProvider { + + Collection provides(); +} diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/LanguageProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/LanguageProvider.java new file mode 100644 index 000000000000..9757d04f2005 --- /dev/null +++ b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/LanguageProvider.java @@ -0,0 +1,23 @@ +/* + * 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.spi; + +import org.apache.maven.api.Language; + +public interface LanguageProvider extends ExtensibleEnumProvider {} diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java new file mode 100644 index 000000000000..bfcf3a219100 --- /dev/null +++ b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java @@ -0,0 +1,23 @@ +/* + * 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.spi; + +import org.apache.maven.api.Packaging; + +public interface PackagingProvider extends ExtensibleEnumProvider {} diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ProjectScopeProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ProjectScopeProvider.java new file mode 100644 index 000000000000..c4a9a1f992a3 --- /dev/null +++ b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/ProjectScopeProvider.java @@ -0,0 +1,23 @@ +/* + * 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.spi; + +import org.apache.maven.api.ProjectScope; + +public interface ProjectScopeProvider extends ExtensibleEnumProvider {} diff --git a/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java b/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java index f25856333bb6..3a0c1a234f8f 100644 --- a/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java +++ b/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java @@ -62,7 +62,7 @@ public void onEvent(Object event) { public ArtifactHandler getArtifactHandler(String id) { return allHandlers.computeIfAbsent(id, k -> { - Type type = typeRegistry.getType(id); + Type type = typeRegistry.require(id); return new DefaultArtifactHandler( id, type.getExtension(), diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java index b5f3f9c61437..daa86e7426ec 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java @@ -35,13 +35,13 @@ class TypeRegistryAdapter implements ArtifactTypeRegistry { @Override public ArtifactType get(String typeId) { - Type type = typeRegistry.getType(typeId); + Type type = typeRegistry.require(typeId); if (type instanceof ArtifactType) { return (ArtifactType) type; } if (type != null) { return new DefaultType( - type.getId(), + type.id(), type.getLanguage(), type.getExtension(), type.getClassifier(), diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java index ce90e19be732..bc3702028ada 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java @@ -518,4 +518,34 @@ public Version resolveVersion(ArtifactCoordinate artifact) { public List resolveVersionRange(ArtifactCoordinate artifact) { return getService(VersionRangeResolver.class).resolve(this, artifact).getVersions(); } + + @Override + public Type requireType(String id) { + return getService(TypeRegistry.class).require(id); + } + + @Override + public Language requireLanguage(String id) { + return getService(LanguageRegistry.class).require(id); + } + + @Override + public Packaging requirePackaging(String id) { + return getService(PackagingRegistry.class).require(id); + } + + @Override + public ProjectScope requireProjectScope(String id) { + return getService(ProjectScopeRegistry.class).require(id); + } + + @Override + public DependencyScope requireDependencyScope(String id) { + return getService(DependencyScopeRegistry.class).require(id); + } + + @Override + public BuildPathScope requireBuildPathScope(String id) { + return getService(BuildPathScopeRegistry.class).require(id); + } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java index 3f2f06893ebf..c8b0d6b3c84d 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java @@ -102,7 +102,7 @@ public Type getType() { String type = dependency .getArtifact() .getProperty(ArtifactProperties.TYPE, dependency.getArtifact().getExtension()); - return session.getService(TypeRegistry.class).getType(type); + return session.requireType(type); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java index 54121e8da6d8..1095e4b433a7 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java @@ -73,7 +73,7 @@ public Type getType() { String type = dependency .getArtifact() .getProperty(ArtifactProperties.TYPE, dependency.getArtifact().getExtension()); - return session.getService(TypeRegistry.class).getType(type); + return session.requireType(type); } @Nonnull diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java similarity index 85% rename from maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java rename to maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java index 8364b1192670..9e5a05346b0c 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingManager.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java @@ -27,7 +27,7 @@ import org.apache.maven.api.Packaging; import org.apache.maven.api.Type; -import org.apache.maven.api.services.PackagingManager; +import org.apache.maven.api.services.PackagingRegistry; import org.apache.maven.api.services.TypeRegistry; import org.apache.maven.lifecycle.mapping.LifecycleMapping; @@ -36,24 +36,24 @@ */ @Named @Singleton -public class DefaultPackagingManager implements PackagingManager { +public class DefaultPackagingRegistry implements PackagingRegistry { private final Map lifecycleMappings; private final TypeRegistry typeRegistry; @Inject - public DefaultPackagingManager(Map lifecycleMappings, TypeRegistry typeRegistry) { + public DefaultPackagingRegistry(Map lifecycleMappings, TypeRegistry typeRegistry) { this.lifecycleMappings = lifecycleMappings; this.typeRegistry = typeRegistry; } @Override - public Optional lookupPackaging(String id) { + public Optional lookup(String id) { LifecycleMapping lifecycleMapping = lifecycleMappings.get(id); if (lifecycleMapping == null) { return Optional.empty(); } - Type type = typeRegistry.getType(id); + Type type = typeRegistry.require(id); if (type == null) { return Optional.empty(); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java index bd018ab05158..f962b830920e 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java @@ -27,7 +27,7 @@ import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.model.DependencyManagement; import org.apache.maven.api.model.Model; -import org.apache.maven.api.services.PackagingManager; +import org.apache.maven.api.services.PackagingRegistry; import org.apache.maven.api.services.TypeRegistry; import org.apache.maven.project.MavenProject; import org.apache.maven.project.artifact.ProjectArtifact; @@ -44,7 +44,7 @@ public class DefaultProject implements Project { public DefaultProject(InternalSession session, MavenProject project) { this.session = session; this.project = project; - this.packaging = session.getService(PackagingManager.class).requirePackaging(project.getPackaging()); + this.packaging = session.requirePackaging(project.getPackaging()); } public InternalSession getSession() { @@ -178,7 +178,7 @@ public String getExtension() { @Override public Type getType() { String type = dependency.getType(); - return session.getService(TypeRegistry.class).getType(type); + return session.requireType(type); } @Nonnull diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java index 9b272c31a4b4..b6042784d1d2 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java @@ -57,10 +57,15 @@ public DefaultType( } @Override - public String getId() { + public String id() { return dependencyProperties.asMap().get(ArtifactProperties.TYPE); } + @Override + public String getId() { + return id(); + } + @Override public Language getLanguage() { return language; diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java index 41174da40f5d..76c575c0c413 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java @@ -24,12 +24,13 @@ import java.util.ArrayList; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Type; import org.apache.maven.api.annotations.Nonnull; -import org.apache.maven.api.services.LanguageManager; +import org.apache.maven.api.services.LanguageRegistry; import org.apache.maven.api.services.TypeRegistry; import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.artifact.handler.manager.LegacyArtifactHandlerManager; @@ -43,7 +44,7 @@ public class DefaultTypeRegistry extends AbstractEventSpy implements TypeRegistry { private final Map types; - private final LanguageManager languageManager; + private final LanguageRegistry languageRegistry; private final ConcurrentHashMap usedTypes; @@ -53,9 +54,9 @@ public class DefaultTypeRegistry extends AbstractEventSpy implements TypeRegistr @Inject public DefaultTypeRegistry( - Map types, LanguageManager languageManager, LegacyArtifactHandlerManager manager) { + Map types, LanguageRegistry languageRegistry, LegacyArtifactHandlerManager manager) { this.types = nonNull(types, "types"); - this.languageManager = nonNull(languageManager, "languageManager"); + this.languageRegistry = nonNull(languageRegistry, "languageRegistry"); this.usedTypes = new ConcurrentHashMap<>(); this.legacyTypes = new ConcurrentHashMap<>(); this.manager = nonNull(manager, "artifactHandlerManager"); @@ -72,9 +73,14 @@ public void onEvent(Object event) { } } + @Override + public Optional lookup(String id) { + return Optional.of(require(id)); + } + @Override @Nonnull - public Type getType(String id) { + public Type require(String id) { nonNull(id, "id"); return usedTypes.computeIfAbsent(id, i -> { Type type = types.get(id); @@ -92,7 +98,7 @@ public Type getType(String id) { } return new DefaultType( id, - languageManager.requireLanguageFamily(handler.getLanguage()), + languageRegistry.require(handler.getLanguage()), handler.getExtension(), handler.getClassifier(), new DefaultDependencyProperties(flags)); diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java new file mode 100644 index 000000000000..1ef4dc912b79 --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java @@ -0,0 +1,115 @@ +/* + * 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.internal.impl; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.apache.maven.SessionScoped; +import org.apache.maven.api.*; +import org.apache.maven.api.services.*; +import org.apache.maven.api.spi.*; + +public class ExtensibleEnumRegistries { + + @Named + @SessionScoped + public static class DefaultBuildPathScopeRegistry + extends DefaultExtensibleEnumRegistry + implements BuildPathScopeRegistry { + + @Inject + public DefaultBuildPathScopeRegistry(List providers) { + super( + providers, + BuildPathScope.MAIN_COMPILE, + BuildPathScope.MAIN_RUNTIME, + BuildPathScope.TEST_COMPILE, + BuildPathScope.TEST_RUNTIME); + } + } + + @Named + @SessionScoped + public static class DefaultDependencyScopeRegistry + extends DefaultExtensibleEnumRegistry + implements DependencyScopeRegistry { + + @Inject + public DefaultDependencyScopeRegistry(List providers) { + super( + providers, + DependencyScope.NONE, + DependencyScope.COMPILE_ONLY, + DependencyScope.COMPILE, + DependencyScope.RUNTIME, + DependencyScope.PROVIDED, + DependencyScope.TEST_ONLY, + DependencyScope.TEST, + DependencyScope.TEST_RUNTIME, + DependencyScope.SYSTEM); + } + } + + @Named + @SessionScoped + public static class DefaultProjectScopeRegistry + extends DefaultExtensibleEnumRegistry implements ProjectScopeRegistry { + + @Inject + public DefaultProjectScopeRegistry(List providers) { + super(providers, ProjectScope.MAIN, ProjectScope.TEST); + } + } + + @Named + @Singleton + public static class DefaultLanguageRegistry extends DefaultExtensibleEnumRegistry + implements LanguageRegistry { + + @Inject + public DefaultLanguageRegistry(List providers) { + super(providers, Language.NONE, Language.JAVA_FAMILY); + } + } + + static class DefaultExtensibleEnumRegistry> + implements ExtensibleEnumRegistry { + + private final Map values; + + DefaultExtensibleEnumRegistry(List

providers, T... builtinValues) { + values = Stream.concat( + Stream.of(builtinValues), providers.stream().flatMap(p -> p.provides().stream())) + .collect(Collectors.toMap(t -> t.id(), t -> t)); + } + + @Override + public Optional lookup(String id) { + return Optional.ofNullable(values.get(id)); + } + } +} diff --git a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java index 8fb0163fbdab..dd6beba8aff8 100644 --- a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java @@ -150,8 +150,7 @@ protected MavenSession createMavenSession(File pom, Properties executionProperti initRepoSession(configuration); DefaultSessionFactory defaultSessionFactory = - new DefaultSessionFactory(mock(RepositorySystem.class), - null, new DefaultLookup(container), null); + new DefaultSessionFactory(mock(RepositorySystem.class), null, new DefaultLookup(container), null); MavenSession session = new MavenSession( getContainer(), configuration.getRepositorySession(), request, new DefaultMavenExecutionResult()); From cf087274a353ded7ac92beef45488bc2e8ebcff3 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 15:12:36 +0100 Subject: [PATCH 09/17] Use the new scopes --- .../org/apache/maven/api/BuildPathScope.java | 2 +- .../java/org/apache/maven/api/Dependency.java | 2 +- .../maven/api/DependencyCoordinate.java | 2 +- .../org/apache/maven/api/ExtensibleEnums.java | 2 +- .../org/apache/maven/api/ResolutionScope.java | 97 ------------------- .../main/java/org/apache/maven/api/Scope.java | 66 ------------- .../java/org/apache/maven/api/Session.java | 8 +- .../api/services/DependencyResolver.java | 14 ++- .../services/DependencyResolverRequest.java | 26 ++--- .../api/services/ExtensibleEnumRegistry.java | 2 +- .../maven/internal/impl/AbstractSession.java | 4 +- .../internal/impl/DefaultDependency.java | 7 +- .../impl/DefaultDependencyCoordinate.java | 5 +- .../impl/DefaultDependencyResolver.java | 22 ++--- .../impl/DefaultPackagingRegistry.java | 2 +- .../maven/internal/impl/DefaultProject.java | 6 +- .../apache/maven/internal/impl/TestApi.java | 10 +- 17 files changed, 47 insertions(+), 230 deletions(-) delete mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/ResolutionScope.java delete mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/Scope.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java index 3142ee39bd71..47dbd73c70c2 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java @@ -42,7 +42,7 @@ public interface BuildPathScope extends ExtensibleEnum { ProjectScope projectScope(); @Nonnull - Set getDependencyScopes(); + Set dependencyScopes(); BuildPathScope MAIN_COMPILE = buildPathScope( "main-compile", diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java index efad1415adf8..f0617a0a1e39 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java @@ -39,7 +39,7 @@ public interface Dependency extends Artifact { DependencyProperties getDependencyProperties(); @Nonnull - Scope getScope(); + DependencyScope getScope(); boolean isOptional(); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinate.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinate.java index 7ba4bd1ec75e..c0295bfaa0e4 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinate.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinate.java @@ -41,7 +41,7 @@ public interface DependencyCoordinate extends ArtifactCoordinate { Type getType(); @Nonnull - Scope getScope(); + DependencyScope getScope(); @Nullable Boolean getOptional(); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java index 60f394b30b86..4035842b6caf 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java @@ -97,7 +97,7 @@ public ProjectScope projectScope() { } @Override - public Set getDependencyScopes() { + public Set dependencyScopes() { return dependencyScopes; } } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ResolutionScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ResolutionScope.java deleted file mode 100644 index 7d003694d633..000000000000 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ResolutionScope.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.apache.maven.api.annotations.Experimental; - -/** - * Dependencies resolution scopes available before - * mojo execution. - * - * Important note: The {@code id} values of this enum correspond to constants of - * {@code org.apache.maven.artifact.Artifact} class and MUST BE KEPT IN SYNC. - * - * @since 4.0.0 - */ -@Experimental -public enum ResolutionScope { - /** - * compile resolution scope - * = compile-only + compile + provided dependencies - */ - PROJECT_COMPILE("project-compile", Scope.EMPTY, Scope.COMPILE_ONLY, Scope.COMPILE, Scope.PROVIDED), - /** - * runtime resolution scope - * = compile + runtime dependencies - */ - PROJECT_RUNTIME("project-runtime", Scope.EMPTY, Scope.COMPILE, Scope.RUNTIME), - /** - * test-compile resolution scope - * = compile-only + compile + provided + test-compile-only + test - * dependencies - */ - TEST_COMPILE( - "test-compile", - Scope.EMPTY, - Scope.COMPILE_ONLY, - Scope.COMPILE, - Scope.PROVIDED, - Scope.TEST_COMPILE_ONLY, - Scope.TEST), - /** - * test resolution scope - * = compile + runtime + provided + test + test-runtime - * dependencies - */ - TEST_RUNTIME( - "test-runtime", Scope.EMPTY, Scope.COMPILE, Scope.RUNTIME, Scope.PROVIDED, Scope.TEST, Scope.TEST_RUNTIME); - - private static final Map VALUES = - Stream.of(ResolutionScope.values()).collect(Collectors.toMap(ResolutionScope::id, s -> s)); - - public static ResolutionScope fromString(String id) { - return Optional.ofNullable(VALUES.get(id)) - .orElseThrow(() -> new IllegalArgumentException("Unknown resolution scope " + id)); - } - - private final String id; - private final Set scopes; - - ResolutionScope(String id, Scope... scopes) { - this.id = id; - this.scopes = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(scopes))); - } - - public String id() { - return this.id; - } - - public Set scopes() { - return scopes; - } -} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Scope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Scope.java deleted file mode 100644 index 624293c1e92d..000000000000 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Scope.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.maven.api.annotations.Experimental; - -/** - * Scope for a dependency - * - * @since 4.0.0 - */ -@Experimental -public enum Scope { - EMPTY(""), - COMPILE_ONLY("compile-only"), - COMPILE("compile"), - RUNTIME("runtime"), - PROVIDED("provided"), - TEST_COMPILE_ONLY("test-compile-only"), - TEST("test"), - TEST_RUNTIME("test-runtime"), - IMPORT("import"); // TODO: v4: remove import scope somehow - - private final String id; - - private static final Map SCOPES; - - static { - Map scopes = new HashMap<>(); - for (Scope s : Scope.values()) { - scopes.put(s.id, s); - } - SCOPES = scopes; - } - - Scope(String id) { - this.id = id; - } - - public String id() { - return this.id; - } - - public static Scope get(String scope) { - return SCOPES.get(scope); - } -} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java index 4a5089350963..bc6105f99b65 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java @@ -31,7 +31,6 @@ import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.annotations.ThreadSafe; import org.apache.maven.api.model.Repository; -import org.apache.maven.api.services.BuildPathScopeRegistry; import org.apache.maven.api.services.DependencyCoordinateFactory; import org.apache.maven.api.settings.Settings; @@ -428,11 +427,11 @@ Artifact createArtifact( /** * Shortcut for {@code getService(DependencyResolver.class).flatten(...)}. * - * @see org.apache.maven.api.services.DependencyResolver#flatten(Session, Node, ResolutionScope) + * @see org.apache.maven.api.services.DependencyResolver#flatten(Session, Node, BuildPathScope) * @throws org.apache.maven.api.services.DependencyResolverException if the dependency flattening failed */ @Nonnull - List flattenDependencies(@Nonnull Node node, @Nonnull ResolutionScope scope); + List flattenDependencies(@Nonnull Node node, @Nonnull BuildPathScope scope); @Nonnull List resolveDependencies(@Nonnull DependencyCoordinate dependencyCoordinate); @@ -441,7 +440,7 @@ Artifact createArtifact( List resolveDependencies(@Nonnull List dependencyCoordinates); @Nonnull - List resolveDependencies(@Nonnull Project project, @Nonnull ResolutionScope scope); + List resolveDependencies(@Nonnull Project project, @Nonnull BuildPathScope scope); /** * Resolves an artifact's meta version (if any) to a concrete version. For example, resolves "1.0-SNAPSHOT" @@ -514,5 +513,4 @@ Artifact createArtifact( DependencyScope requireDependencyScope(String id); BuildPathScope requireBuildPathScope(String id); - } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java index 3da46b1f5bde..440b1b3f023a 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java @@ -20,10 +20,10 @@ import java.util.List; +import org.apache.maven.api.BuildPathScope; import org.apache.maven.api.DependencyCoordinate; import org.apache.maven.api.Node; import org.apache.maven.api.Project; -import org.apache.maven.api.ResolutionScope; import org.apache.maven.api.Service; import org.apache.maven.api.Session; import org.apache.maven.api.annotations.Experimental; @@ -35,7 +35,7 @@ @Experimental public interface DependencyResolver extends Service { - List flatten(Session session, Node node, ResolutionScope scope) throws DependencyResolverException; + List flatten(Session session, Node node, BuildPathScope scope) throws DependencyResolverException; /** * This method collects, flattens and resolves the dependencies. @@ -47,7 +47,7 @@ public interface DependencyResolver extends Service { * @throws ArtifactResolverException * * @see DependencyCollector#collect(DependencyCollectorRequest) - * @see #flatten(Session, Node, ResolutionScope) + * @see #flatten(Session, Node, BuildPathScope) * @see ArtifactResolver#resolve(ArtifactResolverRequest) */ DependencyResolverResult resolve(DependencyResolverRequest request) @@ -60,7 +60,7 @@ default DependencyResolverResult resolve(@Nonnull Session session, @Nonnull Proj @Nonnull default DependencyResolverResult resolve( - @Nonnull Session session, @Nonnull Project project, @Nonnull ResolutionScope scope) { + @Nonnull Session session, @Nonnull Project project, @Nonnull BuildPathScope scope) { return resolve(DependencyResolverRequest.build(session, project, scope)); } @@ -71,7 +71,7 @@ default DependencyResolverResult resolve(@Nonnull Session session, @Nonnull Depe @Nonnull default DependencyResolverResult resolve( - @Nonnull Session session, @Nonnull DependencyCoordinate dependency, @Nonnull ResolutionScope scope) { + @Nonnull Session session, @Nonnull DependencyCoordinate dependency, @Nonnull BuildPathScope scope) { return resolve(DependencyResolverRequest.build(session, dependency, scope)); } @@ -83,9 +83,7 @@ default DependencyResolverResult resolve( @Nonnull default DependencyResolverResult resolve( - @Nonnull Session session, - @Nonnull List dependencies, - @Nonnull ResolutionScope scope) { + @Nonnull Session session, @Nonnull List dependencies, @Nonnull BuildPathScope scope) { return resolve(DependencyResolverRequest.build(session, dependencies, scope)); } } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java index 0519ececf1d7..454766ec83c3 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java @@ -22,9 +22,9 @@ import java.util.List; import org.apache.maven.api.Artifact; +import org.apache.maven.api.BuildPathScope; import org.apache.maven.api.DependencyCoordinate; import org.apache.maven.api.Project; -import org.apache.maven.api.ResolutionScope; import org.apache.maven.api.Session; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -35,7 +35,7 @@ public interface DependencyResolverRequest extends DependencyCollectorRequest { @Nonnull - ResolutionScope getResolutionScope(); + BuildPathScope getResolutionScope(); @Nonnull static DependencyResolverRequestBuilder builder() { @@ -44,11 +44,11 @@ static DependencyResolverRequestBuilder builder() { @Nonnull static DependencyResolverRequest build(Session session, Project project) { - return build(session, project, ResolutionScope.PROJECT_RUNTIME); + return build(session, project, BuildPathScope.MAIN_RUNTIME); } @Nonnull - static DependencyResolverRequest build(Session session, Project project, ResolutionScope scope) { + static DependencyResolverRequest build(Session session, Project project, BuildPathScope scope) { return new DependencyResolverRequestBuilder() .session(session) .project(project) @@ -58,11 +58,11 @@ static DependencyResolverRequest build(Session session, Project project, Resolut @Nonnull static DependencyResolverRequest build(Session session, DependencyCoordinate dependency) { - return build(session, dependency, ResolutionScope.PROJECT_RUNTIME); + return build(session, dependency, BuildPathScope.MAIN_RUNTIME); } @Nonnull - static DependencyResolverRequest build(Session session, DependencyCoordinate dependency, ResolutionScope scope) { + static DependencyResolverRequest build(Session session, DependencyCoordinate dependency, BuildPathScope scope) { return new DependencyResolverRequestBuilder() .session(session) .dependency(dependency) @@ -72,12 +72,12 @@ static DependencyResolverRequest build(Session session, DependencyCoordinate dep @Nonnull static DependencyResolverRequest build(Session session, List dependencies) { - return build(session, dependencies, ResolutionScope.PROJECT_RUNTIME); + return build(session, dependencies, BuildPathScope.MAIN_RUNTIME); } @Nonnull static DependencyResolverRequest build( - Session session, List dependencies, ResolutionScope scope) { + Session session, List dependencies, BuildPathScope scope) { return new DependencyResolverRequestBuilder() .session(session) .dependencies(dependencies) @@ -87,7 +87,7 @@ static DependencyResolverRequest build( @NotThreadSafe class DependencyResolverRequestBuilder extends DependencyCollectorRequestBuilder { - ResolutionScope resolutionScope; + BuildPathScope resolutionScope; @Nonnull @Override @@ -154,7 +154,7 @@ public DependencyResolverRequestBuilder verbose(boolean verbose) { } @Nonnull - public DependencyResolverRequestBuilder resolutionScope(@Nonnull ResolutionScope resolutionScope) { + public DependencyResolverRequestBuilder resolutionScope(@Nonnull BuildPathScope resolutionScope) { this.resolutionScope = resolutionScope; return this; } @@ -167,7 +167,7 @@ public DependencyResolverRequest build() { static class DefaultDependencyResolverRequest extends DefaultDependencyCollectorRequest implements DependencyResolverRequest { - private final ResolutionScope resolutionScope; + private final BuildPathScope resolutionScope; DefaultDependencyResolverRequest( Session session, @@ -177,7 +177,7 @@ static class DefaultDependencyResolverRequest extends DefaultDependencyCollector Collection dependencies, Collection managedDependencies, boolean verbose, - ResolutionScope resolutionScope) { + BuildPathScope resolutionScope) { super(session, project, rootArtifact, root, dependencies, managedDependencies, verbose); this.resolutionScope = nonNull(resolutionScope, "resolutionScope cannot be null"); if (verbose) { @@ -187,7 +187,7 @@ static class DefaultDependencyResolverRequest extends DefaultDependencyCollector @Nonnull @Override - public ResolutionScope getResolutionScope() { + public BuildPathScope getResolutionScope() { return resolutionScope; } } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ExtensibleEnumRegistry.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ExtensibleEnumRegistry.java index e51cc9941ce4..3a5673c583e2 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ExtensibleEnumRegistry.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ExtensibleEnumRegistry.java @@ -29,6 +29,6 @@ public interface ExtensibleEnumRegistry extends Servic Optional lookup(String id); default T require(String id) { - return lookup(id).orElseThrow(() -> new IllegalArgumentException("Unknown extensible enum value " + id)); + return lookup(id).orElseThrow(() -> new IllegalArgumentException("Unknown extensible enum value '" + id + "'")); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java index bc3702028ada..18e91be78414 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java @@ -462,7 +462,7 @@ public Node collectDependencies(@Nonnull DependencyCoordinate dependency) { @Nonnull @Override - public List flattenDependencies(@Nonnull Node node, @Nonnull ResolutionScope scope) { + public List flattenDependencies(@Nonnull Node node, @Nonnull BuildPathScope scope) { return getService(DependencyResolver.class).flatten(this, node, scope); } @@ -477,7 +477,7 @@ public List resolveDependencies(List dependencies) { } @Override - public List resolveDependencies(Project project, ResolutionScope scope) { + public List resolveDependencies(Project project, BuildPathScope scope) { return getService(DependencyResolver.class) .resolve(this, project, scope) .getPaths(); diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java index c8b0d6b3c84d..7c63b34279c2 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java @@ -24,12 +24,11 @@ import org.apache.maven.api.Dependency; import org.apache.maven.api.DependencyCoordinate; import org.apache.maven.api.DependencyProperties; -import org.apache.maven.api.Scope; +import org.apache.maven.api.DependencyScope; import org.apache.maven.api.Type; import org.apache.maven.api.Version; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.annotations.Nullable; -import org.apache.maven.api.services.TypeRegistry; import org.apache.maven.repository.internal.DefaultModelVersionParser; import org.eclipse.aether.artifact.ArtifactProperties; @@ -117,8 +116,8 @@ public boolean isSnapshot() { @Nonnull @Override - public Scope getScope() { - return Scope.get(dependency.getScope()); + public DependencyScope getScope() { + return session.requireDependencyScope(dependency.getScope()); } @Nullable diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java index 1095e4b433a7..c0420f5fbba4 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java @@ -23,7 +23,6 @@ import org.apache.maven.api.*; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.annotations.Nullable; -import org.apache.maven.api.services.TypeRegistry; import org.eclipse.aether.artifact.ArtifactProperties; import static org.apache.maven.internal.impl.Utils.nonNull; @@ -78,8 +77,8 @@ public Type getType() { @Nonnull @Override - public Scope getScope() { - return Scope.get(dependency.getScope()); + public DependencyScope getScope() { + return session.requireDependencyScope(dependency.getScope()); } @Nullable diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java index c5ba1a32b02d..14bb73953403 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java @@ -33,14 +33,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import org.apache.maven.api.Artifact; -import org.apache.maven.api.ArtifactCoordinate; -import org.apache.maven.api.Dependency; -import org.apache.maven.api.Node; -import org.apache.maven.api.Project; -import org.apache.maven.api.ResolutionScope; -import org.apache.maven.api.Scope; -import org.apache.maven.api.Session; +import org.apache.maven.api.*; import org.apache.maven.api.services.*; import org.apache.maven.lifecycle.LifecycleExecutionException; import org.apache.maven.lifecycle.internal.LifecycleDependencyResolver; @@ -58,7 +51,7 @@ public class DefaultDependencyResolver implements DependencyResolver { @Override - public List flatten(Session s, Node node, ResolutionScope scope) throws DependencyResolverException { + public List flatten(Session s, Node node, BuildPathScope scope) throws DependencyResolverException { InternalSession session = InternalSession.from(s); DependencyNode root = cast(AbstractNode.class, node, "node").getDependencyNode(); List dependencies = session.getRepositorySystem() @@ -67,8 +60,9 @@ public List flatten(Session s, Node node, ResolutionScope scope) throws De return map(dependencies, session::getNode); } - private static DependencyFilter getScopeDependencyFilter(ResolutionScope scope) { - Set scopes = scope.scopes().stream().map(Scope::id).collect(Collectors.toSet()); + private static DependencyFilter getScopeDependencyFilter(BuildPathScope scope) { + Set scopes = + scope.dependencyScopes().stream().map(DependencyScope::id).collect(Collectors.toSet()); return (n, p) -> { org.eclipse.aether.graph.Dependency d = n.getDependency(); return d == null || scopes.contains(d.getScope()); @@ -130,7 +124,7 @@ private Stream stream(DependencyNode node) { return Stream.concat(Stream.of(node), node.getChildren().stream().flatMap(this::stream)); } - private DependencyResolutionResult resolveDependencies(Session session, Project project, ResolutionScope scope) { + private DependencyResolutionResult resolveDependencies(Session session, Project project, BuildPathScope scope) { Collection toResolve = toScopes(scope); try { LifecycleDependencyResolver lifecycleDependencyResolver = @@ -151,8 +145,8 @@ private MavenProject getMavenProject(Project project) { return ((DefaultProject) project).getProject(); } - private Collection toScopes(ResolutionScope scope) { - return map(scope.scopes(), Scope::id); + private Collection toScopes(BuildPathScope scope) { + return map(scope.dependencyScopes(), DependencyScope::id); } static class DefaultDependencyResolverResult implements DependencyResolverResult { diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java index 9e5a05346b0c..2a5b8a63b53e 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultPackagingRegistry.java @@ -53,7 +53,7 @@ public Optional lookup(String id) { if (lifecycleMapping == null) { return Optional.empty(); } - Type type = typeRegistry.require(id); + Type type = typeRegistry.lookup(id).orElse(null); if (type == null) { return Optional.empty(); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java index f962b830920e..e2f59668eca8 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java @@ -27,8 +27,6 @@ import org.apache.maven.api.annotations.Nullable; import org.apache.maven.api.model.DependencyManagement; import org.apache.maven.api.model.Model; -import org.apache.maven.api.services.PackagingRegistry; -import org.apache.maven.api.services.TypeRegistry; import org.apache.maven.project.MavenProject; import org.apache.maven.project.artifact.ProjectArtifact; import org.eclipse.aether.util.artifact.ArtifactIdUtils; @@ -183,8 +181,8 @@ public Type getType() { @Nonnull @Override - public Scope getScope() { - return Scope.get(dependency.getScope()); + public DependencyScope getScope() { + return session.requireDependencyScope(dependency.getScope()); } @Override diff --git a/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java b/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java index 8f2ec04eb984..9f165930708e 100644 --- a/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java +++ b/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java @@ -30,13 +30,7 @@ import java.util.Optional; import java.util.stream.Collectors; -import org.apache.maven.api.Artifact; -import org.apache.maven.api.ArtifactCoordinate; -import org.apache.maven.api.Dependency; -import org.apache.maven.api.Node; -import org.apache.maven.api.Project; -import org.apache.maven.api.ResolutionScope; -import org.apache.maven.api.Session; +import org.apache.maven.api.*; import org.apache.maven.api.services.DependencyResolver; import org.apache.maven.api.services.DependencyResolverResult; import org.apache.maven.api.services.ProjectBuilder; @@ -200,7 +194,7 @@ void testProjectDependencies() { assertNotNull(root); DependencyResolverResult result = - session.getService(DependencyResolver.class).resolve(session, project, ResolutionScope.PROJECT_RUNTIME); + session.getService(DependencyResolver.class).resolve(session, project, BuildPathScope.MAIN_RUNTIME); assertNotNull(result); List deps = new ArrayList<>(result.getDependencies().keySet()); List deps2 = result.getNodes().stream() From ff413ae6d95e5dd98ca5c5f498f433822b0ffea8 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 15:39:20 +0100 Subject: [PATCH 10/17] Fix UT --- .../src/main/java/org/apache/maven/api/BuildPathScope.java | 7 +++++-- .../main/java/org/apache/maven/api/DependencyScope.java | 5 +++++ .../maven/internal/impl/ExtensibleEnumRegistries.java | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java index 47dbd73c70c2..5cff60cf87d9 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java @@ -47,16 +47,18 @@ public interface BuildPathScope extends ExtensibleEnum { BuildPathScope MAIN_COMPILE = buildPathScope( "main-compile", ProjectScope.MAIN, + DependencyScope.EMPTY, DependencyScope.COMPILE_ONLY, DependencyScope.COMPILE, DependencyScope.PROVIDED); - BuildPathScope MAIN_RUNTIME = - buildPathScope("main-runtime", ProjectScope.MAIN, DependencyScope.COMPILE, DependencyScope.RUNTIME); + BuildPathScope MAIN_RUNTIME = buildPathScope( + "main-runtime", ProjectScope.MAIN, DependencyScope.EMPTY, DependencyScope.COMPILE, DependencyScope.RUNTIME); BuildPathScope TEST_COMPILE = buildPathScope( "test-compile", ProjectScope.TEST, + DependencyScope.EMPTY, DependencyScope.COMPILE, DependencyScope.PROVIDED, DependencyScope.TEST_ONLY, @@ -65,6 +67,7 @@ public interface BuildPathScope extends ExtensibleEnum { BuildPathScope TEST_RUNTIME = buildPathScope( "test-runtime", ProjectScope.TEST, + DependencyScope.EMPTY, DependencyScope.COMPILE, DependencyScope.RUNTIME, DependencyScope.PROVIDED, diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java index ab64575b8cda..f3d26aa0686f 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java @@ -43,6 +43,11 @@ public interface DependencyScope extends ExtensibleEnum { */ DependencyScope NONE = dependencyScope("none", false); + /** + * Empty scope. + */ + DependencyScope EMPTY = dependencyScope("", false); + /** * Compile only. */ diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java index 1ef4dc912b79..e6011bf6679e 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java @@ -63,6 +63,7 @@ public DefaultDependencyScopeRegistry(List providers) { super( providers, DependencyScope.NONE, + DependencyScope.EMPTY, DependencyScope.COMPILE_ONLY, DependencyScope.COMPILE, DependencyScope.RUNTIME, From 56b6b5a9973be2fac4e9c9df8271f50f3c56163c Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 18:31:56 +0100 Subject: [PATCH 11/17] Remove DependencyProperties interface --- .../java/org/apache/maven/api/Dependency.java | 8 --- .../maven/api/DependencyProperties.java | 57 ---------------- .../main/java/org/apache/maven/api/Type.java | 16 +---- .../internal/aether/TypeRegistryAdapter.java | 3 +- .../internal/impl/DefaultDependency.java | 9 --- .../impl/DefaultDependencyProperties.java | 66 ------------------- .../maven/internal/impl/DefaultType.java | 41 +++++++----- .../internal/impl/DefaultTypeRegistry.java | 12 +--- .../internal/impl/types/BomTypeProvider.java | 3 +- .../internal/impl/types/EarTypeProvider.java | 9 +-- .../impl/types/EjbClientTypeProvider.java | 9 +-- .../internal/impl/types/EjbTypeProvider.java | 9 +-- .../internal/impl/types/JarTypeProvider.java | 9 +-- .../impl/types/JavaSourceTypeProvider.java | 3 +- .../impl/types/JavadocTypeProvider.java | 9 +-- .../impl/types/MavenPluginTypeProvider.java | 9 +-- .../internal/impl/types/ParTypeProvider.java | 9 +-- .../internal/impl/types/PomTypeProvider.java | 3 +- .../internal/impl/types/RarTypeProvider.java | 9 +-- .../impl/types/TestJarTypeProvider.java | 9 +-- .../internal/impl/types/WarTypeProvider.java | 9 +-- 21 files changed, 44 insertions(+), 267 deletions(-) delete mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java delete mode 100644 maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java index f0617a0a1e39..b64fffc0d5e0 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java @@ -30,14 +30,6 @@ public interface Dependency extends Artifact { @Nonnull Type getType(); - /** - * The dependency properties. - * - * @return the dependency properties, never {@code null} - */ - @Nonnull - DependencyProperties getDependencyProperties(); - @Nonnull DependencyScope getScope(); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java deleted file mode 100644 index ad52851cd458..000000000000 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyProperties.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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; - -import java.util.Map; - -import org.apache.maven.api.annotations.Experimental; -import org.apache.maven.api.annotations.Immutable; -import org.apache.maven.api.annotations.Nonnull; - -/** - * Dependency properties supported by Maven Core. - * - * @since 4.0.0 - */ -@Experimental -@Immutable -public interface DependencyProperties { - /** - * Boolean flag telling that dependency contains all of its dependencies. Value of this key should be parsed with - * {@link Boolean#parseBoolean(String)} to obtain value. - */ - String FLAG_INCLUDES_DEPENDENCIES = "includesDependencies"; - - /** - * Boolean flag telling that dependency is meant to be part of build path. Value of this key should be parsed with - * {@link Boolean#parseBoolean(String)} to obtain value. - */ - String FLAG_BUILD_PATH_CONSTITUENT = "constitutesBuildPath"; - - /** - * Returns immutable "map view" of all the properties. - */ - @Nonnull - Map asMap(); - - /** - * Returns {@code true} if given flag is {@code true}. - */ - boolean checkFlag(@Nonnull String flag); -} diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java index 003459926865..45a46fd1a1ca 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java @@ -81,9 +81,7 @@ public interface Type extends ExtensibleEnum { * * @return if the artifact should be added to the build path */ - default boolean isBuildPathConstituent() { - return getDependencyProperties().checkFlag(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT); - } + boolean isBuildPathConstituent(); /** * Specifies if the artifact already embeds its own dependencies. @@ -92,15 +90,5 @@ default boolean isBuildPathConstituent() { * * @return if the artifact's dependencies are included in the artifact */ - default boolean isIncludesDependencies() { - return getDependencyProperties().checkFlag(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES); - } - - /** - * Gets the default properties associated with this type. - * - * @return the default properties, never {@code null}. - */ - @Nonnull - DependencyProperties getDependencyProperties(); + boolean isIncludesDependencies(); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java index daa86e7426ec..e06dd9e13cb1 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java @@ -45,7 +45,8 @@ public ArtifactType get(String typeId) { type.getLanguage(), type.getExtension(), type.getClassifier(), - type.getDependencyProperties()); + type.isBuildPathConstituent(), + type.isIncludesDependencies()); } return null; } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java index 7c63b34279c2..5a5b3f9b0515 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java @@ -23,7 +23,6 @@ import org.apache.maven.api.Artifact; import org.apache.maven.api.Dependency; import org.apache.maven.api.DependencyCoordinate; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.DependencyScope; import org.apache.maven.api.Type; import org.apache.maven.api.Version; @@ -37,15 +36,12 @@ public class DefaultDependency implements Dependency { private final InternalSession session; private final org.eclipse.aether.graph.Dependency dependency; - private final DependencyProperties dependencyProperties; private final String key; public DefaultDependency( @Nonnull InternalSession session, @Nonnull org.eclipse.aether.graph.Dependency dependency) { this.session = nonNull(session, "session"); this.dependency = nonNull(dependency, "dependency"); - this.dependencyProperties = - new DefaultDependencyProperties(dependency.getArtifact().getProperties()); this.key = getGroupId() + ':' + getArtifactId() @@ -104,11 +100,6 @@ public Type getType() { return session.requireType(type); } - @Override - public DependencyProperties getDependencyProperties() { - return dependencyProperties; - } - @Override public boolean isSnapshot() { return DefaultModelVersionParser.checkSnapshot(dependency.getArtifact().getVersion()); diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java deleted file mode 100644 index 2ee780713034..000000000000 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyProperties.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.internal.impl; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.apache.maven.api.DependencyProperties; -import org.apache.maven.api.annotations.Nonnull; - -import static org.apache.maven.internal.impl.Utils.nonNull; - -/** - * Default implementation of artifact properties. - */ -public class DefaultDependencyProperties implements DependencyProperties { - private final Map properties; - - public DefaultDependencyProperties(String... flags) { - this(Arrays.asList(flags)); - } - - public DefaultDependencyProperties(@Nonnull Collection flags) { - nonNull(flags, "flags"); - HashMap map = new HashMap<>(); - for (String flag : flags) { - map.put(flag, Boolean.TRUE.toString()); - } - this.properties = Collections.unmodifiableMap(map); - } - - public DefaultDependencyProperties(@Nonnull Map properties) { - this.properties = Collections.unmodifiableMap(nonNull(properties, "properties")); - } - - @Nonnull - @Override - public Map asMap() { - return properties; - } - - @Override - public boolean checkFlag(@Nonnull String flag) { - nonNull(flag, "flag"); - return Boolean.parseBoolean(properties.getOrDefault(flag, "")); - } -} diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java index b6042784d1d2..9dca04e0ea35 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultType.java @@ -18,10 +18,10 @@ */ package org.apache.maven.internal.impl; +import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; import org.eclipse.aether.artifact.ArtifactProperties; @@ -30,35 +30,34 @@ import static org.apache.maven.internal.impl.Utils.nonNull; public class DefaultType implements Type, ArtifactType { + private final String id; + private final Language language; private final String extension; private final String classifier; - - private final DependencyProperties dependencyProperties; + private final boolean buildPathConstituent; + private final boolean includesDependencies; public DefaultType( String id, Language language, String extension, String classifier, - DependencyProperties dependencyProperties) { - nonNull(id, "id"); - nonNull(language, "language"); - this.language = language; + boolean buildPathConstituent, + boolean includesDependencies) { + this.id = nonNull(id, "id"); + this.language = nonNull(language, "language"); this.extension = nonNull(extension, "extension"); this.classifier = classifier; - nonNull(dependencyProperties, "dependencyProperties"); - HashMap props = new HashMap<>(dependencyProperties.asMap()); - props.put(ArtifactProperties.TYPE, id); - props.put(ArtifactProperties.LANGUAGE, language.id()); - this.dependencyProperties = new DefaultDependencyProperties(props); + this.buildPathConstituent = buildPathConstituent; + this.includesDependencies = includesDependencies; } @Override public String id() { - return dependencyProperties.asMap().get(ArtifactProperties.TYPE); + return id; } @Override @@ -82,12 +81,22 @@ public String getClassifier() { } @Override - public DependencyProperties getDependencyProperties() { - return dependencyProperties; + public boolean isBuildPathConstituent() { + return this.buildPathConstituent; + } + + @Override + public boolean isIncludesDependencies() { + return this.includesDependencies; } @Override public Map getProperties() { - return getDependencyProperties().asMap(); + Map properties = new HashMap<>(); + properties.put(ArtifactProperties.TYPE, this.id); + properties.put(ArtifactProperties.LANGUAGE, this.language.id()); + properties.put(ArtifactProperties.INCLUDES_DEPENDENCIES, String.valueOf(includesDependencies)); + properties.put(ArtifactProperties.CONSTITUTES_BUILD_PATH, String.valueOf(buildPathConstituent)); + return Collections.unmodifiableMap(properties); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java index 76c575c0c413..faf8d4ca9391 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultTypeRegistry.java @@ -22,12 +22,10 @@ import javax.inject.Named; import javax.inject.Singleton; -import java.util.ArrayList; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Type; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.services.LanguageRegistry; @@ -89,19 +87,13 @@ public Type require(String id) { type = legacyTypes.computeIfAbsent(id, k -> { // Copy data as the ArtifactHandler is not immutable, but Type should be. ArtifactHandler handler = manager.getArtifactHandler(id); - ArrayList flags = new ArrayList<>(); - if (handler.isAddedToClasspath()) { - flags.add(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT); - } - if (handler.isIncludesDependencies()) { - flags.add(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES); - } return new DefaultType( id, languageRegistry.require(handler.getLanguage()), handler.getExtension(), handler.getClassifier(), - new DefaultDependencyProperties(flags)); + handler.isAddedToClasspath(), + handler.isIncludesDependencies()); }); } return type; diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java index bc7f8042c9da..801bfef782df 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/BomTypeProvider.java @@ -24,7 +24,6 @@ import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(BomTypeProvider.NAME) @@ -35,7 +34,7 @@ public class BomTypeProvider implements Provider { private final Type type; public BomTypeProvider() { - this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultDependencyProperties()); + this.type = new DefaultType(NAME, Language.NONE, "pom", null, false, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java index 28dee7cf85c3..5512b8e44224 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EarTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EarTypeProvider.NAME) @@ -36,12 +34,7 @@ public class EarTypeProvider implements Provider { private final Type type; public EarTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "ear", - null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "ear", null, false, true); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java index 03a47874e932..a1a97dfcbb1b 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbClientTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EjbClientTypeProvider.NAME) @@ -36,12 +34,7 @@ public class EjbClientTypeProvider implements Provider { private final Type type; public EjbClientTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "jar", - "client", - new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "client", true, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java index ed3f50c7928a..01a8dfcb9fec 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/EjbTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(EjbTypeProvider.NAME) @@ -36,12 +34,7 @@ public class EjbTypeProvider implements Provider { private final Type type; public EjbTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "jar", - null, - new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", null, true, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java index a4221fbed3d9..df61f6bd3ba5 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JarTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JarTypeProvider.NAME) @@ -36,12 +34,7 @@ public class JarTypeProvider implements Provider { private final Type type; public JarTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "jar", - null, - new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", null, true, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java index d16891826505..4e90d4591a58 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavaSourceTypeProvider.java @@ -24,7 +24,6 @@ import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JavaSourceTypeProvider.NAME) @@ -35,7 +34,7 @@ public class JavaSourceTypeProvider implements Provider { private final Type type; public JavaSourceTypeProvider() { - this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "sources", new DefaultDependencyProperties()); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "sources", false, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java index cfe86c51c653..1f6e9aee8fa0 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/JavadocTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(JavadocTypeProvider.NAME) @@ -36,12 +34,7 @@ public class JavadocTypeProvider implements Provider { private final Type type; public JavadocTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "jar", - "javadoc", - new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "javadoc", true, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java index 128e3ee85613..ec5a45ff55ba 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/MavenPluginTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(MavenPluginTypeProvider.NAME) @@ -36,12 +34,7 @@ public class MavenPluginTypeProvider implements Provider { private final Type type; public MavenPluginTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "jar", - null, - new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", null, true, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java index d1dda01e349a..b804b6959748 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/ParTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(ParTypeProvider.NAME) @@ -36,12 +34,7 @@ public class ParTypeProvider implements Provider { private final Type type; public ParTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "par", - null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "par", null, false, true); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java index b3a078fd2adc..9f385641165a 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/PomTypeProvider.java @@ -24,7 +24,6 @@ import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(PomTypeProvider.NAME) @@ -35,7 +34,7 @@ public class PomTypeProvider implements Provider { private final Type type; public PomTypeProvider() { - this.type = new DefaultType(NAME, Language.NONE, "pom", null, new DefaultDependencyProperties()); + this.type = new DefaultType(NAME, Language.NONE, "pom", null, false, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java index 59b0a2882786..39e36777c0ba 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/RarTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(RarTypeProvider.NAME) @@ -36,12 +34,7 @@ public class RarTypeProvider implements Provider { private final Type type; public RarTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "rar", - null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "rar", null, false, true); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java index 11ceb7ef2d04..39f9653e9f99 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/TestJarTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(TestJarTypeProvider.NAME) @@ -36,12 +34,7 @@ public class TestJarTypeProvider implements Provider { private final Type type; public TestJarTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "jar", - "tests", - new DefaultDependencyProperties(DependencyProperties.FLAG_BUILD_PATH_CONSTITUENT)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "jar", "tests", true, false); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java index d9d36ea277cf..732ff09a7e10 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/types/WarTypeProvider.java @@ -22,10 +22,8 @@ import javax.inject.Provider; import javax.inject.Singleton; -import org.apache.maven.api.DependencyProperties; import org.apache.maven.api.Language; import org.apache.maven.api.Type; -import org.apache.maven.internal.impl.DefaultDependencyProperties; import org.apache.maven.internal.impl.DefaultType; @Named(WarTypeProvider.NAME) @@ -36,12 +34,7 @@ public class WarTypeProvider implements Provider { private final Type type; public WarTypeProvider() { - this.type = new DefaultType( - NAME, - Language.JAVA_FAMILY, - "war", - null, - new DefaultDependencyProperties(DependencyProperties.FLAG_INCLUDES_DEPENDENCIES)); + this.type = new DefaultType(NAME, Language.JAVA_FAMILY, "war", null, false, true); } @Override From 734910a04a9ddb5e41093a4a41e634ebc585ed02 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 21:23:59 +0100 Subject: [PATCH 12/17] Use a plain enum for DependencyScope which is not extensible --- .../org/apache/maven/api/DependencyScope.java | 62 ++++++++++++++----- .../org/apache/maven/api/ExtensibleEnums.java | 18 ------ .../api/services/DependencyScopeRegistry.java | 23 ------- .../api/spi/DependencyScopeProvider.java | 23 ------- .../maven/internal/impl/AbstractSession.java | 2 +- .../impl/ExtensibleEnumRegistries.java | 23 ------- 6 files changed, 48 insertions(+), 103 deletions(-) delete mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java delete mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java index f3d26aa0686f..2951acb1b44c 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java @@ -18,10 +18,14 @@ */ package org.apache.maven.api; +import java.util.Collections; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; - -import static org.apache.maven.api.ExtensibleEnums.dependencyScope; +import org.apache.maven.api.annotations.Nonnull; /** * Dependency scope. @@ -33,55 +37,53 @@ */ @Experimental @Immutable -public interface DependencyScope extends ExtensibleEnum { - - boolean isTransitive(); +public enum DependencyScope { /** * None. Allows you to declare dependencies (for example to alter reactor build order) but in reality dependencies * in this scope are not part of any build path scope. */ - DependencyScope NONE = dependencyScope("none", false); + NONE("none", false), /** * Empty scope. */ - DependencyScope EMPTY = dependencyScope("", false); + EMPTY("", false), /** * Compile only. */ - DependencyScope COMPILE_ONLY = dependencyScope("compile-only", false); + COMPILE_ONLY("compile-only", false), /** * Compile. */ - DependencyScope COMPILE = dependencyScope("compile", true); + COMPILE("compile", true), /** * Runtime. */ - DependencyScope RUNTIME = dependencyScope("runtime", true); + RUNTIME("runtime", true), /** * Provided. */ - DependencyScope PROVIDED = dependencyScope("provided", false); + PROVIDED("provided", false), /** * Test compile only. */ - DependencyScope TEST_ONLY = dependencyScope("test-only", false); + TEST_ONLY("test-only", false), /** * Test. */ - DependencyScope TEST = dependencyScope("test", false); + TEST("test", false), /** * Test runtime. */ - DependencyScope TEST_RUNTIME = dependencyScope("test-runtime", true); + TEST_RUNTIME("test-runtime", true), /** * System scope. @@ -89,5 +91,35 @@ public interface DependencyScope extends ExtensibleEnum { * Important: this scope {@code id} MUST BE KEPT in sync with label in * {@code org.eclipse.aether.util.artifact.Scopes#SYSTEM}. */ - DependencyScope SYSTEM = dependencyScope("system", false); + SYSTEM("system", false); + + private static final Map IDS = Collections.unmodifiableMap( + Stream.of(DependencyScope.values()).collect(Collectors.toMap(s -> s.id, s -> s))); + + public static DependencyScope forId(String id) { + return IDS.get(id); + } + + private final String id; + private final boolean transitive; + + DependencyScope(String id, boolean transitive) { + this.id = id; + this.transitive = transitive; + } + + /** + * The {@code id} uniquely represents a value for this extensible enum. + * This id should be used to compute the equality and hash code for the instance. + * + * @return the id + */ + @Nonnull + public String id() { + return id; + } + + public boolean isTransitive() { + return transitive; + } } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java index 4035842b6caf..6c2504f501d4 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java @@ -26,10 +26,6 @@ static Language language(String id) { return new DefaultLanguage(id); } - static DependencyScope dependencyScope(String id, boolean transitive) { - return new DefaultDependencyScope(id, transitive); - } - static BuildPathScope buildPathScope(String id, ProjectScope projectScope, DependencyScope... dependencyScopes) { return new DefaultBuildPathScope(id, projectScope, dependencyScopes); } @@ -66,20 +62,6 @@ public String toString() { } } - private static class DefaultDependencyScope extends DefaultExtensibleEnum implements DependencyScope { - private final boolean transitive; - - DefaultDependencyScope(String id, boolean transitive) { - super(id); - this.transitive = transitive; - } - - @Override - public boolean isTransitive() { - return transitive; - } - } - private static class DefaultBuildPathScope extends DefaultExtensibleEnum implements BuildPathScope { private final ProjectScope projectScope; private final Set dependencyScopes; diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java deleted file mode 100644 index 1b3df452a928..000000000000 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyScopeRegistry.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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.services; - -import org.apache.maven.api.DependencyScope; - -public interface DependencyScopeRegistry extends ExtensibleEnumRegistry {} diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java deleted file mode 100644 index a7ed7e6568ba..000000000000 --- a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/DependencyScopeProvider.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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.spi; - -import org.apache.maven.api.DependencyScope; - -public interface DependencyScopeProvider extends ExtensibleEnumProvider {} diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java index 18e91be78414..4719f0be201c 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java @@ -541,7 +541,7 @@ public ProjectScope requireProjectScope(String id) { @Override public DependencyScope requireDependencyScope(String id) { - return getService(DependencyScopeRegistry.class).require(id); + return DependencyScope.forId(id); } @Override diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java index e6011bf6679e..bc7754b36aad 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java @@ -52,29 +52,6 @@ public DefaultBuildPathScopeRegistry(List providers) { } } - @Named - @SessionScoped - public static class DefaultDependencyScopeRegistry - extends DefaultExtensibleEnumRegistry - implements DependencyScopeRegistry { - - @Inject - public DefaultDependencyScopeRegistry(List providers) { - super( - providers, - DependencyScope.NONE, - DependencyScope.EMPTY, - DependencyScope.COMPILE_ONLY, - DependencyScope.COMPILE, - DependencyScope.RUNTIME, - DependencyScope.PROVIDED, - DependencyScope.TEST_ONLY, - DependencyScope.TEST, - DependencyScope.TEST_RUNTIME, - DependencyScope.SYSTEM); - } - } - @Named @SessionScoped public static class DefaultProjectScopeRegistry From 3d2df726aef2c364f0c5803b46b7a31dd1527282 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 22:23:21 +0100 Subject: [PATCH 13/17] Remove unused BuildPath --- .../java/org/apache/maven/api/BuildPath.java | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java b/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java deleted file mode 100644 index 970e73e063b4..000000000000 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPath.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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; - -import java.util.Collection; - -import org.apache.maven.api.annotations.Experimental; -import org.apache.maven.api.annotations.Immutable; -import org.apache.maven.api.annotations.Nonnull; - -/** - * Build path. Build path is calculated for given {@link Project} and {@link BuildPathScope}. - * - * @since 4.0.0 - */ -@Experimental -@Immutable -public interface BuildPath { - @Nonnull - Project project(); - - @Nonnull - BuildPathScope buildPathScope(); - - @Nonnull - default Language language() { - return project().getLanguage(); - } - - @Nonnull - Collection getArtifacts(); -} From 3b2bc64caf9b0af4740edbca5ebb0f9d4591f093 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 22:28:33 +0100 Subject: [PATCH 14/17] Rename BuildPathScope -> PathScope --- .../org/apache/maven/api/ExtensibleEnums.java | 8 +++--- .../{BuildPathScope.java => PathScope.java} | 12 ++++----- .../java/org/apache/maven/api/Session.java | 8 +++--- .../api/services/DependencyResolver.java | 12 ++++----- .../services/DependencyResolverRequest.java | 26 +++++++++---------- ...peRegistry.java => PathScopeRegistry.java} | 4 +-- ...peProvider.java => PathScopeProvider.java} | 4 +-- .../maven/internal/impl/AbstractSession.java | 8 +++--- .../impl/DefaultDependencyResolver.java | 8 +++--- .../impl/ExtensibleEnumRegistries.java | 16 ++++++------ .../apache/maven/internal/impl/TestApi.java | 2 +- 11 files changed, 54 insertions(+), 54 deletions(-) rename api/maven-api-core/src/main/java/org/apache/maven/api/{BuildPathScope.java => PathScope.java} (87%) rename api/maven-api-core/src/main/java/org/apache/maven/api/services/{BuildPathScopeRegistry.java => PathScopeRegistry.java} (86%) rename api/maven-api-spi/src/main/java/org/apache/maven/api/spi/{BuildPathScopeProvider.java => PathScopeProvider.java} (86%) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java index 6c2504f501d4..7843cbef7066 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ExtensibleEnums.java @@ -26,8 +26,8 @@ static Language language(String id) { return new DefaultLanguage(id); } - static BuildPathScope buildPathScope(String id, ProjectScope projectScope, DependencyScope... dependencyScopes) { - return new DefaultBuildPathScope(id, projectScope, dependencyScopes); + static PathScope pathScope(String id, ProjectScope projectScope, DependencyScope... dependencyScopes) { + return new DefaultPathScope(id, projectScope, dependencyScopes); } static ProjectScope projectScope(String id) { @@ -62,11 +62,11 @@ public String toString() { } } - private static class DefaultBuildPathScope extends DefaultExtensibleEnum implements BuildPathScope { + private static class DefaultPathScope extends DefaultExtensibleEnum implements PathScope { private final ProjectScope projectScope; private final Set dependencyScopes; - DefaultBuildPathScope(String id, ProjectScope projectScope, DependencyScope... dependencyScopes) { + DefaultPathScope(String id, ProjectScope projectScope, DependencyScope... dependencyScopes) { super(id); this.projectScope = Objects.requireNonNull(projectScope); this.dependencyScopes = diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java similarity index 87% rename from api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java rename to api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java index 5cff60cf87d9..7132dfaa7e54 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/BuildPathScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java @@ -24,7 +24,7 @@ import org.apache.maven.api.annotations.Immutable; import org.apache.maven.api.annotations.Nonnull; -import static org.apache.maven.api.ExtensibleEnums.buildPathScope; +import static org.apache.maven.api.ExtensibleEnums.pathScope; /** * Build path scope. @@ -36,7 +36,7 @@ */ @Experimental @Immutable -public interface BuildPathScope extends ExtensibleEnum { +public interface PathScope extends ExtensibleEnum { @Nonnull ProjectScope projectScope(); @@ -44,7 +44,7 @@ public interface BuildPathScope extends ExtensibleEnum { @Nonnull Set dependencyScopes(); - BuildPathScope MAIN_COMPILE = buildPathScope( + PathScope MAIN_COMPILE = pathScope( "main-compile", ProjectScope.MAIN, DependencyScope.EMPTY, @@ -52,10 +52,10 @@ public interface BuildPathScope extends ExtensibleEnum { DependencyScope.COMPILE, DependencyScope.PROVIDED); - BuildPathScope MAIN_RUNTIME = buildPathScope( + PathScope MAIN_RUNTIME = pathScope( "main-runtime", ProjectScope.MAIN, DependencyScope.EMPTY, DependencyScope.COMPILE, DependencyScope.RUNTIME); - BuildPathScope TEST_COMPILE = buildPathScope( + PathScope TEST_COMPILE = pathScope( "test-compile", ProjectScope.TEST, DependencyScope.EMPTY, @@ -64,7 +64,7 @@ public interface BuildPathScope extends ExtensibleEnum { DependencyScope.TEST_ONLY, DependencyScope.TEST); - BuildPathScope TEST_RUNTIME = buildPathScope( + PathScope TEST_RUNTIME = pathScope( "test-runtime", ProjectScope.TEST, DependencyScope.EMPTY, diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java index bc6105f99b65..329e57ed72aa 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java @@ -427,11 +427,11 @@ Artifact createArtifact( /** * Shortcut for {@code getService(DependencyResolver.class).flatten(...)}. * - * @see org.apache.maven.api.services.DependencyResolver#flatten(Session, Node, BuildPathScope) + * @see org.apache.maven.api.services.DependencyResolver#flatten(Session, Node, PathScope) * @throws org.apache.maven.api.services.DependencyResolverException if the dependency flattening failed */ @Nonnull - List flattenDependencies(@Nonnull Node node, @Nonnull BuildPathScope scope); + List flattenDependencies(@Nonnull Node node, @Nonnull PathScope scope); @Nonnull List resolveDependencies(@Nonnull DependencyCoordinate dependencyCoordinate); @@ -440,7 +440,7 @@ Artifact createArtifact( List resolveDependencies(@Nonnull List dependencyCoordinates); @Nonnull - List resolveDependencies(@Nonnull Project project, @Nonnull BuildPathScope scope); + List resolveDependencies(@Nonnull Project project, @Nonnull PathScope scope); /** * Resolves an artifact's meta version (if any) to a concrete version. For example, resolves "1.0-SNAPSHOT" @@ -512,5 +512,5 @@ Artifact createArtifact( DependencyScope requireDependencyScope(String id); - BuildPathScope requireBuildPathScope(String id); + PathScope requireBuildPathScope(String id); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java index 440b1b3f023a..4a8e90ea6503 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java @@ -20,7 +20,7 @@ import java.util.List; -import org.apache.maven.api.BuildPathScope; +import org.apache.maven.api.PathScope; import org.apache.maven.api.DependencyCoordinate; import org.apache.maven.api.Node; import org.apache.maven.api.Project; @@ -35,7 +35,7 @@ @Experimental public interface DependencyResolver extends Service { - List flatten(Session session, Node node, BuildPathScope scope) throws DependencyResolverException; + List flatten(Session session, Node node, PathScope scope) throws DependencyResolverException; /** * This method collects, flattens and resolves the dependencies. @@ -47,7 +47,7 @@ public interface DependencyResolver extends Service { * @throws ArtifactResolverException * * @see DependencyCollector#collect(DependencyCollectorRequest) - * @see #flatten(Session, Node, BuildPathScope) + * @see #flatten(Session, Node, PathScope) * @see ArtifactResolver#resolve(ArtifactResolverRequest) */ DependencyResolverResult resolve(DependencyResolverRequest request) @@ -60,7 +60,7 @@ default DependencyResolverResult resolve(@Nonnull Session session, @Nonnull Proj @Nonnull default DependencyResolverResult resolve( - @Nonnull Session session, @Nonnull Project project, @Nonnull BuildPathScope scope) { + @Nonnull Session session, @Nonnull Project project, @Nonnull PathScope scope) { return resolve(DependencyResolverRequest.build(session, project, scope)); } @@ -71,7 +71,7 @@ default DependencyResolverResult resolve(@Nonnull Session session, @Nonnull Depe @Nonnull default DependencyResolverResult resolve( - @Nonnull Session session, @Nonnull DependencyCoordinate dependency, @Nonnull BuildPathScope scope) { + @Nonnull Session session, @Nonnull DependencyCoordinate dependency, @Nonnull PathScope scope) { return resolve(DependencyResolverRequest.build(session, dependency, scope)); } @@ -83,7 +83,7 @@ default DependencyResolverResult resolve( @Nonnull default DependencyResolverResult resolve( - @Nonnull Session session, @Nonnull List dependencies, @Nonnull BuildPathScope scope) { + @Nonnull Session session, @Nonnull List dependencies, @Nonnull PathScope scope) { return resolve(DependencyResolverRequest.build(session, dependencies, scope)); } } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java index 454766ec83c3..3f6a381f6fb0 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.maven.api.Artifact; -import org.apache.maven.api.BuildPathScope; +import org.apache.maven.api.PathScope; import org.apache.maven.api.DependencyCoordinate; import org.apache.maven.api.Project; import org.apache.maven.api.Session; @@ -35,7 +35,7 @@ public interface DependencyResolverRequest extends DependencyCollectorRequest { @Nonnull - BuildPathScope getResolutionScope(); + PathScope getResolutionScope(); @Nonnull static DependencyResolverRequestBuilder builder() { @@ -44,11 +44,11 @@ static DependencyResolverRequestBuilder builder() { @Nonnull static DependencyResolverRequest build(Session session, Project project) { - return build(session, project, BuildPathScope.MAIN_RUNTIME); + return build(session, project, PathScope.MAIN_RUNTIME); } @Nonnull - static DependencyResolverRequest build(Session session, Project project, BuildPathScope scope) { + static DependencyResolverRequest build(Session session, Project project, PathScope scope) { return new DependencyResolverRequestBuilder() .session(session) .project(project) @@ -58,11 +58,11 @@ static DependencyResolverRequest build(Session session, Project project, BuildPa @Nonnull static DependencyResolverRequest build(Session session, DependencyCoordinate dependency) { - return build(session, dependency, BuildPathScope.MAIN_RUNTIME); + return build(session, dependency, PathScope.MAIN_RUNTIME); } @Nonnull - static DependencyResolverRequest build(Session session, DependencyCoordinate dependency, BuildPathScope scope) { + static DependencyResolverRequest build(Session session, DependencyCoordinate dependency, PathScope scope) { return new DependencyResolverRequestBuilder() .session(session) .dependency(dependency) @@ -72,12 +72,12 @@ static DependencyResolverRequest build(Session session, DependencyCoordinate dep @Nonnull static DependencyResolverRequest build(Session session, List dependencies) { - return build(session, dependencies, BuildPathScope.MAIN_RUNTIME); + return build(session, dependencies, PathScope.MAIN_RUNTIME); } @Nonnull static DependencyResolverRequest build( - Session session, List dependencies, BuildPathScope scope) { + Session session, List dependencies, PathScope scope) { return new DependencyResolverRequestBuilder() .session(session) .dependencies(dependencies) @@ -87,7 +87,7 @@ static DependencyResolverRequest build( @NotThreadSafe class DependencyResolverRequestBuilder extends DependencyCollectorRequestBuilder { - BuildPathScope resolutionScope; + PathScope resolutionScope; @Nonnull @Override @@ -154,7 +154,7 @@ public DependencyResolverRequestBuilder verbose(boolean verbose) { } @Nonnull - public DependencyResolverRequestBuilder resolutionScope(@Nonnull BuildPathScope resolutionScope) { + public DependencyResolverRequestBuilder resolutionScope(@Nonnull PathScope resolutionScope) { this.resolutionScope = resolutionScope; return this; } @@ -167,7 +167,7 @@ public DependencyResolverRequest build() { static class DefaultDependencyResolverRequest extends DefaultDependencyCollectorRequest implements DependencyResolverRequest { - private final BuildPathScope resolutionScope; + private final PathScope resolutionScope; DefaultDependencyResolverRequest( Session session, @@ -177,7 +177,7 @@ static class DefaultDependencyResolverRequest extends DefaultDependencyCollector Collection dependencies, Collection managedDependencies, boolean verbose, - BuildPathScope resolutionScope) { + PathScope resolutionScope) { super(session, project, rootArtifact, root, dependencies, managedDependencies, verbose); this.resolutionScope = nonNull(resolutionScope, "resolutionScope cannot be null"); if (verbose) { @@ -187,7 +187,7 @@ static class DefaultDependencyResolverRequest extends DefaultDependencyCollector @Nonnull @Override - public BuildPathScope getResolutionScope() { + public PathScope getResolutionScope() { return resolutionScope; } } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/BuildPathScopeRegistry.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/PathScopeRegistry.java similarity index 86% rename from api/maven-api-core/src/main/java/org/apache/maven/api/services/BuildPathScopeRegistry.java rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/PathScopeRegistry.java index c3ff0c223ff2..06b5d5964733 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/BuildPathScopeRegistry.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/PathScopeRegistry.java @@ -18,6 +18,6 @@ */ package org.apache.maven.api.services; -import org.apache.maven.api.BuildPathScope; +import org.apache.maven.api.PathScope; -public interface BuildPathScopeRegistry extends ExtensibleEnumRegistry {} +public interface PathScopeRegistry extends ExtensibleEnumRegistry {} diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/BuildPathScopeProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PathScopeProvider.java similarity index 86% rename from api/maven-api-spi/src/main/java/org/apache/maven/api/spi/BuildPathScopeProvider.java rename to api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PathScopeProvider.java index 3e8a54652178..2e2597b839d0 100644 --- a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/BuildPathScopeProvider.java +++ b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PathScopeProvider.java @@ -18,6 +18,6 @@ */ package org.apache.maven.api.spi; -import org.apache.maven.api.BuildPathScope; +import org.apache.maven.api.PathScope; -public interface BuildPathScopeProvider extends ExtensibleEnumProvider {} +public interface PathScopeProvider extends ExtensibleEnumProvider {} diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java index 4719f0be201c..9e77d11c6a0f 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java @@ -462,7 +462,7 @@ public Node collectDependencies(@Nonnull DependencyCoordinate dependency) { @Nonnull @Override - public List flattenDependencies(@Nonnull Node node, @Nonnull BuildPathScope scope) { + public List flattenDependencies(@Nonnull Node node, @Nonnull PathScope scope) { return getService(DependencyResolver.class).flatten(this, node, scope); } @@ -477,7 +477,7 @@ public List resolveDependencies(List dependencies) { } @Override - public List resolveDependencies(Project project, BuildPathScope scope) { + public List resolveDependencies(Project project, PathScope scope) { return getService(DependencyResolver.class) .resolve(this, project, scope) .getPaths(); @@ -545,7 +545,7 @@ public DependencyScope requireDependencyScope(String id) { } @Override - public BuildPathScope requireBuildPathScope(String id) { - return getService(BuildPathScopeRegistry.class).require(id); + public PathScope requireBuildPathScope(String id) { + return getService(PathScopeRegistry.class).require(id); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java index 14bb73953403..d2b8eb549f88 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java @@ -51,7 +51,7 @@ public class DefaultDependencyResolver implements DependencyResolver { @Override - public List flatten(Session s, Node node, BuildPathScope scope) throws DependencyResolverException { + public List flatten(Session s, Node node, PathScope scope) throws DependencyResolverException { InternalSession session = InternalSession.from(s); DependencyNode root = cast(AbstractNode.class, node, "node").getDependencyNode(); List dependencies = session.getRepositorySystem() @@ -60,7 +60,7 @@ public List flatten(Session s, Node node, BuildPathScope scope) throws Dep return map(dependencies, session::getNode); } - private static DependencyFilter getScopeDependencyFilter(BuildPathScope scope) { + private static DependencyFilter getScopeDependencyFilter(PathScope scope) { Set scopes = scope.dependencyScopes().stream().map(DependencyScope::id).collect(Collectors.toSet()); return (n, p) -> { @@ -124,7 +124,7 @@ private Stream stream(DependencyNode node) { return Stream.concat(Stream.of(node), node.getChildren().stream().flatMap(this::stream)); } - private DependencyResolutionResult resolveDependencies(Session session, Project project, BuildPathScope scope) { + private DependencyResolutionResult resolveDependencies(Session session, Project project, PathScope scope) { Collection toResolve = toScopes(scope); try { LifecycleDependencyResolver lifecycleDependencyResolver = @@ -145,7 +145,7 @@ private MavenProject getMavenProject(Project project) { return ((DefaultProject) project).getProject(); } - private Collection toScopes(BuildPathScope scope) { + private Collection toScopes(PathScope scope) { return map(scope.dependencyScopes(), DependencyScope::id); } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java index bc7754b36aad..2eff69ce8cc1 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java @@ -37,18 +37,18 @@ public class ExtensibleEnumRegistries { @Named @SessionScoped - public static class DefaultBuildPathScopeRegistry - extends DefaultExtensibleEnumRegistry - implements BuildPathScopeRegistry { + public static class DefaultPathScopeRegistry + extends DefaultExtensibleEnumRegistry + implements PathScopeRegistry { @Inject - public DefaultBuildPathScopeRegistry(List providers) { + public DefaultPathScopeRegistry(List providers) { super( providers, - BuildPathScope.MAIN_COMPILE, - BuildPathScope.MAIN_RUNTIME, - BuildPathScope.TEST_COMPILE, - BuildPathScope.TEST_RUNTIME); + PathScope.MAIN_COMPILE, + PathScope.MAIN_RUNTIME, + PathScope.TEST_COMPILE, + PathScope.TEST_RUNTIME); } } diff --git a/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java b/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java index 9f165930708e..18ce020307f5 100644 --- a/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java +++ b/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java @@ -194,7 +194,7 @@ void testProjectDependencies() { assertNotNull(root); DependencyResolverResult result = - session.getService(DependencyResolver.class).resolve(session, project, BuildPathScope.MAIN_RUNTIME); + session.getService(DependencyResolver.class).resolve(session, project, PathScope.MAIN_RUNTIME); assertNotNull(result); List deps = new ArrayList<>(result.getDependencies().keySet()); List deps2 = result.getNodes().stream() From e40f20f576f93cb35f04233cbd5ad2fddb0b847f Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 31 Jan 2024 22:28:33 +0100 Subject: [PATCH 15/17] Rename BuildPathScope -> PathScope --- .../java/org/apache/maven/api/Session.java | 2 +- .../api/services/DependencyResolver.java | 2 +- .../services/DependencyResolverRequest.java | 31 +++++++++---------- .../maven/internal/impl/AbstractSession.java | 2 +- .../impl/DefaultDependencyResolver.java | 4 +-- .../impl/ExtensibleEnumRegistries.java | 3 +- 6 files changed, 21 insertions(+), 23 deletions(-) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java index 329e57ed72aa..4f414fe1fe0c 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java @@ -512,5 +512,5 @@ Artifact createArtifact( DependencyScope requireDependencyScope(String id); - PathScope requireBuildPathScope(String id); + PathScope requirePathScope(String id); } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java index 4a8e90ea6503..9fefbc4cda7c 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java @@ -20,9 +20,9 @@ import java.util.List; -import org.apache.maven.api.PathScope; import org.apache.maven.api.DependencyCoordinate; import org.apache.maven.api.Node; +import org.apache.maven.api.PathScope; import org.apache.maven.api.Project; import org.apache.maven.api.Service; import org.apache.maven.api.Session; diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java index 3f6a381f6fb0..6d8f00935379 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java @@ -22,8 +22,8 @@ import java.util.List; import org.apache.maven.api.Artifact; -import org.apache.maven.api.PathScope; import org.apache.maven.api.DependencyCoordinate; +import org.apache.maven.api.PathScope; import org.apache.maven.api.Project; import org.apache.maven.api.Session; import org.apache.maven.api.annotations.Experimental; @@ -35,7 +35,7 @@ public interface DependencyResolverRequest extends DependencyCollectorRequest { @Nonnull - PathScope getResolutionScope(); + PathScope getPathScope(); @Nonnull static DependencyResolverRequestBuilder builder() { @@ -52,7 +52,7 @@ static DependencyResolverRequest build(Session session, Project project, PathSco return new DependencyResolverRequestBuilder() .session(session) .project(project) - .resolutionScope(scope) + .pathScope(scope) .build(); } @@ -66,7 +66,7 @@ static DependencyResolverRequest build(Session session, DependencyCoordinate dep return new DependencyResolverRequestBuilder() .session(session) .dependency(dependency) - .resolutionScope(scope) + .pathScope(scope) .build(); } @@ -76,18 +76,17 @@ static DependencyResolverRequest build(Session session, List dependencies, PathScope scope) { + static DependencyResolverRequest build(Session session, List dependencies, PathScope scope) { return new DependencyResolverRequestBuilder() .session(session) .dependencies(dependencies) - .resolutionScope(scope) + .pathScope(scope) .build(); } @NotThreadSafe class DependencyResolverRequestBuilder extends DependencyCollectorRequestBuilder { - PathScope resolutionScope; + PathScope pathScope; @Nonnull @Override @@ -154,20 +153,20 @@ public DependencyResolverRequestBuilder verbose(boolean verbose) { } @Nonnull - public DependencyResolverRequestBuilder resolutionScope(@Nonnull PathScope resolutionScope) { - this.resolutionScope = resolutionScope; + public DependencyResolverRequestBuilder pathScope(@Nonnull PathScope pathScope) { + this.pathScope = pathScope; return this; } @Override public DependencyResolverRequest build() { return new DefaultDependencyResolverRequest( - session, project, rootArtifact, root, dependencies, managedDependencies, verbose, resolutionScope); + session, project, rootArtifact, root, dependencies, managedDependencies, verbose, pathScope); } static class DefaultDependencyResolverRequest extends DefaultDependencyCollectorRequest implements DependencyResolverRequest { - private final PathScope resolutionScope; + private final PathScope pathScope; DefaultDependencyResolverRequest( Session session, @@ -177,9 +176,9 @@ static class DefaultDependencyResolverRequest extends DefaultDependencyCollector Collection dependencies, Collection managedDependencies, boolean verbose, - PathScope resolutionScope) { + PathScope pathScope) { super(session, project, rootArtifact, root, dependencies, managedDependencies, verbose); - this.resolutionScope = nonNull(resolutionScope, "resolutionScope cannot be null"); + this.pathScope = nonNull(pathScope, "pathScope cannot be null"); if (verbose) { throw new IllegalArgumentException("verbose cannot be true for resolving dependencies"); } @@ -187,8 +186,8 @@ static class DefaultDependencyResolverRequest extends DefaultDependencyCollector @Nonnull @Override - public PathScope getResolutionScope() { - return resolutionScope; + public PathScope getPathScope() { + return pathScope; } } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java index 9e77d11c6a0f..1b9779011986 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/AbstractSession.java @@ -545,7 +545,7 @@ public DependencyScope requireDependencyScope(String id) { } @Override - public PathScope requireBuildPathScope(String id) { + public PathScope requirePathScope(String id) { return getService(PathScopeRegistry.class).require(id); } } diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java index d2b8eb549f88..298576d5f4b6 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java @@ -77,7 +77,7 @@ public DependencyResolverResult resolve(DependencyResolverRequest request) if (request.getProject().isPresent()) { DependencyResolutionResult result = resolveDependencies( - request.getSession(), request.getProject().get(), request.getResolutionScope()); + request.getSession(), request.getProject().get(), request.getPathScope()); Map nodes = stream( result.getDependencyGraph()) @@ -100,7 +100,7 @@ public DependencyResolverResult resolve(DependencyResolverRequest request) DependencyCollectorResult collectorResult = session.getService(DependencyCollector.class).collect(request); - List nodes = flatten(session, collectorResult.getRoot(), request.getResolutionScope()); + List nodes = flatten(session, collectorResult.getRoot(), request.getPathScope()); List deps = nodes.stream().map(Node::getDependency).filter(Objects::nonNull).collect(Collectors.toList()); List coordinates = diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java index 2eff69ce8cc1..d512e74b4635 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java +++ b/maven-core/src/main/java/org/apache/maven/internal/impl/ExtensibleEnumRegistries.java @@ -37,8 +37,7 @@ public class ExtensibleEnumRegistries { @Named @SessionScoped - public static class DefaultPathScopeRegistry - extends DefaultExtensibleEnumRegistry + public static class DefaultPathScopeRegistry extends DefaultExtensibleEnumRegistry implements PathScopeRegistry { @Inject From 4f5a879cefdd62b2c3919c311bc4addc75646c61 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 5 Feb 2024 08:59:56 +0100 Subject: [PATCH 16/17] Add some javadoc --- .../org/apache/maven/api/DependencyScope.java | 17 ++++++++------ .../java/org/apache/maven/api/Language.java | 3 +++ .../java/org/apache/maven/api/Packaging.java | 3 +++ .../java/org/apache/maven/api/PathScope.java | 10 +++++++- .../org/apache/maven/api/ProjectScope.java | 5 ++++ .../maven/api/spi/PackagingProvider.java | 23 ------------------- 6 files changed, 30 insertions(+), 31 deletions(-) delete mode 100644 api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java index 2951acb1b44c..2b4d4100640a 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java @@ -29,11 +29,14 @@ /** * Dependency scope. - *

- * Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface - * can be used as keys. + * This represents at which time the dependency will be used, for example, at compile time only, + * at run time or at test time. For a given dependency, the scope is directly derived from the + * {@link org.apache.maven.api.model.Dependency#getScope()} and will be used when using {@link PathScope} + * and the {@link org.apache.maven.api.services.DependencyResolver}. * * @since 4.0.0 + * @see org.apache.maven.api.model.Dependency#getScope() + * @see org.apache.maven.api.services.DependencyResolver */ @Experimental @Immutable @@ -41,7 +44,7 @@ public enum DependencyScope { /** * None. Allows you to declare dependencies (for example to alter reactor build order) but in reality dependencies - * in this scope are not part of any build path scope. + * in this scope are not part of any path scope. */ NONE("none", false), @@ -56,12 +59,12 @@ public enum DependencyScope { COMPILE_ONLY("compile-only", false), /** - * Compile. + * Compile, runtime and test. */ COMPILE("compile", true), /** - * Runtime. + * Runtime and test. */ RUNTIME("runtime", true), @@ -76,7 +79,7 @@ public enum DependencyScope { TEST_ONLY("test-only", false), /** - * Test. + * Test compile and test runtime. */ TEST("test", false), diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java index 0fc459287b57..a38610d3df1a 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java @@ -26,6 +26,9 @@ /** * Language. *

+ * This extensible enum has two defined values, {@link #NONE} and {@link #JAVA_FAMILY}, + * but can be extended by registering a {@link org.apache.maven.api.spi.LanguageProvider}. + *

* Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface * can be used as keys. * diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java index ede4c46b073f..b64d1e07054b 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Packaging.java @@ -24,6 +24,9 @@ /** * Interface representing a Maven project packaging. + *

+ * TODO: define how to plug in new packaging definitions using the SPI. + * the packaging are currently defined by Maven 3 {@code Provider} * * @since 4.0.0 */ diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java index 7132dfaa7e54..cda8e9fbf814 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java @@ -27,12 +27,20 @@ import static org.apache.maven.api.ExtensibleEnums.pathScope; /** - * Build path scope. + * Path scope. + * A path scope is used to determine the kind of build or class path that will be built when resolving + * dependencies using the {@link org.apache.maven.api.services.DependencyResolver} service. + *

+ * This extensible enum has four defined values, {@link #MAIN_COMPILE}, {@link #MAIN_RUNTIME}, + * {@link #TEST_COMPILE} and {@link #TEST_RUNTIME}, but can be extended by registering a + * {@link org.apache.maven.api.spi.PathScopeProvider}. *

* Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface * can be used as keys. * * @since 4.0.0 + * @see org.apache.maven.api.services.DependencyResolver + * @see DependencyScope */ @Experimental @Immutable diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java index e663e61463a0..97769d9cde5c 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java @@ -25,6 +25,11 @@ /** * Project scope. + * Defines the type of source files to compile, usually either the one that compose the output package + * (i.e. the main artifact) or the ones that will be used when building tests). + *

+ * This extensible enum has two defined values, {@link #MAIN} and {@link #TEST}, + * but can be extended by registering a {@link org.apache.maven.api.spi.ProjectScopeProvider}. *

* Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface * can be used as keys. diff --git a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java b/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java deleted file mode 100644 index bfcf3a219100..000000000000 --- a/api/maven-api-spi/src/main/java/org/apache/maven/api/spi/PackagingProvider.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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.spi; - -import org.apache.maven.api.Packaging; - -public interface PackagingProvider extends ExtensibleEnumProvider {} From 0ee9939f9c5fb576c6e0194e8940dcf83359b57d Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Mon, 5 Feb 2024 09:09:03 +0100 Subject: [PATCH 17/17] Fix bad links --- .../src/main/java/org/apache/maven/api/Language.java | 2 +- .../src/main/java/org/apache/maven/api/PathScope.java | 2 +- .../src/main/java/org/apache/maven/api/ProjectScope.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java index a38610d3df1a..42aede9d89fa 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Language.java @@ -27,7 +27,7 @@ * Language. *

* This extensible enum has two defined values, {@link #NONE} and {@link #JAVA_FAMILY}, - * but can be extended by registering a {@link org.apache.maven.api.spi.LanguageProvider}. + * but can be extended by registering a {@code org.apache.maven.api.spi.LanguageProvider}. *

* Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface * can be used as keys. diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java index cda8e9fbf814..35a63b0240d1 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/PathScope.java @@ -33,7 +33,7 @@ *

* This extensible enum has four defined values, {@link #MAIN_COMPILE}, {@link #MAIN_RUNTIME}, * {@link #TEST_COMPILE} and {@link #TEST_RUNTIME}, but can be extended by registering a - * {@link org.apache.maven.api.spi.PathScopeProvider}. + * {@code org.apache.maven.api.spi.PathScopeProvider}. *

* Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface * can be used as keys. diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java index 97769d9cde5c..1a4cd3da0873 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ProjectScope.java @@ -29,7 +29,7 @@ * (i.e. the main artifact) or the ones that will be used when building tests). *

* This extensible enum has two defined values, {@link #MAIN} and {@link #TEST}, - * but can be extended by registering a {@link org.apache.maven.api.spi.ProjectScopeProvider}. + * but can be extended by registering a {@code org.apache.maven.api.spi.ProjectScopeProvider}. *

* Implementation must have {@code equals()} and {@code hashCode()} implemented, so implementations of this interface * can be used as keys.