diff options
author | Harald Musum <musum@yahoo-inc.com> | 2017-06-14 07:37:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-14 07:37:40 +0200 |
commit | 0d0e6ca025d9e0e3420fe3852406ff29f38d0a57 (patch) | |
tree | 25293cb184dbbec174cfb65ab381ea261403a079 /config-model/src/main/java/com | |
parent | b77870459d58bff7b0d2411d09b40735643de04c (diff) | |
parent | 92e64e754ea91670d844a0c5f5f187266992f4fe (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.java | 26 |
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) { |