package org.jetbrains.ruby.runtime.signature; import org.jetbrains.annotations.NotNull; import org.jetbrains.ruby.codeInsight.types.signature.*; import org.jetbrains.ruby.runtime.signature.server.ServerResponseBean; import java.util.*; public class RawSignature { @NotNull private final MethodInfo myMethodInfo; @NotNull private final List<ParameterInfo> myArgsInfo; @NotNull private final List<Boolean> isGiven; @NotNull private List<String> myArgsTypes; private final String myCallMid; public int argc; @NotNull public final Set<String> kwArgs; private String myReturnTypeName; public RawSignature(ServerResponseBean bean) { this.myMethodInfo = MethodInfoKt.MethodInfo( ClassInfoKt.ClassInfo(GemInfoKt.GemInfo(bean.gem_name, bean.gem_version), bean.receiver_name), bean.method_name, RVisibility.valueOf(bean.visibility)); this.myCallMid = bean.call_info_mid; if (!bean.call_info_argc.equals("")) { this.argc = Integer.parseInt(bean.call_info_argc); } else { this.argc = 0; } String kwInfo = bean.call_info_kw_args; this.kwArgs = new HashSet<>(); this.kwArgs.addAll(Arrays.asList(kwInfo.split("\\s*,\\s*"))); this.myReturnTypeName = bean.return_type_name; String argsTypeName = bean.args_type_name; this.myArgsTypes = new ArrayList<>(); //this.myArgsTypes.addAll(Arrays.asList(argsTypeName.split("\\s*;\\s*"))); String argsInfo = bean.args_info; this.myArgsInfo = new ArrayList<>(); if (!argsInfo.equals("")) { for (String argument : Arrays.asList(argsInfo.split("\\s*;\\s*"))) { List<String> parts = Arrays.asList(argument.split("\\s*,\\s*")); String name = null; if (parts.size() > 2 && !parts.get(2).equals("nil")) name = parts.get(2); this.myArgsInfo.add(new ParameterInfo(name, ParameterInfo.Type.valueOf(parts.get(0)))); this.myArgsTypes.add(parts.get(1)); } } isGiven = new ArrayList<>(Arrays.asList(new Boolean[myArgsTypes.size()])); Collections.fill(isGiven, Boolean.FALSE); } public RSignature getRSignature() { return new RSignature(myMethodInfo, myArgsInfo, myArgsTypes, myReturnTypeName); } @NotNull public List<ParameterInfo> getArgsInfo() { return myArgsInfo; } public void changeArgumentType(int index, String newType) { myArgsTypes.set(index, newType); } }