summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-08-01 00:28:58 -0700
committerJason Zaugg <jzaugg@gmail.com>2013-08-01 00:28:58 -0700
commit5326d34244c9bd39ffd39dea9a77d986626b8e34 (patch)
tree9394eeb165b1919634d6e8b8d6401147a5094a15 /src
parent1e5bfdb117c1cab659456949549765084081d534 (diff)
parent2864c7f2d744661b2ffc528c1180ad0596a07483 (diff)
downloadscala-5326d34244c9bd39ffd39dea9a77d986626b8e34.tar.gz
scala-5326d34244c9bd39ffd39dea9a77d986626b8e34.tar.bz2
scala-5326d34244c9bd39ffd39dea9a77d986626b8e34.zip
Merge pull request #2761 from scalamacros/ticket/7510
Assorted toolbox fixes
Diffstat (limited to 'src')
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index 55f08f0586..9ecc5c6084 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -673,8 +673,10 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni
val parents = try {
parentsLevel += 1
val jsuperclazz = jclazz.getGenericSuperclass
- val superclazz = if (jsuperclazz == null) AnyClass.tpe else typeToScala(jsuperclazz)
- superclazz :: (jclazz.getGenericInterfaces.toList map typeToScala)
+ val ifaces = jclazz.getGenericInterfaces.toList map typeToScala
+ val isAnnotation = (jclazz.getModifiers & JAVA_ACC_ANNOTATION) != 0
+ if (isAnnotation) AnnotationClass.tpe :: ClassfileAnnotationClass.tpe :: ifaces
+ else (if (jsuperclazz == null) AnyClass.tpe else typeToScala(jsuperclazz)) :: ifaces
} finally {
parentsLevel -= 1
}
@@ -686,6 +688,11 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni
def enter(sym: Symbol, mods: Int) =
(if (jModifier.isStatic(mods)) module.moduleClass else clazz).info.decls enter sym
+ def enterEmptyCtorIfNecessary(): Unit = {
+ if (jclazz.getConstructors.isEmpty)
+ clazz.info.decls.enter(clazz.newClassConstructor(NoPosition))
+ }
+
for (jinner <- jclazz.getDeclaredClasses) {
jclassAsScala(jinner) // inner class is entered as a side-effect
// no need to call enter explicitly
@@ -702,6 +709,8 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni
for (jconstr <- jclazz.getConstructors)
enter(jconstrAsScala(jconstr), jconstr.getModifiers)
+ enterEmptyCtorIfNecessary()
+
} :: pendingLoadActions
if (parentsLevel == 0) {