From 7b7f8da5950e570dde218176e013bd0623d5435b Mon Sep 17 00:00:00 2001 From: Rawvoid Date: Tue, 3 Feb 2026 22:10:00 +0800 Subject: [PATCH] feat(normalize-class): remove references from `ObjectFactory` and `JAXBDebug` during class normalization --- .../jaxb/plugin/NormalizeClassPlugin.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java b/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java index fff78ec..b7e55bc 100644 --- a/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java +++ b/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java @@ -93,6 +93,8 @@ private void removeAndReplaceClass(List removeClasses, ClassOutlin var removeClass = classOutline.implClass; removeFromParentContainer(removeClass); var jPackage = removeClass.getPackage(); + removeFromObjectFactory(jPackage, removeClass); + removeFromDebugClass(removeClass); outline.getClasses().forEach(c -> { var definedClass = c.implClass; @@ -112,6 +114,34 @@ private void removeAndReplaceClass(List removeClasses, ClassOutlin }); } + private void removeFromDebugClass(JDefinedClass removeClass) { + var codeModel = removeClass.owner(); + var defaultPackage = codeModel._package(""); + var debugClass = defaultPackage._getClass("JAXBDebug"); + if (debugClass == null) { + return; + } + var classes = defaultPackage.classes(); + while (classes.hasNext()) { + if (classes.next() == debugClass) { + classes.remove(); + break; + } + } + } + + private void removeFromObjectFactory(JPackage jPackage, JDefinedClass removeClass) { + if (jPackage == null) { + return; + } + var objectFactoryClass = jPackage._getClass("ObjectFactory"); + if (objectFactoryClass == null) { + return; + } + objectFactoryClass.methods().removeIf(method -> + ClassNameDetector.detect(method.type().fullName(), removeClass.fullName())); + } + private void removeFromParentContainer(JDefinedClass definedClass) { var parentContainer = definedClass.parentContainer();