变更日志¶
版本 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¶
- 修复堆分配 proto 的 ProtoMessage 一致性 (#3260 by Dimitris Koutsogiorgas)
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_class
。enum_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 Koutsogiorgas 和 Adam Lickel 完成!
wire-grpc-server¶
- ⚠
wire-grpc-server
已移至其自己的仓库:https://github.com/square/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
通用¶
- 支持 JSON 编码的所有 struct 类型 (#2824 by Arnaud Frugier)
版本 4.9.6¶
2024-02-02
通用¶
- 在编码 schema 时添加公共依赖项 (#2801 by Michael Peyper)
Kotlin¶
- 修复 RealGrpcCall 超时 (#2816 by Jeff Gulbronson)
版本 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¶
- 移除弃用内容 (#2721 by Adam Lickel)
- 对于与常见 Swift 类型冲突的类型,始终使用限定名称 (#2764 by Dimitris Koutsogiorgas)
- 修复使用 redacted description field 的基于堆消息的边缘情况 (#2772 by Dimitris Koutsogiorgas)
- 将
unknownFields
类型从Data
更改为[UInt32: Data]
(#2789 by Dimitris Koutsogiorgas) - 引入
ProtoExtensible
协议,所有已扩展的消息都将遵循此协议 (#2790 by Dimitris Koutsogiorgas)
公告¶
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:
ProtoDefaulted
和CustomDefaulted
包含 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.proto
或wire/extensions.proto
将不再被发出。 - New: 现在可以通过 WireCompiler 配置自定义 logger。
- New:
wire-schema
和wire-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 类型(如
Duration
、Struct
等)。 - 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.Factory
。custom {}
现在在其新字段options
中接受一个 map。到其新字段 options
。 - Swift: 默认值现在通过
Defaulted
属性包装器生成。 - Swift: 完全限定
Foundation.Data
以防止与名为Data
的消息发生名称冲突。 - Move: 一些类型已从
wire-compiler
移动到wire-run
:WireRun
、Target
、DirectedAcyclicGraph
、PartitionedSchema
。 - 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
}
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/protobuf
的7dbe742
版本更新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 类型的支持,例如
Struct
、Any
、Duration
和Timestamp
。 @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
中。 - 重大变更:
CoreLoader
的isWireRuntimeProto
方法现在是静态的。 - 重大变更:
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 时跳过默认值的行为。将
WireJsonAdapterFactory
或WireTypeAdapterFactory
的writeIdentityValues
设置为 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 支持
Timestamp
和Duration
。 - 新增: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
捆绑了它所基于的 gRPCreflection.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 名称为
name
或ordinal
时,不会生成无效代码。 - 修复:如果 protobuf 输入已更改,则不重新使用缓存。
- 修复:为定义为 enum constant 列表的选项值发出正确的 protobuf 格式。
- 修复:明确将 Wire gRPC 服务器生成定义为实验性:该功能尚未完成。
- 修复:为 deprecated 的消息、字段、枚举和枚举常量生成
@Deprecated
注解。 - 修复:处理 Kotlin 构造函数初始化时无序的 proto 字段。
- 修复:处理 Wire gRPC 中双向调用的写入/读取异常。
- 修复:在 Java 中,重命名实例以避免字段和类名冲突。
- 修复:导入时定位根包中的文件。
- 修复:使用 Address Sanitizer 在 Swift 中发现的内存修复。
- 修复:解码 protobuf 编码的布尔值时允许除
0
和1
以外的值。之前,我们对其他值会抛出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
- 新增:当
protoPath
或protoSource
依赖于一个项目时,自动添加依赖。 - 新增:
protoPath
和protoSource
依赖默认情况下不再是传递的。 - 新增: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
。 - 新增:当两个枚举常量模糊不清时(例如
ZERO
和zero
),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.since
和wire.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
选项,用于定位唯一版本。总的来说,支持许多客户端的服务代码会通过sinceVersion
和untilVersion
定位范围,而客户端代码会通过onlyVersion
定位唯一版本。 - 新增:支持 Proto3 中的可选字段。
- 修复:恢复
GrpcClient.create
API 以创建 gRPC 接口的实现。
版本 3.2.0¶
2020-04-23
- 新增:成员和枚举值上的
wire.since
和wire.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
文件未更改时,不重新生成源文件。 - 新增:
includes
、excludes
、root
和prune
优先考虑最精确的规则。之前excludes
总是优先于includes
,prune
总是优先于root
。 - 修复:在 Kotlin 中为 enclosing 类型生成不可实例化的类。当嵌套类型被保留但其 enclosing 类型被修剪时,会生成此类。
- 修复:当 profile 找不到依赖项时,不会构建失败。
版本 3.0.3¶
2019-12-23
从这个版本开始,Wire Maven 插件不再维护,并已从仓库中移除。
- 新增:Kotlin 中支持自定义选项。
- 新增:Kotlin 1.3.61。
- 新增:在
WireRun
和 Gradle 插件中添加对自定义目标的支持。 - 新增:改进加载单独的
sourcePath
和protoPath
时的 schema 评估算法。 - 新增:延迟加载
protoPath
内容。 - 新增:可以自定义 Gradle 插件的配置。
- 新增:可以自定义 Gradle 插件的
generateProtos
任务。 - 修复:在 Kotlin 中为 packed 字段使用正确的
ProtoAdapter
。 - 修复:正确处理字段和 enclosing 类型之间的名称冲突。
- 修复:保留从
protoPath
加载的文件的包名。 - 修复:ProtoPruner:正确评估 Pruner 的可达对象。
- 修复:ProtoPruner:确保
--excludes
正确修剪选项。 - 修复:ProtoPruner:修剪时保留使用的
ServiceOptions
和MethodOptions
。
版本 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
中引入MessageSource
和MessageSink
接口。 - 新增:在 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 函数实现非阻塞异步执行。在流模式下,使用 ReceiveChannel
和 SendChannel
以非阻塞方式监听异步数据。
只要输入文件包含 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
扩展引入了编译目标的概概念,例如 kotlin
和 java
,每个目标都有自己的配置属性。可以提供多个目标,这有利于 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
初始版本。