void (@NotNull PsiVariable variable) { super.visitVariable(variable); if (variable instanceof PsiParameter parameter) { if (parameter instanceof PsiPatternVariable) return; final PsiElement declarationScope = parameter.getDeclarationScope(); if (declarationScope instanceof PsiCatchSection) { // do not weaken catch block parameters return; } if (declarationScope instanceof PsiLambdaExpression && parameter.getTypeElement() == null) { //no need to check inferred lambda params return; } if (declarationScope instanceof PsiMethod method) { final PsiClass containingClass = method.getContainingClass(); if (containingClass == null || containingClass.isInterface()) { return; } if (JavaHighlightUtil.isSerializationRelatedMethod(method, containingClass)) { return; } if (MethodUtils.hasSuper(method)) { // do not try to weaken parameters of methods with // super methods return; } final Query<PsiMethod> overridingSearch = OverridingMethodsSearch.search(method); if (overridingSearch.findFirst() != null) { // do not try to weaken parameters of methods with // overriding methods. return; } } } if (isOnTheFly() && variable instanceof PsiField) { // checking variables with greater visibility is too expensive // for error checking in the editor if (!variable.hasModifierProperty(PsiModifier.PRIVATE) || variable instanceof PsiEnumConstant) { return; } } if (doNotWeakenInferredVariableType) { PsiTypeElement typeElement = variable.getTypeElement(); if (typeElement != null && typeElement.isInferredType()) { return; } } if (variable instanceof PsiParameter) { final PsiElement parent = variable.getParent(); if (parent instanceof PsiForeachStatement foreachStatement) { final PsiExpression iteratedValue = foreachStatement.getIteratedValue(); if (!(iteratedValue instanceof PsiNewExpression) && !(iteratedValue instanceof PsiTypeCastExpression)) { return; } } } else { final PsiExpression initializer = variable.getInitializer(); if (!(initializer instanceof PsiNewExpression) && !(initializer instanceof PsiTypeCastExpression)) { return; } } if (variable instanceof PsiParameter) { PsiMethod method = PsiTreeUtil.getParentOfType(variable, PsiMethod.class); if (method == null || UnusedSymbolUtil.isImplicitUsage(variable.getProject(), method)) return; } if (UnusedSymbolUtil.isImplicitWrite(variable) || UnusedSymbolUtil.isImplicitRead(variable)) { return; } PsiClassType classType = ObjectUtils.tryCast(variable.getType(), PsiClassType.class); if (classType == null) return; PsiClass originClass = classType.resolve(); if (originClass == null) return; if (myStopClassSet.contains(getClassName(originClass))) return; Collection<PsiClass> weakestClasses = computeWeakestClasses(variable, originClass); if (weakestClasses.isEmpty()) { return; } registerVariableError(variable, variable, weakestClasses, originClass, isOnTheFly()); }