diff --git a/KPMAlias/pom.xml b/KPMAlias/pom.xml index 24ca66a0..43c0bcf9 100644 --- a/KPMAlias/pom.xml +++ b/KPMAlias/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -22,19 +22,19 @@ org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMResolver - 3.0.0 + 3.0.1 provided diff --git a/KPMCommon/pom.xml b/KPMCommon/pom.xml index 85eabe30..56e62f93 100644 --- a/KPMCommon/pom.xml +++ b/KPMCommon/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/DebugConstants.java b/KPMCommon/src/main/java/org/kunlab/kpm/DebugConstants.java index 6c5aa7e5..f34bb066 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/DebugConstants.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/DebugConstants.java @@ -1,6 +1,8 @@ package org.kunlab.kpm; import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * KPM のデバッグ状態の定数です。 @@ -13,51 +15,48 @@ public class DebugConstants * VM プロパティの {@code kpm.enable-debug} が {@code true} である場合に有効化されます。 */ public static final boolean DEBUG_MODE; - /** * 不必要な KPM のアップグレードを許可するかどうかを示します。 * デバッグモードが有効か、VM プロパティの {@code kpm.debug.allow-unneeded-upgrade} が {@code true} である場合に有効化されます。 */ public static final boolean ALLOW_UNNEEDED_UPGRADE; - /** * データベースのコネクションを出力するかどうかを示します。 * デバッグモードが有効か、VM プロパティの {@code kpm.kpm.debug.db.trace-connection} が {@code true} である場合に有効化されます。 */ public static final boolean DB_CONNECTION_TRACE; - /** * HTTP リクエストの詳細を出力するかどうかを示します。 * デバッグモードが有効か、VM プロパティの {@code kpm.debug.http.trace-request} が {@code true} である場合に有効化されます。 */ public static final boolean HTTP_REQUEST_TRACE; - /** * HTTP リクエストのリダイレクトを出力するかどうかを示します。 * デバッグモードが有効か、{@link #HTTP_REQUEST_TRACE} が有効か、VM プロパティの {@code kpm.debug.http.trace-redirect} が {@code true} である場合に有効化されます。 */ public static final boolean HTTP_REDIRECT_TRACE; - /** * プラグインメタデータの操作を出力するかどうかを示します。 * デバッグモードが有効か、VM プロパティの {@code kpm.debug.plugin-meta.trace-operation} が {@code true} である場合に有効化されます。 */ public static final boolean PLUGIN_META_OPERATION_TRACE; - /** * 依存関係ツリーの操作を出力するかどうかを示します。 * デバッグモードが有効か、VM プロパティの {@code kpm.debug.plugin-meta.trace-dependency-tree} が {@code true} である場合に有効化されます。 */ public static final boolean PLUGIN_META_DEPENDENCY_TREE_TRACE; - /** * メッセージの出力時に、翻訳キーを出力するかどうかを示します。 * デバッグモードが有効か、VM プロパティの {@code kpm.debug.raw-message} が {@code true} である場合に有効化されます。 */ public static final boolean RAW_MESSAGE; + private static final Logger LOGGER; + static { + LOGGER = LoggerFactory.getLogger(DebugConstants.class); + DEBUG_MODE = Boolean.getBoolean("kpm.enable-debug"); ALLOW_UNNEEDED_UPGRADE = DEBUG_MODE || Boolean.getBoolean("kpm.debug.allow-unneeded-upgrade"); @@ -73,4 +72,25 @@ public class DebugConstants RAW_MESSAGE = DEBUG_MODE || Boolean.getBoolean("kpm.debug.raw-message"); } + + public static Logger getLogger() + { + return LOGGER; + } + + public static void debugLog(String message, boolean flag) + { + if (flag) + LOGGER.info(message); + } + + public static void debugLog(String message) + { + LOGGER.info(message); + } + + public static void onException(Exception e) + { + LOGGER.error("An exception occurred", e); + } } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/ExceptionHandler.java b/KPMCommon/src/main/java/org/kunlab/kpm/ExceptionHandler.java new file mode 100644 index 00000000..944449d7 --- /dev/null +++ b/KPMCommon/src/main/java/org/kunlab/kpm/ExceptionHandler.java @@ -0,0 +1,14 @@ +package org.kunlab.kpm; + +/** + * KPM 内部で発生した例外を全てキャッチする機能のインターフェースです。 + */ +public interface ExceptionHandler +{ + /** + * 例外をキャッチします。 + * + * @param e 例外 + */ + void report(Throwable e); +} diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/TokenStore.java b/KPMCommon/src/main/java/org/kunlab/kpm/TokenStore.java index 3d9e190c..fa4860b6 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/TokenStore.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/TokenStore.java @@ -15,7 +15,6 @@ import javax.crypto.spec.SecretKeySpec; import java.io.File; import java.io.IOException; -import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.PosixFilePermissions; @@ -33,21 +32,26 @@ public class TokenStore private static final String SALT = "TeamKunPluginManager>114514"; private static final String SECONDARY_KEY = "KPM>Origin>114514"; + private static final int ALGO_KEY_SIZE = 256; + private static final int ALGO_KEY_ITERATION = 65536; + private final Path tokenPath; private final byte[] key; + private final ExceptionHandler exceptionHandler; private final SecretKeySpec SECONDARY_KEY_SPEC; private String tokenCache; @SneakyThrows(IOException.class) - public TokenStore(@NotNull Path tokenPath, @NotNull Path keyPath) + public TokenStore(@NotNull Path tokenPath, @NotNull Path keyPath, @NotNull ExceptionHandler exceptionHandler) { if (Files.isDirectory(tokenPath) || Files.isDirectory(keyPath)) throw new IllegalArgumentException("Path must be a file"); this.tokenPath = tokenPath; this.key = this.getkey(keyPath); + this.exceptionHandler = exceptionHandler; this.SECONDARY_KEY_SPEC = getKeySpec(SECONDARY_KEY); } @@ -55,7 +59,7 @@ public TokenStore(@NotNull Path tokenPath, @NotNull Path keyPath) private static SecretKeySpec getKeySpec(String key) { SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); - KeySpec spec = new PBEKeySpec(key.toCharArray(), SALT.getBytes(), 65536, 256); + KeySpec spec = new PBEKeySpec(key.toCharArray(), SALT.getBytes(), ALGO_KEY_ITERATION, ALGO_KEY_SIZE); return new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES"); } @@ -73,7 +77,7 @@ private static void setPermission(Path path) Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rw-------")); } - private static boolean isTokenAlive(String token) + private boolean isTokenAlive(String token) { try (HTTPResponse apiResponse = Requests.request(RequestContext.builder() .url("https://api.github.com/rate_limit") @@ -85,7 +89,7 @@ private static boolean isTokenAlive(String token) } catch (IOException e) { - e.printStackTrace(); + this.exceptionHandler.report(e); return false; } } @@ -135,7 +139,7 @@ private byte[] getkey(Path keyPath) throws IOException try { KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); - keyGenerator.init(256); + keyGenerator.init(ALGO_KEY_SIZE); SecretKey key = keyGenerator.generateKey(); byte[] keyBytes = key.getEncoded(); Files.write(keyPath, keyBytes); @@ -158,7 +162,7 @@ private byte[] getkey(Path keyPath) throws IOException */ public void storeToken(String token, boolean checkLiving) throws IOException { - if (checkLiving && !isTokenAlive(token)) + if (checkLiving && !this.isTokenAlive(token)) throw new IllegalStateException("Token is not available."); byte[] tokenBytes = this.encryptToken(token); @@ -247,8 +251,7 @@ public String getToken() } catch (IOException e) { - System.out.println("Failed to load token."); - throw new UncheckedIOException(e); + this.exceptionHandler.report(e); } } return this.tokenCache; @@ -272,6 +275,6 @@ public boolean isTokenAlive() if (this.tokenCache == null) return false; - return isTokenAlive(this.tokenCache); + return this.isTokenAlive(this.tokenCache); } } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/db/ResultRow.java b/KPMCommon/src/main/java/org/kunlab/kpm/db/ResultRow.java index 08acc00f..cd8367ee 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/db/ResultRow.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/db/ResultRow.java @@ -2,6 +2,7 @@ import lombok.AllArgsConstructor; import lombok.SneakyThrows; +import org.kunlab.kpm.DebugConstants; import java.sql.Date; import java.sql.ResultSet; @@ -29,7 +30,7 @@ private void handleException() } catch (SQLException e) { - e.printStackTrace(); + DebugConstants.onException(e); } } } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/db/Transaction.java b/KPMCommon/src/main/java/org/kunlab/kpm/db/Transaction.java index 4cb26b54..f4a6dc96 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/db/Transaction.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/db/Transaction.java @@ -17,6 +17,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.List; import java.util.Spliterator; import java.util.function.Consumer; import java.util.function.Function; @@ -28,6 +29,9 @@ */ public class Transaction implements AutoCloseable { + private static final int MAX_POOL_SIZE = 20; + private static final long CONN_LEAK_DETECT_THRESHOLD = 300000L; + /** * Dbのコネクションです。 */ @@ -134,8 +138,8 @@ public static HikariDataSource createDataSource(@NotNull Path databasePath) config.setDriverClassName("org.sqlite.JDBC"); config.setJdbcUrl("jdbc:sqlite:" + databasePath); - config.setMaximumPoolSize(20); - config.setLeakDetectionThreshold(300000); + config.setMaximumPoolSize(MAX_POOL_SIZE); + config.setLeakDetectionThreshold(CONN_LEAK_DETECT_THRESHOLD); config.setAutoCommit(false); return new HikariDataSource(config); @@ -158,7 +162,7 @@ private void printCreatedOnDebug() caller = stack[i + 1]; if (!caller.getClassName().equals(this.getClass().getName())) { - System.out.println("Transaction(" + this.connection.hashCode() + + DebugConstants.debugLog("Transaction(" + this.connection.hashCode() + ") created by " + caller.getClassName() + "#" + caller.getMethodName() + " at " + caller.getFileName() + ":" + caller.getLineNumber()); break; @@ -646,8 +650,10 @@ public void close() if (!this.connection.isClosed()) this.connection.close(); - if (DebugConstants.DB_CONNECTION_TRACE) - System.out.println("Transaction(" + this.connection.hashCode() + ") is closed."); + DebugConstants.debugLog( + "Transaction(" + this.connection.hashCode() + ") is closed.", + DebugConstants.DB_CONNECTION_TRACE + ); } catch (SQLException ignored) { @@ -695,9 +701,8 @@ public boolean tryAdvance(Consumer action) { this.result.getStatement().getConnection().close(); } - catch (SQLException e1) + catch (SQLException ignored) { - e1.printStackTrace(); } } throw new IllegalStateException(e); @@ -759,9 +764,9 @@ public void close() throws SQLException * @param max 最大件数 * @return 変換されたList */ - public ArrayList mapToList(Function resultMapper, long max) + public List mapToList(Function resultMapper, long max) { - ArrayList list = new ArrayList<>(); + List list = new ArrayList<>(); try { @@ -782,7 +787,7 @@ public ArrayList mapToList(Function resultMapper, long max) * @param resultMapper マッピング関数 * @return 変換されたList */ - public ArrayList mapToList(Function resultMapper) + public List mapToList(Function resultMapper) { return this.mapToList(resultMapper, -1); } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/http/HTTPResponse.java b/KPMCommon/src/main/java/org/kunlab/kpm/http/HTTPResponse.java index 717aa490..8aa4d174 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/http/HTTPResponse.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/http/HTTPResponse.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.UncheckedIOException; import java.util.HashMap; /** @@ -39,7 +40,7 @@ public class HTTPResponse implements AutoCloseable /** * HTTP ステータスコードです。 */ - private final int statusCode; + private final StatusCode statusCode; /** * HTTP ヘッダーです。 @@ -64,7 +65,9 @@ public class HTTPResponse implements AutoCloseable */ public static HTTPResponse error(@NotNull RequestContext request, @NotNull RequestStatus status) { - return new HTTPResponse(status, request, null, null, -1, null, null); + return new HTTPResponse(status, request, null, null, + StatusCode.UNKNOWN, null, null + ); } /** @@ -81,16 +84,16 @@ else if (this.bodyCache != null) StringBuilder sb = new StringBuilder(); - byte[] buffer = new byte[1024]; + byte[] buffer = new byte[Requests.HTTP_BUFFER_SIZE]; int len; try { while ((len = this.inputStream.read(buffer)) != -1) sb.append(new String(buffer, 0, len)); } - catch (Exception e) + catch (IOException e) { - e.printStackTrace(); + throw new UncheckedIOException(e); } this.bodyCache = sb.toString(); @@ -159,7 +162,7 @@ public String getHeader(@NotNull String header) */ public boolean isSuccessful() { - return this.statusCode >= 200 && this.statusCode < 300; + return this.statusCode.isSuccess(); } /** @@ -169,7 +172,7 @@ public boolean isSuccessful() */ public boolean isRedirect() { - return this.statusCode >= 300 && this.statusCode < 400; + return this.statusCode.isRedirect(); } /** @@ -179,7 +182,7 @@ public boolean isRedirect() */ public boolean isClientError() { - return this.statusCode >= 400 && this.statusCode < 500; + return this.statusCode.isClientError(); } /** @@ -189,7 +192,7 @@ public boolean isClientError() */ public boolean isServerError() { - return this.statusCode >= 500 && this.statusCode < 600; + return this.statusCode.isServerError(); } /** @@ -211,7 +214,7 @@ public boolean isError() */ public boolean isOK() { - return this.statusCode == 200; + return this.statusCode == StatusCode.OK; } /** diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/http/Requests.java b/KPMCommon/src/main/java/org/kunlab/kpm/http/Requests.java index 98513675..0efb54ca 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/http/Requests.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/http/Requests.java @@ -31,18 +31,22 @@ @UtilityClass public class Requests { - @Setter - private static TokenStore tokenStore; + + static final int HTTP_BUFFER_SIZE = 1024; + private static final int REDIRECT_LIMIT_DEFAULT = 15; + private static final int CONNECT_TIMEOUT_DEFAULT = 10000; + @Getter @NotNull - private static Map extraHeaders; - + private static final Map extraHeaders; + @Setter + private static TokenStore tokenStore; @Getter @Setter - private static int redirectLimit = 15; + private static int redirectLimit = REDIRECT_LIMIT_DEFAULT; @Getter @Setter - private static int connectTimeout = 10000; + private static int connectTimeout = CONNECT_TIMEOUT_DEFAULT; static { @@ -63,8 +67,10 @@ private static HTTPResponse doRedirect(HTTPResponse response, int redirectCount) if (redirectCount > redirectLimit) return HTTPResponse.error(request, HTTPResponse.RequestStatus.REDIRECT_LIMIT_EXCEED); - if (DebugConstants.HTTP_REDIRECT_TRACE) - System.out.println("Redirecting from " + request.getUrl() + " to " + location + " (count: " + redirectCount + ")"); + DebugConstants.debugLog( + "Redirecting from " + request.getUrl() + " to " + location + " (count: " + redirectCount + ")", + DebugConstants.HTTP_REDIRECT_TRACE + ); HTTPResponse newResponse = request(RequestContext.builder() .cacheable(request.isCacheable()) @@ -82,7 +88,7 @@ private static HTTPResponse doRedirect(HTTPResponse response, int redirectCount) @NotNull private static Map setupDefaultHeaders(@NotNull String host, @NotNull Map currentHeaders) { - HashMap headers = new HashMap<>(); + Map headers = new HashMap<>(); if (host.equalsIgnoreCase("github.com") || StringUtils.endsWithIgnoreCase(host, ".github.com") || @@ -119,13 +125,16 @@ public static HTTPResponse request(@NotNull RequestContext context) if (context.getUrl() == null) throw new IllegalArgumentException("URL is null"); - if (DebugConstants.HTTP_REQUEST_TRACE) - { - System.out.println("Requesting " + context.getMethod() + " " + context.getUrl()); - System.out.println("Headers:" + context.getExtraHeaders().entrySet().stream() - .map(e -> e.getKey() + ": " + e.getValue()) - .collect(Collectors.joining(", "))); - } + DebugConstants.debugLog( + "Requesting " + context.getMethod() + " " + context.getUrl(), + DebugConstants.HTTP_REQUEST_TRACE + ); + DebugConstants.debugLog( + "Headers:" + context.getExtraHeaders().entrySet().stream() + .map(e -> e.getKey() + ": " + e.getValue()) + .collect(Collectors.joining(", ")), + DebugConstants.HTTP_REQUEST_TRACE + ); try { @@ -138,30 +147,32 @@ public static HTTPResponse request(@NotNull RequestContext context) outputStream.write(context.getBody()); } - int responseCode = connection.getResponseCode(); + StatusCode responseCode = StatusCode.valueOf(connection.getResponseCode()); HashMap serverHeaders = buildHeaders(connection.getHeaderFields()); Pair serverProtocol = retrieveProtocol(serverHeaders); // serverHeaders will be modified in this method HTTPResponse.RequestStatus status = HTTPResponse.RequestStatus.OK; - if (responseCode >= 500) + if (responseCode.isServerError()) status = HTTPResponse.RequestStatus.SERVER_ERROR; - else if (responseCode >= 400) + else if (responseCode.isClientError()) status = HTTPResponse.RequestStatus.CLIENT_ERROR; HTTPResponse response = new HTTPResponse(status, context, serverProtocol.getLeft(), serverProtocol.getRight(), responseCode, serverHeaders, - responseCode >= 400 ? connection.getErrorStream(): connection.getInputStream() + responseCode.isError() ? connection.getErrorStream(): connection.getInputStream() ); - if (DebugConstants.HTTP_REQUEST_TRACE) - { - System.out.println("Response from " + context.getUrl() + ": " + responseCode + " " + response.getStatus()); - System.out.println("Headers:" + response.getHeaders().entrySet().stream() - .map(e -> e.getKey() + ": " + e.getValue()) - .collect(Collectors.joining(", "))); - - } + DebugConstants.debugLog( + "Response from " + context.getUrl() + ": " + responseCode.getCode() + " " + response.getStatus(), + DebugConstants.HTTP_REQUEST_TRACE + ); + DebugConstants.debugLog( + "Headers:" + response.getHeaders().entrySet().stream() + .map(e -> e.getKey() + ": " + e.getValue()) + .collect(Collectors.joining(", ")), + DebugConstants.HTTP_REQUEST_TRACE + ); if (context.isFollowRedirects()) return doRedirect(response, 0); @@ -190,7 +201,7 @@ private static HttpURLConnection createConnection(RequestContext context) throws connection.setInstanceFollowRedirects(false); connection.setRequestMethod(context.getMethod().name()); connection.setUseCaches(false); - connection.setConnectTimeout(10000); + connection.setConnectTimeout(connectTimeout); if (context.getTimeout() > 0) connection.setReadTimeout(context.getTimeout()); @@ -206,7 +217,7 @@ private static HttpURLConnection createConnection(RequestContext context) throws return connection; } - private static HashMap buildHeaders(Map> originalHeaders) + private static HashMap buildHeaders(Map> originalHeaders) { return originalHeaders.entrySet().stream().parallel() .map(stringListEntry -> Pair.of( @@ -250,7 +261,7 @@ private static Pair retrieveProtocol(Map serverH * @throws IOException ダウンロードに失敗した場合 */ public static long downloadFile(@NotNull RequestMethod method, @NotNull String url, - @NotNull Path path, @Nullable Consumer onProgress) throws IOException + @NotNull Path path, @Nullable Consumer onProgress) throws IOException { RequestContext.RequestContextBuilder context = RequestContext.builder() .url(url) @@ -263,7 +274,7 @@ public static long downloadFile(@NotNull RequestMethod method, @NotNull String u try (HTTPResponse response = request(context.build()); OutputStream output = Files.newOutputStream(path)) { - if (response.getStatusCode() < 200 || response.getStatusCode() >= 300) + if (response.getStatusCode().isError()) throw new IOException("HTTP error " + response.getStatusCode()); else if (response.getInputStream() == null) throw new IOException("No response body was returned"); @@ -273,7 +284,7 @@ else if (response.getInputStream() == null) long size = contentLength != null ? Long.parseLong(contentLength): -1; - byte[] buffer = new byte[1024]; + byte[] buffer = new byte[HTTP_BUFFER_SIZE]; int read; long downloaded = 0; @@ -287,7 +298,7 @@ else if (response.getInputStream() == null) int progress; if (downloaded != 0 && size != 0) - progress = (int) (downloaded * 100 / size); + progress = Math.toIntExact(downloaded * 100 / size); else progress = 0; diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/http/StatusCode.java b/KPMCommon/src/main/java/org/kunlab/kpm/http/StatusCode.java new file mode 100644 index 00000000..3a8c8941 --- /dev/null +++ b/KPMCommon/src/main/java/org/kunlab/kpm/http/StatusCode.java @@ -0,0 +1,197 @@ +package org.kunlab.kpm.http; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * HTTP ステータスコードの列挙です。 + */ +@AllArgsConstructor +@Getter +public enum StatusCode +{ + // Internal + UNKNOWN(-1, "Unknown"), + + // 1xx(Informational): リクエストを受け付けました。 + RANGE_INFORMATIONAL_BEGIN(100, "Informational"), + + CONTINUE(100, "Continue"), + SWITCHING_PROTOCOLS(101, "Switching Protocols"), + PROCESSING(102, "Processing"), + EARLY_HINTS(103, "Early Hints"), + + RANGE_INFORMATIONAL_END(199, "Informational"), + + // 2xx(Success): リクエストは正常に処理されました。 + RANGE_SUCCESS_BEGIN(200, "Success"), + + OK(200, "OK"), + CREATED(201, "Created"), + ACCEPTED(202, "Accepted"), + NON_AUTHORITATIVE_INFORMATION(203, "Non-Authoritative Information"), + NO_CONTENT(204, "No Content"), + RESET_CONTENT(205, "Reset Content"), + PARTIAL_CONTENT(206, "Partial Content"), + MULTI_STATUS(207, "Multi-Status"), + ALREADY_REPORTED(208, "Already Reported"), + // Missing 209 -> 225 + IM_USED(226, "IM Used"), + + RANGE_SUCCESS_END(299, "Success"), + + // 3xx(Redirection): リクエストを完了するには追加のアクションが必要です。 + RANGE_REDIRECTION_BEGIN(300, "Redirection"), + + MULTIPLE_CHOICES(300, "Multiple Choices"), + MOVED_PERMANENTLY(301, "Moved Permanently"), + FOUND(302, "Found"), + SEE_OTHER(303, "See Other"), + NOT_MODIFIED(304, "Not Modified"), + USE_PROXY(305, "Use Proxy"), + // Missing 306 + TEMPORARY_REDIRECT(307, "Temporary Redirect"), + PERMANENT_REDIRECT(308, "Permanent Redirect"), + + RANGE_REDIRECTION_END(399, "Redirection"), + + // 4xx(Client Error): リクエストに問題があります。 + RANGE_CLIENT_ERROR_BEGIN(400, "Client Error"), + + BAD_REQUEST(400, "Bad Request"), + UNAUTHORIZED(401, "Unauthorized"), + PAYMENT_REQUIRED(402, "Payment Required"), + FORBIDDEN(403, "Forbidden"), + NOT_FOUND(404, "Not Found"), + METHOD_NOT_ALLOWED(405, "Method Not Allowed"), + NOT_ACCEPTABLE(406, "Not Acceptable"), + PROXY_AUTHENTICATION_REQUIRED(407, "Proxy Authentication Required"), + REQUEST_TIMEOUT(408, "Request Timeout"), + CONFLICT(409, "Conflict"), + GONE(410, "Gone"), + LENGTH_REQUIRED(411, "Length Required"), + PRECONDITION_FAILED(412, "Precondition Failed"), + PAYLOAD_TOO_LARGE(413, "Payload Too Large"), + URI_TOO_LONG(414, "URI Too Long"), + UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"), + RANGE_NOT_SATISFIABLE(416, "Range Not Satisfiable"), + EXPECTATION_FAILED(417, "Expectation Failed"), + I_AM_A_TEAPOT(418, "I'm a teapot"), + // Missing 419 -> 420 + MISDIRECTED_REQUEST(421, "Misdirected Request"), + UNPROCESSABLE_ENTITY(422, "Unprocessable Entity"), + LOCKED(423, "Locked"), + FAILED_DEPENDENCY(424, "Failed Dependency"), + TOO_EARLY(425, "Too Early"), + UPGRADE_REQUIRED(426, "Upgrade Required"), + // Missing 427 + PRECONDITION_REQUIRED(428, "Precondition Required"), + TOO_MANY_REQUESTS(429, "Too Many Requests"), + // Missing 430 + REQUEST_HEADER_FIELDS_TOO_LARGE(431, "Request Header Fields Too Large"), + // Missing 432 -> 450 + UNAVAILABLE_FOR_LEGAL_REASONS(451, "Unavailable For Legal Reasons"), + + RANGE_CLIENT_ERROR_END(499, "Client Error"), + + // 5xx(Server Error): サーバに問題があります。 + RANGE_SERVER_ERROR_BEGIN(500, "Server Error"), + INTERNAL_SERVER_ERROR(500, "Internal Server Error"), + NOT_IMPLEMENTED(501, "Not Implemented"), + BAD_GATEWAY(502, "Bad Gateway"), + SERVICE_UNAVAILABLE(503, "Service Unavailable"), + GATEWAY_TIMEOUT(504, "Gateway Timeout"), + HTTP_VERSION_NOT_SUPPORTED(505, "HTTP Version Not Supported"), + VARIANT_ALSO_NEGOTIATES(506, "Variant Also Negotiates"), + INSUFFICIENT_STORAGE(507, "Insufficient Storage"), + LOOP_DETECTED(508, "Loop Detected"), + // Missing 509 + NOT_EXTENDED(510, "Not Extended"), + NETWORK_AUTHENTICATION_REQUIRED(511, "Network Authentication Required"), + + RANGE_SERVER_ERROR_END(599, "Server Error"); + + private final int code; + private final String message; + + private static boolean isInRange(int code, StatusCode min, StatusCode max) + { + return min.code <= code && code <= max.code; + } + + /** + * レスポンスコードに対応する {@link StatusCode} を返します。 + */ + public static StatusCode valueOf(int code) + { + return Arrays.stream(values()).parallel() + .filter(v -> v.code == code) + .findFirst() + .orElse(UNKNOWN); + } + + /** + * OK かどうかを判定します。 + */ + public boolean isOK() + { + return this == OK; + } + + /** + * 1xx(Informational) かどうかを判定します。 + */ + public boolean isInformational() + { + return isInRange(this.code, RANGE_INFORMATIONAL_BEGIN, RANGE_INFORMATIONAL_END); + } + + /** + * 成功レスポンスかどうかを判定します。 + */ + public boolean isSuccess() + { + return isInRange(this.code, RANGE_SUCCESS_BEGIN, RANGE_SUCCESS_END); + } + + /** + * リダイレクトレスポンスかどうかを判定します。 + */ + public boolean isRedirect() + { + return isInRange(this.code, RANGE_REDIRECTION_BEGIN, RANGE_REDIRECTION_END); + } + + /** + * クライアントエラーレスポンスかどうかを判定します。 + */ + public boolean isClientError() + { + return isInRange(this.code, RANGE_CLIENT_ERROR_BEGIN, RANGE_CLIENT_ERROR_END); + } + + /** + * サーバエラーレスポンスかどうかを判定します。 + */ + public boolean isServerError() + { + return isInRange(this.code, RANGE_SERVER_ERROR_BEGIN, RANGE_SERVER_ERROR_END); + } + + /** + * エラーレスポンスかどうかを判定します。 + * レスポンスが不明の場合もエラーレスポンスとみなします。 + */ + public boolean isError() + { + return this.isClientError() || this.isServerError() || this == UNKNOWN; + } + + @Override + public String toString() + { + return this.code + " " + this.message; + } +} diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandleManager.java b/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandleManager.java index cecf70e3..67f4aa8c 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandleManager.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandleManager.java @@ -16,7 +16,7 @@ */ public class SignalHandleManager { - private final ArrayList> handlerLists; + private final List> handlerLists; public SignalHandleManager() { diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandlerList.java b/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandlerList.java index 341bea6a..0a933c96 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandlerList.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandlerList.java @@ -3,6 +3,7 @@ import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.kunlab.kpm.DebugConstants; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -63,8 +64,9 @@ void onSignal(T signal) } catch (Exception e) { - System.out.println("Target: " + pair.getRight().getDeclaringClass().getName() + "#" + pair.getRight().getName()); - e.printStackTrace(); + DebugConstants.debugLog("Target: " + pair.getRight().getDeclaringClass().getName() + + "#" + pair.getRight().getName()); + DebugConstants.onException(e); } }); } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/utils/KPMCollectors.java b/KPMCommon/src/main/java/org/kunlab/kpm/utils/KPMCollectors.java index b02155e6..03094a8b 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/utils/KPMCollectors.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/utils/KPMCollectors.java @@ -1,112 +1,39 @@ package org.kunlab.kpm.utils; -import lombok.AllArgsConstructor; -import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; +import lombok.experimental.UtilityClass; +import org.kunlab.kpm.utils.collectors.MappingMapElementCollector; +import org.kunlab.kpm.utils.collectors.MappingPairCollector; +import org.kunlab.kpm.utils.collectors.ReversingCollector; -import java.util.ArrayList; -import java.util.EnumSet; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.function.BiConsumer; -import java.util.function.BinaryOperator; -import java.util.function.Function; import java.util.function.Supplier; -import java.util.stream.Collector; +@UtilityClass public class KPMCollectors { - public static ReversedCollector toReversedList() + public static ReversingCollector toReversedList() { - return new ReversedCollector<>(); + return new ReversingCollector<>(); } - public static > PairMapper toPairMap(Supplier mapSupplier) + public static > MappingPairCollector toPairMap(Supplier mapSupplier) { - return new PairMapper<>(mapSupplier); + return new MappingPairCollector<>(mapSupplier); } - public static PairMapper> toPairHashMap() + public static MappingPairCollector> toPairHashMap() { - return new PairMapper<>(HashMap::new); + return new MappingPairCollector<>(HashMap::new); } - private static class ReversedCollector implements Collector, List> + public static > MappingMapElementCollector toMap(Supplier mapSupplier) { - @Override - public Supplier> supplier() - { - return ArrayList::new; - } - - @Override - public BiConsumer, T> accumulator() - { - return (list, t) -> list.add(0, t); - } - - @Override - public BinaryOperator> combiner() - { - return (list1, list2) -> - { - list1.addAll(0, list2); - return list1; - }; - } - - @Override - public Function, List> finisher() - { - return list -> list; - } - - @Override - public Set characteristics() - { - return EnumSet.of(Characteristics.CONCURRENT); - } + return new MappingMapElementCollector<>(mapSupplier); } - // pair to hashmap - @AllArgsConstructor - private static class PairMapper> implements Collector, M, M> + public static MappingMapElementCollector> toHashMap() { - private final Supplier supplier; - - @Override - public Supplier supplier() - { - return this.supplier; - } - - @Override - public BiConsumer> accumulator() - { - return (map, pair) -> map.put(pair.getLeft(), pair.getRight()); - } - - @Override - public BinaryOperator combiner() - { - return (map1, map2) -> - { - map1.putAll(map2); - return map1; - }; - } - - @Override - public Function finisher() - { - return map -> map; - } - - @Override - public Set characteristics() - { - return EnumSet.of(Characteristics.CONCURRENT); - } + return new MappingMapElementCollector<>(HashMap::new); } } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/utils/PluginUtil.java b/KPMCommon/src/main/java/org/kunlab/kpm/utils/PluginUtil.java index 8a42dc8f..b8ab6fd2 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/utils/PluginUtil.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/utils/PluginUtil.java @@ -62,7 +62,6 @@ public static File getFile(Plugin plugin) } catch (IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); throw new IllegalStateException(e); } } @@ -74,13 +73,10 @@ public static PluginDescriptionFile loadDescription(File file) throws InvalidDes try (ZipFile zip = new ZipFile(file)) { - ZipEntry entry = null; - for (ZipEntry ent : Collections.list(zip.entries())) - if (ent.getName().equals("plugin.yml")) - { - entry = ent; - break; - } + ZipEntry entry = Collections.list(zip.entries()).stream() + .filter(ent -> ent.getName().equals("plugin.yml")) + .findFirst() + .orElse(null); if (entry == null) throw new InvalidDescriptionException("This file isn't plugin."); diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/utils/ServerConditionChecker.java b/KPMCommon/src/main/java/org/kunlab/kpm/utils/ServerConditionChecker.java index 85b2886b..f8d6f442 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/utils/ServerConditionChecker.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/utils/ServerConditionChecker.java @@ -44,7 +44,6 @@ public boolean isStopping() } catch (IllegalAccessException e) { - e.printStackTrace(); return false; } } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/MappingMapElementCollector.java b/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/MappingMapElementCollector.java new file mode 100644 index 00000000..a7af2df1 --- /dev/null +++ b/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/MappingMapElementCollector.java @@ -0,0 +1,52 @@ +package org.kunlab.kpm.utils.collectors; + +import lombok.AllArgsConstructor; + +import java.util.EnumSet; +import java.util.Map; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; + +@AllArgsConstructor +public class MappingMapElementCollector> implements Collector, M, M> +{ + private final Supplier supplier; + + @Override + public Supplier supplier() + { + return this.supplier; + } + + @Override + public BiConsumer> accumulator() + { + return (map, pair) -> map.put(pair.getKey(), pair.getValue()); + } + + @Override + public BinaryOperator combiner() + { + return (map1, map2) -> + { + map1.putAll(map2); + return map1; + }; + } + + @Override + public Function finisher() + { + return map -> map; + } + + @Override + public Set characteristics() + { + return EnumSet.of(Characteristics.CONCURRENT); + } +} diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/MappingPairCollector.java b/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/MappingPairCollector.java new file mode 100644 index 00000000..719cdf31 --- /dev/null +++ b/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/MappingPairCollector.java @@ -0,0 +1,53 @@ +package org.kunlab.kpm.utils.collectors; + +import lombok.AllArgsConstructor; +import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; + +import java.util.EnumSet; +import java.util.Map; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; + +@AllArgsConstructor +public class MappingPairCollector> implements Collector, M, M> +{ + private final Supplier supplier; + + @Override + public Supplier supplier() + { + return this.supplier; + } + + @Override + public BiConsumer> accumulator() + { + return (map, pair) -> map.put(pair.getLeft(), pair.getRight()); + } + + @Override + public BinaryOperator combiner() + { + return (map1, map2) -> + { + map1.putAll(map2); + return map1; + }; + } + + @Override + public Function finisher() + { + return map -> map; + } + + @Override + public Set characteristics() + { + return EnumSet.of(Characteristics.CONCURRENT); + } +} diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/ReversingCollector.java b/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/ReversingCollector.java new file mode 100644 index 00000000..57d26f02 --- /dev/null +++ b/KPMCommon/src/main/java/org/kunlab/kpm/utils/collectors/ReversingCollector.java @@ -0,0 +1,48 @@ +package org.kunlab.kpm.utils.collectors; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; + +public class ReversingCollector implements Collector, List> +{ + @Override + public Supplier> supplier() + { + return ArrayList::new; + } + + @Override + public BiConsumer, T> accumulator() + { + return (list, t) -> list.add(0, t); + } + + @Override + public BinaryOperator> combiner() + { + return (list1, list2) -> + { + list1.addAll(0, list2); + return list1; + }; + } + + @Override + public Function, List> finisher() + { + return list -> list; + } + + @Override + public Set characteristics() + { + return EnumSet.of(Characteristics.CONCURRENT); + } +} diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/versioning/Version.java b/KPMCommon/src/main/java/org/kunlab/kpm/versioning/Version.java index 8da5f0a8..b8304b8c 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/versioning/Version.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/versioning/Version.java @@ -7,6 +7,7 @@ import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -22,7 +23,7 @@ public class Version implements Comparable "^v?" + "(?0|[1-9]\\d*)" + "\\.(?0|[1-9]\\d*)" + - "(?:\\.(?0|[1-9]\\d*))" + + "(?:\\.(?0|[1-9]\\d*))?" + "(?:-(?(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?" + "(?:\\+(?[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"); } @@ -174,4 +175,10 @@ else if (o.buildMetadata == null) return 0; } + + @Override + public int hashCode() + { + return Objects.hash(this.rawVersion, this.major, this.minor, this.patch, this.preRelease, this.buildMetadata); + } } diff --git a/KPMCommon/src/main/java/org/kunlab/kpm/versioning/VersionElement.java b/KPMCommon/src/main/java/org/kunlab/kpm/versioning/VersionElement.java index 33bcc659..7ac8dff3 100644 --- a/KPMCommon/src/main/java/org/kunlab/kpm/versioning/VersionElement.java +++ b/KPMCommon/src/main/java/org/kunlab/kpm/versioning/VersionElement.java @@ -5,6 +5,7 @@ import javax.annotation.Nonnull; import java.util.Locale; +import java.util.Objects; /** * バージョンの要素を表すクラスです。 @@ -74,4 +75,21 @@ public String toString() { return this.rawValue; } + + @Override + public boolean equals(Object o) + { + if (this == o) + return true; + if (!(o instanceof VersionElement)) + return false; + VersionElement that = (VersionElement) o; + return this.intValue == that.intValue && this.rawValue.equals(that.rawValue); + } + + @Override + public int hashCode() + { + return Objects.hash(this.rawValue, this.intValue); + } } diff --git a/KPMDaemon/pom.xml b/KPMDaemon/pom.xml index f881be0f..7c7c87d4 100644 --- a/KPMDaemon/pom.xml +++ b/KPMDaemon/pom.xml @@ -5,7 +5,7 @@ TeamKunPluginManager org.kunlab.kpm - 3.0.0 + 3.0.1 ../pom.xml 4.0.0 @@ -52,7 +52,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.4.1 + 3.5.0 true ${project.basedir}/docs @@ -111,55 +111,55 @@ org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMResolver - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMAlias - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMMeta - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMHooks - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMInfo - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMPluginInstaller - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMTasks - 3.0.0 + 3.0.1 compile diff --git a/KPMDaemon/src/main/java/org/kunlab/kpm/BasicExceptionHandler.java b/KPMDaemon/src/main/java/org/kunlab/kpm/BasicExceptionHandler.java new file mode 100644 index 00000000..98213f66 --- /dev/null +++ b/KPMDaemon/src/main/java/org/kunlab/kpm/BasicExceptionHandler.java @@ -0,0 +1,18 @@ +package org.kunlab.kpm; + +import lombok.AllArgsConstructor; + +import java.util.logging.Level; +import java.util.logging.Logger; + +@AllArgsConstructor +public class BasicExceptionHandler implements ExceptionHandler +{ + private final Logger logger; + + @Override + public void report(Throwable e) + { + this.logger.log(Level.WARNING, "An exception has occurred while operating KPMDaemon.", e); + } +} diff --git a/KPMDaemon/src/main/java/org/kunlab/kpm/KPMDaemon.java b/KPMDaemon/src/main/java/org/kunlab/kpm/KPMDaemon.java index d61a8947..261cb2c0 100644 --- a/KPMDaemon/src/main/java/org/kunlab/kpm/KPMDaemon.java +++ b/KPMDaemon/src/main/java/org/kunlab/kpm/KPMDaemon.java @@ -16,7 +16,6 @@ import org.kunlab.kpm.interfaces.KPMEnvironment; import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.kpminfo.KPMInfoManagerImpl; -import org.kunlab.kpm.kpminfo.KPMInformationFile; import org.kunlab.kpm.kpminfo.interfaces.KPMInfoManager; import org.kunlab.kpm.meta.PluginMetaManagerImpl; import org.kunlab.kpm.meta.interfaces.PluginMetaManager; @@ -29,12 +28,14 @@ import org.kunlab.kpm.resolver.impl.github.GitHubURLResolver; import org.kunlab.kpm.resolver.impl.github.OmittedGitHubResolver; import org.kunlab.kpm.resolver.interfaces.PluginResolver; -import org.kunlab.kpm.task.PluginLoaderImpl; +import org.kunlab.kpm.task.loader.PluginLoaderImpl; import org.kunlab.kpm.utils.ServerConditionChecker; import org.kunlab.kpm.versioning.Version; import java.io.IOException; +import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.logging.Level; import java.util.logging.Logger; @@ -45,6 +46,7 @@ public class KPMDaemon implements KPMRegistry { private final Logger logger; + private final ExceptionHandler exceptionHandler; private final KPMEnvironment environment; private final AliasProvider aliasProvider; private final PluginMetaManager pluginMetaManager; @@ -60,6 +62,8 @@ public KPMDaemon(@NotNull KPMEnvironment env) { this.logger = env.getLogger(); this.environment = env; + this.exceptionHandler = env.getExceptionHandler(); + this.pluginMetaManager = new PluginMetaManagerImpl( this, env.getMetadataDBPath(), @@ -68,7 +72,7 @@ public KPMDaemon(@NotNull KPMEnvironment env) this.aliasProvider = new AliasProviderImpl(env.getAliasesDBPath()); this.kpmInfoManager = new KPMInfoManagerImpl(this); this.hookExecutor = new HookExecutorImpl(this); - this.tokenStore = new TokenStore(env.getTokenPath(), env.getTokenKeyPath()); + this.tokenStore = new TokenStore(env.getTokenPath(), env.getTokenKeyPath(), this.exceptionHandler); this.installManager = new InstallManagerImpl(this.tokenStore); this.pluginLoader = new PluginLoaderImpl(this); this.pluginResolver = new PluginResolverImpl(); @@ -84,9 +88,8 @@ public void setupDaemon(@NotNull List organizationNames) this.initializeRequests(); this.loadKPMInformationFromPlugins(); - Runner.runLater(() -> { - this.getPluginMetaManager().crawlAll(); - }, 1L); // Crawl all plugins metadata after the server is fully loaded. + // サーバが全て読み込まれた後にプラグインをクロールする。 + Runner.runLater(() -> this.getPluginMetaManager().crawlAll(), 1L); } private void loadKPMInformationFromPlugins() @@ -98,13 +101,10 @@ private void loadKPMInformationFromPlugins() KPMInfoManager kpmInfoManager = this.getKpmInfoManager(); Plugin[] plugins = Bukkit.getPluginManager().getPlugins(); - int loaded = 0; - for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) - { - KPMInformationFile info = kpmInfoManager.getOrLoadInfo(plugin); - if (info != null) - loaded++; - } + long loaded = Arrays.stream(Bukkit.getPluginManager().getPlugins()).parallel() + .map(kpmInfoManager::getOrLoadInfo) + .filter(Objects::nonNull) + .count(); this.logger.log(Level.INFO, "Loaded {0} KPM information from {1} plugins.", new Object[]{loaded, plugins.length}); }, 1L); @@ -142,7 +142,7 @@ private void setupToken() } catch (IOException e) { - e.printStackTrace(); + this.getExceptionHandler().report(e); this.logger.log(Level.WARNING, "Failed to load token."); } @@ -175,6 +175,4 @@ public Version getVersion() { return Version.of(this.getEnvironment().getPlugin().getDescription().getVersion()); } - - } diff --git a/KPMDaemon/src/main/java/org/kunlab/kpm/KPMEnvironmentImpl.java b/KPMDaemon/src/main/java/org/kunlab/kpm/KPMEnvironmentImpl.java index 01c86c4b..45b60c7e 100644 --- a/KPMDaemon/src/main/java/org/kunlab/kpm/KPMEnvironmentImpl.java +++ b/KPMDaemon/src/main/java/org/kunlab/kpm/KPMEnvironmentImpl.java @@ -56,6 +56,9 @@ public class KPMEnvironmentImpl implements KPMEnvironment private final int HTTPTimeout; private final int HTTPMaxRedirects; + @NotNull + private final ExceptionHandler exceptionHandler; + public static KPMEnvironmentImplBuilder builder(@NotNull Plugin plugin, @NotNull Logger logger, @NotNull Path dataDirPath) { return new KPMEnvironmentImplBuilder() @@ -63,7 +66,8 @@ public static KPMEnvironmentImplBuilder builder(@NotNull Plugin plugin, @NotNull .logger(logger) .dataDirPath(dataDirPath) .excludePlugin("TeamKunPluginManager") - .excludePlugin("bStats"); + .excludePlugin("bStats") + .exceptionHandler(new BasicExceptionHandler(logger)); } public static KPMEnvironmentImplBuilder builder(@NotNull Plugin plugin) diff --git a/KPMHooks/pom.xml b/KPMHooks/pom.xml index 7a4d9b75..7ca60d86 100644 --- a/KPMHooks/pom.xml +++ b/KPMHooks/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -22,13 +22,13 @@ org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 compile org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided diff --git a/KPMHooks/src/main/java/org/kunlab/kpm/hook/HookExecutorImpl.java b/KPMHooks/src/main/java/org/kunlab/kpm/hook/HookExecutorImpl.java index 38ab956c..8a62e4f5 100644 --- a/KPMHooks/src/main/java/org/kunlab/kpm/hook/HookExecutorImpl.java +++ b/KPMHooks/src/main/java/org/kunlab/kpm/hook/HookExecutorImpl.java @@ -33,7 +33,7 @@ public void runHook(KPMHookRecipient recipient, KPMHook hook) } catch (Exception e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); } } diff --git a/KPMHooks/src/main/java/org/kunlab/kpm/hook/hooks/RecipesUnregisteringHook.java b/KPMHooks/src/main/java/org/kunlab/kpm/hook/hooks/RecipesUnregisteringHook.java index fcdec8a4..f7d8032a 100644 --- a/KPMHooks/src/main/java/org/kunlab/kpm/hook/hooks/RecipesUnregisteringHook.java +++ b/KPMHooks/src/main/java/org/kunlab/kpm/hook/hooks/RecipesUnregisteringHook.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.hook.interfaces.KPMHook; -import java.util.ArrayList; +import java.util.List; /** * プラグインのレシピが削除されるときに呼び出されるフックです。 @@ -25,7 +25,7 @@ public static class Searching extends RecipesUnregisteringHook * 削除対象の名前空間です。 */ @NotNull - ArrayList targetNamespaces; + List targetNamespaces; /** * 名前空間を追加します。 diff --git a/KPMInfo/pom.xml b/KPMInfo/pom.xml index 04b8819e..ec0be24c 100644 --- a/KPMInfo/pom.xml +++ b/KPMInfo/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -22,19 +22,19 @@ org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMHooks - 3.0.0 + 3.0.1 provided diff --git a/KPMInfo/src/main/java/org/kunlab/kpm/kpminfo/KPMInfoManagerImpl.java b/KPMInfo/src/main/java/org/kunlab/kpm/kpminfo/KPMInfoManagerImpl.java index 3a90aff9..05455798 100644 --- a/KPMInfo/src/main/java/org/kunlab/kpm/kpminfo/KPMInfoManagerImpl.java +++ b/KPMInfo/src/main/java/org/kunlab/kpm/kpminfo/KPMInfoManagerImpl.java @@ -11,12 +11,13 @@ import java.io.FileNotFoundException; import java.nio.file.Path; import java.util.HashMap; +import java.util.Map; import java.util.zip.ZipFile; public class KPMInfoManagerImpl implements KPMInfoManager { private final KPMRegistry registry; - private final HashMap lookupNames; + private final Map lookupNames; public KPMInfoManagerImpl(KPMRegistry registry) { @@ -69,7 +70,7 @@ public KPMInformationFile getOrLoadInfo(@NotNull Plugin plugin) } catch (FileNotFoundException | InvalidInformationFileException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); return null; } } diff --git a/KPMMeta/pom.xml b/KPMMeta/pom.xml index a3b0b031..df3be1d0 100644 --- a/KPMMeta/pom.xml +++ b/KPMMeta/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -22,19 +22,19 @@ org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMResolver - 3.0.0 + 3.0.1 provided diff --git a/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaManagerImpl.java b/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaManagerImpl.java index 6b4fc17f..622754b1 100644 --- a/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaManagerImpl.java +++ b/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaManagerImpl.java @@ -48,8 +48,10 @@ public void preparePluginModify(@NotNull String pluginName) { if (!this.exceptedPluginModifications.contains(pluginName)) { - if (DebugConstants.PLUGIN_META_OPERATION_TRACE) - System.out.println("The plugin " + pluginName + " is will be modified."); + DebugConstants.debugLog( + "The plugin " + pluginName + " is will be modified.", + DebugConstants.PLUGIN_META_OPERATION_TRACE + ); this.exceptedPluginModifications.add(pluginName); } @@ -153,7 +155,7 @@ public void crawlAll() this.crawlAddedPlugins(plugins); } - private void crawlRemovedPlugins(List plugins) + private void crawlRemovedPlugins(List plugins) { List pluginNames = plugins.stream().parallel() .map(Plugin::getName) @@ -178,7 +180,7 @@ private void crawlRemovedPlugins(List plugins) } } - private void crawlAddedPlugins(List plugins) + private void crawlAddedPlugins(List plugins) { for (Plugin plugin : plugins) { diff --git a/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaProviderImpl.java b/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaProviderImpl.java index b719ab2f..fa35552c 100644 --- a/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaProviderImpl.java +++ b/KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaProviderImpl.java @@ -40,11 +40,11 @@ private static void printDebugRelData(String name, List softDependencies, List loadBefore) { - System.out.println("Saving plugin relational data for " + name); - System.out.println("Authors: " + String.join(", ", authors)); - System.out.println("Dependencies: " + String.join(", ", dependencies)); - System.out.println("Soft Dependencies: " + String.join(", ", softDependencies)); - System.out.println("Load Before: " + String.join(", ", loadBefore)); + DebugConstants.debugLog("Saving plugin relational data for " + name); + DebugConstants.debugLog("Authors: " + String.join(", ", authors)); + DebugConstants.debugLog("Dependencies: " + String.join(", ", dependencies)); + DebugConstants.debugLog("Soft Dependencies: " + String.join(", ", softDependencies)); + DebugConstants.debugLog("Load Before: " + String.join(", ", loadBefore)); } @Override @@ -151,7 +151,7 @@ public boolean isDependency(@NotNull String pluginName) } catch (SQLException e) { - e.printStackTrace(); + DebugConstants.onException(e); return false; } } @@ -304,17 +304,14 @@ public void savePluginMeta(@NotNull Plugin plugin, PluginDescriptionFile description = plugin.getDescription(); - if (DebugConstants.PLUGIN_META_OPERATION_TRACE) - { - System.out.println("Saving plugin meta for " + plugin.getName()); - System.out.println("Version: " + description.getVersion()); - System.out.println("Load Timing: " + description.getLoad().name()); - System.out.println("Installed at: " + installedAt); - System.out.println("Installed by: " + installedBy.name()); - System.out.println("Resolve Query: " + resolveQuery); - System.out.println("Is Dependency: " + isDependency); - System.out.println("[RELATIONAL DATA WILL BE SAVED BEFORE TRANSACTION COMMIT]"); - } + DebugConstants.debugLog("Saving plugin meta for " + plugin.getName(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Version: " + description.getVersion(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Load Timing: " + description.getLoad().name(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Installed at: " + installedAt, DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Installed by: " + installedBy.name(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Resolve Query: " + resolveQuery, DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Is Dependency: " + isDependency, DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("[RELATIONAL DATA WILL BE SAVED BEFORE TRANSACTION COMMIT]", DebugConstants.PLUGIN_META_OPERATION_TRACE); Transaction.create( this.db, @@ -334,17 +331,15 @@ public void savePluginMeta(@NotNull Plugin plugin, @Override public void savePluginMeta(@NotNull PluginMeta meta) { - if (DebugConstants.PLUGIN_META_OPERATION_TRACE) - { - System.out.println("Saving plugin meta for " + meta.getName()); - System.out.println("Version: " + meta.getVersion()); - System.out.println("Load Timing: " + meta.getLoadTiming().name()); - System.out.println("Installed at: " + meta.getInstalledAt()); - System.out.println("Installed by: " + meta.getInstalledBy().name()); - System.out.println("Resolve Query: " + meta.getResolveQuery()); - System.out.println("Is Dependency: " + meta.isDependency()); - System.out.println("[RELATIONAL DATA WILL BE SAVED BEFORE TRANSACTION COMMIT]"); - } + DebugConstants.debugLog("Saving plugin meta for " + meta.getName(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Version: " + meta.getVersion(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Load Timing: " + meta.getLoadTiming().name(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Installed at: " + meta.getInstalledAt(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Installed by: " + meta.getInstalledBy().name(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Resolve Query: " + meta.getResolveQuery(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("Is Dependency: " + meta.isDependency(), DebugConstants.PLUGIN_META_OPERATION_TRACE); + DebugConstants.debugLog("[RELATIONAL DATA WILL BE SAVED BEFORE TRANSACTION COMMIT]", DebugConstants.PLUGIN_META_OPERATION_TRACE); + Transaction.create( this.db, @@ -382,8 +377,10 @@ public void removePluginMeta(String pluginName, Transaction transaction) @Override public void removePluginRelationalData(Connection connection, String pluginName) throws SQLException { - if (DebugConstants.PLUGIN_META_OPERATION_TRACE) - System.out.println("Removing relational data for " + pluginName); + DebugConstants.debugLog( + "Removing relational data for " + pluginName, + DebugConstants.PLUGIN_META_OPERATION_TRACE + ); PreparedStatement statement = connection.prepareStatement("DELETE FROM plugin_author WHERE name = ?"); @@ -482,12 +479,10 @@ public void saveDependencyTree(@NotNull List dependencyNodes) for (DependencyNode node : dependencyNodes) { - if (DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE) - { - System.out.println("Saving dependency tree for " + node.getPlugin()); - System.out.println("Depends on: " + node.getDependsOn()); - System.out.println("Dependency type: " + node.getDependType().name()); - } + DebugConstants.debugLog("Saving dependency tree for " + node.getPlugin(), DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE); + DebugConstants.debugLog("Depends on: " + node.getDependsOn(), DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE); + DebugConstants.debugLog("Dependency type: " + node.getDependType().name(), DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE); + transaction .set(1, node.getPlugin()) @@ -515,8 +510,7 @@ public void buildDependencyTree(@NotNull String pluginName) dependencies.addAll(softDependencies); dependencies.addAll(loadBefore); - if (DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE) - System.out.println("Building dependency tree for " + pluginName); + DebugConstants.debugLog("Building dependency tree for " + pluginName, DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE); this.saveDependencyTree(dependencies); } @@ -524,8 +518,7 @@ public void buildDependencyTree(@NotNull String pluginName) @Override public void deleteFromDependencyTree(@NotNull String pluginName) { - if (DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE) - System.out.println("Deleting dependency tree for " + pluginName); + DebugConstants.debugLog("Deleting dependency tree for " + pluginName, DebugConstants.PLUGIN_META_DEPENDENCY_TREE_TRACE); Transaction.create(this.db, "DELETE FROM dependency_tree WHERE name = ?") .set(1, pluginName) diff --git a/KPMModels/pom.xml b/KPMModels/pom.xml index ea079efc..a1bea549 100644 --- a/KPMModels/pom.xml +++ b/KPMModels/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -31,7 +31,7 @@ org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided diff --git a/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallManager.java b/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallManager.java index 84ab23f8..a68f414a 100644 --- a/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallManager.java +++ b/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallManager.java @@ -28,9 +28,9 @@ public interface InstallManager * @param インストーラの型 * @return インストールの結果 */ - , I extends PluginInstaller> InstallProgress runInstallerAsync( + , I extends Installer> InstallProgress runInstallerAsync( @NotNull I installer, @NotNull A arguments, - @Nullable Consumer> onFinished + @Nullable Consumer> onFinished ); } diff --git a/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallProgress.java b/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallProgress.java index 90ee8cbe..7fbb0fda 100644 --- a/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallProgress.java +++ b/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallProgress.java @@ -15,7 +15,7 @@ * * @param インストーラの状態の型 */ -public interface InstallProgress, I extends PluginInstaller> +public interface InstallProgress, I extends Installer> { /** * プラグインがアップグレードされたとしてマークします。 diff --git a/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/PluginInstaller.java b/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/Installer.java similarity index 77% rename from KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/PluginInstaller.java rename to KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/Installer.java index b7e6b34e..dea09b56 100644 --- a/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/PluginInstaller.java +++ b/KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/Installer.java @@ -9,7 +9,7 @@ * @param インストールのタスクの列挙型 * @param

インストールのタスクの引数の型 */ -public interface PluginInstaller, P extends Enum

> +public interface Installer, P extends Enum

> { /** * インストーラを実行します。 @@ -21,5 +21,5 @@ public interface PluginInstaller, KPMRegistry getRegistry(); - InstallProgress> getProgress(); + InstallProgress> getProgress(); } diff --git a/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMEnvironment.java b/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMEnvironment.java index a3ace4db..5012037e 100644 --- a/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMEnvironment.java +++ b/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMEnvironment.java @@ -1,6 +1,7 @@ package org.kunlab.kpm.interfaces; import org.bukkit.plugin.Plugin; +import org.kunlab.kpm.ExceptionHandler; import java.nio.file.Path; import java.util.List; @@ -77,4 +78,9 @@ public interface KPMEnvironment * HTTP リクエストのリダイレクト回数です。 */ int getHTTPMaxRedirects(); + + /** + * 例外をキャッチしたときに呼び出されるハンドラです。 + */ + ExceptionHandler getExceptionHandler(); } diff --git a/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMRegistry.java b/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMRegistry.java index 6165e1fa..525840f3 100644 --- a/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMRegistry.java +++ b/KPMModels/src/main/java/org/kunlab/kpm/interfaces/KPMRegistry.java @@ -1,5 +1,6 @@ package org.kunlab.kpm.interfaces; +import org.kunlab.kpm.ExceptionHandler; import org.kunlab.kpm.TokenStore; import org.kunlab.kpm.alias.interfaces.AliasProvider; import org.kunlab.kpm.hook.interfaces.HookExecutor; @@ -78,6 +79,11 @@ public interface KPMRegistry */ ServerConditionChecker getServerConditionChecker(); + /** + * 発生した例外をハンドリングするクラスです。 + */ + ExceptionHandler getExceptionHandler(); + /** * デーモンを終了します。 */ diff --git a/KPMModels/src/main/java/org/kunlab/kpm/pluginloader/PluginLoadResult.java b/KPMModels/src/main/java/org/kunlab/kpm/pluginloader/PluginLoadResult.java index bda39e13..5a6a7f00 100644 --- a/KPMModels/src/main/java/org/kunlab/kpm/pluginloader/PluginLoadResult.java +++ b/KPMModels/src/main/java/org/kunlab/kpm/pluginloader/PluginLoadResult.java @@ -20,7 +20,7 @@ public enum PluginLoadResult */ FILE_NOT_FOUND, /** - * plugin.yml が不適切 + * {@code plugin.yml} が不適切 */ INVALID_PLUGIN_DESCRIPTION, /** diff --git a/KPMPlugin/pom.xml b/KPMPlugin/pom.xml index c3e36a59..800d04eb 100644 --- a/KPMPlugin/pom.xml +++ b/KPMPlugin/pom.xml @@ -5,7 +5,7 @@ TeamKunPluginManager org.kunlab.kpm - 3.0.0 + 3.0.1 ../pom.xml 4.0.0 @@ -33,7 +33,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.3.0 + 3.4.1 package @@ -104,7 +104,7 @@ org.kunlab.kpm KPMDaemon - 3.0.0 + 3.0.1 compile diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/HeadInstallers.java b/KPMPlugin/src/main/java/org/kunlab/kpm/HeadInstallers.java index 1d99f9c8..2208b167 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/HeadInstallers.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/HeadInstallers.java @@ -38,7 +38,7 @@ public class HeadInstallers public void runInstall(@NotNull Terminal terminal, @NotNull InstallArgument argument) { SignalHandleManager handleManager = new SignalHandleManager(); - HeadSignalHandlers.getInstallHandlers(terminal).forEach(handleManager::register); + HeadSignalHandlers.getInstallHandlers(this.registry, terminal).forEach(handleManager::register); PluginInstaller installer; try @@ -47,7 +47,7 @@ public void runInstall(@NotNull Terminal terminal, @NotNull InstallArgument argu } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(LangProvider.get("installer.init_failed", MsgArgs.of("error", e.getMessage()))); return; } @@ -58,7 +58,7 @@ public void runInstall(@NotNull Terminal terminal, @NotNull InstallArgument argu public void runUninstall(@NotNull Terminal terminal, @NotNull UninstallArgument argument) { SignalHandleManager handleManager = new SignalHandleManager(); - HeadSignalHandlers.getUninstallHandlers(terminal).forEach(handleManager::register); + HeadSignalHandlers.getUninstallHandlers(this.registry, terminal).forEach(handleManager::register); PluginUninstaller uninstaller; try @@ -67,7 +67,7 @@ public void runUninstall(@NotNull Terminal terminal, @NotNull UninstallArgument } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(LangProvider.get("installer.init_failed", MsgArgs.of("error", e.getMessage()))); return; } @@ -87,7 +87,7 @@ public void runUpdate(@NotNull Terminal terminal, @NotNull UpdateArgument argume } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(LangProvider.get("installer.init_failed", MsgArgs.of("error", e.getMessage()))); return; } @@ -107,7 +107,7 @@ public void runAutoRemove(@NotNull Terminal terminal, @NotNull AutoRemoveArgumen } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(LangProvider.get("installer.init_failed", MsgArgs.of("error", e.getMessage()))); return; } @@ -127,7 +127,7 @@ public void runGarbageClean(@NotNull Terminal terminal, @NotNull CleanArgument a } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(LangProvider.get("installer.init_failed", MsgArgs.of("error", e.getMessage()))); return; } @@ -147,7 +147,7 @@ public void runRegister(@NotNull Terminal terminal, @NotNull RegisterArgument ar } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(LangProvider.get("installer.init_failed", MsgArgs.of("error", e.getMessage()))); return; } @@ -160,7 +160,7 @@ public void runUpgrade(@NotNull Terminal terminal, @NotNull UpgradeArgument argu SignalHandleManager handleManager = new SignalHandleManager(); boolean isAuto = argument.getTargetPlugins() == null || argument.getTargetPlugins().isEmpty(); - HeadSignalHandlers.getUpgraderHandlers(terminal, isAuto) + HeadSignalHandlers.getUpgraderHandlers(this.registry, terminal, isAuto) .forEach(handleManager::register); PluginUpgrader upgrader; @@ -170,7 +170,7 @@ public void runUpgrade(@NotNull Terminal terminal, @NotNull UpgradeArgument argu } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(LangProvider.get("installer.init_failed", MsgArgs.of("error", e.getMessage()))); return; } diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/Notices.java b/KPMPlugin/src/main/java/org/kunlab/kpm/Notices.java index 9144f290..68c193eb 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/Notices.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/Notices.java @@ -6,9 +6,12 @@ import org.kunlab.kpm.lang.MsgArgs; import java.util.List; +import java.util.concurrent.TimeUnit; public class Notices { + private static final long TOKEN_CACHE_SECONDS = TimeUnit.MINUTES.toSeconds(15); + private static long LAST_TOKEN_FETCH = 0; private static boolean LAST_TOKEN_FETCH_RESULT = false; // true if the token is alive. @@ -20,7 +23,8 @@ public static void printAllNotice(KPMRegistry registry, Terminal terminal) print = printTokenUnset(registry, terminal); if (print) terminal.writeLine(""); - print = printTokenDead(registry, terminal); + /* print =*/ + printTokenDead(registry, terminal); } public static boolean printAutoRemovable(KPMRegistry registry, Terminal terminal) @@ -61,7 +65,7 @@ public static boolean printTokenDead(KPMRegistry registry, Terminal terminal) { long currentTime = System.currentTimeMillis(); boolean isTokenAlive; - if (currentTime - LAST_TOKEN_FETCH > 1000 * 60 * 15) // Token alive cache expires in 15 minutes. + if (currentTime - LAST_TOKEN_FETCH > TOKEN_CACHE_SECONDS) { // Fetch token LAST_TOKEN_FETCH = currentTime; isTokenAlive = LAST_TOKEN_FETCH_RESULT = registry.getTokenStore().isTokenAlive(); diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/TeamKunPluginManager.java b/KPMPlugin/src/main/java/org/kunlab/kpm/TeamKunPluginManager.java index 59700f9e..32a02160 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/TeamKunPluginManager.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/TeamKunPluginManager.java @@ -29,11 +29,11 @@ import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.lang.LangProvider; import org.kunlab.kpm.upgrader.KPMUpgrader; +import org.kunlab.kpm.utils.KPMCollectors; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -76,15 +76,15 @@ private static KPMEnvironment buildEnvironment(Plugin plugin, FileConfiguration .build(); } - private static HashMap setupSources(FileConfiguration config) + private static Map setupSources(FileConfiguration config) { List> aliasSources = config.getMapList("resolve.aliases.sources"); @SuppressWarnings("unchecked") - HashMap aliasMap = aliasSources.stream() + Map aliasMap = aliasSources.stream() .map(map -> (Map) map) - .map(map -> new Pair<>((String) map.get("name"), (String) map.get("url"))) - .collect(HashMap::new, (map, pair) -> map.put(pair.getLeft(), pair.getRight()), HashMap::putAll); + .map(map -> Pair.of((String) map.get("name"), (String) map.get("url"))) + .collect(KPMCollectors.toPairHashMap()); return aliasMap; } diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/Utils.java b/KPMPlugin/src/main/java/org/kunlab/kpm/Utils.java index ba11b3da..27752d97 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/Utils.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/Utils.java @@ -16,6 +16,8 @@ @UtilityClass public class Utils { + private static final long SIZE_UNIT_THRESHOLD = 1024; // 1000byte ではなく 1024byte で切り捨てる + private static final int HASH_BUFFER_SIZE = 1024; private static final String[] SIZE_UNITS = { "B", "kB", @@ -55,9 +57,9 @@ public static String roundSizeUnit(long size) int unit = 0; double dSize = size; - while (dSize > 1024 && unit < SIZE_UNITS.length - 1) + while (dSize > SIZE_UNIT_THRESHOLD && unit < SIZE_UNITS.length - 1) { - dSize /= 1024; + dSize /= SIZE_UNIT_THRESHOLD; unit++; } @@ -80,7 +82,7 @@ public static String getHash(Path path, String algo) try (FileInputStream fis = new FileInputStream(path.toFile()); DigestInputStream dis = new DigestInputStream(fis, md)) { - byte[] buffer = new byte[1024]; + byte[] buffer = new byte[HASH_BUFFER_SIZE]; while (dis.read(buffer) != -1) { } diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandDebug.java b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandDebug.java index c94c360d..16021046 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandDebug.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandDebug.java @@ -16,7 +16,7 @@ public class CommandDebug extends SubCommandWith { - private final HashMap commands; + private final Map commands; public CommandDebug(KPMRegistry registry) { diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandUpgradeKPM.java b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandUpgradeKPM.java index da3029ef..37f22efe 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandUpgradeKPM.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandUpgradeKPM.java @@ -56,7 +56,7 @@ public void onCommand(@NotNull CommandSender sender, @NotNull Terminal terminal, } SignalHandleManager signalHandleManager = new SignalHandleManager(); - HeadSignalHandlers.getKPMUpgraderHandlers(terminal) + HeadSignalHandlers.getKPMUpgraderHandlers(this.plugin.getDaemon(), terminal) .forEach(signalHandleManager::register); Runner.runAsync(() -> diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandDepTreeDebug.java b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandDepTreeDebug.java index cb4097b0..a03a1ad9 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandDepTreeDebug.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandDepTreeDebug.java @@ -16,7 +16,7 @@ public class CommandDepTreeDebug extends SubCommandWith { - private final HashMap COMMANDS; + private final Map COMMANDS; public CommandDepTreeDebug(PluginMetaManager manager) { diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandUninstallDebug.java b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandUninstallDebug.java index 1a794bc1..9bdbe64d 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandUninstallDebug.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/CommandUninstallDebug.java @@ -61,7 +61,7 @@ public void onCommand(@NotNull CommandSender sender, @NotNull Terminal terminal, } catch (Exception e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); terminal.error(e.getClass() + ": " + e.getMessage()); } }); diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/DebugSignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/DebugSignalHandler.java index d03bfef9..e5f10063 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/DebugSignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/DebugSignalHandler.java @@ -10,8 +10,8 @@ import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.installer.impls.install.signals.AlreadyInstalledPluginSignal; import org.kunlab.kpm.installer.interfaces.InstallProgress; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.installer.signals.assertion.IgnoredPluginSignal; import org.kunlab.kpm.signal.Signal; import org.kunlab.kpm.signal.SignalHandleManager; @@ -246,7 +246,7 @@ public static SignalHandleManager toManager(Terminal terminal) } @SignalHandler - public void handleAll(@NotNull InstallProgress, ? extends PluginInstaller, ? extends Enum>> installProgress, Signal signal) + public void handleAll(@NotNull InstallProgress, ? extends Installer, ? extends Enum>> installProgress, Signal signal) { if (!(signal instanceof DownloadProgressSignal)) printSignal(signal, this.terminal); diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/lang/LangProvider.java b/KPMPlugin/src/main/java/org/kunlab/kpm/lang/LangProvider.java index cc445047..9b3b5ee2 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/lang/LangProvider.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/lang/LangProvider.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Map; import java.util.Properties; public class LangProvider @@ -20,6 +21,7 @@ public class LangProvider private final KPMRegistry registry; private final LangLoader loader; + @Getter @Setter private String currentLanguage; private Properties currentLanguageMessages; @@ -51,7 +53,7 @@ public static void setLanguage(String languageName) throws IOException public static void buildCache() { - Properties current = INSTANCE.currentLanguageMessages; + Map current = INSTANCE.currentLanguageMessages; Properties cache = new Properties(); current.keySet().stream().parallel() .map(Object::toString) diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/lang/MsgArgs.java b/KPMPlugin/src/main/java/org/kunlab/kpm/lang/MsgArgs.java index 3c8f8635..77e6ac6b 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/lang/MsgArgs.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/lang/MsgArgs.java @@ -91,6 +91,7 @@ private String formatDeep(String msg) { Map argMap = new HashMap<>(); Matcher matcher = ARG_PATTERN.matcher(msg); + String replacedMessage = msg; while (matcher.find()) { String key = matcher.group(1); @@ -102,9 +103,9 @@ private String formatDeep(String msg) value = "%%" + key + "%%"; argMap.put(key, value); } - msg = StringUtils.replace(msg, "%%" + key + "%%", value); + replacedMessage = StringUtils.replace(msg, "%%" + key + "%%", value); } - return msg; + return replacedMessage; } public MsgArgs add(String key, Object value) @@ -121,21 +122,22 @@ public MsgArgs add(MsgArgs args) public String format(String msg) { + String result = msg; for (Pair arg : this.args) - msg = msg.replace("%%" + arg.getLeft() + "%%", arg.getRight()); + result = result.replace("%%" + arg.getLeft() + "%%", arg.getRight()); - if (!msg.contains("%%")) - return msg; + if (!result.contains("%%")) + return result; - msg = formatColors(msg); + result = formatColors(result); try { - return this.formatDeep(msg); + return this.formatDeep(result); } catch (StackOverflowError e) { - return msg; + return result; } } } diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/HeadSignalHandlers.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/HeadSignalHandlers.java index 29604051..4175d092 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/HeadSignalHandlers.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/HeadSignalHandlers.java @@ -2,6 +2,7 @@ import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; import org.jetbrains.annotations.NotNull; +import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.signal.handlers.autoremove.AutoRemoveFinishedSignalHandler; import org.kunlab.kpm.signal.handlers.autoremove.AutoRemoveReadySignalHandler; import org.kunlab.kpm.signal.handlers.clean.GarbageCleanFinishedSignalHandler; @@ -69,11 +70,11 @@ public static List getCommonHandlers(@NotNull Terminal terminal) ); } - public static List getInstallHandlers(@NotNull Terminal terminal, boolean handleFinish) + public static List getInstallHandlers(@NotNull KPMRegistry registry, @NotNull Terminal terminal, boolean handleFinish) { return createHandlersList( getCommonHandlers(terminal), - new ResolverSignalHandler(terminal), + new ResolverSignalHandler(registry, terminal), new DownloadingSignalHandler(terminal), new CheckEnvSignalHandler(terminal), new DependenciesSignalHandler(terminal), @@ -82,25 +83,27 @@ public static List getInstallHandlers(@NotNull Terminal terminal, boolea ); } - public static List getInstallHandlers(@NotNull Terminal terminal) + public static List getInstallHandlers(@NotNull KPMRegistry registry, @NotNull Terminal terminal) { - return getInstallHandlers(terminal, true); + return getInstallHandlers(registry, terminal, true); } - public static List getUninstallHandlers(@NotNull Terminal terminal, boolean handleFinish) + public static List getUninstallHandlers(@NotNull KPMRegistry registry, + @NotNull Terminal terminal, + boolean handleFinish) { return createHandlersList( getCommonHandlers(terminal), new UninstallerSignalHandler(terminal), - new PluginIsDependencySignalHandler(terminal), + new PluginIsDependencySignalHandler(registry, terminal), new UninstallReadySignalHandler(terminal), handleFinish ? new UninstallFinishedSignalHandler(terminal): null ); } - public static List getUninstallHandlers(@NotNull Terminal terminal) + public static List getUninstallHandlers(@NotNull KPMRegistry registry, @NotNull Terminal terminal) { - return getUninstallHandlers(terminal, true); + return getUninstallHandlers(registry, terminal, true); } public static List getUpdateHandlers(@NotNull Terminal terminal) @@ -140,7 +143,7 @@ public static List getTokenRegistererHandlers(Terminal terminal) ); } - public static List getUpgraderHandlers(Terminal terminal, boolean isAuto) + public static List getUpgraderHandlers(@NotNull KPMRegistry registry, @NotNull Terminal terminal, boolean isAuto) { return createHandlersList( getCommonHandlers(terminal), @@ -149,14 +152,14 @@ public static List getUpgraderHandlers(Terminal terminal, boolean isAuto new UpgradeFinishedSignalHandler(terminal), new UninstallerSignalHandler(terminal) ), - getInstallHandlers(terminal, false) + getInstallHandlers(registry, terminal, false) ); } - public static List getKPMUpgraderHandlers(Terminal terminal) + public static List getKPMUpgraderHandlers(KPMRegistry registry, Terminal terminal) { return createHandlersList( - new ResolverSignalHandler(terminal), + new ResolverSignalHandler(registry, terminal), new KPMUpgradeSignalHandler(terminal) ); } diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/SignalHandlingUtils.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/SignalHandlingUtils.java index 29db49d7..a9a08233 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/SignalHandlingUtils.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/SignalHandlingUtils.java @@ -18,7 +18,6 @@ public static boolean askContinue(Terminal terminal) } catch (InterruptedException e) { - e.printStackTrace(); terminal.error(LangProvider.get("general.errors.unknown") + ":%s", e.getMessage()); return false; } diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/common/DownloadingSignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/common/DownloadingSignalHandler.java index 3c8516f9..f4baf2d6 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/common/DownloadingSignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/common/DownloadingSignalHandler.java @@ -87,7 +87,7 @@ public void onDownloadingSignal(DownloadProgressSignal signal) return; double percent = (double) signal.getDownloaded() / signal.getTotalSize(); - this.downloadProgressBar.setProgress((int) (percent * 100)); // max 100 + this.downloadProgressBar.setProgress(Double.valueOf(percent * 100).intValue()); // max 100 } @SignalHandler diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/DependenciesSignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/DependenciesSignalHandler.java index 75efda4c..ffb53f1b 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/DependenciesSignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/DependenciesSignalHandler.java @@ -4,11 +4,11 @@ import org.kunlab.kpm.lang.LangProvider; import org.kunlab.kpm.lang.MsgArgs; import org.kunlab.kpm.signal.SignalHandler; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyCollectDependencysDependsFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyLoadDescriptionFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyNameMismatchSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyResolveFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.computer.signals.DependsLoadOrderComputingSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyCollectDependencysDependsFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyLoadDescriptionFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyNameMismatchSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyResolveFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.computer.signals.DependsLoadOrderComputingSignal; /** * 依存関係のシグナルを処理するハンドラです. diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/InstallFinishedSignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/InstallFinishedSignalHandler.java index 73e7b6c3..61866ccd 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/InstallFinishedSignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/InstallFinishedSignalHandler.java @@ -8,7 +8,7 @@ import org.kunlab.kpm.lang.LangProvider; import org.kunlab.kpm.lang.MsgArgs; import org.kunlab.kpm.signal.handlers.common.InstallFinishedSignalBase; -import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectErrorCause; +import org.kunlab.kpm.task.tasks.dependencies.collector.DependsCollectErrorCause; import org.kunlab.kpm.task.tasks.description.DescriptionLoadErrorCause; import org.kunlab.kpm.task.tasks.download.DownloadErrorCause; import org.kunlab.kpm.task.tasks.install.PluginsInstallErrorCause; diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/ResolverSignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/ResolverSignalHandler.java index 8526d5d1..a6fc904e 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/ResolverSignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/intall/ResolverSignalHandler.java @@ -4,6 +4,7 @@ import net.kunmc.lab.peyangpaperutils.lib.terminal.QuestionResult; import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; import net.kunmc.lab.peyangpaperutils.lib.terminal.attributes.AttributeChoice; +import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.lang.LangProvider; import org.kunlab.kpm.lang.MsgArgs; import org.kunlab.kpm.resolver.ErrorCause; @@ -13,6 +14,7 @@ import org.kunlab.kpm.task.tasks.resolve.signals.MultiplePluginResolvedSignal; import org.kunlab.kpm.task.tasks.resolve.signals.PluginResolveErrorSignal; import org.kunlab.kpm.task.tasks.resolve.signals.PluginResolvingSignal; +import org.kunlab.kpm.utils.KPMCollectors; import java.util.AbstractMap; import java.util.Arrays; @@ -26,10 +28,12 @@ */ public class ResolverSignalHandler { + private final KPMRegistry registry; private final Terminal terminal; - public ResolverSignalHandler(Terminal terminal) + public ResolverSignalHandler(KPMRegistry registry, Terminal terminal) { + this.registry = registry; this.terminal = terminal; } @@ -109,17 +113,17 @@ public void onPluginsResolve(MultiplePluginResolvedSignal signal) AtomicLong index = new AtomicLong(0); - LinkedHashMap keywordToResolveResult = Arrays.stream(signal.getResults().getResults()) + Map keywordToResolveResult = Arrays.stream(signal.getResults().getResults()) .filter(r -> r instanceof AbstractSuccessResult) .map(r -> (SuccessResult) r) .collect(Collectors.toMap(r -> String.valueOf(index.getAndIncrement()), r -> r, (a, b) -> a, LinkedHashMap::new)); - LinkedHashMap keywordToTitle = keywordToResolveResult.entrySet().stream() + Map keywordToTitle = keywordToResolveResult.entrySet().stream() .map(e -> new AbstractMap.SimpleEntry<>( e.getKey(), e.getValue().getFileName() + "(" + e.getValue().getVersion() + ")" ) ) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new)); + .collect(KPMCollectors.toMap(LinkedHashMap::new)); keywordToTitle.put("a", LangProvider.get("tasks.resolve.multi.choices.auto")); try @@ -152,7 +156,7 @@ else if (result.getRawAnswer().equalsIgnoreCase("a")) } catch (InterruptedException ex) { - ex.printStackTrace(); + this.registry.getExceptionHandler().report(ex); } } } diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/register/TokenGenerateSignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/register/TokenGenerateSignalHandler.java index 75fc4cdc..a01302a8 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/register/TokenGenerateSignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/register/TokenGenerateSignalHandler.java @@ -15,6 +15,8 @@ import org.kunlab.kpm.signal.SignalHandler; import org.kunlab.kpm.signal.SignalHandlingUtils; +import java.util.concurrent.TimeUnit; + public class TokenGenerateSignalHandler { private final Progressbar progressbar; @@ -64,11 +66,11 @@ public void onVerificationCodeReceived(VerificationCodeReceivedSignal signal) String userCode = signal.getUserCode(); String verificationUrl = signal.getVerificationUrl(); long expiresInSec = signal.getExpiresIn(); - int expiresInMin = (int) (expiresInSec / 60); + int expiresInMin = Math.toIntExact(TimeUnit.SECONDS.toMinutes(expiresInSec)); this.terminal.successImplicit(LangProvider.get( "tasks.gen_token.verify.verify_link", - MsgArgs.of("url", verificationUrl) + MsgArgs.of("link", verificationUrl) )); this.terminal.successImplicit(LangProvider.get( "tasks.gen_token.verify.code", @@ -79,7 +81,7 @@ public void onVerificationCodeReceived(VerificationCodeReceivedSignal signal) MsgArgs.of("minutes", expiresInMin) )); - int expiresInSecInt = (int) expiresInSec; + int expiresInSecInt = Math.toIntExact(expiresInSec); if (this.terminal.isPlayer()) { @@ -115,7 +117,7 @@ public void onVerificationCodeExpired(VerificationCodeExpiredSignal signal) public void onUserDoesntCompleteVerify(UserDoesntCompleteVerifySignal signal) { if (this.terminal.isPlayer()) - this.progressbar.setProgress((int) signal.getRemainTime()); + this.progressbar.setProgress(Math.toIntExact(signal.getRemainTime())); } @SignalHandler diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/PluginIsDependencySignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/PluginIsDependencySignalHandler.java index ba091f23..6e9a96db 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/PluginIsDependencySignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/PluginIsDependencySignalHandler.java @@ -3,6 +3,7 @@ import net.kunmc.lab.peyangpaperutils.lib.terminal.QuestionResult; import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; import org.bukkit.ChatColor; +import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.lang.LangProvider; import org.kunlab.kpm.lang.MsgArgs; import org.kunlab.kpm.meta.DependType; @@ -12,16 +13,19 @@ import org.kunlab.kpm.utils.Utils; import java.util.HashMap; +import java.util.Map; import java.util.stream.Collectors; public class PluginIsDependencySignalHandler { + private final KPMRegistry registry; private final Terminal terminal; private PluginIsDependencySignal.Operation lastOperation; - public PluginIsDependencySignalHandler(Terminal terminal) + public PluginIsDependencySignalHandler(KPMRegistry registry, Terminal terminal) { + this.registry = registry; this.terminal = terminal; } @@ -54,7 +58,7 @@ private PluginIsDependencySignal.Operation pollUninstallDeps() if (this.lastOperation != null) // This is not the first time to ask so auto select the last operation return this.lastOperation; - HashMap optionSelection = new HashMap<>(); + Map optionSelection = new HashMap<>(); optionSelection.put("u", PluginIsDependencySignal.Operation.UNINSTALL); optionSelection.put("d", PluginIsDependencySignal.Operation.DISABLE); optionSelection.put("i", PluginIsDependencySignal.Operation.IGNORE); @@ -80,7 +84,7 @@ private PluginIsDependencySignal.Operation pollUninstallDeps() } catch (InterruptedException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); this.terminal.error(LangProvider.get( "tasks.uninstall.dependency.error", MsgArgs.of("error", e.getMessage()) diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/UninstallReadySignalHandler.java b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/UninstallReadySignalHandler.java index 7ffb12dd..250838ce 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/UninstallReadySignalHandler.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/UninstallReadySignalHandler.java @@ -20,7 +20,7 @@ public UninstallReadySignalHandler(Terminal terminal) this.terminal = terminal; } - private void printUninstallInfo(List uninstallTargets) + private void printUninstallInfo(List uninstallTargets) { this.terminal.successImplicit(LangProvider.get("installer.uninstall.ready")); this.terminal.writeLine(" " + uninstallTargets.stream() diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMFetcher.java b/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMFetcher.java index 3ab04885..e5c4b291 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMFetcher.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMFetcher.java @@ -53,7 +53,7 @@ public static String fetchUpgraderJarFile(KPMRegistry registry) ResolveResult result = registry.getPluginResolver().resolve(upgraderQuery); if (result instanceof MultiResult) - result = result.getResolver().autoPickOnePlugin((MultiResultImpl) result); + result = result.getResolver().autoPickOnePlugin((MultiResult) result); if (result instanceof ErrorResult) throw new IllegalStateException("Unable to fetch upgrader jar file: " + ((ErrorResult) result).getMessage()); diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMUpgrader.java b/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMUpgrader.java index 670b82a1..e9518909 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMUpgrader.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/KPMUpgrader.java @@ -62,7 +62,7 @@ public void runUpgrade(SignalHandleManager signalHandleManager) } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); return; } @@ -93,7 +93,7 @@ private boolean checkCanUpgrade(SignalHandleManager signalHandleManager) } catch (IllegalStateException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); signalHandleManager.handleSignal(new LatestFetchSignal.Error(this.currentKPMVersion, e.getMessage())); return false; @@ -124,7 +124,7 @@ private boolean deployUpgrader(SignalHandleManager signalHandleManager, Path to) } catch (Exception e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); signalHandleManager.handleSignal( new UpgraderDeploySignal.Error(UpgraderDeploySignal.Error.ErrorCause.DEPLOYER_NOT_EXISTS) diff --git a/KPMPlugin/src/main/java/org/kunlab/kpm/utils/TerminalWriter.java b/KPMPlugin/src/main/java/org/kunlab/kpm/utils/TerminalWriter.java index 75e4e2a9..0d3944bf 100644 --- a/KPMPlugin/src/main/java/org/kunlab/kpm/utils/TerminalWriter.java +++ b/KPMPlugin/src/main/java/org/kunlab/kpm/utils/TerminalWriter.java @@ -26,10 +26,10 @@ public abstract class TerminalWriter protected void printString(String key, @NotNull String value) { - value = value.substring(0, Math.min(value.length(), MAX_LENGTH)); - if (value.length() == MAX_LENGTH) - value += "…"; - this.printStringFull(key, value); + String croppedValue = value.substring(0, Math.min(value.length(), MAX_LENGTH)); + if (croppedValue.length() == MAX_LENGTH) + croppedValue += "…"; + this.printStringFull(key, croppedValue); } protected void printSeparator() @@ -136,43 +136,43 @@ protected void printStringOrEmptyFull(String key, @Nullable String value) protected void printString(String key, @NotNull String value, ClickEvent.Action action, String content) { - value = value.substring(0, Math.min(value.length(), MAX_LENGTH)); - if (value.length() == MAX_LENGTH) - value += "…"; - this.printStringFull(key, value, action, content); + String croppedValue = value.substring(0, Math.min(value.length(), MAX_LENGTH)); + if (croppedValue.length() == MAX_LENGTH) + croppedValue += "…"; + this.printStringFull(key, croppedValue, action, content); } protected void printString(String key, @NotNull String value, ClickEvent.Action action, String clickContent, HoverEvent.Action hoverAction, T hoverContent) { - value = value.substring(0, Math.min(value.length(), MAX_LENGTH)); - if (value.length() == MAX_LENGTH) - value += "…"; - this.printStringFull(key, value, action, clickContent, hoverAction, hoverContent); + String croppedValue = value.substring(0, Math.min(value.length(), MAX_LENGTH)); + if (croppedValue.length() == MAX_LENGTH) + croppedValue += "…"; + this.printStringFull(key, croppedValue, action, clickContent, hoverAction, hoverContent); } protected void printString(String key, @NotNull String value, ClickEvent.Action action, String clickContent, String hoverText) { - value = value.substring(0, Math.min(value.length(), MAX_LENGTH)); - if (value.length() == MAX_LENGTH) - value += "…"; - this.printStringFull(key, value, action, clickContent, ChatColor.AQUA + hoverText); + String croppedValue = value.substring(0, Math.min(value.length(), MAX_LENGTH)); + if (croppedValue.length() == MAX_LENGTH) + croppedValue += "…"; + this.printStringFull(key, croppedValue, action, clickContent, ChatColor.AQUA + hoverText); } protected void printString(String key, @NotNull String value, String clickCommand) { - value = value.substring(0, Math.min(value.length(), MAX_LENGTH)); - if (value.length() == MAX_LENGTH) - value += "…"; - this.printStringFull(key, value, clickCommand); + String croppedValue = value.substring(0, Math.min(value.length(), MAX_LENGTH)); + if (croppedValue.length() == MAX_LENGTH) + croppedValue += "…"; + this.printStringFull(key, croppedValue, clickCommand); } protected void printString(String key, @NotNull String value, String clickCommand, String hoverText) { - value = value.substring(0, Math.min(value.length(), MAX_LENGTH)); - if (value.length() == MAX_LENGTH) - value += "…"; - this.printStringFull(key, value, clickCommand, ChatColor.AQUA + hoverText); + String croppedValue = value.substring(0, Math.min(value.length(), MAX_LENGTH)); + if (croppedValue.length() == MAX_LENGTH) + croppedValue += "…"; + this.printStringFull(key, croppedValue, clickCommand, ChatColor.AQUA + hoverText); } } diff --git a/KPMPluginInstaller/pom.xml b/KPMPluginInstaller/pom.xml index ebac3b68..29688d61 100644 --- a/KPMPluginInstaller/pom.xml +++ b/KPMPluginInstaller/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -22,31 +22,31 @@ org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMHooks - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMResolver - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMTasks - 3.0.0 + 3.0.1 provided diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/AbstractInstaller.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/AbstractInstaller.java index a7cf21e7..ba55bf92 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/AbstractInstaller.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/AbstractInstaller.java @@ -5,8 +5,8 @@ import org.jetbrains.annotations.Nullable; import org.kunlab.kpm.installer.interfaces.InstallProgress; import org.kunlab.kpm.installer.interfaces.InstallResult; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.installer.signals.InstallFinishedSignal; import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.signal.Signal; @@ -27,12 +27,12 @@ * @param インストールのタスクの列挙型 * @param

インストールのタスクの引数の型 */ -public abstract class AbstractInstaller, P extends Enum

> implements PluginInstaller +public abstract class AbstractInstaller, P extends Enum

> implements Installer { @Getter protected final KPMRegistry registry; @Getter - protected final InstallProgress> progress; + protected final InstallProgress> progress; protected final SignalHandleManager signalHandler; public AbstractInstaller(@NotNull KPMRegistry registry, @NotNull SignalHandleManager signalHandler) throws IOException @@ -86,7 +86,7 @@ public InstallResult

run(@NotNull A arguments) } catch (Exception e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); InstallFailedInstallResult result = new InstallFailedInstallResult<>(this.progress, e); this.postSignal(new InstallFinishedSignal(result)); @@ -214,7 +214,7 @@ protected boolean safeDelete(@NotNull File f) } catch (SecurityException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); return false; } } diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallFailedInstallResult.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallFailedInstallResult.java index 7ec6f047..78c366c9 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallFailedInstallResult.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallFailedInstallResult.java @@ -4,8 +4,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.kunlab.kpm.installer.interfaces.InstallProgress; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; /** * インストールに失敗したことを表すインストール結果です。 @@ -35,7 +35,7 @@ public class InstallFailedInstallResult

, T extends Enum, S @Nullable private final S taskStatus; - public InstallFailedInstallResult(@NotNull InstallProgress, P>> progress, @Nullable T reason, @NotNull S taskStatus) + public InstallFailedInstallResult(@NotNull InstallProgress, P>> progress, @Nullable T reason, @NotNull S taskStatus) { super(false, progress); this.exception = null; @@ -43,7 +43,7 @@ public InstallFailedInstallResult(@NotNull InstallProgress, P>> progress, @Nullable T reason) + public InstallFailedInstallResult(InstallProgress, P>> progress, @Nullable T reason) { super(false, progress); this.exception = null; @@ -51,7 +51,7 @@ public InstallFailedInstallResult(InstallProgress, P>> progress, @NotNull Exception exception) + public InstallFailedInstallResult(@NotNull InstallProgress, P>> progress, @NotNull Exception exception) { super(false, progress); this.exception = exception; @@ -60,7 +60,7 @@ public InstallFailedInstallResult(@NotNull InstallProgress, P>> getProgress() + public InstallProgress, P>> getProgress() { return super.getProgress(); } diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallManagerImpl.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallManagerImpl.java index 41f777b6..c5355e64 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallManagerImpl.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallManagerImpl.java @@ -9,8 +9,8 @@ import org.kunlab.kpm.installer.interfaces.InstallManager; import org.kunlab.kpm.installer.interfaces.InstallProgress; import org.kunlab.kpm.installer.interfaces.InstallResult; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import java.util.function.Consumer; @@ -18,7 +18,7 @@ public class InstallManagerImpl implements InstallManager { private final TokenStore tokenStore; - private InstallProgress, ? extends PluginInstaller, ? extends Enum>> runningInstall; + private InstallProgress, ? extends Installer, ? extends Enum>> runningInstall; public InstallManagerImpl(@NotNull TokenStore store) { @@ -44,10 +44,10 @@ public boolean isRunning() @Override @SuppressWarnings("unchecked") - public , I extends PluginInstaller> InstallProgress runInstallerAsync( + public , I extends Installer> InstallProgress runInstallerAsync( @NotNull I installer, @NotNull A arguments, - @Nullable Consumer> onFinished + @Nullable Consumer> onFinished ) { if (this.isRunning()) diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallProgressImpl.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallProgressImpl.java index a6d4d569..71a0e7cd 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallProgressImpl.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallProgressImpl.java @@ -8,12 +8,12 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.kunlab.kpm.installer.interfaces.InstallProgress; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.installer.signals.PluginModifiedSignal; import org.kunlab.kpm.signal.SignalHandleManager; import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectStatus; -import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectStatusImpl; +import org.kunlab.kpm.task.tasks.dependencies.collector.DependsCollectStatusImpl; import java.io.IOException; import java.nio.file.Files; @@ -24,10 +24,10 @@ import java.util.UUID; @Getter -public class InstallProgressImpl, I extends PluginInstaller> implements InstallProgress +public class InstallProgressImpl, I extends Installer> implements InstallProgress { @Getter(AccessLevel.NONE) - private static final HashMap, ? extends PluginInstaller, ? extends Enum>>> PROGRESS_CACHES; + private static final HashMap, ? extends Installer, ? extends Enum>>> PROGRESS_CACHES; static { @@ -84,15 +84,15 @@ private InstallProgressImpl(@NotNull I installer, this.getInstallActionID() ); - this.dependsCollectStatus = new DependsCollectStatusImpl((InstallProgress, ? extends PluginInstaller, ? extends Enum>>) this); + this.dependsCollectStatus = new DependsCollectStatusImpl((InstallProgress, ? extends Installer, ? extends Enum>>) this); this.finished = false; - PROGRESS_CACHES.put(this.getInstallActionID(), (InstallProgress, ? extends PluginInstaller, ? extends Enum>>) this); + PROGRESS_CACHES.put(this.getInstallActionID(), (InstallProgress, ? extends Installer, ? extends Enum>>) this); } @SuppressWarnings("unchecked") - public static

, PI extends PluginInstaller> InstallProgress of( + public static

, PI extends Installer> InstallProgress of( @NotNull PI installer, @NotNull SignalHandleManager signalHandler, @Nullable String id) @@ -201,7 +201,7 @@ public void finish() } catch (IOException e) { - e.printStackTrace(); + this.installer.getRegistry().getExceptionHandler().report(e); } PROGRESS_CACHES.remove(this.getInstallActionID()); diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallResultImpl.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallResultImpl.java index 4cceaa14..e776bd05 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallResultImpl.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/InstallResultImpl.java @@ -9,8 +9,8 @@ import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.installer.interfaces.InstallProgress; import org.kunlab.kpm.installer.interfaces.InstallResult; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; public class InstallResultImpl

> implements InstallResult

{ @@ -20,9 +20,9 @@ public class InstallResultImpl

> implements InstallResult

private final boolean success; @Getter - private final InstallProgress, P>> progress; + private final InstallProgress, P>> progress; - public InstallResultImpl(boolean success, InstallProgress, P>> progress) + public InstallResultImpl(boolean success, InstallProgress, P>> progress) { progress.finish(); this.success = success; diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveSucceedResult.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveSucceedResult.java index 090e2bc2..29eff5e7 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveSucceedResult.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveSucceedResult.java @@ -3,7 +3,7 @@ import lombok.Getter; import org.kunlab.kpm.installer.InstallResultImpl; import org.kunlab.kpm.installer.interfaces.InstallProgress; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.task.tasks.uninstall.UnInstallResult; /** @@ -14,7 +14,7 @@ public class AutoRemoveSucceedResult extends InstallResultImpl { private final UnInstallResult result; - public AutoRemoveSucceedResult(InstallProgress> progress, UnInstallResult result) + public AutoRemoveSucceedResult(InstallProgress> progress, UnInstallResult result) { super(true, progress); this.result = result; diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/PluginAutoRemover.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/PluginAutoRemover.java index 61cbac30..bd190898 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/PluginAutoRemover.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/PluginAutoRemover.java @@ -39,7 +39,7 @@ public PluginAutoRemover(@NotNull KPMRegistry registry, @NotNull SignalHandleMan @Override public InstallResult execute(@NotNull AutoRemoveArgument argument) throws TaskFailedException { - ArrayList targetPlugins; + List targetPlugins; // region Enumerate plugins to be removed this.progress.setCurrentTask(AutoRemoveTasks.SEARCHING_REMOVABLES); @@ -47,7 +47,7 @@ public InstallResult execute(@NotNull AutoRemoveArgument argume .map(String::toLowerCase) .collect(Collectors.toList()); - targetPlugins = (ArrayList) this.registry.getPluginMetaManager().getProvider().getUnusedPlugins() + targetPlugins = this.registry.getPluginMetaManager().getProvider().getUnusedPlugins() .stream() .parallel() .filter(unusedPluginName -> !excludePlugins.contains(unusedPluginName.toLowerCase())) @@ -79,7 +79,7 @@ public InstallResult execute(@NotNull AutoRemoveArgument argume } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); return this.error(AutoRemoveErrorCause.UNINSTALLER_INIT_FAILED); } diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/signals/PluginEnumeratedSignal.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/signals/PluginEnumeratedSignal.java index 83c79b2e..92716e68 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/signals/PluginEnumeratedSignal.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/signals/PluginEnumeratedSignal.java @@ -5,7 +5,7 @@ import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.signal.Signal; -import java.util.ArrayList; +import java.util.List; /** * 自動削除するプラグインが列挙された場合に送信されるシグナルです。 @@ -19,7 +19,7 @@ public class PluginEnumeratedSignal extends Signal * このリストを変更すると、自動削除の対象を変更できます。 */ @NotNull - private final ArrayList targetPlugins; + private final List targetPlugins; /** * 自動削除をキャンセルするかどうかを示すフラグです。 @@ -27,7 +27,7 @@ public class PluginEnumeratedSignal extends Signal */ private boolean cancel; - public PluginEnumeratedSignal(@NotNull ArrayList targetPlugins) + public PluginEnumeratedSignal(@NotNull List targetPlugins) { this.targetPlugins = targetPlugins; this.cancel = false; diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/GarbageCleanSucceedResult.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/GarbageCleanSucceedResult.java index 331c1932..2713f933 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/GarbageCleanSucceedResult.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/GarbageCleanSucceedResult.java @@ -5,8 +5,8 @@ import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.installer.InstallResultImpl; import org.kunlab.kpm.installer.interfaces.InstallProgress; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import java.nio.file.Path; import java.util.List; @@ -29,7 +29,7 @@ public class GarbageCleanSucceedResult extends InstallResultImpl @NotNull List deleteFailedFiles; - public GarbageCleanSucceedResult(InstallProgress, CleanTasks>> progress, + public GarbageCleanSucceedResult(InstallProgress, CleanTasks>> progress, @NotNull List deletedFiles, @NotNull List deleteFailedFiles) { super(true, progress); diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallArgument.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallArgument.java index 4d40a24f..abe24289 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallArgument.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallArgument.java @@ -53,7 +53,7 @@ public class InstallArgument implements InstallerArgument * このフラグを {@code true} にした場合, プラグインの読み込みは行われません。 */ @Builder.Default - private final boolean onyLocate = false; + private final boolean onlyLocate = false; /** * ユーザによるインストールかどうかのフラグです。 diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallTasks.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallTasks.java index 1be80af5..8287b690 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallTasks.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallTasks.java @@ -2,8 +2,8 @@ import org.kunlab.kpm.installer.impls.install.signals.AlreadyInstalledPluginSignal; import org.kunlab.kpm.task.AbstractInstallTask; -import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectTask; -import org.kunlab.kpm.task.interfaces.dependencies.computer.signals.DependsLoadOrderComputingSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.DependsCollectTask; +import org.kunlab.kpm.task.tasks.dependencies.computer.signals.DependsLoadOrderComputingSignal; import org.kunlab.kpm.task.tasks.description.DescriptionLoadTask; import org.kunlab.kpm.task.tasks.download.DownloadTask; import org.kunlab.kpm.task.tasks.resolve.PluginResolveTask; diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/PluginInstaller.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/PluginInstaller.java index e363f5e2..235a8665 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/PluginInstaller.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/PluginInstaller.java @@ -17,10 +17,10 @@ import org.kunlab.kpm.signal.SignalHandleManager; import org.kunlab.kpm.task.TaskFailedException; import org.kunlab.kpm.task.interfaces.TaskResult; -import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectArgument; -import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectTask; -import org.kunlab.kpm.task.interfaces.dependencies.computer.DependsComputeOrderArgument; -import org.kunlab.kpm.task.interfaces.dependencies.computer.DependsComputeOrderTask; +import org.kunlab.kpm.task.tasks.dependencies.collector.DependsCollectArgument; +import org.kunlab.kpm.task.tasks.dependencies.collector.DependsCollectTask; +import org.kunlab.kpm.task.tasks.dependencies.computer.DependsComputeOrderArgument; +import org.kunlab.kpm.task.tasks.dependencies.computer.DependsComputeOrderTask; import org.kunlab.kpm.task.tasks.description.DescriptionLoadArgument; import org.kunlab.kpm.task.tasks.description.DescriptionLoadResult; import org.kunlab.kpm.task.tasks.description.DescriptionLoadTask; @@ -181,7 +181,7 @@ else if (resolveResult != null) pluginDescription, finalKpmInfo, result.getOrder(), - argument.isOnyLocate() + argument.isOnlyLocate() )) .submitAll(new DependsCollectArgument( pluginDescription, diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/TokenRegisterer.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/TokenRegisterer.java index 3d4ed10c..40d3496b 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/TokenRegisterer.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/TokenRegisterer.java @@ -50,6 +50,7 @@ public class TokenRegisterer extends AbstractInstallerBearer) + * トークンのタイプです。(例:{@code Bearer}) */ @NotNull String tokenType; diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstallSucceedResult.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstallSucceedResult.java index 10e43bf2..f6ef7e4a 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstallSucceedResult.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstallSucceedResult.java @@ -3,8 +3,8 @@ import lombok.Getter; import org.kunlab.kpm.installer.InstallResultImpl; import org.kunlab.kpm.installer.interfaces.InstallProgress; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.tasks.uninstall.UnInstallResult; /** @@ -15,7 +15,7 @@ public class PluginUninstallSucceedResult extends InstallResultImpl, UnInstallTasks>> progress, UnInstallResult result) + public PluginUninstallSucceedResult(InstallProgress, UnInstallTasks>> progress, UnInstallResult result) { super(true, progress); this.result = result; diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstaller.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstaller.java index a3a1c263..4e150b6c 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstaller.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstaller.java @@ -14,9 +14,9 @@ import org.kunlab.kpm.signal.SignalHandleManager; import org.kunlab.kpm.task.TaskFailedException; import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; -import org.kunlab.kpm.task.interfaces.dependencies.DependencyElementImpl; -import org.kunlab.kpm.task.interfaces.dependencies.computer.DependsComputeOrderArgument; -import org.kunlab.kpm.task.interfaces.dependencies.computer.DependsComputeOrderTask; +import org.kunlab.kpm.task.tasks.dependencies.DependencyElementImpl; +import org.kunlab.kpm.task.tasks.dependencies.computer.DependsComputeOrderArgument; +import org.kunlab.kpm.task.tasks.dependencies.computer.DependsComputeOrderTask; import org.kunlab.kpm.task.tasks.uninstall.UnInstallResult; import org.kunlab.kpm.task.tasks.uninstall.UnInstallTask; import org.kunlab.kpm.task.tasks.uninstall.signals.PluginIsDependencySignal; @@ -198,9 +198,9 @@ private Plugin getPlugin(String query) { SearchingPluginSignal searchingPluginSignal = new SearchingPluginSignal(query); this.postSignal(searchingPluginSignal); - query = searchingPluginSignal.getQuery(); // May be changed by signal handler + String modifiedQuery = searchingPluginSignal.getQuery(); // May be changed by signal handler - Plugin plugin = Bukkit.getPluginManager().getPlugin(query); + Plugin plugin = Bukkit.getPluginManager().getPlugin(modifiedQuery); if (!PluginUtil.isPluginLoaded(plugin)) return null; @@ -208,9 +208,9 @@ private Plugin getPlugin(String query) return plugin; } - private ArrayList getDependenciesRecursive(Plugin target) + private List getDependenciesRecursive(Plugin target) { - ArrayList dependencyPlugins = new ArrayList<>(); + List dependencyPlugins = new ArrayList<>(); // Retrieve plugins that depends on target plugin. List dependencies = diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/signals/UpdateFinishedSignal.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/signals/UpdateFinishedSignal.java index 2c7e4383..e756287f 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/signals/UpdateFinishedSignal.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/signals/UpdateFinishedSignal.java @@ -4,7 +4,7 @@ import lombok.Value; import org.kunlab.kpm.signal.Signal; -import java.util.HashMap; +import java.util.Map; /** * エイリアスのアップデートが完了したことを示すシグナルです。 @@ -20,5 +20,5 @@ public class UpdateFinishedSignal extends Signal /** * エイリアスとソースのペアの数です。 */ - HashMap aliasesBySources; + Map aliasesBySources; } diff --git a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/PluginUpgrader.java b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/PluginUpgrader.java index 5e0a597d..83d40b32 100644 --- a/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/PluginUpgrader.java +++ b/KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/PluginUpgrader.java @@ -30,9 +30,9 @@ import org.kunlab.kpm.signal.SignalHandleManager; import org.kunlab.kpm.task.TaskFailedException; import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; -import org.kunlab.kpm.task.interfaces.dependencies.DependencyElementImpl; -import org.kunlab.kpm.task.interfaces.dependencies.computer.DependsComputeOrderArgument; -import org.kunlab.kpm.task.interfaces.dependencies.computer.DependsComputeOrderTask; +import org.kunlab.kpm.task.tasks.dependencies.DependencyElementImpl; +import org.kunlab.kpm.task.tasks.dependencies.computer.DependsComputeOrderArgument; +import org.kunlab.kpm.task.tasks.dependencies.computer.DependsComputeOrderTask; import org.kunlab.kpm.task.tasks.install.PluginsInstallArgument; import org.kunlab.kpm.task.tasks.install.PluginsInstallTask; import org.kunlab.kpm.task.tasks.lookup.LookupArgument; @@ -101,7 +101,7 @@ public InstallResult execute(@NotNull UpgradeArgument argument) th Map updateQueries; // region Retrieve update queries this.progress.setCurrentTask(UpgradeTasks.RETRIEVING_METADATA); - HashMap pluginMetas = this.retrievePluginMetadata(targetPlugins); + Map pluginMetas = this.retrievePluginMetadata(targetPlugins); this.progress.setCurrentTask(UpgradeTasks.RETRIEVING_UPDATE_QUERY); updateQueries = this.retrieveUpdateQuery(pluginMetas); @@ -148,7 +148,7 @@ else if (mayErrorCause != null) return this.modifyPlugins(targetPlugins, resolveResults); } - private InstallResult modifyPlugins(List targetPlugins, Map resolveResults) + private InstallResult modifyPlugins(List targetPlugins, Map resolveResults) { Map unloadedPlugins; // region Uninstall plugins @@ -162,7 +162,7 @@ private InstallResult modifyPlugins(List targetPlugins, Ma } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); return this.error(UpgradeErrorCause.UNINSTALLER_INSTANTIATION_FAILED); } // endregion @@ -185,7 +185,7 @@ private InstallResult modifyPlugins(List targetPlugins, Ma } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); return this.error(UpgradeErrorCause.INSTALLER_INSTANTIATION_FAILED); } @@ -236,7 +236,7 @@ private Map uninstallPlugins(List targetPlu return uninstallSucceedResult.getResult().getUnloadedPlugins(); } - private Map retrieveUpdateQuery(HashMap pluginMetas) + private Map retrieveUpdateQuery(Map pluginMetas) { Map result = new HashMap<>(); @@ -261,7 +261,7 @@ else if (meta.getResolveQuery() != null) return result; } - private UpgradeErrorCause restoreUnloadedPlugin(Map unloadedPlugins) + private UpgradeErrorCause restoreUnloadedPlugin(Map unloadedPlugins) { List dependencyElements = unloadedPlugins.entrySet().stream() .map(entry -> { @@ -375,7 +375,7 @@ private Map notifyUpgradeReady(@NotNull Map retrievePluginMetadata(@NotNull List targets) + private Map retrievePluginMetadata(@NotNull List targets) { PluginMetaProvider metaProvider = this.registry.getPluginMetaManager().getProvider(); return targets.stream() @@ -392,8 +392,10 @@ private List searchPlugin(@Nullable List targets) throws TaskFai LookupResult lookupResult = this.submitter(UpgradeTasks.SEARCHING_PLUGIN, new PluginLookupTask(this)) .submitAll(new LookupArgument(targets.toArray(new String[0]))); - HashMap foundPlugins = lookupResult.getPlugins(); - assert foundPlugins != null; + assert lookupResult.getPlugins() != null; + Map foundPlugins = lookupResult.getPlugins().entrySet().stream() + .filter(entry -> entry.getValue() != null) + .collect(KPMCollectors.toHashMap()); targets.removeAll(foundPlugins.keySet()); diff --git a/KPMResolver/pom.xml b/KPMResolver/pom.xml index 4887faa1..451c6239 100644 --- a/KPMResolver/pom.xml +++ b/KPMResolver/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -22,13 +22,13 @@ org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 provided diff --git a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/PluginResolverImpl.java b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/PluginResolverImpl.java index 8d2a46d6..00ff83ec 100644 --- a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/PluginResolverImpl.java +++ b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/PluginResolverImpl.java @@ -12,16 +12,18 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * プラグインを解決するクラスです。 */ public class PluginResolverImpl implements PluginResolver { - private final HashMap> resolvers; + private final Map> resolvers; private final List fallbackResolvers; private final List allResolvers; @@ -34,18 +36,8 @@ public PluginResolverImpl() private static boolean isValidURLResolver(URL url, URLResolver resolver) { - String[] hosts = resolver.getHosts(); - - if (hosts.length == 0) - return true; - - for (String host : hosts) - { - if (url.getHost().equalsIgnoreCase(host)) - return true; - } - - return false; + return Arrays.stream(resolver.getHosts()).parallel() + .anyMatch(host -> url.getHost().equalsIgnoreCase(host)); } private static URL toURL(String url) @@ -128,7 +120,7 @@ public ResolveResult pickUpOne(MultiResult multiResult) return multiResult.getResolver().autoPickOnePlugin(multiResult); } - private ResolveResult actuallyResolve(List resolvers, QueryContext queryContext) + private ResolveResult actuallyResolve(List resolvers, QueryContext queryContext) { ResolveResult result = this.resolves(resolvers, queryContext); @@ -143,7 +135,7 @@ private ResolveResult actuallyResolve(List resolvers, QueryContext return result; } - private ResolveResult resolves(List resolvers, QueryContext queryContext) + private ResolveResult resolves(List resolvers, QueryContext queryContext) { List finishedResolvers = new ArrayList<>(); diff --git a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/SpigotMCResolver.java b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/SpigotMCResolver.java index 38295a6a..3c14ef7d 100644 --- a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/SpigotMCResolver.java +++ b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/SpigotMCResolver.java @@ -6,17 +6,18 @@ import org.kunlab.kpm.http.HTTPResponse; import org.kunlab.kpm.http.RequestContext; import org.kunlab.kpm.http.Requests; +import org.kunlab.kpm.resolver.ErrorCause; +import org.kunlab.kpm.resolver.QueryContext; import org.kunlab.kpm.resolver.interfaces.URLResolver; import org.kunlab.kpm.resolver.interfaces.result.ErrorResult; import org.kunlab.kpm.resolver.interfaces.result.MultiResult; import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; -import org.kunlab.kpm.resolver.ErrorCause; -import org.kunlab.kpm.resolver.QueryContext; import org.kunlab.kpm.resolver.result.ErrorResultImpl; import org.kunlab.kpm.resolver.result.MultiResultImpl; import org.kunlab.kpm.resolver.utils.URLResolveUtil; +import org.slf4j.LoggerFactory; -import java.util.ArrayList; +import java.util.Arrays; import java.util.Base64; import java.util.List; import java.util.regex.Matcher; @@ -100,11 +101,17 @@ private ResolveResult buildResult(JsonObject jsonObject, @Nullable String versio if (version == null) { - List results = new ArrayList<>(); - for (long v : versions) - results.add(new SpigotMCSuccessResult(this, String.valueOf(v), name, id, description, testedVersions)); - - return new MultiResultImpl(this, results.toArray(new SpigotMCSuccessResult[0])); + return new MultiResultImpl(this, Arrays.stream(versions) + .mapToObj(v -> new SpigotMCSuccessResult( + this, + String.valueOf(v), + name, + id, + description, + testedVersions + )) + .toArray(SpigotMCSuccessResult[]::new) + ); } for (long v : versions) @@ -124,8 +131,7 @@ private String b64Decode(String str) } catch (IllegalArgumentException e) { - e.printStackTrace(); - + LoggerFactory.getLogger(SpigotMCResolver.class).error("Failed to decode Base64 string.", e); return "Failed to decode Base64 string."; } } diff --git a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/github/GitHubURLResolver.java b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/github/GitHubURLResolver.java index 6ffa3760..c47aca4f 100644 --- a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/github/GitHubURLResolver.java +++ b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/github/GitHubURLResolver.java @@ -8,13 +8,13 @@ import org.kunlab.kpm.http.HTTPResponse; import org.kunlab.kpm.http.RequestContext; import org.kunlab.kpm.http.Requests; +import org.kunlab.kpm.resolver.ErrorCause; +import org.kunlab.kpm.resolver.QueryContext; +import org.kunlab.kpm.resolver.impl.GitHubSuccessResult; import org.kunlab.kpm.resolver.interfaces.URLResolver; import org.kunlab.kpm.resolver.interfaces.result.ErrorResult; import org.kunlab.kpm.resolver.interfaces.result.MultiResult; import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; -import org.kunlab.kpm.resolver.ErrorCause; -import org.kunlab.kpm.resolver.QueryContext; -import org.kunlab.kpm.resolver.impl.GitHubSuccessResult; import org.kunlab.kpm.resolver.result.ErrorResultImpl; import org.kunlab.kpm.resolver.result.MultiResultImpl; import org.kunlab.kpm.resolver.utils.URLResolveUtil; @@ -29,6 +29,13 @@ public class GitHubURLResolver implements URLResolver { private static final String GITHUB_REPO_RELEASES_URL = "https://api.github.com/repos/%s/releases"; private static final String GITHUB_REPO_RELEASE_NAME_URL = GITHUB_REPO_RELEASES_URL + "/tags/%s"; + private static final long BIAS_VERSION_MAJOR = 1000L; + private static final long BIAS_VERSION_MINOR = 100L; + private static final long BIAS_VERSION_PATCH = 10L; + private static final long BIAS_FILENAME_CONTAINS_JAR = 1000L; + private static final long BIAS_FILENAME_CONTAINS_PLUGIN_JAR = 500L; + private static final long BIAS_FILENAME_CONTAINS_API_JAR = -5000L; + private static final long BIAS_PRE_RELEASE = -1000L; private static boolean endsWithIgn(String str, String suffix) { @@ -56,23 +63,23 @@ private static long calcReputation(GitHubSuccessResult result) else versionObj = Version.of("0.0.0"); - reputation += versionObj.getMajor().getIntValue() * 1000L; - reputation += versionObj.getMinor().getIntValue() * 100L; - reputation += versionObj.getPatch().getIntValue() * 10L; + reputation += versionObj.getMajor().getIntValue() * BIAS_VERSION_MAJOR; + reputation += versionObj.getMinor().getIntValue() * BIAS_VERSION_MINOR; + reputation += versionObj.getPatch().getIntValue() * BIAS_VERSION_PATCH; if (versionObj.getPreRelease() != null) reputation -= versionObj.getPreRelease().getRawValue().chars().sum(); if (endsWithIgn(fileName, ".jar", ".zip")) - reputation += 1000L; + reputation += BIAS_FILENAME_CONTAINS_JAR; if (endsWithIgn(fileName, ".plugin.jar", ".plugin.zip")) - reputation += 500L; + reputation += BIAS_FILENAME_CONTAINS_PLUGIN_JAR; else if (endsWithIgn(fileName, ".api.jar", ".api.zip")) - reputation -= 5000L; + reputation -= BIAS_FILENAME_CONTAINS_API_JAR; if (isPreRelease && !versionObj.isPreRelease()) // isPreRelease is given by GitHub API, but versionObj.isPreRelease() is contained in version string - reputation -= 500L; + reputation -= BIAS_PRE_RELEASE; return reputation; } @@ -116,7 +123,7 @@ public ResolveResult resolve(QueryContext query) @Override public ResolveResult autoPickOnePlugin(MultiResult multiResult) { - HashMap map = new HashMap<>(); + Map map = new HashMap<>(); ErrorResult firstError = null; for (ResolveResult result : multiResult.getResults()) { diff --git a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/utils/URLResolveUtil.java b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/utils/URLResolveUtil.java index 8f9c05e7..07922437 100644 --- a/KPMResolver/src/main/java/org/kunlab/kpm/resolver/utils/URLResolveUtil.java +++ b/KPMResolver/src/main/java/org/kunlab/kpm/resolver/utils/URLResolveUtil.java @@ -1,7 +1,9 @@ package org.kunlab.kpm.resolver.utils; import lombok.experimental.UtilityClass; +import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.http.HTTPResponse; +import org.kunlab.kpm.http.StatusCode; import org.kunlab.kpm.resolver.ErrorCause; import org.kunlab.kpm.resolver.interfaces.URLResolver; import org.kunlab.kpm.resolver.interfaces.result.ErrorResult; @@ -16,6 +18,9 @@ public class URLResolveUtil { public static ErrorResult processErrorResponse(URLResolver resolver, HTTPResponse response, ResolveResult.Source source) { + if (!response.isError()) + return null; + switch (response.getStatus()) { case URL_MALFORMED: @@ -48,45 +53,49 @@ public static ErrorResult processErrorResponse(URLResolver resolver, HTTPRespons source, "Redirect location malformed: " + response.getHeader("Location") ); + default: + return processHTTPError(resolver, response, source); } + } - int code = response.getStatusCode(); - switch (code) + @NotNull + private static ErrorResult processHTTPError(URLResolver resolver, HTTPResponse response, ResolveResult.Source source) + { + StatusCode responseCode = response.getStatusCode(); + switch (responseCode) { - case 200: - return null; - case 401: + case UNAUTHORIZED: return new ErrorResultImpl(resolver, ErrorCause.INVALID_CREDENTIAL, source, - errorCodeWith("Invalid credential", code) + errorCodeWith("Invalid credential", responseCode) ); - case 403: + case FORBIDDEN: return new ErrorResultImpl(resolver, ErrorCause.SERVER_RESPONSE_ERROR, source, - errorCodeWith("Forbidden", code) + errorCodeWith("Forbidden", responseCode) ); - case 404: + case NOT_FOUND: return new ErrorResultImpl(resolver, ErrorCause.PLUGIN_NOT_FOUND - , source, errorCodeWith("Not Found", code) + , source, errorCodeWith("Not Found", responseCode) ); - case 418: + case I_AM_A_TEAPOT: return new ErrorResultImpl( resolver, ErrorCause.SERVER_RESPONSE_ERROR - , source, errorCodeWith("I'm a teapot", code) + , source, errorCodeWith("I'm a teapot", responseCode) ); default: - if (code >= 500 && code < 600) + if (response.isServerError()) return new ErrorResultImpl(resolver, ErrorCause.SERVER_RESPONSE_ERROR - , source, errorCodeWith("Server Error", code) + , source, errorCodeWith("Server Error", responseCode) ); else return new ErrorResultImpl(resolver, ErrorCause.UNKNOWN_ERROR - , source, errorCodeWith("Unknown Error", code) + , source, errorCodeWith("Unknown Error", responseCode) ); } } - private static String errorCodeWith(String message, int code) + private static String errorCodeWith(String message, StatusCode code) { return message + "(The server responded with " + code + ")"; } diff --git a/KPMTasks/pom.xml b/KPMTasks/pom.xml index f2808762..d04849b7 100644 --- a/KPMTasks/pom.xml +++ b/KPMTasks/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 ../pom.xml @@ -18,24 +18,37 @@ UTF-8 + + + minecraft-libraries + Minecraft Libraries + https://libraries.minecraft.net/ + + + org.kunlab.kpm KPMCommon - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMModels - 3.0.0 + 3.0.1 provided org.kunlab.kpm KPMHooks - 3.0.0 + 3.0.1 provided + + com.mojang + brigadier + 1.0.500 + diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/AbstractInstallTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/AbstractInstallTask.java index 506b052a..7d752d8d 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/AbstractInstallTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/AbstractInstallTask.java @@ -4,8 +4,8 @@ import net.kunmc.lab.peyangpaperutils.lib.utils.Runner; import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.installer.interfaces.InstallProgress; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.signal.Signal; import org.kunlab.kpm.signal.SignalHandleManager; import org.kunlab.kpm.task.interfaces.InstallTask; @@ -22,7 +22,7 @@ public abstract class AbstractInstallTask, ? extends PluginInstaller, ? extends Enum>> progress; + protected final InstallProgress, ? extends Installer, ? extends Enum>> progress; @NotNull private final SignalHandleManager signalHandler; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/TaskChain.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/TaskChain.java index e66d0583..e441a53e 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/TaskChain.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/TaskChain.java @@ -4,8 +4,8 @@ import lombok.Setter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.interfaces.InstallTask; import org.kunlab.kpm.task.interfaces.TaskArgument; import org.kunlab.kpm.task.interfaces.TaskResult; @@ -37,7 +37,7 @@ public class TaskChain< private final IS installerState; @NotNull - private final PluginInstaller, IS> installer; + private final Installer, IS> installer; @Nullable @Setter(AccessLevel.NONE) @@ -47,7 +47,7 @@ public class TaskChain< private TaskChain next; @Nullable - private Function argumentBuilder; + private Function argumentBuilder; /** * {@link TaskChain} を生成します。 @@ -58,7 +58,7 @@ public class TaskChain< * @param installer インストーラ */ public TaskChain(@NotNull T task, @NotNull IS installerState, @Nullable TaskChain first, - @NotNull PluginInstaller, IS> installer) + @NotNull Installer, IS> installer) { this.task = task; this.installerState = installerState; @@ -73,7 +73,7 @@ public TaskChain(@NotNull T task, @NotNull IS installerState, @Nullable TaskChai * @param installerState 設定するインストーラの状態 * @param installer インストーラ */ - public TaskChain(@NotNull T task, @NotNull IS installerState, @NotNull PluginInstaller, IS> installer) + public TaskChain(@NotNull T task, @NotNull IS installerState, @NotNull Installer, IS> installer) { this(task, installerState, null, installer); this.first = this; @@ -102,7 +102,7 @@ public TaskChain(@NotNull T task, @NotNull IS installerState, @NotNull PluginIns * @param argumentBuilder 前のタスクの {@link TaskResult} を引数にして、次のタスクの引数を生成する関数 * @return この{@link TaskChain} */ - public TaskChain bridgeArgument(@NotNull Function argumentBuilder) + public TaskChain bridgeArgument(@NotNull Function argumentBuilder) { this.argumentBuilder = argumentBuilder; return this; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/CommandsPatcher.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/loader/CommandsPatcher.java similarity index 83% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/CommandsPatcher.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/loader/CommandsPatcher.java index 886e73eb..89889905 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/CommandsPatcher.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/loader/CommandsPatcher.java @@ -1,6 +1,9 @@ -package org.kunlab.kpm.task; +package org.kunlab.kpm.task.loader; import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.tree.ArgumentCommandNode; +import com.mojang.brigadier.tree.CommandNode; +import com.mojang.brigadier.tree.LiteralCommandNode; import lombok.SneakyThrows; import org.bukkit.Bukkit; import org.bukkit.command.Command; @@ -36,6 +39,12 @@ public class CommandsPatcher private Field fCommandMap; // Lorg/bukkit/craftbukkit//CraftServer; // ->org/bukkit/command/SimpleCommandMap; commandMap; + private Field fChildren; // Lcom/mojang/brigadier/tree/CommandNode; + // ->java/util/Map; children; + private Field fLiterals; // Lcom/mojang/brigadier/tree/CommandNode; + // ->java/util/Map; literals; + private Field fArguments; // Lcom/mojang/brigadier/tree/CommandNode; + // ->java/util/Map; arguments; /** * BukkitCommandWrapperのコンストラクタ。 @@ -154,6 +163,42 @@ private void initReflections() { throw new IllegalStateException(generateFailedMessage("Failed to get commandMap field"), e); } + + // Get brigadier field(s) + try + { + this.fChildren = ReflectionUtils.getAccessibleField(CommandNode.class, true, "children"); + this.fLiterals = ReflectionUtils.getAccessibleField(CommandNode.class, true, "literals"); + this.fArguments = ReflectionUtils.getAccessibleField(CommandNode.class, true, "arguments"); + } + catch (NoSuchFieldException e) + { + throw new IllegalStateException(generateFailedMessage("Failed to get brigadier field(s)."), e); + } + } + + @SuppressWarnings("unchecked") + private void removeCommandFromNode(CommandNode commandNode, String commandName) + { + try + { + CommandNode child = commandNode.getChild(commandName); + if (child == null) + return; + + if (child instanceof LiteralCommandNode) + ((Map>) this.fLiterals.get(commandNode)) + .remove(commandName); + else if (child instanceof ArgumentCommandNode) + ((Map>) this.fArguments.get(commandNode)) + .remove(commandName); + + ((Map>) this.fChildren.get(commandNode)).remove(commandName); + } + catch (IllegalAccessException e) + { + throw new RuntimeException(e); + } } /** @@ -213,7 +258,7 @@ public void syncCommandsCraftBukkit() public void unWrapCommand(String command) { - this.iBrigadierCommandDispatcher.getRoot().removeCommand(command); + this.removeCommandFromNode(this.iBrigadierCommandDispatcher.getRoot(), command); } /** diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/PluginLoaderImpl.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/loader/PluginLoaderImpl.java similarity index 96% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/PluginLoaderImpl.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/loader/PluginLoaderImpl.java index 4f5f77d6..e0a13c0d 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/PluginLoaderImpl.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/loader/PluginLoaderImpl.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task; +package org.kunlab.kpm.task.loader; import lombok.SneakyThrows; import net.kunmc.lab.peyangpaperutils.lib.utils.Runner; @@ -172,12 +172,12 @@ private void unloadClasses(Plugin plugin) } catch (IllegalAccessException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); this.registry.getLogger().warning("Unable to unload classes of plugin " + plugin.getName()); } catch (IOException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); this.registry.getLogger().warning("Unable to close class loader of plugin " + plugin.getName()); } @@ -221,13 +221,13 @@ private void removePluginCommands(Plugin plugin) } catch (IllegalAccessException e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); } catch (IllegalStateException e) { if (!e.getMessage().equals("zip file closed")) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); continue; } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadResult.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadResult.java index 1ddc709f..13c2b57b 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadResult.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadResult.java @@ -9,7 +9,7 @@ import java.net.URI; import java.nio.file.Path; -import java.util.HashMap; +import java.util.Map; /** * ソースファイルのダウンロードを行うタスクの結果です。 @@ -21,10 +21,10 @@ public class SourceDownloadResult extends AbstractTaskResult> downloadedSources; + Map> downloadedSources; public SourceDownloadResult(boolean success, @NotNull SourceDownloadState state, - @Nullable SourceDownloadErrorCause errorCause, HashMap> downloadedSources) + @Nullable SourceDownloadErrorCause errorCause, Map> downloadedSources) { super(success, state, errorCause); this.downloadedSources = downloadedSources; @@ -35,7 +35,7 @@ public SourceDownloadResult(boolean success, @NotNull SourceDownloadState state, this(success, state, errorCause, null); } - public SourceDownloadResult(boolean success, @NotNull SourceDownloadState state, HashMap> downloadedSources) + public SourceDownloadResult(boolean success, @NotNull SourceDownloadState state, Map> downloadedSources) { this(success, state, null, downloadedSources); } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadTask.java index 4b541e26..fcc20303 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadTask.java @@ -2,8 +2,8 @@ import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; import org.jetbrains.annotations.NotNull; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.task.tasks.alias.source.download.signals.MalformedURLSignal; import org.kunlab.kpm.task.tasks.alias.source.download.signals.SourceDownloadFailedSignal; @@ -26,7 +26,7 @@ public class SourceDownloadTask extends AbstractInstallTask, ? extends Enum> installer) + public SourceDownloadTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); @@ -42,10 +42,10 @@ private static boolean isProtocolSupported(String protocolName) public @NotNull SourceDownloadResult runTask(@NotNull SourceDownloadArgument arguments) { this.status = SourceDownloadState.ANALYZING_URLS; - HashMap remotes = this.buildURLs(arguments.getRemotes()); + Map remotes = this.buildURLs(arguments.getRemotes()); this.status = SourceDownloadState.DOWNLOADING_SOURCES; - HashMap> downloadSources = this.downloadSources(remotes); + Map> downloadSources = this.downloadSources(remotes); if (downloadSources.isEmpty()) return new SourceDownloadResult(false, this.status, SourceDownloadErrorCause.ALL_DOWNLOAD_FAILED); @@ -53,9 +53,9 @@ private static boolean isProtocolSupported(String protocolName) return new SourceDownloadResult(true, this.status, downloadSources); } - private HashMap buildURLs(Map sources) + private Map buildURLs(Map sources) { - HashMap result = new HashMap<>(); + Map result = new HashMap<>(); for (String remoteName : sources.keySet()) { @@ -97,9 +97,9 @@ private URI buildURI(String fallbackName, String urlString) return url; } - private HashMap> downloadSources(HashMap remotes) + private Map> downloadSources(Map remotes) { - HashMap> result = new HashMap<>(); + Map> result = new HashMap<>(); for (String remoteName : remotes.keySet()) { diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesArgument.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesArgument.java index a3eac475..f9a9f009 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesArgument.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesArgument.java @@ -7,7 +7,7 @@ import java.net.URI; import java.nio.file.Path; -import java.util.HashMap; +import java.util.Map; /** * エイリアスのアップデートを行うタスクの引数です。 @@ -20,5 +20,5 @@ public class UpdateAliasesArgument implements TaskArgument * エイリアスのソースファイルの名前とペアのマップです。 * ペアの左辺はリモートのURL、右辺はローカルのパスです。 */ - HashMap> sources; + Map> sources; } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesResult.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesResult.java index 70f1dad6..3c7f49e4 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesResult.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesResult.java @@ -6,7 +6,7 @@ import org.jetbrains.annotations.Nullable; import org.kunlab.kpm.task.AbstractTaskResult; -import java.util.HashMap; +import java.util.Map; /** * エイリアスのアップデートを行うタスクの結果です。 @@ -17,10 +17,10 @@ public class UpdateAliasesResult extends AbstractTaskResult aliasesCountBySource; + Map aliasesCountBySource; public UpdateAliasesResult(boolean success, @NotNull UpdateAliasesState state, @Nullable UpdateAliasesErrorCause errorCause, - boolean warn, long aliasesCount, HashMap aliasesCountBySource) + boolean warn, long aliasesCount, Map aliasesCountBySource) { super(success, state, errorCause); this.warn = warn; @@ -29,7 +29,7 @@ public UpdateAliasesResult(boolean success, @NotNull UpdateAliasesState state, @ } public UpdateAliasesResult(boolean success, @NotNull UpdateAliasesState state, - boolean warn, long aliasesCount, HashMap aliasesCountBySource) + boolean warn, long aliasesCount, Map aliasesCountBySource) { this(success, state, null, warn, aliasesCount, aliasesCountBySource); } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesTask.java index b9753611..ad096a51 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesTask.java @@ -6,8 +6,8 @@ import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.alias.interfaces.AliasUpdater; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.task.tasks.alias.update.signals.AliasUpdateSignal; @@ -32,7 +32,7 @@ public class UpdateAliasesTask extends AbstractInstallTask, ? extends Enum> installer) + public UpdateAliasesTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); this.registry = installer.getRegistry(); @@ -43,9 +43,9 @@ public UpdateAliasesTask(@NotNull PluginInstaller> sources = arguments.getSources(); + Map> sources = arguments.getSources(); - HashMap aliasesOfSources = new HashMap<>(); + Map aliasesOfSources = new HashMap<>(); long total = 0; boolean isWarn = false; @@ -96,7 +96,7 @@ private long updateAliasesFromSource(String sourceName, URI uri, Path source) jsonReader.beginObject(); while (jsonReader.hasNext()) { - if (jsonReader.peek().equals(JsonToken.END_OBJECT)) + if (jsonReader.peek() == JsonToken.END_OBJECT) break; String aliasName = jsonReader.nextName(); @@ -127,7 +127,7 @@ private long updateAliasesFromSource(String sourceName, URI uri, Path source) this.postSignal(new InvalidSourceSignal(sourceName, source, uri.toString(), InvalidSourceSignal.ErrorCause.IO_ERROR )); - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); updater.cancel(); return -1; } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/DependencyElementImpl.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/DependencyElementImpl.java similarity index 82% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/DependencyElementImpl.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/DependencyElementImpl.java index 620cd288..580481e0 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/DependencyElementImpl.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/DependencyElementImpl.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies; +package org.kunlab.kpm.task.tasks.dependencies; import lombok.AllArgsConstructor; import lombok.Value; @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.kunlab.kpm.kpminfo.KPMInformationFile; +import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; import java.nio.file.Path; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectArgument.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectArgument.java similarity index 96% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectArgument.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectArgument.java index 18cd1ae6..71c3d017 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectArgument.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectArgument.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector; +package org.kunlab.kpm.task.tasks.dependencies.collector; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectErrorCause.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectErrorCause.java similarity index 78% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectErrorCause.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectErrorCause.java index c2112e66..869d217c 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectErrorCause.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectErrorCause.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector; +package org.kunlab.kpm.task.tasks.dependencies.collector; /** * 依存関係の取得に失敗した理由を表します。 diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectResult.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectResult.java similarity index 96% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectResult.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectResult.java index d6c6be67..db0fd160 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectResult.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectResult.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector; +package org.kunlab.kpm.task.tasks.dependencies.collector; import lombok.EqualsAndHashCode; import lombok.Value; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectState.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectState.java similarity index 90% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectState.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectState.java index 001dc33f..42e54888 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectState.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectState.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector; +package org.kunlab.kpm.task.tasks.dependencies.collector; /** * 依存関係取得の状態を表す列挙型です。 diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectStatusImpl.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectStatusImpl.java similarity index 86% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectStatusImpl.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectStatusImpl.java index a5704b15..9a6fcd2c 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectStatusImpl.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectStatusImpl.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector; +package org.kunlab.kpm.task.tasks.dependencies.collector; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -6,9 +6,10 @@ import lombok.Getter; import org.jetbrains.annotations.NotNull; import org.kunlab.kpm.installer.interfaces.InstallProgress; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; +import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectStatus; import java.util.HashMap; import java.util.List; @@ -24,12 +25,12 @@ public class DependsCollectStatusImpl implements DependsCollectStatus private final String installId; @NotNull @Getter(AccessLevel.PRIVATE) - private final HashMap enumeratedDependencies; + private final Map enumeratedDependencies; @NotNull private String pluginName; - public DependsCollectStatusImpl(InstallProgress, ? extends PluginInstaller, ? extends Enum>> progress) + public DependsCollectStatusImpl(InstallProgress, ? extends Installer, ? extends Enum>> progress) { this.installId = progress.getInstallActionID(); this.enumeratedDependencies = new HashMap<>(); diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectTask.java similarity index 84% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectTask.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectTask.java index cb878f36..299a04f4 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/DependsCollectTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectTask.java @@ -1,11 +1,11 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector; +package org.kunlab.kpm.task.tasks.dependencies.collector; import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; import org.bukkit.plugin.PluginDescriptionFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.installer.signals.InvalidKPMInfoFileSignal; import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.kpminfo.InvalidInformationFileException; @@ -15,15 +15,16 @@ import org.kunlab.kpm.resolver.interfaces.result.SuccessResult; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; -import org.kunlab.kpm.task.interfaces.dependencies.DependencyElementImpl; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyCollectDependencysDependsFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyDownloadFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyLoadDescriptionFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyNameMismatchSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependencyResolveFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependsCollectFailedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependsDownloadFinishedSignal; -import org.kunlab.kpm.task.interfaces.dependencies.collector.signals.DependsEnumeratedSignal; +import org.kunlab.kpm.task.interfaces.dependencies.collector.DependsCollectStatus; +import org.kunlab.kpm.task.tasks.dependencies.DependencyElementImpl; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyCollectDependencysDependsFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyDownloadFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyLoadDescriptionFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyNameMismatchSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependencyResolveFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependsCollectFailedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependsDownloadFinishedSignal; +import org.kunlab.kpm.task.tasks.dependencies.collector.signals.DependsEnumeratedSignal; import org.kunlab.kpm.task.tasks.download.DownloadArgument; import org.kunlab.kpm.task.tasks.download.DownloadResult; import org.kunlab.kpm.task.tasks.download.DownloadTask; @@ -63,7 +64,7 @@ public class DependsCollectTask extends AbstractInstallTask, ? extends Enum> installer) + public DependsCollectTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); @@ -112,7 +113,7 @@ private static Map buildQueryContext(@NotNull List .filter(dependency -> !arguments.getAlreadyInstalledPlugins().contains(dependency)) .forEach(this.status::addDependency); - HashMap resolvedResults; + Map resolvedResults; // region Resolve dependencies this.taskState = DependsCollectState.RESOLVING_DEPENDS; @@ -120,7 +121,7 @@ private static Map buildQueryContext(@NotNull List resolvedResults.entrySet().removeIf(entry -> !(entry.getValue() instanceof SuccessResult)); // Remove failures // endregion - HashMap downloadResults; + Map downloadResults; // region Download dependencies this.taskState = DependsCollectState.DOWNLOADING_DEPENDS; @@ -131,7 +132,7 @@ private static Map buildQueryContext(@NotNull List // region Collect dependency's dependencies (Recursive via collectDependsDepends) this.taskState = DependsCollectState.COLLECTING_DEPENDS_DEPENDS; - HashMap dependsDescriptions = this.downloadResultsToDependencyElement(downloadResults); + Map dependsDescriptions = this.downloadResultsToDependencyElement(downloadResults); // Remove failed dependencies from load description results dependsDescriptions.entrySet().removeIf(entry -> entry.getValue() == null); @@ -187,9 +188,9 @@ private DependsCollectResult passCollector(@NotNull PluginDescriptionFile plugin .runTask(arguments); } - private void collectDependsDepends(@NotNull HashMap dependencies, + private void collectDependsDepends(@NotNull Map dependencies, @NotNull List alreadyCollectedPlugins, - @NotNull Map parentSources) + @NotNull Map parentSources) { List alreadyCollected = new ArrayList<>(alreadyCollectedPlugins); @@ -227,15 +228,15 @@ private PluginDescriptionFile downloadResultToPluginDescriptionFile(@NotNull Dow } catch (Exception e) { - e.printStackTrace(); + this.registry.getExceptionHandler().report(e); return null; } } - private HashMap downloadResultsToDependencyElement( + private Map downloadResultsToDependencyElement( @NotNull Map downloadResults) { - HashMap dependencyElements = new HashMap<>(); + Map dependencyElements = new HashMap<>(); for (Map.Entry entry : downloadResults.entrySet()) { @@ -286,7 +287,7 @@ private DownloadResult passDownloader(@NotNull String url) .runTask(argument); } - private HashMap downloadDepends(@NotNull HashMap resolvedPlugins) + private Map downloadDepends(@NotNull Map resolvedPlugins) { Map downloadResults = resolvedPlugins.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, entry -> { @@ -299,9 +300,9 @@ private HashMap downloadDepends(@NotNull HashMap this.postSignal( new DependencyDownloadFailedSignal(entry.getKey(), entry.getValue().getUrl()))); - HashMap downloadResultsCopy = new HashMap<>(downloadResults); + Map downloadResultsCopy = new HashMap<>(downloadResults); - this.postSignal(new DependsDownloadFinishedSignal((HashMap) downloadResults)); + this.postSignal(new DependsDownloadFinishedSignal(downloadResults)); return new HashMap<>(downloadResultsCopy); } @@ -314,8 +315,8 @@ private PluginResolveResult passResolver(@NotNull QueryContext query) .runTask(resolveArgument); } - private HashMap resolveDepends(@NotNull Map dependencies, - @NotNull List alreadyInstalledPlugins) + private Map resolveDepends(@NotNull Map dependencies, + @NotNull List alreadyInstalledPlugins) { Map resolveResults = new HashMap<>(dependencies.entrySet().stream() .filter(dependency -> !alreadyInstalledPlugins.contains(dependency.getKey())) diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyCollectDependencysDependsFailedSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectDependencysDependsFailedSignal.java similarity index 89% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyCollectDependencysDependsFailedSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectDependencysDependsFailedSignal.java index 35c8fc41..de83bc3e 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyCollectDependencysDependsFailedSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectDependencysDependsFailedSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; import lombok.EqualsAndHashCode; import lombok.Value; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyCollectFailedSignalBase.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectFailedSignalBase.java similarity index 88% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyCollectFailedSignalBase.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectFailedSignalBase.java index 4b55d25d..33271ef8 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyCollectFailedSignalBase.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectFailedSignalBase.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyDownloadFailedSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyDownloadFailedSignal.java similarity index 88% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyDownloadFailedSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyDownloadFailedSignal.java index b609bb2a..c30165c9 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyDownloadFailedSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyDownloadFailedSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; import lombok.Getter; import org.jetbrains.annotations.NotNull; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyLoadDescriptionFailedSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyLoadDescriptionFailedSignal.java similarity index 82% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyLoadDescriptionFailedSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyLoadDescriptionFailedSignal.java index 3b40165d..6550781d 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyLoadDescriptionFailedSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyLoadDescriptionFailedSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; /** * 依存関係のプラグイン情報ファイルの読み込みに失敗したことを示すシグナルです。 diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyNameMismatchSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyNameMismatchSignal.java similarity index 92% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyNameMismatchSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyNameMismatchSignal.java index 34355eb9..ccdd227c 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyNameMismatchSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyNameMismatchSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; import lombok.Getter; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyResolveFailedSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyResolveFailedSignal.java similarity index 80% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyResolveFailedSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyResolveFailedSignal.java index 40e5b13f..4e6159d3 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependencyResolveFailedSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyResolveFailedSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; /** * 依存関係の解決に失敗したことを示すシグナルです。 diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsCollectFailedSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsCollectFailedSignal.java similarity index 89% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsCollectFailedSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsCollectFailedSignal.java index 08e3eaa1..661c921f 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsCollectFailedSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsCollectFailedSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; import lombok.EqualsAndHashCode; import lombok.Value; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsDownloadFinishedSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsDownloadFinishedSignal.java similarity index 76% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsDownloadFinishedSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsDownloadFinishedSignal.java index 241a412a..88168800 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsDownloadFinishedSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsDownloadFinishedSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; import lombok.EqualsAndHashCode; import lombok.Value; @@ -6,7 +6,7 @@ import org.kunlab.kpm.signal.Signal; import org.kunlab.kpm.task.tasks.download.DownloadResult; -import java.util.HashMap; +import java.util.Map; /** * 依存関係のダウンロードがすべて完了したことを示すシグナルです。 @@ -19,5 +19,5 @@ public class DependsDownloadFinishedSignal extends Signal * ダウンロード結果です。 */ @NotNull - HashMap downloads; + Map downloads; } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsEnumeratedSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsEnumeratedSignal.java similarity index 90% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsEnumeratedSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsEnumeratedSignal.java index ca61625b..56084a64 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/collector/signals/DependsEnumeratedSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsEnumeratedSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.collector.signals; +package org.kunlab.kpm.task.tasks.dependencies.collector.signals; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderArgument.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderArgument.java similarity index 89% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderArgument.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderArgument.java index 7d16f068..52d06bb1 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderArgument.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderArgument.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.computer; +package org.kunlab.kpm.task.tasks.dependencies.computer; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderErrorCause.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderErrorCause.java similarity index 72% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderErrorCause.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderErrorCause.java index 033cde47..14ee88b0 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderErrorCause.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderErrorCause.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.computer; +package org.kunlab.kpm.task.tasks.dependencies.computer; /** * 依存関係の読み込み順序を計算する際に発生したエラーの原因を表します。 diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderResult.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderResult.java similarity index 94% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderResult.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderResult.java index f33abd31..5ed13503 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderResult.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderResult.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.computer; +package org.kunlab.kpm.task.tasks.dependencies.computer; import lombok.Getter; import org.jetbrains.annotations.NotNull; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderState.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderState.java similarity index 89% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderState.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderState.java index 742a662e..6db6fd1d 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderState.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderState.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.computer; +package org.kunlab.kpm.task.tasks.dependencies.computer; /** * 依存関係の読み込み順序計算の状態を表す列挙型です。 diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderTask.java similarity index 91% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderTask.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderTask.java index fd6c38e6..8e46d246 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/DependsComputeOrderTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderTask.java @@ -1,13 +1,13 @@ -package org.kunlab.kpm.task.interfaces.dependencies.computer; +package org.kunlab.kpm.task.tasks.dependencies.computer; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginDescriptionFile; import org.jetbrains.annotations.NotNull; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; -import org.kunlab.kpm.task.interfaces.dependencies.computer.signals.DependsLoadOrderComputingSignal; +import org.kunlab.kpm.task.tasks.dependencies.computer.signals.DependsLoadOrderComputingSignal; import java.io.File; import java.util.ArrayList; @@ -27,21 +27,21 @@ public class DependsComputeOrderTask extends AbstractInstallTask, ? extends Enum> installer) + public DependsComputeOrderTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); this.state = DependsComputeOrderState.INITIALIZED; } - private static DependencyElement get(String name, List plugins) + private static DependencyElement get(String name, List plugins) { return plugins.stream().parallel() .filter(plugin -> plugin.getPluginDescription().getName().equals(name)) .findFirst().orElse(null); } - private static boolean contains(String name, List plugins) + private static boolean contains(String name, List plugins) { return get(name, plugins) != null; } @@ -91,7 +91,7 @@ private static boolean isInstalled(String name) this.state = DependsComputeOrderState.COMPUTING_DEPENDENCY_LOAD_ORDER; - ArrayList result = new ArrayList<>(); + List result = new ArrayList<>(); List last = new ArrayList<>(); while (!plugins.isEmpty()) diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/signals/DependsLoadOrderComputingSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/signals/DependsLoadOrderComputingSignal.java similarity index 91% rename from KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/signals/DependsLoadOrderComputingSignal.java rename to KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/signals/DependsLoadOrderComputingSignal.java index a3567ab0..4264e9ad 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/computer/signals/DependsLoadOrderComputingSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/signals/DependsLoadOrderComputingSignal.java @@ -1,4 +1,4 @@ -package org.kunlab.kpm.task.interfaces.dependencies.computer.signals; +package org.kunlab.kpm.task.tasks.dependencies.computer.signals; import lombok.Data; import lombok.EqualsAndHashCode; @@ -28,7 +28,7 @@ public class DependsLoadOrderComputingSignal extends Signal */ public static class Pre extends DependsLoadOrderComputingSignal { - public Pre(final List dependencies) + public Pre(final List dependencies) { super(Collections.unmodifiableList(dependencies)); } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadTask.java index 6ee53c17..312a7369 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadTask.java @@ -3,8 +3,8 @@ import org.bukkit.plugin.InvalidDescriptionException; import org.bukkit.plugin.PluginDescriptionFile; import org.jetbrains.annotations.NotNull; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.task.tasks.description.signals.LoadPluginDescriptionSignal; import org.kunlab.kpm.utils.PluginUtil; @@ -19,7 +19,7 @@ public class DescriptionLoadTask extends AbstractInstallTask, ? extends Enum> installer) + public DescriptionLoadTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); this.taskState = DescriptionLoadState.INITIALIZED; @@ -47,7 +47,7 @@ public DescriptionLoadTask(@NotNull PluginInstaller, ? extends Enum> installer) + public DownloadTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); @@ -83,7 +83,7 @@ private void onDownload(DownloadProgress downloadProgress, String url) if (e.getMessage().startsWith("HTTP error ")) { cause = DownloadErrorCause.ILLEGAL_HTTP_RESPONSE; - signalValue = e.getMessage().substring(11); + signalValue = e.getMessage().substring("HTTP error ".length()); } else if (e.getMessage().startsWith("No response body was returned")) { diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanResult.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanResult.java index ad41950c..b2b2c57b 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanResult.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanResult.java @@ -7,7 +7,7 @@ import org.kunlab.kpm.task.AbstractTaskResult; import java.nio.file.Path; -import java.util.HashMap; +import java.util.Map; /** * 不要なデータの削除を行うタスクの結果です。 @@ -19,9 +19,9 @@ public class GarbageCleanResult extends AbstractTaskResult deletedGarbage; + Map deletedGarbage; - public GarbageCleanResult(boolean success, @NotNull GarbageCleanState state, @Nullable GarbageCleanErrorCause errorCause, HashMap deletedGarbage) + public GarbageCleanResult(boolean success, @NotNull GarbageCleanState state, @Nullable GarbageCleanErrorCause errorCause, Map deletedGarbage) { super(success, state, errorCause); this.deletedGarbage = deletedGarbage; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanTask.java index b19cc3d2..49bdc2cb 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanTask.java @@ -2,8 +2,8 @@ import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils; import org.jetbrains.annotations.NotNull; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.task.tasks.garbage.clean.signal.GarbageDeleteSkippedSignal; import org.kunlab.kpm.task.tasks.garbage.clean.signal.GarbageDeletingSignal; @@ -14,6 +14,7 @@ import java.nio.file.Path; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 不要なデータの削除を行うタスクです。 @@ -22,7 +23,7 @@ public class GarbageCleanTask extends AbstractInstallTask, ? extends Enum> installer) + public GarbageCleanTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); @@ -33,7 +34,7 @@ public GarbageCleanTask(@NotNull PluginInstaller paths = arguments.getPaths(); - HashMap result = new HashMap<>(); + Map result = new HashMap<>(); if (arguments.getPaths().isEmpty()) return new GarbageCleanResult(false, this.status, diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchTask.java index b970a67e..873a8b5c 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchTask.java @@ -1,8 +1,8 @@ package org.kunlab.kpm.task.tasks.garbage.search; import org.jetbrains.annotations.NotNull; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.task.tasks.garbage.search.signals.GarbageSearchingSignal; @@ -20,7 +20,7 @@ public class GarbageSearchTask extends AbstractInstallTask, ? extends Enum> installer) + public GarbageSearchTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/PluginsInstallTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/PluginsInstallTask.java index 60139100..e3060e53 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/PluginsInstallTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/PluginsInstallTask.java @@ -12,16 +12,16 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.kunlab.kpm.hook.hooks.PluginInstalledHook; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.kpminfo.KPMInformationFile; import org.kunlab.kpm.meta.InstallOperator; import org.kunlab.kpm.meta.interfaces.PluginMetaManager; import org.kunlab.kpm.meta.interfaces.PluginMetaProvider; import org.kunlab.kpm.task.AbstractInstallTask; -import org.kunlab.kpm.task.CommandsPatcher; import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; +import org.kunlab.kpm.task.loader.CommandsPatcher; import org.kunlab.kpm.task.tasks.install.signals.PluginEnablingSignal; import org.kunlab.kpm.task.tasks.install.signals.PluginIncompatibleWithKPMSignal; import org.kunlab.kpm.task.tasks.install.signals.PluginInstallingSignal; @@ -53,7 +53,7 @@ public class PluginsInstallTask extends AbstractInstallTask, ? extends Enum> installer) + public PluginsInstallTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); @@ -70,7 +70,7 @@ public PluginsInstallTask(@NotNull PluginInstaller targets) + private void patchPluginCommands(List targets) { targets.forEach(plugin -> this.commandsPatcher.patchCommand(plugin, false)); @@ -173,6 +173,7 @@ private PluginsInstallResult installOne(@NotNull Path path, @NotNull PluginDescr installedPlugins ); + KPMRegistry registry = this.progress.getInstaller().getRegistry(); Plugin target; try { @@ -193,17 +194,17 @@ private PluginsInstallResult installOne(@NotNull Path path, @NotNull PluginDescr } catch (InvalidDescriptionException e) { - e.printStackTrace(); + registry.getExceptionHandler().report(e); return new PluginsInstallResult(false, this.state, PluginsInstallErrorCause.INVALID_PLUGIN_DESCRIPTION); } catch (InvalidPluginException e) { - e.printStackTrace(); + registry.getExceptionHandler().report(e); return new PluginsInstallResult(false, this.state, PluginsInstallErrorCause.INVALID_PLUGIN); } catch (Exception e) { - e.printStackTrace(); + registry.getExceptionHandler().report(e); return new PluginsInstallResult(false, this.state, PluginsInstallErrorCause.EXCEPTION_OCCURRED); } @@ -283,28 +284,28 @@ private boolean moveFile(@NotNull Path source, @NotNull Path target, boolean ove @Nullable private PluginsInstallResult movePlugin(@NotNull Path source, @NotNull Path target) { + KPMRegistry registry = this.progress.getInstaller().getRegistry(); + PluginRelocatingSignal signal = new PluginRelocatingSignal(source, target); this.postSignal(signal); - target = signal.getTarget(); // May be changed by signal + Path actualTarget = signal.getTarget(); // May be changed by signal try { - if (!this.moveFile(source, target, false)) + if (!this.moveFile(source, actualTarget, false)) return new PluginsInstallResult(false, this.state, PluginsInstallErrorCause.RELOCATE_FAILED); else return null; } catch (IOException e) { - e.printStackTrace(); - + registry.getExceptionHandler().report(e); return new PluginsInstallResult(false, this.state, PluginsInstallErrorCause.IO_EXCEPTION_OCCURRED); } catch (Exception e) { - e.printStackTrace(); - + registry.getExceptionHandler().report(e); return new PluginsInstallResult(false, this.state, PluginsInstallErrorCause.RELOCATE_FAILED); } } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupResult.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupResult.java index 4e788d2a..b4ed0e99 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupResult.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupResult.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable; import org.kunlab.kpm.task.AbstractTaskResult; -import java.util.LinkedHashMap; +import java.util.Map; /** * プラグインの検索を行うタスクの結果です。 @@ -18,11 +18,12 @@ public class LookupResult extends AbstractTaskResult plugins; + Map<@NotNull String, @Nullable Plugin> plugins; - public LookupResult(boolean success, @NotNull LookupState state, @NotNull LinkedHashMap plugins) + public LookupResult(boolean success, @NotNull LookupState state, @NotNull Map plugins) { super(success, state, null); this.plugins = plugins; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/PluginLookupTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/PluginLookupTask.java index 1962dc19..22638cda 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/PluginLookupTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/PluginLookupTask.java @@ -4,8 +4,8 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.resolver.QueryContext; import org.kunlab.kpm.task.AbstractInstallTask; import org.kunlab.kpm.utils.KPMCollectors; @@ -13,6 +13,7 @@ import java.util.Arrays; import java.util.LinkedHashMap; +import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; /** @@ -23,14 +24,14 @@ public class PluginLookupTask extends AbstractInstallTask, ? extends Enum> installer) + public PluginLookupTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); this.state = LookupState.INITIALIZED; } - private static LinkedHashMap lookupAll(QueryContext[] queries, String[] queryStrings) + private static Map lookupAll(QueryContext[] queries, String[] queryStrings) { AtomicInteger count = new AtomicInteger(0); return Arrays.stream(queries) @@ -86,7 +87,7 @@ private static QueryContext[] parseQueries(String[] queries) return new LookupResult(false, this.state, LookupErrorCause.INVALID_QUERY); this.state = LookupState.PLUGIN_LOOKUP; - LinkedHashMap result = lookupAll(queries, queryStrs); + Map result = lookupAll(queries, queryStrs); return new LookupResult(true, this.state, result); } diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveTask.java index 9e29df02..b4d94171 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveTask.java @@ -2,8 +2,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.resolver.interfaces.PluginResolver; import org.kunlab.kpm.resolver.interfaces.result.ErrorResult; import org.kunlab.kpm.resolver.interfaces.result.MultiResult; @@ -23,7 +23,7 @@ public class PluginResolveTask extends AbstractInstallTask, ? extends Enum> installer) + public PluginResolveTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); this.resolver = installer.getRegistry().getPluginResolver(); diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/UnInstallTask.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/UnInstallTask.java index 8d6dc6b2..2030c2a6 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/UnInstallTask.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/UnInstallTask.java @@ -15,14 +15,15 @@ import org.bukkit.plugin.java.PluginClassLoader; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.kunlab.kpm.ExceptionHandler; import org.kunlab.kpm.hook.hooks.PluginUninstallHook; import org.kunlab.kpm.hook.hooks.RecipesUnregisteringHook; +import org.kunlab.kpm.installer.interfaces.Installer; import org.kunlab.kpm.installer.interfaces.InstallerArgument; -import org.kunlab.kpm.installer.interfaces.PluginInstaller; import org.kunlab.kpm.interfaces.KPMRegistry; import org.kunlab.kpm.kpminfo.KPMInformationFile; import org.kunlab.kpm.task.AbstractInstallTask; -import org.kunlab.kpm.task.CommandsPatcher; +import org.kunlab.kpm.task.loader.CommandsPatcher; import org.kunlab.kpm.task.tasks.uninstall.signals.PluginDisablingSignal; import org.kunlab.kpm.task.tasks.uninstall.signals.PluginIsDependencySignal; import org.kunlab.kpm.task.tasks.uninstall.signals.PluginRegisteredRecipeSignal; @@ -39,6 +40,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -51,6 +53,8 @@ */ public class UnInstallTask extends AbstractInstallTask { + private static final long DELETE_DELAY = 20L; // tick + private static final PluginManager PLUGIN_MANAGER; private static final CommandsPatcher COMMANDS_PATCHER; @@ -89,17 +93,19 @@ public class UnInstallTask extends AbstractInstallTask uninstalledPlugins; private final List disabledDependencyPlugins; private final Map unloadedPlugins; private UninstallState taskState; - public UnInstallTask(@NotNull PluginInstaller, ? extends Enum> installer) + public UnInstallTask(@NotNull Installer, ? extends Enum> installer) { super(installer.getProgress(), installer.getProgress().getSignalHandler()); this.registry = installer.getRegistry(); + this.exceptionHandler = this.registry.getExceptionHandler(); this.uninstalledPlugins = new ArrayList<>(); this.disabledDependencyPlugins = new ArrayList<>(); this.unloadedPlugins = new HashMap<>(); @@ -165,7 +171,7 @@ else if (errorCause == UninstallErrorCause.INTERNAL_DISABLE_AND_UNINSTALL_OK) File pluginFile = PluginUtil.getFile(plugin); if (isFileDel && pluginFile.exists()) pluginFile.delete(); - }), 20L); + }), DELETE_DELAY); orderedUninstallTargets.stream() .map(Plugin::getDescription) @@ -223,13 +229,13 @@ private void removePluginCommands(Plugin plugin) } catch (IllegalAccessException e) { - e.printStackTrace(); + this.exceptionHandler.report(e); } catch (IllegalStateException e) { if (!e.getMessage().equals("zip file closed")) { - e.printStackTrace(); + this.exceptionHandler.report(e); continue; } @@ -257,7 +263,7 @@ private UninstallErrorCause disableOnePlugin(@NotNull Plugin plugin, @Nullable K } catch (Exception ex) { - ex.printStackTrace(); + this.exceptionHandler.report(ex); return UninstallErrorCause.INTERNAL_PLUGIN_DISABLE_FAILED; } @@ -336,13 +342,13 @@ private boolean unloadClasses(@NotNull Plugin plugin) } catch (IllegalAccessException e) { - e.printStackTrace(); + this.exceptionHandler.report(e); this.registry.getLogger().warning("Unable to unload classes of plugin " + plugin.getName()); return false; } catch (IOException e) { - e.printStackTrace(); + this.exceptionHandler.report(e); this.registry.getLogger().warning("Unable to close class loader of plugin " + plugin.getName()); return false; @@ -353,7 +359,7 @@ private boolean unloadClasses(@NotNull Plugin plugin) private void unregisterRecipes(@NotNull Plugin plugin, @Nullable KPMInformationFile kpmInfo) { - ArrayList targetNamespaces = + List targetNamespaces = new ArrayList<>(Collections.singletonList(plugin.getName().toLowerCase(Locale.ROOT))); if (kpmInfo != null) { @@ -395,7 +401,7 @@ private void unregisterRecipes(@NotNull Plugin plugin, @Nullable KPMInformationF } } - private boolean isRecipeRemoveTarget(@NotNull Plugin plugin, @NotNull ArrayList targetNamespaces, @NotNull Recipe recipe) + private boolean isRecipeRemoveTarget(@NotNull Plugin plugin, @NotNull Collection targetNamespaces, @NotNull Recipe recipe) { if (!(recipe instanceof Keyed)) return false; diff --git a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginRegisteredRecipeSignal.java b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginRegisteredRecipeSignal.java index 3b0a436d..cc5e3615 100644 --- a/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginRegisteredRecipeSignal.java +++ b/KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginRegisteredRecipeSignal.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * プラグインが登録したレシピについてのシグナルです。 @@ -71,7 +72,7 @@ public static class Searching extends PluginRegisteredRecipeSignal * デフォルトでは, プラグインの名前(Lower case)が使用されます。 */ @NotNull - private ArrayList targetNamespaces; + private List targetNamespaces; public Searching(@NotNull Plugin plugin, @NotNull String... targetNamespaces) { diff --git a/pom.xml b/pom.xml index dbb2d659..47e06025 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.kunlab.kpm TeamKunPluginManager - 3.0.0 + 3.0.1 KPMDaemon KPMPlugin @@ -83,7 +83,7 @@ org.projectlombok lombok - 1.18.24 + 1.18.26 provided @@ -101,7 +101,7 @@ org.mockito mockito-core - 4.11.0 + 5.2.0 test diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 00000000..2af1ace3 --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,78 @@ +version: "1.0" +linter: jetbrains/qodana-jvm-community:2022.3 +include: + - name: HtmlTagCanBeJavadocTag + - name: PackageInfoWithoutPackage + - name: JavadocDeclaration + - name: MissingDeprecatedAnnotation + - name: JavadocLinkAsPlainText + - name: ClassReferencesSubclass + - name: DeclareCollectionAsInterface + - name: MagicNumber + - name: MethodOnlyUsedFromInnerClass + - name: UnresolvedClassReferenceRepair + - name: AssignmentToLambdaParameter + - name: AssignmentToMethodParameter + - name: DoubleLiteralMayBeFloatLiteral + - name: IntLiteralMayBeLongLiteral + - name: CastThatLosesPrecision + - name: UnnecessaryExplicitNumericCast + - name: ClassNameSameAsAncestorName + - name: NonExceptionNameEndsWithException + - name: ExceptionNameDoesntEndWithException + - name: FinalPrivateMethod + - name: ClassMayBeInterface + - name: AnonymousInnerClass + - name: ClassNameDiffersFromFileName + - name: FieldCanBeLocal + - name: InterfaceMayBeAnnotatedFunctional + - name: CloneDeclaresCloneNotSupported + - name: NonPublicClone + - name: SerializableCtor + - name: OptionalAssignedToNull + - name: SystemOutErr + - name: AssertMessageNotString + - name: EqualsCalledOnEnumConstant + - name: ListIndexOfReplaceableByContains + - name: ObjectsEqualsCanBeSimplified + - name: OptionalToIf + - name: OptionalContainsCollection + - name: ReturnSeparatedFromComputation + - name: SizeReplaceableByIsEmpty + - name: ArrayCanBeReplacedWithEnumValues + - name: CStyleArrayDeclaration + - name: CallToStringConcatCanBeReplacedByOperator + - name: BoundedWildcard + - name: SingleStatementInBlock + - name: FieldMayBeFinal + - name: UnqualifiedFieldAccess + - name: UnqualifiedMethodAccess + - name: MissortedModifiers + - name: OptionalIsPresent + - name: CharsetObjectCanBeUsed + - name: UnnecessaryToStringCall + - name: UnnecessaryCallToStringValueOf + - name: Java8ListSort + - name: Convert2Lambda + - name: AnonymousHasLambdaAlternative + - name: Convert2MethodRef + - name: Convert2streamapi + - name: Java8CollectionRemoveIf + - name: Java8ListReplaceAll + - name: Java8MapForEach + - name: Java8MapApi + - name: SimplifyForEach + - name: CodeBlock2Expr + - name: StringBufferField + - name: AnonymousInnerClassMayBeStatic +exclude: + - name: All + paths: + - KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug # Debug commands. + - KPMCommon/src/main/java/org/kunlab/kpm/utils/ReflectionUtils.java # This class is copied from public domain. + - name: FieldMayBeStatic # Due to lombok's @Builder.Default behavior. + - name: NonStaticFinalLogger # Due to dependency injection. + - name: InterfaceMayBeAnnotatedFunctional # Interfaces with only one method are most often not allowed to be used as lambdas. + - name: AbstractClassNeverImplemented + paths: + - KPMHooks/src/main/java/org/kunlab/kpm/hook/KPMHookRecipientBase.java # This class is published as an API.