From b07769581a359f13150d3a8a80eed4a337837ea1 Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Fri, 11 May 2018 17:32:38 +0200
Subject: [PATCH] Selectable: catch correct exception when the field isn't
found
NoSuchFieldError doesn't happen when reflection fails but when class-loading
fails, so it isn't relevant here.
---
library/src/scala/reflect/Selectable.scala | 2 +-
tests/run/i4496a.scala | 11 +++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
create mode 100644 tests/run/i4496a.scala
diff --git a/library/src/scala/reflect/Selectable.scala b/library/src/scala/reflect/Selectable.scala
index 0dbdbc293d1b..98f8c2666477 100644
--- a/library/src/scala/reflect/Selectable.scala
+++ b/library/src/scala/reflect/Selectable.scala
@@ -8,7 +8,7 @@ class Selectable(val receiver: Any) extends AnyVal with scala.Selectable {
fld.get(receiver)
}
catch {
- case ex: NoSuchFieldError =>
+ case ex: NoSuchFieldException =>
selectDynamicMethod(name).asInstanceOf[() => Any]()
}
}
diff --git a/tests/run/i4496a.scala b/tests/run/i4496a.scala
new file mode 100644
index 000000000000..f0d6a1b96aea
--- /dev/null
+++ b/tests/run/i4496a.scala
@@ -0,0 +1,11 @@
+import scala.reflect.Selectable.reflectiveSelectable
+class Foo1 { val a: Int = 10 }
+class Foo2 { def a: Int = 10 }
+class Foo3 { var a: Int = 10 }
+object Test {
+ def main(args: Array[String]): Unit = {
+ assert((new Foo1 : {val a: Int}).a == 10)
+ assert((new Foo2 : {val a: Int}).a == 10)
+ assert((new Foo3 : {val a: Int}).a == 10)
+ }
+}