Search in sources :

Example 61 with ParameterizedTypeName

use of com.squareup.javapoet.ParameterizedTypeName in project tiger by google.

the class Utils method getSourceCodeName.

/**
 * Returns "com_Foo" for com.Foo, "com_Foo_com_Bar_com_Baz" for Foo<Bar, Baz>.
 * upper_bounds_UpperBound_Foo for "? extends Foo" and
 * lower_bounds_LowerBound_Foo for "? super Foo". Assuming raw types are not
 * used, there will be not conflicts.
 */
public static String getSourceCodeName(TypeName typeName) {
    Preconditions.checkNotNull(typeName);
    if (typeName.isPrimitive()) {
        return typeName.toString();
    } else if (typeName instanceof ClassName) {
        return getClassCanonicalName((ClassName) typeName).replace(".", REPLACEMENT_FOR_INVALID_CHARS);
    } else if (typeName instanceof ParameterizedTypeName) {
        ParameterizedTypeName p = (ParameterizedTypeName) typeName;
        StringBuilder builder = new StringBuilder(getSourceCodeName(p.rawType));
        for (TypeName t : p.typeArguments) {
            builder.append("_").append(getSourceCodeName(t));
        }
        return builder.toString();
    } else if (typeName instanceof WildcardTypeName) {
        WildcardTypeName w = (WildcardTypeName) typeName;
        if (w.upperBounds.size() > 0) {
            return "upper_bounds_" + getSourceCodeName(w.upperBounds.get(0));
        } else {
            Preconditions.checkState(w.lowerBounds.size() > 0);
            return "lower_bounds_" + getSourceCodeName(w.lowerBounds.get(0));
        }
    } else if (typeName instanceof ArrayTypeName) {
        ArrayTypeName arrayTypeName = (ArrayTypeName) typeName;
        return "ArrayOf" + getSourceCodeName(arrayTypeName.componentType);
    }
    throw new RuntimeException("Unexpected type: " + typeName);
}
Also used : TypeName(com.squareup.javapoet.TypeName) WildcardTypeName(com.squareup.javapoet.WildcardTypeName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) ArrayTypeName(com.squareup.javapoet.ArrayTypeName) ArrayTypeName(com.squareup.javapoet.ArrayTypeName) ClassName(com.squareup.javapoet.ClassName) WildcardTypeName(com.squareup.javapoet.WildcardTypeName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName)

Example 62 with ParameterizedTypeName

use of com.squareup.javapoet.ParameterizedTypeName in project tiger by google.

the class Utils method getQualifiedName.

private static String getQualifiedName(TypeName typeName) {
    ClassName className;
    if (typeName instanceof ParameterizedTypeName) {
        className = ((ParameterizedTypeName) typeName).rawType;
    } else {
        Preconditions.checkArgument(typeName instanceof ClassName, "Unexpected type found: " + typeName);
        className = (ClassName) typeName;
    }
    return Joiner.on(".").join(className.simpleNames());
}
Also used : ClassName(com.squareup.javapoet.ClassName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName)

Example 63 with ParameterizedTypeName

use of com.squareup.javapoet.ParameterizedTypeName in project tiger by google.

the class Utils method isMap.

/**
 * Returns if key is a map with type variables.
 */
public boolean isMap(BindingKey key) {
    TypeName typeName = key.getTypeName();
    if (!(typeName instanceof ParameterizedTypeName)) {
        return false;
    }
    ParameterizedTypeName parameterizedTypeName = (ParameterizedTypeName) typeName;
    return parameterizedTypeName.rawType.equals(ClassName.get(Map.class));
}
Also used : TypeName(com.squareup.javapoet.TypeName) WildcardTypeName(com.squareup.javapoet.WildcardTypeName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) ArrayTypeName(com.squareup.javapoet.ArrayTypeName) Map(java.util.Map) HashMap(java.util.HashMap) IntoMap(dagger.multibindings.IntoMap) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName)

Example 64 with ParameterizedTypeName

use of com.squareup.javapoet.ParameterizedTypeName in project tiger by google.

the class Utils method isSet.

/**
 * Returns if key is a set with type variables.
 */
public boolean isSet(BindingKey key) {
    TypeName typeName = key.getTypeName();
    if (!(typeName instanceof ParameterizedTypeName)) {
        return false;
    }
    ParameterizedTypeName parameterizedTypeName = (ParameterizedTypeName) typeName;
    return parameterizedTypeName.rawType.equals(ClassName.get(Set.class));
}
Also used : TypeName(com.squareup.javapoet.TypeName) WildcardTypeName(com.squareup.javapoet.WildcardTypeName) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) ArrayTypeName(com.squareup.javapoet.ArrayTypeName) Set(java.util.Set) ElementsIntoSet(dagger.multibindings.ElementsIntoSet) HashSet(java.util.HashSet) IntoSet(dagger.multibindings.IntoSet) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName)

