示例#1
0
        public override void VisitPrimaryConstructorBaseType(PrimaryConstructorBaseTypeSyntax node)
        {
            Binder enclosing = _enclosing.WithAdditionalFlags(BinderFlags.ConstructorInitializer);

            AddToMap(node, enclosing);
            VisitConstructorInitializerArgumentList(node, node.ArgumentList, enclosing);
        }
示例#2
0
        private bool TryGetBaseTypeSyntax(
            SyntaxNode root,
            int position,
            ISyntaxFactsService syntaxFacts,
            SignatureHelpTriggerReason triggerReason,
            CancellationToken cancellationToken,
            out PrimaryConstructorBaseTypeSyntax expression
            )
        {
            if (
                !CommonSignatureHelpUtilities.TryGetSyntax(
                    root,
                    position,
                    syntaxFacts,
                    triggerReason,
                    IsTriggerToken,
                    IsArgumentListToken,
                    cancellationToken,
                    out expression
                    )
                )
            {
                return(false);
            }

            return(expression.ArgumentList != null);
 private Doc PrintPrimaryConstructorBaseTypeSyntax(
     PrimaryConstructorBaseTypeSyntax node)
 {
     return(Concat(
                this.Print(node.Type),
                this.PrintArgumentListSyntax(node.ArgumentList)
                ));
 }
示例#4
0
 static bool IsArgumentListToken(
     PrimaryConstructorBaseTypeSyntax expression,
     SyntaxToken token
     )
 {
     return(expression.ArgumentList != null &&
            expression.ArgumentList.Span.Contains(token.SpanStart) &&
            token != expression.ArgumentList.CloseParenToken);
 }
示例#5
0
 internal override bool TryGetSpeculativeSemanticModelCore(
     SyntaxTreeSemanticModel parentModel,
     int position,
     PrimaryConstructorBaseTypeSyntax constructorInitializer,
     out SemanticModel speculativeModel
     )
 {
     throw ExceptionUtilities.Unreachable;
 }
示例#6
0
 internal override bool TryGetSpeculativeSemanticModelCore(
     SyntaxTreeSemanticModel parentModel,
     int position,
     PrimaryConstructorBaseTypeSyntax constructorInitializer,
     out SemanticModel speculativeModel
     )
 {
     speculativeModel = null;
     return(false);
 }
 private static IEnumerable <ImmutableArray <IParameterSymbol> > GetParameterLists(
     SemanticModel semanticModel,
     int position,
     SyntaxNode invocableNode,
     CancellationToken cancellationToken)
 {
     return(invocableNode switch
     {
         InvocationExpressionSyntax invocationExpression => GetInvocationExpressionParameterLists(semanticModel, position, invocationExpression, cancellationToken),
         ConstructorInitializerSyntax constructorInitializer => GetConstructorInitializerParameterLists(semanticModel, position, constructorInitializer, cancellationToken),
         ElementAccessExpressionSyntax elementAccessExpression => GetElementAccessExpressionParameterLists(semanticModel, position, elementAccessExpression, cancellationToken),
         BaseObjectCreationExpressionSyntax objectCreationExpression => GetObjectCreationExpressionParameterLists(semanticModel, position, objectCreationExpression, cancellationToken),
         PrimaryConstructorBaseTypeSyntax recordBaseType => GetRecordBaseTypeParameterLists(semanticModel, position, recordBaseType, cancellationToken),
         _ => null,
     });
        > GetRecordBaseTypeParameterLists(
            SemanticModel semanticModel,
            int position,
            PrimaryConstructorBaseTypeSyntax recordBaseType,
            CancellationToken cancellationToken
        )
        {
            var within = semanticModel.GetEnclosingNamedTypeOrAssembly(position, cancellationToken);
            if (within != null)
            {
                var type =
                    semanticModel.GetTypeInfo(recordBaseType.Type, cancellationToken).Type
                    as INamedTypeSymbol;

                return type?.InstanceConstructors.Where(m => m.IsAccessibleWithin(within))
                    .Select(m => m.Parameters);
            }

            return null;
        }
示例#9
0
        protected T CompileAndGetModelAndPrimaryConstructorInitializer <T>(string program, Func <SemanticModel, PrimaryConstructorBaseTypeSyntax, T> analysisDelegate, params MetadataReference[] references)
        {
            var comp  = CreateCompilation(program, parseOptions: TestOptions.RegularPreview, references: references);
            var tree  = comp.SyntaxTrees[0];
            var model = comp.GetSemanticModel(tree);
            int start = program.IndexOf(StartString, StringComparison.Ordinal) + StartString.Length;
            int end   = program.IndexOf(EndString, StringComparison.Ordinal);
            PrimaryConstructorBaseTypeSyntax syntaxToBind = null;

            foreach (var expr in GetSyntaxNodeList(tree).OfType <PrimaryConstructorBaseTypeSyntax>())
            {
                if (expr.SpanStart >= start && expr.Span.End <= end)
                {
                    syntaxToBind = expr;
                    break;
                }
            }

            Assert.NotNull(syntaxToBind);
            return(analysisDelegate(model, syntaxToBind));
        }
示例#10
0
 public override void VisitPrimaryConstructorBaseType(PrimaryConstructorBaseTypeSyntax node)
 {
     Log(node, "Unsupported Syntax !");
 }
示例#11
0
 public static Doc Print(PrimaryConstructorBaseTypeSyntax node)
 {
     return(Doc.Concat(Node.Print(node.Type), ArgumentList.Print(node.ArgumentList)));
 }