SyntaxErrorMessageMapper.java
package org.thewonderlemming.c4plantuml.syntaxchecker;
import java.util.AbstractMap.SimpleEntry;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Maps ANTLR4 grammars specific errors to readable errors.
*
* @author thewonderlemming
*
*/
public enum SyntaxErrorMessageMapper {
/**
* An error message related to the !include instruction.
*/
EXPECTING_INCLUDE(
"mismatched input '!' expecting INCLUDE",
"mismatched input. expecting !include");
private static final Map<String, SyntaxErrorMessageMapper> LOOKUP;
private final String displayMessage;
private final String parserMessage;
static {
LOOKUP = Stream
.of(SyntaxErrorMessageMapper.values())
.map(value -> new SimpleEntry<>(value.getParserMessage(), value))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
}
/**
* Returns an instance of {@link SyntaxErrorMessageMapper} given a parser message, if found.
*
* @param message the parser message.
* @return the {@link SyntaxErrorMessageMapper} instance if found, empty else.
*/
public static Optional<SyntaxErrorMessageMapper> getMappingForParserMessage(final String message) {
return Optional.ofNullable(LOOKUP.get(message));
}
/**
* Returns a readable message given a parser message if found.
*
* @param message the parser message.
* @return the readable message if found, or the given message else.
*/
public static String getMappingForParserMessageOrGetDefault(final String message) {
final Optional<SyntaxErrorMessageMapper> value = getMappingForParserMessage(message);
if (value.isPresent()) {
return value.get().getDisplayMessage();
}
return message;
}
private SyntaxErrorMessageMapper(final String parserMessage, final String displayMessage) {
this.parserMessage = parserMessage;
this.displayMessage = displayMessage;
}
/**
* Returns the readable message.
*
* @return the readable message.
*/
public String getDisplayMessage() {
return displayMessage;
}
/**
* Returns the parser original message.
*
* @return the parser original message.
*/
public String getParserMessage() {
return parserMessage;
}
}