[java-inspections] ExtractMethodRecommender: disable for non-denotable output variable

Fixes IDEA-364433 "Method can be extracted" with 'var' and anonymous class leads to compile error


(cherry picked from commit 8d2f0b12059c8412ed6e1c91d9b8e79ee70cb31c)

IJ-CR-156964

GitOrigin-RevId: ebc0ceab00b591e4b139f79bd9bdf2fbd24af1ee
This commit is contained in:
Tagir Valeev
2025-03-12 11:16:49 +00:00
committed by intellij-monorepo-bot
parent ebd0b33ffd
commit 1efe361fe9
2 changed files with 71 additions and 0 deletions
@@ -19,6 +19,7 @@ import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PropertyUtilBase;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.extractMethod.newImpl.ExtractException;
import com.intellij.refactoring.extractMethod.newImpl.ExtractMethodAnalyzerKt;
@@ -96,6 +97,10 @@ public final class ExtractMethodRecommenderInspection extends AbstractBaseJavaLo
if (variables.length != 1) continue;
PsiVariable output = variables[0];
if (SideEffectsVisitor.hasSideEffectOrSimilarUseOutside(range, output)) continue;
PsiTypeElement typeElement = output.getTypeElement();
if (typeElement == null || (typeElement.isInferredType() && !PsiTypesUtil.isDenotableType(output.getType(), output))) {
continue;
}
List<PsiVariable> inputVariables = wrapper.getInputVariables(fragment, range, variables);
if (inputVariables.size() > maxParameters) continue;