diff options
author | gjoranv <gjoranv@gmail.com> | 2017-06-13 21:13:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-13 21:13:57 +0200 |
commit | 4cf582278fa183e9d02a41f4190affe124550070 (patch) | |
tree | 3e22d105df607e02fbf1a26a1e56c7d02ede2f38 /config-model | |
parent | eb30dd2ede5047ea691a80a3662ecfb69cdf325c (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.java | 26 |
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) { |