Search in sources :

Example 26 with TreeFormatter

use of org.gradle.internal.logging.text.TreeFormatter in project gradle by gradle.

the class AbstractClassGenerator method assertNotAbstract.

private void assertNotAbstract(Class<?> type, Method method) {
    if (Modifier.isAbstract(type.getModifiers()) && Modifier.isAbstract(method.getModifiers())) {
        TreeFormatter formatter = new TreeFormatter();
        formatter.node("Cannot have abstract method ");
        formatter.appendMethod(method);
        formatter.append(".");
        throw new IllegalArgumentException(formatter.toString());
    }
// Else, ignore abstract methods on non-abstract classes as some other tooling (e.g. the Groovy compiler) has decided this is ok
}
Also used : TreeFormatter(org.gradle.internal.logging.text.TreeFormatter)

Example 27 with TreeFormatter

use of org.gradle.internal.logging.text.TreeFormatter in project gradle by gradle.

the class AsmBackedClassGenerator method start.

@Override
protected ClassInspectionVisitor start(Class<?> type) {
    if (type.isAnnotation() || type.isEnum()) {
        TreeFormatter formatter = new TreeFormatter();
        formatter.node(type);
        formatter.append(" is not a class or interface.");
        throw new ClassGenerationException(formatter.toString());
    }
    return new ClassInspectionVisitorImpl(type, decorate, suffix, factoryId);
}
Also used : TreeFormatter(org.gradle.internal.logging.text.TreeFormatter) ClassGenerationException(org.gradle.internal.instantiation.ClassGenerationException)

Example 28 with TreeFormatter

use of org.gradle.internal.logging.text.TreeFormatter in project gradle by gradle.

the class DependencyInjectingInstantiator method nullPrimitiveType.

private void nullPrimitiveType(int index, Class<?> paramType) {
    TreeFormatter formatter = new TreeFormatter();
    formatter.node("Unable to determine constructor argument #" + (index + 1) + ": null value is not assignable to type ");
    formatter.appendType(paramType);
    formatter.append(".");
    throw new IllegalArgumentException(formatter.toString());
}
Also used : TreeFormatter(org.gradle.internal.logging.text.TreeFormatter)

Example 29 with TreeFormatter

use of org.gradle.internal.logging.text.TreeFormatter in project gradle by gradle.

the class DependencyInjectingInstantiator method verifyParameters.

private Object[] verifyParameters(ClassGenerator.GeneratedConstructor<?> constructor, Object[] parameters) {
    Class<?>[] parameterTypes = constructor.getParameterTypes();
    for (int i = 0; i < parameterTypes.length; i++) {
        Class<?> targetType = parameterTypes[i];
        Object currentParameter = parameters[i];
        if (targetType.isPrimitive()) {
            if (currentParameter == null) {
                nullPrimitiveType(i, targetType);
            }
            targetType = JavaReflectionUtil.getWrapperTypeForPrimitiveType(targetType);
        } else if (currentParameter == null) {
            // Null is ok if the ConstructorSelector says it's ok
            continue;
        }
        if (!targetType.isInstance(currentParameter)) {
            TreeFormatter formatter = new TreeFormatter();
            formatter.node("Unable to determine constructor argument #" + (i + 1) + ": value ");
            formatter.appendValue(currentParameter);
            formatter.append(" not assignable to type ");
            formatter.appendType(parameterTypes[i]);
            formatter.append(".");
            throw new IllegalArgumentException(formatter.toString());
        }
    }
    return parameters;
}
Also used : TreeFormatter(org.gradle.internal.logging.text.TreeFormatter)

Example 30 with TreeFormatter

use of org.gradle.internal.logging.text.TreeFormatter in project gradle by gradle.

the class DependencyInjectingInstantiator method addServicesToParameters.

private Object[] addServicesToParameters(Class<?> type, ClassGenerator.GeneratedConstructor<?> constructor, ServiceLookup services, Object[] parameters) {
    Class<?>[] parameterTypes = constructor.getParameterTypes();
    Type[] genericTypes = constructor.getGenericParameterTypes();
    Object[] resolvedParameters = new Object[parameterTypes.length];
    int pos = 0;
    for (int i = 0; i < resolvedParameters.length; i++) {
        Class<?> targetType = parameterTypes[i];
        Type serviceType = genericTypes[i];
        if (pos < parameters.length) {
            Object parameter = parameters[pos];
            if (targetType.isPrimitive()) {
                if (parameter == null) {
                    nullPrimitiveType(i, targetType);
                }
                targetType = JavaReflectionUtil.getWrapperTypeForPrimitiveType(targetType);
            }
            if (parameter == null || targetType.isInstance(parameter)) {
                resolvedParameters[i] = parameter;
                pos++;
                continue;
            }
        }
        Object service = services.find(serviceType);
        if (service != null) {
            resolvedParameters[i] = service;
            continue;
        }
        TreeFormatter formatter = new TreeFormatter();
        formatter.node("Unable to determine constructor argument #" + (i + 1) + ": ");
        if (pos < parameters.length) {
            formatter.append("value ");
            formatter.appendValue(parameters[pos]);
            formatter.append(" is not assignable to type ");
            formatter.appendType(parameterTypes[i]);
        } else {
            formatter.append("missing parameter of type ");
            formatter.appendType(parameterTypes[i]);
        }
        formatter.append(", or no service of type ");
        formatter.appendType(serviceType);
        formatter.append(".");
        throw new IllegalArgumentException(formatter.toString());
    }
    if (pos != parameters.length) {
        TreeFormatter formatter = new TreeFormatter();
        formatter.node("Unexpected parameter provided for constructor for ");
        formatter.appendType(type);
        throw new IllegalArgumentException(formatter.toString());
    }
    return resolvedParameters;
}
Also used : Type(java.lang.reflect.Type) TreeFormatter(org.gradle.internal.logging.text.TreeFormatter)

Aggregations

TreeFormatter (org.gradle.internal.logging.text.TreeFormatter)46 ImmutableList (com.google.common.collect.ImmutableList)3 ArrayList (java.util.ArrayList)3 List (java.util.List)3 Nullable (javax.annotation.Nullable)3 GradleException (org.gradle.api.GradleException)3 VariantTransformConfigurationException (org.gradle.api.artifacts.transform.VariantTransformConfigurationException)3 ResolvedVariant (org.gradle.api.internal.artifacts.ivyservice.resolveengine.artifact.ResolvedVariant)3 Lists (com.google.common.collect.Lists)2 File (java.io.File)2 Map (java.util.Map)2 TreeMap (java.util.TreeMap)2 Collectors (java.util.stream.Collectors)2 Inject (javax.inject.Inject)2 InvalidUserDataException (org.gradle.api.InvalidUserDataException)2 ArtifactTransformRegistration (org.gradle.api.internal.artifacts.ArtifactTransformRegistration)2 ConfigurationMetadata (org.gradle.internal.component.model.ConfigurationMetadata)2 ClassGenerationException (org.gradle.internal.instantiation.ClassGenerationException)2 Solution (org.gradle.problems.Solution)2 ImmutableMap (com.google.common.collect.ImmutableMap)1