[ONOS-5633][ONOS-5702] ONOS YANG tools to support multi-threaded execution + defect fix
Change-Id: I20733f0350ea7e4e6558bd895a3c7c18477af6cf
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
index 3e60817..d4904ae 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
@@ -1204,21 +1204,38 @@
return " Class<?>[] classArray = " + call + "" +
".getClass()" +
".getInterfaces();\n" +
- " Class<?> caseClass = classArray[0];\n" +
+ " Class<?> caseIntf = classArray[0];\n" +
" try {\n" +
- " Object obj1 = caseClass.newInstance();\n" +
+ " ClassLoader classLoader = this" +
+ ".getClass().getClassLoader();\n" +
+ " String className = \"Default\" + " +
+ "caseIntf.getSimpleName();\n" +
+ " className = caseIntf.getPackage()" +
+ ".getName() + \".\" + className;\n" +
+ " Class<?> caseClass = classLoader" +
+ ".loadClass(className);\n" +
+ " java.lang.reflect.Constructor<?> " +
+ "constructor = caseClass.getDeclaredConstructor();\n" +
+ " constructor.setAccessible(true);\n" +
+ " Object obj1 = constructor" +
+ ".newInstance();\n" +
" java.lang.reflect.Method method =" +
- " caseClass.getMethod(\"builder\", caseClass);\n" +
- " Object obj = method.invoke(obj1," +
- " (Object) null);\n" +
- " method = caseClass.getMethod(\"build\", caseClass);\n" +
- " Object obj2 = method.invoke(obj, " +
- "(Object) null);\n" +
- " method = caseClass.getMethod(\"processSubtreeFiltering\", caseClass);\n" +
+ " caseClass.getMethod(\"builder\");\n" +
+ " Object obj = method.invoke(obj1);\n" +
+ " Class<?> builderClass = obj.getClass();\n" +
+ " method = builderClass.getMethod(\"build\");\n" +
+ " Object obj2 = method.invoke(obj);\n" +
+ " Class<?> input = this.getClass()" +
+ ".getMethod(" + "\"" + name + "\").getReturnType();\n" +
+ " method = caseClass.getMethod" +
+ "(\"processSubtreeFiltering\", input,\n" +
+ " boolean.class);\n" +
" result = (" + returnType + ") method.invoke" +
"(obj2, " + call + ", true);\n" +
" } catch (NoSuchMethodException | InstantiationException |\n" +
- " IllegalAccessException | InvocationTargetException e) {\n" +
+ " IllegalAccessException | " +
+ "InvocationTargetException |\n" +
+ " ClassNotFoundException e) {\n" +
" e.printStackTrace();\n" +
" }\n";
}