Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }