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());
}
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());
}
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());
}
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;
}
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"));
}
Aggregations