summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2016-11-02 22:14:36 +0100
committerLukas Rytz <lukas.rytz@gmail.com>2016-11-02 22:14:36 +0100
commit9b27a08f78b09f208792835de4673e20e4121284 (patch)
tree3ad6a38f41ea109c9a1dc8bc453918208455c220 /test
parent74c613bd45df26c96833d5eecde6de5bb59d1a4f (diff)
downloadscala-9b27a08f78b09f208792835de4673e20e4121284.tar.gz
scala-9b27a08f78b09f208792835de4673e20e4121284.tar.bz2
scala-9b27a08f78b09f208792835de4673e20e4121284.zip
neg test for parsing constants in Java sources
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/t3236-neg.check34
-rw-r--r--test/files/neg/t3236-neg/AnnotationTest.scala17
-rw-r--r--test/files/neg/t3236-neg/BooleanAnnotation.java7
-rw-r--r--test/files/neg/t3236-neg/Constants.java25
-rw-r--r--test/files/neg/t3236-neg/IntAnnotation.java7
-rw-r--r--test/files/neg/t3236-neg/ShortAnnotation.java7
-rw-r--r--test/files/neg/t3236-neg/StringAnnotation.java7
7 files changed, 104 insertions, 0 deletions
diff --git a/test/files/neg/t3236-neg.check b/test/files/neg/t3236-neg.check
new file mode 100644
index 0000000000..ef28574d45
--- /dev/null
+++ b/test/files/neg/t3236-neg.check
@@ -0,0 +1,34 @@
+AnnotationTest.scala:3: error: annotation argument needs to be a constant; found: Constants.ConstIdent
+ @IntAnnotation(Constants.ConstIdent)
+ ^
+AnnotationTest.scala:4: error: annotation argument needs to be a constant; found: Constants.ConstSelect
+ @IntAnnotation(Constants.ConstSelect)
+ ^
+AnnotationTest.scala:6: error: annotation argument needs to be a constant; found: Constants.ConstOpExpr1
+ @IntAnnotation(Constants.ConstOpExpr1)
+ ^
+AnnotationTest.scala:7: error: annotation argument needs to be a constant; found: Constants.ConstOpExpr2
+ @IntAnnotation(Constants.ConstOpExpr2)
+ ^
+AnnotationTest.scala:8: error: annotation argument needs to be a constant; found: Constants.ConstOpExpr3
+ @BooleanAnnotation(Constants.ConstOpExpr3)
+ ^
+AnnotationTest.scala:9: error: annotation argument needs to be a constant; found: Constants.ConstOpExpr4
+ @IntAnnotation(Constants.ConstOpExpr4)
+ ^
+AnnotationTest.scala:10: error: annotation argument needs to be a constant; found: Constants.NonFinalConst
+ @IntAnnotation(Constants.NonFinalConst)
+ ^
+AnnotationTest.scala:11: error: value NonStaticConst is not a member of object Constants
+ @IntAnnotation(Constants.NonStaticConst)
+ ^
+AnnotationTest.scala:12: error: value NonConst is not a member of object Constants
+ @IntAnnotation(Constants.NonConst)
+ ^
+AnnotationTest.scala:13: error: annotation argument needs to be a constant; found: Constants.ConstCastExpr
+ @ShortAnnotation(Constants.ConstCastExpr)
+ ^
+AnnotationTest.scala:15: error: annotation argument needs to be a constant; found: Constants.StringAdd
+ @StringAnnotation(Constants.StringAdd)
+ ^
+11 errors found
diff --git a/test/files/neg/t3236-neg/AnnotationTest.scala b/test/files/neg/t3236-neg/AnnotationTest.scala
new file mode 100644
index 0000000000..aec2a99020
--- /dev/null
+++ b/test/files/neg/t3236-neg/AnnotationTest.scala
@@ -0,0 +1,17 @@
+trait AnnotationTest {
+ @IntAnnotation(Constants.ConstInt) // ok
+ @IntAnnotation(Constants.ConstIdent)
+ @IntAnnotation(Constants.ConstSelect)
+ @IntAnnotation(Constants.NegatedInt) // ok
+ @IntAnnotation(Constants.ConstOpExpr1)
+ @IntAnnotation(Constants.ConstOpExpr2)
+ @BooleanAnnotation(Constants.ConstOpExpr3)
+ @IntAnnotation(Constants.ConstOpExpr4)
+ @IntAnnotation(Constants.NonFinalConst)
+ @IntAnnotation(Constants.NonStaticConst)
+ @IntAnnotation(Constants.NonConst)
+ @ShortAnnotation(Constants.ConstCastExpr)
+ @StringAnnotation(Constants.ConstString) // ok
+ @StringAnnotation(Constants.StringAdd)
+ def test: Unit
+} \ No newline at end of file
diff --git a/test/files/neg/t3236-neg/BooleanAnnotation.java b/test/files/neg/t3236-neg/BooleanAnnotation.java
new file mode 100644
index 0000000000..7e57a5e0db
--- /dev/null
+++ b/test/files/neg/t3236-neg/BooleanAnnotation.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface BooleanAnnotation {
+ boolean value();
+}
diff --git a/test/files/neg/t3236-neg/Constants.java b/test/files/neg/t3236-neg/Constants.java
new file mode 100644
index 0000000000..01d2d70dd7
--- /dev/null
+++ b/test/files/neg/t3236-neg/Constants.java
@@ -0,0 +1,25 @@
+// https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28
+public class Constants {
+ public static final int ConstInt = 1;
+
+ public static final int ConstIdent = ConstInt;
+ public static final int ConstSelect = Constants.ConstInt;
+
+ // this is a known limitation in scala's javac parser for constants, it will be treated as -1.
+ // the java compiler will flag an error.
+ public static final int NegatedInt = !1;
+
+ public static final int ConstOpExpr1 = 1 + 2;
+ public static final int ConstOpExpr2 = 1 << 2;
+ public static final boolean ConstOpExpr3 = 1 == 1;
+ public static final int ConstOpExpr4 = true ? 1 : 2;
+
+ public static int NonFinalConst = 1;
+ public final int NonStaticConst = 1;
+ public int NonConst = 1;
+
+ public static final short ConstCastExpr = (short)(1*2*3*4*5*6);
+
+ public static final String ConstString = "a";
+ public static final String StringAdd = "a" + 1;
+}
diff --git a/test/files/neg/t3236-neg/IntAnnotation.java b/test/files/neg/t3236-neg/IntAnnotation.java
new file mode 100644
index 0000000000..2ffad8890c
--- /dev/null
+++ b/test/files/neg/t3236-neg/IntAnnotation.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface IntAnnotation {
+ int value();
+}
diff --git a/test/files/neg/t3236-neg/ShortAnnotation.java b/test/files/neg/t3236-neg/ShortAnnotation.java
new file mode 100644
index 0000000000..f0a35892c7
--- /dev/null
+++ b/test/files/neg/t3236-neg/ShortAnnotation.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ShortAnnotation {
+ short value();
+}
diff --git a/test/files/neg/t3236-neg/StringAnnotation.java b/test/files/neg/t3236-neg/StringAnnotation.java
new file mode 100644
index 0000000000..0fdc1ead38
--- /dev/null
+++ b/test/files/neg/t3236-neg/StringAnnotation.java
@@ -0,0 +1,7 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface StringAnnotation {
+ String value();
+}