Skip to content

Commit f949fe1

Browse files
committed
[ADD] Support for different PackageFolder based on package when generate SwiftReferenceDescriptor
1 parent a0c9c5b commit f949fe1

File tree

5 files changed

+43
-8
lines changed

5 files changed

+43
-8
lines changed

compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import javax.lang.model.element.ElementKind;
2828
import javax.lang.model.element.ExecutableElement;
2929
import javax.lang.model.element.Name;
30+
import javax.lang.model.element.PackageElement;
3031
import javax.lang.model.element.TypeElement;
3132
import javax.lang.model.util.Elements;
3233
import javax.lang.model.util.Types;
@@ -330,6 +331,28 @@ private void generateJavaSwift(Filer filer) throws IOException {
330331
swiftWriter.close();
331332
}
332333

334+
String getPackageFolderForElement(Element classElement){
335+
if (moduleDescriptor.packageFolderMappings == null){
336+
return "";
337+
}
338+
339+
Element currentPackage = classElement;
340+
while (currentPackage.getKind() != ElementKind.PACKAGE) {
341+
currentPackage = currentPackage.getEnclosingElement();
342+
}
343+
PackageElement packageElement = (PackageElement) currentPackage;
344+
345+
String packageName = moduleDescriptor.packageFolderMappings.get(packageElement.toString());
346+
347+
this.note("Package: " + packageElement.toString() + " - FolderName: " + packageName);
348+
349+
if (packageName == null){
350+
return "";
351+
}else {
352+
return packageName + "/";
353+
}
354+
}
355+
333356
void note(String msg) {
334357
messager.printMessage(Diagnostic.Kind.WARNING, msg);
335358
}

compiler/src/main/java/com/readdle/codegen/SwiftModuleDescriptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ class SwiftModuleDescriptor {
77
String moduleName;
88
String[] importPackages;
99
HashMap<String, String> customTypeMappings;
10-
10+
HashMap<String, String> packageFolderMappings;
1111
}

compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import javax.lang.model.element.VariableElement;
2020
import javax.lang.model.type.DeclaredType;
2121
import javax.lang.model.type.MirroredTypeException;
22+
import javax.tools.FileObject;
2223
import javax.tools.StandardLocation;
2324

2425
import static com.readdle.codegen.JavaSwiftProcessor.FOLDER;
@@ -49,19 +50,27 @@ class SwiftReferenceDescriptor {
4950
javaFullName = classElement.getQualifiedName().toString().replace(".", "/");
5051
}
5152

52-
try {
53-
swiftFilePath = filer.createResource(StandardLocation.SOURCE_OUTPUT, FOLDER, simpleTypeName + SUFFIX, classElement).toUri().getPath();
54-
} catch (IOException e) {
55-
e.printStackTrace();
56-
throw new IllegalArgumentException("Can't create swift file");
57-
}
53+
5854

5955
Element enclosingElement = classElement.getEnclosingElement();
6056
while (enclosingElement != null && enclosingElement.getKind() == ElementKind.CLASS) {
6157
javaFullName = JavaSwiftProcessor.replaceLast(javaFullName, '/', '$');
6258
enclosingElement = enclosingElement.getEnclosingElement();
6359
}
6460

61+
try {
62+
String packageFolder = processor.getPackageFolderForElement(enclosingElement);
63+
File folder = new File(filer.getResource(StandardLocation.SOURCE_OUTPUT, FOLDER, packageFolder + simpleTypeName + SUFFIX).toUri().getPath()).getParentFile();
64+
if (!folder.exists()){
65+
folder.mkdir();
66+
}
67+
68+
swiftFilePath = filer.createResource(StandardLocation.SOURCE_OUTPUT, FOLDER, packageFolder + simpleTypeName + SUFFIX, classElement).toUri().getPath();
69+
} catch (IOException e) {
70+
e.printStackTrace();
71+
throw new IllegalArgumentException("Can't create swift file" + e.getLocalizedMessage());
72+
}
73+
6574
// Check if it's an abstract class
6675
if (classElement.getModifiers().contains(Modifier.ABSTRACT)) {
6776
throw new IllegalArgumentException(String.format("The class %s is abstract. You can't annotate abstract classes with @%s",

sample/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ android {
2828
arguments = ["com.readdle.codegen.package": """{
2929
"moduleName": "SampleProject",
3030
"importPackages": ["SampleAppCore"],
31+
"packageFolderMappings":{
32+
"io.kodika.android.TestPackage": "TestPackageKodika"
33+
},
3134
"customTypeMappings": {
3235
"com.readdle.swiftjava.sample.CustomSampleValue": "SampleValue"
3336
}

sample/src/main/java/com/readdle/swiftjava/sample/SwiftReferenceWithCallback.kt renamed to sample/src/main/java/io/kodika/android/TestPackage/SwiftReferenceWithCallback.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.readdle.swiftjava.sample
1+
package io.kodika.android.TestPackage
22

33
import com.readdle.codegen.anotation.SwiftReference
44
import com.readdle.codegen.anotation.SwiftCallbackFunc

0 commit comments

Comments
 (0)