package org.jetbrains.ruby.codeInsight.types.signature; import org.jetbrains.annotations.NotNull; import java.util.*; public class RSignatureContractContainer { private Map<MethodInfo, RSignatureContract> contracts; public RSignatureContractContainer() { contracts = new HashMap<>(); } public void reduction() { contracts.entrySet().stream() .sorted(Collections.reverseOrder(Comparator.comparingInt(entry -> entry.getValue().getNumberOfCalls()))) .forEachOrdered(entry -> { final MethodInfo key = entry.getKey(); contracts.get(key).locked = true; contracts.get(key).minimization(); contracts.get(key).locked = false; }); System.out.println("Finished"); } public void addContract(@NotNull MethodInfo info, @NotNull RSignatureContract contract) { contracts.put(info, contract); } public void addSignature(@NotNull RSignature signature) { MethodInfo currInfo = signature.getMethodInfo(); if (contracts.containsKey(currInfo)) { RSignatureContract contract = contracts.get(currInfo); contract.locked = true; if (signature.getArgsInfo().size() == contract.getArgsInfo().size()) contracts.get(currInfo).addRSignature(signature); else { //System.out.println("Collision"); } contract.locked = false; } else { RSignatureContract contract = new RSignatureContract(signature); contract.locked = true; contracts.put(currInfo, contract); contract.locked = false; } } public void merge(RSignatureContractContainer additive) { for (MethodInfo methodInfo : additive.getKeySet()) { if (getKeySet().contains(methodInfo)) { contracts.get(methodInfo).merge(additive.getSignature(methodInfo)); } else { addContract(methodInfo, additive.getSignature(methodInfo)); } } } public Set<MethodInfo> getKeySet() { return contracts.keySet(); } public RSignatureContract getSignature(MethodInfo info) { return contracts.get(info); } }