Установщики не создаются для свойств в расширениях контейнера. В этом фрагменте из build.gradle
:
foo {
thing1 = "This is thing1 in foo"
bars {
bar1 {
thing2 = "This is thing2 in foo.bars.bar1"
}
}
}
назначение thing1
работает нормально, но назначение thing2
завершается неудачно с:
Cannot cast object 'This is thing2 in bar1' with class 'java.lang.String' to class 'org.gradle.api.provider.Property'
Классы расширения:
class Foo {
final Property<String> thing1
Foo(Project project) {
thing1 = project.objects.property(String)
}
}
class Bar {
final String name
final Property<String> thing2
Bar(String name, Project project) {
this.name = name
thing2 = project.objects.property(String)
}
}
Расширения создаются с помощью:
public void apply(Project project) {
ExtensionAware foo = project.extensions.create('foo', Foo, project) as ExtensionAware
def bars = project.container(Bar) { name -> new Bar(name, project) }
foo.extensions.add("bars", bars)
}
Есть ли способ заставить это работать без написания явных сеттеров для каждого свойства?