public List<GrpcElementDocView> generateElementDocs( GapicProductConfig productConfig, ModelTypeTable typeTable, SurfaceNamer namer, ProtoContainerElement containerElement) { ImmutableList.Builder<GrpcElementDocView> children = ImmutableList.builder(); Set<String> lroTypes = productConfig .getInterfaceConfigMap() .values() .stream() .flatMap(i -> i.getMethodConfigs().stream()) .map(MethodConfig::getLongRunningConfig) .filter(Objects::nonNull) .flatMap(lro -> Stream.of(lro.getReturnType(), lro.getMetadataType())) .map(t -> ((ProtoTypeRef) t).getProtoType()) .map(TypeRef::getMessageType) .map(MessageType::getFullName) .collect(ImmutableSet.toImmutableSet()); Collection<MessageType> messages = containerElement .getMessages() .stream() .filter(m -> m.isReachable() || lroTypes.contains(m.getFullName())) .collect(ImmutableList.toImmutableList()); children.addAll(generateMessageDocs(productConfig, typeTable, namer, messages)); children.addAll(generateEnumDocs(typeTable, namer, containerElement.getEnums())); return children.build(); }
private void assertTypeInclusions(Model model, Iterable<String> includedTypeNames, Iterable<String> excludedTypeNames) { for (String typeName : includedTypeNames) { TypeRef type = model.getSymbolTable().lookupType(typeName); Assert.assertNotNull(type); Assert.assertTrue(type.isMessage() || type.isEnum()); if (type.isMessage()) { Assert.assertTrue(type.getMessageType().isReachable()); } else { Assert.assertTrue(type.getEnumType().isReachable()); } } for (String typeName : excludedTypeNames) { TypeRef type = model.getSymbolTable().lookupType(typeName); Assert.assertNotNull(type); Assert.assertTrue(type.isMessage() || type.isEnum()); if (type.isMessage()) { Assert.assertFalse(type.getMessageType().isReachable()); } else { Assert.assertFalse(type.getEnumType().isReachable()); } } }