@@ -455,41 +455,43 @@ class ExplicitJSClasses extends MiniPhase with InfoTransformer { thisPhase =>
455
455
if (fixedParents eq tree.parents) tree
456
456
else cpy.Template (tree)(parents = fixedParents)
457
457
} else {
458
- val newDecls = List .newBuilder[Tree ]
459
- for (decl <- tree.body) {
460
- val declSym = decl.symbol
461
- if (declSym eq null ) {
462
- // not a member def, do nothing
463
- } else if (isJSClass(declSym)) {
464
- val jsclassAccessor = jsclassAccessorFor(declSym)
465
-
466
- val rhs = if (cls.hasAnnotation(jsdefn.JSNativeAnnot )) {
467
- ref(jsdefn.JSPackage_native )
468
- } else {
469
- val clazzValue = clsOf(declSym.typeRef)
470
- if (cls.isStaticOwner) {
471
- // #4086
472
- ref(jsdefn.Runtime_constructorOf ).appliedTo(clazzValue)
458
+ val newStats = List .newBuilder[Tree ]
459
+ for (stat <- tree.body) {
460
+ stat match {
461
+ case stat : TypeDef if stat.isClassDef && isJSClass(stat.symbol) =>
462
+ val innerClassSym = stat.symbol.asClass
463
+ val jsclassAccessor = jsclassAccessorFor(innerClassSym)
464
+
465
+ val rhs = if (cls.hasAnnotation(jsdefn.JSNativeAnnot )) {
466
+ ref(jsdefn.JSPackage_native )
473
467
} else {
474
- val parentTpe = extractSuperTpeFromImpl(decl.asInstanceOf [TypeDef ].rhs.asInstanceOf [Template ])
475
- val superClassCtor = genJSConstructorOf(tree, parentTpe)
476
- ref(jsdefn.Runtime_createInnerJSClass ).appliedTo(clazzValue, superClassCtor)
468
+ val clazzValue = clsOf(innerClassSym.typeRef)
469
+ if (cls.isStaticOwner) {
470
+ // scala-js/scala-js#4086
471
+ ref(jsdefn.Runtime_constructorOf ).appliedTo(clazzValue)
472
+ } else {
473
+ val parentTpe = extractSuperTpeFromImpl(stat.rhs.asInstanceOf [Template ])
474
+ val superClassCtor = genJSConstructorOf(tree, parentTpe)
475
+ ref(jsdefn.Runtime_createInnerJSClass ).appliedTo(clazzValue, superClassCtor)
476
+ }
477
477
}
478
- }
479
478
480
- newDecls += ValDef (jsclassAccessor, rhs)
481
- } else if (cls.isStaticOwner) {
482
- // #4086
483
- if (isExposedModule(declSym)) {
484
- val getter = cls.info.decls.lookup(jsobjectGetterNameFor(declSym)).asTerm
485
- newDecls += DefDef (getter, ref(declSym))
486
- }
479
+ newStats += ValDef (jsclassAccessor, rhs)
480
+
481
+ case stat : ValDef if cls.isStaticOwner && isExposedModule(stat.symbol) =>
482
+ // scala-js/scala-js#4086
483
+ val moduleSym = stat.symbol
484
+ val getter = cls.info.decls.lookup(jsobjectGetterNameFor(moduleSym)).asTerm
485
+ newStats += DefDef (getter, ref(moduleSym))
486
+
487
+ case _ =>
488
+ () // nothing to do
487
489
}
488
490
489
- newDecls += decl
491
+ newStats += stat
490
492
}
491
493
492
- cpy.Template (tree)(tree.constr, fixedParents, Nil , tree.self, newDecls .result())
494
+ cpy.Template (tree)(tree.constr, fixedParents, Nil , tree.self, newStats .result())
493
495
}
494
496
}
495
497
0 commit comments