You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/05/04 13:47:20 UTC

[cayenne] branch master updated: CAY-2576 Ant cgen task is broken

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 45877e8  CAY-2576 Ant cgen task is broken
45877e8 is described below

commit 45877e8e7cbe51758120162ef83a72160332d9b3
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Sat May 4 16:46:16 2019 +0300

    CAY-2576 Ant cgen task is broken
---
 RELEASE-NOTES.txt                                  |  1 +
 .../apache/cayenne/tools/ToolsInjectorBuilder.java |  2 +-
 .../org/apache/cayenne/di/spi/ModuleLoader.java    | 23 ++++++++++++++++++----
 .../editor/cgen/CodeGeneratorController.java       |  9 ++++++---
 .../editor/cgen/domain/CgenTabController.java      |  9 ++++++---
 5 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 586d743..1cce2d2 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -52,6 +52,7 @@ CAY-2559 Modeler: Warning dialog shows wrong information after changing target e
 CAY-2561 Modeler: cgen type combobox doesn't set templates
 CAY-2572 Queries are not sorted by name in data map XML
 CAY-2575 Select translator: Wrong translation of IN Expression
+CAY-2576 Ant cgen task is broken
 
 ----------------------------------
 Release: 4.1.B1
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/ToolsInjectorBuilder.java b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/ToolsInjectorBuilder.java
index e1fea9f..8a1a62a 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/ToolsInjectorBuilder.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/ToolsInjectorBuilder.java
@@ -48,7 +48,7 @@ public class ToolsInjectorBuilder {
     }
 
     private Collection<? extends Module> autoLoadedModules() {
-        return new ModuleLoader().load(CayenneToolsModuleProvider.class);
+        return new ModuleLoader().load(CayenneToolsModuleProvider.class, getClass().getClassLoader());
     }
 
     public Injector create() {
diff --git a/cayenne-di/src/main/java/org/apache/cayenne/di/spi/ModuleLoader.java b/cayenne-di/src/main/java/org/apache/cayenne/di/spi/ModuleLoader.java
index 850fd8a..b119607 100644
--- a/cayenne-di/src/main/java/org/apache/cayenne/di/spi/ModuleLoader.java
+++ b/cayenne-di/src/main/java/org/apache/cayenne/di/spi/ModuleLoader.java
@@ -18,9 +18,6 @@
  */
 package org.apache.cayenne.di.spi;
 
-import org.apache.cayenne.di.DIRuntimeException;
-import org.apache.cayenne.di.Module;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -29,6 +26,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.ServiceLoader;
 
+import org.apache.cayenne.di.DIRuntimeException;
+import org.apache.cayenne.di.Module;
+
 /**
  * Auto-loads DI modules using ServiceLoader. To make a module auto-loadable, you will need to ship the jar with a file
  * "META-INF/services/&lt;full.provider.class.name&gt;" that contains provider implementation for the module in
@@ -47,12 +47,27 @@ public class ModuleLoader {
      * @throws DIRuntimeException if auto-loaded modules have circular override dependencies.
      */
     public List<Module> load(Class<? extends ModuleProvider> providerClass) {
+        return loadModules(ServiceLoader.load(providerClass));
+    }
+
+    /**
+     * Auto-loads all modules declared on classpath. Modules are loaded from the SPI declarations stored in
+     * "META-INF/services/&lt;full.provider.class.name&gt;", and then sorted in the order of override dependency.
+     *
+     * @return a sorted collection of auto-loadable modules.
+     * @throws DIRuntimeException if auto-loaded modules have circular override dependencies.
+     * @since 4.2
+     */
+    public List<Module> load(Class<? extends ModuleProvider> providerClass, ClassLoader classLoader) {
+        return loadModules(ServiceLoader.load(providerClass, classLoader));
+    }
 
+    private List<Module> loadModules(ServiceLoader<? extends ModuleProvider> serviceLoader) {
         // map providers by class
 
         Map<Class<? extends Module>, ModuleProvider> providers = new HashMap<>();
 
-        for (ModuleProvider provider : ServiceLoader.load(providerClass)) {
+        for (ModuleProvider provider : serviceLoader) {
 
             ModuleProvider existing = providers.put(provider.moduleType(), provider);
             if (existing != null && !existing.getClass().equals(provider.getClass())) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
index eb20df9..15718f5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
@@ -27,6 +27,8 @@ import java.util.function.Predicate;
 
 import org.apache.cayenne.configuration.event.DataMapEvent;
 import org.apache.cayenne.configuration.event.DataMapListener;
+import org.apache.cayenne.di.DIBootstrap;
+import org.apache.cayenne.di.spi.ModuleLoader;
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
@@ -41,7 +43,7 @@ import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
 import org.apache.cayenne.modeler.editor.DbImportController;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.tools.ToolsInjectorBuilder;
+import org.apache.cayenne.tools.CayenneToolsModuleProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -139,8 +141,9 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase impleme
 
     public void generateAction() {
         CgenConfiguration cgenConfiguration = createConfiguration();
-        ClassGenerationAction generator = new ToolsInjectorBuilder()
-                .create()
+        ClassGenerationAction generator = DIBootstrap
+                .createInjector(new ModuleLoader()
+                        .load(CayenneToolsModuleProvider.class))
                 .getInstance(ClassGenerationActionFactory.class)
                 .createAction(cgenConfiguration);
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
index 62d9d55..27c7451 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
@@ -28,6 +28,8 @@ import java.util.Set;
 import java.util.prefs.Preferences;
 
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.di.DIBootstrap;
+import org.apache.cayenne.di.spi.ModuleLoader;
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
@@ -38,7 +40,7 @@ import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
 import org.apache.cayenne.modeler.editor.GeneratorsTabController;
 import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
 import org.apache.cayenne.modeler.util.ModelerUtil;
-import org.apache.cayenne.tools.ToolsInjectorBuilder;
+import org.apache.cayenne.tools.CayenneToolsModuleProvider;
 
 /**
  * @since 4.1
@@ -63,8 +65,9 @@ public class CgenTabController extends GeneratorsTabController {
                 if(cgenConfiguration == null) {
                     cgenConfiguration = createConfiguration(dataMap);
                 }
-                ClassGenerationAction classGenerationAction = new ToolsInjectorBuilder()
-                        .create()
+                ClassGenerationAction classGenerationAction = DIBootstrap
+                        .createInjector(new ModuleLoader()
+                                .load(CayenneToolsModuleProvider.class))
                         .getInstance(ClassGenerationActionFactory.class)
                         .createAction(cgenConfiguration);
                 classGenerationAction.prepareArtifacts();