blob: 9905d609035a6dab15ccf36d5f26888e473abeb9 [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.build.gradle.internal.api;
import com.android.SdkConstants;
import com.android.annotations.NonNull;
import com.android.build.gradle.api.AndroidSourceDirectorySet;
import com.android.build.gradle.api.AndroidSourceFile;
import com.android.build.gradle.api.AndroidSourceSet;
import com.android.builder.model.SourceProvider;
import org.gradle.api.Project;
import org.gradle.api.file.SourceDirectorySet;
import org.gradle.api.internal.file.DefaultSourceDirectorySet;
import org.gradle.api.tasks.SourceSet;
import org.gradle.util.ConfigureUtil;
import org.gradle.util.GUtil;
import java.io.File;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import groovy.lang.Closure;
/**
*/
public class DefaultAndroidSourceSet implements AndroidSourceSet, SourceProvider {
@NonNull
private final String name;
private final boolean isLibrary;
private final AndroidSourceDirectorySet javaSource;
private final AndroidSourceDirectorySet allJavaSource;
private final AndroidSourceDirectorySet javaResources;
private final AndroidSourceFile manifest;
private final AndroidSourceDirectorySet assets;
private final AndroidSourceDirectorySet res;
private final AndroidSourceDirectorySet aidl;
private final AndroidSourceDirectorySet renderscript;
private final AndroidSourceDirectorySet jni;
private final AndroidSourceDirectorySet jniLibs;
private final String displayName;
private final AndroidSourceDirectorySet allSource;
public DefaultAndroidSourceSet(@NonNull String name,
Project project, boolean isLibrary) {
this.name = name;
this.isLibrary = isLibrary;
displayName = GUtil.toWords(this.name);
String javaSrcDisplayName = String.format("%s Java source", displayName);
javaSource = new DefaultAndroidSourceDirectorySet(javaSrcDisplayName, project);
javaSource.getFilter().include("**/*.java");
allJavaSource = new DefaultAndroidSourceDirectorySet(javaSrcDisplayName, project);
allJavaSource.getFilter().include("**/*.java");
allJavaSource.srcDirs(javaSource);
String javaResourcesDisplayName = String.format("%s Java resources", displayName);
javaResources = new DefaultAndroidSourceDirectorySet(javaResourcesDisplayName, project);
javaResources.getFilter().exclude("**/*.java");
String allSourceDisplayName = String.format("%s source", displayName);
allSource = new DefaultAndroidSourceDirectorySet(allSourceDisplayName, project);
allSource.srcDirs(javaResources, javaSource);
String manifestDisplayName = String.format("%s manifest", displayName);
manifest = new DefaultAndroidSourceFile(manifestDisplayName, project);
String assetsDisplayName = String.format("%s assets", displayName);
assets = new DefaultAndroidSourceDirectorySet(assetsDisplayName, project);
String resourcesDisplayName = String.format("%s resources", displayName);
res = new DefaultAndroidSourceDirectorySet(resourcesDisplayName, project);
String aidlDisplayName = String.format("%s aidl", displayName);
aidl = new DefaultAndroidSourceDirectorySet(aidlDisplayName, project);
String renderscriptDisplayName = String.format("%s renderscript", displayName);
renderscript = new DefaultAndroidSourceDirectorySet(renderscriptDisplayName, project);
String jniDisplayName = String.format("%s jni", displayName);
jni = new DefaultAndroidSourceDirectorySet(jniDisplayName, project);
String libsDisplayName = String.format("%s jniLibs", displayName);
jniLibs = new DefaultAndroidSourceDirectorySet(libsDisplayName, project);
}
@Override
@NonNull
public String getName() {
return name;
}
@Override
@NonNull
public String toString() {
return String.format("source set %s", getDisplayName());
}
public String getDisplayName() {
return displayName;
}
@Override
@NonNull
public String getCompileConfigurationName() {
if (name.equals(SourceSet.MAIN_SOURCE_SET_NAME)) {
return "compile";
} else {
return String.format("%sCompile", name);
}
}
@Override
@NonNull
public String getPackageConfigurationName() {
if (isLibrary) {
if (name.equals(SourceSet.MAIN_SOURCE_SET_NAME)) {
return "publish";
} else {
return String.format("%sPublish", name);
}
}
if (name.equals(SourceSet.MAIN_SOURCE_SET_NAME)) {
return "apk";
} else {
return String.format("%sApk", name);
}
}
@Override
@NonNull
public String getProvidedConfigurationName() {
if (name.equals(SourceSet.MAIN_SOURCE_SET_NAME)) {
return "provided";
} else {
return String.format("%sProvided", name);
}
}
@Override
@NonNull
public AndroidSourceFile getManifest() {
return manifest;
}
@Override
@NonNull
public AndroidSourceSet manifest(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getManifest());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getRes() {
return res;
}
@Override
@NonNull
public AndroidSourceSet res(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getRes());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getAssets() {
return assets;
}
@Override
@NonNull
public AndroidSourceSet assets(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getAssets());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getAidl() {
return aidl;
}
@Override
@NonNull
public AndroidSourceSet aidl(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getAidl());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getRenderscript() {
return renderscript;
}
@Override
@NonNull
public AndroidSourceSet renderscript(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getRenderscript());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getJni() {
return jni;
}
@Override
@NonNull
public AndroidSourceSet jni(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getJni());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getJniLibs() {
return jniLibs;
}
@Override
@NonNull
public AndroidSourceSet jniLibs(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getJniLibs());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getJava() {
return javaSource;
}
@Override
@NonNull
public AndroidSourceSet java(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getJava());
return this;
}
@Override
@NonNull
public AndroidSourceDirectorySet getResources() {
return javaResources;
}
@Override
@NonNull
public AndroidSourceSet resources(Closure configureClosure) {
ConfigureUtil.configure(configureClosure, getResources());
return this;
}
@Override
@NonNull
public AndroidSourceSet setRoot(String path) {
javaSource.setSrcDirs(Collections.singletonList(path + "/java"));
javaResources.setSrcDirs(Collections.singletonList(path + "/resources"));
res.setSrcDirs(Collections.singletonList(path + "/" + SdkConstants.FD_RES));
assets.setSrcDirs(Collections.singletonList(path + "/" + SdkConstants.FD_ASSETS));
manifest.srcFile(path + "/" + SdkConstants.FN_ANDROID_MANIFEST_XML);
aidl.setSrcDirs(Collections.singletonList(path + "/aidl"));
renderscript.setSrcDirs(Collections.singletonList(path + "/rs"));
jni.setSrcDirs(Collections.singletonList(path + "/jni"));
jniLibs.setSrcDirs(Collections.singletonList(path + "/jniLibs"));
return this;
}
// --- SourceProvider
@NonNull
@Override
public Set<File> getJavaDirectories() {
return getJava().getSrcDirs();
}
@NonNull
@Override
public Set<File> getResourcesDirectories() {
return getResources().getSrcDirs();
}
@Override
@NonNull
public File getManifestFile() {
return getManifest().getSrcFile();
}
@Override
@NonNull
public Set<File> getAidlDirectories() {
return getAidl().getSrcDirs();
}
@Override
@NonNull
public Set<File> getRenderscriptDirectories() {
return getRenderscript().getSrcDirs();
}
@Override
@NonNull
public Set<File> getJniDirectories() {
return getJni().getSrcDirs();
}
@Override
@NonNull
public Set<File> getResDirectories() {
return getRes().getSrcDirs();
}
@Override
@NonNull
public Set<File> getAssetsDirectories() {
return getAssets().getSrcDirs();
}
@NonNull
@Override
public Collection<File> getJniLibsDirectories() {
return getJniLibs().getSrcDirs();
}
}