class ValidationViolation extends ValidationMessage {

    ValidationViolation(String validatorId, ValidationMessage message, Path filePath, Path basePath, String nodePath, int line, int column, Throwable t) {
        // potentially overwrite line, column and throwable from wrapped message (but only if not yet set there)
        super(message.getSeverity(), message.getMessage(), message.getNodePath() != null ? message.getNodePath() : nodePath, message.getFilePath() != null ? message.getFilePath() : filePath, message.getBasePath() != null ? message.getBasePath() : basePath, message.getLine() != 0 ?  message.getLine() : line, message.getColumn() != 0 ? message.getColumn() : column, message.getThrowable() != null ? message.getThrowable() : t);
        
        this.validatorId = validatorId;
    }

      ValidationViolation(String validatorId, ValidationMessage message, Path filePath, Path basePath, String nodePath, int line, int column, Throwable t);
    private  ValidationViolation(String validatorId, ValidationMessage message);
    public  ValidationViolation(String validatorId, @NotNull ValidationMessageSeverity severity, @NotNull String message);
    public  ValidationViolation(@NotNull ValidationMessageSeverity severity, @NotNull String message);
    public  ValidationViolation(@NotNull ValidationMessageSeverity severity, @NotNull String message, Path filePath, Path basePath, String nodePath, int line, int column, Throwable t);
    public  ValidationViolation(String validatorId, @NotNull ValidationMessageSeverity severity, @NotNull String message, Path filePath, Path basePath, String nodePath, int line, int column, Throwable t);

}