public static WildcardTypeName subtypeOf(Type upperBound) { return subtypeOf(TypeName.get(upperBound)); }
private static TypeName[] getBuilderGenericTypes( final TypeName type, final ClassName builderClass) { final TypeName typeParameter = type instanceof ParameterizedTypeName && !((ParameterizedTypeName) type).typeArguments.isEmpty() ? ((ParameterizedTypeName) type).typeArguments.get(0) : WildcardTypeName.subtypeOf(ClassNames.COMPONENT_LIFECYCLE); if (builderClass.equals(ClassNames.COMPONENT_BUILDER)) { return new TypeName[] {WildcardTypeName.subtypeOf(TypeName.OBJECT)}; } else { return new TypeName[] {typeParameter}; } }
private static TypeName[] getBuilderGenericTypes(TypeName type, ClassName builderClass) { if (builderClass.equals(ClassNames.COMPONENT_BUILDER) || builderClass.equals(ClassNames.SECTION_BUILDER)) { return new TypeName[] {WildcardTypeName.subtypeOf(TypeName.OBJECT)}; } else { final TypeName typeParameter = type instanceof ParameterizedTypeName && !((ParameterizedTypeName) type).typeArguments.isEmpty() ? ((ParameterizedTypeName) type).typeArguments.get(0) : WildcardTypeName.subtypeOf(ClassNames.COMPONENT); return new TypeName[]{typeParameter}; } }
private static TypeName bestGuess(String type) { switch (type) { case "void": return TypeName.VOID; case "boolean": return TypeName.BOOLEAN; case "byte": return TypeName.BYTE; case "char": return TypeName.CHAR; case "double": return TypeName.DOUBLE; case "float": return TypeName.FLOAT; case "int": return TypeName.INT; case "long": return TypeName.LONG; case "short": return TypeName.SHORT; default: int left = type.indexOf('<'); if (left != -1) { ClassName typeClassName = ClassName.bestGuess(type.substring(0, left)); List<TypeName> typeArguments = new ArrayList<>(); do { typeArguments.add(WildcardTypeName.subtypeOf(Object.class)); left = type.indexOf('<', left + 1); } while (left != -1); return ParameterizedTypeName.get(typeClassName, typeArguments.toArray(new TypeName[typeArguments.size()])); } return ClassName.bestGuess(type); } }
static TypeName get( javax.lang.model.type.WildcardType mirror, Map<TypeParameterElement, TypeVariableName> typeVariables) { TypeMirror extendsBound = mirror.getExtendsBound(); if (extendsBound == null) { TypeMirror superBound = mirror.getSuperBound(); if (superBound == null) { return subtypeOf(Object.class); } else { return supertypeOf(TypeName.get(superBound, typeVariables)); } } else { return subtypeOf(TypeName.get(extendsBound, typeVariables)); } }
private void generate(String destinationDir) throws IOException { String typesPackageName = "org.web3j.abi.datatypes"; String autoGeneratedTypesPackageName = typesPackageName + ".generated"; MethodSpec.Builder builder = MethodSpec.methodBuilder("getType") .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .addParameter(String.class, TYPE) .returns( ParameterizedTypeName.get(ClassName.get(Class.class), WildcardTypeName.subtypeOf(Object.class)) ) .beginControlFlow("switch (type)"); builder = addTypes(builder, typesPackageName); builder = addGeneratedTypes(builder, autoGeneratedTypesPackageName); builder = builder.addStatement("default:\nthrow new $T($S\n+ $N)", UnsupportedOperationException.class, "Unsupported type encountered: ", TYPE); builder.endControlFlow(); MethodSpec methodSpec = builder.build(); MethodSpec constructorSpec = MethodSpec.constructorBuilder() .addModifiers(Modifier.PRIVATE) .build(); TypeSpec typeSpec = TypeSpec .classBuilder("AbiTypes") .addJavadoc(buildWarning(AbiTypesMapperGenerator.class)) .addModifiers(Modifier.PUBLIC, Modifier.FINAL) .addMethod(constructorSpec) .addMethod(methodSpec) .build(); write(autoGeneratedTypesPackageName, typeSpec, destinationDir); }
WildcardTypeName.subtypeOf(ClassName.get(interceptorType)))); ParameterSpec mapParameterSpec = ParameterSpec.builder(mapTypeName, "map").build();
WildcardTypeName.subtypeOf(Object.class))); ParameterSpec mapParameterSpec = ParameterSpec.builder(mapTypeName, "map").build();
ClassName.get(Map.class), ParameterizedTypeName.get(ClassName.get(Class.class), WildcardTypeName.subtypeOf(Object.class)), TypeName.get(String[].class)); ParameterSpec mapParameterSpec = ParameterSpec.builder(mapTypeName, "map").build();
ParameterizedTypeName.get( ClassNames.STATE_VALUE, WildcardTypeName.subtypeOf(ClassName.bestGuess("java.lang.Object")))) .name("name4") .representedObject(mRepresentedObject4)
.get(ClassName.get(Map.class), ClassName.get(String.class), ParameterizedTypeName.get(ClassName.get(Class.class), WildcardTypeName.subtypeOf(ClassName.get(activityType)))); ParameterSpec mapParameterSpec = ParameterSpec.builder(mapTypeName, "router") .build();
TypeName bundlerType = ParameterizedTypeName.get(ClassName.bestGuess(BUNDLER_CLASS_NAME), WildcardTypeName.subtypeOf(Object.class)); TypeName bundlerMap = ParameterizedTypeName.get(ClassName.get(HashMap.class), ClassName.get(String.class), bundlerType);
private MethodSpec sdkFieldsMethod() { ParameterizedTypeName sdkFieldType = ParameterizedTypeName.get(ClassName.get(SdkField.class), WildcardTypeName.subtypeOf(ClassName.get(Object.class))); return MethodSpec.methodBuilder("sdkFields") .addModifiers(Modifier.PUBLIC) .addAnnotation(Override.class) .returns(ParameterizedTypeName.get(ClassName.get(List.class), sdkFieldType)) .addCode("return SDK_FIELDS;") .build(); }
private MethodSpec sdkFieldsMethod() { ParameterizedTypeName sdkFieldType = ParameterizedTypeName.get(ClassName.get(SdkField.class), WildcardTypeName.subtypeOf(ClassName.get(Object.class))); return MethodSpec.methodBuilder("sdkFields") .addModifiers(PUBLIC) .addAnnotation(Override.class) .returns(ParameterizedTypeName.get(ClassName.get(List.class), sdkFieldType)) .addCode("return SDK_FIELDS;") .build(); }
private MethodSpec serializableBuilderClass() { return MethodSpec.methodBuilder("serializableBuilderClass") .addModifiers(PUBLIC, Modifier.STATIC) .returns(ParameterizedTypeName.get(ClassName.get(Class.class), WildcardTypeName.subtypeOf(modelBuilderSpecs.builderInterfaceName()))) .addStatement("return $T.class", modelBuilderSpecs.builderImplName()) .build(); }
private MethodSpec serializableBuilderClass() { return MethodSpec.methodBuilder("serializableBuilderClass") .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .returns(ParameterizedTypeName.get(ClassName.get(Class.class), WildcardTypeName.subtypeOf(className().nestedClass("Builder")))) .addStatement("return $T.class", className().nestedClass("BuilderImpl")) .build(); }
@Override TypeName toTypeName(String name, Optional<? extends TypeName> maybeTypeName) { TypeName typeName = maybeTypeName.get(); return isWildcard(name) ? WildcardTypeName.subtypeOf(typeName) : TypeVariableName.get(name, typeName); }
private TypeName listParameterType(ListModel listModel) { MemberModel elementModel = listModel.getListMemberModel(); TypeName listElementType = parameterType(elementModel); if (isContainerType(elementModel)) { listElementType = WildcardTypeName.subtypeOf(listElementType); } return ParameterizedTypeName.get(ClassName.get(Collection.class), listElementType); }
private TypeName mapValueParameterType(MapModel mapModel) { TypeName valueType = parameterType(mapModel.getValueModel()); if (mapModel.getValueModel().isList()) { valueType = WildcardTypeName.subtypeOf(valueType); } return valueType; }