// Copyright 2016 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.service.project.model.graph; import com.twitter.intellij.pants.model.TargetAddressInfo; import com.twitter.intellij.pants.service.project.model.TargetInfo; import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; /** * BuildGraphNode and Module are one to one relationship. */ public class BuildGraphNode { private TargetInfo myTargetInfo; public String getAddress() { return address; } private String address; // could be synthetic and tweaked by modifiers. public Set<BuildGraphNode> getDependencies() { return myDependencies; } private Set<BuildGraphNode> myDependencies = new HashSet<>(); private Set<BuildGraphNode> myDependees = new HashSet<>(); public TargetInfo getTargetInfo() { return myTargetInfo; } public BuildGraphNode(Map.Entry<String, TargetInfo> entry) { address = entry.getKey(); myTargetInfo = entry.getValue(); } public boolean containsTargetAddress(String targetAddress) { return myTargetInfo.getAddressInfos().stream().anyMatch(s -> s.getTargetAddress().equals(targetAddress)); } public boolean isTargetRoot() { return myTargetInfo.getAddressInfos().stream().anyMatch(TargetAddressInfo::isTargetRoot); } public void addDependency(BuildGraphNode node) { myDependencies.add(node); } public void addDepeedee(BuildGraphNode node) { myDependees.add(node); } @Override public int hashCode() { return Objects.hash(myTargetInfo); } @Override public String toString() { return super.toString() + " " + String.join( " ", myTargetInfo.getAddressInfos().stream() .map(TargetAddressInfo::getTargetAddress) .collect(Collectors.toList()) ); } }