コード例 #1
0
 /// <summary>
 /// Calculate metrics for Method
 /// </summary>
 /// <param name="node"></param>
 /// <param name="mi"></param>
 /// <returns></returns>
 public static MethodInfo FillMethodMetrics(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node, MethodInfo mi)
 {
     mi.NL  = NL.Calculate(node);
     mi.NLE = NLE.Calculate(node);
     mi.NOB = NOB.Calculate(node);
     mi.NOS = NOS.Calculate(node);
     return(mi);
 }
コード例 #2
0
        public CSharpSyntax(SyntaxTree syntaxTree, CSharpSyntaxNode csharpStatement, TextSpan span, TextSpan fullSpan)
            : base(syntaxTree)
        {
            Kind = SyntaxKind.CSharpSyntax;

            CSharpStatement = csharpStatement;
            FullSpan        = fullSpan;
            Span            = span;
        }
コード例 #3
0
        /// <summary>
        /// Gets the symbol for a particular syntax node.
        /// Throws an exception if the symbol is not found.
        /// </summary>
        ///
        /// <remarks>
        /// This gives a nicer message than a "null pointer exception",
        /// and should be used where we require a symbol to be resolved.
        /// </remarks>
        ///
        /// <param name="cx">The extraction context.</param>
        /// <param name="node">The syntax node.</param>
        /// <returns>The resolved symbol.</returns>
        public static ISymbol GetSymbol(this Context cx, Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node)
        {
            var info = GetSymbolInfo(cx, node);

            if (info.Symbol == null)
            {
                throw new InternalError(node, "Could not resolve symbol");
            }

            return(info.Symbol);
        }
コード例 #4
0
 public static SymbolInfo GetSymbolInfo(this Context cx, Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node) =>
 cx.Model(node).GetSymbolInfo(node);
コード例 #5
0
        /// <summary>
        /// Determines the type of a node, or null
        /// if the type could not be determined.
        /// </summary>
        /// <param name="cx">Extractor context.</param>
        /// <param name="node">The node to determine.</param>
        /// <returns>The type symbol of the node, or null.</returns>
        public static ITypeSymbol GetType(this Context cx, Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node)
        {
            var info = GetTypeInfo(cx, node);

            return(cx.DisambiguateType(info.Type));
        }
コード例 #6
0
ファイル: SymbolExtensions.cs プロジェクト: zhangf911/ql
        /// <summary>
        /// Determines the type of a node, or default
        /// if the type could not be determined.
        /// </summary>
        /// <param name="cx">Extractor context.</param>
        /// <param name="node">The node to determine.</param>
        /// <returns>The type symbol of the node, or default.</returns>
        public static AnnotatedTypeSymbol GetType(this Context cx, Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node)
        {
            var info = GetTypeInfo(cx, node);

            return(new AnnotatedTypeSymbol(info.Type.DisambiguateType(), info.Nullability.Annotation));
        }
コード例 #7
0
ファイル: SymbolExtensions.cs プロジェクト: zhangf911/ql
 public static TypeInfo GetTypeInfo(this Context cx, Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node) =>
 cx.GetModel(node).GetTypeInfo(node);
コード例 #8
0
        /// <summary>
        /// Calculating metrics to the Method
        /// </summary>
        /// <param name="node">C# syntax node</param>
        public static void SetMetrics(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node)
        {
            MethodInfo mi = MainDeclaration.Instance.MethodStack.Pop();

            FillFromMethodStack(FillMethodMetrics(node, mi));
        }