12
12
13
13
import java .util .ArrayList ;
14
14
import java .util .Arrays ;
15
+ import java .util .Collection ;
15
16
import java .util .HashMap ;
16
17
import java .util .HashSet ;
17
18
import java .util .LinkedList ;
@@ -92,7 +93,7 @@ public String generateDtsContent(List<JavaClass> javaClasses) {
92
93
processInterfaceConstructor (currClass , allInterfacesMethods );
93
94
94
95
for (Method m : allInterfacesMethods ) {
95
- processMethod (m , currClass , methodsSet );
96
+ processMethod (m , currClass , isInterface , methodsSet );
96
97
}
97
98
98
99
for (Field f : allInterfaceFields ) {
@@ -104,19 +105,28 @@ public String generateDtsContent(List<JavaClass> javaClasses) {
104
105
if (fom instanceof Field ) {
105
106
processField ((Field ) fom , currClass );
106
107
} else if (fom instanceof Method ) {
107
- processMethod ((Method ) fom , currClass , methodsSet );
108
+ processMethod ((Method ) fom , currClass , isInterface , methodsSet );
108
109
} else {
109
110
throw new IllegalArgumentException ("Argument is not method or field" );
110
111
}
111
112
}
112
113
// process member scope end
113
114
}
114
115
115
- if (isAbstract && !isInterface ) {
116
- List <JavaClass > allInterfaces = getAllInterfaces (currClass );
116
+ if (!isInterface ) {
117
+ HashSet <JavaClass > allInterfaces = new HashSet <>(getAllInterfaces (currClass ));
118
+
119
+ List <JavaClass > allClasses = getAllSuperClasses (currClass );
120
+
121
+ // Include interfaces of extended classes
122
+ for (JavaClass jclass : allClasses ) {
123
+ allInterfaces .addAll (getInterfaces (jclass ));
124
+ }
125
+
117
126
List <Method > allInterfacesMethods = getAllInterfacesMethods (allInterfaces );
127
+
118
128
for (Method m : allInterfacesMethods ) {
119
- processMethod (m , currClass , methodsSet );
129
+ processMethod (m , currClass , isInterface , methodsSet );
120
130
}
121
131
}
122
132
@@ -309,6 +319,27 @@ private List<JavaClass> getAllInterfaces(JavaClass classInterface) {
309
319
return interfaces ;
310
320
}
311
321
322
+ private List <JavaClass > getAllSuperClasses (JavaClass clazz ) {
323
+ ArrayList <JavaClass > classes = new ArrayList <>();
324
+
325
+ Queue <JavaClass > classQueue = new LinkedList <>();
326
+ classQueue .add (clazz );
327
+
328
+ while (!classQueue .isEmpty ()) {
329
+ JavaClass currClazz = classQueue .poll ();
330
+
331
+ if (currClazz .getClassName ().equals ("java.lang.Object" )) {
332
+ break ;
333
+ }
334
+
335
+ classes .add (currClazz );
336
+
337
+ classQueue .add (getSuperClass (currClazz ));
338
+ }
339
+
340
+ return classes ;
341
+ }
342
+
312
343
private List <JavaClass > getInterfaces (JavaClass classInterface ) {
313
344
List <JavaClass > interfaces = new ArrayList <>();
314
345
@@ -331,7 +362,7 @@ private List<JavaClass> getInterfaces(JavaClass classInterface) {
331
362
return interfaces ;
332
363
}
333
364
334
- private List <Method > getAllInterfacesMethods (List <JavaClass > interfaces ) {
365
+ private List <Method > getAllInterfacesMethods (Collection <JavaClass > interfaces ) {
335
366
ArrayList <Method > allInterfacesMethods = new ArrayList <>();
336
367
337
368
for (JavaClass clazz : interfaces ) {
@@ -352,7 +383,7 @@ private Set<Field> getAllInterfacesFields(List<JavaClass> interfaces) {
352
383
return allInterfacesFields ;
353
384
}
354
385
//method related
355
- private void processMethod (Method m , JavaClass clazz , Set <String > methodsSet ) {
386
+ private void processMethod (Method m , JavaClass clazz , boolean isInterface , Set <String > methodsSet ) {
356
387
String name = m .getName ();
357
388
358
389
if (m .isSynthetic () || (!m .isPublic () && !m .isProtected ())) {
@@ -377,21 +408,23 @@ private void processMethod(Method m, JavaClass clazz, Set<String> methodsSet) {
377
408
String sig = getMethodFullSignature (bm );
378
409
if (!mapNameMethod .containsKey (sig )) {
379
410
mapNameMethod .put (sig , bm );
380
- methodsSet .add (generateMethodContent (clazz , tabs , bm ));
411
+ methodsSet .add (generateMethodContent (clazz , isInterface , tabs , bm ));
381
412
}
382
413
}
383
414
}
384
415
}
385
416
386
- methodsSet .add (generateMethodContent (clazz , tabs , m ));
417
+ methodsSet .add (generateMethodContent (clazz , isInterface , tabs , m ));
387
418
}
388
419
389
- private String generateMethodContent (JavaClass clazz , String tabs , Method m ) {
420
+ private String generateMethodContent (JavaClass clazz , boolean isInterface , String tabs , Method m ) {
390
421
StringBuilder2 sbTemp = new StringBuilder2 ();
391
422
sbTemp .append (tabs + "public " );
423
+
392
424
if (m .isStatic ()) {
393
425
sbTemp .append ("static " );
394
426
}
427
+
395
428
sbTemp .append (getMethodName (m ) + getMethodParamSignature (clazz , m ));
396
429
String bmSig = "" ;
397
430
if (!isConstructor (m )) {
0 commit comments