diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Aspect.java b/src/main/java/com/google/devtools/build/lib/analysis/Aspect.java
index 939e3ea..091fa4a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Aspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Aspect.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.analysis;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.UnmodifiableIterator;
@@ -68,7 +69,8 @@
 
 
   @Nullable
-  <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) {
+  @VisibleForTesting
+  public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) {
     AnalysisUtils.checkProvider(providerClass);
 
     return providerClass.cast(providers.get(providerClass));
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
index 202d1da..fa26e5c 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -14,6 +14,9 @@
 
 package com.google.devtools.build.lib.ideinfo;
 
+import static com.google.common.collect.Iterables.transform;
+
+import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteSource;
 import com.google.devtools.build.lib.actions.ActionOwner;
@@ -25,6 +28,7 @@
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.actions.BinaryFileWriteAction;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -33,13 +37,16 @@
 import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.JavaRuleIdeInfo;
 import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.LibraryArtifact;
 import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.RuleIdeInfo;
+import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.RuleIdeInfo.Kind;
 import com.google.devtools.build.lib.packages.AspectDefinition;
 import com.google.devtools.build.lib.packages.AspectParameters;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.rules.android.AndroidSdkProvider;
+import com.google.devtools.build.lib.rules.java.JavaExportsProvider;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
+import com.google.devtools.build.lib.syntax.Label;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.protobuf.MessageLite;
@@ -47,6 +54,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collection;
+import java.util.List;
+
+import javax.annotation.Nullable;
 
 /**
  * Generates ide-build information for Android Studio.
@@ -60,6 +70,13 @@
 
   // File suffixes.
   public static final String ASWB_BUILD_SUFFIX = ".aswb-build";
+  public static final Function<Label, String> LABEL_TO_STRING = new Function<Label, String>() {
+    @Nullable
+    @Override
+    public String apply(Label label) {
+      return label.toString();
+    }
+  };
 
   @Override
   public AspectDefinition getDefinition() {
@@ -74,19 +91,46 @@
       AspectParameters parameters) {
     Aspect.Builder builder = new Builder(NAME);
 
-    // Collect ide build files.
+    // Collect ide build files and calculate dependencies.
+    NestedSetBuilder<Label> transitiveDependenciesBuilder = NestedSetBuilder.stableOrder();
+    NestedSetBuilder<Label> dependenciesBuilder = NestedSetBuilder.stableOrder();
+
     NestedSetBuilder<Artifact> ideBuildFilesBuilder = NestedSetBuilder.stableOrder();
+
+    // todo(dslomov,tomlu): following current build info logic, this code enumerates dependencies
+    // directly by iterating over deps attribute. The more robust way to do this might be
+    // to iterate classpath as provided to build action.
     if (ruleContext.attributes().has("deps", Type.LABEL_LIST)) {
-      Iterable<AndroidStudioInfoFilesProvider> deps =
+      Iterable<AndroidStudioInfoFilesProvider> androidStudioInfoFilesProviders =
           ruleContext.getPrerequisites("deps", Mode.TARGET, AndroidStudioInfoFilesProvider.class);
-      for (AndroidStudioInfoFilesProvider dep : deps) {
-        ideBuildFilesBuilder.addTransitive(dep.getIdeBuildFiles());
+      for (AndroidStudioInfoFilesProvider depProvider : androidStudioInfoFilesProviders) {
+        ideBuildFilesBuilder.addTransitive(depProvider.getIdeBuildFiles());
+        transitiveDependenciesBuilder.addTransitive(depProvider.getTransitiveDependencies());
+      }
+      List<? extends TransitiveInfoCollection> deps =
+          ruleContext.getPrerequisites("deps", Mode.TARGET);
+      for (TransitiveInfoCollection dep : deps) {
+        dependenciesBuilder.add(dep.getLabel());
+      }
+
+      Iterable<JavaExportsProvider> javaExportsProviders = ruleContext
+          .getPrerequisites("deps", Mode.TARGET, JavaExportsProvider.class);
+      for (JavaExportsProvider javaExportsProvider : javaExportsProviders) {
+        dependenciesBuilder.addTransitive(javaExportsProvider.getTransitiveExports());
       }
     }
 
+    NestedSet<Label> directDependencies = dependenciesBuilder.build();
+    transitiveDependenciesBuilder.addTransitive(directDependencies);
+    NestedSet<Label> transitiveDependencies = transitiveDependenciesBuilder.build();
+
     RuleIdeInfo.Kind ruleKind = getRuleKind(ruleContext.getRule(), base);
+
     if (ruleKind != RuleIdeInfo.Kind.UNRECOGNIZED) {
-      Artifact ideBuildFile = createIdeBuildArtifact(base, ruleContext, ruleKind);
+      Artifact ideBuildFile =
+          createIdeBuildArtifact(base, ruleContext, ruleKind,
+              directDependencies,
+              transitiveDependencies);
       ideBuildFilesBuilder.add(ideBuildFile);
     }
 
@@ -95,7 +139,7 @@
         .addOutputGroup(IDE_BUILD, ideBuildFiles)
         .addProvider(
             AndroidStudioInfoFilesProvider.class,
-            new AndroidStudioInfoFilesProvider(ideBuildFiles));
+            new AndroidStudioInfoFilesProvider(ideBuildFiles, transitiveDependencies));
 
     return builder.build();
   }
@@ -117,7 +161,10 @@
   }
 
   private Artifact createIdeBuildArtifact(
-      ConfiguredTarget base, RuleContext ruleContext, RuleIdeInfo.Kind ruleKind) {
+      ConfiguredTarget base,
+      RuleContext ruleContext,
+      Kind ruleKind,
+      NestedSet<Label> directDependencies, NestedSet<Label> transitiveDependencies) {
     PathFragment ideBuildFilePath = getOutputFilePath(base, ruleContext);
     Root genfilesDirectory = ruleContext.getConfiguration().getGenfilesDirectory();
     Artifact ideBuildFile =
@@ -139,16 +186,21 @@
 
     outputBuilder.setKind(ruleKind);
 
-    if (ruleKind == RuleIdeInfo.Kind.JAVA_LIBRARY) {
+    outputBuilder.addAllDependencies(transform(directDependencies, LABEL_TO_STRING));
+    outputBuilder.addAllTransitiveDependencies(transform(transitiveDependencies, LABEL_TO_STRING));
+
+    if (ruleKind == Kind.JAVA_LIBRARY) {
       outputBuilder.setJavaRuleIdeInfo(makeJavaRuleIdeInfo(base));
-    } else if (ruleKind == RuleIdeInfo.Kind.ANDROID_SDK) {
+    } else if (ruleKind == Kind.ANDROID_SDK) {
       outputBuilder.setAndroidSdkRuleInfo(
           makeAndroidSdkRuleInfo(ruleContext, base.getProvider(AndroidSdkProvider.class)));
     }
 
+
     final RuleIdeInfo ruleIdeInfo = outputBuilder.build();
     ruleContext.registerAction(
         makeProtoWriteAction(ruleContext.getActionOwner(), ruleIdeInfo, ideBuildFile));
+
     return ideBuildFile;
   }
 
@@ -209,13 +261,8 @@
         }
       }
     }
+    Collection<Artifact> sourceFiles = getSources(base);
 
-    // Calculate source files.
-    JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class);
-    Collection<Artifact> sourceFiles =
-        sourceInfoProvider != null
-            ? sourceInfoProvider.getSourceFiles()
-            : ImmutableList.<Artifact>of();
     for (Artifact sourceFile : sourceFiles) {
       builder.addSources(makeArtifactLocation(sourceFile));
     }
@@ -223,6 +270,14 @@
     return builder.build();
   }
 
+  private static Collection<Artifact> getSources(ConfiguredTarget base) {
+    // Calculate source files.
+    JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class);
+    return sourceInfoProvider != null
+        ? sourceInfoProvider.getSourceFiles()
+        : ImmutableList.<Artifact>of();
+  }
+
   private PathFragment getOutputFilePath(ConfiguredTarget base, RuleContext ruleContext) {
     PathFragment packagePathFragment =
         ruleContext.getLabel().getPackageIdentifier().getPathFragment();
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
index 5795ae5..95faf9e 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
@@ -18,6 +18,7 @@
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.syntax.Label;
 
 /**
  * File provider for Android Studio ide build files.
@@ -25,12 +26,19 @@
 @Immutable
 public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvider {
   private final NestedSet<Artifact> ideBuildFiles;
+  private final NestedSet<Label> transitiveDependencies;
 
-  public AndroidStudioInfoFilesProvider(NestedSet<Artifact> ideBuildFiles) {
+  public AndroidStudioInfoFilesProvider(
+      NestedSet<Artifact> ideBuildFiles, NestedSet<Label> transitiveDependencies) {
     this.ideBuildFiles = ideBuildFiles;
+    this.transitiveDependencies = transitiveDependencies;
   }
 
   public NestedSet<Artifact> getIdeBuildFiles() {
     return ideBuildFiles;
   }
+
+  public NestedSet<Label> getTransitiveDependencies() {
+    return transitiveDependencies;
+  }
 }
