| /* |
| * 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.annotations.VisibleForTesting; |
| import com.google.common.base.Preconditions; |
| import com.google.common.collect.Lists; |
| import com.google.idea.blaze.base.ideinfo.Dependency.DependencyType; |
| 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 TargetIdeInfo. */ |
| public final class TargetIdeInfo implements Serializable { |
| private static final long serialVersionUID = 17L; |
| |
| public final TargetKey key; |
| public final Kind kind; |
| @Nullable public final ArtifactLocation buildFile; |
| public final Collection<Dependency> dependencies; |
| public final Collection<String> tags; |
| public final Collection<ArtifactLocation> sources; |
| @Nullable public final CIdeInfo cIdeInfo; |
| @Nullable public final CToolchainIdeInfo cToolchainIdeInfo; |
| @Nullable public final JavaIdeInfo javaIdeInfo; |
| @Nullable public final AndroidIdeInfo androidIdeInfo; |
| @Nullable public final AndroidSdkIdeInfo androidSdkIdeInfo; |
| @Nullable public final PyIdeInfo pyIdeInfo; |
| @Nullable public final GoIdeInfo goIdeInfo; |
| @Nullable public final JsIdeInfo jsIdeInfo; |
| @Nullable public final TsIdeInfo tsIdeInfo; |
| @Nullable public final TestIdeInfo testIdeInfo; |
| @Nullable public final ProtoLibraryLegacyInfo protoLibraryLegacyInfo; |
| @Nullable public final JavaToolchainIdeInfo javaToolchainIdeInfo; |
| |
| public TargetIdeInfo( |
| TargetKey key, |
| Kind kind, |
| @Nullable ArtifactLocation buildFile, |
| Collection<Dependency> dependencies, |
| Collection<String> tags, |
| Collection<ArtifactLocation> sources, |
| @Nullable CIdeInfo cIdeInfo, |
| @Nullable CToolchainIdeInfo cToolchainIdeInfo, |
| @Nullable JavaIdeInfo javaIdeInfo, |
| @Nullable AndroidIdeInfo androidIdeInfo, |
| @Nullable AndroidSdkIdeInfo androidSdkIdeInfo, |
| @Nullable PyIdeInfo pyIdeInfo, |
| @Nullable GoIdeInfo goIdeInfo, |
| @Nullable JsIdeInfo jsIdeInfo, |
| @Nullable TsIdeInfo tsIdeInfo, |
| @Nullable TestIdeInfo testIdeInfo, |
| @Nullable ProtoLibraryLegacyInfo protoLibraryLegacyInfo, |
| @Nullable JavaToolchainIdeInfo javaToolchainIdeInfo) { |
| this.key = key; |
| this.kind = kind; |
| this.buildFile = buildFile; |
| this.dependencies = dependencies; |
| this.tags = tags; |
| this.sources = sources; |
| this.cIdeInfo = cIdeInfo; |
| this.cToolchainIdeInfo = cToolchainIdeInfo; |
| this.javaIdeInfo = javaIdeInfo; |
| this.androidIdeInfo = androidIdeInfo; |
| this.androidSdkIdeInfo = androidSdkIdeInfo; |
| this.pyIdeInfo = pyIdeInfo; |
| this.goIdeInfo = goIdeInfo; |
| this.jsIdeInfo = jsIdeInfo; |
| this.tsIdeInfo = tsIdeInfo; |
| this.testIdeInfo = testIdeInfo; |
| this.protoLibraryLegacyInfo = protoLibraryLegacyInfo; |
| this.javaToolchainIdeInfo = javaToolchainIdeInfo; |
| } |
| |
| @Override |
| public String toString() { |
| return key.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(Collection<Kind> kinds) { |
| if (kind != null) { |
| return kind.isOneOf(kinds); |
| } |
| return false; |
| } |
| |
| public boolean isPlainTarget() { |
| return key.isPlainTarget(); |
| } |
| |
| public static Builder builder() { |
| return new Builder(); |
| } |
| |
| /** Builder for rule ide info */ |
| public static class Builder { |
| private TargetKey key; |
| private Kind kind; |
| private ArtifactLocation buildFile; |
| private final List<Dependency> dependencies = Lists.newArrayList(); |
| private final List<String> tags = Lists.newArrayList(); |
| private final List<ArtifactLocation> sources = Lists.newArrayList(); |
| private CIdeInfo cIdeInfo; |
| private CToolchainIdeInfo cToolchainIdeInfo; |
| private JavaIdeInfo javaIdeInfo; |
| private AndroidIdeInfo androidIdeInfo; |
| private PyIdeInfo pyIdeInfo; |
| private GoIdeInfo goIdeInfo; |
| private JsIdeInfo jsIdeInfo; |
| private TsIdeInfo tsIdeInfo; |
| private TestIdeInfo testIdeInfo; |
| private ProtoLibraryLegacyInfo protoLibraryLegacyInfo; |
| private JavaToolchainIdeInfo javaToolchainIdeInfo; |
| |
| public Builder setLabel(String label) { |
| return setLabel(Label.create(label)); |
| } |
| |
| public Builder setLabel(Label label) { |
| this.key = TargetKey.forPlainTarget(label); |
| return this; |
| } |
| |
| public Builder setBuildFile(ArtifactLocation buildFile) { |
| this.buildFile = buildFile; |
| return this; |
| } |
| |
| @VisibleForTesting |
| public Builder setKind(String kindString) { |
| Kind kind = Preconditions.checkNotNull(Kind.fromString(kindString)); |
| return setKind(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(JavaIdeInfo.Builder builder) { |
| javaIdeInfo = builder.build(); |
| return this; |
| } |
| |
| public Builder setCInfo(CIdeInfo cInfo) { |
| this.cIdeInfo = cInfo; |
| this.sources.addAll(cInfo.sources); |
| this.sources.addAll(cInfo.headers); |
| this.sources.addAll(cInfo.textualHeaders); |
| return this; |
| } |
| |
| public Builder setCInfo(CIdeInfo.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(AndroidIdeInfo androidInfo) { |
| this.androidIdeInfo = androidInfo; |
| return this; |
| } |
| |
| public Builder setAndroidInfo(AndroidIdeInfo.Builder androidInfo) { |
| return setAndroidInfo(androidInfo.build()); |
| } |
| |
| public Builder setPyInfo(PyIdeInfo.Builder pyInfo) { |
| this.pyIdeInfo = pyInfo.build(); |
| return this; |
| } |
| |
| public Builder setGoInfo(GoIdeInfo.Builder goInfo) { |
| this.goIdeInfo = goInfo.build(); |
| return this; |
| } |
| |
| public Builder setJsInfo(JsIdeInfo.Builder jsInfo) { |
| this.jsIdeInfo = jsInfo.build(); |
| return this; |
| } |
| |
| public Builder setTsInfo(TsIdeInfo.Builder tsInfo) { |
| this.tsIdeInfo = tsInfo.build(); |
| return this; |
| } |
| |
| 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(Label.create(s)); |
| } |
| |
| public Builder addDependency(Label label) { |
| this.dependencies.add( |
| new Dependency(TargetKey.forPlainTarget(label), DependencyType.COMPILE_TIME)); |
| return this; |
| } |
| |
| public Builder addRuntimeDep(String s) { |
| return addRuntimeDep(Label.create(s)); |
| } |
| |
| public Builder addRuntimeDep(Label label) { |
| this.dependencies.add( |
| new Dependency(TargetKey.forPlainTarget(label), DependencyType.RUNTIME)); |
| return this; |
| } |
| |
| public TargetIdeInfo build() { |
| return new TargetIdeInfo( |
| key, |
| kind, |
| buildFile, |
| dependencies, |
| tags, |
| sources, |
| cIdeInfo, |
| cToolchainIdeInfo, |
| javaIdeInfo, |
| androidIdeInfo, |
| null, |
| pyIdeInfo, |
| goIdeInfo, |
| jsIdeInfo, |
| tsIdeInfo, |
| testIdeInfo, |
| protoLibraryLegacyInfo, |
| javaToolchainIdeInfo); |
| } |
| } |
| } |