[lombok] IDEA-255688 Get rid of LombokHighlightErrorFilter for "Variable initialized before usage Inspection"

Used in case of lombok lazy Getter

GitOrigin-RevId: 37699b68fd2431efe92d05e86a3b09cb59e673b8
This commit is contained in:
Michail Plushnikov
2023-12-03 18:32:16 +01:00
committed by intellij-monorepo-bot
parent 69eb85b4f8
commit b2853a3590
7 changed files with 60 additions and 18 deletions

View File

@@ -35,6 +35,7 @@
<extensionPoint qualifiedName="com.intellij.lang.jvm.annotationPackageSupport" interface="com.intellij.codeInsight.annoPackages.AnnotationPackageSupport" dynamic="true"/>
<extensionPoint qualifiedName="com.intellij.lang.jvm.ignoreAnnotationParamSupport" interface="com.intellij.codeInspection.DefaultAnnotationParamInspection$IgnoreAnnotationParamSupport" dynamic="true"/>
<extensionPoint qualifiedName="com.intellij.lang.jvm.ignoreVariableInitializerSupport" interface="com.intellij.codeInspection.defUse.DefUseInspection$IgnoreVariableInitializerSupport" dynamic="true"/>
<extensionPoint qualifiedName="com.intellij.lang.jvm.ignoreVariableInitializedBeforeUsageSupport" interface="com.intellij.codeInsight.daemon.impl.analysis.VariableInitializedBeforeUsageSupport" dynamic="true"/>
<extensionPoint qualifiedName="com.intellij.javaLanguageLevelPusherCustomizer" interface="com.intellij.openapi.roots.impl.JavaLanguageLevelPusherCustomizer" dynamic="true"/>
<extensionPoint qualifiedName="com.intellij.propertyAccessorDetector" interface="com.intellij.psi.util.PropertyAccessorDetector" dynamic="true"/>
<extensionPoint qualifiedName="com.intellij.virtualManifestProvider" interface="com.intellij.codeInsight.daemon.impl.analysis.VirtualManifestProvider" dynamic="true"/>

View File

@@ -318,6 +318,10 @@ public final class HighlightControlFlowUtil {
boolean ignoreFinality) {
if (variable instanceof ImplicitVariable) return null;
if (!PsiUtil.isAccessedForReading(expression)) return null;
if (ContainerUtil.exists(VariableInitializedBeforeUsageSupport.EP_NAME.getExtensionList(),
ext -> ext.ignoreVariableExpression(expression, variable))) {
return null;
}
int startOffset = expression.getTextRange().getStartOffset();
PsiElement topBlock;
if (variable.hasInitializer()) {
@@ -830,7 +834,7 @@ public final class HighlightControlFlowUtil {
@Override
public void visitReferenceExpression(@NotNull PsiReferenceExpression expression) {
if (expression.isReferenceTo(variable) &&
PsiUtil.isAccessedForWriting(expression) &&
PsiUtil.isAccessedForWriting(expression) &&
ControlFlowUtil.isVariableAssignedInLoop(expression, variable)) {
stopWalking();
stopped.set(true);

View File

@@ -0,0 +1,26 @@
// 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.daemon.impl.analysis;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.psi.PsiReferenceExpression;
import com.intellij.psi.PsiVariable;
import org.jetbrains.annotations.NotNull;
/**
* Allows skipping 'Variable might not have been initialized' highlighting for specific PsiReference
*/
public interface VariableInitializedBeforeUsageSupport {
ExtensionPointName<VariableInitializedBeforeUsageSupport> EP_NAME =
ExtensionPointName.create("com.intellij.lang.jvm.ignoreVariableInitializedBeforeUsageSupport");
/**
* Checks if the given expression should be ignored for inspection.
*
* @param psiExpression the expression to be checked for ignoring the initializer
* @param psiVariable the variable from the expression resolving
* @return true if the inspection should be skipped for the {@code psiExpression},
* otherwise false
*/
default boolean ignoreVariableExpression(@NotNull PsiReferenceExpression psiExpression, @NotNull PsiVariable psiVariable) {
return false;
}
}