From 44ce06450e726be7f0dc80dc81f77aee72297d2e Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Thu, 16 Feb 2023 14:24:45 +0100 Subject: [PATCH] [lombok] MoveInitializerToConstructorAction: do not warn when all the constructors are synthetic Fixes IDEA-313384 Lombok vs. Move initializer to constructor GitOrigin-RevId: d5ceb52fec3937178b41adf156b29a8a35ceee75 --- .../MoveInitializerToConstructorAction.java | 9 ++++-- ...ombokMoveInitializerToConstructorTest.java | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokMoveInitializerToConstructorTest.java diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java index b3e349a39749..dc9f4d5410f6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java @@ -1,4 +1,4 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInsight.intention.impl; import com.intellij.codeInsight.daemon.impl.analysis.JavaHighlightUtil; @@ -12,6 +12,7 @@ import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -34,9 +35,11 @@ public class MoveInitializerToConstructorAction extends BaseMoveInitializerToMet if (super.isAvailable(project, editor, element)) { final PsiField field = PsiTreeUtil.getParentOfType(element, PsiField.class); assert field != null; + PsiClass containingClass = field.getContainingClass(); + assert containingClass != null; + PsiMethod[] constructors = containingClass.getConstructors(); + if (constructors.length > 0 && ContainerUtil.all(constructors, c -> c instanceof SyntheticElement)) return false; if (field.hasModifierProperty(PsiModifier.FINAL)) { - PsiClass containingClass = field.getContainingClass(); - assert containingClass != null; PsiClassInitializer[] initializers = containingClass.getInitializers(); PsiElement[] elements = Arrays.stream(containingClass.getFields()) diff --git a/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokMoveInitializerToConstructorTest.java b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokMoveInitializerToConstructorTest.java new file mode 100644 index 000000000000..99c8406ff32f --- /dev/null +++ b/plugins/lombok/src/test/java/de/plushnikov/intellij/plugin/inspection/LombokMoveInitializerToConstructorTest.java @@ -0,0 +1,28 @@ +package de.plushnikov.intellij.plugin.inspection; + +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; +import de.plushnikov.intellij.plugin.LombokTestUtil; +import org.jetbrains.annotations.NotNull; + + +public class LombokMoveInitializerToConstructorTest extends LightJavaCodeInsightFixtureTestCase { + @Override + protected @NotNull LightProjectDescriptor getProjectDescriptor() { + return LombokTestUtil.LOMBOK_DESCRIPTOR; + } + + public void testMoveInitializerToConstructor() { + myFixture.configureByText("Test.java", """ + import lombok.AllArgsConstructor; + + @AllArgsConstructor + public class Main { + int x; + int y = 3; + } + """); + assertEmpty(myFixture.filterAvailableIntentions("Move initializer to constructor")); + } + +}