mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EA-261935 - additional check for the case when we have duplicated fields or some field is not initialized in ctor
GitOrigin-RevId: bdb9c907210141695a29b08c39dd06a4d26c15af
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7680878112
commit
f8167bee4d
+18
-10
@@ -4,6 +4,7 @@ package com.intellij.codeInspection.classCanBeRecord;
|
||||
import com.intellij.codeInsight.AnnotationTargetUtil;
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInsight.ExceptionUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
|
||||
import com.intellij.codeInspection.ProblemDescriptor;
|
||||
import com.intellij.codeInspection.util.IntentionFamilyName;
|
||||
@@ -240,20 +241,23 @@ public class ConvertToRecordFix extends InspectionGadgetsFix {
|
||||
myCanonical = false;
|
||||
return;
|
||||
}
|
||||
PsiParameter[] ctorParams = myConstructor.getParameterList().getParameters();
|
||||
Set<String> instanceFieldNames = instanceFields.stream().map(PsiField::getName).collect(Collectors.toSet());
|
||||
for (PsiParameter param : ctorParams) {
|
||||
if (!instanceFieldNames.contains(param.getName())) {
|
||||
myCanonical = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
Map<String, PsiType> ctorParamsWithType = Arrays.stream(ctorParams)
|
||||
.collect(Collectors.toMap(param -> param.getName(), param -> param.getType(), (first, second) -> first));
|
||||
if (ctorParams.length != ctorParamsWithType.size()) {
|
||||
if (instanceFieldNames.size() != instanceFields.size()) {
|
||||
myCanonical = false;
|
||||
return;
|
||||
}
|
||||
PsiParameter[] ctorParams = myConstructor.getParameterList().getParameters();
|
||||
if (instanceFields.size() != ctorParams.length) {
|
||||
myCanonical = false;
|
||||
return;
|
||||
}
|
||||
PsiCodeBlock ctorBody = myConstructor.getBody();
|
||||
if (ctorBody == null) {
|
||||
myCanonical = false;
|
||||
return;
|
||||
}
|
||||
Map<String, PsiType> ctorParamsWithType = Arrays.stream(ctorParams)
|
||||
.collect(Collectors.toMap(param -> param.getName(), param -> param.getType(), (first, second) -> first));
|
||||
for (PsiField instanceField : instanceFields) {
|
||||
PsiType ctorParamType = ObjectUtils.tryCast(ctorParamsWithType.get(instanceField.getName()), PsiType.class);
|
||||
if (ctorParamType instanceof PsiEllipsisType) {
|
||||
@@ -263,6 +267,10 @@ public class ConvertToRecordFix extends InspectionGadgetsFix {
|
||||
myCanonical = false;
|
||||
return;
|
||||
}
|
||||
if (!HighlightControlFlowUtil.variableDefinitelyAssignedIn(instanceField, ctorBody)) {
|
||||
myCanonical = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
myCanonical = true;
|
||||
}
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// "Convert to a record" "false"
|
||||
class <caret>R {
|
||||
final int first;
|
||||
final int second;
|
||||
|
||||
R(int first, int second) {
|
||||
this.first = first;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Convert to a record" "false"
|
||||
class <caret>R {
|
||||
final int first;
|
||||
final int first;
|
||||
|
||||
R(int first) {
|
||||
this.first = first;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user