blob: 11b4992573c2eac94ce6a8a54e068dce997858e0 [file] [log] [blame]
package org.jetbrains.jps.android;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.android.builder.AndroidPackagingBuildTarget;
import org.jetbrains.jps.android.model.JpsAndroidModuleExtension;
import org.jetbrains.jps.android.model.impl.JpsAndroidFinalPackageElement;
import org.jetbrains.jps.builders.BuildTarget;
import org.jetbrains.jps.builders.TargetOutputIndex;
import org.jetbrains.jps.incremental.artifacts.builders.LayoutElementBuilderService;
import org.jetbrains.jps.incremental.artifacts.instructions.ArtifactCompilerInstructionCreator;
import org.jetbrains.jps.incremental.artifacts.instructions.ArtifactInstructionsBuilderContext;
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
import org.jetbrains.jps.model.module.JpsModule;
import org.jetbrains.jps.model.module.JpsModuleReference;
import java.io.File;
import java.util.Collection;
import java.util.Collections;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidFinalPackageElementBuilder extends LayoutElementBuilderService<JpsAndroidFinalPackageElement> {
public AndroidFinalPackageElementBuilder() {
super(JpsAndroidFinalPackageElement.class);
}
@Override
public void generateInstructions(JpsAndroidFinalPackageElement element,
ArtifactCompilerInstructionCreator instructionCreator,
ArtifactInstructionsBuilderContext builderContext) {
final String apkPath = getApkPath(element);
if (apkPath != null) {
instructionCreator.addExtractDirectoryInstruction(new File(apkPath), "");
}
}
@Override
public Collection<? extends BuildTarget<?>> getDependencies(@NotNull JpsAndroidFinalPackageElement element, TargetOutputIndex outputIndex) {
final JpsModule module = element.getModuleReference().resolve();
return module != null
? Collections.singletonList(new AndroidPackagingBuildTarget(module))
: Collections.<BuildTarget<?>>emptyList();
}
@Nullable
private static String getApkPath(JpsAndroidFinalPackageElement element) {
final JpsModuleReference ref = element.getModuleReference();
final JpsModule module = ref != null ? ref.resolve() : null;
if (module == null) {
return null;
}
final JpsAndroidModuleExtension extension = AndroidJpsUtil.getExtension(module);
if (extension == null) {
return null;
}
return getApkPath(extension);
}
@Nullable
public static String getApkPath(@NotNull JpsAndroidModuleExtension extension) {
final File moduleOutputDir = JpsJavaExtensionService.getInstance().getOutputDirectory(extension.getModule(), false);
if (moduleOutputDir == null) {
return null;
}
final String apkPath = AndroidJpsUtil.getApkPath(extension, moduleOutputDir);
return apkPath != null
? FileUtil.toSystemIndependentName(apkPath)
: null;
}
}