for (ProtoMember protoMember : constant.options().map().keySet()) { Field optionField = schema.getField(protoMember); if (allOptionFieldsBuilder.add(protoMember)) { ProtoMember protoMember = allOptionMembers.get(i); Field field = schema.getField(protoMember); Object fieldValue = constant.options().map().get(protoMember); enumArgs[i + 1] = fieldValue != null ? fieldInitializer(field.type(), fieldValue) if ("true".equals(constant.options().get(ENUM_DEPRECATED))) { constantBuilder.addAnnotation(Deprecated.class);
path = resolveFieldPath(option.name(), extensionsForType.keySet()); String packageName = linker.packageName(); if (path == null && packageName != null) { path = resolveFieldPath(packageName + "." + option.name(), extensionsForType.keySet()); canonicalizeValue(linker, field, option.value())); return result;
void link(Linker linker) { ImmutableMap<ProtoMember, Object> map = ImmutableMap.of(); for (OptionElement option : optionElements) { Map<ProtoMember, Object> canonicalOption = canonicalizeOption(linker, optionType, option); if (canonicalOption != null) { map = union(linker, map, canonicalOption); } } this.map = map; }
Options retainAll(Schema schema, MarkSet markSet) { if (map.isEmpty()) return this; // Nothing to prune. Options result = new Options(optionType, optionElements); Object mapOrNull = retainAll(schema, markSet, optionType, map); result.map = mapOrNull != null ? (ImmutableMap<ProtoMember, Object>) mapOrNull : ImmutableMap.<ProtoMember, Object>of(); return result; }
void linkOptions(Linker linker) { linker = linker.withContext(this); options.link(linker); deprecated = options().get(DEPRECATED); packed = options().get(PACKED); // We allow any package name to be used as long as it ends with '.redacted'. redacted = options().optionMatches(".*\\.redacted", "true"); }
fieldBuilder.addJavadoc("$L\n", sanitizeJavadoc(constant.documentation())); if ("true".equals(constant.options().get(ENUM_DEPRECATED))) { fieldBuilder.addAnnotation(Deprecated.class);
static ImmutableList<Rpc> fromElements(ImmutableList<RpcElement> elements) { ImmutableList.Builder<Rpc> rpcs = new ImmutableList.Builder<>(); for (RpcElement rpcElement : elements) { rpcs.add(new Rpc(rpcElement.location(), rpcElement.name(), rpcElement.documentation(), rpcElement.requestType(), rpcElement.responseType(), rpcElement.requestStreaming(), rpcElement.responseStreaming(), new Options(Options.METHOD_OPTIONS, rpcElement.options()))); } return rpcs.build(); }
private FieldSpec optionsField(ProtoType optionsType, String fieldName, Options options) { TypeName optionsJavaType = typeName(optionsType); CodeBlock.Builder initializer = CodeBlock.builder(); initializer.add("$[new $T.Builder()", optionsJavaType); boolean empty = true; for (Map.Entry<ProtoMember, ?> entry : options.map().entrySet()) { if (entry.getKey().equals(FIELD_DEPRECATED) || entry.getKey().equals(PACKED)) { continue; } Field optionField = schema.getField(entry.getKey()); initializer.add("\n.$L($L)", fieldName(optionsType, optionField), fieldInitializer(optionField.type(), entry.getValue())); empty = false; } initializer.add("\n.build()$]"); if (empty) return null; return FieldSpec.builder(optionsJavaType, fieldName) .addModifiers(PUBLIC, STATIC, FINAL) .initializer(initializer.build()) .build(); }
void linkOptions(Linker linker) { options.link(linker); }
} else { ProtoMember protoMember = ProtoMember.get(context.type(), field); result.put(protoMember, canonicalizeValue(linker, field, option.value())); return coerceValueForField(context, result.build()); } else { ProtoMember protoMember = ProtoMember.get(context.type(), field); result.put(protoMember, canonicalizeValue(linker, field, entry.getValue())); return coerceValueForField(context, result.build()); ImmutableList.Builder<Object> result = ImmutableList.builder(); for (Object element : (List<?>) value) { result.addAll((List) canonicalizeValue(linker, context, element)); return coerceValueForField(context, result.build()); return coerceValueForField(context, value);
@Test public void resolveFieldPathMatchesAllSegments() throws Exception { assertThat(asList(Options.resolveFieldPath("a.b.c.d", set("a.b.c.d", "z.b.c.d")))) .containsExactly("a.b.c.d"); }
Multimap<ProtoType, ProtoMember> fields() { Multimap<ProtoType, ProtoMember> result = LinkedHashMultimap.create(); gatherFields(result, optionType, map); return result; }
private void markOptions(Options options) { for (Map.Entry<ProtoType, ProtoMember> entry : options.fields().entries()) { mark(entry.getValue()); } }
void linkOptions(Linker linker) { linker = linker.withContext(this); options.link(linker); deprecated = options().get(DEPRECATED); packed = options().get(PACKED); // We allow any package name to be used as long as it ends with '.redacted'. redacted = options().optionMatches(".*\\.redacted", "true"); }
@Test public void fieldOptions() throws Exception { Schema schema = new RepoBuilder() .add("message.proto", "" + "import \"google/protobuf/descriptor.proto\";\n" + "message Message {\n" + " optional int32 a = 1;\n" + " optional int32 b = 2 [color=red, deprecated=true, packed=true];\n" + "}\n" + "extend google.protobuf.FieldOptions {\n" + " optional string color = 60001;\n" + "}\n") .schema(); MessageType message = (MessageType) schema.getType("Message"); Options aOptions = message.field("a").options(); assertThat(aOptions.get(ProtoMember.get(FIELD_OPTIONS, "color"))).isNull(); assertThat(aOptions.get(ProtoMember.get(FIELD_OPTIONS, "deprecated"))).isNull(); assertThat(aOptions.get(ProtoMember.get(FIELD_OPTIONS, "packed"))).isNull(); Options bOptions = message.field("b").options(); assertThat(bOptions.get(ProtoMember.get(FIELD_OPTIONS, "color"))).isEqualTo("red"); assertThat(bOptions.get(ProtoMember.get(FIELD_OPTIONS, "deprecated"))).isEqualTo("true"); assertThat(bOptions.get(ProtoMember.get(FIELD_OPTIONS, "packed"))).isEqualTo("true"); }
static ImmutableList<Field> fromElements(String packageName, ImmutableList<FieldElement> fieldElements, boolean extension) { ImmutableList.Builder<Field> fields = ImmutableList.builder(); for (FieldElement field : fieldElements) { fields.add(new Field(packageName, field.location(), field.label(), field.name(), field.documentation(), field.tag(), field.defaultValue(), field.type(), new Options(Options.FIELD_OPTIONS, field.options()), extension)); } return fields.build(); }
@Test public void excludedTypePrunesTopLevelOption() throws Exception { Schema schema = new RepoBuilder() .add("service.proto", "" + "import \"google/protobuf/descriptor.proto\";\n" + "message SomeFieldOptions {\n" + " optional string a = 1;\n" + "}\n" + "extend google.protobuf.FieldOptions {\n" + " optional SomeFieldOptions some_field_options = 22001;\n" + " optional string b = 22002;\n" + "}\n" + "message Message {\n" + " optional string f = 1 [some_field_options.a = \"a\", b = \"b\"];\n" + "}\n") .schema(); Schema pruned = schema.prune(new IdentifierSet.Builder() .exclude("SomeFieldOptions") .build()); Field field = ((MessageType) pruned.getType("Message")).field("f"); Map<ProtoMember, Object> map = field.options().map(); Map.Entry<?, ?> onlyOption = getOnlyElement(map.entrySet()); assertThat(((ProtoMember) onlyOption.getKey()).member()).isEqualTo("b"); assertThat(onlyOption.getValue()).isEqualTo("b"); }
void link(Linker linker) { ImmutableMap<ProtoMember, Object> map = ImmutableMap.of(); for (OptionElement option : optionElements) { Map<ProtoMember, Object> canonicalOption = canonicalizeOption(linker, optionType, option); if (canonicalOption != null) { map = union(linker, map, canonicalOption); } } this.map = map; }
void linkOptions(Linker linker) { linker = linker.withContext(this); options.link(linker); }