PyType (@NotNull PyExpression typeHint, @Nullable PyType type, @NotNull Context context) { PyQualifiedNameOwner typeParamDefinitionFromStack = context.getTypeAliasStack().isEmpty() ? null : context.getTypeAliasStack().peek(); assert typeParamDefinitionFromStack == null || typeParamDefinitionFromStack instanceof PyTargetExpression; PyTargetExpression targetExpr = (PyTargetExpression)typeParamDefinitionFromStack; if (type instanceof PyTypeVarTypeImpl typeVar) { return typeVar.withScopeOwner(getTypeParameterScope(typeVar.getName(), typeHint, context)).withTargetExpression(targetExpr); } if (type instanceof PyParamSpecType paramSpec) { return paramSpec.withScopeOwner(getTypeParameterScope(paramSpec.getName(), typeHint, context)).withTargetExpression(targetExpr); } if (type instanceof PyTypeVarTupleTypeImpl typeVarTuple) { return typeVarTuple.withScopeOwner(getTypeParameterScope(typeVarTuple.getName(), typeHint, context)).withTargetExpression(targetExpr); } return type; }