[java-inspections] Field can be made static: respect implicit writes

Fixes IDEA-313564 "Field can be made 'static'" false positive with Lombok

GitOrigin-RevId: f9e6acb2a4e673bebe9d6379d9a5e5869708b107
This commit is contained in:
Tagir Valeev
2023-03-13 14:37:54 +00:00
committed by intellij-monorepo-bot
parent 8751911652
commit af86126749
3 changed files with 40 additions and 0 deletions
@@ -15,6 +15,7 @@
*/
package com.siyeh.ig.performance;
import com.intellij.codeInsight.daemon.impl.UnusedSymbolUtil;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightingFeature;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
@@ -76,6 +77,9 @@ public class FieldMayBeStaticInspection extends BaseInspection {
// inner class cannot have static declarations in earlier Java versions
return;
}
if (UnusedSymbolUtil.isImplicitWrite(field)) {
return;
}
if (containingClass instanceof PsiAnonymousClass &&
!HighlightingFeature.INNER_STATICS.isAvailable(containingClass) &&
!PsiUtil.isCompileTimeConstant(field)) {
@@ -0,0 +1,21 @@
package de.plushnikov.intellij.plugin.inspection;
import com.intellij.codeInspection.InspectionProfileEntry;
import com.siyeh.ig.performance.FieldMayBeStaticInspection;
public class LombokFieldMayBeStaticInspectionTest extends LombokInspectionTest {
@Override
protected String getBasePath() {
return super.getBasePath() + "/" + TEST_DATA_INSPECTION_DIRECTORY + "/canBeStaticInspection";
}
@Override
protected InspectionProfileEntry getInspection() {
return new FieldMayBeStaticInspection();
}
public void testDefault() {
doTest();
}
}
@@ -0,0 +1,15 @@
import lombok.Builder;
@Builder
class Main {
@Builder.Default
private final int y = 3;
void test() {
System.out.println(y);
}
public void main(String[] args) {
System.out.println(y);
}
}