Как перенести `ObjectFactory.namedDomainObjectList (...)` в gradle (5.6.4) - PullRequest
0 голосов
/ 06 апреля 2020

Работа над Gradle-плагином. И я попытался перенести функциональность с Gradle 6 ObjectFactory.namedDomainObjectList​(Class<T> elementType) на Gradle 5.6.4.

Я попробовал это без удачи:

import org.gradle.testfixtures.ProjectBuilder
import org.gradle.api.internal.CollectionCallbackActionDecorator
import org.gradle.api.internal.DefaultDomainObjectCollection

def main() {
    def project = ProjectBuilder.builder().build();
    CollectionCallbackActionDecorator ccad;
    def myList = project.objects.newInstance(DefaultDomainObjectCollection.class,
                MyClass.class,
                new ListElementSource(),
                ccad);
}

static class MyClass implements Named {
    @Override
    String getName() {
        return "foobar"
    }
}

Стек исключений

org.gradle.api.reflect.ObjectInstantiationException: Could not create an instance of type org.gradle.api.internal.DefaultDomainObjectCollection.
    at org.gradle.internal.instantiation.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:54)
    at org.gradle.api.internal.model.DefaultObjectFactory.newInstance(DefaultObjectFactory.java:82)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:190)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:55)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:151)

github: Источник создания Gradle

1 Ответ

0 голосов
/ 07 апреля 2020

Решил это так:

def myList = new DefaultNamedDomainObjectList(
        MyClass.class,
        new Instantiator() {
            @Override
            def <T> T newInstance(Class<? extends T> aClass, Object... objects) throws ObjectInstantiationException {
                project.objects.newInstance(aClass, objects)
            }
        },
        new DynamicPropertyNamer())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...