diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java index 1b87e8d059b5..665ea18ee478 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java @@ -15,6 +15,7 @@ */ package com.siyeh.ipp.initialization; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; @@ -41,6 +42,12 @@ public class SplitDeclarationAndInitializationIntention extends Intention { return new SplitDeclarationAndInitializationPredicate(); } + @Override + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { + return PsiTreeUtil.getParentOfType(element, PsiField.class, false, PsiCodeBlock.class) != null && + super.isAvailable(project, editor, element); + } + @Override public void processIntention(@NotNull PsiElement element) { final PsiField field = (PsiField)element.getParent(); @@ -66,9 +73,6 @@ public class SplitDeclarationAndInitializationIntention extends Intention { if (initializerIsStatic == fieldIsStatic) { Predicate usedBeforeInitializer = ref -> { PsiElement refElement = ref.getElement(); - if (refElement == null) { - return true; - } TextRange textRange = refElement.getTextRange(); return textRange == null || textRange.getStartOffset() < initializerOffset; }; @@ -80,7 +84,7 @@ public class SplitDeclarationAndInitializationIntention extends Intention { } final PsiManager manager = field.getManager(); final Project project = manager.getProject(); - final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory(); + final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project); if (classInitializer == null) { if (PsiUtil.isJavaToken(PsiTreeUtil.skipWhitespacesForward(field), JavaTokenType.COMMA)) { field.normalizeDeclaration(); diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/InsideCodeBlock.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/InsideCodeBlock.java new file mode 100644 index 000000000000..d5e5473a26b0 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/InsideCodeBlock.java @@ -0,0 +1,8 @@ +class X { + Object obj = new Object() { + String toString() { + String message = "foo"; + return message; + } + }; +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/NotInsideCodeBlock.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/NotInsideCodeBlock.java new file mode 100644 index 000000000000..178015a08164 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/NotInsideCodeBlock.java @@ -0,0 +1,8 @@ +class X { + Object obj = new Object() { + String toString() { + String message = "foo"; + return message; + } + }; +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/NotInsideCodeBlock_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/NotInsideCodeBlock_after.java new file mode 100644 index 000000000000..a10a14b5f37a --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/initialization/NotInsideCodeBlock_after.java @@ -0,0 +1,12 @@ +class X { + Object obj; + + { + obj = new Object() { + String toString() { + String message = "foo"; + return message; + } + }; + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntentionTest.java index 5320240028a1..1b06b4538b3a 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntentionTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntentionTest.java @@ -31,6 +31,8 @@ public class SplitDeclarationAndInitializationIntentionTest extends IPPTestCase public void testMultipleFieldsSingleDeclaration() { doTest(); } public void testMultipleFieldsSingleDeclaration2() { doTest(); } public void testMultipleFieldsSingleDeclaration3() { doTest(); } + public void testNotInsideCodeBlock() { doTest(); } + public void testInsideCodeBlock() { assertIntentionNotAvailable(); } @Override protected String getRelativePath() {