blob: 9ef8e84164288f77fae8669a4994f8e62ea5ad1b [file] [log] [blame]
package org.jetbrains.jps.android.builder;
import com.intellij.util.containers.HashSet;
import org.jetbrains.android.util.AndroidCommonUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.android.AndroidJpsUtil;
import org.jetbrains.jps.android.model.JpsAndroidModuleExtension;
import org.jetbrains.jps.builders.BuildRootDescriptor;
import org.jetbrains.jps.builders.impl.BuildRootDescriptorImpl;
import org.jetbrains.jps.builders.storage.BuildDataPaths;
import org.jetbrains.jps.incremental.CompileContext;
import org.jetbrains.jps.indices.IgnoredFileIndex;
import org.jetbrains.jps.indices.ModuleExcludeIndex;
import org.jetbrains.jps.model.JpsModel;
import org.jetbrains.jps.model.module.JpsModule;
import java.io.File;
import java.util.*;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidResourceCachingBuildTarget extends AndroidBuildTarget {
public AndroidResourceCachingBuildTarget(@NotNull JpsModule module) {
super(MyTargetType.INSTANCE, module);
}
@NotNull
@Override
protected List<BuildRootDescriptor> doComputeRootDescriptors(JpsModel model,
ModuleExcludeIndex index,
IgnoredFileIndex ignoredFileIndex,
BuildDataPaths dataPaths) {
final JpsAndroidModuleExtension extension = AndroidJpsUtil.getExtension(myModule);
if (extension != null) {
final List<BuildRootDescriptor> result = new ArrayList<BuildRootDescriptor>();
for (File resOverlayDir : extension.getResourceOverlayDirs()) {
result.add(new BuildRootDescriptorImpl(this, resOverlayDir));
}
final File resourceDir = AndroidJpsUtil.getResourceDirForCompilationPath(extension);
if (resourceDir != null) {
result.add(new BuildRootDescriptorImpl(this, resourceDir));
}
if (!extension.isLibrary()) {
final Set<String> aarResDirPaths = new HashSet<String>();
AndroidJpsUtil.collectResDirectoriesFromAarDeps(myModule, aarResDirPaths);
for (JpsAndroidModuleExtension depExtension : AndroidJpsUtil.getAllAndroidDependencies(myModule, true)) {
AndroidJpsUtil.collectResDirectoriesFromAarDeps(depExtension.getModule(), aarResDirPaths);
}
for (String path : aarResDirPaths) {
result.add(new BuildRootDescriptorImpl(this, new File(path)));
}
}
return result;
}
return Collections.emptyList();
}
@NotNull
@Override
public Collection<File> getOutputRoots(CompileContext context) {
return Collections.singletonList(getOutputDir(context));
}
@NotNull
public File getOutputDir(CompileContext context) {
return AndroidJpsUtil.getResourcesCacheDir(myModule, context.getProjectDescriptor().dataManager.getDataPaths());
}
public static class MyTargetType extends AndroidBuildTargetType<AndroidResourceCachingBuildTarget> {
public static final MyTargetType INSTANCE = new MyTargetType();
private MyTargetType() {
super(AndroidCommonUtils.RESOURCE_CACHING_BUILD_TARGET_ID, "Resource Caching");
}
@Override
public AndroidResourceCachingBuildTarget createBuildTarget(@NotNull JpsAndroidModuleExtension extension) {
return new AndroidResourceCachingBuildTarget(extension.getModule());
}
}
}