From 856640c9f0518ea1842eb0e3ed43dcb1bf123081 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 22 Apr 2016 14:50:31 +0200 Subject: [PATCH] collect smartpointers to survive reformat on writeAction ended EA-80355 - PIEAE: CompositePsiElement.getContainingFile --- .../CreateConstructorParameterFromFieldFix.java | 14 ++++++++------ .../ex/GlobalInspectionContextBase.java | 8 +++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java index 5ef6d1737af4..97bb45cb531c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java @@ -125,7 +125,7 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction { } } }); - final List cleanupElements = new ArrayList(); + final List> cleanupElements = new ArrayList<>(); final List 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 cleanupElements) throws IncorrectOperationException { + final PsiField[] fields, + final List> 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 fields, List cleanupElements) { + ParameterInfoImpl[] parameterInfos, Map fields, List> 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; } diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java b/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java index d506f8d1c1db..496aa8f55ac2 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java +++ b/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java @@ -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> 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(); }