Skip to content

Commit 85cae06

Browse files
committed
added class inheritance in dts files
1 parent 58811a2 commit 85cae06

File tree

1 file changed

+46
-27
lines changed

1 file changed

+46
-27
lines changed

dts-generator/src/main/java/com/telerik/dts/DtsApi.java

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ public String generateDtsContent(List<JavaClass> javaClasses) {
5454
this.indent = openPackage(this.prevClass, currClass);
5555

5656
String tabs = getTabs(this.indent);
57-
sbContent.appendln(tabs + "export class " + getSimpleClassname(currClass) + " {");
57+
58+
JavaClass superClass = getSuperClass(currClass);
59+
String extendsLine = getExtendsLine(superClass);
60+
61+
sbContent.appendln(tabs + "export class " + getSimpleClassname(currClass) + extendsLine + " {");
5862

5963
// process member scope
6064
List<FieldOrMethod> foms = getMembers(currClass);
@@ -90,6 +94,13 @@ else if(fom instanceof Method) {
9094
return sbHeaders.toString() + sbContent.toString();
9195
}
9296

97+
private String getExtendsLine(JavaClass superClass) {
98+
if(superClass == null) {
99+
return "";
100+
}
101+
return " exports " + superClass.getClassName();
102+
}
103+
93104
private int closePackage(JavaClass prevClass, JavaClass currClass) {
94105
int indent = 0;
95106

@@ -190,12 +201,7 @@ private int openPackage(JavaClass prevClass, JavaClass currClass) {
190201
//method related
191202
private void processMethod(Method m, JavaClass clazz) {
192203

193-
try {
194-
loadBaseMethods(clazz); //loaded in "baseMethodNames" and "baseMethods"
195-
}
196-
catch (ClassNotFoundException e) {
197-
e.printStackTrace();
198-
}
204+
loadBaseMethods(clazz); //loaded in "baseMethodNames" and "baseMethods"
199205

200206
String tabs = getTabs(this.indent + 1);
201207

@@ -240,34 +246,47 @@ private void cacheMethodBySignature(Method m) {
240246
}
241247
}
242248

243-
private void loadBaseMethods(JavaClass clazz) throws ClassNotFoundException {
249+
private void loadBaseMethods(JavaClass clazz) {
244250
baseMethodNames = new HashSet<String>();
245251
baseMethods = new ArrayList<Method>();
246-
String scn = clazz.getSuperclassName();
247-
JavaClass currClass = ClassRepo.findClass(scn);
248-
assert currClass != null : "javaClass=" + clazz.getClassName() + " scn=" + scn;
249252

250-
if(currClass == null) {
251-
throw new ClassNotFoundException("Couldn't find class: " + scn + " required by class: " + clazz.getClassName() + ". You need to provide the jar containing the missing class: " + scn);
252-
}
253-
//get all base methods and method names
254-
while (true) {
255-
for (Method m : currClass.getMethods()) {
256-
if (!m.isSynthetic() && (m.isPublic() || m.isProtected())) {
257-
baseMethods.add(m);
258-
baseMethodNames.add(m.getName());
253+
JavaClass currClass = getSuperClass(clazz);
254+
255+
if(currClass != null) {
256+
//get all base methods and method names
257+
while (true) {
258+
for (Method m : currClass.getMethods()) {
259+
if (!m.isSynthetic() && (m.isPublic() || m.isProtected())) {
260+
baseMethods.add(m);
261+
baseMethodNames.add(m.getName());
262+
}
259263
}
260-
}
261264

262-
if (currClass.getClassName().equals("java.lang.Object")) {
263-
break;
265+
if (currClass.getClassName().equals("java.lang.Object")) {
266+
break;
267+
}
268+
269+
String scn = currClass.getSuperclassName();
270+
JavaClass baseClass = ClassRepo.findClass(scn);
271+
assert baseClass != null : "baseClass=" + currClass.getClassName() + " scn=" + scn;
272+
currClass = baseClass;
264273
}
274+
}
275+
}
265276

266-
scn = currClass.getSuperclassName();
267-
JavaClass baseClass = ClassRepo.findClass(scn);
268-
assert baseClass != null : "baseClass=" + currClass.getClassName() + " scn=" + scn;
269-
currClass = baseClass;
277+
private JavaClass getSuperClass(JavaClass clazz) {
278+
if(clazz.getClassName().equals("java.lang.Object")) {
279+
return null;
270280
}
281+
282+
String scn = clazz.getSuperclassName();
283+
JavaClass currClass = ClassRepo.findClass(scn);
284+
285+
if(currClass == null) {
286+
throw new NoClassDefFoundError("Couldn't find class: " + scn + " required by class: " + clazz.getClassName() + ". You need to provide the jar containing the missing class: " + scn);
287+
}
288+
289+
return currClass;
271290
}
272291

273292
private String getMethodFullSignature(Method m) {

0 commit comments

Comments
 (0)