mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PsiUtil#isJvmLocalVariable
GitOrigin-RevId: 39baed9559ca58e00c405eec5fe57be1f3c6384f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
147896ee64
commit
3fc9bf9589
@@ -185,6 +185,9 @@ public class NullabilityUtil {
|
||||
if (expression instanceof PsiReferenceExpression) {
|
||||
PsiReferenceExpression ref = (PsiReferenceExpression)expression;
|
||||
PsiElement target = (ref).resolve();
|
||||
if (target instanceof PsiPatternVariable) {
|
||||
return Nullability.NOT_NULL; // currently all pattern variables are not-null
|
||||
}
|
||||
if (target instanceof PsiLocalVariable || target instanceof PsiParameter) {
|
||||
PsiElement block = PsiUtil.getVariableCodeBlock((PsiVariable)target, null);
|
||||
// Do not trust the declared nullability of local variable/parameter if it's reassigned as nullability designates
|
||||
|
||||
+2
-4
@@ -352,9 +352,7 @@ public class DfaExpressionFactory {
|
||||
|
||||
@Override
|
||||
public boolean isStable() {
|
||||
return myVariable instanceof PsiLocalVariable ||
|
||||
myVariable instanceof PsiParameter ||
|
||||
myVariable.hasModifierProperty(PsiModifier.FINAL);
|
||||
return PsiUtil.isJvmLocalVariable(myVariable) || myVariable.hasModifierProperty(PsiModifier.FINAL);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -364,7 +362,7 @@ public class DfaExpressionFactory {
|
||||
PsiType type = getType(ObjectUtils.tryCast(qualifier, DfaVariableValue.class));
|
||||
return factory.getObjectType(type, DfaPsiUtil.getElementNullability(type, myVariable));
|
||||
}
|
||||
if (myVariable instanceof PsiLocalVariable || myVariable instanceof PsiParameter ||
|
||||
if (PsiUtil.isJvmLocalVariable(myVariable) ||
|
||||
(myVariable instanceof PsiField && myVariable.hasModifierProperty(PsiModifier.STATIC) &&
|
||||
(!myVariable.hasModifierProperty(PsiModifier.FINAL) || !DfaUtil.hasInitializationHacks((PsiField)myVariable)))) {
|
||||
return factory.getVarFactory().createVariableValue(this);
|
||||
|
||||
+1
-1
@@ -516,7 +516,7 @@ public class DuplicatesFinder {
|
||||
return match.putDeclarationCorrespondence(resolveResult1, resolveResult2);
|
||||
}
|
||||
if (resolveResult1 instanceof PsiVariable && myEffectivelyLocal.contains((PsiVariable)resolveResult1)) {
|
||||
return (resolveResult2 instanceof PsiLocalVariable || resolveResult2 instanceof PsiParameter) &&
|
||||
return PsiUtil.isJvmLocalVariable(resolveResult2) &&
|
||||
match.putDeclarationCorrespondence(resolveResult1, resolveResult2);
|
||||
}
|
||||
PsiElement qualifier2 = candidate.getQualifier();
|
||||
|
||||
@@ -230,7 +230,7 @@ public class PreferByKindWeigher extends LookupElementWeigher {
|
||||
final JavaChainLookupElement chain = item.as(JavaChainLookupElement.CLASS_CONDITION_KEY);
|
||||
if (chain != null) {
|
||||
Object qualifier = chain.getQualifier().getObject();
|
||||
if (qualifier instanceof PsiLocalVariable || qualifier instanceof PsiParameter) {
|
||||
if (qualifier instanceof PsiVariable && PsiUtil.isJvmLocalVariable((PsiVariable)qualifier)) {
|
||||
return MyResult.variable;
|
||||
}
|
||||
if (qualifier instanceof PsiField) {
|
||||
|
||||
+1
-1
@@ -141,7 +141,7 @@ public class JavaCompletionProcessor implements PsiScopeProcessor, ElementClassH
|
||||
if (element instanceof PsiVariable) {
|
||||
String name = ((PsiVariable)element).getName();
|
||||
if (myShadowedNames.contains(name)) return true;
|
||||
if (element instanceof PsiLocalVariable || element instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(element)) {
|
||||
myShadowedNames.add(name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.javadoc.PsiDocParamRef;
|
||||
import com.intellij.psi.javadoc.PsiDocTagValue;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -57,10 +58,10 @@ public class JavaRainbowVisitor extends RainbowVisitor {
|
||||
if (rainbowElement == null || resolved == null) {
|
||||
return null;
|
||||
}
|
||||
if (resolved instanceof PsiLocalVariable || resolved instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(resolved)) {
|
||||
String name = ((PsiVariable)resolved).getName();
|
||||
if (name != null) {
|
||||
return getInfo(context, rainbowElement, name, resolved instanceof PsiLocalVariable
|
||||
return getInfo(context, rainbowElement, name, resolved instanceof PsiLocalVariable || resolved instanceof PsiPatternVariable
|
||||
? JavaHighlightingColors.LOCAL_VARIABLE_ATTRIBUTES
|
||||
: rainbowElement instanceof PsiDocTagValue
|
||||
? JavaHighlightingColors.DOC_COMMENT_TAG_VALUE
|
||||
|
||||
+1
-1
@@ -180,7 +180,7 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Abst
|
||||
@Override
|
||||
public void visitReferenceExpression(PsiReferenceExpression expression) {
|
||||
final PsiElement resolved = expression.resolve();
|
||||
if (resolved instanceof PsiLocalVariable || resolved instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(resolved)) {
|
||||
PsiVariable variable = (PsiVariable) resolved;
|
||||
final LocalSearchScope useScope = (LocalSearchScope)variable.getUseScope();
|
||||
if (!useScope.containsRange(newExpressionContainingFile, newExpressionTextRange)) {
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ class ComplexityCalculator {
|
||||
return QUALIFIER;
|
||||
}
|
||||
int w = REFERENCE;
|
||||
if (resolved instanceof PsiLocalVariable || resolved instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(resolved)) {
|
||||
w = IDENTIFIER;
|
||||
}
|
||||
else if (resolved instanceof PsiField) {
|
||||
|
||||
+1
-1
@@ -187,7 +187,7 @@ public class DuplicateExpressionsInspection extends LocalInspectionTool {
|
||||
super.visitReferenceElement(reference);
|
||||
|
||||
PsiElement resolved = reference.resolve();
|
||||
if (resolved instanceof PsiLocalVariable || resolved instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(resolved)) {
|
||||
variables.add((PsiVariable)resolved);
|
||||
}
|
||||
else if (resolved instanceof PsiVariable && !((PsiVariable)resolved).hasModifierProperty(PsiModifier.FINAL)) {
|
||||
|
||||
@@ -1721,6 +1721,9 @@ public class ExtractMethodProcessor implements MatchProvider {
|
||||
if (variableName == null) return Nullability.UNKNOWN;
|
||||
|
||||
PsiElement methodOrLambdaBody = null;
|
||||
if (variable instanceof PsiPatternVariable) {
|
||||
return Nullability.NOT_NULL;
|
||||
}
|
||||
if (variable instanceof PsiLocalVariable || variable instanceof PsiParameter) {
|
||||
final PsiParameterListOwner methodOrLambda = PsiTreeUtil.getParentOfType(variable, PsiMethod.class, PsiLambdaExpression.class);
|
||||
if (methodOrLambda != null) {
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
|
||||
if (i != parameterIndex && arguments[i] instanceof PsiReferenceExpression) {
|
||||
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)arguments[i];
|
||||
final PsiElement element = referenceExpression.resolve();
|
||||
if (element instanceof PsiLocalVariable || element instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(element)) {
|
||||
final PsiParameter param = myMethod.getParameterList().getParameters()[i];
|
||||
final PsiExpression paramRef =
|
||||
JavaPsiFacade.getElementFactory(myMethod.getProject()).createExpressionFromText(param.getName(), myMethod);
|
||||
|
||||
+1
-1
@@ -942,7 +942,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
|
||||
@Override
|
||||
public void visitReferenceExpression(PsiReferenceExpression expression) {
|
||||
final PsiElement psiElement = expression.resolve();
|
||||
if ((psiElement instanceof PsiLocalVariable || psiElement instanceof PsiParameter) &&
|
||||
if ((PsiUtil.isJvmLocalVariable(psiElement)) &&
|
||||
!PsiTreeUtil.isAncestor(myInitializer, psiElement, false)) {
|
||||
myElementReference = expression;
|
||||
}
|
||||
|
||||
+2
-1
@@ -24,6 +24,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.IntroduceParameterRefactoring;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -305,7 +306,7 @@ public class OldReferenceResolver {
|
||||
private static PsiElement getClassContainingResolve(final JavaResolveResult result) {
|
||||
final PsiElement elem = result.getElement();
|
||||
if (elem != null) {
|
||||
if (elem instanceof PsiLocalVariable || elem instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(elem)) {
|
||||
return PsiTreeUtil.getParentOfType(elem, PsiClass.class);
|
||||
}
|
||||
else {
|
||||
|
||||
+4
@@ -17,6 +17,7 @@ package com.intellij.refactoring.rename;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
@@ -43,6 +44,9 @@ public class JavaUnresolvableLocalCollisionDetector {
|
||||
anchor = element.getParent();
|
||||
}
|
||||
}
|
||||
else if (element instanceof PsiPatternVariable) {
|
||||
scope = ((LocalSearchScope)element.getUseScope()).getScope()[0];
|
||||
}
|
||||
else {
|
||||
// element is a PsiParameter
|
||||
scope = ((PsiParameter)element).getDeclarationScope();
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.psi.infos.MethodCandidateInfo.ApplicabilityLevel;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.meta.PsiMetaData;
|
||||
import com.intellij.psi.meta.PsiMetaOwner;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.ProjectScope;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
@@ -316,6 +317,9 @@ public final class PsiUtil extends PsiUtilCore {
|
||||
codeBlock = ((PsiLambdaExpression)declarationScope).getBody();
|
||||
}
|
||||
}
|
||||
else if (variable instanceof PsiPatternVariable) {
|
||||
codeBlock = ((LocalSearchScope)variable.getUseScope()).getScope()[0];
|
||||
}
|
||||
else if (variable instanceof PsiResourceVariable) {
|
||||
final PsiElement resourceList = variable.getParent();
|
||||
return resourceList != null ? resourceList.getParent() : null; // use try statement as topmost
|
||||
@@ -1404,4 +1408,15 @@ public final class PsiUtil extends PsiUtilCore {
|
||||
return psiClass != null && psiClass.getManager().areElementsEquivalent(
|
||||
psiClass, JavaPsiFacade.getElementFactory(psiClass.getProject()).getArrayClass(getLanguageLevel(psiClass)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param variable variable to test
|
||||
* @return true if variable corresponds to JVM local variable defined inside the method
|
||||
*/
|
||||
@Contract("null -> false")
|
||||
public static boolean isJvmLocalVariable(PsiElement variable) {
|
||||
return variable instanceof PsiLocalVariable ||
|
||||
variable instanceof PsiParameter ||
|
||||
variable instanceof PsiPatternVariable;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -505,7 +505,7 @@ public class PsiReferenceExpressionImpl extends ExpressionPsiElement implements
|
||||
}
|
||||
|
||||
private boolean ensureNonShadowedVariable(@NotNull PsiVariable element) {
|
||||
if (element instanceof PsiLocalVariable || element instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(element)) {
|
||||
myVarNames.add(element.getName());
|
||||
}
|
||||
return !(element instanceof PsiField) || !myVarNames.contains(element.getName());
|
||||
|
||||
+5
-2
@@ -1,9 +1,12 @@
|
||||
// Copyright 2000-2017 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.
|
||||
package com.intellij.psi.scope.conflictResolvers;
|
||||
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.infos.CandidateInfo;
|
||||
import com.intellij.psi.scope.PsiConflictResolver;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
@@ -28,7 +31,7 @@ public class JavaVariableConflictResolver implements PsiConflictResolver{
|
||||
final PsiElement otherElement = candidate.getElement();
|
||||
|
||||
if (!(otherElement instanceof PsiField)) {
|
||||
if (otherElement instanceof PsiLocalVariable || otherElement instanceof PsiParameter) {
|
||||
if (PsiUtil.isJvmLocalVariable(otherElement)) {
|
||||
return candidate;
|
||||
}
|
||||
else {
|
||||
|
||||
+1
@@ -146,6 +146,7 @@ public class ConditionCoveredByFurtherConditionInspection extends AbstractBaseJa
|
||||
return false;
|
||||
}
|
||||
PsiVariable psi = ObjectUtils.tryCast(var.getPsiVariable(), PsiVariable.class);
|
||||
if (psi instanceof PsiPatternVariable) return true;
|
||||
if (psi instanceof PsiLocalVariable || psi instanceof PsiParameter) {
|
||||
PsiElement block = PsiUtil.getVariableCodeBlock(psi, null);
|
||||
return block == null || !HighlightControlFlowUtil.isEffectivelyFinal(psi, block, null);
|
||||
|
||||
Reference in New Issue
Block a user