diff --git a/src/main/java/net/sourceforge/pmd/util/fxdesigner/app/services/ASTManagerImpl.java b/src/main/java/net/sourceforge/pmd/util/fxdesigner/app/services/ASTManagerImpl.java index 23be9d67..7e93e964 100644 --- a/src/main/java/net/sourceforge/pmd/util/fxdesigner/app/services/ASTManagerImpl.java +++ b/src/main/java/net/sourceforge/pmd/util/fxdesigner/app/services/ASTManagerImpl.java @@ -16,6 +16,7 @@ import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.reactfx.value.SuspendableVar; import org.reactfx.value.Val; import org.reactfx.value.Var; @@ -76,6 +77,8 @@ public class ASTManagerImpl implements ASTManager { private final Var> ruleProperties = Var.newSimpleVar(Collections.emptyMap()); + private @Nullable ClassLoader currentClassloader; + public ASTManagerImpl(DesignerRoot owner) { this.designerRoot = owner; @@ -233,12 +236,14 @@ private LanguageProcessorRegistry refreshRegistry(LanguageVersion version, Class langProperties, NOOP_REPORTER); lpRegistry.setValue(newRegistry); + currentClassloader = classLoader; return newRegistry; } // already created, need to check that the version is the same if (!current.getLanguages().getLanguages().contains(version.getLanguage()) - || !current.getProcessor(version.getLanguage()).getLanguageVersion().equals(version)) { + || !current.getProcessor(version.getLanguage()).getLanguageVersion().equals(version) + || !Objects.equals(currentClassloader, classLoader)) { // current is invalid, recreate it current.close(); lpRegistry.setValue(null);