blob: 1a15f9c41313c6679f13f04d455077f94507a957 [file] [log] [blame]
/*
* Copyright (C) 2013 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.tools.idea.gradle.stubs.android;
import com.android.SdkConstants;
import com.android.annotations.NonNull;
import com.android.builder.model.*;
import com.android.tools.idea.gradle.stubs.FileStructure;
import com.android.tools.idea.gradle.util.GradleUtil;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class AndroidProjectStub implements AndroidProject {
private static final Collection<String> NO_UNRESOLVED_DEPENDENCIES = ImmutableList.of();
@NotNull private final Map<String, BuildTypeContainer> myBuildTypes = Maps.newHashMap();
@NotNull private final Map<String, ProductFlavorContainer> myProductFlavors = Maps.newHashMap();
@NotNull private final Map<String, Variant> myVariants = Maps.newHashMap();
@NotNull private final String myName;
@NotNull private final FileStructure myFileStructure;
@NotNull private final ProductFlavorContainerStub myDefaultConfig;
@NotNull private File myBuildFolder;
@NotNull private final File myBuildFile;
@NotNull private final JavaCompileOptionsStub myJavaCompileOptions = new JavaCompileOptionsStub();
@Nullable private VariantStub myFirstVariant;
private boolean myLibrary;
public AndroidProjectStub(@NotNull String name) {
this(name, new FileStructure(name));
}
public AndroidProjectStub(@NotNull File parentDir, @NotNull String name) {
this(name, new FileStructure(parentDir, name));
}
private AndroidProjectStub(@NotNull String name, @NotNull FileStructure fileStructure) {
this.myName = name;
myFileStructure = fileStructure;
myBuildFolder = myFileStructure.createProjectDir("build");
myDefaultConfig = new ProductFlavorContainerStub("main", myFileStructure);
myBuildFile = myFileStructure.createProjectFile(SdkConstants.FN_BUILD_GRADLE);
}
@Override
@NotNull
public String getModelVersion() {
return GradleUtil.GRADLE_PLUGIN_MINIMUM_VERSION + "-SNAPSHOT";
}
@Override
@NotNull
public String getName() {
return myName;
}
public void setIsLibrary(boolean isLibrary) {
myLibrary = isLibrary;
}
@Override
public boolean isLibrary() {
return myLibrary;
}
@Override
@NotNull
public ProductFlavorContainerStub getDefaultConfig() {
return myDefaultConfig;
}
public BuildTypeContainerStub addBuildType(@NotNull String buildTypeName) {
BuildTypeContainerStub buildType = new BuildTypeContainerStub(buildTypeName, myFileStructure);
myBuildTypes.put(buildTypeName, buildType);
return buildType;
}
@Override
@NotNull
public Collection<BuildTypeContainer> getBuildTypes() {
return myBuildTypes.values();
}
@Nullable
public BuildTypeContainer findBuildType(@NotNull String name) {
return myBuildTypes.get(name);
}
@NotNull
public ProductFlavorContainerStub addProductFlavor(@NotNull String flavorName) {
ProductFlavorContainerStub flavor = new ProductFlavorContainerStub(flavorName, myFileStructure);
myProductFlavors.put(flavorName, flavor);
return flavor;
}
@Override
@NotNull
public Collection<ProductFlavorContainer> getProductFlavors() {
return myProductFlavors.values();
}
@Nullable
public ProductFlavorContainerStub findProductFlavor(@NotNull String name) {
ProductFlavorContainer flavorContainer = myProductFlavors.get(name);
return (ProductFlavorContainerStub)flavorContainer;
}
@NotNull
public VariantStub addVariant(@NotNull String variantName) {
return addVariant(variantName, variantName);
}
@NotNull
public VariantStub addVariant(@NotNull String variantName, @NotNull String buildTypeName) {
VariantStub variant = new VariantStub(variantName, buildTypeName, myFileStructure);
addVariant(variant);
return variant;
}
private void addVariant(@NotNull VariantStub variant) {
if (myFirstVariant == null) {
myFirstVariant = variant;
}
myVariants.put(variant.getName(), variant);
}
@Override
@NotNull
public Collection<Variant> getVariants() {
return myVariants.values();
}
@Override
@NotNull
public Collection<ArtifactMetaData> getExtraArtifacts() {
throw new UnsupportedOperationException();
}
@Nullable
public VariantStub getFirstVariant() {
return myFirstVariant;
}
@Override
@NotNull
public String getCompileTarget() {
throw new UnsupportedOperationException();
}
@Override
@NotNull
public List<String> getBootClasspath() {
throw new UnsupportedOperationException();
}
@Override
@NotNull
public Collection<File> getFrameworkSources() {
throw new UnsupportedOperationException();
}
@Override
@NotNull
public Collection<SigningConfig> getSigningConfigs() {
throw new UnsupportedOperationException();
}
@Override
@NotNull
public AaptOptions getAaptOptions() {
throw new UnsupportedOperationException();
}
@NonNull
@Override
public LintOptions getLintOptions() {
throw new UnsupportedOperationException();
}
@Override
@NotNull
public Collection<String> getUnresolvedDependencies() {
return NO_UNRESOLVED_DEPENDENCIES;
}
@Override
@NotNull
public JavaCompileOptionsStub getJavaCompileOptions() {
return myJavaCompileOptions;
}
@Override
@NotNull
public File getBuildFolder() {
return myBuildFolder;
}
@Nullable
@Override
public String getResourcePrefix() {
return null;
}
/**
* Deletes this project's directory structure.
*/
public void dispose() {
myFileStructure.dispose();
}
/**
* @return this project's root directory.
*/
@NotNull
public File getRootDir() {
return myFileStructure.getRootDir();
}
/**
* @return this project's build.gradle file.
*/
@NotNull
public File getBuildFile() {
return myBuildFile;
}
}