From 72e58a3abc0b0e0fc1aad7db4469afe8203d6418 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Wed, 22 Jun 2016 21:40:07 +0300 Subject: [PATCH] Java inspection: convert the intention for "Replace method reference with lambda" into an INFORMATION-level inspection --- .../src/META-INF/InspectionGadgets.xml | 4 + .../siyeh/InspectionGadgetsBundle.properties | 4 +- .../ReplaceLambdaWithAnonymousInspection.java | 4 +- .../ReplaceMethodRefWithLambdaInspection.java | 166 ++++++++++++++++++ .../ReplaceMethodRefWithLambda.html | 5 + .../methodRefs2lambda/Ambiguity.after.java} | 0 .../style}/methodRefs2lambda/Ambiguity.java | 0 .../ArrayConstructorRef.after.java} | 0 .../ArrayConstructorRef.java | 0 .../ArrayConstructorRef2Dim.after.java} | 0 .../ArrayConstructorRef2Dim.java | 0 ...yConstructorRefUniqueParamName.after.java} | 0 .../ArrayConstructorRefUniqueParamName.java | 0 .../ArrayMethodRef.after.java} | 0 .../methodRefs2lambda/ArrayMethodRef.java | 0 ...apseToExpressionLambdaWhenCast.after.java} | 0 .../CollapseToExpressionLambdaWhenCast.java | 0 .../methodRefs2lambda/ExprRefs.after.java} | 0 .../style}/methodRefs2lambda/ExprRefs.java | 0 ...VariableForSideEffectQualifier.after.java} | 0 ...troduceVariableForSideEffectQualifier.java | 0 .../NameConflicts.after.java} | 0 .../methodRefs2lambda/NameConflicts.java | 0 .../NewDefaultConstructor.after.java} | 0 .../NewDefaultConstructor.java | 0 .../methodRefs2lambda/NewRefs.after.java} | 0 .../style}/methodRefs2lambda/NewRefs.java | 0 .../NewRefsDefaultConstructor.after.java} | 0 .../NewRefsDefaultConstructor.java | 0 .../NewRefsInference.after.java} | 0 .../methodRefs2lambda/NewRefsInference.java | 0 .../NewRefsInference1.after.java} | 0 .../methodRefs2lambda/NewRefsInference1.java | 0 .../NewRefsInnerClass.after.java} | 0 .../methodRefs2lambda/NewRefsInnerClass.java | 0 .../NewRefsStaticInnerClass.after.java} | 0 .../NewRefsStaticInnerClass.java | 0 .../PreserveExpressionQualifier.after.java} | 0 .../PreserveExpressionQualifier.java | 0 .../methodRefs2lambda/Receiver.after.java} | 0 .../style}/methodRefs2lambda/Receiver.java | 0 .../RedundantCast.after.java} | 0 .../methodRefs2lambda/RedundantCast.java | 0 .../StaticMethodRef.after.java} | 0 .../methodRefs2lambda/StaticMethodRef.java | 0 .../style/methodRefs2lambda/Subst.after.java} | 0 .../style}/methodRefs2lambda/Subst.java | 0 .../methodRefs2lambda/SuperRefs.after.java} | 0 .../style}/methodRefs2lambda/SuperRefs.java | 0 .../methodRefs2lambda/ThisRefs.after.java} | 0 .../style}/methodRefs2lambda/ThisRefs.java | 0 .../TypeElementOnTheLeft.after.java} | 0 .../TypeElementOnTheLeft.java | 0 ...laceMethodReferenceWithLambdaFixTest.java} | 31 ++-- .../src/META-INF/IntentionPowerPack.xml | 6 - .../siyeh/IntentionPowerPackBundle.properties | 2 - .../ReplaceMethodRefWithLambdaIntention.java | 70 -------- .../after.java.template | 10 -- .../before.java.template | 10 -- .../description.html | 5 - 60 files changed, 194 insertions(+), 123 deletions(-) create mode 100644 plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceMethodRefWithLambdaInspection.java create mode 100644 plugins/InspectionGadgets/src/inspectionDescriptions/ReplaceMethodRefWithLambda.html rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Ambiguity_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Ambiguity.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/Ambiguity.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/ArrayConstructorRef.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef2Dim_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef2Dim.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/ArrayConstructorRef2Dim.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRefUniqueParamName_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRefUniqueParamName.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/ArrayConstructorRefUniqueParamName.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayMethodRef_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayMethodRef.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/ArrayMethodRef.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/CollapseToExpressionLambdaWhenCast_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ExprRefs_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ExprRefs.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/ExprRefs.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/IntroduceVariableForSideEffectQualifier_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NameConflicts_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NameConflicts.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NameConflicts.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewDefaultConstructor_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewDefaultConstructor.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NewDefaultConstructor.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefs_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefs.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NewRefs.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsDefaultConstructor_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsDefaultConstructor.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NewRefsDefaultConstructor.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NewRefsInference.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference1_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference1.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NewRefsInference1.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInnerClass_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInnerClass.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NewRefsInnerClass.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsStaticInnerClass_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsStaticInnerClass.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/NewRefsStaticInnerClass.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/PreserveExpressionQualifier_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/PreserveExpressionQualifier.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/PreserveExpressionQualifier.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Receiver_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Receiver.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/Receiver.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/RedundantCast_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/RedundantCast.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/RedundantCast.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/StaticMethodRef_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/StaticMethodRef.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/StaticMethodRef.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Subst_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Subst.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/Subst.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/SuperRefs_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/SuperRefs.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/SuperRefs.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ThisRefs_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ThisRefs.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/ThisRefs.java (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/TypeElementOnTheLeft_after.java => InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/TypeElementOnTheLeft.after.java} (100%) rename plugins/{IntentionPowerPak/test/com/siyeh/ipp/types => InspectionGadgets/test/com/siyeh/igfixes/style}/methodRefs2lambda/TypeElementOnTheLeft.java (100%) rename plugins/{IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceMethodReferenceWithLambdaIntentionTest.java => InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/ReplaceMethodReferenceWithLambdaFixTest.java} (76%) delete mode 100644 plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceMethodRefWithLambdaIntention.java delete mode 100644 plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/after.java.template delete mode 100644 plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/before.java.template delete mode 100644 plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/description.html diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml index eb93a93c02a8..da83e44cc317 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml @@ -2551,6 +2551,10 @@ key="replace.lambda.with.anonymous.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.code.style.issues" enabledByDefault="true" level="INFORMATION" implementationClass="com.siyeh.ig.style.ReplaceLambdaWithAnonymousInspection"/> + '{'...'}' replace.diamond.with.explicit.type.arguments.name=Replace diamond with explicit type arguments replace.diamond.with.explicit.type.arguments.descriptor=Replace '<>' with explicit type arguments replace.lambda.with.anonymous.name=Replace lambda with anonymous class -replace.lambda.with.anonymous.descriptor=Replace lambda with anonymous class \ No newline at end of file +replace.lambda.with.anonymous.descriptor=Replace lambda with anonymous class +replace.method.ref.with.lambda.name=Replace method reference with lambda +replace.method.ref.with.lambda.descriptor=Replace method reference with lambda \ No newline at end of file diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceLambdaWithAnonymousInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceLambdaWithAnonymousInspection.java index 42bc85b22f28..c8c4beb6f2f8 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceLambdaWithAnonymousInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceLambdaWithAnonymousInspection.java @@ -236,14 +236,14 @@ public class ReplaceLambdaWithAnonymousInspection extends BaseInspection { @NotNull @Override public String getName() { - return InspectionGadgetsBundle.message("replace.lambda.with.anonymous.name"); + return InspectionGadgetsBundle.message("replace.lambda.with.anonymous.descriptor"); } @Nls @NotNull @Override public String getFamilyName() { - return InspectionGadgetsBundle.message("replace.lambda.with.anonymous.descriptor"); + return InspectionGadgetsBundle.message("replace.lambda.with.anonymous.name"); } @Override diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceMethodRefWithLambdaInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceMethodRefWithLambdaInspection.java new file mode 100644 index 000000000000..4cf82ab80616 --- /dev/null +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/ReplaceMethodRefWithLambdaInspection.java @@ -0,0 +1,166 @@ +/* + * Copyright 2011 Bas Leijdekkers + * + * 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.ig.style; + +import com.intellij.codeInsight.FileModificationService; +import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.ide.DataManager; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.command.CommandProcessor; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.AsyncResult; +import com.intellij.openapi.util.Factory; +import com.intellij.psi.*; +import com.intellij.refactoring.util.LambdaRefactoringUtil; +import com.intellij.util.Consumer; +import com.siyeh.InspectionGadgetsBundle; +import com.siyeh.ig.BaseInspection; +import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.InspectionGadgetsFix; +import com.siyeh.ig.psiutils.SideEffectChecker; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class ReplaceMethodRefWithLambdaInspection extends BaseInspection { + private static final Logger LOG = Logger.getInstance("#" + ReplaceMethodRefWithLambdaInspection.class.getName()); + + @Nls + @NotNull + @Override + public String getDisplayName() { + return InspectionGadgetsBundle.message("replace.method.ref.with.lambda.name"); + } + + @NotNull + @Override + protected String buildErrorString(Object... infos) { + return InspectionGadgetsBundle.message("replace.method.ref.with.lambda.descriptor"); + } + + @Override + public BaseInspectionVisitor buildVisitor() { + return new MethodRefToLambdaVisitor(); + } + + @Nullable + @Override + protected InspectionGadgetsFix buildFix(Object... infos) { + if (infos.length == 1) { + final Object info = infos[0]; + if (info instanceof FixFactory) { + return ((FixFactory)info).create(); + } + } + return null; + } + + private static class MethodRefToLambdaVisitor extends BaseInspectionVisitor { + @Override + public void visitMethodReferenceExpression(PsiMethodReferenceExpression methodReferenceExpression) { + super.visitMethodReferenceExpression(methodReferenceExpression); + final PsiType interfaceType = methodReferenceExpression.getFunctionalInterfaceType(); + if (interfaceType != null && + LambdaUtil.getFunctionalInterfaceMethod(interfaceType) != null && + methodReferenceExpression.resolve() != null) { + registerError(methodReferenceExpression, getFixFactory(isWithSideEffects(methodReferenceExpression), isOnTheFly())); + } + } + + private static FixFactory getFixFactory(boolean withSideEffects, boolean onTheFly) { + if (!withSideEffects) return MethodRefToLambdaFix::new; + if (onTheFly || ApplicationManager.getApplication().isUnitTestMode()) return SideEffectsMethodRefToLambdaFix::new; + return null; + } + + private static boolean isWithSideEffects(PsiMethodReferenceExpression methodReferenceExpression) { + final PsiExpression qualifierExpression = methodReferenceExpression.getQualifierExpression(); + if (qualifierExpression != null) { + final List sideEffects = new ArrayList(); + SideEffectChecker.checkSideEffects(qualifierExpression, sideEffects); + return !sideEffects.isEmpty(); + } + return false; + } + } + + private static class MethodRefToLambdaFix extends InspectionGadgetsFix { + @Nls + @NotNull + @Override + public String getName() { + return InspectionGadgetsBundle.message("replace.method.ref.with.lambda.descriptor"); + } + + @Nls + @NotNull + @Override + public String getFamilyName() { + return InspectionGadgetsBundle.message("replace.method.ref.with.lambda.name"); + } + + @Override + protected void doFix(Project project, ProblemDescriptor descriptor) { + final PsiElement element = descriptor.getPsiElement(); + if (element instanceof PsiMethodReferenceExpression) { + doFix(project, (PsiMethodReferenceExpression)element); + } + } + + protected void doFix(Project project, @NotNull PsiMethodReferenceExpression methodReferenceExpression) { + LambdaRefactoringUtil.convertMethodReferenceToLambda(methodReferenceExpression, false, true); + } + } + + private static class SideEffectsMethodRefToLambdaFix extends MethodRefToLambdaFix { + @Override + public boolean startInWriteAction() { + return false; + } + + @Override + protected void doFix(Project project, @NotNull PsiMethodReferenceExpression methodReferenceExpression) { + final AsyncResult contextFromFocus = DataManager.getInstance().getDataContextFromFocus(); + contextFromFocus.doWhenDone((Consumer)context -> { + final Editor editor = CommonDataKeys.EDITOR.getData(context); + if (editor != null) { + CommandProcessor.getInstance() + .executeCommand(project, () -> doFixAndRemoveSideEffects(editor, methodReferenceExpression), getFamilyName(), null); + } + }); + } + + private static void doFixAndRemoveSideEffects(@NotNull Editor editor, @NotNull PsiMethodReferenceExpression methodReferenceExpression) { + if (!FileModificationService.getInstance().preparePsiElementsForWrite(methodReferenceExpression)) return; + final PsiLambdaExpression lambdaExpression = + WriteAction.compute(() -> LambdaRefactoringUtil.convertMethodReferenceToLambda(methodReferenceExpression, false, true)); + if (lambdaExpression != null) { + LambdaRefactoringUtil.removeSideEffectsFromLambdaBody(editor, lambdaExpression); + } + } + } + + private interface FixFactory extends Factory { + } +} diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/ReplaceMethodRefWithLambda.html b/plugins/InspectionGadgets/src/inspectionDescriptions/ReplaceMethodRefWithLambda.html new file mode 100644 index 000000000000..60457ad64c41 --- /dev/null +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/ReplaceMethodRefWithLambda.html @@ -0,0 +1,5 @@ + + +This inspection expands method reference to lambda expression + + \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Ambiguity_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Ambiguity.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Ambiguity_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Ambiguity.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Ambiguity.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Ambiguity.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Ambiguity.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Ambiguity.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef2Dim_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef2Dim.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef2Dim_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef2Dim.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef2Dim.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef2Dim.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRef2Dim.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRef2Dim.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRefUniqueParamName_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRefUniqueParamName.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRefUniqueParamName_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRefUniqueParamName.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRefUniqueParamName.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRefUniqueParamName.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayConstructorRefUniqueParamName.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayConstructorRefUniqueParamName.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayMethodRef_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayMethodRef.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayMethodRef_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayMethodRef.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayMethodRef.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayMethodRef.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ArrayMethodRef.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ArrayMethodRef.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/CollapseToExpressionLambdaWhenCast_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/CollapseToExpressionLambdaWhenCast_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/CollapseToExpressionLambdaWhenCast.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ExprRefs_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ExprRefs.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ExprRefs_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ExprRefs.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ExprRefs.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ExprRefs.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ExprRefs.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ExprRefs.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/IntroduceVariableForSideEffectQualifier_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/IntroduceVariableForSideEffectQualifier_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/IntroduceVariableForSideEffectQualifier.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NameConflicts_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NameConflicts.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NameConflicts_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NameConflicts.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NameConflicts.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NameConflicts.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NameConflicts.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NameConflicts.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewDefaultConstructor_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewDefaultConstructor.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewDefaultConstructor_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewDefaultConstructor.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewDefaultConstructor.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewDefaultConstructor.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewDefaultConstructor.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewDefaultConstructor.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefs_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefs.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefs_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefs.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefs.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefs.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefs.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefs.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsDefaultConstructor_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsDefaultConstructor.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsDefaultConstructor_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsDefaultConstructor.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsDefaultConstructor.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsDefaultConstructor.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsDefaultConstructor.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsDefaultConstructor.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference1_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference1.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference1_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference1.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference1.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference1.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInference1.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInference1.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInnerClass_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInnerClass.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInnerClass_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInnerClass.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInnerClass.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInnerClass.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsInnerClass.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsInnerClass.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsStaticInnerClass_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsStaticInnerClass.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsStaticInnerClass_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsStaticInnerClass.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsStaticInnerClass.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsStaticInnerClass.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/NewRefsStaticInnerClass.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NewRefsStaticInnerClass.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/PreserveExpressionQualifier_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/PreserveExpressionQualifier.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/PreserveExpressionQualifier_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/PreserveExpressionQualifier.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/PreserveExpressionQualifier.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/PreserveExpressionQualifier.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/PreserveExpressionQualifier.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/PreserveExpressionQualifier.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Receiver_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Receiver.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Receiver_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Receiver.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Receiver.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Receiver.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Receiver.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Receiver.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/RedundantCast_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/RedundantCast.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/RedundantCast_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/RedundantCast.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/RedundantCast.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/RedundantCast.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/RedundantCast.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/RedundantCast.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/StaticMethodRef_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/StaticMethodRef.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/StaticMethodRef_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/StaticMethodRef.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/StaticMethodRef.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/StaticMethodRef.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/StaticMethodRef.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/StaticMethodRef.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Subst_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Subst.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Subst_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Subst.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Subst.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Subst.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/Subst.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/Subst.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/SuperRefs_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/SuperRefs.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/SuperRefs_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/SuperRefs.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/SuperRefs.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/SuperRefs.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/SuperRefs.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/SuperRefs.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ThisRefs_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ThisRefs.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ThisRefs_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ThisRefs.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ThisRefs.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ThisRefs.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/ThisRefs.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/ThisRefs.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/TypeElementOnTheLeft_after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/TypeElementOnTheLeft.after.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/TypeElementOnTheLeft_after.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/TypeElementOnTheLeft.after.java diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/TypeElementOnTheLeft.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/TypeElementOnTheLeft.java similarity index 100% rename from plugins/IntentionPowerPak/test/com/siyeh/ipp/types/methodRefs2lambda/TypeElementOnTheLeft.java rename to plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/TypeElementOnTheLeft.java diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceMethodReferenceWithLambdaIntentionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/ReplaceMethodReferenceWithLambdaFixTest.java similarity index 76% rename from plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceMethodReferenceWithLambdaIntentionTest.java rename to plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/ReplaceMethodReferenceWithLambdaFixTest.java index eab2ea14e72d..f61f5fef005d 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/types/ReplaceMethodReferenceWithLambdaIntentionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/ReplaceMethodReferenceWithLambdaFixTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -13,23 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.siyeh.ipp.types; +package com.siyeh.ig.fixes.style; -import com.intellij.testFramework.LightProjectDescriptor; -import com.siyeh.IntentionPowerPackBundle; -import com.siyeh.ipp.IPPTestCase; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.roots.ModuleRootModificationUtil; +import com.intellij.testFramework.IdeaTestUtil; +import com.siyeh.InspectionGadgetsBundle; +import com.siyeh.ig.IGQuickFixesTestCase; +import com.siyeh.ig.style.ReplaceMethodRefWithLambdaInspection; -public class ReplaceMethodReferenceWithLambdaIntentionTest extends IPPTestCase { - +public class ReplaceMethodReferenceWithLambdaFixTest extends IGQuickFixesTestCase { @Override - protected String getIntentionName() { - return IntentionPowerPackBundle.message("replace.method.ref.with.lambda.intention.name"); + protected void setUp() throws Exception { + super.setUp(); + ModuleRootModificationUtil.setModuleSdk(myModule, IdeaTestUtil.getMockJdk18()); + myFixture.enableInspections(new ReplaceMethodRefWithLambdaInspection()); + myDefaultHint = InspectionGadgetsBundle.message("replace.method.ref.with.lambda.descriptor"); } @Override protected String getRelativePath() { - return "types/methodRefs2lambda"; + return "style/methodRefs2lambda"; } public void testRedundantCast() throws Exception { @@ -127,10 +130,4 @@ public class ReplaceMethodReferenceWithLambdaIntentionTest extends IPPTestCase { public void testPreserveExpressionQualifier() throws Exception { doTest(); } - - @NotNull - @Override - protected LightProjectDescriptor getProjectDescriptor() { - return JAVA_8; - } } diff --git a/plugins/IntentionPowerPak/src/META-INF/IntentionPowerPack.xml b/plugins/IntentionPowerPak/src/META-INF/IntentionPowerPack.xml index 6752c0dc3825..8d7b8d730f80 100644 --- a/plugins/IntentionPowerPak/src/META-INF/IntentionPowerPack.xml +++ b/plugins/IntentionPowerPak/src/META-INF/IntentionPowerPack.xml @@ -259,12 +259,6 @@ intention.category.declaration - - com.siyeh.ipp.types.ReplaceMethodRefWithLambdaIntention - com.siyeh.IntentionPowerPackBundle - intention.category.declaration - - com.siyeh.ipp.decls.ChangeVariableTypeToRhsTypeIntention com.siyeh.IntentionPowerPackBundle diff --git a/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties b/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties index d2b8170668c1..2bbffe605bb5 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties +++ b/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties @@ -162,8 +162,6 @@ split.try.with.multiple.resources.intention.name=Split 'try' statement with mult split.try.with.multiple.resources.intention.family.name=Split Try Statement with Multiple Resources obscure.thrown.exceptions.intention.family.name=Replace Exceptions in Throws Clause with Single More General Exception add.array.creation.expression.intention.family.name=Add Array Creation Expression -replace.method.ref.with.lambda.intention.name=Replace method reference with lambda -replace.method.ref.with.lambda.intention.family.name=Replace method reference with lambda make.public.intention.name=Make 'public' make.public.intention.family.name=Make Public make.package.private.intention.name=Make package-private diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceMethodRefWithLambdaIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceMethodRefWithLambdaIntention.java deleted file mode 100644 index 596888332a10..000000000000 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/types/ReplaceMethodRefWithLambdaIntention.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2011 Bas Leijdekkers - * - * 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.types; - -import com.intellij.openapi.application.WriteAction; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.refactoring.util.LambdaRefactoringUtil; -import com.siyeh.ipp.base.Intention; -import com.siyeh.ipp.base.PsiElementPredicate; -import org.jetbrains.annotations.NotNull; - -public class ReplaceMethodRefWithLambdaIntention extends Intention { - private static final Logger LOG = Logger.getInstance("#" + ReplaceMethodRefWithLambdaIntention.class.getName()); - - @NotNull - @Override - protected PsiElementPredicate getElementPredicate() { - return new MethodRefPredicate(); - } - - @Override - protected void processIntention(@NotNull PsiElement element) {} - - @Override - public boolean startInWriteAction() { - return false; - } - - @Override - protected void processIntention(final Editor editor, @NotNull PsiElement element) { - PsiMethodReferenceExpression ref = PsiTreeUtil.getParentOfType(element, PsiMethodReferenceExpression.class); - PsiLambdaExpression expr = ref != null - ? WriteAction.compute(() -> LambdaRefactoringUtil.convertMethodReferenceToLambda(ref, false, true)) - : null; - if (expr == null) return; - LambdaRefactoringUtil.removeSideEffectsFromLambdaBody(editor, expr); - } - - private static class MethodRefPredicate implements PsiElementPredicate { - @Override - public boolean satisfiedBy(PsiElement element) { - final PsiMethodReferenceExpression methodReferenceExpression = PsiTreeUtil.getParentOfType(element, PsiMethodReferenceExpression.class); - if (methodReferenceExpression != null) { - final PsiType interfaceType = methodReferenceExpression.getFunctionalInterfaceType(); - if (interfaceType != null && - LambdaUtil.getFunctionalInterfaceMethod(interfaceType) != null && - methodReferenceExpression.resolve() != null) { - return true; - } - } - return false; - } - } -} diff --git a/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/after.java.template b/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/after.java.template deleted file mode 100644 index 670ce55da81d..000000000000 --- a/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/after.java.template +++ /dev/null @@ -1,10 +0,0 @@ -class X { - interface I { - void _(); - } - - static void m() {} - { - I i = () -> m(); - } -} diff --git a/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/before.java.template b/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/before.java.template deleted file mode 100644 index 2633e25f6954..000000000000 --- a/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/before.java.template +++ /dev/null @@ -1,10 +0,0 @@ -class X { - interface I { - void _(); - } - - static void m() {} - { - I i = X :: m; - } -} diff --git a/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/description.html b/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/description.html deleted file mode 100644 index 977d2eb22cef..000000000000 --- a/plugins/IntentionPowerPak/src/intentionDescriptions/ReplaceMethodRefWithLambdaIntention/description.html +++ /dev/null @@ -1,5 +0,0 @@ - - -This intention expands method reference to lambda expression - -