summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2012-05-18 14:15:30 +0200
committerLukas Rytz <lukas.rytz@epfl.ch>2012-05-18 14:15:30 +0200
commit9c6a7ad81bdb632d3da144d58210b5903b86a3e4 (patch)
tree3ff90b7f8768dc6273a2c5af8608db0f5b44e98e
parentef7708812fac32ca0c2a05330222a6b0806c9054 (diff)
downloadscala-9c6a7ad81bdb632d3da144d58210b5903b86a3e4.tar.gz
scala-9c6a7ad81bdb632d3da144d58210b5903b86a3e4.tar.bz2
scala-9c6a7ad81bdb632d3da144d58210b5903b86a3e4.zip
Fix SI-5544
Type-check annotations in a context with a localDummy owner
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala4
-rw-r--r--test/files/neg/t5544.check4
-rw-r--r--test/files/neg/t5544/Api_1.scala8
-rw-r--r--test/files/neg/t5544/Test_2.scala3
-rw-r--r--test/files/run/t5544.check1
-rw-r--r--test/files/run/t5544/Api_1.scala8
-rw-r--r--test/files/run/t5544/Test_2.scala3
7 files changed, 30 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index b5e58efaff..7419ec3bce 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -3246,7 +3246,9 @@ trait Typers extends Modes with Adaptations with Taggings {
reportAnnotationError(NestedAnnotationError(ann, annType))
} else {
val typedAnn = if (selfsym == NoSymbol) {
- typed(ann, mode, annClass.tpe)
+ // local dummy fixes SI-5544
+ val localTyper = newTyper(context.make(ann, context.owner.newLocalDummy(ann.pos)))
+ localTyper.typed(ann, mode, annClass.tpe)
} else {
// Since a selfsym is supplied, the annotation should have
// an extra "self" identifier in scope for type checking.
diff --git a/test/files/neg/t5544.check b/test/files/neg/t5544.check
new file mode 100644
index 0000000000..d4113935a3
--- /dev/null
+++ b/test/files/neg/t5544.check
@@ -0,0 +1,4 @@
+Test_2.scala:2: error: value baz is not a member of object Api
+ Api.baz
+ ^
+one error found
diff --git a/test/files/neg/t5544/Api_1.scala b/test/files/neg/t5544/Api_1.scala
new file mode 100644
index 0000000000..77637f440a
--- /dev/null
+++ b/test/files/neg/t5544/Api_1.scala
@@ -0,0 +1,8 @@
+import scala.annotation.StaticAnnotation
+
+class ann(val bar: Any) extends StaticAnnotation
+
+object Api {
+ @ann({def baz = "baz!!"})
+ def foo = println("foo")
+}
diff --git a/test/files/neg/t5544/Test_2.scala b/test/files/neg/t5544/Test_2.scala
new file mode 100644
index 0000000000..4c8c99cbc7
--- /dev/null
+++ b/test/files/neg/t5544/Test_2.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ Api.baz
+}
diff --git a/test/files/run/t5544.check b/test/files/run/t5544.check
new file mode 100644
index 0000000000..257cc5642c
--- /dev/null
+++ b/test/files/run/t5544.check
@@ -0,0 +1 @@
+foo
diff --git a/test/files/run/t5544/Api_1.scala b/test/files/run/t5544/Api_1.scala
new file mode 100644
index 0000000000..b4c92864de
--- /dev/null
+++ b/test/files/run/t5544/Api_1.scala
@@ -0,0 +1,8 @@
+import scala.annotation.StaticAnnotation
+
+class ann(val bar: Any) extends StaticAnnotation
+
+object Api {
+ @ann({def foo = "foo!!"})
+ def foo = println("foo")
+}
diff --git a/test/files/run/t5544/Test_2.scala b/test/files/run/t5544/Test_2.scala
new file mode 100644
index 0000000000..285f8959e0
--- /dev/null
+++ b/test/files/run/t5544/Test_2.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ Api.foo
+}