[lombok] MoveInitializerToConstructorAction: do not warn when all the constructors are synthetic

Fixes IDEA-313384 Lombok vs. Move initializer to constructor

GitOrigin-RevId: d5ceb52fec3937178b41adf156b29a8a35ceee75
This commit is contained in:
Tagir Valeev
2023-02-16 14:24:45 +01:00
committed by intellij-monorepo-bot
parent 50f2f5e439
commit 44ce06450e
2 changed files with 34 additions and 3 deletions

View File

@@ -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; package com.intellij.codeInsight.intention.impl;
import com.intellij.codeInsight.daemon.impl.analysis.JavaHighlightUtil; 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.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.*; import java.util.*;
@@ -34,9 +35,11 @@ public class MoveInitializerToConstructorAction extends BaseMoveInitializerToMet
if (super.isAvailable(project, editor, element)) { if (super.isAvailable(project, editor, element)) {
final PsiField field = PsiTreeUtil.getParentOfType(element, PsiField.class); final PsiField field = PsiTreeUtil.getParentOfType(element, PsiField.class);
assert field != null; 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)) { if (field.hasModifierProperty(PsiModifier.FINAL)) {
PsiClass containingClass = field.getContainingClass();
assert containingClass != null;
PsiClassInitializer[] initializers = containingClass.getInitializers(); PsiClassInitializer[] initializers = containingClass.getInitializers();
PsiElement[] elements = PsiElement[] elements =
Arrays.stream(containingClass.getFields()) Arrays.stream(containingClass.getFields())

View File

@@ -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 = <caret>3;
}
""");
assertEmpty(myFixture.filterAvailableIntentions("Move initializer to constructor"));
}
}