diff --git a/examples/src/Builder.jetl b/examples/src/Builder.jetl new file mode 100644 index 00000000000..6bd3bf4aa5c --- /dev/null +++ b/examples/src/Builder.jetl @@ -0,0 +1,43 @@ +object AntBuilder() { + + lazy val groovy = library { + classpath("$libs/groovy-...") + } + + lazy val gant = library { + new File("$gantHome/lib").files.each { + classpath(it) + } + } + + lazy val JPS = module { + targetLevel = "1.5" + classpath(antLayout, gant, groovy) + src("$projectHome/antLayout/src") + } + +}.build() + +class AntBuilder { + abstract class ClassPathEntry {} + + class Module : ClassPathEntry { + fun classpath(entries : ClassPathEntry...) { ... } + var targetLevel : String + fun src(src : String) { ... } + } + + class Library : ClassPathEntry { + fun classpath(entries : ClassPathEntry...) { ... } + } + + fun library(initializer : Library.{ => Library}) { + val lib = new Library() + initializer(lib) + return lib + } + + fun classpath + + fun module +} \ No newline at end of file diff --git a/grammar/src/class_members.grm b/grammar/src/class_members.grm index 30b0e2499e5..baec24de919 100644 --- a/grammar/src/class_members.grm +++ b/grammar/src/class_members.grm @@ -1,3 +1,4 @@ +/* class Example(a : Foo, i : Int) : Bar(i), Some { // constrtuctors: public this(a : Foo) : this(a, 0) @@ -25,7 +26,7 @@ class Example(a : Foo, i : Int) : Bar(i), Some { private set(s : String) { $z = s } // TODO: allow to omit the type here? } } - +*/ // h5. Grammar diff --git a/grammar/src/extension.grm b/grammar/src/extension.grm index fa5449b95ee..2e623f7ab15 100644 --- a/grammar/src/extension.grm +++ b/grammar/src/extension.grm @@ -9,9 +9,9 @@ completeExtension ; extensionMethod - : accessModifier? "extension" "fun" type "." functionRest + : accessModifier? "fun" type "." functionRest ; extensionProperty - : accessModifier? "extension" propertyRest + : accessModifier? propertyModifier? ("val" | "var") type "." propertyRest ; diff --git a/grammar/src/types.grm b/grammar/src/types.grm index eaadb9bc7f6..918ed6a0635 100644 --- a/grammar/src/types.grm +++ b/grammar/src/types.grm @@ -25,7 +25,7 @@ projectionSpecifier ; functionType - : "{" functionTypeContents "}" + : (type ".")? "{" functionTypeContents "}" ; functionTypeContents