[java-inspections] IDEA-322234 Formatter conversion error misattributed by inspection

GitOrigin-RevId: 7724093c7ffec568faab70362677ecbf1afa7c7e
This commit is contained in:
Mikhail Pyltsin
2023-06-14 10:21:25 +02:00
committed by intellij-monorepo-bot
parent f47fa86364
commit d795671583
2 changed files with 18 additions and 8 deletions

View File

@@ -532,22 +532,24 @@ public final class FormatDecode {
private final Set<Validator> validators = new HashSet<>(3);
@Nullable
private String lastFailedSpecifier = null;
@Override
public String getInvalidSpecifier(PsiType type) {
for (Validator validator : validators) {
if (!validator.valid(type)) {
return validator.getInvalidSpecifier(type);
}
}
return null;
}
MultiValidator(String specifier) {
super(specifier);
}
@Override
public String getSpecifier() {
return lastFailedSpecifier == null ? super.getSpecifier() : lastFailedSpecifier;
}
@Override
public boolean valid(PsiType type) {
for (Validator validator : validators) {
if (!validator.valid(type)) {
lastFailedSpecifier = validator.getSpecifier();
return false;
}
}
@@ -565,6 +567,13 @@ public final class FormatDecode {
public abstract static class Validator {
@Nullable
public String getInvalidSpecifier(PsiType type){
if (valid(type)) {
return null;
}
return getSpecifier();
}
private final String mySpecifier;
Validator(String specifier) {

View File

@@ -95,8 +95,9 @@ public class MalformedFormatStringInspection extends BaseInspection {
}
final PsiType argumentType = (PsiType)infos[2];
final FormatDecode.Validator validator = (FormatDecode.Validator)infos[3];
String specifier = validator.getInvalidSpecifier(argumentType);
return InspectionGadgetsBundle.message("malformed.format.string.problem.descriptor.arguments.do.not.match.type",
argumentType.getPresentableText(), validator.getSpecifier());
argumentType.getPresentableText(), specifier == null ? validator.getSpecifier() : specifier);
}
@Override