buildscript {
    repositories {
        maven { url '../../../../out/host/gradle/repo' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.0-SNAPSHOT'
    }
}

apply plugin: 'android'

import com.android.builder.model.ArtifactMetaData
import com.android.builder.model.SourceProvider

android.registerArtifactType("__test__", false, ArtifactMetaData.TYPE_JAVA)

android.buildTypes.all { type ->
    project.android.registerBuildTypeSourceProvider("__test__", type, getProvider("buildType:$type.name"))
}

android.productFlavors.all { flavor ->
    project.android.registerProductFlavorSourceProvider("__test__", flavor, getProvider("productFlavor:$flavor.name"))
}

android.applicationVariants.all { variant ->
    project.android.registerJavaArtifact(
            "__test__",
            variant,
            "assemble:$variant.name",
            "compile:$variant.name",
            new File("classesFolder:$variant.name"),
            getProvider("provider:$variant.name"))
}

android {
    compileSdkVersion 15
    buildToolsVersion "18.0.1"

    flavorGroups  "pricing", "releaseType"

    productFlavors {

        beta {
            flavorGroup "releaseType"
        }

        normal {
            flavorGroup "releaseType"
        }

        free {
            flavorGroup "pricing"
        }

        paid {
            flavorGroup "pricing"
        }
    }
}

public class SourceProviderImpl implements SourceProvider, Serializable {
    private static final long serialVersionUID = 1L;

    private final String name;

    SourceProviderImpl(String name) {
        this.name = name
    }
    
    File getManifestFile() {
        return new File(name)
    }

    Collection<File> getJavaDirectories() {
        return Collections.emptyList()
    }

    Collection<File> getResourcesDirectories() {
        return Collections.emptyList()
    }

    Collection<File> getAidlDirectories() {
        return Collections.emptyList()
    }

    Collection<File> getRenderscriptDirectories() {
        return Collections.emptyList()
    }

    Collection<File> getJniDirectories() {
        return Collections.emptyList()
    }

    Collection<File> getResDirectories() {
        return Collections.emptyList()
    }

    Collection<File> getAssetsDirectories() {
        return Collections.emptyList()
     }
}

SourceProvider getProvider(String name) {
   return new SourceProviderImpl(name)
}