use of javax.lang.model.util.Types in project neo4j by neo4j.
the class ProcedureProcessor method init.
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
Types typeUtils = processingEnv.getTypeUtils();
Elements elementUtils = processingEnv.getElementUtils();
visitedProcedures.clear();
messagePrinter = new MessagePrinter(processingEnv.getMessager());
visitor = new StoredProcedureVisitor(typeUtils, elementUtils, processingEnv.getOptions().containsKey(IGNORE_CONTEXT_WARNINGS));
duplicationPredicate = new DuplicatedProcedureValidator<>(elementUtils, sprocType, ProcedureProcessor::getCustomName);
}
use of javax.lang.model.util.Types in project neo4j by neo4j.
the class UserFunctionProcessor method init.
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
Types typeUtils = processingEnv.getTypeUtils();
Elements elementUtils = processingEnv.getElementUtils();
visitedFunctions.clear();
messagePrinter = new MessagePrinter(processingEnv.getMessager());
visitor = new UserFunctionVisitor(typeUtils, elementUtils, new TypeMirrorUtils(typeUtils, elementUtils));
duplicationPredicate = new DuplicatedProcedureValidator<>(elementUtils, userFunctionType, UserFunctionProcessor::getCustomName);
}
use of javax.lang.model.util.Types in project intellij-community by JetBrains.
the class Javac8RefScanner method visitLambdaExpression.
@Override
public Tree visitLambdaExpression(LambdaExpressionTree node, JavacReferenceCollectorListener.ReferenceCollector refCollector) {
final TypeMirror type = refCollector.getType(node);
Types types = refCollector.getTypeUtility();
if (types != null) {
final Element element = types.asElement(type);
if (element != null) {
final JavacRef.JavacElementRefBase ref = refCollector.asJavacRef(element);
if (ref != null) {
refCollector.sinkDeclaration(new JavacDef.JavacFunExprDef(ref));
}
}
}
return super.visitLambdaExpression(node, refCollector);
}
use of javax.lang.model.util.Types in project react4j by react4j.
the class ReactProcessor method determineStateValues.
private void determineStateValues(@Nonnull final ComponentDescriptor descriptor) {
final List<ExecutableElement> methods = ProcessorUtil.getMethods(descriptor.getElement(), processingEnv.getTypeUtils()).stream().filter(m -> null != ProcessorUtil.findAnnotationByType(m, Constants.STATE_ANNOTATION_CLASSNAME)).collect(Collectors.toList());
final Map<String, StateValueDescriptor> values = new HashMap<>();
for (final ExecutableElement method : methods) {
final ExecutableType methodType = (ExecutableType) processingEnv.getTypeUtils().asMemberOf(descriptor.getDeclaredType(), method);
parseStateValueMethod(method, methodType, values);
}
final ArrayList<StateValueDescriptor> stateValues = new ArrayList<>(values.values());
descriptor.setStateValues(stateValues);
linkStateMethods(descriptor);
for (final StateValueDescriptor stateValue : stateValues) {
if (!stateValue.hasGetter()) {
throw new ReactProcessorException("@State target defined setter but no getter was defined and no " + "getter could be automatically determined", stateValue.getSetter());
} else if (!stateValue.hasSetter()) {
throw new ReactProcessorException("@State target defined getter but no setter was defined and no " + "setter could be automatically determined", stateValue.getGetter());
}
}
for (final StateValueDescriptor stateValue : stateValues) {
final TypeMirror returnType = stateValue.getGetterType().getReturnType();
final TypeMirror parameterType = stateValue.getSetterType().getParameterTypes().get(0);
if (!processingEnv.getTypeUtils().isSameType(parameterType, returnType)) {
throw new ReactProcessorException("@State property defines a setter and getter with different types." + " Getter type: " + returnType + " Setter type: " + parameterType + ".", stateValue.getGetter());
}
}
}
use of javax.lang.model.util.Types in project react4j by react4j.
the class ReactProcessor method determineDefaultPropsMethods.
private void determineDefaultPropsMethods(@Nonnull final ComponentDescriptor descriptor) {
final Types typeUtils = processingEnv.getTypeUtils();
final List<ExecutableElement> defaultPropsMethods = ProcessorUtil.getMethods(descriptor.getElement(), typeUtils).stream().filter(m -> null != ProcessorUtil.findAnnotationByType(m, Constants.PROP_DEFAULT_ANNOTATION_CLASSNAME)).collect(Collectors.toList());
for (final ExecutableElement method : defaultPropsMethods) {
final String name = derivePropDefaultName(method);
final PropDescriptor prop = descriptor.findPropNamed(name);
if (null == prop) {
throw new ReactProcessorException("@PropDefault target for prop named '" + name + "' has no corresponding " + "@Prop annotated method.", method);
}
final ExecutableType methodType = (ExecutableType) typeUtils.asMemberOf(descriptor.getDeclaredType(), method);
if (!processingEnv.getTypeUtils().isAssignable(methodType.getReturnType(), prop.getMethodType().getReturnType())) {
throw new ReactProcessorException("@PropDefault target has a return type that is not assignable to the " + "return type of the associated @Prop annotated method.", method);
}
prop.setDefaultMethod(method);
}
}
Aggregations