MultiFileScopeDiagnostic.java
/*******************************************************************************
* Copyright (c) 2026 Carsten Hammer.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.sandbox.jdt.cleanup.multifile;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
/** Immutable account of selected and automatically added cleanup source units. */
public record MultiFileScopeDiagnostic(List<String> selectedCompilationUnitHandles,
List<String> addedCompilationUnitHandles, String reasonCode, String explanation,
boolean complete) {
/** Validates and normalizes the scope diagnostic. */
public MultiFileScopeDiagnostic {
selectedCompilationUnitHandles= normalize(selectedCompilationUnitHandles);
addedCompilationUnitHandles= normalize(addedCompilationUnitHandles);
reasonCode= Objects.requireNonNull(reasonCode);
explanation= Objects.requireNonNull(explanation);
}
/** Creates a diagnostic from general collections while retaining deterministic order. */
public MultiFileScopeDiagnostic(Collection<String> selectedCompilationUnitHandles,
Collection<String> addedCompilationUnitHandles, String reasonCode, String explanation,
boolean complete) {
this(toList(selectedCompilationUnitHandles), toList(addedCompilationUnitHandles), reasonCode, explanation,
complete);
}
/** @return an empty, complete scope diagnostic */
public static MultiFileScopeDiagnostic empty() {
return new MultiFileScopeDiagnostic(List.of(), List.of(), "NO_EXPANSION", //$NON-NLS-1$
"No coordinated source-scope expansion was required.", true); //$NON-NLS-1$
}
private static List<String> toList(Collection<String> handles) {
return handles == null ? null : List.copyOf(handles);
}
private static List<String> normalize(List<String> handles) {
return handles == null ? List.of() : handles.stream().filter(Objects::nonNull).distinct().sorted().toList();
}
}