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

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 35b7daedba536ddac0ec0523b2c9de6989ce39f5
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sat Aug 8 16:56:58 2026 -0400

    ClassGenerationAction cleanup - maximally immutable state
---
 .../apache/cayenne/tools/CayenneGeneratorTask.java |  3 +-
 .../apache/cayenne/gen/ClassGenerationAction.java  | 58 ++++++++--------------
 .../cayenne/gen/ClassGenerationActionFactory.java  |  9 +++-
 .../gen/DefaultClassGenerationActionFactory.java   |  8 ++-
 .../cayenne/gen/BaseTemplatesGenerationTest.java   | 10 ++--
 .../cayenne/gen/ClassGenerationActionTest.java     | 23 +++++++--
 .../apache/cayenne/gen/TemplateLocationTest.java   |  9 +++-
 .../gen/mock/TestClassGenerationAction.java        | 12 +++--
 .../java/org/apache/cayenne/tools/CgenTask.java    |  4 +-
 .../org/apache/cayenne/tools/CgenTaskTest.java     | 26 ++++------
 .../apache/cayenne/tools/CayenneGeneratorMojo.java |  7 ++-
 .../apache/cayenne/mcp/tools/cgen/CgenRunTool.java |  9 ++--
 .../cgen/InstrumentedClassGenerationAction.java    | 12 ++++-
 .../editor/datadomain/cgen/DataDomainCgenTab.java  |  4 +-
 .../ui/project/editor/datamap/cgen/CgenPanel.java  |  3 +-
 .../templateeditor/PreviewActionConfigurator.java  |  3 +-
 .../PreviewClassGenerationFactory.java             |  9 ++--
 .../templateeditor/PreviewGenerationAction.java    | 20 +++++---
 .../templateeditor/ArtifactsConfiguratorTest.java  | 11 +++-
 19 files changed, 138 insertions(+), 102 deletions(-)

