ArrayList<EKey> (@NotNull PsiMethod psiMethod, @NotNull EKey primaryKey) { PsiParameter[] parameters = psiMethod.getParameterList().getParameters(); ArrayList<EKey> keys = new ArrayList<>(parameters.length * 2 + 2); keys.add(primaryKey); for (int i = 0; i < parameters.length; i++) { if (!(parameters[i].getType() instanceof PsiPrimitiveType)) { keys.add(primaryKey.withDirection(new InOut(i, Value.NotNull))); keys.add(primaryKey.withDirection(new InOut(i, Value.Null))); keys.add(primaryKey.withDirection(new InThrow(i, Value.NotNull))); keys.add(primaryKey.withDirection(new InThrow(i, Value.Null))); } else if (PsiTypes.booleanType().equals(parameters[i].getType())) { keys.add(primaryKey.withDirection(new InOut(i, Value.True))); keys.add(primaryKey.withDirection(new InOut(i, Value.False))); keys.add(primaryKey.withDirection(new InThrow(i, Value.True))); keys.add(primaryKey.withDirection(new InThrow(i, Value.False))); } } return keys; }