use of javax.lang.model.util.Types in project auto by google.
the class MoreTypesTest method testAsMemberOf_variableElement.
@Test
public void testAsMemberOf_variableElement() {
Types types = compilationRule.getTypes();
Elements elements = compilationRule.getElements();
TypeMirror numberType = elements.getTypeElement(Number.class.getCanonicalName()).asType();
TypeMirror stringType = elements.getTypeElement(String.class.getCanonicalName()).asType();
TypeMirror integerType = elements.getTypeElement(Integer.class.getCanonicalName()).asType();
TypeElement paramsElement = elements.getTypeElement(Params.class.getCanonicalName());
VariableElement tParam = Iterables.getOnlyElement(Iterables.getOnlyElement(ElementFilter.methodsIn(paramsElement.getEnclosedElements())).getParameters());
VariableElement tField = Iterables.getOnlyElement(ElementFilter.fieldsIn(paramsElement.getEnclosedElements()));
DeclaredType numberParams = (DeclaredType) elements.getTypeElement(NumberParams.class.getCanonicalName()).asType();
DeclaredType stringParams = (DeclaredType) elements.getTypeElement(StringParams.class.getCanonicalName()).asType();
TypeElement genericParams = elements.getTypeElement(GenericParams.class.getCanonicalName());
DeclaredType genericParamsOfNumber = types.getDeclaredType(genericParams, numberType);
DeclaredType genericParamsOfInteger = types.getDeclaredType(genericParams, integerType);
TypeMirror fieldOfNumberParams = MoreTypes.asMemberOf(types, numberParams, tField);
TypeMirror paramOfNumberParams = MoreTypes.asMemberOf(types, numberParams, tParam);
TypeMirror fieldOfStringParams = MoreTypes.asMemberOf(types, stringParams, tField);
TypeMirror paramOfStringParams = MoreTypes.asMemberOf(types, stringParams, tParam);
TypeMirror fieldOfGenericOfNumber = MoreTypes.asMemberOf(types, genericParamsOfNumber, tField);
TypeMirror paramOfGenericOfNumber = MoreTypes.asMemberOf(types, genericParamsOfNumber, tParam);
TypeMirror fieldOfGenericOfInteger = MoreTypes.asMemberOf(types, genericParamsOfInteger, tField);
TypeMirror paramOfGenericOfInteger = MoreTypes.asMemberOf(types, genericParamsOfInteger, tParam);
EquivalenceTester<TypeMirror> tester = EquivalenceTester.<TypeMirror>of(MoreTypes.equivalence()).addEquivalenceGroup(fieldOfNumberParams, paramOfNumberParams, fieldOfGenericOfNumber, paramOfGenericOfNumber, numberType).addEquivalenceGroup(fieldOfStringParams, paramOfStringParams, stringType).addEquivalenceGroup(fieldOfGenericOfInteger, paramOfGenericOfInteger, integerType);
tester.test();
}
use of javax.lang.model.util.Types in project auto by google.
the class FactoryDescriptorGenerator method generateDescriptorForConstructor.
FactoryMethodDescriptor generateDescriptorForConstructor(final AutoFactoryDeclaration declaration, ExecutableElement constructor) {
checkNotNull(constructor);
checkArgument(constructor.getKind() == ElementKind.CONSTRUCTOR);
TypeElement classElement = MoreElements.asType(constructor.getEnclosingElement());
Map<Boolean, List<VariableElement>> parameterMap = constructor.getParameters().stream().collect(partitioningBy(parameter -> isAnnotationPresent(parameter, Provided.class)));
// The map returned by partitioningBy always has entries for both key values but our
// null-checker isn't yet smart enough to know that.
ImmutableSet<Parameter> providedParameters = Parameter.forParameterList(requireNonNull(parameterMap.get(true)), types);
ImmutableSet<Parameter> passedParameters = Parameter.forParameterList(requireNonNull(parameterMap.get(false)), types);
return FactoryMethodDescriptor.builder(declaration).name("create").returnType(classElement.asType()).publicMethod(classElement.getModifiers().contains(PUBLIC)).providedParameters(providedParameters).passedParameters(passedParameters).creationParameters(Parameter.forParameterList(constructor.getParameters(), types)).isVarArgs(constructor.isVarArgs()).exceptions(constructor.getThrownTypes()).overridingMethod(false).build();
}
use of javax.lang.model.util.Types in project CoreData by FangCloud-Android.
the class Utils method getProperties.
public static List<Property> getProperties(ProcessingEnvironment env, List<Element> elements, Element primaryKey) {
Elements elementUtils = env.getElementUtils();
Types typeUtils = env.getTypeUtils();
List<Property> propertyList = new ArrayList<>();
for (Element element : elements) {
String columnName = Utils.getColumnName(element);
TypeName dbBaseType;
TypeMirror typeMirror = element.asType();
TypeName typeNameElement = ClassName.get(typeMirror);
if (Utils.isBaseType(typeNameElement)) {
dbBaseType = typeNameElement;
} else {
TypeElement elementFieldType = (TypeElement) typeUtils.asElement(typeMirror);
Relation annotationRelation = element.getAnnotation(Relation.class);
if (annotationRelation != null) {
// 关联数据
Entity relationEntity = elementFieldType.getAnnotation(Entity.class);
if (relationEntity == null) {
throw new IllegalStateException("@Relation 添加的属性必须是 @Entity 的类");
}
EntityDetail relationEntityDetail = EntityDetail.parse(env, elementFieldType);
Element relationEntityPrimaryKey = relationEntityDetail.getPrimaryKey();
if (relationEntityPrimaryKey == null) {
throw new IllegalStateException(relationEntityDetail.getEntityName() + "是关联类型,@Relation 属性必须有主键");
}
dbBaseType = ClassName.get(relationEntityPrimaryKey.asType());
} else {
Embedded embedded = element.getAnnotation(Embedded.class);
if (embedded != null) {
// 内嵌数据, 循环解析内嵌结构的字段
List<Element> embeddedEleList = new ArrayList<>();
fillElementsForDbAndReturnPrimaryKey(env, embeddedEleList, (TypeElement) typeUtils.asElement(typeMirror));
propertyList.addAll(getProperties(env, embeddedEleList, null));
continue;
} else {
Convert convert = element.getAnnotation(Convert.class);
if (convert != null) {
TypeName classConvertDb = Utils.getConvertDbType(convert);
if (Utils.isBaseType(classConvertDb)) {
dbBaseType = classConvertDb;
} else {
throw new IllegalStateException(element.getSimpleName() + "converter dbtype is not a base type");
}
} else {
throw new IllegalStateException(element.getSimpleName() + " is a complex structure field," + "must indicate it as @Relation or @Embedded, " + "or supply a @Convert for it");
}
}
}
}
propertyList.add(new Property(columnName, Utils.getTypeByTypeName(dbBaseType), element == primaryKey));
}
return propertyList;
}
use of javax.lang.model.util.Types in project qpid-broker-j by apache.
the class AttributeFieldValidation method process.
@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
Elements elementUtils = processingEnv.getElementUtils();
Types typeUtils = processingEnv.getTypeUtils();
TypeElement annotationElement = elementUtils.getTypeElement(MANAGED_ATTRIBUTE_FIELD_CLASS_NAME);
for (Element e : roundEnv.getElementsAnnotatedWith(annotationElement)) {
for (AnnotationMirror am : e.getAnnotationMirrors()) {
if (typeUtils.isSameType(am.getAnnotationType(), annotationElement.asType())) {
for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : am.getElementValues().entrySet()) {
String elementName = entry.getKey().getSimpleName().toString();
if (elementName.equals("beforeSet") || elementName.equals("afterSet")) {
String methodName = entry.getValue().getValue().toString();
if (!"".equals(methodName)) {
TypeElement parent = (TypeElement) e.getEnclosingElement();
if (!containsMethod(parent, methodName)) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Could not find method '" + methodName + "' which is defined as the " + elementName + " action", e);
}
}
}
}
}
}
}
return false;
}
use of javax.lang.model.util.Types in project qpid-broker-j by apache.
the class ManagedAnnotationValidator method getErasure.
private TypeMirror getErasure(final String className) {
final Types typeUtils = processingEnv.getTypeUtils();
final Elements elementUtils = processingEnv.getElementUtils();
return typeUtils.erasure(elementUtils.getTypeElement(className).asType());
}
Aggregations