@@ -46,32 +46,31 @@ public Generator(String outputDir, String[] libs, boolean throwOnError) throws I
46
46
}
47
47
48
48
49
- public void writeBindings (String filename ) throws IOException {
49
+ public void writeBindings (String filename ) throws IOException , ClassNotFoundException {
50
50
Binding [] bindings = generateBindings (filename );
51
51
List <File > writenFiles = new ArrayList <File >();
52
52
for (Binding b : bindings ) {
53
- if (!writenFiles .contains (b .getFile ())) {
53
+ if (!writenFiles .contains (b .getFile ())) {
54
54
writenFiles .add (b .getFile ());
55
55
try (PrintStream ps = new PrintStream (b .getFile ())) {
56
56
ps .append (b .getContent ());
57
57
}
58
- }
59
- else {
58
+ } else {
60
59
throw new IOException ("File already exists. This may lead to undesired behavior.\n Please change the name of one of the extended classes.\n " + b .getFile ());
61
60
}
62
61
}
63
62
}
64
63
65
- public Binding [] generateBindings (String filename ) throws IOException {
64
+ public Binding [] generateBindings (String filename ) throws IOException , ClassNotFoundException {
66
65
List <DataRow > rows = getRows (filename );
67
66
68
67
Binding [] generatedFiles = processRows (rows );
69
68
70
69
return generatedFiles ;
71
70
}
72
71
73
- public Binding generateBinding (DataRow dataRow , HashSet interfaceNames ) {
74
- JavaClass clazz = classes . get (dataRow .getBaseClassname ());
72
+ public Binding generateBinding (DataRow dataRow , HashSet interfaceNames ) throws ClassNotFoundException {
73
+ JavaClass clazz = getClass (dataRow .getBaseClassname ());
75
74
76
75
boolean hasSpecifiedName = !dataRow .getFilename ().isEmpty ();
77
76
String packageName = hasSpecifiedName ? getBaseDir (dataRow .getFilename ()) : (DEFAULT_PACKAGE_NAME + "." + clazz .getPackageName ());
@@ -112,7 +111,7 @@ public Binding generateBinding(DataRow dataRow, HashSet interfaceNames) {
112
111
return new Binding (new File (baseDir , normalizedName + JAVA_EXT ), w .toString (), classname );
113
112
}
114
113
115
- public Binding generateBinding (DataRow dataRow ) {
114
+ public Binding generateBinding (DataRow dataRow ) throws ClassNotFoundException {
116
115
return generateBinding (dataRow , new HashSet ());
117
116
}
118
117
@@ -134,7 +133,7 @@ private List<DataRow> getRows(String filename) throws IOException {
134
133
return rows ;
135
134
}
136
135
137
- private Binding [] processRows (List <DataRow > rows ) throws IOException {
136
+ private Binding [] processRows (List <DataRow > rows ) throws IOException , ClassNotFoundException {
138
137
ArrayList <Binding > bindings = new ArrayList <>();
139
138
HashSet interfaceNames = new HashSet ();
140
139
@@ -184,11 +183,11 @@ private String getNormalizedName(String filename) {
184
183
char c = Character .isJavaIdentifierPart (ch ) ? ch : '_' ;
185
184
sb .append (c );
186
185
}
187
- String name = sb . toString ();
188
- return name ;
186
+
187
+ return sb . toString () ;
189
188
}
190
189
191
- private Map <String , List <Method >> getPublicApi (JavaClass clazz ) {
190
+ private Map <String , List <Method >> getPublicApi (JavaClass clazz ) throws ClassNotFoundException {
192
191
Map <String , List <Method >> api = new HashMap <String , List <Method >>();
193
192
JavaClass currentClass = clazz ;
194
193
String clazzName = clazz .getClassName ();
@@ -240,7 +239,7 @@ private Map<String, List<Method>> getPublicApi(JavaClass clazz) {
240
239
break ;
241
240
} else {
242
241
String superClassName = currentClass .getSuperclassName ();
243
- currentClass = classes . get (superClassName . replace ( '$' , '.' ) );
242
+ currentClass = getClass (superClassName );
244
243
}
245
244
}
246
245
return api ;
@@ -329,7 +328,7 @@ private String getFullMethodSignature(Method m) {
329
328
return sig ;
330
329
}
331
330
332
- private void writeBinding (Writer w , DataRow dataRow , JavaClass clazz , String packageName , String name ) {
331
+ private void writeBinding (Writer w , DataRow dataRow , JavaClass clazz , String packageName , String name ) throws ClassNotFoundException {
333
332
String [] implInterfaces = dataRow .getInterfaces ();
334
333
collectImplementedInterfaces (implInterfaces , clazz );
335
334
@@ -382,12 +381,12 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
382
381
}
383
382
}
384
383
385
- boolean hasInitMethod2 = isApplicationClass ? false : hasInitMethod ;
384
+ boolean hasInitMethod2 = ! isApplicationClass && hasInitMethod ;
386
385
writeConstructors (clazz , name , hasInitMethod2 , isApplicationClass , w );
387
386
388
387
if (isInterface ) {
389
388
Set <String > objectMethods = new HashSet <String >();
390
- for (Method objMethod : classes . get ("java.lang.Object" ).getMethods ()) {
389
+ for (Method objMethod : getClass ("java.lang.Object" ).getMethods ()) {
391
390
if (!objMethod .isStatic () && (objMethod .isPublic () || objMethod .isProtected ())) {
392
391
String sig = getFullMethodSignature (objMethod );
393
392
objectMethods .add (sig );
@@ -408,7 +407,7 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
408
407
}
409
408
while (!interfaceNames .isEmpty ()) {
410
409
String iname = interfaceNames .pollFirst ();
411
- JavaClass iface = classes . get (iname . replace ( '$' , '.' ) );
410
+ JavaClass iface = getClass (iname );
412
411
for (String iname2 : iface .getInterfaceNames ()) {
413
412
interfaceNames .add (iname2 .replace ('$' , '.' ));
414
413
}
@@ -528,7 +527,6 @@ private void writeMethodSignature(Method m, Writer w) {
528
527
private void writeThrowsClause (Method m , Writer w ) {
529
528
}
530
529
531
-
532
530
private void writeConstructors (JavaClass clazz , String classname , boolean hasInitMethod , boolean isApplicationClass , Writer w ) {
533
531
boolean isInterface = clazz .isInterface ();
534
532
if (isInterface ) {
@@ -656,7 +654,7 @@ private void writeType(Type t, Writer w) {
656
654
w .write (type );
657
655
}
658
656
659
- private void collectInterfaceMethods (JavaClass clazz , List <Method > methods ) {
657
+ private void collectInterfaceMethods (JavaClass clazz , List <Method > methods ) throws ClassNotFoundException {
660
658
JavaClass currentClass = clazz ;
661
659
662
660
while (true ) {
@@ -669,7 +667,7 @@ private void collectInterfaceMethods(JavaClass clazz, List<Method> methods) {
669
667
670
668
while (!queue .isEmpty ()) {
671
669
String ifaceName = queue .poll ();
672
- JavaClass currentInterface = classes . get (ifaceName . replace ( '$' , '.' ) );
670
+ JavaClass currentInterface = getClass (ifaceName );
673
671
Method [] ifaceMethods = currentInterface .getMethods ();
674
672
for (Method m : ifaceMethods ) {
675
673
methods .add (m );
@@ -683,12 +681,12 @@ private void collectInterfaceMethods(JavaClass clazz, List<Method> methods) {
683
681
break ;
684
682
} else {
685
683
String superClassName = currentClass .getSuperclassName ();
686
- currentClass = classes . get (superClassName . replace ( '$' , '.' ) );
684
+ currentClass = getClass (superClassName );
687
685
}
688
686
}
689
687
}
690
688
691
- private boolean isApplicationClass (JavaClass clazz , Map <String , JavaClass > classes ) {
689
+ private boolean isApplicationClass (JavaClass clazz , Map <String , JavaClass > classes ) throws ClassNotFoundException {
692
690
boolean isApplicationClass = false ;
693
691
694
692
String applicationClassname = "android.app.Application" ;
@@ -707,9 +705,19 @@ private boolean isApplicationClass(JavaClass clazz, Map<String, JavaClass> class
707
705
}
708
706
709
707
String superClassName = currentClass .getSuperclassName ();
710
- currentClass = classes . get (superClassName . replace ( '$' , '.' ) );
708
+ currentClass = getClass (superClassName );
711
709
}
712
710
713
711
return isApplicationClass ;
714
712
}
713
+
714
+ private JavaClass getClass (String className ) throws ClassNotFoundException {
715
+ JavaClass clazz = classes .get (className .replace ('$' , '.' ));
716
+
717
+ if (clazz == null ) {
718
+ throw new ClassNotFoundException ("Class: " + className );
719
+ }
720
+
721
+ return clazz ;
722
+ }
715
723
}
0 commit comments