Search in sources :

Example 1 with InvalidModelRuleDeclarationException

use of org.gradle.model.InvalidModelRuleDeclarationException in project gradle by gradle.

the class TransformedModelDslBacking method create.

/**
     * Invoked by transformed DSL creation rules
     */
public <T> void create(String modelPathString, Class<T> type, Closure<?> closure) {
    ModelPath modelPath = ModelPath.path(modelPathString);
    DeferredModelAction modelAction = ruleFactory.toAction(type, closure);
    ModelRuleDescriptor descriptor = modelAction.getDescriptor();
    ModelType<T> modelType = ModelType.of(type);
    try {
        NodeInitializerRegistry nodeInitializerRegistry = modelRegistry.realize(DEFAULT_REFERENCE.getPath(), DEFAULT_REFERENCE.getType());
        NodeInitializer nodeInitializer = nodeInitializerRegistry.getNodeInitializer(forType(modelType));
        modelRegistry.register(ModelRegistrations.of(modelPath, nodeInitializer).descriptor(descriptor).build());
    } catch (ModelTypeInitializationException e) {
        throw new InvalidModelRuleDeclarationException(descriptor, e);
    }
    registerAction(modelPath, modelType, ModelActionRole.Initialize, modelAction);
}
Also used : InvalidModelRuleDeclarationException(org.gradle.model.InvalidModelRuleDeclarationException) ModelRuleDescriptor(org.gradle.model.internal.core.rule.describe.ModelRuleDescriptor)

Example 2 with InvalidModelRuleDeclarationException

use of org.gradle.model.InvalidModelRuleDeclarationException in project gradle by gradle.

the class ModelRuleExtractor method doExtract.

private <T> CachedRuleSource doExtract(final Class<T> source) {
    final ModelType<T> type = ModelType.of(source);
    FormattingValidationProblemCollector problems = new FormattingValidationProblemCollector("rule source", type);
    DefaultMethodModelRuleExtractionContext context = new DefaultMethodModelRuleExtractionContext(this, problems);
    // TODO - exceptions thrown here should point to some extensive documentation on the concept of class rule sources
    StructSchema<T> schema = getSchema(source, context);
    if (schema == null) {
        throw new InvalidModelRuleDeclarationException(problems.format());
    }
    // sort for determinism
    Set<Method> methods = new TreeSet<Method>(Ordering.usingToString());
    methods.addAll(Arrays.asList(source.getDeclaredMethods()));
    ImmutableList.Builder<ModelProperty<?>> implicitInputs = ImmutableList.builder();
    ModelProperty<?> target = null;
    for (ModelProperty<?> property : schema.getProperties()) {
        if (property.isAnnotationPresent(RuleTarget.class)) {
            target = property;
        } else if (property.isAnnotationPresent(RuleInput.class) && !(property.getSchema() instanceof ScalarValueSchema)) {
            implicitInputs.add(property);
        }
        for (WeaklyTypeReferencingMethod<?, ?> method : property.getAccessors()) {
            methods.remove(method.getMethod());
        }
    }
    ImmutableList.Builder<ExtractedRuleDetails> rules = ImmutableList.builder();
    for (Method method : methods) {
        MethodRuleDefinition<?, ?> ruleDefinition = DefaultMethodRuleDefinition.create(source, method);
        ExtractedModelRule rule = getMethodHandler(ruleDefinition, method, context);
        if (rule != null) {
            rules.add(new ExtractedRuleDetails(ruleDefinition, rule));
        }
    }
    if (context.hasProblems()) {
        throw new InvalidModelRuleDeclarationException(problems.format());
    }
    StructBindings<T> bindings = structBindingsStore.getBindings(schema.getType());
    if (schema.getProperties().isEmpty()) {
        return new StatelessRuleSource(rules.build(), Modifier.isAbstract(source.getModifiers()) ? new AbstractRuleSourceFactory<T>(schema, bindings, proxyFactory) : new ConcreteRuleSourceFactory<T>(type));
    } else {
        return new ParameterizedRuleSource(rules.build(), target, implicitInputs.build(), schema, bindings, proxyFactory);
    }
}
Also used : ImmutableList(com.google.common.collect.ImmutableList) Method(java.lang.reflect.Method) WeaklyTypeReferencingMethod(org.gradle.model.internal.method.WeaklyTypeReferencingMethod) TreeSet(java.util.TreeSet) ModelProperty(org.gradle.model.internal.manage.schema.ModelProperty) ScalarValueSchema(org.gradle.model.internal.manage.schema.ScalarValueSchema) InvalidModelRuleDeclarationException(org.gradle.model.InvalidModelRuleDeclarationException)

Aggregations

InvalidModelRuleDeclarationException (org.gradle.model.InvalidModelRuleDeclarationException)2 ImmutableList (com.google.common.collect.ImmutableList)1 Method (java.lang.reflect.Method)1 TreeSet (java.util.TreeSet)1 ModelRuleDescriptor (org.gradle.model.internal.core.rule.describe.ModelRuleDescriptor)1 ModelProperty (org.gradle.model.internal.manage.schema.ModelProperty)1 ScalarValueSchema (org.gradle.model.internal.manage.schema.ScalarValueSchema)1 WeaklyTypeReferencingMethod (org.gradle.model.internal.method.WeaklyTypeReferencingMethod)1