コード例 #1
0
 public EnvDTE.CodeEnum AddEnum(string name, object position, object bases, EnvDTE.vsCMAccess access)
 {
     return(EnsureEditor(() =>
     {
         return AddEnum(GetSyntaxRoot(), name, position, bases, access);
     }));
 }
コード例 #2
0
ファイル: CodeClass.cs プロジェクト: aanshibudhiraja/Roslyn
 public EnvDTE.CodeEnum AddEnum(string name, object position, object bases, EnvDTE.vsCMAccess access)
 {
     return(FileCodeModel.EnsureEditor(() =>
     {
         return FileCodeModel.AddEnum(LookupNode(), name, position, bases, access);
     }));
 }
コード例 #3
0
ファイル: ExternalCodeInterface.cs プロジェクト: belav/roslyn
 public EnvDTE80.CodeEvent AddEvent(
     string name,
     string fullDelegateName,
     bool createPropertyStyleEvent,
     object position,
     EnvDTE.vsCMAccess access
     ) => throw Exceptions.ThrowEFail();
コード例 #4
0
ファイル: ExternalCodeInterface.cs プロジェクト: belav/roslyn
 public EnvDTE.CodeFunction AddFunction(
     string name,
     EnvDTE.vsCMFunction kind,
     object type,
     object position,
     EnvDTE.vsCMAccess access
     ) => throw Exceptions.ThrowEFail();
コード例 #5
0
ファイル: RootCodeModel.cs プロジェクト: belav/roslyn
 public EnvDTE.CodeFunction AddFunction(
     string name,
     object location,
     EnvDTE.vsCMFunction kind,
     object type,
     object position,
     EnvDTE.vsCMAccess access
     ) => GetFileCodeModel(location).Object.AddFunction(name, kind, type, position, access);
コード例 #6
0
 public EnvDTE.CodeProperty AddProperty(
     string getterName,
     string putterName,
     object type,
     object position,
     EnvDTE.vsCMAccess access,
     object location
     ) => throw Exceptions.ThrowEFail();
コード例 #7
0
 public EnvDTE.CodeProperty EncapsulateFieldNoUI(
     EnvDTE.CodeVariable variable,
     string propertyName,
     EnvDTE.vsCMAccess accessibility,
     ReferenceSelectionEnum refSelection,
     PropertyTypeEnum propertyType,
     bool fPreview,
     bool fSearchComments
     ) => throw new NotImplementedException();
コード例 #8
0
        private static CodeGenerationOptions GetCodeGenerationOptions(
            EnvDTE.vsCMAccess access, ParseOptions parseOptions)
        {
            var generateDefaultAccessibility = (access & EnvDTE.vsCMAccess.vsCMAccessDefault) == 0;

            return(new CodeGenerationOptions(
                       generateDefaultAccessibility: generateDefaultAccessibility,
                       parseOptions: parseOptions));
        }
