private Expression getTypeExpression(DeclaredTypeName fieldType) { List<? extends TypeName> typeArgs = fieldType.getTypeArgs(); if (AptUtils.isEmpty(typeArgs)) { return Expressions.classObject(fieldType); } else { List<Expression> parameterizedTypeBuilderArgs = new ArrayList<>(); parameterizedTypeBuilderArgs.add(Expressions.classObject(fieldType)); for (TypeName typeArg : typeArgs) { // The cast to DeclaredTypeName is safe because we recursively check all type args before constructing // an instance of this property generator parameterizedTypeBuilderArgs.add(getTypeExpression((DeclaredTypeName) typeArg)); } return Expressions.staticMethod(JSONTypes.PARAMETERIZED_TYPE_BUILDER, "build", parameterizedTypeBuilderArgs); } }
private Expression constructInitializer(String name, boolean view) { if (view) { return Expressions.staticMethod(TypeConstants.VIEW, "fromQuery", QUERY_NAME, name, Expressions.classObject(modelSpec.getGeneratedClassName()), PROPERTIES_ARRAY_NAME); } else { return Expressions.callMethodOn(QUERY_NAME, "as", name, Expressions.classObject(modelSpec.getGeneratedClassName()), PROPERTIES_ARRAY_NAME); } }
private void emitTableDeclaration() throws IOException { writer.writeComment("--- table declaration"); List<Object> arguments = new ArrayList<>(); arguments.add(Expressions.classObject(modelSpec.getGeneratedClassName())); // modelClass arguments.add(PROPERTIES_ARRAY_NAME); // properties arguments.add("\"" + modelSpec.getSpecAnnotation().tableName().trim() + "\""); // name arguments.add(null); // database name, null by default if (modelSpec.isVirtualTable()) { if (AptUtils.isEmpty(modelSpec.getSpecAnnotation().virtualModule())) { modelSpec.logError("virtualModule should be non-empty for virtual table models", modelSpec.getModelSpecElement()); } arguments.add("\"" + modelSpec.getSpecAnnotation().virtualModule() + "\""); } else if (!AptUtils.isEmpty(modelSpec.getSpecAnnotation().tableConstraint())) { arguments.add("\"" + modelSpec.getSpecAnnotation().tableConstraint() + "\""); } writer.writeFieldDeclaration(modelSpec.getTableType(), TABLE_NAME, Expressions.callConstructor(modelSpec.getTableType(), arguments), TypeConstants.PUBLIC_STATIC_FINAL); writer.writeFieldDeclaration(TypeConstants.TABLE_MODEL_NAME, TABLE_MODEL_NAME, Expressions.callConstructor(TypeConstants.TABLE_MODEL_NAME, Expressions.classObject(modelSpec.getGeneratedClassName()), Expressions.callMethodOn(TableModelFileWriter.TABLE_NAME, "getName")), TypeConstants.PUBLIC_STATIC_FINAL); writer.writeNewline(); }
@Override public void afterEmitMethods(JavaFileWriter writer) throws IOException { // emit creator for parcelable writer.writeComment("--- parcelable helpers"); List<DeclaredTypeName> genericList = Collections.singletonList(modelSpec.getGeneratedClassName()); DeclaredTypeName creatorType = TypeConstants.CREATOR.clone(); DeclaredTypeName modelCreatorType = TypeConstants.MODEL_CREATOR.clone(); creatorType.setTypeArgs(genericList); modelCreatorType.setTypeArgs(genericList); writer.writeFieldDeclaration(creatorType, "CREATOR", Expressions.callConstructor(modelCreatorType, Expressions.classObject(modelSpec.getGeneratedClassName())), TypeConstants.PUBLIC_STATIC_FINAL) .writeNewline(); } }
@Override public boolean writeExpression(JavaFileWriter writer) throws IOException { writer.appendString("@") .appendString(writer.shortenName(MODEL_GEN_ERROR_INNER, false)) .appendString("(specClass=") .appendExpression(Expressions.classObject(errorInfo.errorClass)) .appendString(", "); if (!AptUtils.isEmpty(errorInfo.element)) { writer.appendString("element=\"") .appendString(errorInfo.element) .appendString("\", "); } writer.appendString("message=\"") .appendString(errorInfo.message) .appendString("\")"); return true; } }
private Expression constructInitializer(String name, boolean view) { if (view) { return Expressions.staticMethod(TypeConstants.VIEW, "fromQuery", QUERY_NAME, name, Expressions.classObject(modelSpec.getGeneratedClassName()), PROPERTIES_ARRAY_NAME); } else { return Expressions.callMethodOn(QUERY_NAME, "as", name, Expressions.classObject(modelSpec.getGeneratedClassName()), PROPERTIES_ARRAY_NAME); } }
private void emitTableDeclaration() throws IOException { writer.writeComment("--- table declaration"); List<Object> arguments = new ArrayList<>(); arguments.add(Expressions.classObject(modelSpec.getGeneratedClassName())); // modelClass arguments.add(PROPERTIES_ARRAY_NAME); // properties arguments.add("\"" + modelSpec.getSpecAnnotation().tableName().trim() + "\""); // name arguments.add(null); // database name, null by default if (modelSpec.isVirtualTable()) { if (AptUtils.isEmpty(modelSpec.getSpecAnnotation().virtualModule())) { modelSpec.logError("virtualModule should be non-empty for virtual table models", modelSpec.getModelSpecElement()); } arguments.add("\"" + modelSpec.getSpecAnnotation().virtualModule() + "\""); } else if (!AptUtils.isEmpty(modelSpec.getSpecAnnotation().tableConstraint())) { arguments.add("\"" + modelSpec.getSpecAnnotation().tableConstraint() + "\""); } writer.writeFieldDeclaration(modelSpec.getTableType(), TABLE_NAME, Expressions.callConstructor(modelSpec.getTableType(), arguments), TypeConstants.PUBLIC_STATIC_FINAL); writer.writeFieldDeclaration(TypeConstants.TABLE_MODEL_NAME, TABLE_MODEL_NAME, Expressions.callConstructor(TypeConstants.TABLE_MODEL_NAME, Expressions.classObject(modelSpec.getGeneratedClassName()), Expressions.callMethodOn(TableModelFileWriter.TABLE_NAME, "getName")), TypeConstants.PUBLIC_STATIC_FINAL); writer.writeNewline(); }
@Override public void afterEmitMethods(JavaFileWriter writer) throws IOException { // emit creator for parcelable writer.writeComment("--- parcelable helpers"); List<DeclaredTypeName> genericList = Collections.singletonList(modelSpec.getGeneratedClassName()); DeclaredTypeName creatorType = TypeConstants.CREATOR.clone(); DeclaredTypeName modelCreatorType = TypeConstants.MODEL_CREATOR.clone(); creatorType.setTypeArgs(genericList); modelCreatorType.setTypeArgs(genericList); writer.writeFieldDeclaration(creatorType, "CREATOR", Expressions.callConstructor(modelCreatorType, Expressions.classObject(modelSpec.getGeneratedClassName())), TypeConstants.PUBLIC_STATIC_FINAL) .writeNewline(); } }
@Override public boolean writeExpression(JavaFileWriter writer) throws IOException { writer.appendString("@") .appendString(writer.shortenName(MODEL_GEN_ERROR_INNER, false)) .appendString("(specClass=") .appendExpression(Expressions.classObject(errorInfo.errorClass)) .appendString(", "); if (!AptUtils.isEmpty(errorInfo.element)) { writer.appendString("element=\"") .appendString(errorInfo.element) .appendString("\", "); } writer.appendString("message=\"") .appendString(errorInfo.message) .appendString("\")"); return true; } }