diff options
Diffstat (limited to 'plugins/IntentionPowerPak')
11 files changed, 110 insertions, 17 deletions
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfIntention.java index ccdc0c3ee621..6d22d8e12eeb 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/conditional/ReplaceConditionalWithIfIntention.java @@ -15,11 +15,14 @@ */ package com.siyeh.ipp.conditional; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.refactoring.util.RefactoringUtil; +import com.intellij.util.ArrayUtilRt; import com.intellij.util.IncorrectOperationException; import com.siyeh.ig.psiutils.ParenthesesUtils; import com.siyeh.ipp.base.Intention; @@ -29,6 +32,8 @@ import org.jetbrains.annotations.Nullable; public class ReplaceConditionalWithIfIntention extends Intention { + private static final Logger LOG = Logger.getInstance("#" + ReplaceConditionalWithIfIntention.class.getName()); + @Override @NotNull public PsiElementPredicate getElementPredicate() { @@ -53,8 +58,8 @@ public class ReplaceConditionalWithIfIntention extends Intention { else { variable = null; } - final PsiExpression thenExpression = expression.getThenExpression(); - final PsiExpression elseExpression = expression.getElseExpression(); + PsiExpression thenExpression = expression.getThenExpression(); + PsiExpression elseExpression = expression.getElseExpression(); final PsiExpression condition = expression.getCondition(); final PsiExpression strippedCondition = ParenthesesUtils.stripParentheses(condition); final StringBuilder newStatement = new StringBuilder(); @@ -67,10 +72,21 @@ public class ReplaceConditionalWithIfIntention extends Intention { final String name = variable.getName(); newStatement.append(name); newStatement.append('='); - final PsiExpression initializer = variable.getInitializer(); + PsiExpression initializer = variable.getInitializer(); if (initializer == null) { return; } + if (initializer instanceof PsiArrayInitializerExpression) { + final int conditionIdx = ArrayUtilRt.find(((PsiArrayInitializerExpression)initializer).getInitializers(), expression); + if (conditionIdx >= 0) { + initializer = (PsiExpression)initializer.replace(RefactoringUtil.convertInitializerToNormalExpression(initializer, variable.getType())); + final PsiArrayInitializerExpression arrayInitializer = ((PsiNewExpression)initializer).getArrayInitializer(); + LOG.assertTrue(arrayInitializer != null, initializer.getText()); + expression = (PsiConditionalExpression)arrayInitializer.getInitializers()[conditionIdx]; + thenExpression = expression.getThenExpression(); + elseExpression = expression.getElseExpression(); + } + } appendElementTextWithoutParentheses(initializer, expression, thenExpression, newStatement); newStatement.append("; else "); newStatement.append(name); diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/unicode/UnicodeUnescapeIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/unicode/UnicodeUnescapeIntention.java index b6eee7d1cdd5..e885764e6ecd 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/unicode/UnicodeUnescapeIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/unicode/UnicodeUnescapeIntention.java @@ -87,11 +87,7 @@ public class UnicodeUnescapeIntention extends Intention { /** * see JLS 3.3. Unicode Escapes */ - private static int indexOfUnicodeEscape(String text, int offset) { - if (text == null) { - // apparently an editor can have a selection, but still null for selected text. - return -1; - } + private static int indexOfUnicodeEscape(@NotNull String text, int offset) { final int length = text.length(); for (int i = 0; i < length; i++) { final char c = text.charAt(i); @@ -146,7 +142,8 @@ public class UnicodeUnescapeIntention extends Intention { final SelectionModel selectionModel = editor.getSelectionModel(); if (selectionModel.hasSelection()) { final String text = selectionModel.getSelectedText(); - return indexOfUnicodeEscape(text, 1) >= 0; + // an editor can have a selection, but still null for selected text (because of threading?). + return text != null && indexOfUnicodeEscape(text, 1) >= 0; } else { final CaretModel caretModel = editor.getCaretModel(); diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/varargs/MakeMethodVarargsIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/varargs/MakeMethodVarargsIntention.java index 016d4bd396f5..2b0617c673a6 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/varargs/MakeMethodVarargsIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/varargs/MakeMethodVarargsIntention.java @@ -15,6 +15,7 @@ */ package com.siyeh.ipp.varargs; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.util.IncorrectOperationException; @@ -25,6 +26,8 @@ import org.jetbrains.annotations.NotNull; public class MakeMethodVarargsIntention extends Intention { + private static final Logger LOG = Logger.getInstance("#" + MakeMethodVarargsIntention.class.getName()); + @NotNull protected PsiElementPredicate getElementPredicate() { return new MakeMethodVarargsPredicate(); @@ -42,14 +45,11 @@ public class MakeMethodVarargsIntention extends Intention { final PsiParameter[] parameters = parameterList.getParameters(); final PsiParameter lastParameter = parameters[parameters.length - 1]; final PsiType type = lastParameter.getType(); - final PsiType componentType = type.getDeepComponentType(); - final String text = componentType.getCanonicalText(); - final PsiManager manager = element.getManager(); - final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory(); - final PsiParameter newParameter = - factory.createParameterFromText(text + "... " + - lastParameter.getName(), element); - lastParameter.replace(newParameter); + final PsiElementFactory factory = JavaPsiFacade.getInstance(element.getProject()).getElementFactory(); + final PsiTypeElement typeElement = lastParameter.getTypeElement(); + LOG.assertTrue(typeElement != null); + final PsiType ellipsisType = PsiEllipsisType.createEllipsis(((PsiArrayType)type).getComponentType(), type.getAnnotations()); + typeElement.replace(factory.createTypeElement(ellipsisType)); } private static void makeMethodCallsVarargs(PsiElement element) diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/conditional/withIf/ArrayInitializer.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/conditional/withIf/ArrayInitializer.java new file mode 100644 index 000000000000..68f0375e149c --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/conditional/withIf/ArrayInitializer.java @@ -0,0 +1,5 @@ +class Test { + void f(boolean b){ + String [] s = {b <caret>? "a" : "c"}; + } +}
\ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/conditional/withIf/ArrayInitializer_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/conditional/withIf/ArrayInitializer_after.java new file mode 100644 index 000000000000..022085f0a048 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/conditional/withIf/ArrayInitializer_after.java @@ -0,0 +1,7 @@ +class Test { + void f(boolean b){ + String [] s; + if (b) s = new String[]{"a"}; + else s = new String[]{"c"}; + } +}
\ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/DeepArray.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/DeepArray.java new file mode 100644 index 000000000000..eb62e9ad9d91 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/DeepArray.java @@ -0,0 +1,8 @@ +class Test { + public void foo(final String[][] a<caret>rg) { + } + + { + foo(new String[][]{}); + } +}
\ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/DeepArray_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/DeepArray_after.java new file mode 100644 index 000000000000..971148ca2481 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/DeepArray_after.java @@ -0,0 +1,8 @@ +class Test { + public void foo(final String[]... arg) { + } + + { + foo(); + } +}
\ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/Final.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/Final.java new file mode 100644 index 000000000000..1a36d0462efd --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/Final.java @@ -0,0 +1,8 @@ +class Test { + public void foo(final String[] a<caret>rg) { + } + + { + foo(new String[]{}); + } +}
\ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/Final_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/Final_after.java new file mode 100644 index 000000000000..412fd976d26d --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/varargs/make_method_varargs/Final_after.java @@ -0,0 +1,8 @@ +class Test { + public void foo(final String... arg) { + } + + { + foo(); + } +}
\ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/conditional/ReplaceConditionalWithIfTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/conditional/ReplaceConditionalWithIfTest.java index f2e32bb56f59..8ba24fdec63d 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/conditional/ReplaceConditionalWithIfTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/conditional/ReplaceConditionalWithIfTest.java @@ -28,6 +28,7 @@ public class ReplaceConditionalWithIfTest extends IPPTestCase { public void testParentheses() { doTest(); } public void testConditionalInIf() { doTest(); } public void testConditionalInBinaryExpression() { doTest(); } + public void testArrayInitializer() { doTest(); } @Override protected String getIntentionName() { diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/varargs/MakeMethodVarargsIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/varargs/MakeMethodVarargsIntentionTest.java new file mode 100644 index 000000000000..d034b2cc02f1 --- /dev/null +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/varargs/MakeMethodVarargsIntentionTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ipp.varargs; + +import com.siyeh.IntentionPowerPackBundle; +import com.siyeh.ipp.IPPTestCase; + +public class MakeMethodVarargsIntentionTest extends IPPTestCase { + + public void testFinal() { doTest(); } + public void testDeepArray() { doTest(); } + + @Override + protected String getRelativePath() { + return "varargs/make_method_varargs"; + } + + @Override + protected String getIntentionName() { + return IntentionPowerPackBundle.message("make.method.varargs.intention.name"); + } +}
\ No newline at end of file |