Search in sources :

Example 31 with DynamicObject

use of org.gradle.internal.metaobject.DynamicObject in project gradle by gradle.

the class AsmBackedClassGeneratorTest method addsSetterMethodsForPropertyWhoseTypeIsProperty.

@Test
public void addsSetterMethodsForPropertyWhoseTypeIsProperty() throws Exception {
    DefaultProviderFactory providerFactory = new DefaultProviderFactory();
    BeanWithProperty bean = generator.newInstance(BeanWithProperty.class, TestUtil.objectFactory());
    DynamicObject dynamicObject = ((DynamicObjectAware) bean).getAsDynamicObject();
    dynamicObject.setProperty("prop", "value");
    assertEquals("value", bean.getProp().get());
    dynamicObject.setProperty("prop", providerFactory.provider(new Callable<String>() {

        int count;

        @Override
        public String call() throws Exception {
            return "[" + String.valueOf(++count) + "]";
        }
    }));
    assertEquals("[1]", bean.getProp().get());
    assertEquals("[2]", bean.getProp().get());
}
Also used : BeanDynamicObject(org.gradle.internal.metaobject.BeanDynamicObject) DynamicObject(org.gradle.internal.metaobject.DynamicObject) DefaultProviderFactory(org.gradle.api.internal.provider.DefaultProviderFactory) Callable(java.util.concurrent.Callable) Test(org.junit.Test)

Example 32 with DynamicObject

use of org.gradle.internal.metaobject.DynamicObject in project gradle by gradle.

the class AsmBackedClassGeneratorTest method addsSetterMethodsForPropertyWhoseTypeIsPropertyAndCapitalizedProperly.

@Test
public void addsSetterMethodsForPropertyWhoseTypeIsPropertyAndCapitalizedProperly() throws Exception {
    DefaultProviderFactory providerFactory = new DefaultProviderFactory();
    BeanWithProperty bean = newInstance(BeanWithProperty.class, TestUtil.objectFactory());
    DynamicObject dynamicObject = ((DynamicObjectAware) bean).getAsDynamicObject();
    dynamicObject.setProperty("aProp", "value");
    assertEquals("value", bean.getaProp().get());
    dynamicObject.setProperty("aProp", providerFactory.provider(new Callable<String>() {

        int count;

        @Override
        public String call() {
            return "[" + ++count + "]";
        }
    }));
    assertEquals("[1]", bean.getaProp().get());
    assertEquals("[2]", bean.getaProp().get());
}
Also used : BeanDynamicObject(org.gradle.internal.metaobject.BeanDynamicObject) DynamicObject(org.gradle.internal.metaobject.DynamicObject) ExtensibleDynamicObject(org.gradle.internal.extensibility.ExtensibleDynamicObject) DefaultProviderFactory(org.gradle.api.internal.provider.DefaultProviderFactory) DynamicObjectAware(org.gradle.api.internal.DynamicObjectAware) Callable(java.util.concurrent.Callable) Test(org.junit.Test)

Example 33 with DynamicObject

use of org.gradle.internal.metaobject.DynamicObject in project gradle by gradle.

the class AsmBackedClassGeneratorTest method addsSetterMethodsForPropertyWhoseTypeIsProperty.

@Test
public void addsSetterMethodsForPropertyWhoseTypeIsProperty() throws Exception {
    DefaultProviderFactory providerFactory = new DefaultProviderFactory();
    BeanWithProperty bean = newInstance(BeanWithProperty.class, TestUtil.objectFactory());
    DynamicObject dynamicObject = ((DynamicObjectAware) bean).getAsDynamicObject();
    dynamicObject.setProperty("prop", "value");
    assertEquals("value", bean.getProp().get());
    dynamicObject.setProperty("prop", providerFactory.provider(new Callable<String>() {

        int count;

        @Override
        public String call() {
            return "[" + ++count + "]";
        }
    }));
    assertEquals("[1]", bean.getProp().get());
    assertEquals("[2]", bean.getProp().get());
}
Also used : BeanDynamicObject(org.gradle.internal.metaobject.BeanDynamicObject) DynamicObject(org.gradle.internal.metaobject.DynamicObject) ExtensibleDynamicObject(org.gradle.internal.extensibility.ExtensibleDynamicObject) DefaultProviderFactory(org.gradle.api.internal.provider.DefaultProviderFactory) DynamicObjectAware(org.gradle.api.internal.DynamicObjectAware) Callable(java.util.concurrent.Callable) Test(org.junit.Test)

