11package com .readdle .codegen ;
22
3-
4- import com .readdle .codegen .anotation .SwiftFunc ;
53import com .readdle .codegen .anotation .SwiftReference ;
64
75import java .io .File ;
1816import javax .lang .model .type .DeclaredType ;
1917import javax .lang .model .type .MirroredTypeException ;
2018
21- public class SwiftReferenceDescriptor {
19+ class SwiftReferenceDescriptor {
2220
23- static final String SUFFIX = "Android.swift" ;
21+ private static final String SUFFIX = "Android.swift" ;
2422
2523 private TypeElement annotatedClassElement ;
26- String javaPackage ;
27- String simpleTypeName ;
28- String [] importPackages ;
29- String pointerBasicTypeSig ;
24+ private String javaFullName ;
25+ private String simpleTypeName ;
26+ private String [] importPackages ;
27+ private String pointerBasicTypeSig ;
3028
3129 List <SwiftFuncDescriptor > functions = new LinkedList <>();
3230
@@ -38,12 +36,18 @@ public class SwiftReferenceDescriptor {
3836 SwiftReference annotation = classElement .getAnnotation (SwiftReference .class );
3937 importPackages = annotation .importPackages ();
4038 simpleTypeName = classElement .getSimpleName ().toString ();
41- javaPackage = classElement .getQualifiedName ().toString ().replace ("." + simpleTypeName , "" );
39+ javaFullName = classElement .getQualifiedName ().toString ().replace ("." , "/ " );
4240 } catch (MirroredTypeException mte ) {
4341 DeclaredType classTypeMirror = (DeclaredType ) mte .getTypeMirror ();
4442 TypeElement classTypeElement = (TypeElement ) classTypeMirror .asElement ();
4543 simpleTypeName = classTypeElement .getSimpleName ().toString ();
46- javaPackage = classElement .getQualifiedName ().toString ().replace ("." + simpleTypeName , "" );
44+ javaFullName = classElement .getQualifiedName ().toString ().replace ("." , "/" );
45+ }
46+
47+ Element enclosingElement = classElement .getEnclosingElement ();
48+ while (enclosingElement != null && enclosingElement .getKind () == ElementKind .CLASS ) {
49+ javaFullName = JavaSwiftProcessor .replaceLast (javaFullName , '/' , '$' );
50+ enclosingElement = enclosingElement .getEnclosingElement ();
4751 }
4852
4953 // Check if it's an abstract class
@@ -52,21 +56,13 @@ public class SwiftReferenceDescriptor {
5256 classElement .getQualifiedName ().toString (), SwiftReference .class .getSimpleName ()));
5357 }
5458
55- ExecutableElement retainExecutableElement = null ;
5659 ExecutableElement releaseExecutableElement = null ;
5760 boolean hasNativePointer = false ;
5861 boolean hasEmptyConstructor = false ;
5962
6063 for (Element element : classElement .getEnclosedElements ()) {
6164 if (element .getKind () == ElementKind .METHOD ) {
6265 ExecutableElement executableElement = (ExecutableElement ) element ;
63- if (executableElement .getSimpleName ().toString ().equals ("retain" )) {
64- if (!executableElement .getModifiers ().contains (Modifier .NATIVE )) {
65- throw new IllegalArgumentException (String .format ("%s is not native method" ,
66- executableElement .getSimpleName ()));
67- }
68- retainExecutableElement = executableElement ;
69- }
7066 if (executableElement .getSimpleName ().toString ().equals ("release" )) {
7167 if (!executableElement .getModifiers ().contains (Modifier .NATIVE )) {
7268 throw new IllegalArgumentException (String .format ("%s is not native method" ,
@@ -140,7 +136,7 @@ File generateCode(File dirPath) throws IOException {
140136 swiftWriter .emitImports (importPackages );
141137 swiftWriter .emitEmptyLine ();
142138
143- swiftWriter .emitStatement (String .format ("fileprivate let javaClass = JNI.GlobalFindClass(\" %s/%s \" )!" , javaPackage . replace ( "." , "/" ), simpleTypeName ));
139+ swiftWriter .emitStatement (String .format ("fileprivate let javaClass = JNI.GlobalFindClass(\" %s\" )!" , javaFullName ));
144140 if (pointerBasicTypeSig != null ) {
145141 swiftWriter .emitStatement (String .format ("fileprivate let javaPointerClass = JNI.GlobalFindClass(\" %s\" )!" , pointerBasicTypeSig ));
146142 swiftWriter .emitStatement ("fileprivate let javaSwiftPointerFiled = JNI.api.GetFieldID(JNI.env, javaPointerClass, \" nativePointer\" , \" J\" )" );
@@ -149,7 +145,7 @@ File generateCode(File dirPath) throws IOException {
149145 swiftWriter .emitStatement ("fileprivate let javaSwiftPointerFiled = JNI.api.GetFieldID(JNI.env, javaClass, \" nativePointer\" , \" J\" )" );
150146 }
151147
152- swiftWriter .emitStatement (String .format ("fileprivate let javaConstructor = try! JNI.getJavaEmptyConstructor(forClass: \" %s/%s \" )" , javaPackage . replace ( "." , "/" ), simpleTypeName ));
148+ swiftWriter .emitStatement (String .format ("fileprivate let javaConstructor = try! JNI.getJavaEmptyConstructor(forClass: \" %s\" )" , javaFullName ));
153149
154150 swiftWriter .emitEmptyLine ();
155151 swiftWriter .beginExtension (simpleTypeName );
@@ -185,7 +181,7 @@ File generateCode(File dirPath) throws IOException {
185181 swiftWriter .endExtension ();
186182
187183 for (SwiftFuncDescriptor function : functions ) {
188- function .generateCode (swiftWriter , javaPackage , simpleTypeName );
184+ function .generateCode (swiftWriter , javaFullName , simpleTypeName );
189185 }
190186
191187 swiftWriter .close ();
0 commit comments