aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com
diff options
context:
space:
mode:
authorHarald Musum <musum@yahoo-inc.com>2017-06-14 07:37:40 +0200
committerGitHub <noreply@github.com>2017-06-14 07:37:40 +0200
commit0d0e6ca025d9e0e3420fe3852406ff29f38d0a57 (patch)
tree25293cb184dbbec174cfb65ab381ea261403a079 /config-model/src/main/java/com
parentb77870459d58bff7b0d2411d09b40735643de04c (diff)
parent92e64e754ea91670d844a0c5f5f187266992f4fe (diff)
Merge pull request #2752 from yahoo/gjoranv/refactor-instance-resolver2
Remove last known usage of the default ctor on config classes.
Diffstat (limited to 'config-model/src/main/java/com')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/InstanceResolver.java26
1 files changed, 9 insertions, 17 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 e983f794e76..051f0e9e52e 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,9 +59,8 @@ class InstanceResolver {
ConfigDefinitionKey defKey = new ConfigDefinitionKey(key);
try {
if (targetDef != null) applyDef(builder, targetDef);
- ConfigInstance instance = getInstance(defKey, builder.getClass().getClassLoader());
- Class<? extends ConfigInstance> clazz = instance.getClass();
- return clazz.getConstructor(new Class<?>[]{builder.getClass()}).newInstance(builder);
+ Class<? extends ConfigInstance> clazz = getConfigClass(defKey, builder.getClass().getClassLoader());
+ return clazz.getConstructor(builder.getClass()).newInstance(builder);
} catch (Exception e) {
throw new ConfigurationRuntimeException(e);
}
@@ -158,27 +157,20 @@ class InstanceResolver {
* @param cKey a ConfigKey
* @return a {@link ConfigInstance} or null if not available in classpath
*/
- private static ConfigInstance getInstance(ConfigDefinitionKey cKey, ClassLoader instanceLoader) {
+ @SuppressWarnings("unchecked")
+ private static Class<? extends ConfigInstance> getConfigClass(ConfigDefinitionKey cKey, ClassLoader instanceLoader) {
String className = ConfigGenerator.createClassName(cKey.getName());
- Class<?> clazz;
String fullClassName = packageName(cKey) + "." + className;
+ Class<?> clazz;
try {
clazz = instanceLoader != null ? instanceLoader.loadClass(fullClassName) : Class.forName(fullClassName);
} catch (ClassNotFoundException 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);
+ throw new ConfigurationRuntimeException("Could not find config class for key " + cKey, e);
}
- if (!(i instanceof ConfigInstance)) {
- throw new ConfigurationRuntimeException(fullClassName + " is not a ConfigInstance, can not produce config for the name '" + cKey.getName() + "'.");
+ if (! ConfigInstance.class.isAssignableFrom(clazz)) {
+ throw new ConfigurationRuntimeException(fullClassName + " is not a ConfigInstance subclass, can not produce config for " + cKey);
}
- return (ConfigInstance) i;
+ return (Class<? extends ConfigInstance>) clazz;
}
static String packageName(ConfigDefinitionKey cKey) {