@@ -46,32 +46,31 @@ public Generator(String outputDir, String[] libs, boolean throwOnError) throws I
4646 }
4747
4848
49- public void writeBindings (String filename ) throws IOException {
49+ public void writeBindings (String filename ) throws IOException , ClassNotFoundException {
5050 Binding [] bindings = generateBindings (filename );
5151 List <File > writenFiles = new ArrayList <File >();
5252 for (Binding b : bindings ) {
53- if (!writenFiles .contains (b .getFile ())) {
53+ if (!writenFiles .contains (b .getFile ())) {
5454 writenFiles .add (b .getFile ());
5555 try (PrintStream ps = new PrintStream (b .getFile ())) {
5656 ps .append (b .getContent ());
5757 }
58- }
59- else {
58+ } else {
6059 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 ());
6160 }
6261 }
6362 }
6463
65- public Binding [] generateBindings (String filename ) throws IOException {
64+ public Binding [] generateBindings (String filename ) throws IOException , ClassNotFoundException {
6665 List <DataRow > rows = getRows (filename );
6766
6867 Binding [] generatedFiles = processRows (rows );
6968
7069 return generatedFiles ;
7170 }
7271
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 ());
7574
7675 boolean hasSpecifiedName = !dataRow .getFilename ().isEmpty ();
7776 String packageName = hasSpecifiedName ? getBaseDir (dataRow .getFilename ()) : (DEFAULT_PACKAGE_NAME + "." + clazz .getPackageName ());
@@ -112,7 +111,7 @@ public Binding generateBinding(DataRow dataRow, HashSet interfaceNames) {
112111 return new Binding (new File (baseDir , normalizedName + JAVA_EXT ), w .toString (), classname );
113112 }
114113
115- public Binding generateBinding (DataRow dataRow ) {
114+ public Binding generateBinding (DataRow dataRow ) throws ClassNotFoundException {
116115 return generateBinding (dataRow , new HashSet ());
117116 }
118117
@@ -134,7 +133,7 @@ private List<DataRow> getRows(String filename) throws IOException {
134133 return rows ;
135134 }
136135
137- private Binding [] processRows (List <DataRow > rows ) throws IOException {
136+ private Binding [] processRows (List <DataRow > rows ) throws IOException , ClassNotFoundException {
138137 ArrayList <Binding > bindings = new ArrayList <>();
139138 HashSet interfaceNames = new HashSet ();
140139
@@ -184,11 +183,11 @@ private String getNormalizedName(String filename) {
184183 char c = Character .isJavaIdentifierPart (ch ) ? ch : '_' ;
185184 sb .append (c );
186185 }
187- String name = sb . toString ();
188- return name ;
186+
187+ return sb . toString () ;
189188 }
190189
191- private Map <String , List <Method >> getPublicApi (JavaClass clazz ) {
190+ private Map <String , List <Method >> getPublicApi (JavaClass clazz ) throws ClassNotFoundException {
192191 Map <String , List <Method >> api = new HashMap <String , List <Method >>();
193192 JavaClass currentClass = clazz ;
194193 String clazzName = clazz .getClassName ();
@@ -240,7 +239,7 @@ private Map<String, List<Method>> getPublicApi(JavaClass clazz) {
240239 break ;
241240 } else {
242241 String superClassName = currentClass .getSuperclassName ();
243- currentClass = classes . get (superClassName . replace ( '$' , '.' ) );
242+ currentClass = getClass (superClassName );
244243 }
245244 }
246245 return api ;
@@ -329,7 +328,7 @@ private String getFullMethodSignature(Method m) {
329328 return sig ;
330329 }
331330
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 {
333332 String [] implInterfaces = dataRow .getInterfaces ();
334333 collectImplementedInterfaces (implInterfaces , clazz );
335334
@@ -382,12 +381,12 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
382381 }
383382 }
384383
385- boolean hasInitMethod2 = isApplicationClass ? false : hasInitMethod ;
384+ boolean hasInitMethod2 = ! isApplicationClass && hasInitMethod ;
386385 writeConstructors (clazz , name , hasInitMethod2 , isApplicationClass , w );
387386
388387 if (isInterface ) {
389388 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 ()) {
391390 if (!objMethod .isStatic () && (objMethod .isPublic () || objMethod .isProtected ())) {
392391 String sig = getFullMethodSignature (objMethod );
393392 objectMethods .add (sig );
@@ -408,7 +407,7 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
408407 }
409408 while (!interfaceNames .isEmpty ()) {
410409 String iname = interfaceNames .pollFirst ();
411- JavaClass iface = classes . get (iname . replace ( '$' , '.' ) );
410+ JavaClass iface = getClass (iname );
412411 for (String iname2 : iface .getInterfaceNames ()) {
413412 interfaceNames .add (iname2 .replace ('$' , '.' ));
414413 }
@@ -528,7 +527,6 @@ private void writeMethodSignature(Method m, Writer w) {
528527 private void writeThrowsClause (Method m , Writer w ) {
529528 }
530529
531-
532530 private void writeConstructors (JavaClass clazz , String classname , boolean hasInitMethod , boolean isApplicationClass , Writer w ) {
533531 boolean isInterface = clazz .isInterface ();
534532 if (isInterface ) {
@@ -656,7 +654,7 @@ private void writeType(Type t, Writer w) {
656654 w .write (type );
657655 }
658656
659- private void collectInterfaceMethods (JavaClass clazz , List <Method > methods ) {
657+ private void collectInterfaceMethods (JavaClass clazz , List <Method > methods ) throws ClassNotFoundException {
660658 JavaClass currentClass = clazz ;
661659
662660 while (true ) {
@@ -669,7 +667,7 @@ private void collectInterfaceMethods(JavaClass clazz, List<Method> methods) {
669667
670668 while (!queue .isEmpty ()) {
671669 String ifaceName = queue .poll ();
672- JavaClass currentInterface = classes . get (ifaceName . replace ( '$' , '.' ) );
670+ JavaClass currentInterface = getClass (ifaceName );
673671 Method [] ifaceMethods = currentInterface .getMethods ();
674672 for (Method m : ifaceMethods ) {
675673 methods .add (m );
@@ -683,12 +681,12 @@ private void collectInterfaceMethods(JavaClass clazz, List<Method> methods) {
683681 break ;
684682 } else {
685683 String superClassName = currentClass .getSuperclassName ();
686- currentClass = classes . get (superClassName . replace ( '$' , '.' ) );
684+ currentClass = getClass (superClassName );
687685 }
688686 }
689687 }
690688
691- private boolean isApplicationClass (JavaClass clazz , Map <String , JavaClass > classes ) {
689+ private boolean isApplicationClass (JavaClass clazz , Map <String , JavaClass > classes ) throws ClassNotFoundException {
692690 boolean isApplicationClass = false ;
693691
694692 String applicationClassname = "android.app.Application" ;
@@ -707,9 +705,19 @@ private boolean isApplicationClass(JavaClass clazz, Map<String, JavaClass> class
707705 }
708706
709707 String superClassName = currentClass .getSuperclassName ();
710- currentClass = classes . get (superClassName . replace ( '$' , '.' ) );
708+ currentClass = getClass (superClassName );
711709 }
712710
713711 return isApplicationClass ;
714712 }
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+ }
715723}
0 commit comments