use of javax.lang.model.element.TypeParameterElement in project ig-json-parser by Instagram.
the class TypeUtils method getCollectionParameterizedType.
/**
* If {@code typeMirror} represents a list type ({@link java.util.List}), attempt to divine the
* type of the contents.
*
* Returns null if {@code typeMirror} does not represent a list type or if we cannot divine the
* type of the contents.
*/
public TypeMirror getCollectionParameterizedType(TypeMirror typeMirror) {
if (!(typeMirror instanceof DeclaredType)) {
return null;
}
DeclaredType declaredType = (DeclaredType) typeMirror;
Element element = declaredType.asElement();
if (!(element instanceof TypeElement)) {
return null;
}
TypeElement typeElement = (TypeElement) element;
List<? extends TypeParameterElement> typeParameterElements = typeElement.getTypeParameters();
List<TypeMirror> typeArguments = (List<TypeMirror>) declaredType.getTypeArguments();
if (JAVA_UTIL_QUEUE.equals(getCanonicalTypeName(declaredType)) || JAVA_UTIL_LIST.equals(getCanonicalTypeName(declaredType)) || JAVA_UTIL_ARRAYLIST.equals(getCanonicalTypeName(declaredType)) || JAVA_UTIL_SET.equals(getCanonicalTypeName(declaredType))) {
// sanity check.
if (typeParameterElements.size() != 1) {
throw new IllegalStateException(String.format("%s is not expected generic type", declaredType));
}
return typeArguments.get(0);
} else if (JAVA_UTIL_HASHMAP.equals(getCanonicalTypeName(declaredType))) {
// sanity check.
if (typeParameterElements.size() != 2) {
throw new IllegalStateException(String.format("%s is not expected generic type", declaredType));
}
TypeMirror keyType = typeArguments.get(0);
TypeMirror valueType = typeArguments.get(1);
if (!JAVA_LANG_STRING.equals(keyType.toString())) {
throw new IllegalStateException("Only String keys are supported for map types");
}
return valueType;
}
return null;
}
use of javax.lang.model.element.TypeParameterElement in project androidannotations by androidannotations.
the class APTCodeModelHelper method overrideAnnotatedMethod.
public JMethod overrideAnnotatedMethod(ExecutableElement executableElement, GeneratedClassHolder holder) {
TypeMirror annotatedClass = holder.getAnnotatedElement().asType();
DeclaredType baseClass = (DeclaredType) executableElement.getEnclosingElement().asType();
Types typeUtils = environment.getProcessingEnvironment().getTypeUtils();
Map<String, TypeMirror> actualTypes = getActualTypes(typeUtils, baseClass, annotatedClass);
Map<String, List<AbstractJClass>> methodTypes = new LinkedHashMap<>();
for (TypeParameterElement typeParameter : executableElement.getTypeParameters()) {
List<? extends TypeMirror> bounds = typeParameter.getBounds();
List<AbstractJClass> addedBounds = typeBoundsToJClass(bounds, actualTypes);
methodTypes.put(typeParameter.toString(), addedBounds);
}
actualTypes.keySet().removeAll(methodTypes.keySet());
JMethod existingMethod = findAlreadyGeneratedMethod(executableElement, holder);
if (existingMethod != null) {
return existingMethod;
}
String methodName = executableElement.getSimpleName().toString();
AbstractJClass returnType = typeMirrorToJClass(executableElement.getReturnType(), actualTypes);
int modifier = elementVisibilityModifierToJMod(executableElement);
JMethod method = holder.getGeneratedClass().method(modifier, returnType, methodName);
copyNonAAAnnotations(method, executableElement.getAnnotationMirrors());
if (!hasAnnotation(method, Override.class)) {
method.annotate(Override.class);
}
for (Map.Entry<String, List<AbstractJClass>> typeDeclaration : methodTypes.entrySet()) {
List<AbstractJClass> bounds = typeDeclaration.getValue();
addTypeBounds(method, bounds, typeDeclaration.getKey());
}
int i = 0;
for (VariableElement parameter : executableElement.getParameters()) {
boolean varParam = i == executableElement.getParameters().size() - 1 && executableElement.isVarArgs();
addParamToMethod(method, parameter, JMod.FINAL, actualTypes, varParam);
i++;
}
for (TypeMirror superThrownType : executableElement.getThrownTypes()) {
AbstractJClass thrownType = typeMirrorToJClass(superThrownType, actualTypes);
method._throws(thrownType);
}
callSuperMethod(method, holder, method.body());
return method;
}
use of javax.lang.model.element.TypeParameterElement in project buck by facebook.
the class TreeBackedElements method enterElement.
public TreeBackedElement enterElement(Element underlyingElement) {
TreeBackedElement result = treeBackedElements.get(underlyingElement);
if (result != null) {
return result;
}
ElementKind kind = underlyingElement.getKind();
switch(kind) {
case PACKAGE:
result = newTreeBackedPackage((PackageElement) underlyingElement);
break;
case ANNOTATION_TYPE:
case CLASS:
case ENUM:
case INTERFACE:
result = newTreeBackedType((TypeElement) underlyingElement);
break;
case TYPE_PARAMETER:
result = newTreeBackedTypeParameter((TypeParameterElement) underlyingElement);
break;
case ENUM_CONSTANT:
case FIELD:
case PARAMETER:
result = newTreeBackedVariable((VariableElement) underlyingElement);
break;
case CONSTRUCTOR:
case METHOD:
result = newTreeBackedExecutable((ExecutableElement) underlyingElement);
break;
// $CASES-OMITTED$
default:
throw new UnsupportedOperationException(String.format("Element kind %s NYI", kind));
}
treeBackedElements.put(underlyingElement, result);
return result;
}
use of javax.lang.model.element.TypeParameterElement in project buck by facebook.
the class StandaloneTypeVariableTest method testAsElement.
@Test
public void testAsElement() throws IOException {
compile("class Foo<T> { }");
TypeParameterElement tElement = elements.getTypeElement("Foo").getTypeParameters().get(0);
TypeVariable tVar = (TypeVariable) tElement.asType();
assertSame(tElement, tVar.asElement());
}
use of javax.lang.model.element.TypeParameterElement in project buck by facebook.
the class TreeBackedTreesTest method testGetTreeNullGetPathRoundtripTypeParameterElement.
@Test
public void testGetTreeNullGetPathRoundtripTypeParameterElement() throws IOException {
compile("class Foo<T, U> { }");
TypeParameterElement tElement = elements.getTypeElement("Foo").getTypeParameters().get(0);
Tree tTree = trees.getTree(tElement);
TreePath tPath = trees.getPath(tElement);
// Odd behavior by javac, but we'll match it
assertNull(tTree);
assertSame(tElement, trees.getElement(tPath));
}
Aggregations