Skip to content

Commit a6bb0f1

Browse files
[jnigen] Support nullability annotations on non-types (#1894)
1 parent 87ef391 commit a6bb0f1

File tree

17 files changed

+588
-427
lines changed

17 files changed

+588
-427
lines changed

pkgs/jnigen/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
## 0.13.1-wip
22

33
- Fixed a bug where Kotlin wildcards would crash the code generation.
4+
- Support nullability annotations that are on Java elements like methods and
5+
fields instead of directly on the return type or field type.
46

57
## 0.13.0
68

pkgs/jnigen/example/in_app_java/lib/android_utils.dart

Lines changed: 136 additions & 143 deletions
Large diffs are not rendered by default.

pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ class Example extends jni$_.JObject {
102102
reference.pointer,
103103
_id_thinkBeforeAnswering as jni$_.JMethodIDPtr,
104104
_$continuation.pointer)
105-
.object<jni$_.JObject>(const jni$_.JObjectType());
105+
.object<jni$_.JObject>(const jni$_.JObjectType())
106+
.release();
106107
_$continuation.release();
107108
final $o =
108109
jni$_.JGlobalReference(jni$_.JObjectPtr.fromAddress(await $p.first));

pkgs/jnigen/java/src/main/java/com/github/dart_lang/jnigen/apisummarizer/disasm/AsmAnnotationVisitor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ protected AsmAnnotationVisitor(JavaAnnotation annotation) {
2222
@Override
2323
public void visit(String name, Object value) {
2424
annotation.properties.put(name, value);
25+
super.visit(name, value);
2526
}
2627

2728
@Override
2829
public void visitEnum(String name, String descriptor, String value) {
2930
annotation.properties.put(
3031
name, new JavaAnnotation.EnumVal(Type.getType(descriptor).getClassName(), value));
32+
super.visitEnum(name, descriptor, value);
3133
}
3234

3335
@Override
@@ -57,12 +59,14 @@ protected AnnotationArrayVisitor(List<Object> list) {
5759
@Override
5860
public void visit(String unused, Object value) {
5961
list.add(value);
62+
super.visit(unused, value);
6063
}
6164

6265
@Override
6366
public void visitEnum(String unused, String descriptor, String value) {
6467
var type = Type.getType(descriptor);
6568
list.add(new JavaAnnotation.EnumVal(type.getClassName(), value));
69+
super.visitEnum(unused, descriptor, value);
6670
}
6771

6872
@Override

pkgs/jnigen/java/src/main/java/com/github/dart_lang/jnigen/apisummarizer/disasm/AsmClassSignatureVisitor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public void visitFormalTypeParameter(String name) {
2323
var typeParam = new TypeParam();
2424
typeParam.name = name;
2525
decl.typeParams.add(typeParam);
26+
super.visitFormalTypeParameter(name);
2627
}
2728

2829
@Override

pkgs/jnigen/java/src/main/java/com/github/dart_lang/jnigen/apisummarizer/disasm/AsmClassVisitor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ public void visitInnerClass(String name, String outerName, String innerName, int
7474
visited.get(binaryName).modifiers = TypeUtils.access(access);
7575
visited.get(binaryName).outerClassBinaryName = outerClass.get(binaryName);
7676
}
77+
super.visitInnerClass(name, outerName, innerName, access);
7778
}
7879

7980
@Override
@@ -185,6 +186,7 @@ public AnnotationVisitor visitTypeAnnotation(
185186
public void visitEnd() {
186187
var classToAdd = popVisiting();
187188
visited.put(classToAdd.binaryName, classToAdd);
189+
super.visitEnd();
188190
}
189191

190192
private ClassDecl peekVisiting() {

pkgs/jnigen/java/src/main/java/com/github/dart_lang/jnigen/apisummarizer/disasm/AsmMethodSignatureVisitor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public void visitFormalTypeParameter(String name) {
2525
var typeParam = new TypeParam();
2626
typeParam.name = name;
2727
method.typeParams.add(typeParam);
28+
super.visitFormalTypeParameter(name);
2829
}
2930

3031
@Override

pkgs/jnigen/java/src/main/java/com/github/dart_lang/jnigen/apisummarizer/disasm/AsmMethodVisitor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ protected AsmMethodVisitor(Method method) {
2525
@Override
2626
public void visitParameter(String name, int access) {
2727
paramNames.add(name);
28+
super.visitParameter(name, access);
2829
}
2930

3031
@Override
@@ -97,5 +98,6 @@ public void visitEnd() {
9798
method.params.get(i).name = paramNames.get(i);
9899
}
99100
}
101+
super.visitEnd();
100102
}
101103
}

pkgs/jnigen/java/src/main/java/com/github/dart_lang/jnigen/apisummarizer/disasm/AsmTypeUsageSignatureVisitor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public void visitBaseType(char descriptor) {
5454
}
5555
typeUsage.shorthand = name;
5656
typeUsage.type = new TypeUsage.PrimitiveType(name);
57+
super.visitBaseType(descriptor);
5758
}
5859

5960
@Override
@@ -70,6 +71,7 @@ public void visitTypeVariable(String name) {
7071
typeUsage.kind = TypeUsage.Kind.TYPE_VARIABLE;
7172
typeUsage.shorthand = name;
7273
typeUsage.type = new TypeUsage.TypeVar(name);
74+
super.visitTypeVariable(name);
7375
}
7476

7577
@Override
@@ -79,13 +81,15 @@ public void visitClassType(String name) {
7981
var components = name.split("[/$]");
8082
var simpleName = components[components.length - 1];
8183
typeUsage.type = new TypeUsage.DeclaredType(typeUsage.shorthand, simpleName, new ArrayList<>());
84+
super.visitClassType(name);
8285
}
8386

8487
@Override
8588
public void visitTypeArgument() {
8689
assert (typeUsage.type instanceof TypeUsage.DeclaredType);
8790
var typeArg = new TypeUsage("?", TypeUsage.Kind.WILDCARD, new TypeUsage.Wildcard(null, null));
8891
((TypeUsage.DeclaredType) typeUsage.type).params.add(typeArg);
92+
super.visitTypeArgument();
8993
}
9094

9195
@Override
@@ -125,5 +129,6 @@ public void visitInnerClassType(String name) {
125129
declaredType.binaryName += "$" + name;
126130
declaredType.simpleName = name;
127131
declaredType.typeParamIndices.add(declaredType.params.size());
132+
super.visitInnerClassType(name);
128133
}
129134
}

pkgs/jnigen/java/src/main/java/com/github/dart_lang/jnigen/apisummarizer/disasm/KotlinMetadataAnnotationVisitor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public void visit(String name, Object value) {
5151
case "xi":
5252
extraInt = (int) value;
5353
}
54+
super.visit(name, value);
5455
}
5556

5657
@Override

0 commit comments

Comments
 (0)