summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-07-02 16:11:50 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-07-02 16:21:28 +0200
commitc42428d76652cbf3ffda1204b8f2e7bb5654f119 (patch)
treea6f02d584cf1e032bcb4fe69d9699e5b149e5c68
parent743b7297566e9a431e361388c85475deecb71c5e (diff)
downloadscala-c42428d76652cbf3ffda1204b8f2e7bb5654f119.tar.gz
scala-c42428d76652cbf3ffda1204b8f2e7bb5654f119.tar.bz2
scala-c42428d76652cbf3ffda1204b8f2e7bb5654f119.zip
Fix superclass for Java interface symbols created in JavaMirrors
According to the spec [1] the superclass of an interface is always Object. Restores the tests that were moved to pending in bf951ec1, fixex part of SI-9374. [1] https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.1
-rw-r--r--src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala2
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala1
-rw-r--r--test/files/run/reify_csv.check (renamed from test/pending/run/reify_csv.check)0
-rw-r--r--test/files/run/reify_csv.scala (renamed from test/pending/run/reify_csv.scala)0
-rw-r--r--test/files/run/reify_for1.scala (renamed from test/pending/run/reify_for1.scala)0
-rw-r--r--test/files/run/reify_fors_newpatmat.check (renamed from test/pending/run/reify_fors_newpatmat.check)0
-rw-r--r--test/files/run/reify_fors_newpatmat.scala (renamed from test/pending/run/reify_fors_newpatmat.scala)0
-rw-r--r--test/files/run/reify_fors_oldpatmat.check (renamed from test/pending/run/reify_fors_oldpatmat.check)0
-rw-r--r--test/files/run/reify_fors_oldpatmat.scala (renamed from test/pending/run/reify_fors_oldpatmat.scala)0
-rw-r--r--test/files/run/reify_newimpl_51.check (renamed from test/pending/run/reify_newimpl_51.check)0
-rw-r--r--test/files/run/reify_newimpl_51.scala (renamed from test/pending/run/reify_newimpl_51.scala)0
-rw-r--r--test/files/run/reify_newimpl_52.check (renamed from test/pending/run/reify_newimpl_52.check)0
-rw-r--r--test/files/run/reify_newimpl_52.scala (renamed from test/pending/run/reify_newimpl_52.scala)0
-rw-r--r--test/files/run/reify_properties.check (renamed from test/pending/run/reify_properties.check)0
-rw-r--r--test/files/run/reify_properties.scala (renamed from test/pending/run/reify_properties.scala)0
-rw-r--r--test/files/run/reify_sort1.check (renamed from test/pending/run/reify_sort1.check)0
-rw-r--r--test/files/run/reify_sort1.scala (renamed from test/pending/run/reify_sort1.scala)0
17 files changed, 2 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
index 660028eab8..91355693ee 100644
--- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
+++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
@@ -284,7 +284,7 @@ abstract class ClassfileParser {
def getType(index: Int): Type = getType(null, index)
def getType(sym: Symbol, index: Int): Type = sigToType(sym, getExternalName(index))
- def getSuperClass(index: Int): Symbol = if (index == 0) AnyClass else getClassSymbol(index)
+ def getSuperClass(index: Int): Symbol = if (index == 0) AnyClass else getClassSymbol(index) // the only classfile that is allowed to have `0` in the super_class is java/lang/Object (see jvm spec)
private def createConstant(index: Int): Constant = {
val start = starts(index)
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index 8c32a92ecd..d0670f337a 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -755,6 +755,7 @@ private[scala] trait JavaMirrors extends internal.SymbolTable with api.JavaUnive
val ifaces = jclazz.getGenericInterfaces.toList map typeToScala
val isAnnotation = JavaAccFlags(jclazz).isAnnotation
if (isAnnotation) AnnotationClass.tpe :: ClassfileAnnotationClass.tpe :: ifaces
+ else if (jclazz.isInterface) ObjectTpe :: ifaces // interfaces have Object as superclass in the classfile (see jvm spec), but getGenericSuperclass seems to return null
else (if (jsuperclazz == null) AnyTpe else typeToScala(jsuperclazz)) :: ifaces
} finally {
parentsLevel -= 1
diff --git a/test/pending/run/reify_csv.check b/test/files/run/reify_csv.check
index b56f4bb50b..b56f4bb50b 100644
--- a/test/pending/run/reify_csv.check
+++ b/test/files/run/reify_csv.check
diff --git a/test/pending/run/reify_csv.scala b/test/files/run/reify_csv.scala
index c35624469c..c35624469c 100644
--- a/test/pending/run/reify_csv.scala
+++ b/test/files/run/reify_csv.scala
diff --git a/test/pending/run/reify_for1.scala b/test/files/run/reify_for1.scala
index e1f5347572..e1f5347572 100644
--- a/test/pending/run/reify_for1.scala
+++ b/test/files/run/reify_for1.scala
diff --git a/test/pending/run/reify_fors_newpatmat.check b/test/files/run/reify_fors_newpatmat.check
index eefddedc20..eefddedc20 100644
--- a/test/pending/run/reify_fors_newpatmat.check
+++ b/test/files/run/reify_fors_newpatmat.check
diff --git a/test/pending/run/reify_fors_newpatmat.scala b/test/files/run/reify_fors_newpatmat.scala
index 6bee9538a8..6bee9538a8 100644
--- a/test/pending/run/reify_fors_newpatmat.scala
+++ b/test/files/run/reify_fors_newpatmat.scala
diff --git a/test/pending/run/reify_fors_oldpatmat.check b/test/files/run/reify_fors_oldpatmat.check
index eefddedc20..eefddedc20 100644
--- a/test/pending/run/reify_fors_oldpatmat.check
+++ b/test/files/run/reify_fors_oldpatmat.check
diff --git a/test/pending/run/reify_fors_oldpatmat.scala b/test/files/run/reify_fors_oldpatmat.scala
index 6bee9538a8..6bee9538a8 100644
--- a/test/pending/run/reify_fors_oldpatmat.scala
+++ b/test/files/run/reify_fors_oldpatmat.scala
diff --git a/test/pending/run/reify_newimpl_51.check b/test/files/run/reify_newimpl_51.check
index 9a4ddeacd3..9a4ddeacd3 100644
--- a/test/pending/run/reify_newimpl_51.check
+++ b/test/files/run/reify_newimpl_51.check
diff --git a/test/pending/run/reify_newimpl_51.scala b/test/files/run/reify_newimpl_51.scala
index f823bf4033..f823bf4033 100644
--- a/test/pending/run/reify_newimpl_51.scala
+++ b/test/files/run/reify_newimpl_51.scala
diff --git a/test/pending/run/reify_newimpl_52.check b/test/files/run/reify_newimpl_52.check
index 9359a2b211..9359a2b211 100644
--- a/test/pending/run/reify_newimpl_52.check
+++ b/test/files/run/reify_newimpl_52.check
diff --git a/test/pending/run/reify_newimpl_52.scala b/test/files/run/reify_newimpl_52.scala
index f01199e830..f01199e830 100644
--- a/test/pending/run/reify_newimpl_52.scala
+++ b/test/files/run/reify_newimpl_52.scala
diff --git a/test/pending/run/reify_properties.check b/test/files/run/reify_properties.check
index d769bea4b0..d769bea4b0 100644
--- a/test/pending/run/reify_properties.check
+++ b/test/files/run/reify_properties.check
diff --git a/test/pending/run/reify_properties.scala b/test/files/run/reify_properties.scala
index 01a9b12a92..01a9b12a92 100644
--- a/test/pending/run/reify_properties.scala
+++ b/test/files/run/reify_properties.scala
diff --git a/test/pending/run/reify_sort1.check b/test/files/run/reify_sort1.check
index 0d30805141..0d30805141 100644
--- a/test/pending/run/reify_sort1.check
+++ b/test/files/run/reify_sort1.check
diff --git a/test/pending/run/reify_sort1.scala b/test/files/run/reify_sort1.scala
index 6fb3cc5895..6fb3cc5895 100644
--- a/test/pending/run/reify_sort1.scala
+++ b/test/files/run/reify_sort1.scala