PsiType (GrVariable variable) { if (!(variable instanceof GrParameter)) { return null; } GrFunctionalExpression functionalExpression; int paramIndex; if (variable instanceof ClosureSyntheticParameter) { functionalExpression = ((ClosureSyntheticParameter)variable).getClosure(); paramIndex = 0; } else { PsiElement eParameterList = variable.getParent(); if (!(eParameterList instanceof GrParameterList parameterList)) return null; PsiElement eFunctionalExpression = eParameterList.getParent(); if (!(eFunctionalExpression instanceof GrFunctionalExpression)) return null; functionalExpression = (GrFunctionalExpression)eFunctionalExpression; paramIndex = parameterList.getParameterNumber((GrParameter)variable); } PsiType res = getClosureParameterType(functionalExpression, paramIndex); if (res instanceof PsiPrimitiveType) { return ((PsiPrimitiveType)res).getBoxedType(functionalExpression); } return res != null ? unwrapBound(res) : null; }