From 750f741eb83af2bef415062ef82b22a9072d0971 Mon Sep 17 00:00:00 2001 From: Danila Ponomarenko Date: Tue, 5 Jun 2012 16:29:57 +0400 Subject: [PATCH] IDEA-86852 Add final modifier to Create Field implemented --- .../quickfix/CreateFieldFromUsageFix.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java index ddf177c70cb2..debb2fff7b1a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java @@ -66,7 +66,7 @@ public class CreateFieldFromUsageFix extends CreateVarFromUsageFix { PsiClass parentClass; do { enclosingContext = PsiTreeUtil.getParentOfType(enclosingContext == null ? myReferenceExpression : enclosingContext, PsiMethod.class, - PsiField.class, PsiClassInitializer.class); + PsiField.class, PsiClassInitializer.class); parentClass = enclosingContext == null ? null : enclosingContext.getContainingClass(); } while (parentClass instanceof PsiAnonymousClass); @@ -104,6 +104,10 @@ public class CreateFieldFromUsageFix extends CreateVarFromUsageFix { PsiUtil.setModifierProperty(field, PsiModifier.STATIC, true); } + if (shouldCreateFinalMember(myReferenceExpression, targetClass)) { + PsiUtil.setModifierProperty(field, PsiModifier.FINAL, true); + } + if (createConstantField()) { PsiUtil.setModifierProperty(field, PsiModifier.STATIC, true); PsiUtil.setModifierProperty(field, PsiModifier.FINAL, true); @@ -146,6 +150,22 @@ public class CreateFieldFromUsageFix extends CreateVarFromUsageFix { }); } + private static boolean shouldCreateFinalMember(@NotNull PsiReferenceExpression ref, @NotNull PsiClass targetClass) { + if (!PsiTreeUtil.isAncestor(targetClass, ref, true)) { + return false; + } + final PsiElement element = PsiTreeUtil.getParentOfType(ref, PsiClassInitializer.class, PsiMethod.class); + if (element instanceof PsiClassInitializer){ + return true; + } + + if (element instanceof PsiMethod && ((PsiMethod)element).isConstructor()){ + return true; + } + + return false; + } + @Override @NotNull public String getFamilyName() {