{ "Multi-types Exception": { "scope": "java", "prefix": "multi-types-exception", "body": [ "public final class ${2:$TM_FILENAME_BASE}", "\t\textends ${3|RuntimeException,Exception,BizException,SysException|}", "\t\timplements MultiTypesException<${2:$TM_FILENAME_BASE}, ${2:$TM_FILENAME_BASE}.Type> {", "\tprivate static final long serialVersionUID = ${4:${RANDOM/(0)//}$CURRENT_DATE$CURRENT_MONTH$CURRENT_YEAR_SHORT$CURRENT_SECOND$CURRENT_MINUTE$CURRENT_HOUR}L;", "", "\tprivate final ${1|@NonNull ,@Nonnull |}Type type;", "", "\tprivate ${2:$TM_FILENAME_BASE}(${1|@NonNull ,@Nonnull |}Type type) {", "\t\tsuper(type.getDefaultMessage());", "\t\tthis.type = type;", "\t}", "", "\tprivate ${2:$TM_FILENAME_BASE}(${1|@NonNull ,@Nonnull |}Type type, @Nullable String msg) {", "\t\tsuper(msg);", "\t\tthis.type = type;", "\t}", "", "\tprivate ${2:$TM_FILENAME_BASE}(${1|@NonNull ,@Nonnull |}Type type, @Nullable Throwable cause) {", "\t\tsuper(cause);", "\t\tthis.type = type;", "\t}", "", "\tprivate ${2:$TM_FILENAME_BASE}(${1|@NonNull ,@Nonnull |}Type type, @Nullable String msg, @Nullable Throwable cause) {", "\t\tsuper(msg, cause);", "\t\tthis.type = type;", "\t}", "", "\t@Override", "\tpublic ${1|@NonNull ,@Nonnull |}Type getType() {", "\t\treturn type;", "\t}", "", "\tpublic enum Type implements ExceptionType<${2:$TM_FILENAME_BASE}> {", "\t\tDEFAULT(\"00\", \"$5\"),", "\t\t// TODO other types", "\t\t;", "", "\t\tprivate final ${1|@NonNull ,@Nonnull |}String code;", "\t\tprivate final ${1|@NonNull ,@Nonnull |}String defaultMessage;", "", "\t\tType(${1|@NonNull ,@Nonnull |}String code, ${1|@NonNull ,@Nonnull |}String defaultMessage) {", "\t\t\tthis.code = code;", "\t\t\tthis.defaultMessage = defaultMessage;", "\t\t}", "", "\t\t@Override", "\t\tpublic ${1|@NonNull ,@Nonnull |}String getCode() {", "\t\t\treturn code;", "\t\t}", "", "\t\t@Override", "\t\tpublic ${1|@NonNull ,@Nonnull |}String getDefaultMessage() {", "\t\t\treturn defaultMessage;", "\t\t}", "", "\t\t@Override", "\t\tpublic ${1|@NonNull ,@Nonnull |}${2:$TM_FILENAME_BASE} create() {", "\t\t\treturn new ${2:$TM_FILENAME_BASE}(this);", "\t\t}", "\t", "\t\t@Override", "\t\tpublic ${1|@NonNull ,@Nonnull |}${2:$TM_FILENAME_BASE} create(@Nullable String message) {", "\t\t\treturn new ${2:$TM_FILENAME_BASE}(this, message);", "\t\t}", "\t", "\t\t@Override", "\t\tpublic ${1|@NonNull ,@Nonnull |}${2:$TM_FILENAME_BASE} create(@Nullable Throwable cause) {", "\t\t\treturn new ${2:$TM_FILENAME_BASE}(this, cause);", "\t\t}", "\t", "\t\t@Override", "\t\tpublic ${1|@NonNull ,@Nonnull |}${2:$TM_FILENAME_BASE} create(@Nullable String message, @Nullable Throwable cause) {", "\t\t\treturn new ${2:$TM_FILENAME_BASE}(this, message, cause);", "\t\t}", "\t}", "}", "", ], "description": "Exception with multiple types." } }