diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java index fbce1895f..c0aff9053 100644 --- a/java/src/processing/mode/java/JavaEditor.java +++ b/java/src/processing/mode/java/JavaEditor.java @@ -30,9 +30,11 @@ import processing.mode.java.debug.LineHighlight; import processing.mode.java.debug.LineID; import processing.mode.java.pdex.ASTGenerator; import processing.mode.java.pdex.ErrorCheckerService; +import processing.mode.java.pdex.ImportStatement; import processing.mode.java.pdex.LineMarker; import processing.mode.java.pdex.JavaTextArea; import processing.mode.java.pdex.Problem; +import processing.mode.java.pdex.SourceUtils; import processing.mode.java.preproc.PdePreprocessor; import processing.mode.java.runner.Runner; import processing.mode.java.tweak.ColorControlBox; @@ -1904,13 +1906,12 @@ public class JavaEditor extends Editor { if (sc.isExtension("pde")) { String tabCode = sc.getProgram(); - String[][] pieces = - PApplet.matchAll(tabCode, ErrorCheckerService.IMPORT_REGEX); + List imports = SourceUtils.parseProgramImports(tabCode); - if (pieces != null) { + if (!imports.isEmpty()) { ArrayList importHeaders = new ArrayList<>(); - for (String[] importStatement : pieces) { - importHeaders.add(importStatement[2]); + for (ImportStatement importStatement : imports) { + importHeaders.add(importStatement.getFullClassName()); } List installLibsHeaders = getNotInstalledAvailableLibs(importHeaders); diff --git a/java/src/processing/mode/java/pdex/ErrorCheckerService.java b/java/src/processing/mode/java/pdex/ErrorCheckerService.java index a22f92c71..d24634729 100644 --- a/java/src/processing/mode/java/pdex/ErrorCheckerService.java +++ b/java/src/processing/mode/java/pdex/ErrorCheckerService.java @@ -102,14 +102,6 @@ public class ErrorCheckerService { */ protected final ASTGenerator astGenerator; - /** - * Regexp for import statements. (Used from Processing source) - */ - // TODO: merge this with SourceUtils one - public static final String IMPORT_REGEX = - "(?:^|;)\\s*(import\\s+)((?:static\\s+)?\\S+)(\\s*;)"; - - public ErrorCheckerService(JavaEditor editor) { this.editor = editor; astGenerator = new ASTGenerator(editor, this); diff --git a/java/src/processing/mode/java/pdex/SourceUtils.java b/java/src/processing/mode/java/pdex/SourceUtils.java index c7e042b78..ef6e55fab 100644 --- a/java/src/processing/mode/java/pdex/SourceUtils.java +++ b/java/src/processing/mode/java/pdex/SourceUtils.java @@ -26,18 +26,25 @@ public class SourceUtils { Pattern.compile("^\\s*((?:(static)\\s+)?((?:\\w+\\s*\\.)*)\\s*(\\S+))", Pattern.MULTILINE | Pattern.DOTALL); - public static List parseProgramImports(CharSequence source, - List outImports) { - - List result = new ArrayList<>(); - + public static List parseProgramImports(CharSequence source) { + List result = new ArrayList<>(); + Matcher matcher = IMPORT_REGEX.matcher(source); + while (matcher.find()) { + ImportStatement is = ImportStatement.parse(matcher.toMatchResult()); + result.add(is); + } + return result; + } + + public static List parseProgramImports(CharSequence source, + List outImports) { + List result = new ArrayList<>(); Matcher matcher = IMPORT_REGEX.matcher(source); while (matcher.find()) { - String piece = matcher.group(1); ImportStatement is = ImportStatement.parse(matcher.toMatchResult()); outImports.add(is); - int len = piece.length(); int idx = matcher.start(1); + int len = matcher.end(1) - idx; // Remove the import from the main program // Substitute with white spaces result.add(Edit.move(idx, len, 0));