From 048fb109378212801c83d32fd216f48bdbedd1fd Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Sat, 15 Aug 2015 13:30:29 +0200 Subject: [PATCH 1/4] test backed by pattern: ensure jvm names are used (IDEA-143892) --- .../AbstractPatternBasedConfigurationProducer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java index 3091588f3cd5..12a0502e31a6 100644 --- a/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/testframework/AbstractPatternBasedConfigurationProducer.java @@ -22,7 +22,6 @@ import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ModuleBasedConfiguration; import com.intellij.execution.junit.JavaRunConfigurationProducerBase; import com.intellij.execution.junit2.info.MethodLocation; -import com.intellij.execution.testframework.TestsUIUtil; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; @@ -31,6 +30,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.psi.util.ClassUtil; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -153,13 +153,13 @@ public abstract class AbstractPatternBasedConfigurationProducer Date: Mon, 17 Aug 2015 11:16:19 +0200 Subject: [PATCH 2/4] testng: include bundled jcommander.jar when adding testng dependency --- .../testng/intention/TestNGExternalLibraryResolver.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/testng/src/com/theoryinpractice/testng/intention/TestNGExternalLibraryResolver.java b/plugins/testng/src/com/theoryinpractice/testng/intention/TestNGExternalLibraryResolver.java index 0cb881af836a..91a826899724 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/intention/TestNGExternalLibraryResolver.java +++ b/plugins/testng/src/com/theoryinpractice/testng/intention/TestNGExternalLibraryResolver.java @@ -15,6 +15,7 @@ */ package com.theoryinpractice.testng.intention; +import com.beust.jcommander.JCommander; import com.intellij.openapi.roots.ExternalLibraryDescriptor; import com.intellij.codeInsight.daemon.quickFix.ExternalLibraryResolver; import com.intellij.openapi.module.Module; @@ -23,8 +24,10 @@ import com.intellij.util.ThreeState; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.testng.CommandLineArgs; import org.testng.annotations.Test; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; @@ -41,7 +44,7 @@ public class TestNGExternalLibraryResolver extends ExternalLibraryResolver { @NotNull @Override public List getLibraryClassesRoots() { - return Collections.singletonList(PathUtil.getJarPathForClass(Test.class)); + return Arrays.asList(PathUtil.getJarPathForClass(Test.class), PathUtil.getJarPathForClass(JCommander.class)); } }; From 210d5de79a681b837d78d81cb25c514748e6720d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 17 Aug 2015 13:53:27 +0200 Subject: [PATCH 3/4] unused declaration: ensure used static imports are not ignored (IDEA-143882) --- .../codeInspection/reference/RefJavaUtilImpl.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java index 22d347ee1ecb..da24eb09b85d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java @@ -37,7 +37,7 @@ import java.util.Collections; public class RefJavaUtilImpl extends RefJavaUtil{ @Override - public void addReferences(@NotNull final PsiModifierListOwner psiFrom, @NotNull final RefJavaElement ref, @Nullable PsiElement findIn) { + public void addReferences(@NotNull final PsiModifierListOwner psiFrom, @NotNull final RefJavaElement ref, @Nullable final PsiElement findIn) { final RefJavaElementImpl refFrom = (RefJavaElementImpl)ref; if (findIn == null) { return; @@ -61,7 +61,8 @@ public class RefJavaUtilImpl extends RefJavaUtil{ @Override public void visitReferenceExpression(PsiReferenceExpression expression) { visitElement(expression); - PsiElement psiResolved = expression.resolve(); + final JavaResolveResult result = expression.advancedResolve(false); + final PsiElement psiResolved = result.getElement(); if (psiResolved instanceof PsiModifierListOwner) { if (isDeprecated(psiResolved)) refFrom.setUsesDeprecatedApi(true); @@ -76,6 +77,16 @@ public class RefJavaUtilImpl extends RefJavaUtil{ if (refResolved instanceof RefMethod) { updateRefMethod(psiResolved, refResolved, expression, psiFrom, refFrom); } + + if (psiResolved instanceof PsiMember && result.getCurrentFileResolveScope() instanceof PsiImportStaticStatement) { + final PsiClass containingClass = ((PsiMember)psiResolved).getContainingClass(); + if (containingClass != null) { + RefElement refContainingClass = refFrom.getRefManager().getReference(containingClass); + if (refContainingClass != null) { + refFrom.addReference(refContainingClass, containingClass, psiFrom, false, true, expression); + } + } + } } From bbda6d8b02d70203032c06e4fef4ee302cc68e1b Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 17 Aug 2015 14:49:58 +0200 Subject: [PATCH 4/4] fix operation assignment (IDEA-143986) --- .../editorActions/DeclarationJoinLinesHandler.java | 14 ++++++++++---- .../codeInspection/RemoveAssignmentFix.java | 9 ++++++++- .../unusedAssignment/afterAssignmentOperation.java | 10 ++++++++++ .../beforeAssignmentOperation.java | 10 ++++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterAssignmentOperation.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeAssignmentOperation.java diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/DeclarationJoinLinesHandler.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/DeclarationJoinLinesHandler.java index a09e8dd983e6..8a404ea89def 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/DeclarationJoinLinesHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/DeclarationJoinLinesHandler.java @@ -104,6 +104,12 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate { public static PsiExpression getInitializerExpression(PsiLocalVariable var, PsiAssignmentExpression assignment) { + return getInitializerExpression(var.getInitializer(), + assignment); + } + + public static PsiExpression getInitializerExpression(PsiExpression initializer, + PsiAssignmentExpression assignment) { PsiExpression initializerExpression; final IElementType originalOpSign = assignment.getOperationTokenType(); final PsiExpression rExpression = assignment.getRExpression(); @@ -111,7 +117,7 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate { initializerExpression = rExpression; } else { - if (var.getInitializer() == null) return null; + if (initializer == null) return null; String opSign = null; if (originalOpSign == JavaTokenType.ANDEQ) { opSign = "&"; @@ -148,8 +154,8 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate { } try { - final Project project = var.getProject(); - String initializerText = var.getInitializer().getText() + opSign; + final Project project = assignment.getProject(); + String initializerText = initializer.getText() + opSign; final String rightText = rExpression.getText(); if (ParenthesesUtils.areParenthesesNeeded(assignment.getOperationSign(), rExpression)) { initializerText += "(" + rightText + ")"; @@ -157,7 +163,7 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate { else { initializerText += rightText; } - initializerExpression = JavaPsiFacade.getElementFactory(project).createExpressionFromText(initializerText, var); + initializerExpression = JavaPsiFacade.getElementFactory(project).createExpressionFromText(initializerText, assignment); initializerExpression = (PsiExpression)CodeStyleManager.getInstance(project).reformat(initializerExpression); } catch (IncorrectOperationException e) { diff --git a/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java b/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java index 87c5a3ace5dd..d2d962623c7b 100644 --- a/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java +++ b/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java @@ -16,8 +16,10 @@ package com.intellij.codeInspection; import com.intellij.codeInsight.FileModificationService; +import com.intellij.codeInsight.editorActions.DeclarationJoinLinesHandler; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.NotNull; @@ -38,7 +40,12 @@ public class RemoveAssignmentFix extends RemoveInitializerFix { parent = element; } if (!(parent instanceof PsiAssignmentExpression)) return; - final PsiExpression rExpression = ((PsiAssignmentExpression)parent).getRExpression(); + final IElementType operationSign = ((PsiAssignmentExpression)parent).getOperationTokenType(); + PsiExpression rExpression = ((PsiAssignmentExpression)parent).getRExpression(); + if (JavaTokenType.EQ != operationSign && rExpression != null ) { + rExpression = DeclarationJoinLinesHandler.getInitializerExpression(((PsiAssignmentExpression)parent).getLExpression(), + (PsiAssignmentExpression)parent); + } final PsiElement gParent = parent.getParent(); if ((gParent instanceof PsiExpression || gParent instanceof PsiExpressionList || gParent instanceof PsiReturnStatement) && rExpression != null) { if (!FileModificationService.getInstance().prepareFileForWrite(gParent.getContainingFile())) return; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterAssignmentOperation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterAssignmentOperation.java new file mode 100644 index 000000000000..4bc7ccb75bad --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterAssignmentOperation.java @@ -0,0 +1,10 @@ +// "Remove redundant assignment" "true" +class A { + public String getContexts(final String env) { + String contexts = "a"; + if ("dev".equals(env)) { + return contexts + ",b"; + } + return contexts; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeAssignmentOperation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeAssignmentOperation.java new file mode 100644 index 000000000000..0fd309432830 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeAssignmentOperation.java @@ -0,0 +1,10 @@ +// "Remove redundant assignment" "true" +class A { + public String getContexts(final String env) { + String contexts = "a"; + if ("dev".equals(env)) { + return contexts += ",b"; + } + return contexts; + } +} \ No newline at end of file