Skip to content

Commit bbf7a9e

Browse files
author
Anton Pogonets
committed
Dev: add Mapping exception. Preserve source of error.
1 parent 0d7b367 commit bbf7a9e

8 files changed

+50
-16
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,17 @@ public SourceVersion getSupportedSourceVersion() {
7979

8080
@Override
8181
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
82+
try {
83+
return processImpl(annotations, roundEnv);
84+
}
85+
catch(SwiftMappingException exc) {
86+
exc.printStackTrace();
87+
error(exc.getElement(), exc.getMessage());
88+
return true;
89+
}
90+
}
91+
92+
private boolean processImpl(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
8293
Filer filer = processingEnv.getFiler();
8394
messager.printMessage(Diagnostic.Kind.NOTE, "Start SwiftJava code generation:");
8495

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ public class SwiftCallbackFuncDescriptor {
6565
int paramEnd = funcFullName.indexOf(")");
6666

6767
if (paramStart <= 0 || paramEnd <= 0 || paramEnd <= paramStart) {
68-
throw new IllegalArgumentException("Wrong func name");
68+
throw new SwiftMappingException("Wrong func name", executableElement);
6969
}
7070

7171
this.swiftMethodName = funcFullName.substring(0, paramStart);
7272
String arguments = funcFullName.substring(paramStart + 1, paramEnd);
7373
String[] paramNames = arguments.split(":");
7474

7575
if (paramNames.length != params.size()) {
76-
throw new IllegalArgumentException("Wrong count of arguments in func name");
76+
throw new SwiftMappingException("Wrong count of arguments in func name", executableElement);
7777
}
7878

7979
this.paramNames = Arrays.asList(paramNames);

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,15 @@ class SwiftDelegateDescriptor {
8181
ExecutableElement executableElement = (ExecutableElement) element;
8282
if (executableElement.getSimpleName().toString().equals("release")) {
8383
if (!executableElement.getModifiers().contains(Modifier.NATIVE)) {
84-
throw new IllegalArgumentException(String.format("%s is not native method",
85-
executableElement.getSimpleName()));
84+
throw new SwiftMappingException(String.format("%s is not native method",
85+
executableElement.getSimpleName()), executableElement);
8686
}
8787
releaseExecutableElement = executableElement;
8888
}
8989
if (executableElement.getSimpleName().toString().equals("init")) {
9090
if (!executableElement.getModifiers().contains(Modifier.NATIVE)) {
91-
throw new IllegalArgumentException(String.format("%s is not native method",
92-
executableElement.getSimpleName()));
91+
throw new SwiftMappingException(String.format("%s is not native method",
92+
executableElement.getSimpleName()), executableElement);
9393
}
9494
initExecutableElement = executableElement;
9595
}
@@ -147,8 +147,9 @@ class SwiftDelegateDescriptor {
147147
if (element.getKind() == ElementKind.METHOD && element.getAnnotation(SwiftCallbackFunc.class) != null) {
148148
ExecutableElement executableElement = (ExecutableElement) element;
149149
if (executableElement.getModifiers().contains(Modifier.NATIVE)) {
150-
throw new IllegalArgumentException(String.format("%s is native method. Only java methods can be annotated with @%s",
151-
executableElement.getSimpleName(), SwiftCallbackFunc.class.getSimpleName()));
150+
String message = String.format("%s is native method. Only java methods can be annotated with @%s",
151+
executableElement.getSimpleName(), SwiftCallbackFunc.class.getSimpleName());
152+
throw new SwiftMappingException(message, executableElement);
152153
}
153154

154155
callbackFunctions.add(new SwiftCallbackFuncDescriptor(executableElement));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class SwiftFuncDescriptor implements JavaSwiftProcessor.WritableElement {
5151
int paramEnd = funcFullName.indexOf(")");
5252

5353
if (paramStart <= 0 || paramEnd <= 0 || paramEnd <= paramStart) {
54-
throw new IllegalArgumentException("Wrong func name");
54+
throw new SwiftMappingException("Wrong func name", executableElement);
5555
}
5656

5757
this.swiftMethodName = funcFullName.substring(0, paramStart);
@@ -60,7 +60,7 @@ class SwiftFuncDescriptor implements JavaSwiftProcessor.WritableElement {
6060
String[] paramNames = arguments.split(":");
6161

6262
if (paramNames.length != params.size()) {
63-
throw new IllegalArgumentException("Wrong count of arguments in func name");
63+
throw new SwiftMappingException("Wrong count of arguments in func name", executableElement);
6464
}
6565

6666
for (String paramName : paramNames) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ class SwiftGetterDescriptor implements JavaSwiftProcessor.WritableElement {
2626
this.isReturnTypeOptional = JavaSwiftProcessor.isNullable(executableElement);
2727

2828
if (executableElement.getThrownTypes().size() != 0) {
29-
throw new IllegalArgumentException("Getter can't throw");
29+
throw new SwiftMappingException("Getter can't throw", executableElement);
3030
}
3131

3232
if (executableElement.getParameters().size() != 0) {
33-
throw new IllegalArgumentException("Getter can't has parameters");
33+
throw new SwiftMappingException("Getter can't has parameters", executableElement);
3434
}
3535

3636
SwiftFunc swiftFunc = executableElement.getAnnotation(SwiftFunc.class);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.readdle.codegen;
2+
3+
import javax.lang.model.element.Element;
4+
5+
public class SwiftMappingException extends RuntimeException {
6+
private final Element element;
7+
8+
public SwiftMappingException(String message, Element element) {
9+
super(message);
10+
this.element = element;
11+
}
12+
13+
public SwiftMappingException(String message, Element element, Throwable parent) {
14+
super(message, parent);
15+
this.element = element;
16+
}
17+
18+
public Element getElement() {
19+
return element;
20+
}
21+
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,9 @@ class SwiftReferenceDescriptor {
7777
ExecutableElement executableElement = (ExecutableElement) element;
7878
if (executableElement.getSimpleName().toString().equals("release")) {
7979
if (!executableElement.getModifiers().contains(Modifier.NATIVE)) {
80-
throw new IllegalArgumentException(String.format("%s is not native method",
81-
executableElement.getSimpleName()));
80+
String message = String.format("%s is not native method",
81+
executableElement.getSimpleName());
82+
throw new SwiftMappingException(message, executableElement);
8283
}
8384
releaseExecutableElement = executableElement;
8485
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ class SwiftSetterDescriptor implements JavaSwiftProcessor.WritableElement {
2323
this.isStatic = executableElement.getModifiers().contains(Modifier.STATIC);
2424

2525
if (executableElement.getThrownTypes().size() != 0) {
26-
throw new IllegalArgumentException("Setter can't throw");
26+
throw new SwiftMappingException("Setter can't throw", executableElement);
2727
}
2828

2929
if (executableElement.getParameters().size() != 1) {
30-
throw new IllegalArgumentException("Setter should have at least 1 parameter");
30+
throw new SwiftMappingException("Setter should have at least 1 parameter", executableElement);
3131
}
3232

3333
param = new SwiftParamDescriptor(executableElement.getParameters().get(0));

0 commit comments

Comments
 (0)