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/<full.provider.class.name>" 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/<full.provider.class.name>", 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();