diff --git 
a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java 
b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index 831169a53..dc19c0539 100644
--- 
a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ 
b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -121,7 +121,6 @@ public class CayenneGeneratorTask extends CayenneTask {
 
                 CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction 
= new CayenneGeneratorEmbeddableFilterAction();
                 
filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, 
excludeEmbeddablesPattern));
-                action.setLogger(logger);
                 if (!hasConfig() && useConfigFromDataMap) {
                     action.prepareArtifacts();
                 } else {
@@ -141,7 +140,7 @@ public class CayenneGeneratorTask extends CayenneTask {
     private List<ClassGenerationAction> createActions(DataMap dataMap) {
         List<ClassGenerationAction> actions = new ArrayList<>();
         for (CgenConfiguration configuration : buildConfigurations(dataMap)) {
-            
actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration));
+            
actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration,
 logger));
         }
         return actions;
     }
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index 20cc26f0e..4c8684401 100644
--- 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -46,23 +46,24 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.stream.Collectors;
 
 public class ClassGenerationAction {
 
-    public static final String SUPERCLASS_PREFIX = "_";
+    private static final String SUPERCLASS_PREFIX = "_";
     private static final String WILDCARD = "*";
     private static final String CUSTOM_TEMPLATE_REPO = "customTemplateRepo";
 
-    protected CgenConfiguration configuration;
-    protected Logger logger;
-
-    protected Context context;
+    protected final CgenConfiguration configuration;
+    protected final Logger logger;
     protected final Map<String, Template> templateCache;
 
-    private ToolsUtilsFactory utilsFactory;
-    private MetadataUtils metadataUtils;
+    private final ToolsUtilsFactory utilsFactory;
+    private final MetadataUtils metadataUtils;
+
+    protected Context context;
 
     /**
      * Optionally allows user-defined tools besides {@link ImportUtils} for 
working with velocity templates.<br/>
@@ -75,8 +76,17 @@ public class ClassGenerationAction {
      * tools.application.myTool = com.mycompany.MyTool</pre>
      * Then the methods in the MyTool class will be available for use in the 
template like ${myTool.myMethod(arg)}
      */
-    public ClassGenerationAction(CgenConfiguration configuration) {
-        this.configuration = configuration;
+    public ClassGenerationAction(
+            CgenConfiguration configuration,
+            ToolsUtilsFactory utilsFactory,
+            MetadataUtils metadataUtils,
+            Logger logger) {
+
+        this.configuration = Objects.requireNonNull(configuration);
+        this.utilsFactory = Objects.requireNonNull(utilsFactory);
+        this.metadataUtils = Objects.requireNonNull(metadataUtils);
+        this.logger = Objects.requireNonNull(logger);
+
         String toolConfigFile = configuration.getExternalToolConfig();
 
         if (System.getProperty("org.apache.velocity.tools") != null || 
toolConfigFile != null) {
@@ -374,14 +384,6 @@ public class ClassGenerationAction {
         return fullPath;
     }
 
-    /**
-     * Injects an optional logger that will be used to trace generated files at
-     * the info level.
-     */
-    public void setLogger(Logger logger) {
-        this.logger = logger;
-    }
-
     /**
      * @since 4.1
      */
@@ -397,22 +399,6 @@ public class ClassGenerationAction {
         this.context = context;
     }
 
-    public ToolsUtilsFactory getUtilsFactory() {
-        return utilsFactory;
-    }
-
-    public void setUtilsFactory(ToolsUtilsFactory utilsFactory) {
-        this.utilsFactory = utilsFactory;
-    }
-
-    public void setMetadataUtils(MetadataUtils metadataUtils) {
-        this.metadataUtils = metadataUtils;
-    }
-
-    public MetadataUtils getMetadataUtils() {
-        return metadataUtils;
-    }
-
     /**
      * Collects generated class text in memory, and on close writes it to the 
target file, but only if it
      * differs from what the file already contains.
@@ -454,10 +440,8 @@ public class ClassGenerationAction {
 
             Files.write(file.toPath(), generated);
 
-            if (logger != null) {
-                String label = templateType.isSuperclass() ? "superclass" : 
"class";
-                logger.info("Generating {} file: {}", label, 
file.getCanonicalPath());
-            }
+            String label = templateType.isSuperclass() ? "superclass" : 
"class";
+            logger.info("Generating {} file: {}", label, 
file.getCanonicalPath());
 
             fileWritten(file, templateType);
         }
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java
 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java
index 9c6f2a07b..378b6a046 100644
--- 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java
+++ 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java
@@ -18,10 +18,17 @@
  ****************************************************************/
 package org.apache.cayenne.gen;
 
+import org.slf4j.Logger;
+
 /**
  * @since 4.2
  */
 public interface ClassGenerationActionFactory {
 
-    ClassGenerationAction createAction(CgenConfiguration configuration);
+    /**
+     * @param logger a logger used to trace generated files. Callers embedded 
in a build tool normally pass a
+     *               logger that routes to that tool's own output.
+     * @since 5.0 takes a logger
+     */
+    ClassGenerationAction createAction(CgenConfiguration configuration, Logger 
logger);
 }
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java
 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java
index b698369ac..3268dca19 100644
--- 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java
+++ 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne.gen;
 
 import org.apache.cayenne.di.Inject;
+import org.slf4j.Logger;
 
 /**
  * @since 4.2
@@ -33,11 +34,8 @@ public class DefaultClassGenerationActionFactory implements 
ClassGenerationActio
     private MetadataUtils metadataUtils;
 
     @Override
-    public ClassGenerationAction createAction(CgenConfiguration configuration) 
{
-        ClassGenerationAction classGenerationAction = new 
ClassGenerationAction(configuration);
-        classGenerationAction.setUtilsFactory(utilsFactory);
-        classGenerationAction.setMetadataUtils(metadataUtils);
-        return classGenerationAction;
+    public ClassGenerationAction createAction(CgenConfiguration configuration, 
Logger logger) {
+        return new ClassGenerationAction(configuration, utilsFactory, 
metadataUtils, logger);
     }
 
 }
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
index fdf1b76d8..8b7359774 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java
@@ -32,6 +32,7 @@ import org.apache.cayenne.map.SelectQueryDescriptor;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
+import org.slf4j.helpers.NOPLogger;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -47,7 +48,7 @@ import java.util.Collection;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class BaseTemplatesGenerationTest {
+public class BaseTemplatesGenerationTest extends CgenCase {
 
     @TempDir
     public File folder;
@@ -60,7 +61,11 @@ public class BaseTemplatesGenerationTest {
     @BeforeEach
     public void setUp() {
         cgenConfiguration = new CgenConfiguration();
-        action = new ClassGenerationAction(cgenConfiguration);
+        action = new ClassGenerationAction(
+                cgenConfiguration,
+                getUnitTestInjector().getInstance(ToolsUtilsFactory.class),
+                getUnitTestInjector().getInstance(MetadataUtils.class),
+                NOPLogger.NOP_LOGGER);
         dataMap = new DataMap();
         dataMap.setDefaultPackage("test");
         objEntity = new ObjEntity();
@@ -148,7 +153,6 @@ public class BaseTemplatesGenerationTest {
         cgenConfiguration.loadEntity(objEntity);
         cgenConfiguration.setDataMap(dataMap);
 
-        action.setUtilsFactory(new DefaultToolsUtilsFactory());
         action.execute();
 
         String targetName = dataMap.getName();
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
index 963a40622..7888e693d 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
@@ -37,6 +37,7 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
+import org.slf4j.helpers.NOPLogger;
 
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -54,8 +55,12 @@ public class ClassGenerationActionTest extends CgenCase {
        public void setUp() throws Exception {
                writers = new ArrayList<>(3);
                cgenConfiguration = new CgenConfiguration();
-               action = new 
TestClassGenerationAction(getUnitTestInjector().getInstance(ClassGenerationActionFactory.class)
-                               .createAction(cgenConfiguration), writers);
+               action = new TestClassGenerationAction(
+                               cgenConfiguration,
+                               
getUnitTestInjector().getInstance(ToolsUtilsFactory.class),
+                               
getUnitTestInjector().getInstance(MetadataUtils.class),
+                               NOPLogger.NOP_LOGGER,
+                               writers);
        }
 
        @AfterEach
@@ -64,6 +69,14 @@ public class ClassGenerationActionTest extends CgenCase {
                writers = null;
        }
 
+       private ClassGenerationAction newAction() {
+               return new ClassGenerationAction(
+                               cgenConfiguration,
+                               
getUnitTestInjector().getInstance(ToolsUtilsFactory.class),
+                               
getUnitTestInjector().getInstance(MetadataUtils.class),
+                               NOPLogger.NOP_LOGGER);
+       }
+
        @Test
        public void executeArtifactPairsImports() throws Exception {
 
@@ -230,7 +243,7 @@ public class ClassGenerationActionTest extends CgenCase {
 
                cgenConfiguration.setRootPath(tempFolder.toPath());
                cgenConfiguration.updateOutputPath(Paths.get("."));
-               action = new ClassGenerationAction(cgenConfiguration);
+               action = newAction();
                ObjEntity testEntity1 = new ObjEntity("TEST");
                testEntity1.setClassName("TestClass1");
                action.context.put(Artifact.SUPER_PACKAGE_KEY, "");
@@ -261,7 +274,7 @@ public class ClassGenerationActionTest extends CgenCase {
 
                cgenConfiguration.setRootPath(tempFolder.toPath());
                cgenConfiguration.updateOutputPath(Paths.get("."));
-               action = new ClassGenerationAction(cgenConfiguration);
+               action = newAction();
                action.context.put(Artifact.SUPER_PACKAGE_KEY, "");
                action.context.put(Artifact.SUPER_CLASS_KEY, "TestClass1");
 
@@ -289,7 +302,7 @@ public class ClassGenerationActionTest extends CgenCase {
 
                cgenConfiguration.setRootPath(tempFolder.toPath());
                cgenConfiguration.updateOutputPath(Paths.get("."));
-               action = new ClassGenerationAction(cgenConfiguration);
+               action = newAction();
                ObjEntity testEntity1 = new ObjEntity("TEST");
                testEntity1.setClassName("TestClass1");
                action.context.put(Artifact.SUB_PACKAGE_KEY, "");
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java
index 9e69db5c5..8c6b28daa 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java
@@ -22,13 +22,14 @@ package org.apache.cayenne.gen;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
+import org.slf4j.helpers.NOPLogger;
 
 import java.io.File;
 import java.nio.file.Paths;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public class TemplateLocationTest {
+public class TemplateLocationTest extends CgenCase {
 
     @TempDir
     public File tempFolder;
@@ -40,7 +41,11 @@ public class TemplateLocationTest {
     @BeforeEach
     public void setUp() {
         cgenConfiguration = new CgenConfiguration();
-        action = new ClassGenerationAction(cgenConfiguration);
+        action = new ClassGenerationAction(
+                cgenConfiguration,
+                getUnitTestInjector().getInstance(ToolsUtilsFactory.class),
+                getUnitTestInjector().getInstance(MetadataUtils.class),
+                NOPLogger.NOP_LOGGER);
         templateType = TemplateType.ENTITY_SUBCLASS;
     }
 
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java
 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java
index 7ba5c07df..8869f996d 100644
--- 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java
+++ 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java
@@ -22,16 +22,20 @@ import java.io.StringWriter;
 import java.io.Writer;
 import java.util.Collection;
 
+import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.MetadataUtils;
 import org.apache.cayenne.gen.TemplateType;
+import org.apache.cayenne.gen.ToolsUtilsFactory;
+import org.slf4j.Logger;
 
 public class TestClassGenerationAction extends ClassGenerationAction {
 
-    private Collection<StringWriter> writers;
+    private final Collection<StringWriter> writers;
 
-    public TestClassGenerationAction(ClassGenerationAction 
classGenerationAction, Collection<StringWriter> writers){
-        super(classGenerationAction.getConfiguration());
-        setUtilsFactory(classGenerationAction.getUtilsFactory());
+    public TestClassGenerationAction(CgenConfiguration configuration, 
ToolsUtilsFactory utilsFactory,
+                                     MetadataUtils metadataUtils, Logger 
logger, Collection<StringWriter> writers) {
+        super(configuration, utilsFactory, metadataUtils, logger);
         this.writers = writers;
     }
 
diff --git 
a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java 
b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index 227834b57..dc2ddb7f9 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -284,7 +284,6 @@ public class CgenTask extends BaseCayenneTask {
 
                 CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction 
= new CayenneGeneratorEmbeddableFilterAction();
                 
filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(getLogger(), 
null, excludeEmbeddables));
-                generator.setLogger(getLogger());
 
                 if (!hasConfig() && useConfigFromDataMap) {
                     generator.prepareArtifacts();
@@ -324,7 +323,8 @@ public class CgenTask extends BaseCayenneTask {
     List<ClassGenerationAction> createGenerators(DataMap dataMap) {
         List<ClassGenerationAction> generators = new ArrayList<>();
         for (CgenConfiguration configuration : buildConfigurations(dataMap)) {
-            
generators.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration));
+            
generators.add(injector.getInstance(ClassGenerationActionFactory.class)
+                    .createAction(configuration, getLogger()));
         }
         return generators;
     }
diff --git 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
index a345e985d..969d87e18 100644
--- 
a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
+++ 
b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.tools;
 
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.CgenTemplate;
-import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.map.DataMap;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
@@ -86,23 +85,20 @@ public class CgenTaskTest {
 
         for (CgenConfiguration configuration : 
task.buildConfigurations(dataMap)) {
 
-            ClassGenerationAction createdAction = new 
ClassGenerationAction(configuration);
+            CgenTemplate cgenTemplate = configuration.getTemplate();
+            assertNotNull(configuration.getEmbeddableSuperTemplate());
+            assertNotNull(configuration.getEmbeddableTemplate());
 
-            CgenConfiguration cgenConfiguration = 
createdAction.getCgenConfiguration();
-            CgenTemplate cgenTemplate = cgenConfiguration.getTemplate();
-            assertNotNull(cgenConfiguration.getEmbeddableSuperTemplate());
-            assertNotNull(cgenConfiguration.getEmbeddableTemplate());
-
-            assertEquals("UTF-8", cgenConfiguration.getEncoding());
-            assertEquals("entity", 
cgenConfiguration.getArtifactsGenerationMode());
-            assertEquals("pattern", cgenConfiguration.getOutputPattern());
-            assertEquals("org.example.model.auto", 
cgenConfiguration.getSuperPkg());
+            assertEquals("UTF-8", configuration.getEncoding());
+            assertEquals("entity", configuration.getArtifactsGenerationMode());
+            assertEquals("pattern", configuration.getOutputPattern());
+            assertEquals("org.example.model.auto", 
configuration.getSuperPkg());
             assertTrue(cgenTemplate.isFile());
             assertEquals("org/apache/cayenne/tools/velotemplate.vm", 
cgenTemplate.getData());
-            assertTrue(cgenConfiguration.isMakePairs());
-            assertTrue(cgenConfiguration.isCreatePropertyNames());
-            assertTrue(cgenConfiguration.isOverwrite());
-            assertTrue(cgenConfiguration.isUsePkgPath());
+            assertTrue(configuration.isMakePairs());
+            assertTrue(configuration.isCreatePropertyNames());
+            assertTrue(configuration.isOverwrite());
+            assertTrue(configuration.isUsePkgPath());
         }
     }
 
diff --git 
a/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
 
b/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
index 2cf447569..25fb8590b 100644
--- 
a/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ 
b/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -275,13 +275,12 @@ public class CayenneGeneratorMojo extends AbstractMojo {
         try {
             
loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps());
             DataMap dataMap = loaderAction.getMainDataMap();
-            for (ClassGenerationAction action : createActions(dataMap)) {
+            for (ClassGenerationAction action : createActions(dataMap, 
logger)) {
                 CayenneGeneratorEntityFilterAction filterEntityAction = new 
CayenneGeneratorEntityFilterAction();
                 
filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, 
includeEntities, excludeEntities));
 
                 CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction 
= new CayenneGeneratorEmbeddableFilterAction();
                 
filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, 
excludeEmbeddables));
-                action.setLogger(logger);
 
                 if (!hasConfig() && useConfigFromDataMap) {
                     action.prepareArtifacts();
@@ -323,10 +322,10 @@ public class CayenneGeneratorMojo extends AbstractMojo {
                 dataMapSuperTemplate != null || createPKProperties != null || 
externalToolConfig != null;
     }
 
-    private List<ClassGenerationAction> createActions(DataMap dataMap) {
+    private List<ClassGenerationAction> createActions(DataMap dataMap, Logger 
logger) {
         List<ClassGenerationAction> actions = new ArrayList<>();
         for (CgenConfiguration configuration : buildConfigurations(dataMap)) {
-            
actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration));
+            
actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration,
 logger));
         }
         return actions;
     }
diff --git 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java
 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java
index 26a73ad45..4cfa413e9 100644
--- 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java
+++ 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java
@@ -43,6 +43,7 @@ import org.apache.cayenne.project.ProjectLoader;
 import org.apache.cayenne.project.ProjectModule;
 import org.apache.cayenne.resource.URLResource;
 import org.apache.cayenne.tools.ToolsInjectorBuilder;
+import org.slf4j.helpers.NOPLogger;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -186,9 +187,11 @@ public class CgenRunTool {
         CgenValidation allPassed = new CgenValidation(true, true, true, true, 
true);
 
         // Execute cgen
-        InstrumentedClassGenerationAction action = new 
InstrumentedClassGenerationAction(cgenConfig);
-        action.setUtilsFactory(injector.getInstance(ToolsUtilsFactory.class));
-        action.setMetadataUtils(injector.getInstance(MetadataUtils.class));
+        InstrumentedClassGenerationAction action = new 
InstrumentedClassGenerationAction(
+                cgenConfig,
+                injector.getInstance(ToolsUtilsFactory.class),
+                injector.getInstance(MetadataUtils.class),
+                NOPLogger.NOP_LOGGER);
 
         action.prepareArtifacts();
         int filesConsidered = action.countFilesConsidered();
diff --git 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java
 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java
index 572e453b1..9cdb48508 100644
--- 
a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java
+++ 
b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java
@@ -22,11 +22,14 @@ import org.apache.cayenne.gen.Artifact;
 import org.apache.cayenne.gen.ArtifactGenerationMode;
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.MetadataUtils;
 import org.apache.cayenne.gen.TemplateType;
+import org.apache.cayenne.gen.ToolsUtilsFactory;
 import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.mcp.tools.cgen.protocol.CgenFileEntry;
 import org.apache.cayenne.mcp.tools.cgen.protocol.CgenFileKind;
+import org.slf4j.Logger;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -44,8 +47,13 @@ class InstrumentedClassGenerationAction extends 
ClassGenerationAction {
     private final List<CgenFileEntry> writtenFiles;
     private Artifact currentArtifact;
 
-    public InstrumentedClassGenerationAction(CgenConfiguration configuration) {
-        super(configuration);
+    public InstrumentedClassGenerationAction(
+            CgenConfiguration configuration,
+            ToolsUtilsFactory utilsFactory,
+            MetadataUtils metadataUtils,
+            Logger logger) {
+
+        super(configuration, utilsFactory, metadataUtils, logger);
         this.writtenFiles = new ArrayList<>();
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
index c8e5bf755..e6f586ebb 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java
@@ -32,6 +32,7 @@ import org.apache.cayenne.modeler.project.CgenOps;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import 
org.apache.cayenne.modeler.ui.project.editor.datadomain.DataDomainGeneratorsTab;
 import org.apache.cayenne.tools.ToolsInjectorBuilder;
+import org.slf4j.helpers.NOPLogger;
 
 import javax.swing.JOptionPane;
 import java.util.Set;
@@ -64,7 +65,8 @@ public class DataDomainCgenTab extends 
DataDomainGeneratorsTab<CgenConfiguration
                     cgenConfigList.add(createConfiguration(dataMap));
                 }
                 for (CgenConfiguration cgenConfiguration : 
cgenConfigList.getAll()) {
-                    ClassGenerationAction action = 
actionFactory.createAction(cgenConfiguration);
+                    ClassGenerationAction action = 
actionFactory.createAction(cgenConfiguration,
+                            NOPLogger.NOP_LOGGER);
                     action.prepareArtifacts();
                     action.execute();
                 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
index f153b2fb7..e57bc1a40 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
@@ -50,6 +50,7 @@ import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
 import org.apache.cayenne.tools.ToolsInjectorBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.NOPLogger;
 
 import javax.swing.*;
 import java.awt.*;
@@ -358,7 +359,7 @@ public class CgenPanel extends ProjectPanel implements 
ObjEntityListener, Embedd
                 .addModule(binder -> 
binder.bind(DataChannelMetaData.class).toInstance(app.getMetaData()))
                 .create()
                 .getInstance(ClassGenerationActionFactory.class)
-                .createAction(cgenConfiguration);
+                .createAction(cgenConfiguration, NOPLogger.NOP_LOGGER);
 
         try {
             generator.prepareArtifacts();
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java
index 450ccb4d5..ae8b562a6 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java
@@ -29,6 +29,7 @@ import org.apache.cayenne.gen.ClassGenerationActionFactory;
 import org.apache.cayenne.gen.CgenTemplate;
 import org.apache.cayenne.gen.TemplateType;
 import org.apache.cayenne.tools.ToolsInjectorBuilder;
+import org.slf4j.helpers.NOPLogger;
 
 import java.io.StringWriter;
 import java.io.Writer;
@@ -68,7 +69,7 @@ public class PreviewActionConfigurator {
 
         ClassGenerationAction action = injector
                 .getInstance(ClassGenerationActionFactory.class)
-                .createAction(previewCgenConfiguration);
+                .createAction(previewCgenConfiguration, NOPLogger.NOP_LOGGER);
         artefactsConfigurator.config(action, editor.getSelectedArtifactName());
         return action;
     }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java
index c50210367..5846a8f12 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java
@@ -25,6 +25,7 @@ import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
 import org.apache.cayenne.gen.MetadataUtils;
 import org.apache.cayenne.gen.ToolsUtilsFactory;
+import org.slf4j.Logger;
 
 import java.io.StringWriter;
 
@@ -41,12 +42,8 @@ public class PreviewClassGenerationFactory implements 
ClassGenerationActionFacto
     private StringWriter writer;
 
     @Override
-    public ClassGenerationAction createAction(CgenConfiguration configuration) 
{
-        PreviewGenerationAction action = new 
PreviewGenerationAction(configuration);
-        action.setUtilsFactory(utilsFactory);
-        action.setMetadataUtils(metadataUtils);
-        action.setWriter(writer);
-        return action;
+    public ClassGenerationAction createAction(CgenConfiguration configuration, 
Logger logger) {
+        return new PreviewGenerationAction(configuration, utilsFactory, 
metadataUtils, logger, writer);
     }
 
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java
index cf47fc74d..3e52740f6 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java
@@ -22,7 +22,10 @@ package 
org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor
 
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.MetadataUtils;
 import org.apache.cayenne.gen.TemplateType;
+import org.apache.cayenne.gen.ToolsUtilsFactory;
+import org.slf4j.Logger;
 
 import java.io.StringWriter;
 import java.io.Writer;
@@ -32,10 +35,17 @@ import java.io.Writer;
  */
 public class PreviewGenerationAction extends ClassGenerationAction {
 
-    private StringWriter writer;
+    private final StringWriter writer;
 
-    public PreviewGenerationAction(CgenConfiguration configuration) {
-        super(configuration);
+    public PreviewGenerationAction(
+            CgenConfiguration configuration,
+            ToolsUtilsFactory utilsFactory,
+            MetadataUtils metadataUtils,
+            Logger logger,
+            StringWriter writer) {
+
+        super(configuration, utilsFactory, metadataUtils, logger);
+        this.writer = writer;
     }
 
     @Override
@@ -43,10 +53,6 @@ public class PreviewGenerationAction extends 
ClassGenerationAction {
         //Mock
     }
 
-    public void setWriter(StringWriter writer) {
-        this.writer = writer;
-    }
-
     @Override
     protected Writer openWriter(TemplateType templateType) {
         // clear and return
diff --git 
a/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java
 
b/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java
index 787114429..abcd793a3 100644
--- 
a/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java
+++ 
b/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java
@@ -22,7 +22,10 @@ package org.apache.cayenne.modeler.editor.templateeditor;
 import org.apache.cayenne.gen.Artifact;
 import org.apache.cayenne.gen.ArtifactsGenerationMode;
 import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.configuration.xml.DefaultDataChannelMetaData;
 import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClassGenerationActionFactory;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjEntity;
@@ -30,9 +33,11 @@ import org.apache.cayenne.map.QueryDescriptor;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor.DataMapArtefactsConfigurator;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor.EmbeddableArtefactsConfigurator;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor.EntityArtefactsConfigurator;
+import org.apache.cayenne.tools.ToolsInjectorBuilder;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.slf4j.helpers.NOPLogger;
 
 import java.lang.reflect.Field;
 import java.util.Collection;
@@ -50,7 +55,11 @@ public class ArtifactsConfiguratorTest {
     @BeforeEach
     public void config(){
         this.dataMap = configureDataMap();
-        this.action = new ClassGenerationAction(createCgenConfiguration());
+        this.action = new ToolsInjectorBuilder()
+                .addModule(binder -> 
binder.bind(DataChannelMetaData.class).to(DefaultDataChannelMetaData.class))
+                .create()
+                .getInstance(ClassGenerationActionFactory.class)
+                .createAction(createCgenConfiguration(), NOPLogger.NOP_LOGGER);
         this.entityArtefactsConfigurator = new EntityArtefactsConfigurator();
         this.embeddableArtefactsConfigurator = new 
EmbeddableArtefactsConfigurator();
         this.dataMapArtefactsConfigurator = new DataMapArtefactsConfigurator();

Reply via email to