跳到内容

变更日志

版本 5.3.1

2025-03-05

Gradle 插件

  • 改进远程缓存支持 (#3295)
  • 避免急切地解析配置 (#3302 by Kartikaya Gupta)

版本 5.3.0

2025-02-14

通用

  • 添加对 ProtoParser 和 ProtoFileElement 中弱导入的支持 (#3247 by paul35621)
  • 添加 Gradle 和 CLI 选项以彻底加载 protobuf schema (#3254 by Damian Wieczorek)

Swift

Gradle 插件

  • 移除对 Wire Gradle 插件中内部 Gradle API 的使用,这些 API 在 Gradle 8.13 中会导致崩溃。

版本 5.2.1

2025-01-07

JVM 生成

  • 修复 Wire Kotlin 生成器中对可变消息的支持 (#3233 by Rahul Ravikumar)

版本 5.2.0

2025-01-06

通用

  • 在解析嵌套组时强制执行递归限制 (#3119)

命令行工具 wire-compiler

  • 现在可以设置多个目标 (#3106 & #3107)
  • 为 Wire Gradle 插件在 4.9.2 中引入的选项 opaque_types 现在可用于 CLI (#3147)

JVM 生成

  • KotlinPoet 已更新到 2.0.0,这极大地改变了生成 Kotlin 文件的方式。这既不是源代码也不是二进制的重大更改。
  • 现在应用了一个新的 @WireEnclosingType 注解到生成的类型,以便 R8 不会过度裁剪 (#3123)
  • 当类型有超过 100 个字段时,将 redact 方法分割成块以避免编译错误 (#3214 by Damian Wieczorek)
  • 添加 Wire Kotlin 生成器中对可变消息的支持 (#3217 by Rahul Ravikumar)
  • 您可以通过在 Kotlin target 上添加 mutableTypes = true 来选择启用。这是不安全的,除非你有充分的使用场景,否则我们不建议使用它。
  • Wire 现在使用 Palantir 的 JavaPoet 而非 Square 的 JavaPoet。

Swift

  • 修复当类型嵌套超过 5 层时的缓冲区溢出和数据损坏 (#3203 by Eric Amorde)

版本 4.9.11

2024-10-09

通用

  • 读取属性时修复 Gradle 项目隔离问题 (#3078 by Aurimas)

版本 5.1.0

2024-09-11

通用

  • 支持 Kotlin 2.0.20 (#3093)
  • srcDir(String) 已取消弃用 (#3039)
  • 一些日志现在在 debug 级别输出,而不是 info 级别 (#3041)
  • 移除 Kotlin/JS 上一些无法处理的警告 (#3047)
  • 在裁剪后传播 EnumType 上的 deprecated 标志 (#3076 by Aaron Edwards)
  • 引入 ProtoReader32,这是针对 Kotlin/JS 的专用实现 (#3077)。它是 ProtoReader 的替代方案,后者使用 Long 作为游标。它最初是对 Kotlin/JS 的一项优化,因为在那里的 Long 游标开销过高。
  • 读取属性时修复 Gradle 项目隔离问题 (#3078 by Aurimas)
  • 更改递归限制以匹配 gRPC 的默认设置 (#3091)

Kotlin

  • 新的枚举选项 enum_mode 优先于在 5.0.0-alpha02 中添加的 enumMode 选项。如果想逐步迁移枚举,请使用此选项 (#2993)
  • 如果读取 trailers 失败,不要抛出异常 (#3087)

Swift

  • 避免在解析固定长度类型空的 repeated [packed=true] 时崩溃 (#3044 by Sasha Weiss)

版本 5.0.0

2024-07-15

通用

  • 防止不同类型但名称相似的选项冲突 (#3005)
  • 支持文件集合的所有 Gradle 条目 (#2946)
  • srcDir(String) 已弃用,推荐使用 srcDir(Any),后者更好地利用 Gradle 处理依赖 (#2880)

版本 5.0.0-alpha04

2024-06-21

通用

  • 使用内联 map 选项时不会崩溃 (#2997)

Swift

  • 在某些情况下转义 error 名称 (#2999 by Adam Lickel)

版本 5.0.0-alpha03

2024-06-19

JSON

  • 先前的 5.0.0 alpha 版本中增加了 JSON 序列化的性能下降。此更改已恢复。

版本 5.0.0-alpha02

2024-06-17

通用

  • ⚠ 路径和定义只有在 SchemaHandler 生成了内容时才会被正确声明 (#2943)
  • Wire Gradle 插件的任务不会急切地访问源 (#2923)
  • 修复 SchemaLoader 中的 UTF-32 BOM (#2937 by Endeavour233)
  • 添加对解析 extensionRangeOptions 的支持 (#2966)

Kotlin

  • 在将 Response 转换为 GrpcException 时暴露 gRPC URL (#2920 by Travis Johnson)
  • 使用 builders 时支持非常长的字段名 (#2959)
  • Kotlin targets 中添加了新的 enumMode 选项,以便将枚举类型生成为 sealed classes。它的值可以是 enum_class(默认值)或 sealed_classenum_class 会将枚举类型生成为 Kotlin enum classes,这是当前行为。sealed_class 会将枚举类型生成为 Kotlin sealed classes,将枚举类型的每个常量生成为 data objects。在这些常量之上,sealed class 将包含一个 Unrecognized data class,如果运行时没有匹配的常量,它将包含此枚举的实际解码值。这类似于 protoc 为 proto3 枚举生成 UNRECOGNIZED(-1) 常量 的功能。但是请注意,Wire 不仅将此选项限制于 proto3 枚举,它也可用于 proto2 枚举。
wire {
  kotlin {
    enumMode = "sealed_class"
  }
}

将枚举生成切换为 sealed class 可能会破坏消费者的调用端代码。为了允许枚举从/到 sealed classes 的逐步迁移,还创建了一个 Protobuf 枚举选项。在 .proto 文件中设置此选项时,它将优先于全局枚举模式。

import "wire/extensions.proto";

enum Period {
  option (wire.enum_mode) = "sealed_class"; // or `enum_class`.
  CRETACEOUS = 1;
  JURASSIC = 2;
  TRIASSIC = 3;
}

版本 5.0.0-alpha01

2024-04-16

通用

  • ⚠ 默认拒绝未使用的剪枝和根节点 (#2846)。此行为过去是选择启用,现在是选择退出。您可以在 wire { } 块中添加 rejectUnusedRootsOrPrunes = false 来选择退出。
  • ⚠ 移除弃用的 SchemaHandler#create 方法 (#2851)。如果您还没有这样做,请改为覆盖其他方法 create(includes, excludes, exclusive, outDirectory, options): SchemaHandler
  • ⚠ 通过 srcJar 添加项目依赖过去可行,但现在不行了。
  • 当规则是 '*' 时,不要警告未使用的 emitting 规则 (#2829)
  • 我们的 Wire Gradle 插件的内部结构已重构,不应预期行为会改变。如果发现任何不同,请告知我们
  • 允许在 WireCompiler 中传递自定义选项 (#2909)

Kotlin

  • 将请求超时传播为 grpc-timeout (#2840 by Francisco Rojas)
  • 手动设置时不要覆盖 RealGrpcCall.timeout (#2893 by Jeff Gulbronson)
  • 发布 gRPC Dispatcher (#2872)。提供了一个新的 gRPC 测试辅助类 GrpcDispatcher,位于 com.squareup.wire:wire-grpc-mockwebserver 下。请注意,它不支持流式调用。如果你想贡献,请这样做!

Swift

  • ⚠ 重构了扩展的发出方式,并提供了新的 API 来获取/设置扩展字段。由于上述重构,定义在扩展中的 Codable 字段现在会在此更改中中断。所有这些由 Dimitris KoutsogiorgasAdam Lickel 完成!

wire-grpc-server

版本升级

  • kotlin -> 1.9.23
  • kotlinpoet -> 1.16.0
  • okhttp -> 5.0.0-alpha.12
  • okio -> 3.9.0

版本 4.9.9

2024-04-02

通用

  • 向下移植 Android SDK 26 以下版本的 JSON 序列化 (#2881 by Damian Wieczorek)

版本 4.9.8

2024-03-18

通用

  • 保留在 maps 中使用的类型的导入 (#2864)

版本 4.9.7

2024-02-12

通用

版本 4.9.6

2024-02-02

通用

Kotlin

版本 4.9.5

2024-01-27

通用

  • 修复当文件中只有选项类型被扩展时过度裁剪导入的问题 (#2800 by Michael Peyper)

版本 4.9.4

2024-01-26

通用

  • 为 wire-runtime 模块添加 linuxArm64 目标 (#2733 by Shay Oinif)
  • 添加用于长度分隔流读取的 ProtoReader API (#2747 by Jake Wharton)
  • 您现在可以调用 ProtoReader#nextLengthDelimited 来读取并返回长度分隔流中下一条消息的长度。
  • 确保 ConsoleWireLogger 在静默模式下不打印任何内容 (#2754 by Dimitris Koutsogiorgas)
  • 提供一个内置的公共 EmptyWireLoggerFactory 类 (#2776 by Dimitris Koutsogiorgas)
  • 停止记录 includes 和 excludes (#2777)
  • 在 native 和 JS 上实现 Duration 和 Instant 的 equals/hash (#2781)
  • 裁剪 schema 中保留实体不再使用的导入 (#2797 by Michael Peyper)

Kotlin

  • 生成 Grpc SERVICE_NAME 作为 const (#2773 by Marius Volkhart)
  • KotlinGenerator 中使用 %N 确保名称被转义 (#2784 by Egor Andreevich)
  • 为 Kotlin target 添加 escapeKotlinKeywords 参数 (#2785 by Egor Andreevich)
  • 现在可以在 kotlin {} targets 中设置 escapeKotlinKeywords = true,用反引号转义 Kotlin 关键字,而不是在其后添加 _
  • 不要重新传输 PipeDuplexRequestBody (#2791)
  • 当 OkHttp 尝试重试发送 gRPC 流连接的请求体时,会发生崩溃。

Swift

公告

Wire 5.0 即将发布。以下将发生变化:

  • SchemaHandler.Factory#create() 将被移除。覆盖其对应方法 SchemaHandler.Factory#create(includes: List<String>, excludes: List<String>, exclusive: Boolean, outDirectory: String, options: Map<String, String>) 以便无痛迁移。
  • 模块 wire-grpc-server 将被提取到其自己的仓库中:https://github.com/square/wire-grpc-server/
  • 如何迁移:// TODO

版本 4.9.3

2023-11-23

  • Breaking: Swift 中负 Int32 的编码和解码是错误的,不符合 protobuf 规范。负 Int32 现在被正确编码为无符号 Int64。使用此版本及更高版本将无法正确解码先前版本的 Wire 序列化包含负 Int32 字段的 proto。
  • Fix: Swift ProtoDefaulted 在跨模块上下文中应用不正确
  • Fix: Message 的 Builder 不会在 multiplatform 项目上导致编译失败。
  • Fix: 在 gRPC 中接收到意外响应时不再卡住。

版本 4.9.2

2023-11-13

  • New: 不透明类型 (Opaque types)。您现在可以指定希望 Wire 评估为 bytes 类型 的类型。在代码生成时,这些类型的字段将使用平台等效的 bytes 类型,例如 JVM 的 okio.ByteString。如果存在您不使用的依赖繁重的类型,请使用此功能。请注意,标量类型不能不透明化。
  • New: 在生成类型中添加了一个闭包,允许通过 Kotlin DSL 创建实例。
  • Fix: 不要随意裁剪 oneOf 选项。
  • Change: Swift Defaulted 已重命名为 CustomDefaulted
  • New: Swift ProtoDefaulted 属性包装器和 ProtoDefaultedValue 协议
  • 与 `CustomDefaulted 类似,这添加了协议定义的默认值的投影
  • 这不应该占用任何额外的存储空间
  • 这附加到可选标量值和具有完全可选值的消息
  • New: ProtoDefaultedCustomDefaulted 包含 setter 支持
  • 这使你可以执行类似 Foo().$bar.$baz += 1 的操作
  • Change: Swift ProtoEnum 类型现在具有 Int32 的原始值。
  • 运行时和生成的代码都需要更新以反映此变化。

版本 4.9.1

2023-09-26

  • Fix: 缺少 Swift 导入。

版本 4.9.0

2023-09-20

  • Fix: Swift 生成所有 Storage 属性。这缓解了 dynamicMemberLookup 的性能问题
  • Change: Swift 代码生成已重新排序以提高可读性
  • Change: Wire 选项 use_array 的类型已从 string 更改为 bool,其标签已从 1180 更改为 1185。
  • New: Swift 属性包装器 @CopyOnWrite。@Heap 现在已弃用,并将在 2024 年 11 月移除。
  • New: 剪枝成员时支持通配符,例如 my.namespace.Type#another.namespace.*。如果想剪枝扩展字段,这很方便。
  • New: 定义没有源集的 protoLibrary 时添加警告,这在 native 和 JavaScript 平台会发生。
  • New: project(..) 依赖项现在明确限制在 JVM 上,否则 Wire 无法选择正确的平台来解析它们。
  • New: 当 protoLibrary = true 时,Wire 运行时 proto 文件,例如 google/protobuf/descriptor.protowire/extensions.proto 将不再被发出。
  • New: 现在可以通过 WireCompiler 配置自定义 logger。
  • New: wire-schemawire-schema-tests 现在可用于 JavaScript 和 native 平台。
  • Update: Okio 更新到 3.5.0。使用 Wire 时,所有 java.nio 文件系统现在都应该受支持。
  • Update: Kotlin 更新到 1.9.10,Gradle 更新到 8.x,以及许多其他库更新到最新版本。

版本 4.8.1

2023-08-17

  • New: Swift 消息现在具有 init(REQUIRED FIELDS, (inout Storage) -> Void) 的形式
  • New: Swift,默认情况下已移除成员初始化器。通过定义 WIRE_INCLUDE_MEMBERWISE_INITIALIZER 可以重新启用它;但是,它将在 2024 年 11 月移除。详情请参阅 https://github.com/square/wire/pull/2561
  • Fix: 正确定义 Wire 生成代码的 sources 文件夹 vs resources 文件夹。
  • Fix: 生成的 `.proto` 已正确添加到构建产物中。
  • New: KotlinTarget 的所有选项均可在 CLI 上使用。

版本 4.8.0

2023-07-21

  • Fix: JSON 到 Kotlin 的反序列化现在真正地能够防范 Class.getDeclaredFields 随机排序的问题。
  • Fix: 进行动态序列化时现在支持 proto3 类型(如 DurationStruct 等)。
  • Fix: GrpcStatus 现在可序列化,从而支持 GrpcException 序列化。
  • New: GrpcClient 现在是抽象类。您可以自定义网络调用的实现方式。
  • New: 您现在可以传递一个事件监听器来接收指标事件。
  • New: Wire Gradle 插件的新选项。rejectUnusedRootsOrPrunes = true 将在重构 schema 时检查是否有未使用的 roots 或 prunes,如果有则构建失败。这有助于及早发现不正确的配置,并避免对构建的 schema 产生错误期望。
  • New: OneOf 的选项现在已加载到 schema 中。
  • New: 如果 Wire 检测到类型名称冲突(当同一个文件从不同路径加载时可能发生),它将失败。
  • New: wire-schema-tests 现在是多平台的。
  • New: SchemaHandler.Factory 现在可以接收 Wire Gradle 插件中设置的 payload。实现方法 fun create(includes, excludes, exclusive, outDirectory. options): SchemaHandler 来接收它。
  • New: 自定义 targets 现在可以将自定义 payload 传递给它们的 SchemaHandler.Factorycustom {} 现在在其新字段 options 中接受一个 map。到其新字段 options
  • Swift: 默认值现在通过 Defaulted 属性包装器生成。
  • Swift: 完全限定 Foundation.Data 以防止与名为 Data 的消息发生名称冲突。
  • Move: 一些类型已从 wire-compiler 移动到 wire-runWireRunTargetDirectedAcyclicGraphPartitionedSchema
  • Dependency: KotlinPoet 已升级到 1.14.2

版本 4.7.2

2023-06-18

  • Swift: 解决 Redactable 回归问题。

版本 4.7.1

2023-06-16

  • Swift: 堆类型应使用 DynamicMemberLookup 进行存储。
  • Fix: 不要丢弃 protoPath 中的 wire_package。
  • Fix: 标准化 boxed oneof 字段名称的冲突策略。
  • Fix: 在 SchemaEncoder 中支持所有标量类型。

版本 4.7.0

2023-05-24

  • New: 添加一个 dry run (空运行) 选项。如果启用,编译器将仅向标准输出发出本来会生成的源文件名称。您可以配合 Wire 编译器使用 --dry_run 标志,或者在 Gradle 中按如下方式定义选项

wire {
  dryRun = true
}
Fix: 如果 protoLibrary 设置为 true,则正确设置 processResources 的任务依赖项。Fix: 如果存在有效的 grpc-status 头,则抛出 GrpcException 而非 IOException。

版本 4.6.2

2023-05-11

  • Fix: 显式将 multiplatform artifacts 的 jvm 变体添加到 BOM 中。
  • Fix: 在裁剪后为没有字段的消息生成 Descriptor。

版本 4.6.1

2023-05-10

  • Fix: 处理长度前缀为 0 的消息。
  • Swift: 升级到 1.5

版本 4.6.0

2023-05-01

  • Fix: 版本 4.5.6 有一个重大更改,已在 4.6.0 中恢复,且未丢失任何功能。
  • Update: 从 protocolbuffers/protobuf7dbe742 版本更新 descriptor.proto

版本 4.5.6(注意:此版本包含重大更改,请直接更新到 4.6.0 以避免)

2023-04-25

  • Fix: JSON 序列化现在能够防范 Class.getDeclaredFields 随机排序的问题。
  • Perf: 添加选项 wire.use_array,用于 packed scalars 使用基本类型数组。这应该可以提高性能,因为它避免了在 JVM 上的自动装箱。

它将使用适当的数组类型,例如 repeated float 将表示为 FloatArray

2023-04-12

  • 版本 4.5.5

Perf: 优化 packed scalar 列表在初始分配时的大小。

2023-03-31

  • 版本 4.5.4

Kotlin: 升级到 1.8.20

2023-03-23

  • 版本 4.5.3
  • Swift: 修复 proto3 消息并非总是省略带有默认值的字段的问题。
  • Multiplatform: 如果配置要求,现在会生成 Builders 及其方法。
  • Multiplatform: 不再重复生成或任务命名错误。任务依赖项已修复。
  • Multiplatform: 添加了 mingwX64 目标。

Kotlin: 升级到 1.8.20RC

2023-03-06

  • 版本 4.5.2
  • Fix: 访问 ProtoAdapter 时使用 rawType 的 classloader。
  • gRPC: 解码 grpc-status-details-bin 并将其添加到 GrpcException
  • Swift: 修复字符串长度为 4 的倍数时的 base64url 解码问题。

JSON: 支持 proto3 默认参数不存在时的反序列化。

2023-02-11

  • 版本 4.5.1
  • 修复 swift Copy-on-Write 行为。

支持 proto2 中 camelCased 字段的反序列化。

2023-02-02

  • 版本 4.5.0
  • 添加对 tvOS 的支持。

添加从命令行提供自定义 schema handler 的能力。

  • Swift
  • 为所有生成类型添加 Sendable 一致性。
  • 改进对 Proto3 类型的支持,例如 StructAnyDurationTimestamp
  • @JsonString 已弃用,并将在未来的版本中移除。
    • Codable 一致性已完全重写,应更符合规范。
    • 这是一个某种程度上的重大更改,很大程度上取决于您使用的类型。
    • 值得注意的是:非字符串键的字典与新模型不向前兼容。
    • 更正后的编码与旧模型不向后兼容。
      • 编码修复
      • unknownFields 不应再被编码。
      • 默认情况下不编码默认值(可配置)。
      • 默认情况下以 camelCase 编码字段名(可配置)。
      • 默认情况下将 Enums 编码为 Strings(可配置)。
    • Maps 现在将始终将其键编码为 Strings。
      • 解码修复
      • Data 现在支持 base64 和 base64url 二进制格式。
      • 未知枚举值可以选择性地跳过。
      • 同时接受 camelCase 和 snake_case 键名。首选 camelCase。

版本 4.4.3

2022-10-26

  • 修复:当构建项目使用 Kotlin 1.7.20 时,不再出现 NPE。

版本 4.4.2

2022-10-06

  • 修复:使用 KotlinProjectExtension 访问源集。
  • 修复:改进对 ZIP artifact 的支持。
  • 修复:当设置为 true 时,buildersOnly 在生成 Kotlin 代码时将优先于 javaInterop
  • 修复:支持消息中的嵌套扩展。

版本 4.4.1

2022-08-05

  • 新增:检查传递给 GrpcClient 的客户端是否设置了 HTTP2 协议。
  • 新增:为 Java 和 Kotlin 目标添加 buildersOnly 选项,将其设置为 true 将更改生成类型的构造函数的可见性为非公共。
  • 修复:在 wire-schema 中正确定义 okio 的 api 依赖。
  • 修复:对输入位置进行排序,使其在所有平台上匹配。
  • 修复:使用 kotlin 1.7.20 时,避免源集周围的 NPE。
  • 更新:将 KotlinPoet 升级到 1.12.0

版本 4.4.0

2022-06-07

  • 新增:自定义模式处理器!Wire 现在允许您插入自己的逻辑,以您希望的方式处理 protobuf 模式。详情请查看我们的文档。您还可以查看我们的示例目录。请注意,此 API 废弃了 Wire 此前拥有的 CustomHandlerBeta 类型。
  • 新增:现在可以使用新的 SchemaBuilder 类轻松创建内存中的 protobuf 模式。此功能位于新的 wire-schema-tests artifact 中。用法示例请查看自定义处理器示例中的测试。
  • 重大变更:wire-profiles artifact 已移除,并已内联到 wire-schema 中。
  • 重大变更:CoreLoaderisWireRuntimeProto 方法现在是静态的。
  • 重大变更:SchemaLoader 及相关类已从 wire-compiler 移至 wire-schema
  • 新增:支持 Kotlin 在转换为/从 JSON 时处理 packed 和 map 字段。
  • 新增:在 Wire 插件中支持 typesafe accessor 和 version catalog。
  • 新增:为重复选项生成注解。
  • 新增:允许解析 oneof 选项。
  • 新增:支持选项中的 map 字段。
  • 新增:为支持 mac 的 KMP 项目添加 macosArm64 支持。
  • 修复:正确处理标量类型的 map,将缺失的标量键/值反序列化为 identity。
  • 修复:修复 ProtoMember 填充了错误数据导致的崩溃。

版本 4.3.0

2022-03-24

  • 新增:Wire 现在遵守枚举类型中的保留标签和名称。
  • 修复:max 关键字现在可以正确解析枚举类型。
  • 修复:Wire 现在在 proto3 中写入负零双精度浮点数和负零单精度浮点数。
  • 修复:Wire 不再写入 google wrapper 类型的 identity 值。
  • 修复:CoreLoader 正确加载项目中 resources 中存在的 .proto 文件。
  • 修复:在 GrpcCalls 中传播 GrpcExceptions
  • 修复:更改 GrpcCall.isCanceled 以遵守 OkHttp 取消操作。

版本 4.2.0

2022-02-17

  • 新增:发布 Wire 的物料清单 (BOM)。从 Gradle 或 Maven 依赖 BOM,可以将所有 Wire artifact 保持在同一版本,即使它们是通过传递依赖声明的。声明其他 Wire 依赖时甚至可以省略版本。

    dependencies {
      implementation(platform("com.squareup.wire:wire-bom:4.2.0"))
      implementation("com.squareup.wire:wire-compiler")      // No version!
      implementation("com.squareup.wire:wire-gradle-plugin") // No version!
      implementation("com.squareup.wire:wire-grpc-client")   // No version!
      // Etc.
    }
    

版本 4.1.1

2022-02-15

  • 修复:在 ConsoleWireLogger 中打印目标名称。
  • 修复:当字段或常量名称以数字开头时,尽早抛出异常。
  • 更新:将 SwiftPoet 升级到 1.3.1
  • 修复:Wire 不会为 repeated 选项生成注解。

版本 4.1.0

2022-01-28

  • 新增:使用 Wire JSON 工厂时,现在可以覆盖 proto3 写入 JSON 时跳过默认值的行为。将 WireJsonAdapterFactoryWireTypeAdapterFactorywriteIdentityValues 设置为 true 即可启用此功能。
  • 重大变更:WireLogger 方法已重构,以移除平台依赖并允许更精确的回调。未来我们可能会添加新方法以进一步改进日志记录。
  • 移除:WireCompiler 中的 dry-run 选项已移除。
  • Swift:WireCompiler podspec 现在由一个 jar 提供支持,因此消费者在 pod install 时无需在本地构建它。

版本 4.0.1

2021-12-07

  • 修复:在 Swift 生成时,当枚举位于 oneof 中时不会编译失败。

版本 4.0.0

2021-12-03

  • 新增:添加 'nameSuffix' 参数以配置 Kotlin 中生成的服务类名称。
  • 新增:在 @WireField 中定义 oneofName
  • 新增:为 Kotlin multiplatform 启用 iosSimulatorArm64。
  • 新增:在 ProtoAdaper.sourceFile 中暴露源 .proto 文件。对于内置类型和在此版本之前生成的类型,此值为 null。
  • 新增:生成的 Kotlin 代码成员的声明顺序与相应的 .proto 文件中的声明顺序一致。在之前的版本中,生成的成员按种类(字段、oneofs)排序,然后按声明顺序排序。在此更新后,仅使用声明顺序。注意:这将改变这些消息的编码字节。 此更改向前和向后兼容。Wire 版本之间相同消息的相同编码通常是典型的,但不能保证,这是少数改变编码的版本。如果您对编码的 proto 消息进行加密哈希,您会注意到在此版本中哈希值是不同的。
  • 新增:SchemaLoader 中的选项,用于穷尽加载导入的文件。默认情况下,我们只加载生成代码所需的直接内容;此新选项会将所有可到达的内容加载到 schema 中。
  • 新增:用于修剪 schema 的编程 API。请参阅 wire-schema 中的 Pruner
  • 新增:SchemaLoader 不再扩展 Closeable 接口。
  • 新增:在 Gradle 插件中支持 rpcRole = 'none',以生成客户端和服务器代码。
  • 新增:支持 Android variants。
  • 新增:支持 srcJar includes 中的 glob 语法。
  • 新增:支持特殊的浮点文字。
  • 新增:Swift 支持 TimestampDuration
  • 新增:Wire 插件要求设置输出。之前,它默认生成 Java 代码;现在如果没有定义输出,它会抛出异常。
  • 新增:我们 Java 和 Kotlin 目标的 emitAppliedOptions 默认值现在设置为 true。
  • 新增:Wire 应该在 Windows 上正确构建和执行。
  • 新增:@WireRpc 新增 sourceFile 属性。
  • 新增:GrpcClient.Builder.minMessageToCompress() 配置哪些消息被压缩。如果大小为 Long.MAX_VALUE,则会完全禁用压缩。我们遇到过一些 Golang gRPC 服务器不支持压缩的问题;将其设置为 MAX_VALUE 对于与它们进行互操作是必要的。
  • 新增:SchemaReflector 是我们gRPC 服务器反射协议的初步实现。请注意,虽然我们实现了 gRPC 反射的业务逻辑,但我们不提供内置于 Wire 中的 gRPC 服务器。
  • 新增:wire-reflector 捆绑了它所基于的 gRPC reflection.proto
  • 新增:wire-runtime 暴露了一个反映项目版本的 com.squareup.wire.VERSION 常量。
  • 新增:更改 Gradle 插件,使(不稳定)自定义处理器可以用实例而不是类名进行配置。
  • 修复:使用 SchemaLoader.loadExhaustively 时更积极地加载传递文件。
  • 修复:已解决无 builder 的 Kotlin 类型的 JSON 序列化中的 bug。
  • 修复:使用 LEGACY 和 IR 编译器编译 Kotlin/JS。
  • 修复:在 GrpcCall.clone() 上进行深度复制元数据。
  • 修复:避免在 Gradle 插件中使用绝对路径破坏任务缓存。Wire 现在在任何用作缓存键的属性中使用相对于项目的路径。
  • 修复:当 option 包含 repeated 字段、enum 或 double 时,编码 schema 不会崩溃。
  • 修复:在 wire-moshi 中不依赖 moshi-kotlin。这导致了对 kotlin-reflect 的传递依赖,这是我们不需要也不想要的。
  • 修复:当 enum constant 名称为 nameordinal 时,不会生成无效代码。
  • 修复:如果 protobuf 输入已更改,则不重新使用缓存。
  • 修复:为定义为 enum constant 列表的选项值发出正确的 protobuf 格式。
  • 修复:明确将 Wire gRPC 服务器生成定义为实验性:该功能尚未完成。
  • 修复:为 deprecated 的消息、字段、枚举和枚举常量生成 @Deprecated 注解。
  • 修复:处理 Kotlin 构造函数初始化时无序的 proto 字段。
  • 修复:处理 Wire gRPC 中双向调用的写入/读取异常。
  • 修复:在 Java 中,重命名实例以避免字段和类名冲突。
  • 修复:导入时定位根包中的文件。
  • 修复:使用 Address Sanitizer 在 Swift 中发现的内存修复。
  • 修复:解码 protobuf 编码的布尔值时允许除 01 以外的值。之前,我们对其他值会抛出 IOException;现在所有非零值都为 true。
  • 修复:Redact boxed OneOf 字段。
  • 修复:Redacted Kotlin 标量现在遵守可空性。
  • 修复:将 schema 作为 .proto 文件发出时保留字段顺序。
  • 修复:反转 SchemaReflector 中依赖文件的拓扑排序。我们遇到了 grpc-curl 的问题,它期望请求的文件首先列出。
  • 修复:支持 Kotlin 生成的注解在 Java 字段上。
  • 修复:支持将无 builder 的 Kotlin 生成类序列化为 JSON。
  • 修复:支持在 CustomHandlerBeta 中报告错误。
  • 修复:在 Kotlin 中抑制生成的 enum 的 fromValue 方法的 deprecated 警告。
  • 修复:Swift 适配器在遇到 unexpected 的 ProtoReader.beginMessage() 时将抛出错误,而不是调用 fatalError()
  • 修复:更新 Wire Gradle 插件,在生成代码之前清除输出目录。这避免了删除消息类型后需要进行 clean build。
  • 修复:更新 Wire Gradle 插件,将生成的 .java 源注册到 Java 编译器。之前如果安装了 Kotlin 插件,此功能会失效。
  • 修复:使用 Gradle 的日志机制减少 Wire 生成代码时的输出。
  • 修复:在 Kotlin 生成代码中引用自定义适配器时使用正确的类型。
  • 修复:使用相对路径敏感性和文件集合。
  • 修复:验证整个包中 enum constant 的唯一性。
  • 修复:Wire Gradle 插件任务已现代化,支持配置缓存。
  • 修复:Wire 将不会为 Java、Kotlin 和 Swift 生成各自的内置类型。这些通常是 google 类型,Wire 将提供自己的实现。
  • 升级:将 KotlinPoet 更新到 1.8.0
  • 升级:OkHttp 4.9.3
  • 升级:Okio 3.0.0。我们现在在 SchemaLoader 中使用 Okio 3 的 FileSystem,这使得从 classpath 加载 .proto 文件更加容易。这与 Okio 3.0 alpha 版本存在二进制不兼容。
  • 移除:移除对 emitKotlinxSerialization 的支持。

版本 3.7.1

2021-11-03

  • 修复:正确加载位于根目录且无包的 schema。

版本 3.7.0

2021-03-25

  • 新增:srcProject(":project-name") 使依赖其他项目的 .proto 文件更加容易。
  • 修复:在 Gradle 插件配置时,不要求 .proto 目录存在。这之前阻止了 Wire 使用其他任务的输出作为其输入。
  • 修复:如果选项带有 . 前缀,不会失败。

版本 3.6.1

2021-03-09

  • 修复:Wire Gradle 插件现在支持仅 Java 的 Android 项目。
  • 修复:在 Wire Gradle 插件中,如果存在 include 选项,sourcePath 现在只会包含使用 include 定义的 protos。之前即使使用了 include,它也会包含所有现有的 .proto 文件。
  • 新增:在 Swift 中完全支持 JSONString 的 Optional Int64 和 UInt64。

版本 3.6.0

2021-02-08

  • 新增:当 protoPathprotoSource 依赖于一个项目时,自动添加依赖。
  • 新增:protoPathprotoSource 依赖默认情况下不再是传递的。
  • 新增:Wire Gradle 插件的新 protoLibrary 选项。将项目配置为 protoLibrary 将导致生成的 .jar 文件包含 .proto 源码。
  • 新增:生成普通 gRPC 服务器的代码。Kotlin 目标现在有一个新的 grpcServerCompatible 选项,如果设置为 true,将生成 gRPC 服务器兼容的类。
  • 新增:引入 GrpcException
  • 新增:为请求添加 GrpcMethod tag。
  • 新增:为 Moshi JSON 适配器添加 redacting 支持。
  • 新增:发布 Gradle 插件的插件标记。
  • 修复:在 Kotlin 生成代码文档中转义方括号。
  • 修复:改进了 proto 解析性能。

版本 3.5.0

2020-10-27

  • 新增:Wire Gradle 插件改进
  • 现在为每个可用的源(main、Android variants 等)创建一个任务。
  • wire-runtime 依赖项会自动添加。
  • 生成的代码目录会自动添加到其模块的源集中。
  • 新增:Wire 的 proto 解析器现在知道 oneOfOptions
  • 新增:当两个枚举常量模糊不清时(例如 ZEROzero),Wire 将抛出异常。
  • 新增:Bytes 选项不再符合作为注解成员的条件。
  • 修复:proto3 中的可选字段现在生成为可空字段。
  • 修复:JSON camel-casing 已更新,以符合最新的 protobuf 规范。
  • 修复:改进了 gRPC 失败时的异常消息。
  • 修复:允许 ; 作为选项 map 中的条目分隔符。
  • 修复:当与目标生成平台的关键字冲突时,枚举常量现在可以正确转义。
  • 修复:更新到 KotlinPoet 1.7.2,它在 Kotlin 代码的生成方式上做了很多更改。

版本 3.4.0

2020-09-24

  • 新增:停止将枚举常量选项作为字段为 Kotlin 发出。
  • 新增:Wire Gradle 插件任务现在可缓存。
  • 新增:新的 GrpcCall 函数,用于帮助实现 fake。
  • 新增:更改 GrpcStreamingCall.execute() 以支持结构化并发。

版本 3.3.0

2020-09-14

  • 新增:Proto3 支持!这包括新的行为、新的类型以及 JSON。
  • 新增:Swift 支持 proto2 schema。详细信息请参阅我们的博客文章
  • 新增:Wire 现在在以下情况下会抛出错误:
  • 两个生成的文件最终相互覆盖,
  • 导入形成循环,
  • 包形成循环。可以使用标志 permitPackageCycles 关闭此功能,
  • 源集中某个选项无法解析,
  • 消息成员或服务 rpc 名称重复,
  • map 用作扩展。
  • 新增:支持 json_name 伪选项。
  • 新增:wire_package 文件选项允许设置从相关文件生成的类将放置的 JVM 包。wire_package 优先于 java_package
  • 新增:Kotlin 生成代码中的列表和 map 现在是不可变的。
  • 新增:支持 proto 文件中的带 BOM 的 UTF-8。
  • 新增:wire.sincewire.until 已在 EnumValueOptions 中重命名为前缀 constant_
  • 新增:Wire 会 1) 为选项生成注解,2) 将这些注解分配给适当的生成代码。这两种行为都可以通过以下标志开启或关闭:
  • emitDeclaredOptions:为在消息、字段等上声明的选项生成类型。默认为 true,
  • emitAppliedOptions:为在消息、字段等上应用的选项生成注解。默认为 false。
  • 修复:递归 map 值。
  • 修复:equals 和 encodedSize 函数中的长表达式。

版本 3.2.2

2020-05-15

  • 修复:JSON 序列化正确发出所有值。

版本 3.2.1

2020-05-02

  • 新增:Wire Gradle 插件上的 onlyVersion 选项,用于定位唯一版本。总的来说,支持许多客户端的服务代码会通过 sinceVersionuntilVersion 定位范围,而客户端代码会通过 onlyVersion 定位唯一版本。
  • 新增:支持 Proto3 中的可选字段。
  • 修复:恢复 GrpcClient.create API 以创建 gRPC 接口的实现。

版本 3.2.0

2020-04-23

  • 新增:成员和枚举值上的 wire.sincewire.until 选项。您可以使用这两个选项修剪字段或常量。使用 Wire Gradle 插件生成代码时,定义 sinceVersion 和/或 untilVersion 来限定生成的代码。
  • 新增:Kotlin 和 Java 中消息的 toString 方法现在会转义字符串值,以便于解析。
  • 修复:构建 Schema 时每次都链接整个 descriptor.proto
  • 修复:正确处理 Java 和 Kotlin 中以目标语言关键字命名的成员。
  • 修复:发出/读取以关键字命名的成员时,在 JSON 中使用声明的名称作为键。
  • 修复:长标识符生成的 Kotlin 代码格式错误。
  • 修复:使 Wire Gradle 插件与即时执行兼容。

版本 3.1.0

2020-02-06

此版本包含对 wire-schema 模块的重大非向后兼容 API 更改。这将破坏使用 Wire 的 schema modeling 作为独立库的工具。我们正在对这个组件进行重大更改,并且牺牲了 API 兼容性以加速这些改进。

  • 新增:Wire Gradle 插件中的 proto { ... } 目标。使用此功能对 .proto 文件集合执行基本的源代码转换。我们使用它来修剪大量的 protos,只保留应用程序使用的子集。
  • 修复:支持所有形式的保留扩展,例如 extensions 1, 3 to 5, 7;
  • 修复:当 .proto 文件未更改时,不重新生成源文件。
  • 新增:includesexcludesrootprune 优先考虑最精确的规则。之前 excludes 总是优先于 includesprune 总是优先于 root
  • 修复:在 Kotlin 中为 enclosing 类型生成不可实例化的类。当嵌套类型被保留但其 enclosing 类型被修剪时,会生成此类。
  • 修复:当 profile 找不到依赖项时,不会构建失败。

版本 3.0.3

2019-12-23

从这个版本开始,Wire Maven 插件不再维护,并已从仓库中移除。

  • 新增:Kotlin 中支持自定义选项。
  • 新增:Kotlin 1.3.61。
  • 新增:在 WireRun 和 Gradle 插件中添加对自定义目标的支持。
  • 新增:改进加载单独的 sourcePathprotoPath 时的 schema 评估算法。
  • 新增:延迟加载 protoPath 内容。
  • 新增:可以自定义 Gradle 插件的配置。
  • 新增:可以自定义 Gradle 插件的 generateProtos 任务。
  • 修复:在 Kotlin 中为 packed 字段使用正确的 ProtoAdapter
  • 修复:正确处理字段和 enclosing 类型之间的名称冲突。
  • 修复:保留从 protoPath 加载的文件的包名。
  • 修复:ProtoPruner:正确评估 Pruner 的可达对象。
  • 修复:ProtoPruner:确保 --excludes 正确修剪选项。
  • 修复:ProtoPruner:修剪时保留使用的 ServiceOptionsMethodOptions

版本 3.0.2

2019-11-22

  • 修复:如果消息字段名是 Kotlin 关键字,则生成正确的 unknownFields 代码。
  • 修复:在 Kotlin 中正确处理未知枚举值。
  • 修复:ProtoPruner:保留使用的 extends。
  • 修复:ProtoPruner:仅保留使用的 imports。
  • 修复:ProtoPruner:使用 NewSchemaLoader,它可以正确加载 google.protobuf.descriptor。
  • 修复:ProtoPruner:在选项中为 proto 目标打印标量类型的默认值。
  • 修复:ProtoPruner:修复选项处理。
  • 修复:ProtoPruner:打印枚举的默认值。

版本 3.0.1

2019-10-18

  • 修复:为自定义 Java 包的 gRPC 端点使用正确的 adapter path。
  • 修复:在生成的服务中保留文档。
  • 修复:如果源目录不存在,则生成代码失败。
  • 修复:使 Kotlin 与 Java 在处理未知枚举常量方面保持一致。现在我们将这些视为未知字段,而不是解码 enclosing 消息失败。

版本 3.0.0

2019-10-07

  • 更新:所有 gRPC 网络调用均使用 gzip 编码。

版本 3.0.0-rc03

2019-10-04

  • 修复:将依赖项更新到 Okio 的稳定版本 2.4.1

版本 3.0.0-rc02

2019-10-01

Kotlin

  • 修复:在 Kotlin 互操作的 Builder setter 中将其他 oneof 字段置为 null。
  • 修复:在 hashCode() 中使用 unknownFields。
  • 修复:从 Kotlin 中移除 withoutUnknownFields()

gRPC

  • 更新:客户端生成的接口完全重写

引入两个接口,用于简单 RPC 的 GrpcCall 和用于双向 RPC 的 GrpcStreamingCall。两者都将提供阻塞和挂起 API,包括对底层 OkHttp Call 对象及其超时的引用。

  • 修复:从客户端发送流取消。

杂项

  • 新增:更改选项和枚举的打印方式
  • 选项和枚举字段之间没有空行。
  • 仅当选项多于一个时,才在新行上打印选项。
  • 修复:不在 Native 上缓存 Message 的 hash code。
  • 修复:修复 FieldBinding 中 map 值的处理。
  • 修复:修复 windows 上由于路径分隔符导致的导入失败。
  • 修复:不为 proto3 语法发出 proto2 源码。

版本 3.0.0-rc01

2019-08-02

编译器 + Gradle 插件

  • 新增:支持 Maven coordinate 依赖项上的 include。
  • 新增:分别为 source 和 proto 路径跟踪 includes。
  • 新增:构建时遵循符号链接。
  • 新增:更改 Gradle 插件以将目标作为列表跟踪。
  • 新增:Wire 目标的 Includes 和 Excludes。
  • 新增:打印模糊和缺失导入的错误。
  • 修复:修复 protopath Maven resources 不工作的 bug。
  • 修复:不将 source 依赖项重用为 protopath 依赖项。
  • 修复:修复无字段消息的 equals() 实现。

Kotlin

  • 新增:将 Wire.kt 移至 jvmMain 以阻止其在 common Kotlin 代码中使用。
  • 新增:将 Message.adapter 设置为 val
  • 新增:优化无字段 protos 的 decode() 代码。
  • 新增:更新支持的 Native 平台。
  • 新增:将 Message.unknownFields 属性设置为非空。
  • 新增:将 Message.unknownFields 设置为 val
  • 修复:不使用 KClass.simpleName,避免需要 kotlin-reflect 依赖。
  • 修复:在生成代码中使用 kotlin.UnsupportedOperationException

gRPC

  • 新增:在 wire-runtime 中引入 MessageSourceMessageSink 接口。
  • 新增:在 Wire gRPC 服务中遵守 Java 包名。
  • 新增:使 PipeDuplexRequestBody 内部化。
  • 修复:解决 Java 9+ 上 @Generated 注解的 workaround。
  • 修复:修复阻塞 API 的类型。

杂项

  • 修复:修复 Gson 适配器中反序列化 null 值的问题。
  • 修复:更改 wire-runtime artifact 名称以保留 2.x 兼容性。

版本 3.0.0-alpha03

2019-06-22

  • 与 alpha02 类似,但具有适当的 wire-runtime 多平台 artifact。

版本 3.0.0-alpha02

2019-06-21

  • 新增:实验性多平台运行时。

从这个版本开始,wire-runtime 作为多平台 Kotlin artifact 发布。虽然 JVM artifact 与 3.0.0-alpha01 兼容二进制和行为,但其他平台的 artifact 目前可能无法正常工作。JVM artifact 的 artifact 名称已更改为 wire-runtime-jvm:现在,为了依赖多平台运行时,请使用以下 Gradle 依赖声明

api "com.squareup.wire:wire-runtime:3.0.0-alpha02"

如果您只想依赖 JVM artifact,请使用以下声明

api "com.squareup.wire:wire-runtime-jvm:3.0.0-alpha02"
  • 新增:将 RPC 生成为 Single Abstract Methods。
  • 新增:为服务添加“singleMethod”Gradle 插件配置。
  • 新增:为服务添加“blockingServices”Gradle 插件配置。
  • 新增:支持无包服务代码生成。
  • 新增:移除基于 sealed classes 的 oneof 实现。
  • 新增:不为非 interop 的 Kotlin 消息生成 Builder。
  • 修复:Kotlin 生成器正确生成 Protobuf 服务的代码。
  • 修复:改进了生成的 Kotlin 代码格式。
  • 修复:为 WireField 注解生成正确的 adapter 名称。
  • 修复:为 WireField 注解生成标签。
  • 修复:正确包装 oneof 错误消息。

版本 3.0.0-alpha01

2019-03-14

  • 新增:Kotlin 生成器

Wire 3 可以生成 Kotlin 数据类。要通过命令行 API 启用此功能,请传入 --kotlin_out 参数,该参数应指定生成 *.kt 文件的输出目录。给定以下简单的 proto

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
}

生成的 Kotlin 代码将如下所示

data class Person(
  @field:WireField(tag = 1, adapter = "com.squareup.wire.ProtoAdapter#STRING")
  val name: String,
  @field:WireField(tag = 2, adapter = "com.squareup.wire.ProtoAdapter#INT32")
  val id: Int,
  @field:WireField(tag = 3, adapter = "com.squareup.wire.ProtoAdapter#STRING")
  val email: String? = null,
  val unknownFields: ByteString = ByteString.EMPTY
) : Message<Person, Person.Builder>(ADAPTER, unknownFields) {
  companion object {
    @JvmField
    val ADAPTER: ProtoAdapter<Person> = ... // code omitted for brevity

数据类的 copy() 方法取代了 builder 的大部分用法。如果您的代码依赖于 Builder,可以通过向编译器传入 --java_interop 参数来启用完整的 Builder 生成。

  • 新增:gRPC 支持

除了从 proto 消息生成 Kotlin 代码,Wire 现在还可以为 gRPC 端点生成代码。这是一个示例 schema

service RouteGuide {
  // A simple RPC.
  //
  // Obtains the feature at a given position.
  //
  // A feature with an empty name is returned if there's no feature at the given
  // position.
  rpc GetFeature(Point) returns (Feature) {}
}

生成代码如下所示(schema 中引用的消息 proto 已省略)

interface RouteGuide : Service {
  @WireRpc(
      path = "/routeguide.RouteGuide/GetFeature",
      requestAdapter = "routeguide.Point#ADAPTER",
      responseAdapter = "routeguide.Feature#ADAPTER"
  )
  suspend fun GetFeature(request: Point): Feature
}

支持所有四种 gRPC 模式:生成的代码使用 suspend 函数实现非阻塞异步执行。在流模式下,使用 ReceiveChannelSendChannel 以非阻塞方式监听异步数据。

只要输入文件包含 gRPC schema,此功能在 Wire 3 编译器中即可开箱即用。

  • 新功能:Gradle 插件

这是一个示例 Gradle 配置

apply plugin: 'com.squareup.wire'

wire {
  // Keeps only 'Dinosaur#name' as the root of the object graph
  roots 'squareup.dinosaurs.Dinosaur#name'

  // Keeps all fields, except 'name', in 'Dinosaur'
  prunes 'squareup.dinosaurs.Dinosaur#name'

  // Both roots and prunes in an external file
  rules 'rules.txt'

  kotlin {
    javaInterop true
    out "${buildDir}/generated/custom"
  }
}

wire 扩展引入了编译目标的概概念,例如 kotlinjava,每个目标都有自己的配置属性。可以提供多个目标,这有利于 Java proto 迁移到 Kotlin 等用例。

  • 新功能:将使用 Android 注解标记可空性的选项与让消息实现 Parcelable 的选项解耦。
  • 新功能:Wire Moshi 适配器,用于使用 Moshi 库序列化 proto JSON 表示。
  • 新功能:实现对自定义枚举类型的支持。
  • 新功能:生成 AndroidX 可空性注解,而不是旧版支持库注解。
  • 新功能:导入 JSR 305 并用它来标记公共 API 的可空性。
  • 新功能:允许内联多行注释。
  • 新功能:当保留了嵌套消息但其父消息被剪枝时,生成一个空类。
  • 新功能:支持将 ProtoFile 渲染为其 schema。
  • 新功能:支持十六进制数字字面量。
  • 新功能:允许使用 'with' 子句约束自定义类型。
  • 新功能:生成一个接受 Message.Builder 作为参数的构造函数,而不是单独接受所有字段作为参数。
  • 新功能:为关于不支持的 group 元素的错误消息添加位置信息。
  • 新功能:允许在 proto 路径上使用单个文件。
  • 修复:为 syntax 声明发出 ‘=’。
  • 修复:注释中包含美元符号时不会崩溃。
  • 修复:newBuilder 返回子类类型而不是抽象参数化类型。
  • 修复:验证文件上下文中的枚举命名空间是唯一的。

Version 2.2.0

2016-06-17

  • 新功能:在 schema、编译器和运行时中支持 map 类型!
  • 新功能:AndroidMessage 基类整合了支持 Android 所需的一切,现在将用于使用 --android 生成代码。
  • 新功能:RPC 定义中的 stream 关键字现在可以被解析并在 schema 中暴露。
  • 修复:保留的嵌套类型不再导致其包含类型也被保留。相反,将为被剪枝的包含类型生成不可实例化的空类型。
  • 修复:移除每种类型的 Parcelable.Creator 类,转而使用一个委托给消息的 ProtoAdapter 的单一类型。
  • 修复:即使选项被剪枝,也保留有关已编辑字段的信息。
  • 修复:对于保证永远不会为 null 的列表类型(以及现在的 map 类型),不生成处理 null 的代码。

Version 2.1.2

2016-04-15

  • 修复:Gson 类型适配器现在将重复字段的 JSON null 字面量反序列化为空列表。

Version 2.1.1

2016-02-01

  • 新功能:现在支持并强制执行 reserved 关键字。
  • 修复:延迟基于反射的枚举方法查找,直到首次使用时进行,以避免类加载的竞态条件。
  • 修复:支持单引号字符串字面量。
  • 修复:相邻的字符串字面量未正确拼接。

Version 2.1.0

2016-01-18

  • packed 值的空列表编码不正确。在 Wire 2.0.x 中,我们的消息适配器错误地包含了 [packed=true] 的空列表,而不是省略它们。现在已修复此问题。
  • 新功能:Message.encode() 可简洁地编码消息。
  • 新功能:MessageAdapter.decode(ByteString) 可直接从 byte string 解码消息,无需中间字节数组。
  • 新功能:Wire 现在包含服务接口的示例代码生成。

Version 2.0.3

2016-01-04

  • 新功能:ProtoAdapter.get 重载,给定消息实例返回适配器。
  • 新功能:使用 --android 时,为 optional 字段发出 @Nullable 注解。
  • 修复:消除 javac 在生成的代码中生成合成访问器方法的需要。这会减小代码大小并减少方法引用(对于 Android 用户)。

Version 2.0.2

2015-12-14

  • 修复:在编码 JSON 时排除未知字段,并在解析 JSON 时丢弃未知字段。
  • 修复:通过始终为消息字段添加 @WireField 元数据,确保 JSON 编码和解码在默认生成模式(不只是 --compact)下工作。
  • 修复:更新到 JavaPoet 1.4,以更准确地生成有效的 Java 代码。

Version 2.0.1

2015-11-12

  • 修复:不对别名枚举常量值发出 case 语句。反序列化时将返回对应值的第一个常量。
  • 修复:对已弃用的枚举常量发出 @Deprecated 注解。
  • 修复:正确剪枝被排除的消息、枚举或服务成员的依赖项。之前,即使成员本身被省略,其依赖项仍会被保留。

Version 2.0.0

2015-10-23

Wire 2 是一个向后不兼容的版本。它对编译器、运行时、扩展和生成的代码进行了重大更改。这些更改并非轻率决定,因为我们自己在项目中也经历了升级!我们相信迁移的成本是值得的。

我们创建了 wire-schema 库,用于建模 .proto schema 定义。这是一个功能强大的库,包含了几个巧妙的功能。您可以从本地文件系统、ZIP 或 JAR 文件或任何 java.nio.FileSystem(例如 Jimfs)中的 .proto 文件加载 Schema。您可以使用包含或排除规则来剪枝此 schema,从而以最少的代码重用 .proto 定义。而且您可以直接从 schema 解码数据:无需代码生成!

我们扁平化了扩展。Wire 2.0 将直接在消息上定义的字段与远在扩展中定义的字段合并。在生成的代码中,扩展字段看起来就像其他任何字段一样!这种方法的一个限制是,不再可能将扩展与它们扩展的消息分开编译。因此,我们现在建议始终一步生成所有 Wire 代码。

我们重组了运行时。与协议缓冲区格式相关的类型现在使用 Proto 前缀,而与我们的实现相关的类型则使用 Wire 前缀。要编码和解码消息,您必须首先从 ADAPTER 常量或 ProtoAdapter.get() 获取一个适配器。您不再需要 Wire 实例!

运行时

  • 大多数消息上新增的 ADAPTER 常量提供了编码和解码值的访问方式。这取代了 Wire 上的编码和解码方法。
  • 防御空列表。以前将 null 传递给期望 List 的 builder 方法是允许的;现在 Wire 会抛出 NullPointerException。类似地,列表元素也必须是非空的。
  • 新的 Message.newBuilder() API。这取代了之前 Builder 上的拷贝构造函数。
  • 新功能:Message.withoutUnknownFields() 剥离未知字段。
  • 修复:解码问题时始终抛出 ProtocolException
  • 修复:对 oneof 字段进行更严格的检查。以前可以创建设置了多个值的实例!
  • 修复:改进对重复字段的编辑(redacting)。
  • 修复:ProtoReader 现在静默地解包 packed 值。
  • 修复:ProtoReader 不再向调用者返回 groups。

Schema 和 Java 生成器

  • Java 生成器现在是独立的。可以使用这些 API 以编程方式构建插件,而无需委托给命令行界面。
  • 新功能:使用包含和排除规则剪枝 schema。IdentifierSet 可用于配置保留哪些类型和成员以及剪枝哪些。
  • 新功能:直接从 schema 编码和解码值。
  • 新功能:改进了验证的错误消息。
  • 修复:严格的导入检查。
  • 修复:检测并禁止扩展标签冲突。

编译器

  • 新功能:始终使用 Wire 捆绑的 descriptor.proto。以前定义自定义选项需要导入可能不一致的 descriptor。
  • 新功能:未显式指定 .proto 文件时,发出所有类型。
  • 新功能:生成用于编码和解码消息的代码。以前基于反射的编码器和解码器可通过 --compact 访问。
  • 新功能:ServiceFactory 已被移除。要为您的服务生成代码,请使用 wire-schema 加载 schema,然后使用像 JavaPoet 这样的库生成您自己的代码。JavaGenerator 类可用于查找消息类型的 Java 名称。
  • 新功能:如果未显式指定 .proto 文件,编译器将加载所有文件。
  • 新功能:从 ZIP 和 JAR 文件加载 .proto 文件。
  • 新功能:--android 标志使 Wire 消息实现 Parcelable
  • 新功能:支持多个 --proto_path 参数
  • 新功能:--named_files_only 标志限制哪些 .proto 文件生成 .java 文件。这是 Wire 1.x 中的默认行为。
  • 新功能:--no_options 标志已删除。请改用 --excludes=google.protobuf.*

扩展

  • 扩展已被扁平化。
  • 修复:改进了选项的字段解析。
  • 修复:扩展字段不得为 required

Version 1.8.0

2015-06-27

  • 新功能:支持 oneof
  • 修复:正确序列化重复的未知字段。
  • 修复:移除了枚举构造函数上多余的 private 修饰符。
  • 警告:'protoparser' 库已更新到版本 4.0。这会改变传递给任何 ServiceWriter 实现的类型。

Version 1.7.0

2015-03-05

  • 新功能:消息实现 Serializable。序列化形式遵循 protobuf 编码,因此只要标签一致,重命名字段是安全的。(但是,重命名类是不安全的)。请注意,扩展字段被反序列化为未知字段。

Version 1.6.1

2015-01-16

  • 新功能:--quiet--dry-run 命令行参数。
  • 修复:处理包含零个或只有一个项目的扩展注册表。
  • Okio 依赖已更新到 1.2.0。

Version 1.6.0

2014-10-23

  • 修复:解析错误输入失败时正确抛出 IOException
  • 修复:确保生成的代码中对 Arrays.asList 的引用在某些边缘情况下能正确编译。
  • UNDEFINED’ 枚举值已被移除。

Version 1.5.2

2014-09-15

  • 新功能:‘UNDEFINED’ 枚举值代表生成的代码无法处理的值。
  • 新功能:服务写入器实现现在可以在命令行中指定。

Version 1.5.1

2014-06-18

  • 新功能:为包含部分方法列表的 Service 生成接口定义。
  • Okio 依赖已更新到 1.0.0。

Version 1.5.0

2014-04-22

  • 新功能:现在支持枚举和枚举值上的选项。
  • 新功能:字段上以 .redacted 结尾的选项将从 toString 中省略值。
  • 新功能:Redactor 创建省略了已编辑字段的消息副本。
  • 各种内部序列化改进和内存减少。
  • Okio 依赖已更新到 0.9.0。

Version 1.4.0

2014-04-22

  • 用 Okio (https://github.com/square/okio) 中的 ByteString 类替换 Wire 的 ByteString 类。这是一个破坏性的 API 更改

  • 添加一个新的静态方法 Wire.parseFrom(okio.Source input, Class<M> messageClass)

  • 重新实现 Wire 的输入处理以在内部使用 Okio。

  • 为从服务声明生成代码提供基本支持(参见 README.md)。

  • 提高反序列化性能。

  • 修复未检测到某些扩展依赖项的 bug。

Version 1.3.3

2014-03-28

  • 新功能:支持将服务声明作为根。将包含其方法的请求和响应类型。

Version 1.3.2

2014-03-27

  • 修复:枚举值重复检查现在正确地查看名称而不是值。

Version 1.3.1

2014-03-25

  • 新功能:自动将 Maven 插件生成的源作为编译根。
  • 修复:修正 Maven 插件的 'no arguments' 标志,使其正常工作。
  • 修复:支持嵌套在消息类型内部的 extend 声明。

Version 1.3.0

2014-03-21

  • 新功能:空的重复字段现在初始化为空集合。
  • 新功能:发出字段选项。使用 --no_options 标志禁用。
  • 新功能:现在将 @Deprecated 添加到 builder 上的字段和 setter。
  • 新功能:用于将编译器作为构建一部分运行的 Maven 插件。
  • 修复:在 equals()hashCode() 中将空和 null 的重复字段视为相同。

注意:此版本与之前版本生成的代码不向后兼容。

Version 1.2.0

2013-11-01

  • 新功能:--registry_class 编译器参数发出一个包含适合传递给 Wire 构造函数的扩展列表的类。
  • 修复:确保文档中的所有尾随空格都被修剪。

Version 1.1.1

2013-10-23

  • 修复:正确解析和发出多行文档。

Version 1.1.0

2013-10-22

  • 新功能:支持消息选项。
  • 新功能:检查重复的字段标签号。
  • 新功能:在消息、枚举值和 builder 方法上发出 Javadoc。
  • 修复:为包外的扩展字段和类发出导入。
  • 修复:正确为具有相同基础名称的 proto 生成源文件。
  • 修复:不为消息类型生成默认常量。
  • 修复:避免遮蔽名为“result”、“other”或“o”的字段。

Version 1.0.1

2013-08-27

  • 新功能:支持直接从 InputStream 读取。
  • 新功能:在生成的 equals() 方法中添加 ‘other == this’ 快捷方式。

Version 1.0.0

2013-08-23

初始版本。