diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeFormatter.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeFormatter.java
index e48dbb4..cda20bd 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeFormatter.java
@@ -304,8 +304,6 @@
 
     void addFilesetListValue(Build.FilesetEntry.Builder builder);
 
-    void addGlobCriteria(Build.GlobCriteria.Builder builder);
-
     void addLabelDictUnaryValue(LabelDictUnaryEntry.Builder builder);
 
     void addLabelKeyedStringDictValue(LabelKeyedStringDictEntry.Builder builder);
@@ -358,11 +356,6 @@
     }
 
     @Override
-    public void addGlobCriteria(Build.GlobCriteria.Builder builder) {
-      attributeBuilder.addGlobCriteria(builder);
-    }
-
-    @Override
     public void addLabelDictUnaryValue(LabelDictUnaryEntry.Builder builder) {
       attributeBuilder.addLabelDictUnaryValue(builder);
     }
@@ -484,11 +477,6 @@
     }
 
     @Override
-    public void addGlobCriteria(Build.GlobCriteria.Builder builder) {
-      selectorEntryBuilder.addGlobCriteria(builder);
-    }
-
-    @Override
     public void addLabelDictUnaryValue(LabelDictUnaryEntry.Builder builder) {
       selectorEntryBuilder.addLabelDictUnaryValue(builder);
     }
@@ -544,4 +532,3 @@
     }
   }
 }
-
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index c65b4aa..ad682b6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -48,7 +48,6 @@
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.FuncallExpression;
 import com.google.devtools.build.lib.syntax.FunctionSignature;
-import com.google.devtools.build.lib.syntax.GlobList;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInputSource;
 import com.google.devtools.build.lib.syntax.Runtime;
@@ -578,11 +577,7 @@
       throw new EvalException(ast.getLocation(), e.getMessage());
     }
 
-    GlobList<String> globList = GlobList.captureResults(includes, excludes, matches);
-
-    // TODO(laurentlb): Get rid of globList type.
-    // Converting to ImmutableList will remove glob information from the list.
-    return MutableList.copyOf(env, ImmutableList.copyOf(globList));
+    return MutableList.copyOf(env, matches);
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Rule.java b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
index 027d292..c7cca63 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Rule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Rule.java
@@ -35,7 +35,6 @@
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.License.DistributionType;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.GlobList;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.BinaryPredicate;
 import java.util.Collection;
@@ -695,18 +694,6 @@
     }
   }
 
-  /**
-   * Returns the globs that were expanded to create an attribute value, or
-   * null if unknown or not applicable.
-   */
-  public static GlobList<?> getGlobInfo(Object attributeValue) {
-    if (attributeValue instanceof GlobList<?>) {
-      return (GlobList<?>) attributeValue;
-    } else {
-      return null;
-    }
-  }
-
   private void checkForNullLabel(Label labelToCheck, Object context) {
     if (labelToCheck == null) {
       throw new IllegalStateException(String.format(
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 bd1f4b4..0389764 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
@@ -50,7 +50,6 @@
 import com.google.devtools.build.lib.syntax.BaseFunction;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.FuncallExpression;
-import com.google.devtools.build.lib.syntax.GlobList;
 import com.google.devtools.build.lib.syntax.Runtime;
 import com.google.devtools.build.lib.syntax.SkylarkList;
 import com.google.devtools.build.lib.syntax.Type;
@@ -1976,11 +1975,11 @@
 
   /**
    * Converts the build-language-typed {@code buildLangValue} to a native value via {@link
-   * BuildType#selectableConvert}. Canonicalizes the value's order if it is a {@link List} type
-   * (but not a {@link GlobList}) and {@code attr.isOrderIndependent()} returns {@code true}.
+   * BuildType#selectableConvert}. Canonicalizes the value's order if it is a {@link List} type and
+   * {@code attr.isOrderIndependent()} returns {@code true}.
    *
-   * <p>Throws {@link ConversionException} if the conversion fails, or if {@code buildLangValue}
-   * is a selector expression but {@code attr.isConfigurable()} is {@code false}.
+   * <p>Throws {@link ConversionException} if the conversion fails, or if {@code buildLangValue} is
+   * a selector expression but {@code attr.isConfigurable()} is {@code false}.
    */
   private static Object convertFromBuildLangType(Rule rule, Attribute attr, Object buildLangValue)
       throws ConversionException {
@@ -1995,7 +1994,7 @@
           String.format("attribute \"%s\" is not configurable", attr.getName()));
     }
 
-    if ((converted instanceof List<?>) && !(converted instanceof GlobList<?>)) {
+    if (converted instanceof List<?>) {
       if (attr.isOrderIndependent()) {
         @SuppressWarnings("unchecked")
         List<? extends Comparable<?>> list = (List<? extends Comparable<?>>) converted;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Type.java b/src/main/java/com/google/devtools/build/lib/syntax/Type.java
index d8509e3..62336d1 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Type.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Type.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.syntax.Printer.BasePrinter;
-import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
 import com.google.devtools.build.lib.util.LoggingUtil;
 import com.google.devtools.build.lib.util.StringCanonicalizer;
 import java.util.ArrayList;
@@ -599,19 +598,6 @@
         }
         ++index;
       }
-      // We preserve GlobList-s so they can make it to attributes;
-      // some external code relies on attributes preserving this information.
-      // TODO(bazel-team): somehow make Skylark extensible enough that
-      // GlobList support can be wholly moved out of Skylark into an extension.
-      if (x instanceof GlobList<?>) {
-        return new GlobList<>(((GlobList<?>) x).getCriteria(), result);
-      }
-      if (x instanceof MutableList) {
-        GlobList<?> globList = ((MutableList) x).getGlobList();
-        if (globList != null) {
-          return new GlobList<>(globList.getCriteria(), result);
-        }
-      }
       return result;
     }
 
