Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Unified Diff: mojo/public/tools/bindings/generators/mojom_java_generator.py

Issue 514293002: Mojo: validate nullability in Java bindings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix line length in mojom_java_generator in a way that works. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/tools/bindings/generators/mojom_java_generator.py
diff --git a/mojo/public/tools/bindings/generators/mojom_java_generator.py b/mojo/public/tools/bindings/generators/mojom_java_generator.py
index 1827ed90c773953d207858ba10473679ca822bde..2344721fc28dba6dd5cd14774eeb1826b25a82b7 100644
--- a/mojo/public/tools/bindings/generators/mojom_java_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_java_generator.py
@@ -136,6 +136,35 @@ def ParseStringAttribute(attribute):
assert isinstance(attribute, basestring)
return attribute
+def GetJavaTrueFalse(value):
+ return "true" if value else "false"
+
+def GetArrayNullabilityFlags(kind):
+ """Returns nullability flags for an array type, see Decoder.java.
+
+ As we have dedicated decoding functions for arrays, we have to pass
+ nullability information about both the array itself, as well as the array
+ element type there.
+ """
+ assert mojom.IsAnyArrayKind(kind)
+ ARRAY_NULLABLE = \
+ "org.chromium.mojo.bindings.BindingsHelper.ARRAY_NULLABLE"
+ ELEMENT_NULLABLE = \
+ "org.chromium.mojo.bindings.BindingsHelper.ELEMENT_NULLABLE"
+ NOTHING_NULLABLE = \
+ "org.chromium.mojo.bindings.BindingsHelper.NOTHING_NULLABLE"
+
+ flags_to_set = []
+ if mojom.IsNullableKind(kind):
+ flags_to_set.append(ARRAY_NULLABLE)
+ if mojom.IsNullableKind(kind.kind):
+ flags_to_set.append(ELEMENT_NULLABLE)
+
+ if not flags_to_set:
+ flags_to_set = [NOTHING_NULLABLE]
+ return " | ".join(flags_to_set)
+
+
@contextfilter
def DecodeMethod(context, kind, offset, bit):
def _DecodeMethodName(kind):
@@ -152,6 +181,11 @@ def DecodeMethod(context, kind, offset, bit):
params = [ str(offset) ]
if (kind == mojom.BOOL):
params.append(str(bit))
+ if mojom.IsReferenceKind(kind):
+ if mojom.IsAnyArrayKind(kind):
+ params.append(GetArrayNullabilityFlags(kind))
+ else:
+ params.append(GetJavaTrueFalse(mojom.IsNullableKind(kind)))
if mojom.IsInterfaceKind(kind):
params.append('%s.MANAGER' % GetJavaType(context, kind))
if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind):
@@ -324,9 +358,11 @@ class Generator(generator.Generator):
"has_method_with_response": HasMethodWithResponse,
"has_method_without_response": HasMethodWithoutResponse,
"is_handle": mojom.IsNonInterfaceHandleKind,
+ "is_nullable_kind": mojom.IsNullableKind,
"is_pointer_array_kind": IsPointerArrayKind,
"is_struct_kind": mojom.IsStructKind,
"java_type": GetJavaType,
+ "java_true_false": GetJavaTrueFalse,
"method_ordinal_name": GetMethodOrdinalName,
"name": GetNameForElement,
"new_array": NewArray,

Powered by Google App Engine
This is Rietveld 408576698