1+ object foo {
2+ def main (args : Array [String ]): Unit = println(" Dotty" )
3+
4+ import java .net .URL
5+ import java .util .List
6+
7+ trait ConfigOrigin {
8+ def description : String
9+ def filename : String
10+ def url : URL
11+ def resource : String
12+ def lineNumber : Int
13+ def comments : List [String ]
14+ def withComments (comments : List [String ]): ConfigOrigin
15+ def withLineNumber (lineNumber : Int ): ConfigOrigin
16+ }
17+
18+
19+ trait ConfigValue extends ConfigMergeable {
20+ def origin : ConfigOrigin
21+ // def valueType: ConfigValueType
22+ def unwrapped : AnyRef
23+ def render : String
24+ // def render(options: ConfigRenderOptions): String
25+ override def withFallback (other : ConfigMergeable ): ConfigValue
26+ // def atPath(path: String): Config
27+ // def atKey(key: String): Config
28+ def withOrigin (origin : ConfigOrigin ): ConfigValue
29+ }
30+
31+
32+ trait ConfigMergeable {
33+ def withFallback (other : ConfigMergeable ): ConfigMergeable
34+ }
35+
36+ trait MergeableValue extends ConfigMergeable {
37+ def toFallbackValue (): ConfigValue
38+ }
39+
40+ // no impl
41+ final class SimpleConfigOrigin extends ConfigOrigin {
42+ def comments : java.util.List [String ] = ???
43+ def description : String = ???
44+ def filename : String = ???
45+ def lineNumber : Int = ???
46+ def resource : String = ???
47+ def url : java.net.URL = ???
48+ def withComments (comments : java.util.List [String ]): foo.ConfigOrigin = ???
49+ def withLineNumber (lineNumber : Int ): foo.ConfigOrigin = ???
50+ }
51+
52+ abstract class AbstractConfigValue (val _origin : ConfigOrigin )
53+ extends ConfigValue
54+ with MergeableValue {
55+
56+ override def origin : SimpleConfigOrigin =
57+ this ._origin.asInstanceOf [SimpleConfigOrigin ]
58+ }
59+ }
0 commit comments