public TypeMirror createWithTypeArguments(Class<?> clazz, TypeMirror... typeArguments) { return createWithTypeArguments(clazz.getCanonicalName(), typeArguments); }
private void validateCustomProviderConstructor(LogBuilder errorBuilder, DeclaredType type) { TypeMirror expectedParameterMirror = utils.createWithTypeArguments( getBundleDetails() != null || isCodeSplit() ? AsyncProvider.class : Provider.class, getPresenterMirror()); List<ExecutableElement> constructors = constructorsIn(asTypeElement(type).getEnclosedElements()); for (ExecutableElement constructor : constructors) { List<? extends VariableElement> parameters = constructor.getParameters(); if (hasModifiers(PUBLIC).apply(constructor) && parameters.size() == 1 && utils.getTypes().isAssignable(expectedParameterMirror, parameters.get(0).asType())) { return; } } errorBuilder.log("Class passed to @CustomProvider must have a public constructor with a single parameter of " + "type `%s`.", new Type(expectedParameterMirror).getParameterizedName()); throw new UnableToProcessException(); }
private void validateCustomProviderType(LogBuilder errorBuilder, DeclaredType type) { TypeElement customProviderElement = asTypeElement(type); TypeMirror expectedSuperType = utils.createWithTypeArguments(IndirectProvider.class, getPresenterMirror()); if (customProviderElement.getKind() != CLASS || !hasModifiers(PUBLIC).apply(customProviderElement) || hasModifiers(ABSTRACT).apply(customProviderElement) || !utils.getTypes().isSubtype(type, expectedSuperType)) { errorBuilder.log("Element passed to @CustomProvider must be a public, non-abstract class " + "and implement `%s`.", new Type(expectedSuperType).getParameterizedName()); throw new UnableToProcessException(); } }