From dcb3d7954360a2bb0d2d0d429846d17b9cee80d0 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 2 Jul 2026 12:55:02 +0200 Subject: [PATCH 1/2] refactor: Remove custom JavaProject cache --- .../pmd/eclipse/plugin/PMDPlugin.java | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/plugin/PMDPlugin.java b/net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/plugin/PMDPlugin.java index 7c8fee8e..3a8ff159 100644 --- a/net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/plugin/PMDPlugin.java +++ b/net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/plugin/PMDPlugin.java @@ -83,8 +83,6 @@ public class PMDPlugin extends AbstractUIPlugin { private static final Logger LOG = LoggerFactory.getLogger(PMDPlugin.class); - private static Map javaProjectsByIProject = new HashMap<>(); - // The shared instance private static PMDPlugin plugin; @@ -126,44 +124,47 @@ public Color colorFor(RGB rgb) { /** * Return the Java language version for the resources found within the specified project or null if it isn't a Java - * project or a Java version we don't support yet. + * project or a Java version we don't support yet or the project doesn't exist. * * @param project * @return */ public static LanguageVersion javaVersionFor(IProject project) { - - IJavaProject jProject = javaProjectsByIProject.get(project); - if (jProject == null) { - jProject = JavaCore.create(project); - javaProjectsByIProject.put(project, jProject); + if (!project.exists()) { + return null; } - if (jProject.exists()) { - String compilerCompliance = jProject.getOption(JavaCore.COMPILER_COMPLIANCE, true); - return JavaLanguageModule.getInstance().getVersion(compilerCompliance); + IJavaProject jProject = JavaCore.create(project); + if (!jProject.exists()) { + return null; } - return null; + + String compilerCompliance = jProject.getOption(JavaCore.COMPILER_COMPLIANCE, true); + return JavaLanguageModule.getInstance().getVersion(compilerCompliance); } public static IClasspathEntry buildSourceClassPathEntryFor(IProject project) { - IJavaProject jProject = javaProjectsByIProject.get(project); - if (jProject == null) { - jProject = JavaCore.create(project); - javaProjectsByIProject.put(project, jProject); + if (!project.exists()) { + return null; } - if (jProject.exists()) { - try { - if (jProject.getRawClasspath() != null) { - for (IClasspathEntry entry : jProject.getRawClasspath()) { - if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) { - return entry; - } + + IJavaProject jProject = JavaCore.create(project); + if (!jProject.exists()) { + return null; + } + + try { + IClasspathEntry[] rawClasspath = jProject.getRawClasspath(); + if (rawClasspath != null) { + for (IClasspathEntry entry : rawClasspath) { + if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) { + LOG.debug("Found source classpath entry: path={}", entry.getPath()); + return entry; } } - } catch (JavaModelException e) { - LOG.error("Couldn't determine source classpath", e); } + } catch (JavaModelException e) { + LOG.error("Couldn't determine source classpath", e); } return null; } From 1c6d99645a26bd6426d0bf928838ce7bc241d73c Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 2 Jul 2026 16:21:33 +0200 Subject: [PATCH 2/2] Update release notes --- ReleaseNotes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index b3cf720f..3a8d7a3b 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -17,6 +17,7 @@ This is a minor release. ### ✨ Merged pull requests * [#431](https://github.com/pmd/pmd-eclipse-plugin/pull/431): chore: Improve logging during tests at waitForPMDJobs - [Andreas Dangel](https://github.com/adangel) (@adangel) +* [#432](https://github.com/pmd/pmd-eclipse-plugin/pull/432): refactor: Remove custom JavaProject cache - [Andreas Dangel](https://github.com/adangel) (@adangel) ### 📦 Dependency updates