MutationSignature (@NotNull String signature) { if (signature.trim().isEmpty()) { return UNKNOWN; } boolean mutatesThis = false; boolean[] args = {}; for (String part : signature.split(",")) { part = part.trim(); if (part.equals("this")) { mutatesThis = true; } else if (part.equals("param")) { if (args.length == 0) { args = new boolean[] {true}; } else { args[0] = true; } } else if (part.startsWith("param")) { int argNum = Integer.parseInt(part.substring("param".length())); if (argNum < 0 || argNum > 255) { throw new IllegalArgumentException(JavaAnalysisBundle.message("mutation.signature.problem.invalid.token", part)); } if(args.length < argNum) { args = Arrays.copyOf(args, argNum); } args[argNum-1] = true; } else if (!part.isEmpty()) { throw new IllegalArgumentException(JavaAnalysisBundle.message("mutation.signature.problem.invalid.token", part)); } } return new MutationSignature(mutatesThis, args); }