From 1fff00f79acf30dc40ec68b1953f49736b93156b Mon Sep 17 00:00:00 2001 From: "Josiah (Gaming32) Glosson" Date: Fri, 15 Apr 2022 09:10:02 -0500 Subject: [PATCH] Notify users that they need a JDK to import sorts --- .vscode/settings.json | 9 ++++- .../io/github/arrayv/main/SortAnalyzer.java | 34 ++++++++++++++++++- .../io/github/arrayv/prompts/SortPrompt.java | 5 ++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 5085bc9f..215bcb13 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,12 @@ { "java.configuration.updateBuildConfiguration": "interactive", "java.checkstyle.configuration": "${workspaceFolder}/checkstyle.xml", - "java.checkstyle.version": "9.3" + "java.checkstyle.version": "9.3", + "java.completion.filteredTypes": [ + "com.sun.*", + "sun.*", + "jdk.*", + "org.graalvm.*", + "io.micrometer.shaded.*" + ] } diff --git a/src/main/java/io/github/arrayv/main/SortAnalyzer.java b/src/main/java/io/github/arrayv/main/SortAnalyzer.java index 01a6e5b6..c1549292 100644 --- a/src/main/java/io/github/arrayv/main/SortAnalyzer.java +++ b/src/main/java/io/github/arrayv/main/SortAnalyzer.java @@ -1,5 +1,6 @@ package io.github.arrayv.main; +import java.awt.Desktop; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -7,6 +8,8 @@ import java.io.OutputStream; import java.lang.reflect.Method; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.net.URLConnection; @@ -513,6 +516,32 @@ private static String performImportReplacements(String source) { return source; } + public static JavaCompiler tryGetJavaCompiler() { + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + if (compiler == null) { + if ( + JOptionPane.showOptionDialog( + null, + "You must install a JDK on your system in order to import sorts.\n" + + "Would you like to download one now?", + "Import Sort", + JOptionPane.YES_NO_OPTION, + JOptionPane.ERROR_MESSAGE, + null, null, null + ) == JOptionPane.YES_OPTION + ) { + try { + Desktop.getDesktop().browse(new URI("https://adoptium.net/temurin/releases")); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (URISyntaxException e) { + throw new Error(e); + } + } + } + return compiler; + } + public boolean importSort(File file, boolean showConfirmation) { // SLightly modified from https://stackoverflow.com/a/40772073/8840278 // Pattern packagePattern = Pattern.compile("package (([a-zA-Z]{1}[a-zA-Z\\d_]*\\.)*[a-zA-Z][a-zA-Z\\d_]*);"); @@ -541,7 +570,10 @@ public boolean importSort(File file, boolean showConfirmation) { CACHE_DIR.mkdirs(); final Path CACHE_PATH = CACHE_DIR.toPath(); - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + JavaCompiler compiler = tryGetJavaCompiler(); + if (compiler == null) { + return false; + } StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); Iterable jFiles = fileManager.getJavaFileObjects(file); int success; diff --git a/src/main/java/io/github/arrayv/prompts/SortPrompt.java b/src/main/java/io/github/arrayv/prompts/SortPrompt.java index 3f946384..48412af8 100644 --- a/src/main/java/io/github/arrayv/prompts/SortPrompt.java +++ b/src/main/java/io/github/arrayv/prompts/SortPrompt.java @@ -340,7 +340,10 @@ private void jButton1ActionPerformed() {//GEN-FIRST:event_jButton1ActionPerforme private void jButton2ActionPerformed() {//GEN-FIRST:event_jButton1ActionPerformed new Thread("ImportSort") { @Override - public void run(){ + public void run() { + if (SortAnalyzer.tryGetJavaCompiler() == null) { + return; + } File f = new ImportSortDialog().getFile(); if (f == null) { return;