mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-11 07:53:28 +07:00
create fields from parameters: avoid search under lock: deadlock with sync daemon hint? (IDEA-84296)
This commit is contained in:
+13
-6
@@ -18,10 +18,12 @@ package com.intellij.codeInsight.intention.impl;
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.CodeInsightUtilBase;
|
||||
import com.intellij.codeInsight.NullableNotNullManager;
|
||||
import com.intellij.codeInsight.generation.*;
|
||||
import com.intellij.codeInsight.generation.ClassMember;
|
||||
import com.intellij.codeInsight.generation.MemberChooserObject;
|
||||
import com.intellij.codeInsight.generation.PsiMethodMember;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.ide.util.MemberChooser;
|
||||
import com.intellij.lang.StdLanguages;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -122,10 +124,17 @@ public class CreateFieldFromParameterAction implements IntentionAction {
|
||||
}
|
||||
}
|
||||
if (method == null) return false;
|
||||
|
||||
final List<PsiParameter> parameters = new ArrayList<PsiParameter>();
|
||||
for (PsiParameter parameter : method.getParameterList().getParameters()) {
|
||||
if (isAvailable(parameter)) {
|
||||
parameters.add(parameter);
|
||||
}
|
||||
}
|
||||
|
||||
synchronized (LOCK) {
|
||||
final Collection<SmartPsiElementPointer<PsiParameter>> params = getUnboundedParams(method);
|
||||
params.clear();
|
||||
final PsiParameter[] parameters = method.getParameterList().getParameters();
|
||||
for (PsiParameter parameter : parameters) {
|
||||
params.add(SmartPointerManager.getInstance(project).createSmartPsiElementPointer(parameter));
|
||||
}
|
||||
@@ -143,7 +152,7 @@ public class CreateFieldFromParameterAction implements IntentionAction {
|
||||
final PsiType[] types = getTypes(psiParameter);
|
||||
PsiClass targetClass = PsiTreeUtil.getParentOfType(psiParameter, PsiClass.class);
|
||||
return psiParameter.isValid()
|
||||
&& psiParameter.getLanguage().isKindOf(StdLanguages.JAVA)
|
||||
&& psiParameter.getLanguage().isKindOf(JavaLanguage.INSTANCE)
|
||||
&& psiParameter.getDeclarationScope() instanceof PsiMethod
|
||||
&& ((PsiMethod)psiParameter.getDeclarationScope()).getBody() != null
|
||||
&& psiParameter.getManager().isInProject(psiParameter)
|
||||
@@ -163,8 +172,6 @@ public class CreateFieldFromParameterAction implements IntentionAction {
|
||||
return new AbstractCollection<SmartPsiElementPointer<PsiParameter>>() {
|
||||
@Override
|
||||
public boolean add(SmartPsiElementPointer<PsiParameter> psiVariable) {
|
||||
PsiParameter psiParameter = psiVariable.getElement();
|
||||
if (psiParameter == null || !isAvailable(psiParameter)) return false;
|
||||
return finalParams.put(psiVariable, Boolean.TRUE) == null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user