diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java
index 7b716c3..29ed8aa 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java
@@ -107,7 +107,7 @@
         ImmutableMap.<String, Object>of("name", "test", "foo", "bar"),
         Attribute.attr("foo", Type.STRING).build());
 
-    assertThat(context.getAttr().getKeys()).contains("foo");
+    assertThat(context.getAttr().getFieldNames()).contains("foo");
     assertThat(context.getAttr().getValue("foo")).isEqualTo("bar");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkInfoTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkInfoTest.java
index b57b894..cbcfa48 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkInfoTest.java
@@ -101,7 +101,7 @@
         new CompactSkylarkInfo(provider, layout, new Object[] {null, 5}, Location.BUILTIN);
     Concatable result = p1.getConcatter().concat(p1, p2, Location.BUILTIN);
     assertThat(result).isInstanceOf(MapBackedSkylarkInfo.class);
-    assertThat(((SkylarkInfo) result).getKeys()).containsExactly("f1", "f2");
+    assertThat(((SkylarkInfo) result).getFieldNames()).containsExactly("f1", "f2");
     assertThat(((SkylarkInfo) result).getValue("f1")).isEqualTo(4);
     assertThat(((SkylarkInfo) result).getValue("f2")).isEqualTo(5);
   }
@@ -117,7 +117,7 @@
         new CompactSkylarkInfo(provider, layout, new Object[] {null, 5}, Location.BUILTIN);
     Concatable result = p1.getConcatter().concat(p1, p2, Location.BUILTIN);
     assertThat(result).isInstanceOf(CompactSkylarkInfo.class);
-    assertThat(((CompactSkylarkInfo) result).getKeys()).containsExactly("f1", "f2");
+    assertThat(((CompactSkylarkInfo) result).getFieldNames()).containsExactly("f1", "f2");
     assertThat(((CompactSkylarkInfo) result).getValue("f1")).isEqualTo(4);
     assertThat(((CompactSkylarkInfo) result).getValue("f2")).isEqualTo(5);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkProviderTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkProviderTest.java
index 171bb9f..26c1176 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkProviderTest.java
@@ -37,7 +37,7 @@
     assertThat(provider.isExported()).isFalse();
     assertThat(provider.getName()).isEqualTo("<no name>");
     assertThat(provider.getPrintableName()).isEqualTo("<no name>");
-    assertThat(provider.getErrorMessageFormatForInstances())
+    assertThat(provider.getErrorMessageFormatForUnknownField())
         .isEqualTo("Object has no '%s' attribute.");
     assertThat(provider.isImmutable()).isFalse();
     assertThat(Printer.repr(provider)).isEqualTo("<provider>");
@@ -53,7 +53,7 @@
     assertThat(provider.isExported()).isTrue();
     assertThat(provider.getName()).isEqualTo("prov");
     assertThat(provider.getPrintableName()).isEqualTo("prov");
-    assertThat(provider.getErrorMessageFormatForInstances())
+    assertThat(provider.getErrorMessageFormatForUnknownField())
         .isEqualTo("'prov' object has no attribute '%s'");
     assertThat(provider.isImmutable()).isTrue();
     assertThat(Printer.repr(provider)).isEqualTo("<provider>");
@@ -140,7 +140,7 @@
 
   /** Asserts that a {@link SkylarkInfo} has fields a=1, b=2, c=3 (and nothing else). */
   private static void assertHasExactlyValuesA1B2C3(SkylarkInfo info) {
-    assertThat(info.getKeys()).containsExactly("a", "b", "c");
+    assertThat(info.getFieldNames()).containsExactly("a", "b", "c");
     assertThat(info.getValue("a")).isEqualTo(1);
     assertThat(info.getValue("b")).isEqualTo(2);
     assertThat(info.getValue("c")).isEqualTo(3);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java
index 7ba0faa..94ff70e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSelectionTest.java
@@ -124,7 +124,7 @@
             getRuleContext(target).getToolchainContext().getResolvedToolchainProviders();
     ToolchainInfo toolchain =
         providers.getForToolchainType(Label.parseAbsolute(CPP_TOOLCHAIN_TYPE));
-    assertThat(toolchain.getKeys()).isEmpty();
+    assertThat(toolchain.getFieldNames()).isEmpty();
   }
 
   @Test
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 87561bd..930ba25 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
@@ -1051,7 +1051,7 @@
         "y = struct(c = 1, d = 2)",
         "z = x + y\n");
     Info z = (Info) lookup("z");
-    assertThat(z.getKeys()).isEqualTo(ImmutableSet.of("a", "b", "c", "d"));
+    assertThat(z.getFieldNames()).isEqualTo(ImmutableSet.of("a", "b", "c", "d"));
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
index 8dfb22d..877bcf8 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
@@ -1186,7 +1186,7 @@
       getConfiguredTarget("//test:my_rule");
       fail();
     } catch (AssertionError expected) {
-      assertThat(expected).hasMessageThat().contains("Invalid key for default provider: foo");
+      assertThat(expected).hasMessageThat().contains("Invalid field for default provider: foo");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 8aaeb88..2f9742c 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -235,12 +235,12 @@
     }
 
     @Override
-    public ImmutableCollection<String> getKeys() {
+    public ImmutableCollection<String> getFieldNames() {
       return ImmutableList.of("field", "nset");
     }
 
     @Override
-    public String errorMessage(String name) {
+    public String getErrorMessageForUnknownField(String name) {
       return null;
     }
   }
