From 2ccbfa57783270049105b8c171d69159d54e578c Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Mon, 26 Aug 2013 20:06:25 +0200 Subject: SI-7783 Don't issue deprecation warnings for inferred TypeTrees Deprecation checks in RefChecks were looking into all TypeTrees to find references to deprecated type aliases. However, when the compiler infers a type argument or type of a member it creates a TypeTree (with a null original) that was also leading to warnings. I ran into this problem often when upgrading a build from SBT 0.12 to 0.13: a plugin I was using used the deprecated type alias, and I suffered transitively when I used methods from its API. This commit disables the checks for inferred TypeTree-s. --- test/files/neg/classmanifests_new_deprecations.check | 8 +------- test/files/neg/t7783.check | 16 ++++++++++++++++ test/files/neg/t7783.flags | 1 + test/files/neg/t7783.scala | 15 +++++++++++++++ 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 test/files/neg/t7783.check create mode 100644 test/files/neg/t7783.flags create mode 100644 test/files/neg/t7783.scala (limited to 'test/files/neg') diff --git a/test/files/neg/classmanifests_new_deprecations.check b/test/files/neg/classmanifests_new_deprecations.check index 12428c7626..4ad4a12b3e 100644 --- a/test/files/neg/classmanifests_new_deprecations.check +++ b/test/files/neg/classmanifests_new_deprecations.check @@ -7,9 +7,6 @@ classmanifests_new_deprecations.scala:3: error: type ClassManifest in object Pre classmanifests_new_deprecations.scala:4: error: type ClassManifest in object Predef is deprecated: Use scala.reflect.ClassTag instead val cm3: ClassManifest[Int] = null ^ -classmanifests_new_deprecations.scala:4: error: type ClassManifest in object Predef is deprecated: Use scala.reflect.ClassTag instead - val cm3: ClassManifest[Int] = null - ^ classmanifests_new_deprecations.scala:6: error: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead def rcm1[T: scala.reflect.ClassManifest] = ??? ^ @@ -19,13 +16,10 @@ classmanifests_new_deprecations.scala:7: error: type ClassManifest in package re classmanifests_new_deprecations.scala:8: error: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead val rcm3: scala.reflect.ClassManifest[Int] = null ^ -classmanifests_new_deprecations.scala:8: error: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead - val rcm3: scala.reflect.ClassManifest[Int] = null - ^ classmanifests_new_deprecations.scala:10: error: type ClassManifest in object Predef is deprecated: Use scala.reflect.ClassTag instead type CM[T] = ClassManifest[T] ^ classmanifests_new_deprecations.scala:15: error: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead type RCM[T] = scala.reflect.ClassManifest[T] ^ -10 errors found +8 errors found diff --git a/test/files/neg/t7783.check b/test/files/neg/t7783.check new file mode 100644 index 0000000000..f489b3c8fd --- /dev/null +++ b/test/files/neg/t7783.check @@ -0,0 +1,16 @@ +t7783.scala:1: error: type D in object O is deprecated: +object O { class C; @deprecated("", "") type D = C; def foo: Seq[D] = Nil } + ^ +t7783.scala:11: error: type D in object O is deprecated: + type T = O.D + ^ +t7783.scala:12: error: type D in object O is deprecated: + locally(null: O.D) + ^ +t7783.scala:13: error: type D in object O is deprecated: + val x: O.D = null + ^ +t7783.scala:14: error: type D in object O is deprecated: + locally(null.asInstanceOf[O.D]) + ^ +5 errors found diff --git a/test/files/neg/t7783.flags b/test/files/neg/t7783.flags new file mode 100644 index 0000000000..d1b831ea87 --- /dev/null +++ b/test/files/neg/t7783.flags @@ -0,0 +1 @@ +-deprecation -Xfatal-warnings \ No newline at end of file diff --git a/test/files/neg/t7783.scala b/test/files/neg/t7783.scala new file mode 100644 index 0000000000..995b644a09 --- /dev/null +++ b/test/files/neg/t7783.scala @@ -0,0 +1,15 @@ +object O { class C; @deprecated("", "") type D = C; def foo: Seq[D] = Nil } + +object NoWarn { + O.foo // nowarn + O.foo +: Nil // nowarn + def bar(a: Any, b: Any) = () // nowarn + bar(b = O.foo, a = ()) // nowarn +} + +object Warn { + type T = O.D + locally(null: O.D) + val x: O.D = null + locally(null.asInstanceOf[O.D]) +} -- cgit v1.2.3