private CodeBlock javadocWithParameters() { CodeBlock.Builder builder = javadoc.toBuilder(); boolean emitTagNewline = true; for (ParameterSpec parameterSpec : parameters) { if (!parameterSpec.javadoc.isEmpty()) { // Emit a new line before @param section only if the method javadoc is present. if (emitTagNewline && !javadoc.isEmpty()) builder.add("\n"); emitTagNewline = false; builder.add("@param $L $L", parameterSpec.name, parameterSpec.javadoc); } } return builder.build(); }
private CodeBlock adapterFor(Field field) { CodeBlock.Builder result = singleAdapterFor(field).toBuilder(); if (field.isPacked()) { result.add(".asPacked()"); } else if (field.isRepeated()) { result.add(".asRepeated()"); } return result.build(); }
private CodeBlock asTypeArguments(Stream<? extends TypeMirror> typeVariables) { return typeVariables .filter(tv -> tv.getKind() != TypeKind.WILDCARD) .map(tv -> CodeBlock.of("$T", TypeName.get(tv))) .reduce((tv1, tv2) -> tv1.toBuilder().add(", ").add(tv2).build()) .map(tvs -> CodeBlock.builder().add("<").add(tvs).add(">").build()) .orElse(CodeBlock.of("")); }
private CodeBlock asTypeArguments(Stream<? extends TypeMirror> typeVariables) { return typeVariables .filter(tv -> tv.getKind() != TypeKind.WILDCARD) .map(tv -> CodeBlock.of("$T", TypeName.get(tv))) .reduce((tv1, tv2) -> tv1.toBuilder().add(", ").add(tv2).build()) .map(tvs -> CodeBlock.builder().add("<").add(tvs).add(">").build()) .orElse(CodeBlock.of("")); }
private MethodSpec fluentAssignmentSetter(TypeName returnType) { return fluentSetterBuilder(returnType) .addCode(copySetterBody().toBuilder().addStatement("return this").build()) .build(); }
private MethodSpec fluentCopySetter(TypeName returnType) { return fluentSetterBuilder(returnType) .addCode(copySetterBody() .toBuilder() .addStatement("return this").build()) .build(); }
private MethodSpec fluentCopySetter(TypeName returnType) { return fluentSetterBuilder(returnType) .addCode(copySetterBody() .toBuilder() .addStatement("return this").build()) .build(); }
private MethodSpec fluentAssignmentSetter(TypeName returnType) { return fluentSetterBuilder(returnType) .addCode(copySetterBody().toBuilder().addStatement("return this").build()) .build(); }
private MethodSpec fluentEnumToStringSetter(TypeName returnType) { return fluentSetterBuilder(modeledParam(), returnType) .addCode(enumToStringAssignmentBody().toBuilder().addStatement("return this").build()) .build(); }
private MethodSpec fluentEnumToStringSetter(TypeName returnType) { return fluentSetterBuilder(modeledParam(), returnType) .addCode(enumToStringAssignmentBody().toBuilder().addStatement("return this").build()) .build(); }
private static Expression joinAsArgs(Expression e1, Expression e2) { return caseOf(e1) .baseExpression( cb1 -> caseOf(e2).baseExpression(cb2 -> baseExpression(cb1.toBuilder().add(", ").add(cb2).build())) .recursiveExpression(fromOuterMethod -> recursiveExpression( outer -> cb1.toBuilder().add(", ").add(fromOuterMethod.apply(outer)).build()))) .recursiveExpression(fromOuterMethod -> caseOf(e2).baseExpression( cb2 -> recursiveExpression(outer -> fromOuterMethod.apply(outer).toBuilder().add(", ").add(cb2).build())) .recursiveExpression(fromOuterMethod2 -> recursiveExpression(outer -> fromOuterMethod.apply(outer) .toBuilder() .add(", ") .add(fromOuterMethod2.apply(outer)) .build()))); }
packerBlock = packerBlock.toBuilder() .addStatement("$T $L = $T.class.getDeclaredField($S)", Field.class,fieldName,TypeName.get(clazz.asType()),fieldName) .addStatement("$L.setAccessible(true)",fieldName) unpackerBlock = unpackerBlock.toBuilder() .addStatement("$T $L = $T.class.getDeclaredField($S)", Field.class,fieldName,TypeName.get(clazz.asType()),fieldName) .addStatement("$L.setAccessible(true)",fieldName) unpackerBlock = unpackerBlock.toBuilder() .addStatement("$L.setInt(arg,bundle.optInt($S,$L))", fieldName,fieldName,defaultValue) .build(); unpackerBlock = unpackerBlock.toBuilder() .addStatement("$L.setBoolean(arg,bundle.optBoolean($S,$L))", fieldName,fieldName,defaultValue) .build(); unpackerBlock = unpackerBlock.toBuilder() .addStatement("$L.setFloat(arg,bundle.optFloat($S,$L))", fieldName,fieldName,defaultValue) .build(); unpackerBlock = unpackerBlock.toBuilder() .addStatement("$L.set(arg,bundle.optString($S,$S))", fieldName,fieldName,defaultValue) .build(); unpackerBlock = unpackerBlock.toBuilder() .addStatement("($S)$L.set(arg,bundle.get($S))",fieldType+".class",fieldName,fieldName) .build(); packerBlock = packerBlock.toBuilder().endControlFlow().build();
@Override public List<MethodSpec> fluent(TypeName returnType) { List<MethodSpec> fluent = new ArrayList<>(); fluent.add(fluentSetterBuilder(returnType).addCode(copySetterBody() .toBuilder() .addStatement("return this") .build()) .build()); if (Utils.isMapWithEnumShape(memberModel())) { fluent.add(fluentSetterBuilder(memberModel().getFluentEnumGetterMethodName(), mapWithEnumAsParameter(), returnType) .addCode(copySetterBodyWithModeledEnumParameter()) .addStatement("return this") .build()); } return fluent; }
private static Expression joinAsArgs(Expression e1, Expression e2) { return caseOf(e1) .baseExpression( cb1 -> caseOf(e2).baseExpression(cb2 -> baseExpression(cb1.toBuilder().add(", ").add(cb2).build())) .recursiveExpression(fromOuterMethod -> recursiveExpression( outer -> cb1.toBuilder().add(", ").add(fromOuterMethod.apply(outer)).build()))) .recursiveExpression(fromOuterMethod -> caseOf(e2).baseExpression( cb2 -> recursiveExpression(outer -> fromOuterMethod.apply(outer).toBuilder().add(", ").add(cb2).build())) .recursiveExpression(fromOuterMethod2 -> recursiveExpression(outer -> fromOuterMethod.apply(outer) .toBuilder() .add(", ") .add(fromOuterMethod2.apply(outer)) .build()))); }
@Override public List<MethodSpec> fluent(TypeName returnType) { List<MethodSpec> fluent = new ArrayList<>(); fluent.add(fluentSetterBuilder(returnType).addCode(copySetterBody() .toBuilder() .addStatement("return this") .build()) .build()); if (Utils.isMapWithEnumShape(memberModel())) { fluent.add(fluentSetterBuilder(memberModel().getFluentEnumGetterMethodName(), mapWithEnumAsParameter(), returnType) .addCode(copySetterBodyWithModeledEnumParameter()) .addStatement("return this") .build()); } return fluent; }
private CodeBlock.Builder withProperties(TypeName newSpec, ObjectTypeDeclaration object) { List<TypeDeclaration> properties = FluentIterable.from(object.properties()).filter(new Predicate<TypeDeclaration>() { @Override public boolean apply(@Nullable TypeDeclaration property) { return property != null && EcmaPattern.isSlashedPattern(property.name()) && ! EcmaPattern.fromString(property.name()).asJavaPattern().isEmpty(); } }).toList(); if ( properties.size() == 0) { return CodeBlock.of("new $T()", newSpec).toBuilder(); } CodeBlock.Builder cb = CodeBlock.builder().beginControlFlow("new $T()", newSpec).beginControlFlow(""); for (TypeDeclaration typeDeclaration : object.properties()) { cb.addStatement("addAcceptedPattern($T.compile($S))", Pattern.class, EcmaPattern.fromString(typeDeclaration.name()).asJavaPattern()); } return cb.endControlFlow().endControlFlow(); }
public CodeBlock buildJoins(CodeBlock prefix, ColumnDefinition column) { CodeBlock.Builder joins = CodeBlock.builder(); SchemaDefinition associatedSchema = context.getSchemaDef(column.getType()); associatedSchema.getPrimaryKey().ifPresent(primaryKey -> { joins.add("+ $S + $L$L.associationSchema.getEscapedTableAlias() + ", " LEFT OUTER JOIN " + associatedSchema.getEscapedTableName() + " AS ", prefix, column.name ); joins.add("$S + $L$L.getQualifiedName() + $S + $L$L.associationSchema.$L.getQualifiedName()\n", " ON ", prefix, column.name, " = ", prefix, column.name, primaryKey.name ); // handles nested JOINs CodeBlock newPrefix = prefix.toBuilder().add("$L.associationSchema.", column.name).build(); associatedSchema.getColumns() .stream() .filter(ColumnDefinition::isDirectAssociation) .map(nestedColumn -> buildJoins(newPrefix, nestedColumn)) .forEach(joins::add); }); return joins.build(); }
private CodeBlock adapterFor(Field field) { CodeBlock.Builder result = singleAdapterFor(field).toBuilder(); if (field.isPacked()) { result.add(".asPacked()"); } else if (field.isRepeated()) { result.add(".asRepeated()"); } return result.build(); }