Example 65 with ParameterizedTypeName

use of com.squareup.javapoet.ParameterizedTypeName in project CoreData by FangCloud-Android.

the class EntityProcessor method createEntityDao.

public void createEntityDao(TypeElement element) throws IOException {
    EntityDetail entityDetail = EntityDetail.parse(processingEnv, element);
    // 实体类的class
    ClassName classEntity = ClassName.bestGuess(element.asType().toString());
    if (entityDetail.getPrimaryKey() == null) {
        throw new RuntimeException(classEntity.reflectionName() + " 没有主键");
    }
    List<Property> propertyList = entityDetail.getProperties(processingEnv);
    // 1、找出tableName,PrimaryKeyName ok
    // 2、找出所有的PropertyConverter,并生成局部变量,类似 __TagListConverter ok
    // 3、找出所有关联对象 @Relation,并生成对应的dao 类似 __AuthorCoreDao ok
    // 4、onCreate方法,初始化 关联对象对应的 dao ok
    // 5、getInsertSql, 返回插入的sql语句 ok
    // 6、getCreateTableSql,返回建表语句
    // 7、getTableProperties,返回所有的表结构
    // 8、绑定数据
    // dao的java名字
    String daoName = String.format("%sCoreDaoImpl", entityDetail.getEntityName());
    TypeSpec.Builder daoTypeBuilder = TypeSpec.classBuilder(daoName).addModifiers(Modifier.PUBLIC, Modifier.FINAL).superclass(ParameterizedTypeName.get(classCoreDao, classEntity));
    List<Element> convertElements = entityDetail.getConvertElements(processingEnv);
    // static 代码块
    CodeBlock convertStaticBlock = CreateConvertStatement.buildConvertStatic(convertElements);
    if (convertStaticBlock != null) {
        daoTypeBuilder.addStaticBlock(convertStaticBlock);
    }
    // 创建convert
    List<FieldSpec> convertFieldSpecs = CreateConvertStatement.bindComvertFields(convertElements);
    if (convertFieldSpecs != null) {
        for (FieldSpec fieldSpec : convertFieldSpecs) {
            daoTypeBuilder.addField(fieldSpec);
        }
    }
    // onCreate方法
    // 创建关联的dao
    List<Element> relationElements = entityDetail.getRelationElements();
    MethodSpec.Builder onCreateMethodBuilder = MethodSpec.methodBuilder("onCreate").addModifiers(Modifier.PROTECTED).returns(void.class).addParameter(classCoreData, "coreData").addStatement("super.onCreate($N)", "coreData");
    for (Element relationElement : relationElements) {
        TypeMirror typeMirror = relationElement.asType();
        ClassName classRelation = ClassName.bestGuess(typeMirror.toString());
        String daoFieldName = Utils.relationDaoName(classRelation);
        FieldSpec fieldSpec = FieldSpec.builder(ParameterizedTypeName.get(classCoreDao, classRelation), daoFieldName, Modifier.PRIVATE).build();
        daoTypeBuilder.addField(fieldSpec);
        onCreateMethodBuilder.addStatement("$N = coreData.dao($T.class)", daoFieldName, classRelation);
    }
    MethodSpec onCreateMethod = onCreateMethodBuilder.build();
    // getCreateTableSql 方法,用来获取建表语句
    MethodSpec getCreateTableSqlMethod = MethodSpec.methodBuilder("getCreateTableSql").addModifiers(Modifier.PROTECTED).returns(String.class).addStatement("return $S", SqlBuilder.buildCreateSql(entityDetail.getTableName(), propertyList, true)).build();
    // getInsertSql 方法,用来获取插入语句
    MethodSpec getInsertSqlMethod = MethodSpec.methodBuilder("getInsertSql").addModifiers(Modifier.PROTECTED).returns(String.class).addStatement("return $S", Utils.getInsertSql(entityDetail.getTableName(), propertyList)).build();
    // bindStatement 用来绑定数据
    MethodSpec bindStatementMethod = new BindStatementMethod(processingEnv, entityDetail).build();
    // replaceInternal 方法,用来处理关系型数据
    MethodSpec replaceInternalMethod = new ReplaceInternalMethod(processingEnv, entityDetail).build();
    // 创建 getTableName 方法,返回tableName
    MethodSpec getTableNameMethod = MethodSpec.methodBuilder("getTableName").addModifiers(Modifier.PUBLIC).returns(String.class).addStatement("return $S", entityDetail.getTableName()).build();
    // 创建 getPrimaryKeyName 方法,返回 主键的名字
    MethodSpec getPrimaryKeyNameMethod = MethodSpec.methodBuilder("getPrimaryKeyName").addModifiers(Modifier.PUBLIC).returns(String.class).addStatement("return $S", Utils.getColumnName(entityDetail.getPrimaryKey())).build();
    // 创建 bindCursor 方法,绑定游标数据到模型
    MethodSpec bindCursorMethod = new BindCursorMethod(processingEnv, entityDetail).build();
    // 创建 getTableProperties 方法,返回所有字段相关的 Property
    ParameterizedTypeName listPropertyType = ParameterizedTypeName.get(ClassName.get(ArrayList.class), classCoreProperty);
    MethodSpec.Builder getTablePropertiesBuilder = MethodSpec.methodBuilder("getTableProperties").addModifiers(Modifier.PUBLIC).returns(ParameterizedTypeName.get(ClassName.get(List.class), classCoreProperty));
    getTablePropertiesBuilder.addStatement("$T list = new $T()", listPropertyType, listPropertyType);
    for (Property property : propertyList) {
        getTablePropertiesBuilder.addStatement("list.add(new $T($S, $T.class, $N))", classCoreProperty, property.name, Utils.getTypeNameByType(property.type), String.valueOf(property.primaryKey));
    }
    getTablePropertiesBuilder.addStatement("return list");
    daoTypeBuilder.addMethod(onCreateMethod).addMethod(getTableNameMethod).addMethod(getPrimaryKeyNameMethod).addMethod(getTablePropertiesBuilder.build()).addMethod(getCreateTableSqlMethod).addMethod(getInsertSqlMethod).addMethod(bindStatementMethod).addMethod(replaceInternalMethod).addMethod(bindCursorMethod);
    JavaFile javaFile = JavaFile.builder(entityDetail.getEntityPackageName(processingEnv), daoTypeBuilder.build()).build();
    javaFile.writeTo(processingEnv.getFiler());
    System.out.println(element.getSimpleName());
    System.out.println(processingEnv.getElementUtils().getPackageOf(element).getQualifiedName());
}
Also used : MethodSpec(com.squareup.javapoet.MethodSpec) TypeElement(javax.lang.model.element.TypeElement) Element(javax.lang.model.element.Element) CodeBlock(com.squareup.javapoet.CodeBlock) ArrayList(java.util.ArrayList) BindCursorMethod(com.coredata.compiler.method.BindCursorMethod) FieldSpec(com.squareup.javapoet.FieldSpec) ReplaceInternalMethod(com.coredata.compiler.method.ReplaceInternalMethod) BindStatementMethod(com.coredata.compiler.method.BindStatementMethod) TypeMirror(javax.lang.model.type.TypeMirror) ClassName(com.squareup.javapoet.ClassName) JavaFile(com.squareup.javapoet.JavaFile) Property(com.coredata.db.Property) TypeSpec(com.squareup.javapoet.TypeSpec) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName)

Aggregations

ParameterizedTypeName (com.squareup.javapoet.ParameterizedTypeName)135 TypeName (com.squareup.javapoet.TypeName)90 ClassName (com.squareup.javapoet.ClassName)53 MethodSpec (com.squareup.javapoet.MethodSpec)47 TypeSpec (com.squareup.javapoet.TypeSpec)29 WildcardTypeName (com.squareup.javapoet.WildcardTypeName)29 TypeElement (javax.lang.model.element.TypeElement)23 ArrayList (java.util.ArrayList)19 TypeMirror (javax.lang.model.type.TypeMirror)19 ArrayTypeName (com.squareup.javapoet.ArrayTypeName)15 HashSet (java.util.HashSet)14 Map (java.util.Map)13 List (java.util.List)12 Set (java.util.Set)12 FieldSpec (com.squareup.javapoet.FieldSpec)11 ParameterSpec (com.squareup.javapoet.ParameterSpec)11 TypeVariableName (com.squareup.javapoet.TypeVariableName)10 Element (javax.lang.model.element.Element)10 PackageElement (javax.lang.model.element.PackageElement)10 Builder (com.squareup.javapoet.TypeSpec.Builder)9