This commit is contained in:
Sergey Ignatov
2018-05-14 14:59:48 +03:00
parent 5cf7622aa4
commit 1f1e9cbcce
@@ -27,7 +27,6 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import static com.intellij.util.ObjectUtils.assertNotNull;
import static com.intellij.util.ObjectUtils.tryCast;
import static java.util.Collections.emptyList;
@@ -40,10 +39,10 @@ public class VariableAccessFromInnerClassJava10Fix extends BaseIntentionAction {
};
private static final LinkedHashSet<String> ourSuggestions = new LinkedHashSet<>(Arrays.asList(NAMES));
private final SmartPsiElementPointer<PsiElement> myContext;
private final PsiElement myContext;
public VariableAccessFromInnerClassJava10Fix(PsiElement context) {
myContext = SmartPointerManager.createPointer(context);
myContext = context;
}
@Nls(capitalization = Nls.Capitalization.Sentence)
@@ -56,7 +55,7 @@ public class VariableAccessFromInnerClassJava10Fix extends BaseIntentionAction {
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
if (!PsiUtil.isLanguageLevel10OrHigher(file)) return false;
if (myContext.getElement() == null) return false;
if (!myContext.isValid()) return false;
PsiReferenceExpression reference = tryCast(myContext, PsiReferenceExpression.class);
if (reference == null) return false;
PsiLocalVariable variable = tryCast(reference.resolve(), PsiLocalVariable.class);
@@ -69,7 +68,7 @@ public class VariableAccessFromInnerClassJava10Fix extends BaseIntentionAction {
(variable.getTypeElement().isInferredType() &&
type instanceof PsiClassType &&
((PsiClassType)type).resolve() instanceof PsiAnonymousClass)
) {
) {
return false;
}
setText(QuickFixBundle.message("convert.variable.to.field.in.anonymous.class.fix.name", name));
@@ -78,12 +77,10 @@ public class VariableAccessFromInnerClassJava10Fix extends BaseIntentionAction {
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
PsiElement context = myContext.getElement();
assertNotNull(context);
if (!FileModificationService.getInstance().preparePsiElementsForWrite(context)) return;
if (!FileModificationService.getInstance().preparePsiElementsForWrite(myContext)) return;
WriteCommandAction.runWriteCommandAction(project, () -> {
if (context instanceof PsiReferenceExpression && context.isValid()) {
PsiReferenceExpression referenceExpression = (PsiReferenceExpression)context;
if (myContext instanceof PsiReferenceExpression && myContext.isValid()) {
PsiReferenceExpression referenceExpression = (PsiReferenceExpression)myContext;
PsiLocalVariable variable = tryCast(referenceExpression.resolve(), PsiLocalVariable.class);
if (variable == null) return;
PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
@@ -91,7 +88,7 @@ public class VariableAccessFromInnerClassJava10Fix extends BaseIntentionAction {
final String variableText = getFieldText(variable, factory, initializer);
PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(context, PsiLambdaExpression.class);
PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(myContext, PsiLambdaExpression.class);
if (lambdaExpression == null) return;
DeclarationInfo declarationInfo = DeclarationInfo.findExistingAnonymousClass(variable);