aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Desugar.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-25 18:21:14 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-25 18:21:14 +0100
commit13a05d5119e33333000f969817434629443d6bb2 (patch)
tree7b5ea2dc8c2aef8ddff825a0824c8c4045f7ce0d /src/dotty/tools/dotc/ast/Desugar.scala
parentc6792189ff2075ac8b90efc7fad42aafd6a7b67e (diff)
downloaddotty-13a05d5119e33333000f969817434629443d6bb2.tar.gz
dotty-13a05d5119e33333000f969817434629443d6bb2.tar.bz2
dotty-13a05d5119e33333000f969817434629443d6bb2.zip
#353 use methods to find companion class
Diffstat (limited to 'src/dotty/tools/dotc/ast/Desugar.scala')
-rw-r--r--src/dotty/tools/dotc/ast/Desugar.scala23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala
index 9bef032fe..cc94e9b27 100644
--- a/src/dotty/tools/dotc/ast/Desugar.scala
+++ b/src/dotty/tools/dotc/ast/Desugar.scala
@@ -330,6 +330,13 @@ object desugar {
.withMods(synthetic))
.withPos(cdef.pos).toList
+ def companionClassGeterMethod =
+ DefDef(nme.COMPANION_CLASS_METHOD, Nil, Nil, Ident(name),
+ /*Select(Select(
+ Select(Ident(nme.ROOTPKG), nme.scala_),
+ nme.Predef), nme.???)*/ Ident(nme.???))
+ .withMods(synthetic | Private)
+
// The companion object defifinitions, if a companion is needed, Nil otherwise.
// companion definitions include:
// 1. If class is a case class case class C[Ts](p1: T1, ..., pN: TN)(moreParams):
@@ -359,11 +366,15 @@ object desugar {
DefDef(nme.unapply, derivedTparams, (unapplyParam :: Nil) :: Nil, TypeTree(), unapplyRHS)
.withMods(synthetic)
}
- companionDefs(parent, applyMeths ::: unapplyMeth :: defaultGetters)
+ companionDefs(parent, companionClassGeterMethod :: applyMeths ::: unapplyMeth :: defaultGetters)
+ }
+ else {
+ val methods = if (!(mods is Synthetic | Module)) companionClassGeterMethod :: defaultGetters else defaultGetters
+
+ if(methods.nonEmpty)
+ companionDefs(anyRef, methods)
+ else Nil
}
- else if (defaultGetters.nonEmpty)
- companionDefs(anyRef, defaultGetters)
- else Nil
// For an implicit class C[Ts](p11: T11, ..., p1N: T1N) ... (pM1: TM1, .., pMN: TMN), the method
// synthetic implicit C[Ts](p11: T11, ..., p1N: T1N) ... (pM1: TM1, ..., pMN: TMN): C[Ts] =
@@ -409,6 +420,8 @@ object desugar {
flatTree(cdef1 :: companions ::: implicitWrappers)
}
+ val AccessOrSynthetic = AccessFlags | Synthetic
+
/** Expand
*
* object name extends parents { self => body }
@@ -436,7 +449,7 @@ object desugar {
.withPos(tmpl.self.pos orElse tmpl.pos.startPos)
val clsTmpl = cpy.Template(tmpl)(self = clsSelf, body = tmpl.body)
val cls = TypeDef(clsName, clsTmpl)
- .withMods(mods.toTypeFlags & AccessFlags | ModuleClassCreationFlags)
+ .withMods(mods.toTypeFlags & AccessOrSynthetic | ModuleClassCreationFlags)
Thicket(modul, classDef(cls))
}
}