public static TagCycleException create(Class<? extends TagCycleException> clazz, String path, Optional<Integer> lineNumber, Optional<Integer> startPosition) { final Integer line = lineNumber.orElse(-1); final Integer position = startPosition.orElse(-1); if (clazz != null) { if (clazz.equals(ExtendsTagCycleException.class)) { return new ExtendsTagCycleException(path, line, position); } else if (clazz.equals(ImportTagCycleException.class)) { return new ImportTagCycleException(path, line, position); } else if (clazz.equals(IncludeTagCycleException.class)) { return new IncludeTagCycleException(path, line, position); } else if (clazz.equals(MacroTagCycleException.class)) { return new MacroTagCycleException(path, line, position); } else if (clazz.equals(FromTagCycleException.class)) { return new FromTagCycleException(path, line, position); } } return new TagCycleException("", path, line, position); }