Сеттеры не генерируются для расширений контейнера - PullRequest
0 голосов
/ 21 апреля 2020

Установщики не создаются для свойств в расширениях контейнера. В этом фрагменте из 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)
    }

Есть ли способ заставить это работать без написания явных сеттеров для каждого свойства?

...