Changelog History
Page 6
-
v2.1.0 Changes
January 18, 20162016-01-18
- Empty lists of packed values were being encoded incorrectly. In Wire 2.0.x our message
adapters incorrectly included empty lists for
[packed=true]
rather than omitting them. This is now fixed. - New:
Message.encode()
to concisely encode a message. - New:
MessageAdapter.decode(ByteString)
to decode a message from a byte string without an intermediate byte array. - New: Wire now includes a sample code generation for service interfaces.
- Empty lists of packed values were being encoded incorrectly. In Wire 2.0.x our message
adapters incorrectly included empty lists for
-
v2.0.3 Changes
January 05, 20162016-01-04
- New:
ProtoAdapter.get
overload which returns an adapter given an instance of a message. - New:
@Nullable
annotations are emitted foroptional
fields when using--android
. - Fix: Remove the need for
javac
to generate synthetic accessor methods in the generated code. This results in smaller code size and less method references (for Android users).
- New:
-
v2.0.2 Changes
2015-12-14
- Fix: Exclude unknown fields when encoding JSON and drop unknown fields when parsing JSON.
- Fix: Ensure JSON encoding and decoding works in the default generation mode (not just
--compact
) by always adding@WireField
metadata to message fields. - Fix: Update to JavaPoet 1.4 for more accurate generation of valid Java code.
-
v2.0.1 Changes
2015-11-12
- Fix: Do not emit
case
statements for aliased enum constant values. The first constant for a value will be returned when deserializing. - Fix: Emit
@Deprecated
annotation on deprecated enum constants. - Fix: Correctly prune dependencies of excluded message, enum, or service members. Previously the dependencies of an excluded member were retained despite the member itself being omitted.
- Fix: Do not emit
-
v2.0.0 Changes
2015-10-23
🚀 Wire 2 is a backwards-incompatible release. It makes breaking changes to the compiler, runtime, ⬆️ extensions, and generated code. These changes aren’t made lightly as we’ve endured the upgrade in our own projects! We believe the cost of migration is worth the benefits.
We’ve created the
wire-schema
library that models.proto
schema definitions. This is a capable library that packs several neat features. You can load aSchema
from.proto
files located on the local file system, a ZIP or JAR file, or anyjava.nio.FileSystem
like [Jimfs][jimfs]. You can prune this schema with includes or excludes, allowing you to reuse.proto
definitions with minimal code. And you can decode data directly from a schema: no code generation is necessary!We’ve flattened extensions. Wire 2.0 combines the fields defined directly on messages with fields defined far away in extensions. In the generated code, extension fields look just like every other field! One limitation of this approach is that it’s no longer possible to compile extensions separately from the messages they extend. For this reason we now recommend always generating all Wire code in a single step.
We’ve rearranged the runtime. Types related to the protocol buffers format are now prefixed đź›
Proto
and types related to our implementation are prefixedWire
. To encode and decode messages you must first get an adapter either from theADAPTER
constant or fromProtoAdapter.get()
. You no longer need aWire
instance!âš™ Runtime
- New
ADAPTER
constant on most messages gives access to encode & decode values. This replaces the encoding and decoding methods onWire
. - Guard against null lists. Code that passes
null
to builder methods expecting aList
used to accept that; now Wire throws aNullPointerException
. Similarly list elements must also be non-null. - New
Message.newBuilder()
API. This replaces the previous copy constructor onBuilder
. - New:
Message.withoutUnknownFields()
strips unknown fields. - Fix: Always throw
ProtocolException
when there are decoding problems. - Fix: Stricter checking for oneof fields. Previously it was possible to create instances with multiple values set!
- Fix: Improve redacting of repeated fields.
- Fix:
ProtoReader
now silently unpacks packed values. - Fix:
ProtoReader
doesn’t return groups to callers.
Schema & Java Generator
- The Java generator is now standalone. Use these APIs programmatically to build plugins without delegating to the command line interface.
- New: Prune schemas using includes and excludes. The
IdentifierSet
can be used to configure which types and members are retained and which are pruned. - New: Encode and decode values directly from the schema.
- New: Improved error messages for validation.
- Fix: Strict imports.
- Fix: Detect and forbid conflicts on extension tags.
Compiler
- New: Always use Wire’s bundled
descriptor.proto
. Previously to define custom options you needed to import a potentially-inconsistent descriptor. - New: Emit all types when no
.proto
files are explicitly specified. - New: Generate code for encoding and decoding messages. The previous, reflection-based
encoder and decoder are accessible with
--compact
. - New:
ServiceFactory
has been removed. To generate code for your services, load a schema withwire-schema
and then use a library like [JavaPoet][javapoet] to generate your own code. TheJavaGenerator
class can be used to look up Java names of message types. - New: Compiler will load all
.proto
files if none are explicitly specified. - New: Load
.proto
files from ZIP and JAR files. - New: The
--android
flag causes Wire messages to implementParcelable
. - New: Support multiple
--proto_path
arguments - New: The
--named_files_only
flag limits which.proto
files yield.java
files. This was the default in Wire 1.x. - New: The
--no_options
flag has been deleted. Use--excludes=google.protobuf.*
instead.
Extensions
- Extensions have been flattened.
- Fix: Better field resolution for options.
- Fix: Extension fields must not be
required
.
- New
-
v1.8.0 Changes
2015-06-27
- New:
oneof
support! - Fix: Correct serialization of repeated unknown fields.
- Fix: Removed superfluous
private
modifier on enum constructor. - Warning: The 'protoparser' library was updated to version 4.0. This changes the type passed to
any
ServiceWriter
implementations.
- New:
-
v1.7.0 Changes
2015-03-05
- New: Messages implement
Serializable
. The serialized form follows protobuf encoding, so renaming fields is safe as long as tags are consistent. (Renaming classes is unsafe, however). Note that extension fields are deserialized as unknown fields.
- New: Messages implement
-
v1.6.1 Changes
2015-01-16
- New:
--quiet
and--dry-run
command-line arguments. - Fix: Handle an extension registry with zero or only one item.
- Okio dependency bumped to 1.2.0.
- New:
-
v1.6.0 Changes
2014-10-23
- Fix: Correctly throw
IOException
when parsing bad input fails. - Fix: Ensure emitted code references to
Arrays.asList
correctly compiles in some edge cases. - 'UNDEFINED' enum value has been removed.
- Fix: Correctly throw
-
v1.5.2 Changes
2014-09-15
- New: 'UNDEFINED' enum value represents values that the generated code is unable to handle.
- New: Service writer implementation can now be specified on the command-line.