예제 #1
0
 public DeclaredSymbolInfoWrapper(SyntaxNode node, DocumentId documentId, DeclaredSymbolInfo wrapped)
     : this()
 {
     FilePath   = node.SyntaxTree.FilePath;
     DocumentId = documentId;
     SymbolInfo = wrapped;
 }
예제 #2
0
        internal static IconId GetStockIconForSymbolInfo(this DeclaredSymbolInfo symbol)
        {
            switch (symbol.Kind)
            {
            case DeclaredSymbolInfoKind.Class:
                return(AstStockIcons.Class);

            case DeclaredSymbolInfoKind.Constant:
                return(AstStockIcons.Field);

            case DeclaredSymbolInfoKind.Constructor:
                return(AstStockIcons.Method);

            case DeclaredSymbolInfoKind.Delegate:
                return(AstStockIcons.Delegate);

            case DeclaredSymbolInfoKind.Enum:
                return(AstStockIcons.Enum);

            case DeclaredSymbolInfoKind.EnumMember:
                return(AstStockIcons.Field);

            case DeclaredSymbolInfoKind.Event:
                return(AstStockIcons.Event);

            case DeclaredSymbolInfoKind.Field:
                return(AstStockIcons.Field);

            case DeclaredSymbolInfoKind.Indexer:
                return(AstStockIcons.Method);

            case DeclaredSymbolInfoKind.Interface:
                return(AstStockIcons.Interface);

            case DeclaredSymbolInfoKind.Method:
                return(AstStockIcons.Method);

            case DeclaredSymbolInfoKind.Module:
                return(AstStockIcons.Method);

            case DeclaredSymbolInfoKind.Property:
                return(AstStockIcons.Property);

            case DeclaredSymbolInfoKind.Struct:
                return(AstStockIcons.Struct);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
            internal SearchResult CheckType(DeclaredSymbolInfo symbol)
            {
                int rank;
                var name = symbol.Name;

                if (MatchName(name, out rank))
                {
//					if (type.ContainerDisplayName != null)
//						rank--;
                    return(new DeclaredSymbolInfoResult(pattern, symbol.Name, rank, symbol, false));
                }
                if (!FullSearch)
                {
                    return(null);
                }
                name = symbol.FullyQualifiedContainerName;
                if (MatchName(name, out rank))
                {
//					if (type.ContainingType != null)
//						rank--;
                    return(new DeclaredSymbolInfoResult(pattern, name, rank, symbol, true));
                }
                return(null);
            }
예제 #4
0
 public DeclaredSymbolInfoResult(string match, string matchedString, int rank, DeclaredSymbolInfo type, bool useFullName)  : base(match, matchedString, rank)
 {
     this.useFullName = useFullName;
     this.type        = type;
 }
예제 #5
0
        public static bool TryGetDeclaredSymbolInfo(this SyntaxNode node, out DeclaredSymbolInfo declaredSymbolInfo)
        {
            switch (node.Kind())
            {
            case SyntaxKind.ClassDeclaration:
                var classDecl = (ClassDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            classDecl.Identifier.ValueText,
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Class, classDecl.Identifier.Span);
                return(true);

            case SyntaxKind.ConstructorDeclaration:
                var ctorDecl = (ConstructorDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(
                    node,
                    ctorDecl.Identifier.ValueText,
                    // GetContainerDisplayName(node.Parent),
                    GetFullyQualifiedContainerName(node.Parent),
                    DeclaredSymbolInfoKind.Constructor,
                    ctorDecl.Identifier.Span,
                    parameterCount: (ushort)(ctorDecl.ParameterList?.Parameters.Count ?? 0));
                return(true);

            case SyntaxKind.DelegateDeclaration:
                var delegateDecl = (DelegateDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            delegateDecl.Identifier.ValueText,
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Delegate, delegateDecl.Identifier.Span);
                return(true);

            case SyntaxKind.EnumDeclaration:
                var enumDecl = (EnumDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            enumDecl.Identifier.ValueText,
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Enum, enumDecl.Identifier.Span);
                return(true);

            case SyntaxKind.EnumMemberDeclaration:
                var enumMember = (EnumMemberDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            enumMember.Identifier.ValueText,
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.EnumMember, enumMember.Identifier.Span);
                return(true);

            case SyntaxKind.EventDeclaration:
                var eventDecl = (EventDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            ExpandExplicitInterfaceName(eventDecl.Identifier.ValueText, eventDecl.ExplicitInterfaceSpecifier),
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Event, eventDecl.Identifier.Span);
                return(true);

            case SyntaxKind.IndexerDeclaration:
                var indexerDecl = (IndexerDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            WellKnownMemberNames.Indexer,
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Indexer, indexerDecl.ThisKeyword.Span);
                return(true);

            case SyntaxKind.InterfaceDeclaration:
                var interfaceDecl = (InterfaceDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            interfaceDecl.Identifier.ValueText,
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Interface, interfaceDecl.Identifier.Span);
                return(true);

            case SyntaxKind.MethodDeclaration:
                var method = (MethodDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            ExpandExplicitInterfaceName(method.Identifier.ValueText, method.ExplicitInterfaceSpecifier),
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Method,
                                                            method.Identifier.Span,
                                                            parameterCount: (ushort)(method.ParameterList?.Parameters.Count ?? 0),
                                                            typeParameterCount: (ushort)(method.TypeParameterList?.Parameters.Count ?? 0));
                return(true);

            case SyntaxKind.PropertyDeclaration:
                var property = (PropertyDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            ExpandExplicitInterfaceName(property.Identifier.ValueText, property.ExplicitInterfaceSpecifier),
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Property, property.Identifier.Span);
                return(true);

            case SyntaxKind.StructDeclaration:
                var structDecl = (StructDeclarationSyntax)node;
                declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                            structDecl.Identifier.ValueText,
                                                            // GetContainerDisplayName(node.Parent),
                                                            GetFullyQualifiedContainerName(node.Parent),
                                                            DeclaredSymbolInfoKind.Struct, structDecl.Identifier.Span);
                return(true);

            case SyntaxKind.VariableDeclarator:
                // could either be part of a field declaration or an event field declaration
                var variableDeclarator  = (VariableDeclaratorSyntax)node;
                var variableDeclaration = variableDeclarator.Parent as VariableDeclarationSyntax;
                var fieldDeclaration    = variableDeclaration?.Parent as BaseFieldDeclarationSyntax;
                if (fieldDeclaration != null)
                {
                    var kind = fieldDeclaration is EventFieldDeclarationSyntax
                                                        ? DeclaredSymbolInfoKind.Event
                                                                        : fieldDeclaration.Modifiers.Any(m => m.Kind() == SyntaxKind.ConstKeyword)
                                                                        ? DeclaredSymbolInfoKind.Constant
                                                                        : DeclaredSymbolInfoKind.Field;

                    declaredSymbolInfo = new DeclaredSymbolInfo(node,
                                                                variableDeclarator.Identifier.ValueText,
                                                                // GetContainerDisplayName(fieldDeclaration.Parent),
                                                                GetFullyQualifiedContainerName(fieldDeclaration.Parent),
                                                                kind, variableDeclarator.Identifier.Span);
                    return(true);
                }

                break;
            }

            declaredSymbolInfo = default(DeclaredSymbolInfo);
            return(false);
        }
예제 #6
0
		public DeclaredSymbolInfoResult (string match, string matchedString, int rank, DeclaredSymbolInfo type, bool useFullName)  : base (match, matchedString, rank)
		{
			this.useFullName = useFullName;
			this.type = type;
		}
예제 #7
0
		public static bool TryGetDeclaredSymbolInfo(this SyntaxNode node, out DeclaredSymbolInfo declaredSymbolInfo)
		{
			switch (node.Kind())
			{
				case SyntaxKind.ClassDeclaration:
					       var classDecl = (ClassDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        classDecl.Identifier.ValueText,
					                                        // GetContainerDisplayName(node.Parent),
					                                            GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Class, classDecl.Identifier.Span);
				return true;
				case SyntaxKind.ConstructorDeclaration:
					       var ctorDecl = (ConstructorDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(
						node,
						ctorDecl.Identifier.ValueText,
						// GetContainerDisplayName(node.Parent),
						GetFullyQualifiedContainerName(node.Parent),
						DeclaredSymbolInfoKind.Constructor,
						ctorDecl.Identifier.Span,
						parameterCount: (ushort)(ctorDecl.ParameterList?.Parameters.Count ?? 0));
				return true;
				case SyntaxKind.DelegateDeclaration:
					       var delegateDecl = (DelegateDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        delegateDecl.Identifier.ValueText,
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Delegate, delegateDecl.Identifier.Span);
				return true;
				case SyntaxKind.EnumDeclaration:
					       var enumDecl = (EnumDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        enumDecl.Identifier.ValueText,
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Enum, enumDecl.Identifier.Span);
				return true;
				case SyntaxKind.EnumMemberDeclaration:
					       var enumMember = (EnumMemberDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        enumMember.Identifier.ValueText,
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.EnumMember, enumMember.Identifier.Span);
				return true;
				case SyntaxKind.EventDeclaration:
					       var eventDecl = (EventDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                            ExpandExplicitInterfaceName(eventDecl.Identifier.ValueText, eventDecl.ExplicitInterfaceSpecifier),
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Event, eventDecl.Identifier.Span);
				return true;
				case SyntaxKind.IndexerDeclaration:
					       var indexerDecl = (IndexerDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        WellKnownMemberNames.Indexer,
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Indexer, indexerDecl.ThisKeyword.Span);
				return true;
				case SyntaxKind.InterfaceDeclaration:
					       var interfaceDecl = (InterfaceDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        interfaceDecl.Identifier.ValueText,
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Interface, interfaceDecl.Identifier.Span);
				return true;
				case SyntaxKind.MethodDeclaration:
					       var method = (MethodDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        ExpandExplicitInterfaceName(method.Identifier.ValueText, method.ExplicitInterfaceSpecifier),
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Method,
					                                        method.Identifier.Span,
					                                        parameterCount: (ushort)(method.ParameterList?.Parameters.Count ?? 0),
					                                        typeParameterCount: (ushort)(method.TypeParameterList?.Parameters.Count ?? 0));
				return true;
				case SyntaxKind.PropertyDeclaration:
					       var property = (PropertyDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        ExpandExplicitInterfaceName(property.Identifier.ValueText, property.ExplicitInterfaceSpecifier),
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Property, property.Identifier.Span);
				return true;
				case SyntaxKind.StructDeclaration:
					       var structDecl = (StructDeclarationSyntax)node;
					declaredSymbolInfo = new DeclaredSymbolInfo(node,
					                                        structDecl.Identifier.ValueText,
					                                        // GetContainerDisplayName(node.Parent),
					                                        GetFullyQualifiedContainerName(node.Parent),
					                                        DeclaredSymbolInfoKind.Struct, structDecl.Identifier.Span);
				return true;
				case SyntaxKind.VariableDeclarator:
					       // could either be part of a field declaration or an event field declaration
					       var variableDeclarator = (VariableDeclaratorSyntax)node;
					var variableDeclaration = variableDeclarator.Parent as VariableDeclarationSyntax;
					var fieldDeclaration = variableDeclaration?.Parent as BaseFieldDeclarationSyntax;
					if (fieldDeclaration != null)
					{
						var kind = fieldDeclaration is EventFieldDeclarationSyntax
							? DeclaredSymbolInfoKind.Event
						                        : fieldDeclaration.Modifiers.Any(m => m.Kind() == SyntaxKind.ConstKeyword)
						                        ? DeclaredSymbolInfoKind.Constant
						                        : DeclaredSymbolInfoKind.Field;

						declaredSymbolInfo = new DeclaredSymbolInfo(node,
						                                        variableDeclarator.Identifier.ValueText,
						                                        // GetContainerDisplayName(fieldDeclaration.Parent),
						                                        GetFullyQualifiedContainerName(fieldDeclaration.Parent),
						                                        kind, variableDeclarator.Identifier.Span);
						return true;
					}

				break;
			}

			declaredSymbolInfo = default(DeclaredSymbolInfo);
			return false;
		}
			internal SearchResult CheckType (DeclaredSymbolInfo symbol)
			{
				int rank;
				var name = symbol.Name;
				if (MatchName(name, out rank)) {
//					if (type.ContainerDisplayName != null)
//						rank--;
					return new DeclaredSymbolInfoResult (pattern, symbol.Name, rank, symbol, false);
				}
				if (!FullSearch)
					return null;
				name = symbol.FullyQualifiedContainerName;
				if (MatchName(name, out rank)) {
//					if (type.ContainingType != null)
//						rank--;
					return new DeclaredSymbolInfoResult (pattern, name, rank, symbol, true);
				}
				return null;
			}