You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2019/10/19 16:24:07 UTC
[maven] branch master updated: [MNG-6765] tycho pom-less builds
fails with 3.6.2
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push:
new 07ab962 [MNG-6765] tycho pom-less builds fails with 3.6.2
07ab962 is described below
commit 07ab962c85950b034be3216996900920c0204c3a
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Oct 19 18:23:57 2019 +0200
[MNG-6765] tycho pom-less builds fails with 3.6.2
---
.../model/building/DefaultModelProcessor.java | 26 ++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
index a275022..76370ac 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
@@ -35,9 +35,31 @@ import org.apache.maven.model.locator.ModelLocator;
import org.eclipse.sisu.Typed;
/**
- * DefaultModelProcessor
+ *
+ * Note: uses @Typed to limit the types it is available for injection to just ModelProcessor.
+ *
+ * This is because the ModelProcessor interface extends ModelLocator and ModelReader. If we
+ * made this component available under all its interfaces then it could end up being injected
+ * into itself leading to a stack overflow.
+ *
+ * A side-effect of using @Typed is that it translates to explicit bindings in the container.
+ * So instead of binding the component under a 'wildcard' key it is now bound with an explicit
+ * key. Since this is a default component this will be a plain binding of ModelProcessor to
+ * this implementation type, ie. no hint/name.
+ *
+ * This leads to a second side-effect in that any @Inject request for just ModelProcessor in
+ * the same injector is immediately matched to this explicit binding, which means extensions
+ * cannot override this binding. This is because the lookup is always short-circuited in this
+ * specific situation (plain @Inject request, and plain explicit binding for the same type.)
+ *
+ * The simplest solution is to use a custom @Named here so it isn't bound under the plain key.
+ * This is only necessary for default components using @Typed that want to support overriding.
+ *
+ * As a non-default component this now gets a negative priority relative to other implementations
+ * of the same interface. Since we want to allow overriding this doesn't matter in this case.
+ * (if it did we could add @Priority of 0 to match the priority given to default components.)
*/
-@Named
+@Named( "core-default" )
@Singleton
@Typed( ModelProcessor.class )
public class DefaultModelProcessor