summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2009-12-14 12:01:53 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2009-12-14 12:01:53 +0000
commit461c798dbf0653ed8d89d7bd6cbd94366f6572f7 (patch)
treea0abf0216ed107e2b6edcc7cc847fa39ae52d514
parent1db89021e52efd946054c98add2f855d050453c4 (diff)
downloadscala-461c798dbf0653ed8d89d7bd6cbd94366f6572f7.tar.gz
scala-461c798dbf0653ed8d89d7bd6cbd94366f6572f7.tar.bz2
scala-461c798dbf0653ed8d89d7bd6cbd94366f6572f7.zip
integration of java and scala deprecation
-rw-r--r--src/compiler/scala/tools/nsc/ast/NodePrinters.scala1
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala10
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Flags.scala3
-rw-r--r--src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala3
-rw-r--r--test/files/jvm/deprecation/Defs.java12
-rw-r--r--test/files/jvm/deprecation/Test_1.scala17
-rw-r--r--test/files/jvm/deprecation/Use_2.java10
7 files changed, 49 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/NodePrinters.scala b/src/compiler/scala/tools/nsc/ast/NodePrinters.scala
index 50d6a719a2..89f036f34b 100644
--- a/src/compiler/scala/tools/nsc/ast/NodePrinters.scala
+++ b/src/compiler/scala/tools/nsc/ast/NodePrinters.scala
@@ -76,7 +76,6 @@ abstract class NodePrinters {
if (sym hasFlag MUTABLE ) buf.append(" | MUTABLE")
if (sym hasFlag PARAM ) buf.append(" | PARAM")
if (sym hasFlag PACKAGE ) buf.append(" | PACKAGE")
- if (sym hasFlag DEPRECATED ) buf.append(" | DEPRECATED")
if (sym hasFlag COVARIANT ) buf.append(" | COVARIANT")
if (sym hasFlag CAPTURED ) buf.append(" | CAPTURED")
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index 8e41801d3f..fef14e940b 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -455,14 +455,18 @@ abstract class GenJVM extends SubComponent {
}
def addAnnotations(jmember: JMember, annotations: List[AnnotationInfo]) {
- val toEmit = annotations.filter(shouldEmitAnnotation(_))
+ if (annotations.exists(_.atp.typeSymbol == definitions.DeprecatedAttr)) {
+ val attr = jmember.getContext().JOtherAttribute(
+ jmember.getJClass(), jmember, nme.DeprecatedATTR.toString,
+ new Array[Byte](0), 0)
+ jmember.addAttribute(attr)
+ }
+ val toEmit = annotations.filter(shouldEmitAnnotation(_))
if (toEmit.isEmpty) return
val buf: ByteBuffer = ByteBuffer.allocate(2048)
-
emitJavaAnnotations(jmember.getConstantPool, buf, toEmit)
-
addAttribute(jmember, nme.RuntimeAnnotationATTR, buf)
}
diff --git a/src/compiler/scala/tools/nsc/symtab/Flags.scala b/src/compiler/scala/tools/nsc/symtab/Flags.scala
index 592007aef0..9901027db6 100644
--- a/src/compiler/scala/tools/nsc/symtab/Flags.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Flags.scala
@@ -31,7 +31,7 @@ object Flags {
final val MUTABLE = 0x00001000 // symbol is a mutable variable.
final val PARAM = 0x00002000 // symbol is a (value or type) parameter to a method
final val PACKAGE = 0x00004000 // symbol is a java package
- final val DEPRECATED = 0x00008000 // symbol is deprecated.
+ // available: 0x00008000
final val COVARIANT = 0x00010000 // symbol is a covariant type variable
final val CAPTURED = 0x00010000 // variable is accessed from nested function.
@@ -306,7 +306,6 @@ object Flags {
case MUTABLE => "<mutable>"
case PARAM => "<param>"
case PACKAGE => "<package>"
- case DEPRECATED => "<deprecated>"
case COVARIANT => "<covariant/captured/byname>"
case CONTRAVARIANT => "<contravariant/label/inconstr/defaultinit>"
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
index 89572fe90e..6f21e3fee9 100644
--- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
+++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
@@ -772,7 +772,8 @@ abstract class ClassfileParser {
sym.setFlag(BRIDGE)
in.skip(attrLen)
case nme.DeprecatedATTR =>
- sym.setFlag(DEPRECATED)
+ val arg = Literal(Constant("see corresponding Javadoc for more information."))
+ sym.addAnnotation(AnnotationInfo(definitions.DeprecatedAttr.tpe, List(arg), List()))
in.skip(attrLen)
case nme.ConstantValueATTR =>
val c = pool.getConstant(in.nextChar)
diff --git a/test/files/jvm/deprecation/Defs.java b/test/files/jvm/deprecation/Defs.java
new file mode 100644
index 0000000000..52101c342a
--- /dev/null
+++ b/test/files/jvm/deprecation/Defs.java
@@ -0,0 +1,12 @@
+public class Defs {
+ /** @deprecated */
+ public int i = 1;
+
+ /** @deprecated */
+ public int bar() { return 0; }
+
+ /** @deprecated */
+ public class Inner {
+ public int buz() { return 0; }
+ }
+}
diff --git a/test/files/jvm/deprecation/Test_1.scala b/test/files/jvm/deprecation/Test_1.scala
new file mode 100644
index 0000000000..92173f94e2
--- /dev/null
+++ b/test/files/jvm/deprecation/Test_1.scala
@@ -0,0 +1,17 @@
+class Test {
+ def test {
+ val d = new Defs
+ val u = d.i + 1
+ d.i = 2
+ val v = d.bar()
+ val i = new d.Inner
+ val w = i.buz()
+ }
+
+ @deprecated("no longer!") class Inner {
+ @deprecated("uncool") def f: Int = 1
+ @deprecated("this one as well!") var g = -1
+ }
+}
+
+object Test { def main(args: Array[String]) { } }
diff --git a/test/files/jvm/deprecation/Use_2.java b/test/files/jvm/deprecation/Use_2.java
new file mode 100644
index 0000000000..65da8a8fac
--- /dev/null
+++ b/test/files/jvm/deprecation/Use_2.java
@@ -0,0 +1,10 @@
+class Use_2 {
+ public int test() {
+ Test u = new Test();
+ Test.Inner a = u.new Inner();
+ int i = a.f();
+ int j = a.g();
+ a.g_$eq(5);
+ return i + j;
+ }
+} \ No newline at end of file