Search in sources :

Example 56 with Types

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);
}
Also used : Types(javax.lang.model.util.Types) MessagePrinter(org.neo4j.tooling.procedure.messages.MessagePrinter) StoredProcedureVisitor(org.neo4j.tooling.procedure.visitors.StoredProcedureVisitor) Elements(javax.lang.model.util.Elements)

Example 57 with Types

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);
}
Also used : Types(javax.lang.model.util.Types) UserFunctionVisitor(org.neo4j.tooling.procedure.visitors.UserFunctionVisitor) MessagePrinter(org.neo4j.tooling.procedure.messages.MessagePrinter) Elements(javax.lang.model.util.Elements) TypeMirrorUtils(org.neo4j.tooling.procedure.compilerutils.TypeMirrorUtils)

Example 58 with Types

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);
}
Also used : JavacDef(org.jetbrains.jps.javac.ast.api.JavacDef) Types(javax.lang.model.util.Types) TypeMirror(javax.lang.model.type.TypeMirror) JavacRef(org.jetbrains.jps.javac.ast.api.JavacRef) Element(javax.lang.model.element.Element)

Example 59 with Types

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());
        }
    }
}
Also used : Arrays(java.util.Arrays) PackageElement(javax.lang.model.element.PackageElement) AbstractProcessor(javax.annotation.processing.AbstractProcessor) Modifier(javax.lang.model.element.Modifier) VariableElement(javax.lang.model.element.VariableElement) HashMap(java.util.HashMap) TypeElement(javax.lang.model.element.TypeElement) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) Elements(javax.lang.model.util.Elements) ArrayList(java.util.ArrayList) SupportedSourceVersion(javax.annotation.processing.SupportedSourceVersion) Kind(javax.tools.Diagnostic.Kind) Map(java.util.Map) DeclaredType(javax.lang.model.type.DeclaredType) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) PrintWriter(java.io.PrintWriter) ElementKind(javax.lang.model.element.ElementKind) ExecutableType(javax.lang.model.type.ExecutableType) StringWriter(java.io.StringWriter) Collection(java.util.Collection) ExecutableElement(javax.lang.model.element.ExecutableElement) Set(java.util.Set) IOException(java.io.IOException) Element(javax.lang.model.element.Element) TypeSpec(com.squareup.javapoet.TypeSpec) Processor(javax.annotation.processing.Processor) Types(javax.lang.model.util.Types) Collectors(java.util.stream.Collectors) AnnotationMirror(javax.lang.model.element.AnnotationMirror) TypeKind(javax.lang.model.type.TypeKind) JavaFile(com.squareup.javapoet.JavaFile) SourceVersion(javax.lang.model.SourceVersion) List(java.util.List) TypeMirror(javax.lang.model.type.TypeMirror) RoundEnvironment(javax.annotation.processing.RoundEnvironment) AutoService(com.google.auto.service.AutoService) ExecutableType(javax.lang.model.type.ExecutableType) HashMap(java.util.HashMap) TypeMirror(javax.lang.model.type.TypeMirror) ExecutableElement(javax.lang.model.element.ExecutableElement) ArrayList(java.util.ArrayList)

Example 60 with Types

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);
    }
}
Also used : Arrays(java.util.Arrays) PackageElement(javax.lang.model.element.PackageElement) AbstractProcessor(javax.annotation.processing.AbstractProcessor) Modifier(javax.lang.model.element.Modifier) VariableElement(javax.lang.model.element.VariableElement) HashMap(java.util.HashMap) TypeElement(javax.lang.model.element.TypeElement) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) Elements(javax.lang.model.util.Elements) ArrayList(java.util.ArrayList) SupportedSourceVersion(javax.annotation.processing.SupportedSourceVersion) Kind(javax.tools.Diagnostic.Kind) Map(java.util.Map) DeclaredType(javax.lang.model.type.DeclaredType) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) PrintWriter(java.io.PrintWriter) ElementKind(javax.lang.model.element.ElementKind) ExecutableType(javax.lang.model.type.ExecutableType) StringWriter(java.io.StringWriter) Collection(java.util.Collection) ExecutableElement(javax.lang.model.element.ExecutableElement) Set(java.util.Set) IOException(java.io.IOException) Element(javax.lang.model.element.Element) TypeSpec(com.squareup.javapoet.TypeSpec) Processor(javax.annotation.processing.Processor) Types(javax.lang.model.util.Types) Collectors(java.util.stream.Collectors) AnnotationMirror(javax.lang.model.element.AnnotationMirror) TypeKind(javax.lang.model.type.TypeKind) JavaFile(com.squareup.javapoet.JavaFile) SourceVersion(javax.lang.model.SourceVersion) List(java.util.List) TypeMirror(javax.lang.model.type.TypeMirror) RoundEnvironment(javax.annotation.processing.RoundEnvironment) AutoService(com.google.auto.service.AutoService) ExecutableType(javax.lang.model.type.ExecutableType) SupportedAnnotationTypes(javax.annotation.processing.SupportedAnnotationTypes) Types(javax.lang.model.util.Types) ExecutableElement(javax.lang.model.element.ExecutableElement)

Aggregations

Types (javax.lang.model.util.Types)113 TypeMirror (javax.lang.model.type.TypeMirror)77 TypeElement (javax.lang.model.element.TypeElement)52 Elements (javax.lang.model.util.Elements)48 ExecutableElement (javax.lang.model.element.ExecutableElement)34 Element (javax.lang.model.element.Element)30 SupportedAnnotationTypes (javax.annotation.processing.SupportedAnnotationTypes)27 DeclaredType (javax.lang.model.type.DeclaredType)26 ArrayList (java.util.ArrayList)25 Map (java.util.Map)24 VariableElement (javax.lang.model.element.VariableElement)24 List (java.util.List)21 AnnotationMirror (javax.lang.model.element.AnnotationMirror)20 TypeKind (javax.lang.model.type.TypeKind)18 Set (java.util.Set)16 Collection (java.util.Collection)15 HashMap (java.util.HashMap)13 ElementKind (javax.lang.model.element.ElementKind)13 Modifier (javax.lang.model.element.Modifier)13 IOException (java.io.IOException)12