diff --git a/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/JarReader.java b/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/JarReader.java index d7e9065e..da5fd26c 100644 --- a/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/JarReader.java +++ b/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/JarReader.java @@ -127,8 +127,16 @@ public void getClassesInPackage(List addTo, String[] pkgs, public List getClassesWithNamesStartingWith(String prefix) { List res = new ArrayList<>(); String currentPkg = ""; // Don't use null; we're appending to it - packageMap.getClassesWithNamesStartingWith(info, prefix, currentPkg, - res); + try { + info.bulkClassFileCreationStart(); + try { + packageMap.getClassesWithNamesStartingWith(info, prefix, currentPkg, res); + } finally { + info.bulkClassFileCreationEnd(); + } + } catch (final IOException ioe) { + ioe.printStackTrace(); + } return res; } diff --git a/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/PackageMapNode.java b/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/PackageMapNode.java index bc567647..862a3704 100644 --- a/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/PackageMapNode.java +++ b/RSTALanguageSupport/src/main/java/org/fife/rsta/ac/java/PackageMapNode.java @@ -356,7 +356,10 @@ public void getClassesInPackage(LibraryInfo info, List addTo, /** * Method used to recursively scan our package map for classes whose names - * start with a given prefix, ignoring case. + * start with a given prefix, ignoring case.

+ * + * Note: This method assumes you are fetching class files in bulk from the + * {@code LibraryInfo} instance. * * @param prefix The prefix that the unqualified class names must match * (ignoring case). @@ -387,7 +390,7 @@ void getClassesWithNamesStartingWith(LibraryInfo info, String prefix, if (cf==null) { String fqClassName = currentPkg + className + ".class"; try { - cf = info.createClassFile(fqClassName); + cf = info.createClassFileBulk(fqClassName); cfEntry.setValue(cf); // Update the map } catch (IOException ioe) { ioe.printStackTrace(); diff --git a/RSTALanguageSupport/src/test/java/org/fife/rsta/ac/java/JarReaderTest.java b/RSTALanguageSupport/src/test/java/org/fife/rsta/ac/java/JarReaderTest.java index dff495bb..5c07cae5 100644 --- a/RSTALanguageSupport/src/test/java/org/fife/rsta/ac/java/JarReaderTest.java +++ b/RSTALanguageSupport/src/test/java/org/fife/rsta/ac/java/JarReaderTest.java @@ -46,7 +46,7 @@ void testGetClassesWithNamesStartingWith_matches() throws IOException { LibraryInfo mockInfo = Mockito.mock(LibraryInfo.class); doReturn(System.currentTimeMillis()).when(mockInfo).getLastModified(); doReturn(packageMap).when(mockInfo).createPackageMap(); - when(mockInfo.createClassFile(anyString())).thenAnswer(input -> { + when(mockInfo.createClassFileBulk(anyString())).thenAnswer(input -> { ClassFile cf = Mockito.mock(ClassFile.class); doReturn(input.getArgument(0)).when(cf).getClassName(anyBoolean()); return cf;