Skip to content

Commit f1dde48

Browse files
authored
Merge pull request #15 from zayass/feature/errors-location
[RFC] More granular error reporting
2 parents aef3300 + c0fd49a commit f1dde48

8 files changed

Lines changed: 50 additions & 16 deletions

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
@@ -24,11 +24,11 @@ class SwiftGetterDescriptor implements JavaSwiftProcessor.WritableElement {
2424
this.isReturnTypeOptional = JavaSwiftProcessor.isNullable(executableElement);
2525

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

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

3434
if (getterAnnotation != null && !getterAnnotation.value().isEmpty()) {
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
@@ -69,8 +69,9 @@ class SwiftReferenceDescriptor {
6969
ExecutableElement executableElement = (ExecutableElement) element;
7070
if (executableElement.getSimpleName().toString().equals("release")) {
7171
if (!executableElement.getModifiers().contains(Modifier.NATIVE)) {
72-
throw new IllegalArgumentException(String.format("%s is not native method",
73-
executableElement.getSimpleName()));
72+
String message = String.format("%s is not native method",
73+
executableElement.getSimpleName());
74+
throw new SwiftMappingException(message, executableElement);
7475
}
7576
releaseExecutableElement = executableElement;
7677
}

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

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

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

2727
if (executableElement.getParameters().size() != 1) {
28-
throw new IllegalArgumentException("Setter should have exactly 1 parameter");
28+
throw new SwiftMappingException("Setter should have exactly 1 parameter", executableElement);
2929
}
3030

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

0 commit comments

Comments
 (0)