diff --git a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
index 487d49a..fec42cb 100644
--- a/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
+++ b/src/main/java/com/google/devtools/build/docgen/SymbolFamilies.java
@@ -49,11 +49,11 @@
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidInstrumentationInfo.FakeAndroidInstrumentationInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidNativeLibsInfo.FakeAndroidNativeLibsInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidResourcesInfo.FakeAndroidResourcesInfoProvider;
-import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidSkylarkCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidStarlarkCommon;
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeApkInfo.FakeApkInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleCommon;
 import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigGlobalLibrary;
-import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigSkylarkCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigStarlarkCommon;
 import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcInfo;
 import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcModule;
 import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcToolchainConfigInfo;
@@ -179,7 +179,7 @@
             new FakeDefaultInfoProvider());
     AndroidBootstrap androidBootstrap =
         new AndroidBootstrap(
-            new FakeAndroidSkylarkCommon(),
+            new FakeAndroidStarlarkCommon(),
             new FakeApkInfoProvider(),
             new FakeAndroidInstrumentationInfoProvider(),
             new FakeAndroidDeviceBrokerInfoProvider(),
@@ -188,8 +188,8 @@
             new FakeAndroidApplicationResourceInfoProvider());
     AppleBootstrap appleBootstrap = new AppleBootstrap(new FakeAppleCommon());
     ConfigBootstrap configBootstrap =
-        new ConfigBootstrap(new FakeConfigSkylarkCommon(), new FakeConfigApi(),
-            new FakeConfigGlobalLibrary());
+        new ConfigBootstrap(
+            new FakeConfigStarlarkCommon(), new FakeConfigApi(), new FakeConfigGlobalLibrary());
     CcBootstrap ccBootstrap =
         new CcBootstrap(
             new FakeCcModule(),
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttrModule.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttrModule.java
index 590a339..2db9663 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttrModule.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkAttrModule.java
@@ -27,7 +27,7 @@
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet;
 import com.google.devtools.build.lib.packages.Attribute.ImmutableAttributeFactory;
-import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate;
+import com.google.devtools.build.lib.packages.Attribute.StarlarkComputedDefaultTemplate;
 import com.google.devtools.build.lib.packages.AttributeTransitionData;
 import com.google.devtools.build.lib.packages.AttributeValueSource;
 import com.google.devtools.build.lib.packages.BazelModuleContext;
@@ -131,7 +131,7 @@
         // We solve this problem by asking the StarlarkCallbackHelper for the parameter names used
         // in the function definition, which must be the names of attributes used by the callback.
         builder.value(
-            new SkylarkComputedDefaultTemplate(type, callback.getParameterNames(), callback));
+            new StarlarkComputedDefaultTemplate(type, callback.getParameterNames(), callback));
       } else if (defaultValue instanceof StarlarkLateBoundDefault) {
         builder.value((StarlarkLateBoundDefault) defaultValue); // unchecked cast
       } else {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkLateBoundDefault.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkLateBoundDefault.java
index d99615d..d583bb7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkLateBoundDefault.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/StarlarkLateBoundDefault.java
@@ -19,7 +19,7 @@
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.Attribute.AbstractLabelLateBoundDefault;
 import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault;
@@ -39,11 +39,11 @@
 /**
  * An implementation of {@link LateBoundDefault} which obtains a late-bound attribute value (of type
  * 'label') specifically by Starlark configuration fragment name and field name, as registered by
- * {@link SkylarkConfigurationField}.
+ * {@link StarlarkConfigurationField}.
  *
  * <p>For example, a SkylarkLateBoundDefault on "java" and "toolchain" would require a valid
  * configuration fragment named "java" with a method annotated with {@link
- * SkylarkConfigurationField} of name "toolchain". This {@link LateBoundDefault} would provide a
+ * StarlarkConfigurationField} of name "toolchain". This {@link LateBoundDefault} would provide a
  * late-bound dependency (defined by the label returned by that configuration field) in the current
  * target configuration.
  */
@@ -67,11 +67,9 @@
     }
   }
 
-  /**
-   * Returns the {@link SkylarkConfigurationField} annotation corresponding to this method.
-   */
+  /** Returns the {@link StarlarkConfigurationField} annotation corresponding to this method. */
   private static Label getDefaultLabel(
-      SkylarkConfigurationField annotation, String toolsRepository) {
+      StarlarkConfigurationField annotation, String toolsRepository) {
     if (annotation.defaultLabel().isEmpty()) {
       return null;
     }
@@ -81,8 +79,12 @@
     return defaultLabel;
   }
 
