diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java
index 107e64b..cbe5056 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java
@@ -150,6 +150,24 @@
   }
 
   @Override
+  public boolean containsKey(Object key, Location loc) throws EvalException {
+    if (!(key instanceof SkylarkClassObjectConstructor)) {
+      throw new EvalException(loc, String.format(
+          "Type Target only supports querying by object constructors, got %s instead",
+          EvalUtils.getDataTypeName(key)));
+    }
+    SkylarkClassObjectConstructor constructor = (SkylarkClassObjectConstructor) key;
+    SkylarkProviders provider = getProvider(SkylarkProviders.class);
+    if (provider != null) {
+      Object declaredProvider = provider.getDeclaredProvider(constructor.getKey());
+      if (declaredProvider != null) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
   public String errorMessage(String name) {
     return null;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index 347c728..1c6eebd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -96,6 +96,11 @@
   }
 
   @Override
+  public boolean containsKey(Object key, Location loc) throws EvalException {
+    return actual != null && actual.containsKey(key, loc);
+  }
+
+  @Override
   public Target getTarget() {
     return actual == null ? null : actual.getTarget();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
index 131ee54..15989ec 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
@@ -95,17 +95,8 @@
    * <p>Publicly accessible for reflection and compiled Skylark code.
    */
   public static boolean in(Object lval, Object rval, Location location) throws EvalException {
-    if (rval instanceof SkylarkList) {
-      for (Object obj : (SkylarkList) rval) {
-        if (obj.equals(lval)) {
-          return true;
-        }
-      }
-      return false;
-    } else if (rval instanceof SkylarkDict) {
-      return ((SkylarkDict<?, ?>) rval).containsKey(lval);
-    } else if (rval instanceof SkylarkNestedSet) {
-      return ((SkylarkNestedSet) rval).expandedSet().contains(lval);
+    if (rval instanceof SkylarkQueryable) {
+      return ((SkylarkQueryable) rval).containsKey(lval, location);
     } else if (rval instanceof String) {
       if (lval instanceof String) {
         return ((String) rval).contains((String) lval);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
index 49f6c58..fc5e9cf 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkDict.java
@@ -223,6 +223,11 @@
     return this.get(key);
   }
 
+  @Override
+  public final boolean containsKey(Object key, Location loc) throws EvalException {
+    return this.containsKey(key);
+  }
+
   public static <K, V> SkylarkDict<K, V> plus(
       SkylarkDict<? extends K, ? extends V> left,
       SkylarkDict<? extends K, ? extends V> right,
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkIndexable.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkIndexable.java
index 18293f4..b33fb45 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkIndexable.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkIndexable.java
@@ -17,9 +17,9 @@
 import com.google.devtools.build.lib.events.Location;
 
 /**
- * Skylark values that support index access, i.e. object[key]
+ * Skylark values that support index access, i.e. `object[key]`
  */
-public interface SkylarkIndexable {
+public interface SkylarkIndexable extends SkylarkQueryable {
 
   /**
    * Returns the value associated with the given key.
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
index 81cad2f..1c1c52b 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java
@@ -136,6 +136,16 @@
     return list.get(index);
   }
 
+  @Override
+  public final boolean containsKey(Object key, Location loc) throws EvalException {
+    for (Object obj : this) {
+      if (obj.equals(key)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   /**
    * Retrieve a sublist from a SkylarkList.
    * @param start start value
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
index 2a64d79..1657955 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
@@ -78,7 +78,7 @@
       + "nested sets."
 )
 @Immutable
-public final class SkylarkNestedSet implements Iterable<Object>, SkylarkValue {
+public final class SkylarkNestedSet implements Iterable<Object>, SkylarkValue, SkylarkQueryable {
 
   private final SkylarkType contentType;
   @Nullable private final List<Object> items;
@@ -272,4 +272,9 @@
     }
     Printer.append(buffer, ")");
   }
+
+  @Override
+  public final boolean containsKey(Object key, Location loc) throws EvalException {
+    return (this.expandedSet().contains(key));
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkQueryable.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkQueryable.java
new file mode 100644
index 0000000..b278168
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkQueryable.java
@@ -0,0 +1,29 @@
+// Copyright 2015 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.syntax;
+
+import com.google.devtools.build.lib.events.Location;
+
+/**
+ * Skylark values that support querying by other objects, i.e. `foo in object`.
+ * Semantics of the operation may differ, i.e. dicts check for keys and lists for values.
+ */
+public interface SkylarkQueryable {
+
+  /**
+   * Returns whether the key is in the object.
+   */
+  boolean containsKey(Object key, Location loc) throws EvalException;
+}
