blob: a791efc86b7deb75c80c15c15a9ae348f45239df [file] [log] [blame]
/*
* Copyright 2016 The Bazel Authors. All rights reserved.
*
* 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.google.idea.blaze.base.ideinfo;
import com.google.common.collect.Lists;
import com.google.idea.blaze.base.model.primitives.Kind;
import com.google.idea.blaze.base.model.primitives.Label;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import javax.annotation.Nullable;
/** Simple implementation of RuleIdeInfo. */
public final class RuleIdeInfo implements Serializable {
private static final long serialVersionUID = 10L;
public final Label label;
public final Kind kind;
@Nullable public final ArtifactLocation buildFile;
public final Collection<Label> dependencies;
public final Collection<Label> runtimeDeps;
public final Collection<String> tags;
public final Collection<ArtifactLocation> sources;
@Nullable public final CRuleIdeInfo cRuleIdeInfo;
@Nullable public final CToolchainIdeInfo cToolchainIdeInfo;
@Nullable public final JavaRuleIdeInfo javaRuleIdeInfo;
@Nullable public final AndroidRuleIdeInfo androidRuleIdeInfo;
@Nullable public final TestIdeInfo testIdeInfo;
@Nullable public final ProtoLibraryLegacyInfo protoLibraryLegacyInfo;
@Nullable public final JavaToolchainIdeInfo javaToolchainIdeInfo;
public RuleIdeInfo(
Label label,
Kind kind,
@Nullable ArtifactLocation buildFile,
Collection<Label> dependencies,
Collection<Label> runtimeDeps,
Collection<String> tags,
Collection<ArtifactLocation> sources,
@Nullable CRuleIdeInfo cRuleIdeInfo,
@Nullable CToolchainIdeInfo cToolchainIdeInfo,
@Nullable JavaRuleIdeInfo javaRuleIdeInfo,
@Nullable AndroidRuleIdeInfo androidRuleIdeInfo,
@Nullable TestIdeInfo testIdeInfo,
@Nullable ProtoLibraryLegacyInfo protoLibraryLegacyInfo,
@Nullable JavaToolchainIdeInfo javaToolchainIdeInfo) {
this.label = label;
this.kind = kind;
this.buildFile = buildFile;
this.dependencies = dependencies;
this.runtimeDeps = runtimeDeps;
this.tags = tags;
this.sources = sources;
this.cRuleIdeInfo = cRuleIdeInfo;
this.cToolchainIdeInfo = cToolchainIdeInfo;
this.javaRuleIdeInfo = javaRuleIdeInfo;
this.androidRuleIdeInfo = androidRuleIdeInfo;
this.testIdeInfo = testIdeInfo;
this.protoLibraryLegacyInfo = protoLibraryLegacyInfo;
this.javaToolchainIdeInfo = javaToolchainIdeInfo;
}
@Override
public String toString() {
return label.toString();
}
/** Returns whether this rule is one of the kinds. */
public boolean kindIsOneOf(Kind... kinds) {
return kindIsOneOf(Arrays.asList(kinds));
}
/** Returns whether this rule is one of the kinds. */
public boolean kindIsOneOf(List<Kind> kinds) {
if (kind != null) {
return kind.isOneOf(kinds);
}
return false;
}
public static Builder builder() {
return new Builder();
}
/** Builder for rule ide info */
public static class Builder {
private Label label;
private Kind kind;
private ArtifactLocation buildFile;
private final List<Label> dependencies = Lists.newArrayList();
private final List<Label> runtimeDeps = Lists.newArrayList();
private final List<String> tags = Lists.newArrayList();
private final List<ArtifactLocation> sources = Lists.newArrayList();
private final List<LibraryArtifact> libraries = Lists.newArrayList();
private CRuleIdeInfo cRuleIdeInfo;
private CToolchainIdeInfo cToolchainIdeInfo;
private JavaRuleIdeInfo javaRuleIdeInfo;
private AndroidRuleIdeInfo androidRuleIdeInfo;
private TestIdeInfo testIdeInfo;
private ProtoLibraryLegacyInfo protoLibraryLegacyInfo;
private JavaToolchainIdeInfo javaToolchainIdeInfo;
public Builder setLabel(String label) {
return setLabel(new Label(label));
}
public Builder setLabel(Label label) {
this.label = label;
return this;
}
public Builder setBuildFile(ArtifactLocation buildFile) {
this.buildFile = buildFile;
return this;
}
public Builder setKind(String kind) {
return setKind(Kind.fromString(kind));
}
public Builder setKind(Kind kind) {
this.kind = kind;
return this;
}
public Builder addSource(ArtifactLocation source) {
this.sources.add(source);
return this;
}
public Builder addSource(ArtifactLocation.Builder source) {
return addSource(source.build());
}
public Builder setJavaInfo(JavaRuleIdeInfo.Builder builder) {
javaRuleIdeInfo = builder.build();
return this;
}
public Builder setCInfo(CRuleIdeInfo cInfo) {
this.cRuleIdeInfo = cInfo;
return this;
}
public Builder setCInfo(CRuleIdeInfo.Builder cInfo) {
return setCInfo(cInfo.build());
}
public Builder setCToolchainInfo(CToolchainIdeInfo info) {
this.cToolchainIdeInfo = info;
return this;
}
public Builder setCToolchainInfo(CToolchainIdeInfo.Builder info) {
return setCToolchainInfo(info.build());
}
public Builder setAndroidInfo(AndroidRuleIdeInfo androidInfo) {
this.androidRuleIdeInfo = androidInfo;
return this;
}
public Builder setAndroidInfo(AndroidRuleIdeInfo.Builder androidInfo) {
return setAndroidInfo(androidInfo.build());
}
public Builder setTestInfo(TestIdeInfo.Builder testInfo) {
this.testIdeInfo = testInfo.build();
return this;
}
public Builder setProtoLibraryLegacyInfo(
ProtoLibraryLegacyInfo.Builder protoLibraryLegacyInfo) {
this.protoLibraryLegacyInfo = protoLibraryLegacyInfo.build();
return this;
}
public Builder setJavaToolchainIdeInfo(JavaToolchainIdeInfo.Builder javaToolchainIdeInfo) {
this.javaToolchainIdeInfo = javaToolchainIdeInfo.build();
return this;
}
public Builder addTag(String s) {
this.tags.add(s);
return this;
}
public Builder addDependency(String s) {
return addDependency(new Label(s));
}
public Builder addDependency(Label label) {
this.dependencies.add(label);
return this;
}
public Builder addRuntimeDep(String s) {
return addRuntimeDep(new Label(s));
}
public Builder addRuntimeDep(Label label) {
this.runtimeDeps.add(label);
return this;
}
public RuleIdeInfo build() {
return new RuleIdeInfo(
label,
kind,
buildFile,
dependencies,
runtimeDeps,
tags,
sources,
cRuleIdeInfo,
cToolchainIdeInfo,
javaRuleIdeInfo,
androidRuleIdeInfo,
testIdeInfo,
protoLibraryLegacyInfo,
javaToolchainIdeInfo);
}
}
}