summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala8
-rw-r--r--test/files/neg/t3403.check4
-rw-r--r--test/files/neg/t3403.scala2
3 files changed, 13 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 770daccef0..ddbba00653 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -1398,10 +1398,16 @@ trait Typers { self: Analyzer =>
(if (value.hasAnnotation(BooleanBeanPropertyAttr)) "is" else "get") +
nameSuffix
val beanGetter = value.owner.info.decl(beanGetterName)
+ if (beanGetter == NoSymbol) {
+ // the namer decides wether to generate these symbols or not. at that point, we don't
+ // have symbolic information yet, so we only look for annotations named "BeanProperty".
+ unit.error(stat.pos, "implementation limitation: the BeanProperty annotation cannot be used in a type alias or renamed import")
+ }
beanGetter.setAnnotations(memberAnnots(allAnnots, BeanGetterTargetClass))
- if (mods hasFlag MUTABLE) {
+ if (mods.hasFlag(MUTABLE) && beanGetter != NoSymbol) {
val beanSetterName = "set" + nameSuffix
val beanSetter = value.owner.info.decl(beanSetterName)
+ // unlike for the beanGetter, the beanSetter body is generated here. see comment in Namers.
gs.append(setterDef(beanSetter, isBean = true))
}
}
diff --git a/test/files/neg/t3403.check b/test/files/neg/t3403.check
new file mode 100644
index 0000000000..e52d140e6a
--- /dev/null
+++ b/test/files/neg/t3403.check
@@ -0,0 +1,4 @@
+t3403.scala:2: error: implementation limitation: the BeanProperty annotation cannot be used in a type alias or renamed import
+class Foo { @bp var bar: Int = 1 }
+ ^
+one error found
diff --git a/test/files/neg/t3403.scala b/test/files/neg/t3403.scala
new file mode 100644
index 0000000000..8be6ab2a31
--- /dev/null
+++ b/test/files/neg/t3403.scala
@@ -0,0 +1,2 @@
+import scala.reflect.{BeanProperty => bp}
+class Foo { @bp var bar: Int = 1 }