ExceptionInfo (String message, String exceptionName, int startOffset) { return switch (exceptionName) { case "java.lang.ArrayIndexOutOfBoundsException" -> new ArrayIndexOutOfBoundsExceptionInfo(startOffset, message); case "java.lang.ArrayStoreException" -> new ArrayStoreExceptionInfo(startOffset, message); case "java.lang.ClassCastException" -> new ClassCastExceptionInfo(startOffset, message); case "java.lang.NullPointerException" -> new NullPointerExceptionInfo(startOffset, message); case "java.lang.AssertionError" -> new AssertionErrorInfo(startOffset, message); case "java.lang.ArithmeticException" -> new ArithmeticExceptionInfo(startOffset, message); case "java.lang.NegativeArraySizeException" -> new NegativeArraySizeExceptionInfo(startOffset, message); default -> { ExceptionInfo info = JetBrainsNotNullInstrumentationExceptionInfo.tryCreate(startOffset, exceptionName, message); yield info != null ? info : new ExceptionInfo(startOffset, exceptionName, message); } }; }