From 3dee28bff12da04fef1ba9130404280ef2c5155b Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 16 Feb 2017 11:11:12 +0100 Subject: [PATCH] EA-96981 - assert: NoSwingUnderWriteAction.lambda$watchForEvents$ --- .../quickfix/CreateParameterFromUsageFix.java | 59 +++++++++---------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java index 5a7c95814c91..d15a83bb4080 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java @@ -17,7 +17,6 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.ide.util.SuperMethodWarningUtil; -import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; @@ -70,47 +69,45 @@ public class CreateParameterFromUsageFix extends CreateVarFromUsageFix { @Override protected void invokeImpl(PsiClass targetClass) { - if (CreateFromUsageUtils.isValidReference(myReferenceExpression, false)) return; + ApplicationManager.getApplication().invokeLater(() -> { + if (!myReferenceExpression.isValid()) return; + if (CreateFromUsageUtils.isValidReference(myReferenceExpression, false)) return; - final Project project = myReferenceExpression.getProject(); + final Project project = myReferenceExpression.getProject(); - PsiType[] expectedTypes = CreateFromUsageUtils.guessType(myReferenceExpression, false); - PsiType type = expectedTypes[0]; + PsiType[] expectedTypes = CreateFromUsageUtils.guessType(myReferenceExpression, false); + PsiType type = expectedTypes[0]; - final String varName = myReferenceExpression.getReferenceName(); - PsiMethod method = PsiTreeUtil.getParentOfType(myReferenceExpression, PsiMethod.class); - LOG.assertTrue(method != null); - method = IntroduceParameterHandler.chooseEnclosingMethod(method); - if (method == null) return; + final String varName = myReferenceExpression.getReferenceName(); + PsiMethod method = PsiTreeUtil.getParentOfType(myReferenceExpression, PsiMethod.class); + LOG.assertTrue(method != null); + method = IntroduceParameterHandler.chooseEnclosingMethod(method); + if (method == null) return; - method = SuperMethodWarningUtil.checkSuperMethod(method, RefactoringBundle.message("to.refactor")); - if (method == null) return; + method = SuperMethodWarningUtil.checkSuperMethod(method, RefactoringBundle.message("to.refactor")); + if (method == null) return; - final List parameterInfos = - new ArrayList<>(Arrays.asList(ParameterInfoImpl.fromMethod(method))); - ParameterInfoImpl parameterInfo = new ParameterInfoImpl(-1, varName, type, varName, false); - if (!method.isVarArgs()) { - parameterInfos.add(parameterInfo); - } - else { - parameterInfos.add(parameterInfos.size() - 1, parameterInfo); - } + final List parameterInfos = + new ArrayList<>(Arrays.asList(ParameterInfoImpl.fromMethod(method))); + ParameterInfoImpl parameterInfo = new ParameterInfoImpl(-1, varName, type, varName, false); + if (!method.isVarArgs()) { + parameterInfos.add(parameterInfo); + } + else { + parameterInfos.add(parameterInfos.size() - 1, parameterInfo); + } - final Application application = ApplicationManager.getApplication(); - final PsiMethod finalMethod = method; - application.invokeLater(() -> { - if (project.isDisposed()) return; - if (application.isUnitTestMode()) { + if (ApplicationManager.getApplication().isUnitTestMode()) { ParameterInfoImpl[] array = parameterInfos.toArray(new ParameterInfoImpl[parameterInfos.size()]); - String modifier = PsiUtil.getAccessModifier(PsiUtil.getAccessLevel(finalMethod.getModifierList())); + String modifier = PsiUtil.getAccessModifier(PsiUtil.getAccessLevel(method.getModifierList())); ChangeSignatureProcessor processor = - new ChangeSignatureProcessor(project, finalMethod, false, modifier, finalMethod.getName(), finalMethod.getReturnType(), array); + new ChangeSignatureProcessor(project, method, false, modifier, method.getName(), method.getReturnType(), array); processor.run(); } else { try { JavaChangeSignatureDialog dialog = - JavaChangeSignatureDialog.createAndPreselectNew(project, finalMethod, parameterInfos, true, myReferenceExpression); + JavaChangeSignatureDialog.createAndPreselectNew(project, method, parameterInfos, true, myReferenceExpression); dialog.setParameterInfos(parameterInfos); if (dialog.showAndGet()) { for (ParameterInfoImpl info : parameterInfos) { @@ -118,7 +115,7 @@ public class CreateParameterFromUsageFix extends CreateVarFromUsageFix { final String newParamName = info.getName(); if (!Comparing.strEqual(varName, newParamName)) { final PsiExpression newExpr = - JavaPsiFacade.getElementFactory(project).createExpressionFromText(newParamName, finalMethod); + JavaPsiFacade.getElementFactory(project).createExpressionFromText(newParamName, method); new WriteCommandAction(project) { @Override protected void run(@NotNull Result result) throws Throwable { @@ -139,7 +136,7 @@ public class CreateParameterFromUsageFix extends CreateVarFromUsageFix { throw new RuntimeException(e); } } - }); + }, targetClass.getProject().getDisposed()); } @Override