private String getNamespace(FileDescriptor fd, Descriptor containing) { FileOptions o = fd.getOptions(); String p = o.hasJavaPackage() ? o.getJavaPackage() : fd.getPackage(); String outer; if (o.hasJavaOuterClassname()) { outer = o.getJavaOuterClassname(); } else { outer = new File(fd.getName()).getName(); outer = outer.substring(0, outer.lastIndexOf('.')); outer = toCamelCase(outer); } String inner = ""; while (containing != null) { inner = containing.getName() + "$" + inner; containing = containing.getContainingType(); } return p + "." + outer + "$" + inner; }
@SuppressWarnings("unchecked") private static Class<? extends Enum> getEnumClassByEnumDescriptor(Descriptors.EnumDescriptor descriptor, BeanContainer beanContainer) { String name = StringUtils.join(getFullyQualifiedClassName(descriptor.getContainingType(), descriptor.getFile().getOptions(), descriptor.getName()), '.'); return (Class<? extends Enum>)MappingUtils.loadClass(name, beanContainer); }
private static Class<?> getJavaClassIgnoreRepeated(final Descriptors.FieldDescriptor descriptor, BeanContainer beanContainer) { switch (descriptor.getJavaType()) { case INT: return Integer.class; case LONG: return Long.class; case FLOAT: return Float.class; case DOUBLE: return Double.class; case BOOLEAN: return Boolean.class; case STRING: return String.class; case BYTE_STRING: return ByteString.class; //code duplicate, but GenericDescriptor interface is private in protobuf case ENUM: return getEnumClassByEnumDescriptor(descriptor.getEnumType(), beanContainer); case MESSAGE: return MappingUtils.loadClass(StringUtils.join( getFullyQualifiedClassName(descriptor.getMessageType().getContainingType(), descriptor.getMessageType().getFile().getOptions(), descriptor.getMessageType().getName()), '.'), beanContainer); default: throw new MappingException("Unable to find " + descriptor.getJavaType()); } }
public void generateProtoFromDescriptor(FileDescriptor descriptor, Appendable out, Descriptor wrapperMessage) throws IOException { String package1 = descriptor.getPackage(); if (package1 != null) { out.append("package " + package1 + ";\n"); } FileOptions options = descriptor.getOptions(); String javaPackage = options.getJavaPackage(); if (javaPackage != null) { out.append("option java_package = \"" + javaPackage + "\";\n"); } String javaOuterClassname = options.getJavaOuterClassname(); if (javaOuterClassname != null) { out.append("option java_outer_classname = \"" + javaOuterClassname + "\";\n"); } for (ServiceDescriptor serviceDescriptor : descriptor.getServices()) { generateProtoFromDescriptor(serviceDescriptor, out); } for (Descriptor messageDescriptor : descriptor.getMessageTypes()) { if (wrapperMessage != null && messageDescriptor.equals(wrapperMessage)) { out.append("// This is the message you can send to this service (wrapper message):\n"); } generateProtoFromDescriptor(messageDescriptor, out, "", new LinkedHashMap<Descriptor, Boolean>()); } for (EnumDescriptor enumDescriptor : descriptor.getEnumTypes()) { generateProtoFromDescriptor(enumDescriptor, out, ""); } }
private static Class<?> getJavaClassIgnoreRepeated(final Descriptors.FieldDescriptor descriptor, BeanContainer beanContainer) { switch (descriptor.getJavaType()) { case INT: return Integer.class; case LONG: return Long.class; case FLOAT: return Float.class; case DOUBLE: return Double.class; case BOOLEAN: return Boolean.class; case STRING: return String.class; case BYTE_STRING: return ByteString.class; //code duplicate, but GenericDescriptor interface is private in protobuf case ENUM: return getEnumClassByEnumDescriptor(descriptor.getEnumType(), beanContainer); case MESSAGE: return MappingUtils.loadClass(StringUtils.join( getFullyQualifiedClassName(descriptor.getMessageType().getContainingType(), descriptor.getMessageType().getFile().getOptions(), descriptor.getMessageType().getName()), '.'), beanContainer); default: throw new MappingException("Unable to find " + descriptor.getJavaType()); } }
/** * Generate a class name from a descriptor. Handles options such as java_multiple_files, java_package, and * java_outer_classname */ public static String genClassName(Descriptors.Descriptor descriptor) { String pkg = descriptor.getFile().getOptions().getJavaPackage(); String outerClassName = descriptor.getFile().getOptions().getJavaOuterClassname(); boolean multipleFiles = descriptor.getFile().getOptions().getJavaMultipleFiles(); StringBuilder sb = new StringBuilder(pkg); sb.append("."); if (multipleFiles) { sb.append(descriptor.getName()); } else { String baseClassName; if (!outerClassName.isEmpty()) { baseClassName = outerClassName; } else { String baseName = descriptor.getFile().getName(); baseName = baseName.substring(baseName.lastIndexOf('/') + 1); baseName = baseName.replace(".proto", "").replace(".protodevel", ""); baseClassName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, baseName); } sb.append(baseClassName) .append(".") .append(descriptor.getName()); } return sb.toString(); }
private String getNamespace(FileDescriptor fd, Descriptor containing) { FileOptions o = fd.getOptions(); String p = o.hasJavaPackage() ? o.getJavaPackage() : fd.getPackage(); String outer; if (o.hasJavaOuterClassname()) { outer = o.getJavaOuterClassname(); } else { outer = new File(fd.getName()).getName(); outer = outer.substring(0, outer.lastIndexOf('.')); outer = toCamelCase(outer); } String inner = ""; while (containing != null) { inner = containing.getName() + "$" + inner; containing = containing.getContainingType(); } return p + "." + outer + "$" + inner; }
/** * Returns the base component of the Java message package, for example, given * org.waveprotocol.pst.examples.Example1.Person: * <ul> * <li>Message = "org.waveprotocol.pst.examples"</li> * <li>MessageServerImpl (package suffix "server") = "org.waveprotocol.pst.examples"</li> * </ul> * * @return the base component of the Java package */ public String getPackageBase() { String javaPackage = descriptor.getFile().getOptions().getJavaPackage(); if (Strings.isNullOrEmpty(javaPackage)) { javaPackage = descriptor.getFile().getPackage(); } return javaPackage; }
/** * Returns the qualified type of the protobuf message, for example: * <ul> * <li>org.waveprotocol.pst.examples.Example1.Person = * "org.waveprotocol.pst.examples.Example1.Person"</li> * </ul> * * @return the full type of the protocol buffer message */ public String getProtoType() { Deque<String> scopes = Lists.newLinkedList(); for (Descriptor message = descriptor; message != null; message = message.getContainingType()) { scopes.push(message.getName()); } scopes.push(descriptor.getFile().getOptions().getJavaOuterClassname()); scopes.push(getPackageBase()); return Joiner.on('.').join(scopes); }
/** For internal use only. */ public boolean needsUtf8Check() { if (type != Type.STRING) { return false; } if (getContainingType().getOptions().getMapEntry()) { // Always enforce strict UTF-8 checking for map fields. return true; } if (getFile().getSyntax() == Syntax.PROTO3) { return true; } return getFile().getOptions().getJavaStringCheckUtf8(); }
private void processSchemaOptions(boolean processExtensionOptions) { if (processExtensionOptions) { RecordMetaDataOptionsProto.SchemaOptions schemaOptions = recordsDescriptor.getOptions() .getExtension(RecordMetaDataOptionsProto.schema); if (schemaOptions != null) { if (schemaOptions.hasSplitLongRecords()) { splitLongRecords = schemaOptions.getSplitLongRecords(); } if (schemaOptions.hasStoreRecordVersions()) { storeRecordVersions = schemaOptions.getStoreRecordVersions(); } } } }
@SuppressWarnings("unchecked") private static Class<? extends Enum> getEnumClassByEnumDescriptor(Descriptors.EnumDescriptor descriptor, BeanContainer beanContainer) { String name = StringUtils.join(getFullyQualifiedClassName(descriptor.getContainingType(), descriptor.getFile().getOptions(), descriptor.getName()), '.'); return (Class<? extends Enum>)MappingUtils.loadClass(name, beanContainer); }
/** For internal use only. */ public boolean needsUtf8Check() { return (type == Type.STRING) && (getFile().getOptions().getJavaStringCheckUtf8()); }
/** For internal use only. */ public boolean needsUtf8Check() { if (type != Type.STRING) { return false; } if (getContainingType().getOptions().getMapEntry()) { // Always enforce strict UTF-8 checking for map fields. return true; } if (getFile().getSyntax() == Syntax.PROTO3) { return true; } return getFile().getOptions().getJavaStringCheckUtf8(); }