コード例 #9
0
        protected SyntaxNode CreateConstructorDeclaration(
            SyntaxNode containerNode,
            string typeName,
            EnvDTE.vsCMAccess access
            )
        {
            var destination = CodeModelService.GetDestination(containerNode);

            var newMethodSymbol = CodeGenerationSymbolFactory.CreateConstructorSymbol(
                attributes: default,
コード例 #10
0
        internal void UpdateAccess(SyntaxNode node, EnvDTE.vsCMAccess access)
        {
            node = CodeModelService.GetNodeWithModifiers(node);
            var updatedNode = CodeModelService.SetAccess(node, access);

            if (node != updatedNode)
            {
                UpdateNode(node, updatedNode);
            }
        }
コード例 #11
0
ファイル: FileCodeModel_CodeGen.cs プロジェクト: belav/roslyn
        internal EnvDTE.CodeProperty AddProperty(
            SyntaxNode containerNode,
            string getterName,
            string putterName,
            object type,
            object position,
            EnvDTE.vsCMAccess access
            )
        {
            var isGetterPresent = !string.IsNullOrEmpty(getterName);
            var isPutterPresent = !string.IsNullOrEmpty(putterName);

            if (
                (!isGetterPresent && !isPutterPresent) ||
                (isGetterPresent && isPutterPresent && getterName != putterName)
                )
            {
                throw Exceptions.ThrowEInvalidArg();
            }

            var containerNodePosition = containerNode.SpanStart;
            var semanticModel         = GetSemanticModel();

            var options = State.ThreadingContext.JoinableTaskFactory.Run(
                () => GetDocument().GetOptionsAsync(CancellationToken.None)
                );
            var propertyType = CodeModelService.GetTypeSymbol(
                type,
                semanticModel,
                containerNodePosition
                );
            var newProperty = CreatePropertyDeclaration(
                containerNode,
                CodeModelService.GetUnescapedName(isGetterPresent ? getterName : putterName),
                isGetterPresent,
                isPutterPresent,
                access,
                propertyType,
                options
                );
            var insertionIndex = CodeModelService.PositionVariantToMemberInsertionIndex(
                position,
                containerNode,
                fileCodeModel: this
                );

            newProperty = InsertMember(containerNode, newProperty, insertionIndex);

            return((EnvDTE.CodeProperty)CreateInternalCodeMember(
                       this.State,
                       fileCodeModel: this,
                       node: newProperty
                       ));
        }
コード例 #12
0
        private static CodeGenerationContextInfo GetCodeGenerationContextInfo(
            SyntaxNode containerNode,
            CodeGenerationOptions options,
            EnvDTE.vsCMAccess access  = EnvDTE.vsCMAccess.vsCMAccessDefault,
            bool generateMethodBodies = true)
        {
            var generateDefaultAccessibility = (access & EnvDTE.vsCMAccess.vsCMAccessDefault) == 0;

            return(options.GetInfo(
                       new CodeGenerationContext(
                           generateDefaultAccessibility: generateDefaultAccessibility,
                           generateMethodBodies: generateMethodBodies),
                       containerNode.SyntaxTree.Options));
        }
コード例 #13
0
ファイル: FileCodeModel.cs プロジェクト: belav/roslyn
 public EnvDTE.CodeDelegate AddDelegate(
     string name,
     object type,
     object position,
     EnvDTE.vsCMAccess access
     )
 {
     return(EnsureEditor(
                () =>
     {
         return AddDelegate(GetSyntaxRoot(), name, type, position, access);
     }
                ));
 }
コード例 #14
0
 public EnvDTE.CodeDelegate AddDelegate(
     string name,
     object type,
     object position,
     EnvDTE.vsCMAccess access = EnvDTE.vsCMAccess.vsCMAccessDefault
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         return FileCodeModel.AddDelegate(LookupNode(), name, type, position, access);
     }
                ));
 }
コード例 #15
0
 public EnvDTE.CodeInterface AddInterface(
     string name,
     object position,
     object bases,
     EnvDTE.vsCMAccess access = EnvDTE.vsCMAccess.vsCMAccessDefault
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         return FileCodeModel.AddInterface(LookupNode(), name, position, bases, access);
     }
                ));
 }
コード例 #16
0
ファイル: RootCodeModel.cs プロジェクト: belav/roslyn
 public EnvDTE.CodeStruct AddStruct(
     string name,
     object location,
     object position,
     object bases,
     object implementedInterfaces,
     EnvDTE.vsCMAccess access
     ) =>
 GetFileCodeModel(location).Object.AddStruct(
     name,
     position,
     bases,
     implementedInterfaces,
     access
     );
コード例 #17
0
        private CodeGenerationOptions GetCodeGenerationOptions(
            SyntaxNode containerNode,
            OptionSet?options         = null,
            EnvDTE.vsCMAccess access  = EnvDTE.vsCMAccess.vsCMAccessDefault,
            bool generateMethodBodies = true)
        {
            var generateDefaultAccessibility = (access & EnvDTE.vsCMAccess.vsCMAccessDefault) == 0;

            return(CodeGenerationService.GetOptions(
                       containerNode.SyntaxTree.Options,
                       options ?? Workspace.Options,
                       new CodeGenerationContext(
                           generateDefaultAccessibility: generateDefaultAccessibility,
                           generateMethodBodies: generateMethodBodies)));
        }
コード例 #18
0
 public EnvDTE.CodeVariable AddVariable(
     string name,
     object type,
     object position,
     EnvDTE.vsCMAccess access,
     object location
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         return FileCodeModel.AddVariable(LookupNode(), name, type, position, access);
     }
                ));
 }
コード例 #19
0
ファイル: FileCodeModel_CodeGen.cs プロジェクト: belav/roslyn
        internal EnvDTE.CodeStruct AddStruct(
            SyntaxNode containerNode,
            string name,
            object position,
            object bases,
            object implementedInterfaces,
            EnvDTE.vsCMAccess access
            )
