private static void putAll(Map<ProtoType, ClassName> wireToJava, String javaPackage, ClassName enclosingClassName, List<Type> types) { for (Type type : types) { ClassName className = enclosingClassName != null ? enclosingClassName.nestedClass(type.type().simpleName()) : ClassName.get(javaPackage, type.type().simpleName()); wireToJava.put(type.type(), className); putAll(wireToJava, javaPackage, className, type.nestedTypes()); } }
@Test public void simpleName() throws Exception { ProtoType person = ProtoType.get("squareup.protos.person.Person"); assertThat(person.simpleName()).isEqualTo("Person"); }
public static JavaGenerator get(Schema schema) { Map<ProtoType, ClassName> nameToJavaName = new LinkedHashMap<>(BUILT_IN_TYPES_MAP); for (ProtoFile protoFile : schema.protoFiles()) { String javaPackage = javaPackage(protoFile); putAll(nameToJavaName, javaPackage, null, protoFile.types()); for (Service service : protoFile.services()) { ClassName className = ClassName.get(javaPackage, service.type().simpleName()); nameToJavaName.put(service.type(), className); } } return new JavaGenerator(schema, nameToJavaName, new Profile(), false, false, false); }
MessageElement toElement() { return MessageElement.builder(location) .name(type.simpleName()) .nestedTypes(Type.toElements(nestedTypes)) .build(); } }
private MethodSpec messageToString(NameAllocator nameAllocator, MessageType type) { NameAllocator localNameAllocator = nameAllocator.clone(); MethodSpec.Builder result = MethodSpec.methodBuilder("toString") .addAnnotation(Override.class) .addModifiers(PUBLIC) .returns(String.class); String builderName = localNameAllocator.newName("builder"); result.addStatement("$1T $2N = new $1T()", StringBuilder.class, builderName); for (Field field : type.fieldsAndOneOfFields()) { String fieldName = nameAllocator.get(field); if (field.isRepeated() || field.type().isMap()) { result.addCode("if (!$N.isEmpty()) ", fieldName); } else if (!field.isRequired()) { result.addCode("if ($N != null) ", fieldName); } if (field.isRedacted()) { result.addStatement("$N.append(\", $N=██\")", builderName, field.name()); } else { result.addStatement("$N.append(\", $N=\").append($L)", builderName, field.name(), fieldName); } } result.addStatement("return builder.replace(0, 2, \"$L{\").append('}').toString()", type.type().simpleName()); return result.build(); }
private CodeBlock singleAdapterFor(ProtoType type) { CodeBlock.Builder result = CodeBlock.builder(); if (type.isScalar()) { result.add("$T.$L", ADAPTER, type.simpleName().toUpperCase(Locale.US)); } else if (type.isMap()) { throw new IllegalArgumentException("Cannot create single adapter for map type " + type); } else { AdapterConstant adapterConstant = profile.getAdapter(type); if (adapterConstant != null) { result.add("$T.$L", adapterConstant.className, adapterConstant.memberName); } else { result.add("$T.ADAPTER", typeName(type)); } } return result.build(); }
/** Returns a standalone adapter for {@code type}. */ public TypeSpec generateAdapterForCustomType(Type type) { NameAllocator nameAllocator = nameAllocators.getUnchecked(type); ClassName adapterTypeName = abstractAdapterName(type.type()); ClassName typeName = (ClassName) typeName(type.type()); TypeSpec.Builder adapter; if (type instanceof MessageType) { adapter = messageAdapter(nameAllocator, (MessageType) type, typeName, adapterTypeName, null) .toBuilder(); } else { adapter = enumAdapter(nameAllocator, (EnumType) type, typeName, adapterTypeName).toBuilder(); } if (adapterTypeName.enclosingClassName() != null) adapter.addModifiers(STATIC); for (Type nestedType : type.nestedTypes()) { if (profile.getAdapter(nestedType.type()) == null) { throw new IllegalArgumentException("Missing custom proto adapter for " + nestedType.type().enclosingTypeOrPackage() + "." + nestedType.type().simpleName() + " when enclosing proto has custom proto adapter."); } adapter.addType(generateAdapterForCustomType(nestedType)); } return adapter.build(); }
private static void putAll(Map<ProtoType, ClassName> wireToJava, String javaPackage, ClassName enclosingClassName, List<Type> types) { for (Type type : types) { ClassName className = enclosingClassName != null ? enclosingClassName.nestedClass(type.type().simpleName()) : ClassName.get(javaPackage, type.type().simpleName()); wireToJava.put(type.type(), className); putAll(wireToJava, javaPackage, className, type.nestedTypes()); } }
private static void putAll(Map<ProtoType, TypeName> wireToJava, String javaPackage, ClassName enclosingClassName, List<Type> types) { for (Type type : types) { ClassName className = enclosingClassName != null ? enclosingClassName.nestedClass(type.type().simpleName()) : ClassName.get(javaPackage, type.type().simpleName()); wireToJava.put(type.type(), className); putAll(wireToJava, javaPackage, className, type.nestedTypes()); } }
public static JavaGenerator get(Schema schema) { Map<ProtoType, TypeName> nameToJavaName = new LinkedHashMap<>(); nameToJavaName.putAll(BUILT_IN_TYPES_MAP); for (ProtoFile protoFile : schema.protoFiles()) { String javaPackage = javaPackage(protoFile); putAll(nameToJavaName, javaPackage, null, protoFile.types()); for (Service service : protoFile.services()) { ClassName className = ClassName.get(javaPackage, service.type().simpleName()); nameToJavaName.put(service.type(), className); } } return new JavaGenerator(schema, ImmutableMap.copyOf(nameToJavaName), false, false); }
private CodeBlock singleAdapterFor(ProtoType type) { CodeBlock.Builder result = CodeBlock.builder(); if (type.isScalar()) { result.add("$T.$L", ADAPTER, type.simpleName().toUpperCase(Locale.US)); } else if (type.isMap()) { throw new IllegalArgumentException("Cannot create single adapter for map type " + type); } else { result.add("$T.ADAPTER", typeName(type)); } return result.build(); }
public static JavaGenerator get(Schema schema) { Map<ProtoType, ClassName> nameToJavaName = new LinkedHashMap<>(); nameToJavaName.putAll(BUILT_IN_TYPES_MAP); for (ProtoFile protoFile : schema.protoFiles()) { String javaPackage = javaPackage(protoFile); putAll(nameToJavaName, javaPackage, null, protoFile.types()); for (Service service : protoFile.services()) { ClassName className = ClassName.get(javaPackage, service.type().simpleName()); nameToJavaName.put(service.type(), className); } } return new JavaGenerator(schema, nameToJavaName, new Profile(), false, false); }
private MethodSpec messageToString(NameAllocator nameAllocator, MessageType type) { NameAllocator localNameAllocator = nameAllocator.clone(); MethodSpec.Builder result = MethodSpec.methodBuilder("toString") .addAnnotation(Override.class) .addModifiers(PUBLIC) .returns(String.class); String builderName = localNameAllocator.newName("builder"); result.addStatement("$1T $2N = new $1T()", StringBuilder.class, builderName); for (Field field : type.fieldsAndOneOfFields()) { String fieldName = nameAllocator.get(field); if (field.isRepeated() || field.type().isMap()) { result.addCode("if (!$N.isEmpty()) ", fieldName); } else if (!field.isRequired()) { result.addCode("if ($N != null) ", fieldName); } if (field.isRedacted()) { result.addStatement("$N.append(\", $N=██\")", builderName, field.name()); } else { result.addStatement("$N.append(\", $N=\").append($L)", builderName, field.name(), fieldName); } } result.addStatement("return builder.replace(0, 2, \"$L{\").append('}').toString()", type.type().simpleName()); return result.build(); }
private MethodSpec messageToString(NameAllocator nameAllocator, MessageType type) { NameAllocator localNameAllocator = nameAllocator.clone(); MethodSpec.Builder result = MethodSpec.methodBuilder("toString") .addAnnotation(Override.class) .addModifiers(PUBLIC) .returns(String.class); String builderName = localNameAllocator.newName("builder"); result.addStatement("$1T $2N = new $1T()", StringBuilder.class, builderName); for (Field field : type.fieldsAndOneOfFields()) { String fieldName = nameAllocator.get(field); if (field.isRepeated() || field.type().isMap()) { result.addCode("if ($N != null && !$N.isEmpty()) ", fieldName, fieldName); } else if (!field.isRequired()) { result.addCode("if ($N != null) ", fieldName); } if (field.isRedacted()) { result.addStatement("$N.append(\", $N=██\")", builderName, field.name()); } else { result.addStatement("$N.append(\", $N=\").append($L)", builderName, field.name(), fieldName); } } result.addStatement("return builder.replace(0, 2, \"$L{\").append('}').toString()", type.type().simpleName()); return result.build(); }