public override void VisitInvocationExpression(InvocationExpression invocationExpression) { var rr = resolver.Resolve(invocationExpression) as InvocationResolveResult; if (rr != null) { foreach (var argument in rr.Arguments) { if (argument.Type != null && argument.Type.Kind == TypeKind.TypeParameter) { var ivar = new TypeVariable(argument.Type); if (!_usedVariables.Contains(ivar)) { _usedVariables.Add(ivar); } } } } base.VisitInvocationExpression(invocationExpression); }
public override void VisitAssignmentExpression(AssignmentExpression assignmentExpression) { var rr = resolver.Resolve(assignmentExpression) as OperatorResolveResult; if (rr != null && rr.UserDefinedOperatorMethod != null) { foreach (var typeArgument in rr.UserDefinedOperatorMethod.DeclaringType.TypeArguments) { if (typeArgument.Kind == TypeKind.TypeParameter) { var ivar = new TypeVariable(typeArgument); if (!_usedVariables.Contains(ivar)) { _usedVariables.Add(ivar); } } } } base.VisitAssignmentExpression(assignmentExpression); }
public override void VisitIndexerExpression(IndexerExpression indexerExpression) { if (this._usedVariables.Count == 0) { var rr = this.emitter.Resolver.ResolveNode(indexerExpression, this.emitter); var member = rr as MemberResolveResult; bool isInterface = member != null && member.Member.DeclaringTypeDefinition != null && member.Member.DeclaringTypeDefinition.Kind == TypeKind.Interface; var hasTypeParemeter = isInterface && Helpers.IsTypeParameterType(member.Member.DeclaringType); if (isInterface && hasTypeParemeter) { var ivar = new TypeVariable(member.Member.DeclaringType); if (!_usedVariables.Contains(ivar)) { _usedVariables.Add(ivar); } } } base.VisitIndexerExpression(indexerExpression); }
public override void VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression) { this.CheckExpression(binaryOperatorExpression); var rr = this.emitter.Resolver.ResolveNode(binaryOperatorExpression, this.emitter) as OperatorResolveResult; if (rr != null && rr.UserDefinedOperatorMethod != null) { foreach (var typeArgument in rr.UserDefinedOperatorMethod.DeclaringType.TypeArguments) { if (Helpers.HasTypeParameters(typeArgument)) { var ivar = new TypeVariable(typeArgument); if (!_usedVariables.Contains(ivar)) { _usedVariables.Add(ivar); } } } } base.VisitBinaryOperatorExpression(binaryOperatorExpression); }
public override void VisitInvocationExpression(InvocationExpression invocationExpression) { this.CheckExpression(invocationExpression); var rr = this.emitter.Resolver.ResolveNode(invocationExpression, this.emitter) as InvocationResolveResult; if (rr != null) { foreach (var argument in rr.Arguments) { if (argument.Type != null && Helpers.HasTypeParameters(argument.Type)) { var ivar = new TypeVariable(argument.Type); if (!_usedVariables.Contains(ivar)) { _usedVariables.Add(ivar); } } } } base.VisitInvocationExpression(invocationExpression); }
public override void VisitIdentifierExpression(IdentifierExpression identifierExpression) { var rr = this.emitter.Resolver.ResolveNode(identifierExpression, this.emitter); if (this._usedVariables.Count == 0) { var member = rr as MemberResolveResult; bool isInterface = member != null && member.Member.DeclaringTypeDefinition != null && member.Member.DeclaringTypeDefinition.Kind == TypeKind.Interface; var hasTypeParemeter = isInterface && Helpers.IsTypeParameterType(member.Member.DeclaringType); if (isInterface && hasTypeParemeter) { var ivar = new TypeVariable(member.Member.DeclaringType); if (!_usedVariables.Contains(ivar)) { _usedVariables.Add(ivar); } } } var localResolveResult = rr as LocalResolveResult; if (localResolveResult != null) { if (!_variables.Contains(localResolveResult.Variable.Name) && !_usedVariables.Contains(localResolveResult.Variable)) { _usedVariables.Add(localResolveResult.Variable); } } else if (rr is ThisResolveResult) { _usesThis = true; } base.VisitIdentifierExpression(identifierExpression); }