Add SkylarkClassObjectConstructor - a future return value of "provider" function.

--
MOS_MIGRATED_REVID=129726780
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index 07a8c6b..11f7083 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -35,6 +35,7 @@
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
 import com.google.devtools.build.lib.packages.SkylarkAspect;
 import com.google.devtools.build.lib.packages.SkylarkClassObject;
+import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
 import com.google.devtools.build.lib.rules.SkylarkAttr;
 import com.google.devtools.build.lib.rules.SkylarkFileType;
 import com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions;
@@ -931,18 +932,23 @@
   }
 
   private static SkylarkClassObject makeStruct(String field, Object value) {
-    return new SkylarkClassObject(ImmutableMap.of(field, value));
+    return SkylarkClassObjectConstructor.STRUCT.create(
+        ImmutableMap.of(field, value),
+        "no field '%'");
   }
 
   private static SkylarkClassObject makeBigStruct(Environment env) {
     // struct(a=[struct(x={1:1}), ()], b=(), c={2:2})
-    return new SkylarkClassObject(ImmutableMap.<String, Object>of(
-        "a", MutableList.<Object>of(env,
-            new SkylarkClassObject(ImmutableMap.<String, Object>of(
-                "x", SkylarkDict.<Object, Object>of(env, 1, 1))),
-            Tuple.of()),
-        "b", Tuple.of(),
-        "c", SkylarkDict.<Object, Object>of(env, 2, 2)));
+    return SkylarkClassObjectConstructor.STRUCT.create(
+        ImmutableMap.<String, Object>of(
+            "a", MutableList.<Object>of(env,
+                SkylarkClassObjectConstructor.STRUCT.create(ImmutableMap.<String, Object>of(
+                    "x", SkylarkDict.<Object, Object>of(env, 1, 1)),
+                    "no field '%s'"),
+                Tuple.of()),
+            "b", Tuple.of(),
+            "c", SkylarkDict.<Object, Object>of(env, 2, 2)),
+        "no field '%s'");
   }
 
   @Test