Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@
* Shell-to-shell exact merges remain allowed. Default is <strong>auto</strong>: on when
* {@code -Xelement-wrapper} is also active; force with {@code true}/{@code false}.
* </p>
* <p>
* Logging: each accepted merge is {@code DEBUG}; merge and element-class-clear counts are
* {@code INFO}. Routine skips stay {@code DEBUG}; element-class root mismatches and
* ObjectFactory collisions after dedupe are {@code WARN} (ObjectFactory: one multi-line
* summary).
* </p>
*
* @author Rawvoid
*/
Expand Down Expand Up @@ -869,7 +875,11 @@ public void postProcessModel(Model model, ErrorHandler errorHandler) {
warnObjectFactoryCollisions(model);
}
if (merged > 0) {
log.info("Deduped {} bean merge(s){}", merged, session.dry ? " (dry-run)" : "");
if (session.dry) {
log.info("Deduped {} bean merge(s) (dry-run)", merged);
} else {
log.info("Deduped {} bean merge(s)", merged);
}
}
}

Expand Down Expand Up @@ -1019,7 +1029,7 @@ private boolean tryMerge(

if (!isPackageLevel(host) && host.parent() != victim.parent() && !allowCrossNestedParent) {
log.debug(
"Skip dedupe {}: cross-hierarchy nested '{}' vs '{}'",
"Skip dedupe {}: cross-hierarchy nested {} vs {}",
reason, victim.fullName(), host.fullName()
);
return false;
Expand All @@ -1028,11 +1038,11 @@ private boolean tryMerge(
if (victim.isElement() && host.isElement()
&& !Objects.equals(victim.getElementName(), host.getElementName())) {
log.warn(
"Skip dedupe {}: both '{}' and '{}' are element-classes with different roots ({} vs {})",
"Skip dedupe {}: both element-classes with different roots: {} ({}) vs {} ({})",
reason,
victim.fullName(),
host.fullName(),
victim.getElementName(),
host.fullName(),
host.getElementName()
);
return false;
Expand All @@ -1044,7 +1054,7 @@ private boolean tryMerge(
&& ModelUtils.isPureCollectionShell(victim)
&& !ModelUtils.isPureCollectionShell(host)) {
log.debug(
"Skip dedupe {}: pure collection shell '{}' must not merge into non-shell '{}'",
"Skip dedupe {}: pure collection shell {} must not merge into non-shell {}",
reason, victim.fullName(), host.fullName()
);
return false;
Expand All @@ -1057,8 +1067,8 @@ private boolean tryMerge(
return false;
}

log.info(
"Dedupe {}: '{}' -> '{}' (nameKey={})",
log.debug(
"Dedupe {}: {} → {} (nameKey={})",
reason, victim.fullName(), host.fullName(), nameKey(victim.shortName)
);

Expand Down Expand Up @@ -1102,7 +1112,11 @@ private boolean prepareNestedMerges(Model model, Session session, CClassInfo vic
var childNorm = child.shortName.toLowerCase(Locale.ROOT);
for (var hc : directNestedBeans(model, host)) {
if (hc.shortName.toLowerCase(Locale.ROOT).equals(childNorm)) {
log.debug("Skip dedupe: nested name clash {} under {}", child.shortName, host.fullName());
log.debug(
"Skip dedupe: nested name clash {} under {}",
child.shortName,
host.fullName()
);
return false;
}
}
Expand Down Expand Up @@ -1165,9 +1179,10 @@ private boolean prepareNestedEnums(Model model, Session session, CClassInfo vict
}
}
if (match != null) {
log.info(
"Dedupe exact-enum: '{}' -> '{}'",
fullEnumName(victimEnum), fullEnumName(match)
log.debug(
"Dedupe exact-enum: {} → {}",
fullEnumName(victimEnum),
fullEnumName(match)
);
session.countedMerges.add(IdentityPair.directed(victimEnum, match));
if (!session.dry) {
Expand Down Expand Up @@ -1298,7 +1313,7 @@ private static void collapseRedundantElementClasses(Model model, Set<String> mer
if (mergedPackageNameKeys.isEmpty()) {
return;
}
var cleared = 0;
var cleared = new ArrayList<String>();
for (var elementInfo : model.getAllElements()) {
if (!elementInfo.hasClass()) {
continue;
Expand All @@ -1319,18 +1334,29 @@ private static void collapseRedundantElementClasses(Model model, Set<String> mer
continue;
}
setFieldValue(CELEMENTINFO_CLASSNAME_FIELD, elementInfo, null);
cleared++;
cleared.add(elementInfo.fullName());
}
if (cleared > 0) {
log.info("Cleared {} redundant element class name(s) after dedupe", cleared);
if (!cleared.isEmpty()) {
log.info("Cleared {} redundant element class name(s) after dedupe", cleared.size());
log.debug(
"Cleared element class name(s):\n {}",
String.join("\n ", cleared)
);
}
}

private static void warnObjectFactoryCollisions(Model model) {
var collisions = new ArrayList<String>();
for (var group : ModelUtils.objectFactorySqueezedCollisions(model)) {
var squeezed = group.getFirst().getSqueezedName();
var names = group.stream().map(CClassInfo::fullName).toList();
collisions.add("squeezed '%s': %s".formatted(squeezed, names));
}
if (!collisions.isEmpty()) {
log.warn(
"ObjectFactory squeezed-name collision after dedupe (package-local createXxx): {}",
group.stream().map(CClassInfo::fullName).toList()
"ObjectFactory name collision(s) after dedupe ({}):\n {}",
collisions.size(),
String.join("\n ", collisions)
);
}
}
Expand Down