#pragma warning restore IDE0060 // Remove unused parameter
        {
            var containerNodePosition = containerNode.SpanStart;
            var semanticModel         = GetSemanticModel();

            var implementedInterfaceArray = GetValidArray(bases, allowMultipleElements: true);

            var implementedInterfaceSymbols = Array.ConvertAll(
                implementedInterfaceArray,
                i =>
                (INamedTypeSymbol)CodeModelService.GetTypeSymbol(
                    i,
                    semanticModel,
                    containerNodePosition
                    )
                );

            var newType = CreateTypeDeclaration(
                containerNode,
                TypeKind.Struct,
                CodeModelService.GetUnescapedName(name),
                access,
                implementedInterfaces: implementedInterfaceSymbols.ToImmutableArray()
                );

            var insertionIndex = CodeModelService.PositionVariantToMemberInsertionIndex(
                position,
                containerNode,
                fileCodeModel: this
                );

            newType = InsertMember(containerNode, newType, insertionIndex);

            return((EnvDTE.CodeStruct)CreateInternalCodeMember(
                       this.State,
                       fileCodeModel: this,
                       node: newType
                       ));
        }
コード例 #20
0
        private CodeGenerationContextInfo GetCodeGenerationContextInfo(
            SyntaxNode containerNode,
            OptionSet?options         = null,
            EnvDTE.vsCMAccess access  = EnvDTE.vsCMAccess.vsCMAccessDefault,
            bool generateMethodBodies = true)
        {
            var generateDefaultAccessibility = (access & EnvDTE.vsCMAccess.vsCMAccessDefault) == 0;
            var globalOptions = State.ProjectCodeModelFactory.GlobalOptions;

            var languageServices = Workspace.Services.GetLanguageServices(containerNode.SyntaxTree.Options.Language);
            var fallbackOptions  = globalOptions.GetCodeGenerationOptions(languageServices);
            var codeGenOptions   = CodeGenerationOptions.Create(options ?? Workspace.Options, fallbackOptions, languageServices);

            return(codeGenOptions.GetInfo(
                       new CodeGenerationContext(
                           generateDefaultAccessibility: generateDefaultAccessibility,
                           generateMethodBodies: generateMethodBodies),
                       containerNode.SyntaxTree.Options));
        }
コード例 #21
0
 public EnvDTE80.CodeEvent AddEvent(
     string name,
     string fullDelegateName,
     bool createPropertyStyleEvent,
     object position,
     EnvDTE.vsCMAccess access
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         return FileCodeModel.AddEvent(
             LookupNode(),
             name,
             fullDelegateName,
             createPropertyStyleEvent,
             position,
             access
             );
     }
                ));
 }
コード例 #22
0
ファイル: FileCodeModel.cs プロジェクト: belav/roslyn
 public EnvDTE.CodeStruct AddStruct(
     string name,
     object position,
     object bases,
     object implementedInterfaces,
     EnvDTE.vsCMAccess access
     )
 {
     return(EnsureEditor(
                () =>
     {
         return AddStruct(
             GetSyntaxRoot(),
             name,
             position,
             bases,
             implementedInterfaces,
             access
             );
     }
                ));
 }
コード例 #23
0
 public EnvDTE.CodeClass AddClass(
     string name,
     object position,
     object bases,
     object implementedInterfaces,
     EnvDTE.vsCMAccess access
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         return FileCodeModel.AddClass(
             LookupNode(),
             name,
             position,
             bases,
             implementedInterfaces,
             access
             );
     }
                ));
 }
コード例 #24
0
ファイル: CodeInterface.cs プロジェクト: belav/roslyn
 public EnvDTE.CodeFunction AddFunction(
     string name,
     EnvDTE.vsCMFunction kind,
     object type,
     object position,
     EnvDTE.vsCMAccess access
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         return FileCodeModel.AddFunction(
             LookupNode(),
             name,
             kind,
             type,
             position,
             access
             );
     }
                ));
 }
コード例 #25
0
ファイル: FileCodeModel_CodeGen.cs プロジェクト: belav/roslyn
        public EnvDTE80.CodeEvent AddEvent(
            SyntaxNode containerNode,
            string name,
            string fullDelegateName,
            bool createPropertyStyleEvent,
            object position,
            EnvDTE.vsCMAccess access
            )
        {
            var containerNodePosition = containerNode.SpanStart;
            var semanticModel         = GetSemanticModel();

            var eventType = (INamedTypeSymbol)CodeModelService.GetTypeSymbol(
                fullDelegateName,
                semanticModel,
                containerNodePosition
                );

            var newEvent = CreateEventDeclaration(
                containerNode,
                CodeModelService.GetUnescapedName(name),
                access,
                eventType,
                createPropertyStyleEvent
                );
            var insertionIndex = CodeModelService.PositionVariantToMemberInsertionIndex(
                position,
                containerNode,
                fileCodeModel: this
                );

            newEvent = InsertMember(containerNode, newEvent, insertionIndex);

            return((EnvDTE80.CodeEvent)CreateInternalCodeMember(
                       this.State,
                       fileCodeModel: this,
                       node: newEvent
                       ));
        }
