| 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()); |
| } |
| } |
| } |