java_gen: create DEFAULT instance for objects that support it (for Match)
Objects which consist only of parts that have a default value
now get a default value.
Match, in particular, now defines a default instance that wildcards
everything and is available as factory.matchWildcardAll()
diff --git a/java_gen/templates/of_class.java b/java_gen/templates/of_class.java
index 8a8d09d..829d257 100644
--- a/java_gen/templates/of_class.java
+++ b/java_gen/templates/of_class.java
@@ -56,6 +56,13 @@
//:: for prop in msg.data_members:
private final ${prop.java_type.public_type} ${prop.name};
//:: #endfor
+//
+//:: if all(prop.default_value for prop in msg.data_members):
+ // Immutable default instance
+ final static ${impl_class} DEFAULT = new ${impl_class}(
+ ${", ".join(prop.default_name for prop in msg.data_members)}
+ );
+//:: #endif
//:: if msg.data_members:
// package private constructor - used by readers, builders, and factory
diff --git a/java_gen/templates/of_factory_class.java b/java_gen/templates/of_factory_class.java
index 5263226..395b524 100644
--- a/java_gen/templates/of_factory_class.java
+++ b/java_gen/templates/of_factory_class.java
@@ -72,6 +72,12 @@
public Match.Builder buildMatch() {
return new ${i.versioned_class(factory.version).name}.Builder();
}
+
+ final static Match MATCH_WILDCARD_ALL = ${i.versioned_class(factory.version).name}.DEFAULT;
+
+ public Match matchWildcardAll() {
+ return MATCH_WILDCARD_ALL;
+ }
//:: general_get_match_func_written = True
//:: #endif
//:: if len(i.writeable_members) <= 2:
diff --git a/java_gen/templates/of_factory_interface.java b/java_gen/templates/of_factory_interface.java
index 48ea34a..6a92e96 100644
--- a/java_gen/templates/of_factory_interface.java
+++ b/java_gen/templates/of_factory_interface.java
@@ -55,6 +55,7 @@
//:: #endfor
//:: if factory.name == 'OFFactory':
Match.Builder buildMatch();
+ Match matchWildcardAll();
//:: #endif
OFMessageReader<${factory.base_class}> getReader();