コード例 #26
0
ファイル: CodeInterface.cs プロジェクト: belav/roslyn
 public EnvDTE80.CodeEvent AddEvent(
     string name,
     string fullDelegateName,
     bool createPropertyStyleEvent,
     object position,
     EnvDTE.vsCMAccess access
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         // Note: C# always creates field-like events in interfaces
         return FileCodeModel.AddEvent(
             LookupNode(),
             name,
             fullDelegateName,
             false,
             position,
             access
             );
     }
                ));
 }
コード例 #27
0
 public EnvDTE.CodeProperty AddProperty(
     string getterName,
     string putterName,
     object type,
     object position,
     EnvDTE.vsCMAccess access,
     object location
     )
 {
     return(FileCodeModel.EnsureEditor(
                () =>
     {
         return FileCodeModel.AddProperty(
             LookupNode(),
             getterName,
             putterName,
             type,
             position,
             access
             );
     }
                ));
 }
コード例 #28
0
ファイル: FileCodeModel_CodeGen.cs プロジェクト: belav/roslyn
        internal EnvDTE.CodeDelegate AddDelegate(
            SyntaxNode containerNode,
            string name,
            object type,
            object position,
            EnvDTE.vsCMAccess access
            )
        {
            var containerNodePosition = containerNode.SpanStart;
            var semanticModel         = GetSemanticModel();

            var returnType = (INamedTypeSymbol)CodeModelService.GetTypeSymbol(
                type,
                semanticModel,
                containerNodePosition
                );

            var newType = CreateDelegateTypeDeclaration(
                containerNode,
                CodeModelService.GetUnescapedName(name),
                access,
                returnType
                );
            var insertionIndex = CodeModelService.PositionVariantToMemberInsertionIndex(
                position,
                containerNode,
                fileCodeModel: this
                );

            newType = InsertMember(containerNode, newType, insertionIndex);

            return((EnvDTE.CodeDelegate)CreateInternalCodeMember(
                       this.State,
                       fileCodeModel: this,
                       node: newType
                       ));
        }
コード例 #29
0
ファイル: FileCodeModel_CodeGen.cs プロジェクト: belav/roslyn
        internal EnvDTE.CodeEnum AddEnum(
            SyntaxNode containerNode,
            string name,
            object position,
            object bases,
            EnvDTE.vsCMAccess access
            )
#pragma warning restore IDE0060 // Remove unused parameter
        {
            var newType        = CreateTypeDeclaration(containerNode, TypeKind.Enum, name, access);
            var insertionIndex = CodeModelService.PositionVariantToMemberInsertionIndex(
                position,
                containerNode,
                fileCodeModel: this
                );

            newType = InsertMember(containerNode, newType, insertionIndex);

            return((EnvDTE.CodeEnum)CreateInternalCodeMember(
                       this.State,
                       fileCodeModel: this,
                       node: newType
                       ));
        }
コード例 #30
0
        internal EnvDTE.CodeFunction AddFunction(SyntaxNode containerNode, string name, EnvDTE.vsCMFunction kind, object type, object position, EnvDTE.vsCMAccess access)
        {
            kind = CodeModelService.ValidateFunctionKind(containerNode, kind, name);

            SyntaxNode newMember;

            if (kind == EnvDTE.vsCMFunction.vsCMFunctionSub ||
                kind == EnvDTE.vsCMFunction.vsCMFunctionFunction)
            {
                var containerNodePosition = containerNode.SpanStart;
                var semanticModel         = GetSemanticModel();
                var returnType            = kind == EnvDTE.vsCMFunction.vsCMFunctionFunction
                    ? CodeModelService.GetTypeSymbol(type, semanticModel, containerNodePosition)
                    : semanticModel.Compilation.GetSpecialType(SpecialType.System_Void);

                newMember = CreateMethodDeclaration(containerNode, CodeModelService.GetUnescapedName(name), access, returnType);
            }
            else if (kind == EnvDTE.vsCMFunction.vsCMFunctionConstructor)
            {
                newMember = CreateConstructorDeclaration(containerNode, CodeModelService.GetUnescapedName(name), access);
            }
            else
            {
                newMember = CreateDestructorDeclaration(containerNode, CodeModelService.GetUnescapedName(name));
            }

            var insertionIndex = CodeModelService.PositionVariantToMemberInsertionIndex(position, containerNode, fileCodeModel: this);

            newMember = InsertMember(containerNode, newMember, insertionIndex);

            return((EnvDTE.CodeFunction)CreateInternalCodeMember(this.State, fileCodeModel: this, node: newMember));
        }