/*
* Copyright 2016-present Facebook, Inc.
*
* 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.facebook.buck.versions;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.rules.Description;
import com.facebook.buck.rules.TargetNode;
import com.facebook.buck.rules.coercer.CoercedTypeCache;
import com.facebook.buck.rules.coercer.ParamInfo;
import com.facebook.buck.rules.coercer.TypeCoercerFactory;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import java.util.Optional;
class TargetGraphVersionTransformations {
private TargetGraphVersionTransformations() {}
public static boolean isVersionPropagator(TargetNode<?, ?> node) {
return node.getDescription() instanceof VersionPropagator;
}
public static boolean isVersionRoot(TargetNode<?, ?> node) {
return (node.getDescription() instanceof VersionRoot
&& ((VersionRoot<?>) node.getDescription())
.isVersionRoot(node.getBuildTarget().getFlavors()));
}
public static Optional<TargetNode<VersionedAliasDescriptionArg, ?>> getVersionedNode(
TargetNode<?, ?> node) {
return node.castArg(VersionedAliasDescriptionArg.class);
}
@SuppressWarnings("unchecked")
public static ImmutableMap<BuildTarget, Optional<Constraint>> getVersionedDeps(
TypeCoercerFactory typeCoercerFactory, TargetNode<?, ?> node) {
ParamInfo versionedDepsParam =
CoercedTypeCache.INSTANCE
.getAllParamInfo(typeCoercerFactory, node.getConstructorArg().getClass())
.get("versioned_deps");
if (versionedDepsParam == null) {
return ImmutableMap.of();
}
return (ImmutableMap<BuildTarget, Optional<Constraint>>)
versionedDepsParam.get(node.getConstructorArg());
}
public static <A, B extends Description<A>> Iterable<BuildTarget> getDeps(
TypeCoercerFactory typeCoercerFactory, TargetNode<A, B> node) {
return Iterables.concat(
node.getDeclaredDeps(),
node.getExtraDeps(),
getVersionedDeps(typeCoercerFactory, node).keySet());
}
}