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