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 2020/10/26 18:59:23 UTC

[maven] 01/03: Extract interface, only DefaultModelBuilder should be aware of implementation of TransformerContextBuilder

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6957
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 63e67197e8d3d92a04714320b3099f2943d8ff1e
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Oct 24 12:34:52 2020 +0200

    Extract interface, only DefaultModelBuilder should be aware of implementation of TransformerContextBuilder
---
 .../maven/project/DefaultProjectBuilder.java       |  4 +-
 .../maven/model/building/DefaultModelBuilder.java  | 32 +++++++--------
 .../building/DefaultModelBuildingRequest.java      |  1 -
 .../model/building/FilterModelBuildingRequest.java |  1 -
 .../apache/maven/model/building/ModelBuilder.java  |  1 -
 .../maven/model/building/ModelBuildingRequest.java |  1 -
 .../model/building/TransformerContextBuilder.java  | 46 ++++++++++++++++++++++
 7 files changed, 63 insertions(+), 23 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 0613367..63c8b94 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -56,7 +56,7 @@ import org.apache.maven.model.Plugin;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.building.ArtifactModelSource;
-import org.apache.maven.model.building.DefaultModelBuilder.TransformerContextBuilder;
+import org.apache.maven.model.building.TransformerContextBuilder;
 import org.apache.maven.model.building.DefaultModelBuildingRequest;
 import org.apache.maven.model.building.DefaultModelProblem;
 import org.apache.maven.model.building.FileModelSource;
@@ -383,7 +383,7 @@ public class DefaultProjectBuilder
         
         InternalConfig config =
             new InternalConfig( request, modelPool, useGlobalModelCache() ? getModelCache() : new ReactorModelCache(),
-                        modelBuilder.newTransformerContextBuilder().setUserProperties( request.getUserProperties() ) );
+                        modelBuilder.newTransformerContextBuilder() );
 
         Map<File, MavenProject> projectIndex = new HashMap<>( 256 );
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index f5e7aec..6d4708f 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -72,7 +72,6 @@ import org.apache.maven.model.inheritance.InheritanceAssembler;
 import org.apache.maven.model.interpolation.ModelInterpolator;
 import org.apache.maven.model.io.ModelParseException;
 import org.apache.maven.model.io.ModelReader;
-import org.apache.maven.model.locator.ModelLocator;
 import org.apache.maven.model.management.DependencyManagementInjector;
 import org.apache.maven.model.management.PluginManagementInjector;
 import org.apache.maven.model.merge.ModelMerger;
@@ -120,9 +119,6 @@ public class DefaultModelBuilder
     private ModelPathTranslator modelPathTranslator;
     
     @Inject
-    private ModelLocator modelLocator;
-
-    @Inject
     private ModelUrlNormalizer modelUrlNormalizer;
     
     @Inject
@@ -264,9 +260,9 @@ public class DefaultModelBuilder
     }
     
     @Override
-    public TransformerContextBuilder newTransformerContextBuilder()
+    public DefaultTransformerContextBuilder newTransformerContextBuilder()
     {
-        return new TransformerContextBuilder();
+        return new DefaultTransformerContextBuilder();
     }
     
     @Override
@@ -1809,27 +1805,29 @@ public class DefaultModelBuilder
      * @author Robert Scholte
      * @since 3.7.0
      */
-    public class TransformerContextBuilder
+    private class DefaultTransformerContextBuilder implements TransformerContextBuilder
     {
         private final DefaultTransformerContext context = new DefaultTransformerContext();
         
-        private Properties userProperties;
-        
-        public TransformerContextBuilder setUserProperties( Properties userProperties )
-        {
-            this.userProperties = userProperties;
-            return this;
-        }
-        
-        TransformerContext initialize( ModelBuildingRequest request, DefaultModelProblemCollector problems )
+        /**
+         * If an interface could be extracted, DefaultModelProblemCollector should be ModelProblemCollectorExt
+         * 
+         * @param request
+         * @param problems
+         * @return
+         */
+        @Override
+        public TransformerContext initialize( ModelBuildingRequest request, ModelProblemCollector collector )
         {
+            // We must assume the TransformerContext was created using this.newTransformerContextBuilder()
+            DefaultModelProblemCollector problems = (DefaultModelProblemCollector) collector;
             return new TransformerContext()
             {
                 @Override
                 public String getUserProperty( String key )
                 {
                     return context.userProperties.computeIfAbsent( key,
-                                                                   k -> userProperties.getProperty( key ) );
+                                                           k -> request.getUserProperties().getProperty( key ) );
                 }
                 
                 @Override
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
index c42b552..d4bf0aa 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
@@ -27,7 +27,6 @@ import java.util.Properties;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Profile;
-import org.apache.maven.model.building.DefaultModelBuilder.TransformerContextBuilder;
 import org.apache.maven.model.resolution.ModelResolver;
 import org.apache.maven.model.resolution.WorkspaceModelResolver;
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
index dfabf46..f1b8f64 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
@@ -26,7 +26,6 @@ import java.util.Properties;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Profile;
-import org.apache.maven.model.building.DefaultModelBuilder.TransformerContextBuilder;
 import org.apache.maven.model.resolution.ModelResolver;
 import org.apache.maven.model.resolution.WorkspaceModelResolver;
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
index aa63df7..85455f6 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
@@ -22,7 +22,6 @@ package org.apache.maven.model.building;
 import java.io.File;
 
 import org.apache.maven.model.Model;
-import org.apache.maven.model.building.DefaultModelBuilder.TransformerContextBuilder;
 
 /**
  * Builds the effective model from a POM.
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
index cf8501f..6cfda8a 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
@@ -26,7 +26,6 @@ import java.util.Properties;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Profile;
-import org.apache.maven.model.building.DefaultModelBuilder.TransformerContextBuilder;
 import org.apache.maven.model.resolution.ModelResolver;
 import org.apache.maven.model.resolution.WorkspaceModelResolver;
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContextBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContextBuilder.java
new file mode 100644
index 0000000..932c581
--- /dev/null
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContextBuilder.java
@@ -0,0 +1,46 @@
+package org.apache.maven.model.building;
+
+/*
+ * 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.
+ */
+
+/**
+ * The transformerContextBuilder is responsible for initializing the TransformerContext.
+ * In case rawModels are missing, it could do new buildingRequests on the ModelBuilder.
+ * 
+ * @author Robert Scholte
+ * @since 3.7.0
+ */
+public interface TransformerContextBuilder
+{
+    /**
+     * This method is used to initialize the TransformerContext
+     * 
+     * @param request the modelBuildingRequest
+     * @param problems the problemCollector
+     * @return the mutable transformerContext
+     */
+    TransformerContext initialize( ModelBuildingRequest request, ModelProblemCollector problems );
+    
+    /**
+     * The immutable transformerContext, can be used after the buildplan is finished.
+     * 
+     * @return the immutable transformerContext
+     */
+    TransformerContext build();
+}