aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/backend/jvm/DottyBackendInterface.scala20
-rw-r--r--src/dotty/tools/dotc/core/Phases.scala2
-rw-r--r--tests/pos/i536.scala3
3 files changed, 23 insertions, 2 deletions
diff --git a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
index dc6752460..7a510857d 100644
--- a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
+++ b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
@@ -678,8 +678,24 @@ class DottyBackendInterface()(implicit ctx: Context) extends BackendInterface{
// members
def primaryConstructor: Symbol = toDenot(sym).primaryConstructor
- def nestedClasses: List[Symbol] = memberClasses //exitingPhase(currentRun.lambdaliftPhase)(sym.memberClasses)
- def memberClasses: List[Symbol] = toDenot(sym).info.memberClasses.map(_.symbol).toList
+
+ /** For currently compiled classes: All locally defined classes including local classes.
+ * The empty list for classes that are not currently compiled.
+ */
+ def nestedClasses: List[Symbol] = localClasses(ctx.flattenPhase)
+
+ /** For currently compiled classes: All classes that are declared as members of this class
+ * (but not inherited ones). The empty list for classes that are not currently compiled.
+ */
+ def memberClasses: List[Symbol] = localClasses(ctx.lambdaLiftPhase)
+
+ private def localClasses(phase: Phase) =
+ if (sym.isDefinedInCurrentRun)
+ ctx.atPhase(phase) { implicit ctx =>
+ toDenot(sym).info.decls.filter(_.isClass).toList
+ }
+ else Nil
+
def annotations: List[Annotation] = Nil
def companionModuleMembers: List[Symbol] = {
// phase travel to exitingPickler: this makes sure that memberClassesOf only sees member classes,
diff --git a/src/dotty/tools/dotc/core/Phases.scala b/src/dotty/tools/dotc/core/Phases.scala
index 406a3457a..e0496185e 100644
--- a/src/dotty/tools/dotc/core/Phases.scala
+++ b/src/dotty/tools/dotc/core/Phases.scala
@@ -235,6 +235,7 @@ object Phases {
private val extensionMethodsCache = new PhaseCache(classOf[ExtensionMethods])
private val erasureCache = new PhaseCache(classOf[Erasure])
private val patmatCache = new PhaseCache(classOf[PatternMatcher])
+ private val lambdaLiftCache = new PhaseCache(classOf[LambdaLift])
private val flattenCache = new PhaseCache(classOf[Flatten])
private val explicitOuterCache = new PhaseCache(classOf[ExplicitOuter])
private val gettersCache = new PhaseCache(classOf[Getters])
@@ -245,6 +246,7 @@ object Phases {
def extensionMethodsPhase = extensionMethodsCache.phase
def erasurePhase = erasureCache.phase
def patmatPhase = patmatCache.phase
+ def lambdaLiftPhase = lambdaLiftCache.phase
def flattenPhase = flattenCache.phase
def explicitOuterPhase = explicitOuterCache.phase
def gettersPhase = gettersCache.phase
diff --git a/tests/pos/i536.scala b/tests/pos/i536.scala
new file mode 100644
index 000000000..db9fb9b38
--- /dev/null
+++ b/tests/pos/i536.scala
@@ -0,0 +1,3 @@
+object Max {
+ java.util.Collections.max(null)
+}