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

Unified Diff: mojom/mojom_tool/serialization/serialization.go

Issue 1933563002: Mojom frontend: Start populating |resolved_concrete_value| field in mojom_types.mojom (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Grammar fix. Created 4 years, 8 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: mojom/mojom_tool/serialization/serialization.go
diff --git a/mojom/mojom_tool/serialization/serialization.go b/mojom/mojom_tool/serialization/serialization.go
index 5bb5c2b76087612917de81dd26ba15b9080de20a..d330de6ec7a46dcda4d8ebf93672e4dbb1f4de62 100644
--- a/mojom/mojom_tool/serialization/serialization.go
+++ b/mojom/mojom_tool/serialization/serialization.go
@@ -428,9 +428,17 @@ func translateUserDefinedConstant(t *mojom.UserDefinedConstant) *mojom_types.Use
declaredConstant.Value.Type = translateTypeRef(t.DeclaredType())
declaredConstant.Value.DeclData = *translateDeclarationData(&t.DeclarationData)
declaredConstant.Value.Value = translateValueRef(t.ValueRef())
- // TODO(rudominer) implement UserDefinedValue.resolved_concrete_value.
- // declaredConstant.ResolvedConcreteValue =
- // translateConcreteValue(t.ValueRef().ResolvedConcreteValue()))
+ // We set the |resolved_concrete_value| field only in the following situation.
+ // See the comments in mojom_types.mojom.
+ if _, ok := declaredConstant.Value.Value.(*mojom_types.ValueUserValueReference); ok {
+ // If the type of the |value| field is a UserValueReference...
+ userValueRef := t.ValueRef().(*mojom.UserValueRef)
+ if _, ok := userValueRef.ResolvedDeclaredValue().(*mojom.UserDefinedConstant); ok {
+ // and if that reference resolves to a user-defined constant.
+ declaredConstant.Value.ResolvedConcreteValue = translateConcreteValue(t.ValueRef().ResolvedConcreteValue())
+ }
+ }
+
return &declaredConstant
}
@@ -556,6 +564,29 @@ func translateValueRef(valueRef mojom.ValueRef) mojom_types.Value {
}
}
+func translateConcreteValue(cv mojom.ConcreteValue) mojom_types.Value {
+ switch cv := cv.(type) {
+ case mojom.LiteralValue:
+ return translateLiteralValue(cv)
+ // NOTE: See the comments at the top of types.go for a discussion of the difference
+ // between a value and a value reference. In this function we are translating a
+ // value, not a value reference. In the case of a LiteralValue or a
+ // BuiltInConstantValue the distinction is immaterial. But in the case of an
+ // enum value the distinction is important. Here we are building and returning
+ // a synthetic mojom_types.UserValueReference to represent the enum value.
+ // It is only the |value_key| field that needs to be populated. It does not
+ // make sense to populate the |identifier| field for example because we
+ // aren't representing any actual occrence in the .mojom file.
+ case *mojom.EnumValue:
+ return &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
+ ValueKey: stringPointer(cv.ValueKey())}}
+ case mojom.BuiltInConstantValue:
+ return translateBuiltInConstantValue(cv)
+ default:
+ panic(fmt.Sprintf("Unexpected ConcreteValue type %T", cv))
+ }
+}
+
func translateLiteralValue(v mojom.LiteralValue) *mojom_types.ValueLiteralValue {
var lv mojom_types.LiteralValue
switch v.ValueType() {
« no previous file with comments | « mojom/mojom_tool/mojom/user_defined_types_test.go ('k') | mojom/mojom_tool/serialization/serialization_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698