Skip to content

Commit 09e96e2

Browse files
committed
Fix Java parsing of annotations on qualified types
According to [#1][#1] this is valid syntax: java.lang.@nonnull String [#1]: https://checkerframework.org/jsr308/specification/java-annotation-design.html#qualified-type-syntax
1 parent dd37f07 commit 09e96e2

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala

+1
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ object JavaParsers {
298298
}
299299
while (in.token == DOT) {
300300
in.nextToken()
301+
annotations()
301302
t = typeArgs(atSpan(t.span.start, in.offset)(typeSelect(t, ident())))
302303
}
303304
convertToTypeId(t)

tests/pos/i21319/Foo.java

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package app;
2+
3+
import java.util.Optional;
4+
import lib.*;
5+
6+
public class Foo {
7+
private java.util.@lib.Valid Optional<String> userId;
8+
}

tests/pos/i21319/Test.scala

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package app
2+
3+
class Test

tests/pos/i21319/Valid.java

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package lib;
2+
3+
import static java.lang.annotation.ElementType.CONSTRUCTOR;
4+
import static java.lang.annotation.ElementType.FIELD;
5+
import static java.lang.annotation.ElementType.METHOD;
6+
import static java.lang.annotation.ElementType.PARAMETER;
7+
import static java.lang.annotation.ElementType.TYPE_USE;
8+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
9+
10+
import java.lang.annotation.Documented;
11+
import java.lang.annotation.Retention;
12+
import java.lang.annotation.Target;
13+
14+
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
15+
@Retention(RUNTIME)
16+
@Documented
17+
public @interface Valid {}

0 commit comments

Comments
 (0)