summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorgjoranv <gjoranv@gmail.com>2017-06-13 21:13:57 +0200
committerGitHub <noreply@github.com>2017-06-13 21:13:57 +0200
commit4cf582278fa183e9d02a41f4190affe124550070 (patch)
tree3e22d105df607e02fbf1a26a1e56c7d02ede2f38 /config-model
parenteb30dd2ede5047ea691a80a3662ecfb69cdf325c (diff)
Revert "Remove last known usage of the default ctor on config classes."
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/InstanceResolver.java26
1 files changed, 17 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/InstanceResolver.java b/config-model/src/main/java/com/yahoo/vespa/model/InstanceResolver.java
index 051f0e9e52e..e983f794e76 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/InstanceResolver.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/InstanceResolver.java
@@ -59,8 +59,9 @@ class InstanceResolver {
ConfigDefinitionKey defKey = new ConfigDefinitionKey(key);
try {
if (targetDef != null) applyDef(builder, targetDef);
- Class<? extends ConfigInstance> clazz = getConfigClass(defKey, builder.getClass().getClassLoader());
- return clazz.getConstructor(builder.getClass()).newInstance(builder);
+ ConfigInstance instance = getInstance(defKey, builder.getClass().getClassLoader());
+ Class<? extends ConfigInstance> clazz = instance.getClass();
+ return clazz.getConstructor(new Class<?>[]{builder.getClass()}).newInstance(builder);
} catch (Exception e) {
throw new ConfigurationRuntimeException(e);
}
@@ -157,20 +158,27 @@ class InstanceResolver {
* @param cKey a ConfigKey
* @return a {@link ConfigInstance} or null if not available in classpath
*/
- @SuppressWarnings("unchecked")
- private static Class<? extends ConfigInstance> getConfigClass(ConfigDefinitionKey cKey, ClassLoader instanceLoader) {
+ private static ConfigInstance getInstance(ConfigDefinitionKey cKey, ClassLoader instanceLoader) {
String className = ConfigGenerator.createClassName(cKey.getName());
- String fullClassName = packageName(cKey) + "." + className;
Class<?> clazz;
+ String fullClassName = packageName(cKey) + "." + className;
try {
clazz = instanceLoader != null ? instanceLoader.loadClass(fullClassName) : Class.forName(fullClassName);
} catch (ClassNotFoundException e) {
- throw new ConfigurationRuntimeException("Could not find config class for key " + cKey, e);
+ return null;
+ }
+ Object i;
+ try {
+ Constructor<?> configConstructor = clazz.getDeclaredConstructor();
+ configConstructor.setAccessible(true);
+ i = configConstructor.newInstance();
+ } catch (InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) {
+ throw new ConfigurationRuntimeException(e);
}
- if (! ConfigInstance.class.isAssignableFrom(clazz)) {
- throw new ConfigurationRuntimeException(fullClassName + " is not a ConfigInstance subclass, can not produce config for " + cKey);
+ if (!(i instanceof ConfigInstance)) {
+ throw new ConfigurationRuntimeException(fullClassName + " is not a ConfigInstance, can not produce config for the name '" + cKey.getName() + "'.");
}
- return (Class<? extends ConfigInstance>) clazz;
+ return (ConfigInstance) i;
}
static String packageName(ConfigDefinitionKey cKey) {