Android Gradle plugin: Fix compatibility with Android Gradle Plugin 2.3

(cherry picked from commit 2346094)
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy
index 104dba1..63fb064 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy
@@ -24,7 +24,6 @@
 import com.android.build.gradle.api.TestVariant
 import com.android.build.gradle.internal.VariantManager
 import com.android.build.gradle.internal.variant.BaseVariantData
-import com.android.builder.dependency.DependencyContainer
 import com.android.builder.dependency.LibraryDependency
 import com.android.builder.model.SourceProvider
 import org.gradle.api.file.ConfigurableFileTree
@@ -180,7 +179,13 @@
     if (libraries == null) return jarToLibraryArtifactMap
 
     for (lib in libraries) {
-      jarToLibraryArtifactMap[lib.jarFile] = lib.bundle
+      if (lib.class.name == "com.android.builder.dependency.level2.AndroidDependency") {
+        // android tools >= 2.3
+        jarToLibraryArtifactMap[lib.jarFile] = lib.artifactFile
+      } else {
+        // android tools <= 2.2
+        jarToLibraryArtifactMap[lib.jarFile] = lib.bundle
+      }
 
       // local dependencies are detected as changed by gradle, because they are seem to be
       // rewritten every time when bundle changes
@@ -201,18 +206,22 @@
   }
 
   @Nullable
-  private static Iterable<LibraryDependency> getVariantLibraryDependencies(BaseVariantData variantData) {
+  private static Iterable<Object> getVariantLibraryDependencies(BaseVariantData variantData) {
     def variantDependency = variantData.variantDependency
-    if (variantDependency instanceof DependencyContainer) {
+
+    if (variantDependency.metaClass.getMetaMethod("getAndroidDependencies") != null) {
       // android tools < 2.2
-      return variantDependency.getAndroidDependencies()
+      return variantDependency.getAndroidDependencies() as Iterable<Object>
     }
 
-    def variantDependencyMeta = variantData.variantDependency.getMetaClass()
-    def getCompileDependencies = variantDependencyMeta.getMetaMethod("getCompileDependencies")
-    if (getCompileDependencies != null && getCompileDependencies.returnType.metaClass == DependencyContainer.metaClass) {
-      // android tools 2.2
-      return variantDependency.getCompileDependencies().getAndroidDependencies()
+    def getCompileDependencies = variantDependency.metaClass.getMetaMethod("getCompileDependencies")
+    if (getCompileDependencies != null) {
+      def compileDependencies = variantDependency.getCompileDependencies()
+      if (compileDependencies.metaClass.getMetaMethod("getDirectAndroidDependencies") != null) {
+        return compileDependencies.getDirectAndroidDependencies() // android >= 2.3
+      } else if (compileDependencies.metaClass.getMetaMethod("getAndroidDependencies")) {
+        return compileDependencies.getAndroidDependencies() // android 2.2
+      }
     }
 
     return null