package org.jetbrains.ruby.codeInsight.types.signature; import org.jetbrains.annotations.NotNull; import org.jetbrains.ruby.codeInsight.types.signature.contractTransition.ContractTransition; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; public class RSignatureContractNode implements SignatureNode { private boolean hasReferenceLinks = false; @NotNull private final Map<ContractTransition, SignatureNode> transitions; public RSignatureContractNode(ContractNodeType type) { if (type != ContractNodeType.returnTypeNode) { transitions = new HashMap<>(); } else { transitions = Collections.emptyMap(); } } @NotNull public RSignatureContractNode goByTransition(ContractTransition transition) { return ((RSignatureContractNode) transitions.get(transition)); } public boolean getReferenceLinksFlag() { return hasReferenceLinks; } @NotNull public Set<ContractTransition> getTransitionKeys() { return this.transitions.keySet(); } public void addLink(final @NotNull ContractTransition transition, @NotNull RSignatureContractNode arrivalNode) { this.transitions.put(transition, arrivalNode); } public boolean containsKey(final @NotNull ContractTransition transition) { return this.transitions.keySet().contains(transition); } @NotNull @Override public Map<ContractTransition, SignatureNode> getTransitions() { return transitions; } public enum ContractNodeType { argNode, returnNode, returnTypeNode } }