mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
collect smartpointers to survive reformat on writeAction ended
EA-80355 - PIEAE: CompositePsiElement.getContainingFile
This commit is contained in:
+8
-6
@@ -125,7 +125,7 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction {
|
||||
}
|
||||
}
|
||||
});
|
||||
final List<PsiElement> cleanupElements = new ArrayList<PsiElement>();
|
||||
final List<SmartPsiElementPointer<PsiElement>> cleanupElements = new ArrayList<>();
|
||||
final List<PsiMethod> filtered = filterConstructorsIfFieldAlreadyAssigned(constructors, getField());
|
||||
if (filtered.size() > 1) {
|
||||
final PsiMethodMember[] members = new PsiMethodMember[filtered.size()];
|
||||
@@ -188,7 +188,7 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction {
|
||||
fieldsToFix.clear();
|
||||
}
|
||||
}
|
||||
GlobalInspectionContextBase.cleanupElements(project, null, cleanupElements.toArray(new PsiElement[cleanupElements.size()]));
|
||||
GlobalInspectionContextBase.cleanupElements(project, null, cleanupElements);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -237,7 +237,8 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction {
|
||||
final PsiFile file,
|
||||
final Editor editor,
|
||||
final PsiMethod constructor,
|
||||
final PsiField[] fields, final List<PsiElement> cleanupElements) throws IncorrectOperationException {
|
||||
final PsiField[] fields,
|
||||
final List<SmartPsiElementPointer<PsiElement>> cleanupElements) throws IncorrectOperationException {
|
||||
final PsiParameterList parameterList = constructor.getParameterList();
|
||||
final PsiParameter[] parameters = parameterList.getParameters();
|
||||
ParameterInfoImpl[] newParamInfos = new ParameterInfoImpl[parameters.length + fields.length];
|
||||
@@ -328,13 +329,14 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction {
|
||||
}
|
||||
|
||||
private static boolean doCreate(Project project, Editor editor, PsiParameter[] parameters, SmartPsiElementPointer constructorPointer,
|
||||
ParameterInfoImpl[] parameterInfos, Map<PsiField, String> fields, List<PsiElement> cleanupElements) {
|
||||
ParameterInfoImpl[] parameterInfos, Map<PsiField, String> fields, List<SmartPsiElementPointer<PsiElement>> cleanupElements) {
|
||||
PsiMethod constructor = (PsiMethod)constructorPointer.getElement();
|
||||
assert constructor != null;
|
||||
PsiParameter[] newParameters = constructor.getParameterList().getParameters();
|
||||
if (newParameters == parameters) return false; //user must have canceled dialog
|
||||
// do not introduce assignment in chained constructor
|
||||
if (JavaHighlightUtil.getChainedConstructors(constructor) == null) {
|
||||
final SmartPointerManager manager = SmartPointerManager.getInstance(project);
|
||||
boolean created = false;
|
||||
for (PsiField field : fields.keySet()) {
|
||||
final String defaultParamName = fields.get(field);
|
||||
@@ -343,10 +345,10 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction {
|
||||
continue;
|
||||
}
|
||||
NullableNotNullManager.getInstance(field.getProject()).copyNotNullAnnotation(field, parameter);
|
||||
cleanupElements.add(parameter);
|
||||
cleanupElements.add(manager.createSmartPsiElementPointer(parameter));
|
||||
final PsiElement assignmentStatement = AssignFieldFromParameterAction.addFieldAssignmentStatement(project, field, parameter, editor);
|
||||
if (assignmentStatement != null) {
|
||||
cleanupElements.add(assignmentStatement);
|
||||
cleanupElements.add(manager.createSmartPsiElementPointer(assignmentStatement));
|
||||
}
|
||||
created = true;
|
||||
}
|
||||
|
||||
+7
-1
@@ -412,6 +412,12 @@ public class GlobalInspectionContextBase extends UserDataHolderBase implements G
|
||||
elements.add(manager.createSmartPsiElementPointer(element));
|
||||
}
|
||||
|
||||
cleanupElements(project, runnable, elements);
|
||||
}
|
||||
|
||||
public static void cleanupElements(@NotNull final Project project,
|
||||
@Nullable final Runnable runnable,
|
||||
final List<SmartPsiElementPointer<PsiElement>> elements) {
|
||||
Runnable cleanupRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -441,7 +447,7 @@ public class GlobalInspectionContextBase extends UserDataHolderBase implements G
|
||||
}
|
||||
}
|
||||
|
||||
public void close(boolean noSuspisiousCodeFound) {
|
||||
public void close(boolean noSuspisiousCodeFound) {
|
||||
cleanup();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user