Example 34 with DynamicObject

use of org.gradle.internal.metaobject.DynamicObject in project gradle by gradle.

the class ConfigureUtil method configureByMap.

public static <T> T configureByMap(Map<?, ?> properties, T delegate) {
    if (properties.isEmpty()) {
        return delegate;
    }
    DynamicObject dynamicObject = DynamicObjectUtil.asDynamicObject(delegate);
    for (Map.Entry<?, ?> entry : properties.entrySet()) {
        String name = entry.getKey().toString();
        Object value = entry.getValue();
        DynamicInvokeResult result = dynamicObject.trySetProperty(name, value);
        if (result.isFound()) {
            continue;
        }
        result = dynamicObject.tryInvokeMethod(name, value);
        if (!result.isFound()) {
            throw dynamicObject.setMissingProperty(name);
        }
    }
    return delegate;
}
Also used : DynamicObject(org.gradle.internal.metaobject.DynamicObject) DynamicInvokeResult(org.gradle.internal.metaobject.DynamicInvokeResult) DynamicObject(org.gradle.internal.metaobject.DynamicObject) Map(java.util.Map)

Example 35 with DynamicObject

use of org.gradle.internal.metaobject.DynamicObject in project gradle by gradle.

the class ExtensibleDynamicObjectTest method conventionMethodsAreInherited.

@Test
public void conventionMethodsAreInherited() {
    Bean bean = new Bean();
    Convention convention = bean.extensibleDynamicObject.getConvention();
    convention.getPlugins().put("convention", new ConventionBean());
    DynamicObject inherited = bean.getInheritable();
    assertTrue(inherited.hasMethod("conventionMethod", "a", "b"));
    assertThat(inherited.invokeMethod("conventionMethod", "a", "b"), equalTo((Object) "convention:a.b"));
}
Also used : Convention(org.gradle.api.plugins.Convention) BeanDynamicObject(org.gradle.internal.metaobject.BeanDynamicObject) DynamicObject(org.gradle.internal.metaobject.DynamicObject) BeanDynamicObject(org.gradle.internal.metaobject.BeanDynamicObject) DynamicObject(org.gradle.internal.metaobject.DynamicObject) Test(org.junit.Test)

Aggregations

DynamicObject (org.gradle.internal.metaobject.DynamicObject)45 BeanDynamicObject (org.gradle.internal.metaobject.BeanDynamicObject)40 Test (org.junit.Test)37 Convention (org.gradle.api.plugins.Convention)10 Callable (java.util.concurrent.Callable)5 DynamicObjectAware (org.gradle.api.internal.DynamicObjectAware)5 DefaultProviderFactory (org.gradle.api.internal.provider.DefaultProviderFactory)5 ExtensibleDynamicObject (org.gradle.internal.extensibility.ExtensibleDynamicObject)4 Closure (groovy.lang.Closure)3 MissingPropertyException (groovy.lang.MissingPropertyException)3 MissingMethodException (groovy.lang.MissingMethodException)2 File (java.io.File)2 Map (java.util.Map)2 ClassLoaderScope (org.gradle.api.internal.initialization.ClassLoaderScope)2 DynamicInvokeResult (org.gradle.internal.metaobject.DynamicInvokeResult)2 Predicate (com.google.common.base.Predicate)1 DirectoryTree (org.gradle.api.file.DirectoryTree)1 ExtensibleDynamicObject (org.gradle.api.internal.ExtensibleDynamicObject)1 ScriptHandlerInternal (org.gradle.api.internal.initialization.ScriptHandlerInternal)1