/*
* 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.dependency;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.annotations.concurrency.Immutable;
import com.android.builder.dependency.LibraryBundle;
import com.android.builder.dependency.LibraryDependency;
import com.android.builder.dependency.ManifestDependency;
import com.android.builder.model.AndroidLibrary;
import com.android.builder.model.MavenCoordinates;
import com.google.common.base.Objects;
import java.io.File;
import java.util.Collections;
import java.util.List;
@Immutable
public class LibraryDependencyImpl extends LibraryBundle {
@NonNull
private final List<LibraryDependency> dependencies;
@Nullable
private final String variantName;
@Nullable
private final MavenCoordinates requestedCoordinates;
@Nullable
private final MavenCoordinates resolvedCoordinates;
private final boolean isOptional;
public LibraryDependencyImpl(
@NonNull File bundle,
@NonNull File explodedBundle,
@NonNull List<LibraryDependency> dependencies,
@Nullable String name,
@Nullable String variantName,
@Nullable String projectPath,
@Nullable MavenCoordinates requestedCoordinates,
@Nullable MavenCoordinates resolvedCoordinates,
boolean isOptional) {
super(bundle, explodedBundle, name, projectPath);
this.dependencies = dependencies;
this.variantName = variantName;
this.requestedCoordinates = requestedCoordinates;
this.resolvedCoordinates = resolvedCoordinates;
this.isOptional = isOptional;
}
@NonNull
@Override
public List<? extends AndroidLibrary> getLibraryDependencies() {
return dependencies;
}
@Override
@NonNull
public List<LibraryDependency> getDependencies() {
return dependencies;
}
@Override
@NonNull
public List<? extends ManifestDependency> getManifestDependencies() {
return dependencies;
}
@Nullable
@Override
public String getProjectVariant() {
return variantName;
}
@Nullable
@Override
public MavenCoordinates getRequestedCoordinates() {
return requestedCoordinates;
}
@Nullable
@Override
public MavenCoordinates getResolvedCoordinates() {
return resolvedCoordinates;
}
@Override
public boolean isOptional() {
return isOptional;
}
/**
* Returns a version of the library dependency with the dependencies removed.
*/
@NonNull
public LibraryDependencyImpl getNonTransitiveRepresentation() {
return new LibraryDependencyImpl(
getBundle(),
getBundleFolder(),
Collections.<LibraryDependency>emptyList(),
getName(),
variantName,
getProject(),
requestedCoordinates,
resolvedCoordinates,
isOptional);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (!super.equals(o)) {
return false;
}
LibraryDependencyImpl that = (LibraryDependencyImpl) o;
return Objects.equal(dependencies, that.dependencies) &&
Objects.equal(variantName, that.variantName) &&
Objects.equal(resolvedCoordinates, that.resolvedCoordinates) &&
Objects.equal(isOptional, that.isOptional());
}
@Override
public int hashCode() {
return Objects.hashCode(
super.hashCode(),
dependencies,
variantName,
resolvedCoordinates,
isOptional);
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("dependencies", dependencies)
.add("variantName", variantName)
.add("requestedCoordinates", requestedCoordinates)
.add("resolvedCoordinates", resolvedCoordinates)
.add("isOptional", isOptional)
.add("super", super.toString())
.toString();
}
}