-  private StarlarkLateBoundDefault(SkylarkConfigurationField annotation,
-      Class<FragmentT> fragmentClass, String fragmentName, Method method, String toolsRepository) {
+  private StarlarkLateBoundDefault(
+      StarlarkConfigurationField annotation,
+      Class<FragmentT> fragmentClass,
+      String fragmentName,
+      Method method,
+      String toolsRepository) {
     this(
         getDefaultLabel(annotation, toolsRepository),
         fragmentClass,
@@ -114,7 +116,7 @@
 
   /**
    * Returns the Starlark name of the configuration field name, as registered by {@link
-   * SkylarkConfigurationField} annotation on the configuration fragment.
+   * StarlarkConfigurationField} annotation on the configuration fragment.
    */
   public String getFragmentFieldName() {
     return fragmentFieldName;
@@ -134,8 +136,8 @@
   /**
    * An exception thrown if a user specifies an invalid configuration field identifier.
    *
-   * @see SkylarkConfigurationField
-   **/
+   * @see StarlarkConfigurationField
+   */
   public static class InvalidConfigurationFieldException extends Exception {
     public InvalidConfigurationFieldException(String message) {
       super(message);
@@ -178,7 +180,7 @@
    * A cache for efficient {@link StarlarkLateBoundDefault} loading by configuration fragment. Each
    * configuration fragment class key is mapped to a {@link Map} where keys are configuration field
    * Starlark names, and values are the {@link StarlarkLateBoundDefault}s. Methods must be annotated
-   * with {@link SkylarkConfigurationField} to be considered.
+   * with {@link StarlarkConfigurationField} to be considered.
    */
   private static final LoadingCache<CacheKey, Map<String, StarlarkLateBoundDefault<?>>> fieldCache =
       CacheBuilder.newBuilder()
@@ -197,7 +199,7 @@
 
                   if (fragmentModule != null) {
                     for (Method method : fragmentClass.getMethods()) {
-                      if (method.isAnnotationPresent(SkylarkConfigurationField.class)) {
+                      if (method.isAnnotationPresent(StarlarkConfigurationField.class)) {
                         // TODO(b/68817606): Use annotation processors to verify these constraints.
                         Preconditions.checkArgument(
                             method.getReturnType() == Label.class,
@@ -206,8 +208,8 @@
                             method.getParameterTypes().length == 0,
                             String.format("Method %s must not accept arguments", method));
 
-                        SkylarkConfigurationField configField =
-                            method.getAnnotation(SkylarkConfigurationField.class);
+                        StarlarkConfigurationField configField =
+                            method.getAnnotation(StarlarkConfigurationField.class);
                         lateBoundDefaultMap.put(
                             configField.name(),
                             new StarlarkLateBoundDefault<>(
@@ -226,11 +228,11 @@
   /**
    * Returns a {@link LateBoundDefault} which obtains a late-bound attribute value (of type 'label')
    * specifically by Starlark configuration fragment name and field name, as registered by {@link
-   * SkylarkConfigurationField}.
+   * StarlarkConfigurationField}.
    *
    * @param fragmentClass the configuration fragment class, which must have a valid Starlark name
    * @param fragmentFieldName the configuration field name, as registered by {@link
-   *     SkylarkConfigurationField} annotation
+   *     StarlarkConfigurationField} annotation
    * @param toolsRepository the Bazel tools repository path fragment
    * @throws InvalidConfigurationFieldException if there is no valid configuration field with the
    *     given fragment class and field name
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/SkylarkConfigurationField.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/StarlarkConfigurationField.java
similarity index 98%
rename from src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/SkylarkConfigurationField.java
rename to src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/StarlarkConfigurationField.java
index a84429c..99d6d1a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/SkylarkConfigurationField.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/StarlarkConfigurationField.java
@@ -34,7 +34,7 @@
  */
 @Target({ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
-public @interface SkylarkConfigurationField {
+public @interface StarlarkConfigurationField {
 
   /** Name of the configuration field, as exposed to Starlark. */
   String name();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD
index 7236181..3afd2b4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD
@@ -13,7 +13,7 @@
 java_plugin(
     name = "annotation_preprocessor",
     srcs = glob(["*.java"]),
-    processor_class = "com.google.devtools.build.lib.analysis.skylark.annotations.processor.SkylarkConfigurationFieldProcessor",
+    processor_class = "com.google.devtools.build.lib.analysis.skylark.annotations.processor.StarlarkConfigurationFieldProcessor",
     deps = [
         "//src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations:annotations_internal",
         "//src/main/java/com/google/devtools/build/lib/skylarkinterface",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/SkylarkConfigurationFieldProcessor.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/StarlarkConfigurationFieldProcessor.java
similarity index 78%
rename from src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/SkylarkConfigurationFieldProcessor.java
rename to src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/StarlarkConfigurationFieldProcessor.java
index fbd5c84..2c54eeb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/SkylarkConfigurationFieldProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/StarlarkConfigurationFieldProcessor.java
@@ -14,7 +14,7 @@
 
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor;
 
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import java.util.Set;
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.Messager;
@@ -32,9 +32,9 @@
 import javax.tools.Diagnostic;
 
 /**
- * Annotation processor for {@link SkylarkConfigurationField}.
+ * Annotation processor for {@link StarlarkConfigurationField}.
  *
- * <p>Checks the following invariants about {@link SkylarkConfigurationField}-annotated methods:
+ * <p>Checks the following invariants about {@link StarlarkConfigurationField}-annotated methods:
  *
  * <ul>
  *   <li>The annotated method must be on a configuration fragment.
@@ -47,9 +47,9 @@
  * <p>These properties can be relied upon at runtime without additional checks.
  */
 @SupportedAnnotationTypes({
-  "com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField"
+  "com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField"
 })
-public final class SkylarkConfigurationFieldProcessor extends AbstractProcessor {
+public final class StarlarkConfigurationFieldProcessor extends AbstractProcessor {
 
   private Messager messager;
   private Types typeUtils;
@@ -76,37 +76,37 @@
 
   @Override
   public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
-    for (Element element : roundEnv.getElementsAnnotatedWith(SkylarkConfigurationField.class)) {
-      // Only methods are annotated with SkylarkConfigurationField. This is verified by the
+    for (Element element : roundEnv.getElementsAnnotatedWith(StarlarkConfigurationField.class)) {
+      // Only methods are annotated with StarlarkConfigurationField. This is verified by the
       // @Target(ElementType.METHOD) annotation.
       ExecutableElement methodElement = (ExecutableElement) element;
 
-      if (!isMethodOfSkylarkExposedConfigurationFragment(methodElement)) {
-        error(methodElement, "@SkylarkConfigurationField annotated methods must be methods "
+      if (!isMethodOfStarlarkExposedConfigurationFragment(methodElement)) {
+        error(methodElement, "@StarlarkConfigurationField annotated methods must be methods "
             + "of configuration fragments.");
       }
       // If labelType is null, then Label isn't even included
       // in the current build, so the method clearly does not return it.
       if (labelType == null
           || !typeUtils.isSameType(methodElement.getReturnType(), labelType.asType())) {
-        error(methodElement, "@SkylarkConfigurationField annotated methods must return Label.");
+        error(methodElement, "@StarlarkConfigurationField annotated methods must return Label.");
       }
       if (!methodElement.getModifiers().contains(Modifier.PUBLIC)) {
-        error(methodElement, "@SkylarkConfigurationField annotated methods must be public.");
+        error(methodElement, "@StarlarkConfigurationField annotated methods must be public.");
       }
       if (!methodElement.getParameters().isEmpty()) {
         error(methodElement,
-            "@SkylarkConfigurationField annotated methods must have zero arguments.");
+            "@StarlarkConfigurationField annotated methods must have zero arguments.");
       }
       if (!methodElement.getThrownTypes().isEmpty()) {
         error(methodElement,
-            "@SkylarkConfigurationField annotated must not throw exceptions.");
+            "@StarlarkConfigurationField annotated must not throw exceptions.");
       }
     }
     return true;
   }
 
-  private boolean isMethodOfSkylarkExposedConfigurationFragment(
+  private boolean isMethodOfStarlarkExposedConfigurationFragment(
       ExecutableElement methodElement) {
 
     if (methodElement.getEnclosingElement().getKind() != ElementKind.CLASS) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index e5af00b..4b17b54 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -76,7 +76,7 @@
 import com.google.devtools.build.lib.rules.android.AndroidRuleClasses;
 import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.AndroidToolsDefaultsJarRule;
 import com.google.devtools.build.lib.rules.android.AndroidSdkBaseRule;
-import com.google.devtools.build.lib.rules.android.AndroidSkylarkCommon;
+import com.google.devtools.build.lib.rules.android.AndroidStarlarkCommon;
 import com.google.devtools.build.lib.rules.android.ApkInfo;
 import com.google.devtools.build.lib.rules.android.DexArchiveAspect;
 import com.google.devtools.build.lib.rules.config.ConfigRules;
@@ -343,7 +343,7 @@
 
           AndroidBootstrap bootstrap =
               new AndroidBootstrap(
-                  new AndroidSkylarkCommon(),
+                  new AndroidStarlarkCommon(),
                   ApkInfo.PROVIDER,
                   AndroidInstrumentationInfo.PROVIDER,
                   AndroidDeviceBrokerInfo.PROVIDER,
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
index 9dec16d..721e022 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
@@ -44,7 +44,7 @@
 import com.google.devtools.build.lib.rules.java.JavaToolchainAliasRule;
 import com.google.devtools.build.lib.rules.java.JavaToolchainRule;
 import com.google.devtools.build.lib.rules.java.ProguardLibraryRule;
-import com.google.devtools.build.lib.rules.java.proto.JavaProtoSkylarkCommon;
+import com.google.devtools.build.lib.rules.java.proto.JavaProtoStarlarkCommon;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaBootstrap;
 import com.google.devtools.build.lib.util.ResourceFileLoader;
 import java.io.IOException;
@@ -93,7 +93,7 @@
         new JavaBootstrap(
             new JavaStarlarkCommon(BazelJavaSemantics.INSTANCE),
             JavaInfo.PROVIDER,
-            new JavaProtoSkylarkCommon(),
+            new JavaProtoStarlarkCommon(),
             JavaCcLinkParamsProvider.PROVIDER));
 
     try {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Aspect.java b/src/main/java/com/google/devtools/build/lib/packages/Aspect.java
index b785ab8..716f6b8 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Aspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Aspect.java
@@ -82,11 +82,11 @@
     return forNative(nativeAspectClass, AspectParameters.EMPTY);
   }
 
-  public static Aspect forSkylark(
-      SkylarkAspectClass skylarkAspectClass,
+  public static Aspect forStarlark(
+      StarlarkAspectClass starlarkAspectClass,
       AspectDefinition aspectDefinition,
       AspectParameters parameters) {
-    return new Aspect(skylarkAspectClass, aspectDefinition, parameters);
+    return new Aspect(starlarkAspectClass, aspectDefinition, parameters);
   }
 
   /**
@@ -150,8 +150,8 @@
             aspectDescriptor.getParameters());
       } else {
         AspectDefinition aspectDefinition = context.deserialize(codedIn);
-        return forSkylark(
-            (SkylarkAspectClass) aspectDescriptor.getAspectClass(),
+        return forStarlark(
+            (StarlarkAspectClass) aspectDescriptor.getAspectClass(),
             aspectDefinition,
             aspectDescriptor.getParameters());
       }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
index a291574..c833f14 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectClass.java
@@ -45,7 +45,7 @@
  * targets that produce Java code).
  *
  * <p>Aspects can be defined natively, in Java ({@link NativeAspectClass}) or in Starlark ({@link
- * SkylarkAspectClass}).
+ * StarlarkAspectClass}).
  *
  * <p>Bazel propagates aspects through a multistage process. The general pipeline is as follows:
  *
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index e4f7f1a..aa8d0bd 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -279,7 +279,7 @@
      * Starlark providers.
      */
     public Builder requireSkylarkProviders(StarlarkProviderIdentifier... skylarkProviders) {
-      requiredProviders.addSkylarkSet(ImmutableSet.copyOf(skylarkProviders));
+      requiredProviders.addStarlarkSet(ImmutableSet.copyOf(skylarkProviders));
       return this;
     }
 
@@ -287,7 +287,7 @@
         Iterable<ImmutableSet<StarlarkProviderIdentifier>> providerSets) {
       for (ImmutableSet<StarlarkProviderIdentifier> providerSet : providerSets) {
         if (!providerSet.isEmpty()) {
-          requiredAspectProviders.addSkylarkSet(providerSet);
+          requiredAspectProviders.addStarlarkSet(providerSet);
         }
       }
       return this;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index b8f36b0..d39cbd5 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -116,11 +116,11 @@
 
   @VisibleForSerialization
   @AutoCodec
-  static class SkylarkRuleAspect extends RuleAspect<SkylarkAspectClass> {
+  static class StarlarkRuleAspect extends RuleAspect<StarlarkAspectClass> {
     private final StarlarkDefinedAspect aspect;
 
     @VisibleForSerialization
-    SkylarkRuleAspect(StarlarkDefinedAspect aspect) {
+    StarlarkRuleAspect(StarlarkDefinedAspect aspect) {
       super(aspect.getAspectClass(), aspect.getDefaultParametersExtractor());
       this.aspect = aspect;
     }
@@ -133,7 +133,7 @@
     @Override
     public Aspect getAspect(Rule rule) {
       AspectParameters parameters = parametersExtractor.apply(rule);
-      return Aspect.forSkylark(aspectClass, aspect.getDefinition(parameters), parameters);
+      return Aspect.forStarlark(aspectClass, aspect.getDefinition(parameters), parameters);
     }
   }
 
@@ -690,16 +690,16 @@
      *
      * <p>During the loading phase, the computed default template will be specialized for each rule
      * it applies to. Those rules' attribute values will not be references to {@link
-     * SkylarkComputedDefaultTemplate}s, but instead will be references to {@link
-     * SkylarkComputedDefault}s.
+     * StarlarkComputedDefaultTemplate}s, but instead will be references to {@link
+     * StarlarkComputedDefault}s.
      *
      * <p>If the computed default returns a Label that is a target, that target will become an
      * implicit dependency of this Rule; we will load the target (and its dependencies) if it
      * encounters the Rule and build the target if needs to apply the Rule.
      */
-    public Builder<TYPE> value(SkylarkComputedDefaultTemplate skylarkComputedDefaultTemplate) {
+    public Builder<TYPE> value(StarlarkComputedDefaultTemplate starlarkComputedDefaultTemplate) {
       Preconditions.checkState(!valueSet, "the default value is already set");
-      value = skylarkComputedDefaultTemplate;
+      value = starlarkComputedDefaultTemplate;
       valueSource = AttributeValueSource.COMPUTED_DEFAULT;
       valueSet = true;
       return this;
@@ -978,7 +978,7 @@
       Preconditions.checkState(type.getLabelClass() == LabelClass.DEPENDENCY,
           "must be a label-valued type");
       for (Iterable<StarlarkProviderIdentifier> providers : providersList) {
-        this.requiredProvidersBuilder.addSkylarkSet(ImmutableSet.copyOf(providers));
+        this.requiredProvidersBuilder.addStarlarkSet(ImmutableSet.copyOf(providers));
       }
       return this;
     }
@@ -1034,11 +1034,11 @@
     @AutoCodec @AutoCodec.VisibleForSerialization
     static final Function<Rule, AspectParameters> EMPTY_FUNCTION = input -> AspectParameters.EMPTY;
 
-    public Builder<TYPE> aspect(StarlarkDefinedAspect skylarkAspect) throws EvalException {
-      SkylarkRuleAspect skylarkRuleAspect = new SkylarkRuleAspect(skylarkAspect);
-      RuleAspect<?> oldAspect = this.aspects.put(skylarkAspect.getName(), skylarkRuleAspect);
+    public Builder<TYPE> aspect(StarlarkDefinedAspect starlarkAspect) throws EvalException {
+      StarlarkRuleAspect starlarkRuleAspect = new StarlarkRuleAspect(starlarkAspect);
+      RuleAspect<?> oldAspect = this.aspects.put(starlarkAspect.getName(), starlarkRuleAspect);
       if (oldAspect != null) {
-        throw Starlark.errorf("aspect %s added more than once", skylarkAspect.getName());
+        throw Starlark.errorf("aspect %s added more than once", starlarkAspect.getName());
       }
       return this;
     }
@@ -1324,8 +1324,8 @@
      *
      * <p>This constructor should not be used by native {@link ComputedDefault} functions. The limit
      * of at-most-two depended-on configurable attributes is intended, to limit the exponential
-     * growth of possible values. {@link SkylarkComputedDefault} uses this, but is limited by {@link
-     * FixedComputationLimiter#COMPUTED_DEFAULT_MAX_COMBINATIONS}.
+     * growth of possible values. {@link StarlarkComputedDefault} uses this, but is limited by
+     * {@link FixedComputationLimiter#COMPUTED_DEFAULT_MAX_COMBINATIONS}.
      */
     protected ComputedDefault(ImmutableList<String> dependencies) {
       // Order is important for #createDependencyAssignmentTuple.
@@ -1368,16 +1368,16 @@
 
   /**
    * A Starlark-defined computed default, which can be precomputed for a specific {@link Rule} by
-   * calling {@link #computePossibleValues}, which returns a {@link SkylarkComputedDefault} that
+   * calling {@link #computePossibleValues}, which returns a {@link StarlarkComputedDefault} that
    * contains a lookup table.
    */
-  public static final class SkylarkComputedDefaultTemplate {
+  public static final class StarlarkComputedDefaultTemplate {
     private final Type<?> type;
     private final StarlarkCallbackHelper callback;
     private final ImmutableList<String> dependencies;
 
     /**
-     * Creates a new SkylarkComputedDefaultTemplate that allows the computation of attribute values
+     * Creates a new StarlarkComputedDefaultTemplate that allows the computation of attribute values
      * via a callback function during loading phase.
      *
      * @param type The type of the value of this attribute.
@@ -1385,7 +1385,7 @@
      *     attribute.
      * @param callback A function to compute the actual attribute value.
      */
-    public SkylarkComputedDefaultTemplate(
+    public StarlarkComputedDefaultTemplate(
         Type<?> type, ImmutableList<String> dependencies, StarlarkCallbackHelper callback) {
       this.type = Preconditions.checkNotNull(type);
       // Order is important for #createDependencyAssignmentTuple.
@@ -1395,8 +1395,8 @@
     }
 
     /**
-     * Returns a {@link SkylarkComputedDefault} containing a lookup table specifying the output of
-     * this {@link SkylarkComputedDefaultTemplate}'s callback given each possible assignment {@code
+     * Returns a {@link StarlarkComputedDefault} containing a lookup table specifying the output of
+     * this {@link StarlarkComputedDefaultTemplate}'s callback given each possible assignment {@code
      * rule} might make to the attributes specified by {@link #dependencies}.
      *
      * <p>If the rule is missing an attribute specified by {@link #dependencies}, or if there are
@@ -1406,11 +1406,11 @@
      * <p>May only be called after all non-{@link ComputedDefault} attributes have been set on the
      * {@code rule}.
      */
-    SkylarkComputedDefault computePossibleValues(
+    StarlarkComputedDefault computePossibleValues(
         Attribute attr, final Rule rule, final EventHandler eventHandler)
         throws InterruptedException, CannotPrecomputeDefaultsException {
 
-      final SkylarkComputedDefaultTemplate owner = SkylarkComputedDefaultTemplate.this;
+      final StarlarkComputedDefaultTemplate owner = StarlarkComputedDefaultTemplate.this;
       final String msg =
           String.format(
               "Cannot compute default value of attribute '%s' in rule '%s': ",
@@ -1453,7 +1453,7 @@
         rule.reportError(error, eventHandler);
         throw new CannotPrecomputeDefaultsException(error);
       }
-      return new SkylarkComputedDefault(dependencies, dependencyTypesBuilder.build(), lookupTable);
+      return new StarlarkComputedDefault(dependencies, dependencyTypesBuilder.build(), lookupTable);
     }
 
     private Object computeValue(EventHandler eventHandler, AttributeMap rule)
@@ -1507,13 +1507,13 @@
    * {@link #getPossibleValues(Type, Rule)} and {@link #getDefault(AttributeMap)} do lookups in that
    * table.
    */
-  static final class SkylarkComputedDefault extends ComputedDefault {
+  static final class StarlarkComputedDefault extends ComputedDefault {
 
     private final List<Type<?>> dependencyTypes;
     private final Map<List<Object>, Object> lookupTable;
 
     /**
-     * Creates a new SkylarkComputedDefault containing a lookup table.
+     * Creates a new StarlarkComputedDefault containing a lookup table.
      *
      * @param dependencies A list of all names of other attributes that are accessed by this
      *     attribute.
@@ -1521,7 +1521,7 @@
      * @param lookupTable An exhaustive mapping from requiredAttributes assignments to values this
      *     computed default evaluates to.
      */
-    SkylarkComputedDefault(
+    StarlarkComputedDefault(
         ImmutableList<String> dependencies,
         ImmutableList<Type<?>> dependencyTypes,
         Map<List<Object>, Object> lookupTable) {
@@ -1682,7 +1682,7 @@
   }
 
   /**
-   * An abstract {@link LateBoundDefault} class so that {@code SkylarkLateBoundDefault} can derive
+   * An abstract {@link LateBoundDefault} class so that {@code StarlarkLateBoundDefault} can derive
    * from {@link LateBoundDefault} without compromising the type-safety of the second generic
    * parameter to {@link LateBoundDefault}.
    */
@@ -1839,7 +1839,7 @@
   // 1. defaultValue == null.
   // 2. defaultValue instanceof ComputedDefault &&
   //    type.isValid(defaultValue.getDefault())
-  // 3. defaultValue instanceof SkylarkComputedDefaultTemplate &&
+  // 3. defaultValue instanceof StarlarkComputedDefaultTemplate &&
   //    type.isValid(defaultValue.computePossibleValues().getDefault())
   // 4. type.isValid(defaultValue).
   // 5. defaultValue instanceof LateBoundDefault &&
@@ -2251,7 +2251,7 @@
    */
   boolean hasComputedDefault() {
     return (defaultValue instanceof ComputedDefault)
-        || (defaultValue instanceof SkylarkComputedDefaultTemplate)
+        || (defaultValue instanceof StarlarkComputedDefaultTemplate)
         || (condition != null);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
index fb2dea6..4602f92 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
@@ -53,7 +53,7 @@
   /**
    * Sets of native providers. If non-empty, {@link #constraint} is {@link Constraint#RESTRICTED}
    */
-  private final ImmutableList<ImmutableSet<StarlarkProviderIdentifier>> skylarkProviders;
+  private final ImmutableList<ImmutableSet<StarlarkProviderIdentifier>> starlarkProviders;
 
   public String getDescription() {
     return constraint.getDescription(this);
@@ -80,7 +80,7 @@
       @Override
       public boolean satisfies(
           Predicate<Class<? extends TransitiveInfoProvider>> hasNativeProvider,
-          Predicate<StarlarkProviderIdentifier> hasSkylarkProvider,
+          Predicate<StarlarkProviderIdentifier> hasStarlarkProvider,
           RequiredProviders requiredProviders,
           Builder missingProviders) {
         return true;
@@ -109,7 +109,7 @@
       @Override
       public boolean satisfies(
           Predicate<Class<? extends TransitiveInfoProvider>> hasNativeProvider,
-          Predicate<StarlarkProviderIdentifier> hasSkylarkProvider,
+          Predicate<StarlarkProviderIdentifier> hasStarlarkProvider,
           RequiredProviders requiredProviders,
           Builder missingProviders) {
         return false;
@@ -146,7 +146,7 @@
       @Override
       public boolean satisfies(
           Predicate<Class<? extends TransitiveInfoProvider>> hasNativeProvider,
-          Predicate<StarlarkProviderIdentifier> hasSkylarkProvider,
+          Predicate<StarlarkProviderIdentifier> hasStarlarkProvider,
           RequiredProviders requiredProviders,
           Builder missingProviders) {
         for (ImmutableSet<Class<? extends TransitiveInfoProvider>> nativeProviderSet :
@@ -165,17 +165,16 @@
           }
         }
 
-        for (ImmutableSet<StarlarkProviderIdentifier> skylarkProviderSet :
-            requiredProviders.skylarkProviders) {
-          if (skylarkProviderSet.stream().allMatch(hasSkylarkProvider)) {
+        for (ImmutableSet<StarlarkProviderIdentifier> starlarkProviderSet :
+            requiredProviders.starlarkProviders) {
+          if (starlarkProviderSet.stream().allMatch(hasStarlarkProvider)) {
             return true;
           }
           // Collect missing providers
           if (missingProviders != null) {
-            missingProviders.addSkylarkSet(
-                skylarkProviderSet
-                    .stream()
-                    .filter(hasSkylarkProvider.negate())
+            missingProviders.addStarlarkSet(
+                starlarkProviderSet.stream()
+                    .filter(hasStarlarkProvider.negate())
                     .collect(ImmutableSet.toImmutableSet()));
           }
         }
@@ -189,9 +188,9 @@
             providers.nativeProviders) {
           result.addNativeSet(nativeProviderSet);
         }
-        for (ImmutableSet<StarlarkProviderIdentifier> skylarkProviderSet :
-            providers.skylarkProviders) {
-          result.addSkylarkSet(skylarkProviderSet);
+        for (ImmutableSet<StarlarkProviderIdentifier> starlarkProviderSet :
+            providers.starlarkProviders) {
+          result.addStarlarkSet(starlarkProviderSet);
         }
         return result;
       }
@@ -200,7 +199,7 @@
       public String getDescription(RequiredProviders providers) {
         StringBuilder result = new StringBuilder();
         describe(result, providers.nativeProviders, Class::getSimpleName);
-        describe(result, providers.skylarkProviders, id -> "'" + id.toString() + "'");
+        describe(result, providers.starlarkProviders, id -> "'" + id.toString() + "'");
         return result.toString();
       }
     };
@@ -213,11 +212,11 @@
 
     /**
      * Checks if a set of providers encoded by predicates {@code hasNativeProviders} and {@code
-     * hasSkylarkProvider} satisfies these {@code RequiredProviders}
+     * hasStarlarkProvider} satisfies these {@code RequiredProviders}
      */
     abstract boolean satisfies(
         Predicate<Class<? extends TransitiveInfoProvider>> hasNativeProvider,
-        Predicate<StarlarkProviderIdentifier> hasSkylarkProvider,
+        Predicate<StarlarkProviderIdentifier> hasStarlarkProvider,
         RequiredProviders requiredProviders,
         @Nullable Builder missingProviders);
 
@@ -234,12 +233,12 @@
 
   /**
    * Checks if a set of providers encoded by predicates {@code hasNativeProviders} and {@code
-   * hasSkylarkProvider} satisfies this {@code RequiredProviders} instance.
+   * hasStarlarkProvider} satisfies this {@code RequiredProviders} instance.
    */
   public boolean isSatisfiedBy(
       Predicate<Class<? extends TransitiveInfoProvider>> hasNativeProvider,
-      Predicate<StarlarkProviderIdentifier> hasSkylarkProvider) {
-    return constraint.satisfies(hasNativeProvider, hasSkylarkProvider, this, null);
+      Predicate<StarlarkProviderIdentifier> hasStarlarkProvider) {
+    return constraint.satisfies(hasNativeProvider, hasStarlarkProvider, this, null);
   }
 
   /**
@@ -248,9 +247,9 @@
    */
   public RequiredProviders getMissing(
       Predicate<Class<? extends TransitiveInfoProvider>> hasNativeProvider,
-      Predicate<StarlarkProviderIdentifier> hasSkylarkProvider) {
+      Predicate<StarlarkProviderIdentifier> hasStarlarkProvider) {
     Builder builder = acceptAnyBuilder();
-    if (constraint.satisfies(hasNativeProvider, hasSkylarkProvider, this, builder)) {
+    if (constraint.satisfies(hasNativeProvider, hasStarlarkProvider, this, builder)) {
       // Ignore all collected missing providers.
       return acceptAnyBuilder().build();
     }
@@ -279,15 +278,15 @@
   RequiredProviders(
       Constraint constraint,
       ImmutableList<ImmutableSet<Class<? extends TransitiveInfoProvider>>> nativeProviders,
-      ImmutableList<ImmutableSet<StarlarkProviderIdentifier>> skylarkProviders) {
+      ImmutableList<ImmutableSet<StarlarkProviderIdentifier>> starlarkProviders) {
     this.constraint = constraint;
 
-    Preconditions.checkState(constraint.equals(Constraint.RESTRICTED)
-        || (nativeProviders.isEmpty() && skylarkProviders.isEmpty())
-    );
+    Preconditions.checkState(
+        constraint.equals(Constraint.RESTRICTED)
+            || (nativeProviders.isEmpty() && starlarkProviders.isEmpty()));
 
     this.nativeProviders = nativeProviders;
-    this.skylarkProviders = skylarkProviders;
+    this.starlarkProviders = starlarkProviders;
   }
 
   /** Helper method to describe lists of sets of things. */
@@ -317,12 +316,12 @@
     RequiredProviders that = (RequiredProviders) o;
     return constraint == that.constraint
         && Objects.equals(nativeProviders, that.nativeProviders)
-        && Objects.equals(skylarkProviders, that.skylarkProviders);
+        && Objects.equals(starlarkProviders, that.starlarkProviders);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(constraint, nativeProviders, skylarkProviders);
+    return Objects.hash(constraint, nativeProviders, starlarkProviders);
   }
 
   /**
@@ -350,13 +349,13 @@
   public static class Builder {
     private final ImmutableList.Builder<ImmutableSet<Class<? extends TransitiveInfoProvider>>>
         nativeProviders;
-    private final ImmutableList.Builder<ImmutableSet<StarlarkProviderIdentifier>> skylarkProviders;
+    private final ImmutableList.Builder<ImmutableSet<StarlarkProviderIdentifier>> starlarkProviders;
     private Constraint constraint;
 
     private Builder(boolean acceptNone) {
       constraint = acceptNone ? Constraint.NONE : Constraint.ANY;
       nativeProviders = ImmutableList.builder();
-      skylarkProviders = ImmutableList.builder();
+      starlarkProviders = ImmutableList.builder();
     }
 
     /**
@@ -365,10 +364,10 @@
      * <p>If all of these providers are present in the dependency, the dependency satisfies {@link
      * RequiredProviders}.
      */
-    public Builder addSkylarkSet(ImmutableSet<StarlarkProviderIdentifier> skylarkProviderSet) {
+    public Builder addStarlarkSet(ImmutableSet<StarlarkProviderIdentifier> starlarkProviderSet) {
       constraint = Constraint.RESTRICTED;
-      Preconditions.checkState(!skylarkProviderSet.isEmpty());
-      this.skylarkProviders.add(skylarkProviderSet);
+      Preconditions.checkState(!starlarkProviderSet.isEmpty());
+      this.starlarkProviders.add(starlarkProviderSet);
       return this;
     }
 
@@ -387,7 +386,7 @@
     }
 
     public RequiredProviders build() {
-      return new RequiredProviders(constraint, nativeProviders.build(), skylarkProviders.build());
+      return new RequiredProviders(constraint, nativeProviders.build(), starlarkProviders.build());
     }
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index c989e93..69ed349 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -44,8 +44,8 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.NullEventHandler;
 import com.google.devtools.build.lib.packages.Attribute.ComputedDefault;
-import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate;
-import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate.CannotPrecomputeDefaultsException;
+import com.google.devtools.build.lib.packages.Attribute.StarlarkComputedDefaultTemplate;
+import com.google.devtools.build.lib.packages.Attribute.StarlarkComputedDefaultTemplate.CannotPrecomputeDefaultsException;
 import com.google.devtools.build.lib.packages.BuildType.LabelConversionContext;
 import com.google.devtools.build.lib.packages.BuildType.SelectorList;
 import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
@@ -2144,8 +2144,8 @@
       // be discovered and propagated here.
       Object valueToSet;
       Object defaultValue = attr.getDefaultValue(rule);
-      if (defaultValue instanceof SkylarkComputedDefaultTemplate) {
-        SkylarkComputedDefaultTemplate template = (SkylarkComputedDefaultTemplate) defaultValue;
+      if (defaultValue instanceof StarlarkComputedDefaultTemplate) {
+        StarlarkComputedDefaultTemplate template = (StarlarkComputedDefaultTemplate) defaultValue;
         valueToSet = template.computePossibleValues(attr, rule, eventHandler);
       } else if (defaultValue instanceof ComputedDefault) {
         // Compute all possible values to verify that the ComputedDefault is well-defined. This was
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
index a5f0c2a..b579056 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleFactory.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate.CannotPrecomputeDefaultsException;
+import com.google.devtools.build.lib.packages.Attribute.StarlarkComputedDefaultTemplate.CannotPrecomputeDefaultsException;
 import com.google.devtools.build.lib.packages.Package.NameConflictException;
 import com.google.devtools.build.lib.packages.PackageFactory.PackageContext;
 import com.google.devtools.build.lib.syntax.Location;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspectClass.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspectClass.java
similarity index 87%
rename from src/main/java/com/google/devtools/build/lib/packages/SkylarkAspectClass.java
rename to src/main/java/com/google/devtools/build/lib/packages/StarlarkAspectClass.java
index 74be5c1..cb0678d 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspectClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkAspectClass.java
@@ -22,11 +22,11 @@
 /** {@link AspectClass} for aspects defined in Starlark. */
 @AutoCodec
 @Immutable
-public final class SkylarkAspectClass implements AspectClass {
+public final class StarlarkAspectClass implements AspectClass {
   private final Label extensionLabel;
   private final String exportedName;
 
-  public SkylarkAspectClass(Label extensionLabel, String exportedName) {
+  public StarlarkAspectClass(Label extensionLabel, String exportedName) {
     this.extensionLabel = extensionLabel;
     this.exportedName = exportedName;
   }
@@ -50,11 +50,11 @@
       return true;
     }
 
-    if (!(o instanceof SkylarkAspectClass)) {
+    if (!(o instanceof StarlarkAspectClass)) {
       return false;
     }
 
-    SkylarkAspectClass that = (SkylarkAspectClass) o;
+    StarlarkAspectClass that = (StarlarkAspectClass) o;
 
     return extensionLabel.equals(that.extensionLabel)
         && exportedName.equals(that.exportedName);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
index 7503394..e6f1f03 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkDefinedAspect.java
@@ -45,7 +45,7 @@
   private final ImmutableList<Label> requiredToolchains;
   private final boolean applyToGeneratingRules;
 
-  private SkylarkAspectClass aspectClass;
+  private StarlarkAspectClass aspectClass;
 
   public StarlarkDefinedAspect(
       StarlarkCallable implementation,
@@ -89,7 +89,7 @@
       ImmutableSet<String> hostFragments,
       ImmutableList<Label> requiredToolchains,
       boolean applyToGeneratingRules,
-      SkylarkAspectClass aspectClass) {
+      StarlarkAspectClass aspectClass) {
     this(
         implementation,
         attributeAspects,
@@ -133,7 +133,7 @@
   }
 
   @Override
-  public SkylarkAspectClass getAspectClass() {
+  public StarlarkAspectClass getAspectClass() {
     Preconditions.checkState(isExported());
     return aspectClass;
   }
@@ -146,7 +146,7 @@
   @Override
   public void export(Label extensionLabel, String name) {
     Preconditions.checkArgument(!isExported());
-    this.aspectClass = new SkylarkAspectClass(extensionLabel, name);
+    this.aspectClass = new StarlarkAspectClass(extensionLabel, name);
   }
 
   private static final List<String> allAttrAspects = Arrays.asList("*");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index 285f075..b33d1e5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.analysis.config.Fragment;
 import com.google.devtools.build.lib.analysis.config.FragmentOptions;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode;
@@ -1083,7 +1083,7 @@
     return cpu;
   }
 
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "android_sdk_label",
       doc = "Returns the target denoted by the value of the --android_sdk flag",
       defaultLabel = AndroidRuleClasses.DEFAULT_SDK,
@@ -1315,7 +1315,7 @@
 
   /** Returns the label provided with --legacy_main_dex_list_generator, if any. */
   // TODO(b/147692286): Move R8's main dex list tool into tool repository.
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "legacy_main_dex_list_generator",
       doc = "Returns the label provided with --legacy_main_dex_list_generator, if any.")
   @Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommon.java
similarity index 95%
rename from src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java
rename to src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommon.java
index 1ba6abf..03e86c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommon.java
@@ -16,11 +16,11 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
 import com.google.devtools.build.lib.rules.java.JavaInfo;
-import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSkylarkCommonApi;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSplitTransititionApi;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidStarlarkCommonApi;
 
 /** Common utilities for Starlark rules related to Android. */
-public class AndroidSkylarkCommon implements AndroidSkylarkCommonApi<Artifact, JavaInfo> {
+public class AndroidStarlarkCommon implements AndroidStarlarkCommonApi<Artifact, JavaInfo> {
 
   @Override
   public AndroidDeviceBrokerInfo createDeviceBrokerInfo(String deviceBrokerType) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index 1a7d193..9e43076 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -26,7 +26,7 @@
 import com.google.devtools.build.lib.analysis.config.CoreOptions;
 import com.google.devtools.build.lib.analysis.config.Fragment;
 import com.google.devtools.build.lib.analysis.config.FragmentOptions;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions.AppleBitcodeMode;
@@ -367,12 +367,11 @@
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "xcode_config_label",
       doc = "Returns the target denoted by the value of the --xcode_version_config flag",
       defaultLabel = AppleCommandLineOptions.DEFAULT_XCODE_VERSION_CONFIG_LABEL,
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public Label getXcodeConfigLabel() {
     return xcodeConfigLabel;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
index 4805fc1..e9a4b7a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java
@@ -36,22 +36,22 @@
 public class ConfigFeatureFlagProvider extends NativeInfo implements ConfigFeatureFlagProviderApi {
 
   /** Name used in Starlark for accessing ConfigFeatureFlagProvider. */
-  static final String SKYLARK_NAME = "FeatureFlagInfo";
+  static final String STARLARK_NAME = "FeatureFlagInfo";
 
   /**
    * Constructor and identifier for ConfigFeatureFlagProvider. This is the value of {@code
    * config_common.FeatureFlagInfo}.
    */
-  static final NativeProvider<ConfigFeatureFlagProvider> SKYLARK_CONSTRUCTOR = new Constructor();
+  static final NativeProvider<ConfigFeatureFlagProvider> STARLARK_CONSTRUCTOR = new Constructor();
 
   static final RequiredProviders REQUIRE_CONFIG_FEATURE_FLAG_PROVIDER =
-      RequiredProviders.acceptAnyBuilder().addSkylarkSet(ImmutableSet.of(id())).build();
+      RequiredProviders.acceptAnyBuilder().addStarlarkSet(ImmutableSet.of(id())).build();
 
   private final String value;
   private final Predicate<String> validityPredicate;
 
   private ConfigFeatureFlagProvider(String value, Predicate<String> validityPredicate) {
-    super(SKYLARK_CONSTRUCTOR);
+    super(STARLARK_CONSTRUCTOR);
 
     this.value = value;
     this.validityPredicate = validityPredicate;
@@ -72,7 +72,7 @@
       implements StarlarkValue {
 
     Constructor() {
-      super(ConfigFeatureFlagProvider.class, SKYLARK_NAME);
+      super(ConfigFeatureFlagProvider.class, STARLARK_NAME);
     }
 
     @SkylarkCallable(
@@ -91,12 +91,12 @@
   }
 
   public static StarlarkProviderIdentifier id() {
-    return SKYLARK_CONSTRUCTOR.id();
+    return STARLARK_CONSTRUCTOR.id();
   }
 
   /** Retrieves and casts the provider from the given target. */
   public static ConfigFeatureFlagProvider fromTarget(TransitiveInfoCollection target) {
-    return target.get(SKYLARK_CONSTRUCTOR);
+    return target.get(STARLARK_CONSTRUCTOR);
   }
 
   /** Gets the current value of the flag in the flag's current configuration. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
index 515c3a1..ea44ab7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
@@ -50,7 +50,7 @@
     builder.addRuleDefinition(new ConfigRuleClasses.ConfigFeatureFlagRule());
     builder.addSkylarkBootstrap(
         new ConfigBootstrap(
-            new ConfigSkylarkCommon(), new StarlarkConfig(), new ConfigGlobalLibrary()));
+            new ConfigStarlarkCommon(), new StarlarkConfig(), new ConfigGlobalLibrary()));
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigStarlarkCommon.java
similarity index 86%
rename from src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java
rename to src/main/java/com/google/devtools/build/lib/rules/config/ConfigStarlarkCommon.java
index 8515c59..4532e4c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigStarlarkCommon.java
@@ -15,13 +15,13 @@
 package com.google.devtools.build.lib.rules.config;
 
 import com.google.devtools.build.lib.packages.Provider;
-import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigSkylarkCommonApi;
+import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigStarlarkCommonApi;
 
 /** Starlark namespace used to interact with Blaze's configurability APIs. */
-public class ConfigSkylarkCommon implements ConfigSkylarkCommonApi {
+public class ConfigStarlarkCommon implements ConfigStarlarkCommonApi {
 
   @Override
   public Provider getConfigFeatureFlagProviderConstructor() {
-    return ConfigFeatureFlagProvider.SKYLARK_CONSTRUCTOR;
+    return ConfigFeatureFlagProvider.STARLARK_CONSTRUCTOR;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 86d7d36..b735621 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -26,7 +26,7 @@
 import com.google.devtools.build.lib.analysis.config.Fragment;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
 import com.google.devtools.build.lib.analysis.config.PerLabelOptions;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -281,7 +281,7 @@
   }
 
   /** Returns the label of the <code>cc_compiler</code> rule for the C++ configuration. */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "cc_toolchain",
       doc = "The label of the target describing the C++ toolchain",
       defaultLabel = "//tools/cpp:crosstool",
@@ -372,7 +372,9 @@
 
   /** Returns the custom malloc library label. */
   @Override
-  @SkylarkConfigurationField(name = "custom_malloc", doc = "The label specified in --custom_malloc")
+  @StarlarkConfigurationField(
+      name = "custom_malloc",
+      doc = "The label specified in --custom_malloc")
   public Label customMalloc() {
     return cppOptions.customMalloc;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index 65a4d07..b56bcc3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -41,7 +41,7 @@
         "proto/JavaProtoAspectCommon.java",
         "proto/JavaProtoLibrary.java",
         "proto/JavaProtoLibraryAspectProvider.java",
-        "proto/JavaProtoSkylarkCommon.java",
+        "proto/JavaProtoStarlarkCommon.java",
         "proto/JplCcLinkParams.java",
         "proto/ProtoJavacOpts.java",
         "proto/StrictDepsUtils.java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
index f5774ad..b64f585 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.analysis.config.CoreOptionConverters.StrictDepsMode;
 import com.google.devtools.build.lib.analysis.config.Fragment;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -294,7 +294,7 @@
   }
 
   /** Returns the label provided with --proguard_top, if any. */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "proguard_top",
       doc = "Returns the label provided with --proguard_top, if any.",
       defaultInToolRepository = true)
@@ -329,7 +329,7 @@
   }
 
   /** Returns the label of the default java_toolchain rule */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "java_toolchain",
       doc = "Returns the label of the default java_toolchain rule.",
       defaultLabel = "//tools/jdk:toolchain",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
similarity index 98%
rename from src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java
rename to src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
index 324b5f9..fb4e927 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoStarlarkCommon.java
@@ -33,7 +33,7 @@
 import com.google.devtools.build.lib.syntax.EvalException;
 
 /** A class that exposes Java common methods for proto compilation. */
-public class JavaProtoSkylarkCommon
+public class JavaProtoStarlarkCommon
     implements JavaProtoCommonApi<
         Artifact, ConstraintValueInfo, StarlarkRuleContext, ConfiguredTarget> {
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java
index e89c4bc..a5c68b3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
 import com.google.devtools.build.lib.analysis.config.Fragment;
 import com.google.devtools.build.lib.analysis.config.FragmentOptions;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.events.Event;
@@ -121,13 +121,14 @@
    * Returns the label of the dead code report generated by ProGuard for J2ObjC to eliminate dead
    * code. The dead Java code in the report will not be translated to Objective-C code.
    *
-   * Returns null if no such report was requested.
+   * <p>Returns null if no such report was requested.
    */
   @Nullable
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "dead_code_report",
-      doc = "The label of the dead code report generated by ProGuard for dead code elimination, "
-          + "or <code>None</code> if no such report was requested.",
+      doc =
+          "The label of the dead code report generated by ProGuard for dead code elimination, "
+              + "or <code>None</code> if no such report was requested.",
       defaultLabel = "")
   public Label deadCodeReport() {
     return deadCodeReport;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
index cffd92d..9edc0b8 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/InfoItem.java
@@ -26,6 +26,7 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.Attribute;
+import com.google.devtools.build.lib.packages.Attribute.StarlarkComputedDefaultTemplate;
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.ProtoUtils;
 import com.google.devtools.build.lib.packages.RuleClass;
@@ -691,7 +692,7 @@
         Object v = attr.getDefaultValueUnchecked();
         if (!(v == null
             || v instanceof Attribute.ComputedDefault
-            || v instanceof Attribute.SkylarkComputedDefaultTemplate
+            || v instanceof StarlarkComputedDefaultTemplate
             || v instanceof Attribute.LateBoundDefault
             || v == t.getDefaultValue())) {
           attrPb.setDefault(convertAttrValue(t, v));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index f590ed4..5e1d4a9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -55,8 +55,8 @@
 import com.google.devtools.build.lib.packages.OutputFile;
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.packages.RuleClassProvider;
-import com.google.devtools.build.lib.packages.SkylarkAspectClass;
 import com.google.devtools.build.lib.packages.StarlarkAspect;
+import com.google.devtools.build.lib.packages.StarlarkAspectClass;
 import com.google.devtools.build.lib.packages.StarlarkDefinedAspect;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.packages.Type.ConversionException;
@@ -125,7 +125,7 @@
    */
   @Nullable
   static StarlarkDefinedAspect loadStarlarkDefinedAspect(
-      Environment env, SkylarkAspectClass starlarkAspectClass)
+      Environment env, StarlarkAspectClass starlarkAspectClass)
       throws AspectCreationException, InterruptedException {
     Label extensionLabel = starlarkAspectClass.getExtensionLabel();
     String starlarkValueName = starlarkAspectClass.getExportedName();
@@ -196,8 +196,8 @@
       NativeAspectClass nativeAspectClass = (NativeAspectClass) key.getAspectClass();
       aspectFactory = (ConfiguredAspectFactory) nativeAspectClass;
       aspect = Aspect.forNative(nativeAspectClass, key.getParameters());
-    } else if (key.getAspectClass() instanceof SkylarkAspectClass) {
-      SkylarkAspectClass starlarkAspectClass = (SkylarkAspectClass) key.getAspectClass();
+    } else if (key.getAspectClass() instanceof StarlarkAspectClass) {
+      StarlarkAspectClass starlarkAspectClass = (StarlarkAspectClass) key.getAspectClass();
       StarlarkDefinedAspect starlarkAspect;
       try {
         starlarkAspect = loadStarlarkDefinedAspect(env, starlarkAspectClass);
@@ -210,7 +210,7 @@
 
       aspectFactory = new SkylarkAspectFactory(starlarkAspect);
       aspect =
-          Aspect.forSkylark(
+          Aspect.forStarlark(
               starlarkAspect.getAspectClass(),
               starlarkAspect.getDefinition(key.getParameters()),
               key.getParameters());
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBootstrap.java
index 1b1d866..e459967 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBootstrap.java
@@ -28,7 +28,7 @@
 /** {@link Bootstrap} for Starlark objects related to Android rules. */
 public class AndroidBootstrap implements Bootstrap {
 
-  private final AndroidSkylarkCommonApi<?, ?> androidCommon;
+  private final AndroidStarlarkCommonApi<?, ?> androidCommon;
   private final ApkInfoApiProvider apkInfoProvider;
   private final AndroidInstrumentationInfoApiProvider<?> androidInstrumentationInfoProvider;
   private final AndroidDeviceBrokerInfoApiProvider androidDeviceBrokerInfoProvider;
@@ -39,7 +39,7 @@
       androidApplicationResourceInfoApiProvider;
 
   public AndroidBootstrap(
-      AndroidSkylarkCommonApi<?, ?> androidCommon,
+      AndroidStarlarkCommonApi<?, ?> androidCommon,
       ApkInfoApiProvider apkInfoProvider,
       AndroidInstrumentationInfoApiProvider<?> androidInstrumentationInfoProvider,
       AndroidDeviceBrokerInfoApiProvider androidDeviceBrokerInfoProvider,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidStarlarkCommonApi.java
similarity index 97%
rename from src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java
rename to src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidStarlarkCommonApi.java
index 331953e..b8df80c 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidStarlarkCommonApi.java
@@ -29,7 +29,7 @@
             + "you will be broken when it is removed."
             + "Common utilities and functionality related to Android rules.",
     documented = false)
-public interface AndroidSkylarkCommonApi<FileT extends FileApi, JavaInfoT extends JavaInfoApi<?>>
+public interface AndroidStarlarkCommonApi<FileT extends FileApi, JavaInfoT extends JavaInfoApi<?>>
     extends StarlarkValue {
 
   @SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java
index 7469ccd..cdee6a4 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigBootstrap.java
@@ -24,22 +24,22 @@
  */
 public class ConfigBootstrap implements Bootstrap {
 
-  private final ConfigSkylarkCommonApi configSkylarkCommonApi;
+  private final ConfigStarlarkCommonApi configStarlarkCommonApi;
   private final StarlarkConfigApi starlarkConfigApi;
   private final ConfigGlobalLibraryApi configGlobalLibrary;
 
   public ConfigBootstrap(
-      ConfigSkylarkCommonApi configSkylarkCommonApi,
+      ConfigStarlarkCommonApi configStarlarkCommonApi,
       StarlarkConfigApi starlarkConfigApi,
       ConfigGlobalLibraryApi configGlobalLibrary) {
-    this.configSkylarkCommonApi = configSkylarkCommonApi;
+    this.configStarlarkCommonApi = configStarlarkCommonApi;
     this.starlarkConfigApi = starlarkConfigApi;
     this.configGlobalLibrary = configGlobalLibrary;
   }
 
   @Override
   public void addBindingsToBuilder(Builder<String, Object> builder) {
-    builder.put("config_common", configSkylarkCommonApi);
+    builder.put("config_common", configStarlarkCommonApi);
     builder.put("config", starlarkConfigApi);
     Starlark.addMethods(builder, configGlobalLibrary);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigSkylarkCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigStarlarkCommonApi.java
similarity index 95%
rename from src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigSkylarkCommonApi.java
rename to src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigStarlarkCommonApi.java
index 829ca6b..922be0e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigSkylarkCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config/ConfigStarlarkCommonApi.java
@@ -23,7 +23,7 @@
 @StarlarkBuiltin(
     name = "config_common",
     doc = "Functions for Starlark to interact with Blaze's configurability APIs.")
-public interface ConfigSkylarkCommonApi extends StarlarkValue {
+public interface ConfigStarlarkCommonApi extends StarlarkValue {
 
   @SkylarkCallable(
       name = "FeatureFlagInfo",
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index ac099a9..fed92e9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -92,11 +92,11 @@
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidInstrumentationInfo.FakeAndroidInstrumentationInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidNativeLibsInfo.FakeAndroidNativeLibsInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidResourcesInfo.FakeAndroidResourcesInfoProvider;
-import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidSkylarkCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.android.FakeAndroidStarlarkCommon;
 import com.google.devtools.build.skydoc.fakebuildapi.android.FakeApkInfo.FakeApkInfoProvider;
 import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleCommon;
 import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigGlobalLibrary;
-import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigSkylarkCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigStarlarkCommon;
 import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcInfo;
 import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcModule;
 import com.google.devtools.build.skydoc.fakebuildapi.cpp.FakeCcToolchainConfigInfo;
@@ -558,7 +558,7 @@
             new FakeDefaultInfoProvider());
     AndroidBootstrap androidBootstrap =
         new AndroidBootstrap(
-            new FakeAndroidSkylarkCommon(),
+            new FakeAndroidStarlarkCommon(),
             new FakeApkInfoProvider(),
             new FakeAndroidInstrumentationInfoProvider(),
             new FakeAndroidDeviceBrokerInfoProvider(),
@@ -568,7 +568,7 @@
     AppleBootstrap appleBootstrap = new AppleBootstrap(new FakeAppleCommon());
     ConfigBootstrap configBootstrap =
         new ConfigBootstrap(
-            new FakeConfigSkylarkCommon(), new FakeConfigApi(), new FakeConfigGlobalLibrary());
+            new FakeConfigStarlarkCommon(), new FakeConfigApi(), new FakeConfigGlobalLibrary());
     CcBootstrap ccBootstrap =
         new CcBootstrap(
             new FakeCcModule(),
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSkylarkCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidStarlarkCommon.java
similarity index 88%
rename from src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSkylarkCommon.java
rename to src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidStarlarkCommon.java
index 80172fb..6ca64bf 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidStarlarkCommon.java
@@ -16,13 +16,13 @@
 
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidDeviceBrokerInfoApi;
-import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSkylarkCommonApi;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSplitTransititionApi;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidStarlarkCommonApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaInfoApi;
 
-/** Fake implementation of {@link AndroidSkylarkCommonApi}. */
-public class FakeAndroidSkylarkCommon
-    implements AndroidSkylarkCommonApi<FileApi, JavaInfoApi<FileApi>> {
+/** Fake implementation of {@link AndroidStarlarkCommonApi}. */
+public class FakeAndroidStarlarkCommon
+    implements AndroidStarlarkCommonApi<FileApi, JavaInfoApi<FileApi>> {
 
   @Override
   public AndroidDeviceBrokerInfoApi createDeviceBrokerInfo(String deviceBrokerType) {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigSkylarkCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigStarlarkCommon.java
similarity index 86%
rename from src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigSkylarkCommon.java
rename to src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigStarlarkCommon.java
index 2d60471..5aa99e9 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigStarlarkCommon.java
@@ -14,14 +14,14 @@
 
 package com.google.devtools.build.skydoc.fakebuildapi.config;
 
-import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigSkylarkCommonApi;
+import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigStarlarkCommonApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
 
 /**
- * Fake implementation of {@link ConfigSkylarkCommonApi}.
+ * Fake implementation of {@link ConfigStarlarkCommonApi}.
  */
-public class FakeConfigSkylarkCommon implements ConfigSkylarkCommonApi {
+public class FakeConfigStarlarkCommon implements ConfigStarlarkCommonApi {
 
   @Override
   public ProviderApi getConfigFeatureFlagProviderConstructor() {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD
index 39c9a7e..197b13a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/BUILD
@@ -11,8 +11,8 @@
 )
 
 java_test(
-    name = "SkylarkConfigurationFieldProcessorTest",
-    srcs = ["SkylarkConfigurationFieldProcessorTest.java"],
+    name = "StarlarkConfigurationFieldProcessorTest",
+    srcs = ["StarlarkConfigurationFieldProcessorTest.java"],
     resources = [":ProcessorTestFiles"],
     runtime_deps = [
         "//src/main/java/com/google/devtools/build/lib/analysis:config/fragment",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/SkylarkConfigurationFieldProcessorTest.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/StarlarkConfigurationFieldProcessorTest.java
similarity index 70%
rename from src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/SkylarkConfigurationFieldProcessorTest.java
rename to src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/StarlarkConfigurationFieldProcessorTest.java
index 507553e..d881c6a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/SkylarkConfigurationFieldProcessorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/StarlarkConfigurationFieldProcessorTest.java
@@ -25,21 +25,21 @@
 import org.junit.runners.JUnit4;
 
 /**
- * Unit tests for SkylarkConfigurationFieldProcessor.
+ * Unit tests for StarlarkConfigurationFieldProcessor.
  */
 @RunWith(JUnit4.class)
-public final class SkylarkConfigurationFieldProcessorTest {
+public final class StarlarkConfigurationFieldProcessorTest {
 
   private static JavaFileObject getFile(String pathToFile) {
     return JavaFileObjects.forResource(Resources.getResource(
-        SkylarkConfigurationFieldProcessorTest.class, "optiontestsources/" + pathToFile));
+        StarlarkConfigurationFieldProcessorTest.class, "optiontestsources/" + pathToFile));
   }
 
   @Test
   public void testGoldenConfigurationField() throws Exception {
     assertAbout(javaSource())
         .that(getFile("GoldenConfigurationField.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .compilesWithoutError();
   }
 
@@ -47,7 +47,7 @@
   public void testGoldenConfigurationFieldThroughApi() throws Exception {
     assertAbout(javaSource())
         .that(getFile("GoldenConfigurationFieldThroughApi.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .compilesWithoutError();
   }
 
@@ -55,37 +55,37 @@
   public void testHasMethodParameters() throws Exception {
     assertAbout(javaSource())
         .that(getFile("HasMethodParameters.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .failsToCompile()
         .withErrorContaining(
-            "@SkylarkConfigurationField annotated methods must have zero arguments.");
+            "@StarlarkConfigurationField annotated methods must have zero arguments.");
   }
 
   @Test
   public void testMethodIsPrivate() throws Exception {
     assertAbout(javaSource())
         .that(getFile("MethodIsPrivate.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .failsToCompile()
-        .withErrorContaining("@SkylarkConfigurationField annotated methods must be public.");
+        .withErrorContaining("@StarlarkConfigurationField annotated methods must be public.");
   }
 
   @Test
   public void testMethodThrowsException() throws Exception {
     assertAbout(javaSource())
         .that(getFile("MethodThrowsException.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .failsToCompile()
-        .withErrorContaining("@SkylarkConfigurationField annotated must not throw exceptions.");
+        .withErrorContaining("@StarlarkConfigurationField annotated must not throw exceptions.");
   }
 
   @Test
   public void testNonConfigurationFragment() throws Exception {
     assertAbout(javaSource())
         .that(getFile("NonConfigurationFragment.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .failsToCompile()
-        .withErrorContaining("@SkylarkConfigurationField annotated methods must be methods "
+        .withErrorContaining("@StarlarkConfigurationField annotated methods must be methods "
             + "of configuration fragments.");
   }
 
@@ -93,7 +93,7 @@
   public void testNonExposedConfigurationFragment() throws Exception {
     assertAbout(javaSource())
         .that(getFile("NonExposedConfigurationFragment.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .compilesWithoutError();
   }
 
@@ -101,8 +101,8 @@
   public void testReturnsOtherType() throws Exception {
     assertAbout(javaSource())
         .that(getFile("ReturnsOtherType.java"))
-        .processedWith(new SkylarkConfigurationFieldProcessor())
+        .processedWith(new StarlarkConfigurationFieldProcessor())
         .failsToCompile()
-        .withErrorContaining("@SkylarkConfigurationField annotated methods must return Label.");
+        .withErrorContaining("@StarlarkConfigurationField annotated methods must return Label.");
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationField.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationField.java
index d641a8d..3772b1a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationField.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationField.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
 import com.google.devtools.build.lib.analysis.config.Fragment;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDocumentationCategory;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 @StarlarkBuiltin(
     name = "module_name",
     doc = "A fake configuration fragment for a test.",
@@ -30,12 +30,11 @@
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public Label getXcodeConfigLabel() {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationFieldThroughApi.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationFieldThroughApi.java
index 66a9bf0..4112846 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationFieldThroughApi.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/GoldenConfigurationFieldThroughApi.java
@@ -15,23 +15,22 @@
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
 import com.google.devtools.build.lib.analysis.config.Fragment;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDocumentationCategory;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 public class GoldenConfigurationFieldThroughApi extends Fragment implements ApiInterface {
 
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public Label getXcodeConfigLabel() {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/HasMethodParameters.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/HasMethodParameters.java
index 412ab76..dfc978d 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/HasMethodParameters.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/HasMethodParameters.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
 import com.google.devtools.build.lib.analysis.config.Fragment;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDocumentationCategory;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 @StarlarkBuiltin(
     name = "module_name",
     doc = "A fake configuration fragment for a test.",
@@ -30,12 +30,11 @@
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public Label getXcodeConfigLabel(int x) {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodIsPrivate.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodIsPrivate.java
index ab81203..4a02373 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodIsPrivate.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodIsPrivate.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
 import com.google.devtools.build.lib.analysis.config.Fragment;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDocumentationCategory;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 @StarlarkBuiltin(
     name = "module_name",
     doc = "A fake configuration fragment for a test.",
@@ -30,12 +30,11 @@
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   private Label getXcodeConfigLabel() {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodThrowsException.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodThrowsException.java
index c6569d5..da54ac3 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodThrowsException.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/MethodThrowsException.java
@@ -15,12 +15,12 @@
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
 import com.google.devtools.build.lib.analysis.config.Fragment;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDocumentationCategory;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 @StarlarkBuiltin(
     name = "module_name",
     doc = "A fake configuration fragment for a test.",
@@ -30,12 +30,11 @@
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public Label getXcodeConfigLabel() throws IllegalArgumentException {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonConfigurationFragment.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonConfigurationFragment.java
index caeb7c8..0fcc9cb 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonConfigurationFragment.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonConfigurationFragment.java
@@ -14,12 +14,12 @@
 
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDocumentationCategory;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 @StarlarkBuiltin(
     name = "module_name",
     doc = "A fake configuration fragment for a test.",
@@ -30,12 +30,11 @@
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public Label getXcodeConfigLabel() {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonExposedConfigurationFragment.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonExposedConfigurationFragment.java
index 2beb2fc..ea41c3a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonExposedConfigurationFragment.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/NonExposedConfigurationFragment.java
@@ -15,21 +15,20 @@
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
 import com.google.devtools.build.lib.analysis.config.Fragment;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.cmdline.Label;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 public class NonExposedConfigurationFragment extends Fragment {
 
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public Label getXcodeConfigLabel() {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/ReturnsOtherType.java b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/ReturnsOtherType.java
index 9dd5a0d..2326e52 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/ReturnsOtherType.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/skylark/annotations/processor/optiontestsources/ReturnsOtherType.java
@@ -15,11 +15,11 @@
 package com.google.devtools.build.lib.analysis.skylark.annotations.processor.optiontestsources;
 
 import com.google.devtools.build.lib.analysis.config.Fragment;
-import com.google.devtools.build.lib.analysis.skylark.annotations.SkylarkConfigurationField;
+import com.google.devtools.build.lib.analysis.skylark.annotations.StarlarkConfigurationField;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkBuiltin;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDocumentationCategory;
 
-/** A test case of SkylarkConfigurationFieldProcessorTest. */
+/** A test case of StarlarkConfigurationFieldProcessorTest. */
 @StarlarkBuiltin(
     name = "module_name",
     doc = "A fake configuration fragment for a test.",
@@ -29,12 +29,11 @@
   /**
    * Returns the label of the xcode_config rule to use for resolving the host system xcode version.
    */
-  @SkylarkConfigurationField(
+  @StarlarkConfigurationField(
       name = "some_field",
       doc = "Documentation ",
       defaultLabel = "defaultLabel",
-      defaultInToolRepository = true
-  )
+      defaultInToolRepository = true)
   public String getXcodeConfigLabel() {
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java b/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java
index e18d2fd..026738b 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java
@@ -185,8 +185,8 @@
         .isEqualTo("no providers accepted");
     assertThat(
             RequiredProviders.acceptAnyBuilder()
-                .addSkylarkSet(ImmutableSet.of(ID_LEGACY, ID_SKYLARK))
-                .addSkylarkSet(ImmutableSet.of(ID_SKYLARK))
+                .addStarlarkSet(ImmutableSet.of(ID_LEGACY, ID_SKYLARK))
+                .addStarlarkSet(ImmutableSet.of(ID_SKYLARK))
                 .addNativeSet(ImmutableSet.of(P1.class, P2.class))
                 .build()
                 .getDescription())
@@ -222,8 +222,8 @@
     RequiredProviders.Builder anyBuilder = RequiredProviders.acceptAnyBuilder();
     RequiredProviders.Builder noneBuilder = RequiredProviders.acceptNoneBuilder();
     for (ImmutableSet<StarlarkProviderIdentifier> set : sets) {
-      anyBuilder.addSkylarkSet(set);
-      noneBuilder.addSkylarkSet(set);
+      anyBuilder.addStarlarkSet(set);
+      noneBuilder.addStarlarkSet(set);
     }
 
     RequiredProviders rpStartingFromAny = anyBuilder.build();
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
index ea4172a..1cd4e41 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
@@ -47,7 +47,7 @@
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventCollector;
 import com.google.devtools.build.lib.events.EventKind;
-import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate.CannotPrecomputeDefaultsException;
+import com.google.devtools.build.lib.packages.Attribute.StarlarkComputedDefaultTemplate.CannotPrecomputeDefaultsException;
 import com.google.devtools.build.lib.packages.Attribute.ValidityPredicate;
 import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommonTest.java
similarity index 94%
rename from src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommonTest.java
rename to src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommonTest.java
index 1c7b74e..b6f1340 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidStarlarkCommonTest.java
@@ -23,9 +23,9 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-/** Tests for {@link com.google.devtools.build.lib.rules.android.AndroidSkylarkCommon}. */
+/** Tests for {@link AndroidStarlarkCommon}. */
 @RunWith(JUnit4.class)
-public class AndroidSkylarkCommonTest extends AndroidBuildViewTestCase {
+public class AndroidStarlarkCommonTest extends AndroidBuildViewTestCase {
 
   @Before
   public void setupCcToolchain() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
index d478008..248b694 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -48,8 +48,8 @@
 )
 
 java_test(
-    name = "AndroidSkylarkCommonTest",
-    srcs = ["AndroidSkylarkCommonTest.java"],
+    name = "AndroidStarlarkCommonTest",
+    srcs = ["AndroidStarlarkCommonTest.java"],
     deps = [
         ":AndroidBuildViewTestCase",
         "//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
index 4d1eddb..42f6f16 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
@@ -181,7 +181,7 @@
     StarlarkRuleContext ctx =
         new StarlarkRuleContext(getRuleContextForStarlark(wrapper), null, getStarlarkSemantics());
     update("ruleContext", ctx);
-    update("config_common", new ConfigSkylarkCommon());
+    update("config_common", new ConfigStarlarkCommon());
     String value = (String) eval("ruleContext.attr.flag[config_common.FeatureFlagInfo].value");
     assertThat(value).isEqualTo("configured");
   }
@@ -232,7 +232,7 @@
         ")");
     StarlarkRuleContext ctx = createRuleContext("//test:wrapper");
     update("ruleContext", ctx);
-    update("config_common", new ConfigSkylarkCommon());
+    update("config_common", new ConfigStarlarkCommon());
     String provider = "ruleContext.attr.flag[config_common.FeatureFlagInfo]";
     Boolean isDefaultValid = (Boolean) eval(provider + ".is_valid_value('default')");
     Boolean isConfiguredValid = (Boolean) eval(provider + ".is_valid_value('configured')");
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleClassFunctionsTest.java
index aeef261..f27bb98 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/StarlarkRuleClassFunctionsTest.java
@@ -40,7 +40,7 @@
 import com.google.devtools.build.lib.packages.RequiredProviders;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
-import com.google.devtools.build.lib.packages.SkylarkAspectClass;
+import com.google.devtools.build.lib.packages.StarlarkAspectClass;
 import com.google.devtools.build.lib.packages.StarlarkDefinedAspect;
 import com.google.devtools.build.lib.packages.StarlarkInfo;
 import com.google.devtools.build.lib.packages.StarlarkProvider;
@@ -1615,9 +1615,7 @@
     assertThat(p.getKey()).isEqualTo(new StarlarkProvider.Key(FAKE_LABEL, "p"));
     assertThat(p1.getPrintableName()).isEqualTo("p1");
     assertThat(p1.getKey()).isEqualTo(new StarlarkProvider.Key(FAKE_LABEL, "p1"));
-    assertThat(a.getAspectClass()).isEqualTo(
-        new SkylarkAspectClass(FAKE_LABEL, "a")
-    );
+    assertThat(a.getAspectClass()).isEqualTo(new StarlarkAspectClass(FAKE_LABEL, "a"));
   }
 
   @Test
