コード例 #1
0
ファイル: ListFileDlg.cs プロジェクト: Ember213021/VS8Plugin
        public ListFileDlg(EnvDTE80.DTE2 dte,RecordHandler rec)
        {
            InitializeComponent();
            //�����ļ���ַ
            txt_FilePath.Text = RecordHandler.GetValueFromRegistry();

            _manuallySettingSelection = false;
            _dte = dte;
            _fileNames = new System.Collections.Generic.List<ProjectItemInfo>();
            foreach (EnvDTE.Project project in _dte.Solution.Projects)
            {
                WalkProject(project.ProjectItems);
            }

            LogTimer.Interval = 2000;
            LogTimer.Tick += new EventHandler(LogTimer_Tick);

            RecordTable = initRecordTable();
            initProjectSelector();
            btn_ReadRecordCurProject_Click(null, null);

            de_begin.DateTime = DateTime.Today;
            de_end.DateTime = DateTime.Today;

            recHandler = rec;
        }
コード例 #2
0
ファイル: Commit.cs プロジェクト: mnuni/gitextensions
        private static string GetSelectedFile(EnvDTE80.DTE2 application)
        {
            if (application.SelectedItems.Count == 0)
                return string.Empty;

            foreach (SelectedItem sel in application.SelectedItems)
            {
                if (sel.ProjectItem != null)
                {
                    //The try catch block belowe fixed issue 57:
                    //http://github.com/spdr870/gitextensions/issues/#issue/57
                    try
                    {
                        return sel.ProjectItem.get_FileNames(0);
                    }
                    catch (ArgumentException)
                    {
                        if (sel.ProjectItem.FileCount > 0)
                        {
                            return sel.ProjectItem.get_FileNames(1);
                        }
                        else
                        {
                            //ignore!
                        }
                    }
                }
                else
                    if (sel.Project != null)
                        return sel.Project.FullName;
            }
            return string.Empty;
        }
コード例 #3
0
 public TFSVersionControl(ITFSConnection _tfsConnection, EnvDTE80.DTE2 _dte, ILogger _logger)
 {
     dte = _dte;
     logger = _logger;
     tfsConnection = _tfsConnection;
     tfsConnection.ConnectionChanged += ResetConnection;
     versionControlControlsAssembly = Assembly.Load(versionControlControlsAssemblyString);
     folderDiffOptions = AccessPrivateWrapper.FromType(versionControlControlsAssembly, BindingFlags.NonPublic | BindingFlags.Instance, "FolderDiffOptions");
 }
コード例 #4
0
ファイル: SearchFile.cs プロジェクト: nickmayer/gitextensions
 public override void OnCommand(EnvDTE80.DTE2 application, OutputWindowPane pane)
 {
     ThreadPool.QueueUserWorkItem(
                 o =>
                 {
                     string file = GitCommands.RunGitExWait("searchfile", application.Solution.FullName);
                     if (file == null || string.IsNullOrEmpty(file.Trim()))
                         return;
                     application.ExecuteCommand("File.OpenFile", file);
                 });
 }
コード例 #5
0
ファイル: PaneDTE.cs プロジェクト: 3F/vsCommandEvent
        /// <param name="dte2">DTE2 Context.</param>
        /// <param name="name">Name of the pane.</param>
        public PaneDTE(EnvDTE80.DTE2 dte2, string name)
        {
            if(dte2 == null) {
                throw new ArgumentNullException("dte2", "cannot be null");
            }

            try {
                pane = dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item(name);
            }
            catch(ArgumentException) {
                pane = dte2.ToolWindows.OutputWindow.OutputWindowPanes.Add(name);
            }
            catch(Exception ex) {
                Log.Error("Log :: inner exception: '{0}'", ex.ToString());
            }
        }
コード例 #6
0
        // http://social.msdn.microsoft.com/Forums/vstudio/en-US/36adcd56-5698-43ca-bcba-4527daabb2e3/finding-the-startup-project-in-a-complicated-solution
        public static EnvDTE.Project GetProject(EnvDTE80.Solution2 solution, string uniqueName)
        {
            EnvDTE.Project ret = null;

            if (solution != null && uniqueName != null)
            {
                foreach (EnvDTE.Project p in solution.Projects)
                {
                    ret = GetSubProject(p, uniqueName);

                    if (ret != null)
                        break;
                }
            }

            return ret;
        }
コード例 #7
0
 private void AddBreakPoint(EnvDTE80.DTE2 dte, string filename, int line)
 {
     try
     {
         //EnvDTE80.DTE2 dte2;
         // dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
         //GetActiveObject("VisualStudio.DTE.8.0");
         dte2.Debugger.Breakpoints.Add("", filename, line, 1, "", EnvDTE.dbgBreakpointConditionType.dbgBreakpointConditionTypeWhenTrue,
                  "", "", 0, "", 0, EnvDTE.dbgHitCountType.dbgHitCountTypeNone);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
     }
     finally
     {
     }
        // dte2 = null;
 }
コード例 #8
0
ファイル: Commit.cs プロジェクト: HuChundong/gitextensions
 private static string GetSelectedFile(EnvDTE80.DTE2 application)
 {
     foreach (SelectedItem sel in application.SelectedItems)
     {
         if (sel.ProjectItem != null)
         {
             if (sel.ProjectItem.FileCount > 0)
             {
                 //Unfortunaly FileNames[1] is not supported by .net 3.5
                 return sel.ProjectItem.get_FileNames(1);
             }
         }
         else
             if (sel.Project != null)
                 return sel.Project.FullName;
     }
     if (application.Solution.IsOpen)
         return application.Solution.FullName;
     return string.Empty;
 }
コード例 #9
0
ファイル: Commit.cs プロジェクト: Carbenium/gitextensions
        public override bool IsEnabled(EnvDTE80.DTE2 application)
        {
            bool enabled = base.IsEnabled(application);

            string fileName = GetSelectedFile(application);

            if (showCurrentBranch && (fileName != lastFile || DateTime.Now - lastBranchCheck > new TimeSpan(0, 0, 0, 1, 0)))
            {
                string newCaption = "Commit";
                if (enabled)
                {
                    string head = GitCommands.GetCurrentBranch(fileName);
                    if (!string.IsNullOrEmpty(head))
                    {
                        string headShort;
                        if (head.Length > 27)
                            headShort = "..." + head.Substring(head.Length - 23);
                        else
                            headShort = head;

                        newCaption = "Commit (" + headShort + ")";
                    }
                }

                // This guard required not only for perfromance, but also for prevent StackOverflowException.
                // IDE.QueryStatus -> Commit.IsEnabled -> Plugin.UpdateCaption -> IDE.QueryStatus ...
                if (_lastUpdatedCaption != newCaption)
                {
                    _lastUpdatedCaption = newCaption;

                    // try apply new caption (operation can fail)
                    if (!Plugin.ChangeCommandCaption(application, "GitExtensions", "Commit changes", newCaption))
                        _lastUpdatedCaption = null;
                }

                lastBranchCheck = DateTime.Now;
                lastFile = fileName;
            }

            return enabled;
        }
コード例 #10
0
ファイル: Commit.cs プロジェクト: liquidboy/gitextensions
        public override bool IsEnabled(EnvDTE80.DTE2 application)
        {
            bool enabled = base.IsEnabled(application);

            string fileName = GetSelectedFile(application);

            if (showCurrentBranch != null && lastBranchCheck != null && showCurrentBranch.Value && (fileName != lastFile || DateTime.Now - lastBranchCheck > new TimeSpan(0, 0, 0, 1, 0)))
            {
                if (enabled)
                {
                    Plugin.ChangeCommandCaption(application, "GitExtensions", "Commit changes", "Commit" + GitCommands.GetCurrentBranch(fileName));
                }
                else
                {
                    Plugin.ChangeCommandCaption(application, "GitExtensions", "Commit changes", "Commit");
                }

                lastBranchCheck = DateTime.Now;
                lastFile = fileName;
            }

            return enabled;
        }
コード例 #11
0
ファイル: Telemetry.cs プロジェクト: bayulabster/viasfora
        public static void Initialize(EnvDTE80.DTE2 dte)
        {
            TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();

              client = new TelemetryClient(config);
              client.InstrumentationKey = "b59d19eb-668d-4ae3-b4c8-71536ebabbdc";

              client.Context.User.Id = GetUserId();
              client.Context.Session.Id = Guid.NewGuid().ToString();
              client.Context.Properties.Add("Host", dte.Application.Edition);
              client.Context.Properties.Add("HostVersion", dte.Version);
              client.Context.Properties.Add("HostFullVersion", GetFullHostVersion());
              client.Context.Component.Version = GetViasforaVersion();
              client.Context.Properties.Add("AppVersion", GetFullHostVersion());
              client.Context.Device.OperatingSystem = Environment.OSVersion.ToString();

              dte.Events.DTEEvents.OnBeginShutdown += OnBeginShutdown;

              var settings = SettingsContext.GetSettings();
              Enabled = settings.TelemetryEnabled;

              WriteEvent("Viasfora Started");
        }
コード例 #12
0
ファイル: Commit.cs プロジェクト: HuChundong/gitextensions
        public override bool IsEnabled(EnvDTE80.DTE2 application)
        {
            bool enabled = base.IsEnabled(application);

            string fileName = GetSelectedFile(application);

            if (showCurrentBranch && (fileName != lastFile || DateTime.Now - lastBranchCheck > new TimeSpan(0, 0, 0, 1, 0)))
            {
                if (enabled)
                {
                    string head = GitCommands.GetCurrentBranch(fileName);
                    if (!string.IsNullOrEmpty(head))
                    {
                        string headShort;
                        if (head.Length > 27)
                            headShort = "..." + head.Substring(head.Length - 23);
                        else
                            headShort = head;
                        Plugin.ChangeCommandCaption(application, "GitExtensions", "Commit changes", "Commit (" + headShort + ")");
                    }
                    else
                    {
                        Plugin.ChangeCommandCaption(application, "GitExtensions", "Commit changes", "Commit");
                    }
                }
                else
                {
                    Plugin.ChangeCommandCaption(application, "GitExtensions", "Commit changes", "Commit");
                }

                lastBranchCheck = DateTime.Now;
                lastFile = fileName;
            }

            return enabled;
        }
コード例 #13
0
        public override SyntaxNode SetParameterKind(SyntaxNode node, EnvDTE80.vsCMParameterKind kind)
        {
            var parameter = node as ParameterSyntax;

            if (parameter == null)
            {
                throw Exceptions.ThrowEFail();
            }

            // We can't do anything with "Optional", so just strip it out and ignore it.
            if ((kind & EnvDTE80.vsCMParameterKind.vsCMParameterKindOptional) != 0)
            {
                kind -= EnvDTE80.vsCMParameterKind.vsCMParameterKindOptional;
            }

            SyntaxTokenList newModifiers;

            switch (kind)
            {
                case EnvDTE80.vsCMParameterKind.vsCMParameterKindOut:
                    newModifiers = SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.OutKeyword));
                    break;

                case EnvDTE80.vsCMParameterKind.vsCMParameterKindRef:
                    newModifiers = SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.RefKeyword));
                    break;

                case EnvDTE80.vsCMParameterKind.vsCMParameterKindIn:
                case EnvDTE80.vsCMParameterKind.vsCMParameterKindNone:
                    newModifiers = SyntaxFactory.TokenList();
                    break;

                case EnvDTE80.vsCMParameterKind.vsCMParameterKindParamArray:
                    {
                        var parameterList = (ParameterListSyntax)parameter.Parent;
                        if (parameterList.Parameters.LastOrDefault() == parameter &&
                            parameter.Type is ArrayTypeSyntax)
                        {
                            newModifiers = SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.ParamsKeyword));
                            break;
                        }

                        throw Exceptions.ThrowEInvalidArg();
                    }

                default:
                    throw Exceptions.ThrowEInvalidArg();
            }

            return parameter.WithModifiers(newModifiers);
        }
コード例 #14
0
 public HostProjectWindow(EnvDTE80.DTE2 dte)
 {
     InitializeComponent();
     this.dte = dte;
 }
コード例 #15
0
 public VisualStudio(EnvDTE80.DTE2 dte) :
     base(dte, "14")
 {
 }
コード例 #16
0
ファイル: Clone.cs プロジェクト: jystic/gitextensions
 public override bool IsEnabled(EnvDTE80.DTE2 application)
 {
     return true;
 }
コード例 #17
0
        private static void AppendParameterTypeName(StringBuilder b, EnvDTE80.CodeParameter2 parameter, string[] genericTypeParameters, string[] genericMethodParameters)
        {
            EnvDTE80.CodeTypeRef2 parameterTypeRef = (EnvDTE80.CodeTypeRef2)parameter.Type;
            string parameterTypeString = parameterTypeRef.AsFullName;

            int substringStart = 0;
            for (int i = 0; i < parameterTypeString.Length; ++i) {
                char ch = parameterTypeString[i];
                switch (ch) {
                    case '<':
                        AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters);
                        substringStart = i + 1;
                        b.Append('{');
                        break;
                    case '>':
                        AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters);
                        substringStart = i + 1;
                        b.Append('}');
                        break;

                    case '[':
                        AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters);
                        b.Append('[');

                        // Skip ahead to the closing bracket, counting commas to determine array rank.
                        int rank = 1;
                        do {
                            ++i;
                            ch = parameterTypeString[i];
                            if (ch == ',') {
                                ++rank;
                            }
                        }
                        while (ch != ']');
                        substringStart = i + 1;

                        // For multi-dimensional arrays, add "0:" default array bounds. Note that non-standard bounds are not possible via C# declaration.
                        if (rank > 1) {
                            for (int r = 0; r < rank; ++r) {
                                if (r != 0) {
                                    b.Append(',');
                                }
                                b.Append("0:");
                            }
                        }

                        b.Append(']');
                        break;

                    case ',':
                        AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters);
                        substringStart = i + 1;
                        // Skip space after comma if present. (e.g. System.Collections.Generic.KeyValuePair`2{System.String,System.String}.)
                        if (parameterTypeString[substringStart] == ' ') {
                            ++substringStart;
                        }
                        b.Append(',');
                        break;
                }
            }

            AppendParameterTypeSubstring(b, parameterTypeString, substringStart, parameterTypeString.Length, genericTypeParameters, genericMethodParameters);

            // Append ref / out indicator if needed.
            if ((parameter.ParameterKind == EnvDTE80.vsCMParameterKind.vsCMParameterKindRef) ||
                (parameter.ParameterKind == EnvDTE80.vsCMParameterKind.vsCMParameterKindOut)) {
                b.Append('@');
            }

            // Note there is no need to append a '*' for pointers, as this is included in the full name of the type.
            // Multi-dimensional and jagged arrays are handled above during string parsing.
        }
コード例 #18
0
 private int RuleWarningsCount(EnvDTE80.ErrorList errorList)
 {
     int warningsCount = 0;
     for (int index = 1; index <= errorList.ErrorItems.Count; index++)
     {
         // check only on warnings
         if (errorList.ErrorItems.Item(index).ErrorLevel ==
             EnvDTE80.vsBuildErrorLevel.vsBuildErrorLevelLow)
         {
             if (errorList.ErrorItems.Item(index).Description.StartsWith(
                 RuleCheckIdPrefix, StringComparison.OrdinalIgnoreCase))
             {
                 warningsCount++;
             }
         }
     }
     return warningsCount;
 }
コード例 #19
0
 /// <summary>
 /// Accepts the event.
 /// </summary>
 /// <param name="e">The e.</param>
 /// <returns></returns>
 protected virtual bool AcceptField(EnvDTE80.CodeElement2 e)
 {
     return true;
 }
コード例 #20
0
        public override SyntaxNode SetConstKind(SyntaxNode variableNode, EnvDTE80.vsCMConstKind kind)
        {
            Debug.Assert(variableNode is FieldDeclarationSyntax ||
                         variableNode is EnumMemberDeclarationSyntax);

            if (variableNode is EnumMemberDeclarationSyntax)
            {
                if (kind != EnvDTE80.vsCMConstKind.vsCMConstKindConst &&
                    kind != EnvDTE80.vsCMConstKind.vsCMConstKindReadOnly)
                {
                    throw Exceptions.ThrowEInvalidArg();
                }

                return variableNode;
            }

            var member = (MemberDeclarationSyntax)variableNode;
            var flags = member.GetModifierFlags();
            flags &= ~(ModifierFlags.Const | ModifierFlags.ReadOnly);

            switch (kind)
            {
                case EnvDTE80.vsCMConstKind.vsCMConstKindConst:
                    flags |= ModifierFlags.Const;
                    break;
                case EnvDTE80.vsCMConstKind.vsCMConstKindReadOnly:
                    flags |= ModifierFlags.ReadOnly;
                    break;
            }

            return member.UpdateModifiers(flags);
        }
コード例 #21
0
        public override SyntaxNode SetInheritanceKind(SyntaxNode typeNode, EnvDTE80.vsCMInheritanceKind kind)
        {
            Debug.Assert(typeNode is ClassDeclarationSyntax);

            var member = typeNode as MemberDeclarationSyntax;
            if (member == null)
            {
                throw Exceptions.ThrowEFail();
            }

            var flags = member.GetModifierFlags();
            flags &= ~(ModifierFlags.Abstract | ModifierFlags.New | ModifierFlags.Sealed);

            if (kind != EnvDTE80.vsCMInheritanceKind.vsCMInheritanceKindNone)
            {
                if ((kind & EnvDTE80.vsCMInheritanceKind.vsCMInheritanceKindAbstract) != 0)
                {
                    flags |= ModifierFlags.Abstract;
                }
                else if ((kind & EnvDTE80.vsCMInheritanceKind.vsCMInheritanceKindSealed) != 0)
                {
                    flags |= ModifierFlags.Sealed;
                }

                // Can have new in combination with the above flags
                if ((kind & EnvDTE80.vsCMInheritanceKind.vsCMInheritanceKindNew) != 0)
                {
                    flags |= ModifierFlags.New;
                }
            }

            return member.UpdateModifiers(flags);
        }
コード例 #22
0
 private static bool TryAttach(EnvDTE80.Process2 process, string[] engines)
 {
     try
     {
         process.Attach2(engines);
         return true;
     }
     catch
     {
         return false;
     }
 }
コード例 #23
0
        internal void UpdateOverrideKind(SyntaxNode node, EnvDTE80.vsCMOverrideKind kind)
        {
            node = CodeModelService.GetNodeWithModifiers(node);
            var updatedNode = CodeModelService.SetOverrideKind(node, kind);

            if (node != updatedNode)
            {
                UpdateNode(node, updatedNode);
            }
        }
コード例 #24
0
        private void UpdateProgressBar(string filename, int currentCount, int overallCount, EnvDTE80.DTE2 dte)
        {
            if (string.IsNullOrEmpty(filename)) { throw new ArgumentNullException("filename"); }
            if (dte == null) { throw new ArgumentNullException("dte"); }

            string message = string.Format("[{1}/{2}]: Translating into file: {0}", filename, currentCount, overallCount);
            dte.StatusBar.Progress(true, message, currentCount, overallCount);
            if (currentCount >= overallCount) {
                dte.StatusBar.Progress(false);
                dte.StatusBar.Animate(false, vsStatusAnimation.vsStatusAnimationGeneral);
            }
        }
コード例 #25
0
        internal void Translate(string apiKey, Project project, ProjectItem selectedItem, EnvDTE80.DTE2 dte)
        {
            if (string.IsNullOrWhiteSpace(apiKey)) { throw new ArgumentNullException("apiKey"); }
            if (project == null) { throw new ArgumentNullException("project"); }
            if (selectedItem == null) { throw new ArgumentNullException("selectedItem"); }
            if (dte == null) { throw new ArgumentNullException("dte"); }

            // get the file path which should be translated
            string filePath = selectedItem.Properties.Item("FullPath").Value.ToString();

            dte.StatusBar.Animate(true, vsStatusAnimation.vsStatusAnimationGeneral);

            ILocanTranslator bingTranslator = new BingLocanTranslator(apiKey);
            IList<ILocanRow> rowsToTranslate = this.ReadResxFileForTranslation(filePath);

            var stringsToTranslate = from r in rowsToTranslate
                                     select r.StringToTranslate;

            IList<ILanguage> languages = bingTranslator.GetSupportedLanguages().ToList();

            int currentLanguageIndex = 1;
            int totalCountOfLanguages = languages.Count;
            ILanguage sourceLanguage = bingTranslator.DetectLanguage(stringsToTranslate.First());
            foreach (ILanguage destLang in languages) {
                if (this.PreserveUpdates) {
                    // TODO: Look to see if there is an existing file at {Filename}.{language}.resx.cache
                    this.SendTranslationUpdatesToBing(filePath, rowsToTranslate, sourceLanguage, destLang, bingTranslator);
                }

                ProjectItem addedResxProjectItem = null;
                bingTranslator
                    .Translate(stringsToTranslate, destLang, sourceLanguage)
                    .OnTranslationComplete((payload, translations) => {
                        string destFile = this.GetDestFilename(filePath, payload.DestLanguage);
                        this.UpdateProgressBar(destFile, currentLanguageIndex++, totalCountOfLanguages, dte);
                        using (ILocanWriter writer = LocanReaderWriterFactory.Instance.GetWriter(new { filepath = destFile })) {
                            // it is not reliable to use any variables declared outside of this scope
                            // because this is happening async the loop may change the values outside of this scope
                            int currentIndex = 0;
                            foreach (ITranslation translation in translations) {
                                // get source row
                                ILocanRow sourceRow = rowsToTranslate[currentIndex];
                                ILocanRow translatedRow = new LocanRow(id: sourceRow.Id, translatedString: translation.TrnaslatedString);
                                writer.WriteRow(translatedRow);

                                // addedResxProjectItem = this.AddFileToProject(selectedItem, destFile);
                                addedResxProjectItem = this.AddFileToProjectAsChild(selectedItem, destFile);
                                currentIndex++;
                            }
                        }

                        if (this.PreserveUpdates) {
                            // now copy this file to the cache location so that we can compute difference next time.
                            string cacheFile = this.GetDestCacheFilename(filePath, payload.DestLanguage);
                            File.Copy(destFile, cacheFile, true);
                            this.AddFileToProjectAsChild(addedResxProjectItem, cacheFile);
                        }
                    });
            }
        }
コード例 #26
0
        internal void UpdateParameterKind(SyntaxNode node, EnvDTE80.vsCMParameterKind kind)
        {
            var updatedNode = CodeModelService.SetParameterKind(node, kind);

            if (node != updatedNode)
            {
                UpdateNode(node, updatedNode);
            }
        }
コード例 #27
0
        public override SyntaxNode SetDataTypeKind(SyntaxNode typeNode, EnvDTE80.vsCMDataTypeKind kind)
        {
            Debug.Assert(typeNode is BaseTypeDeclarationSyntax);

            var type = (BaseTypeDeclarationSyntax)typeNode;
            var flags = type.GetModifierFlags();

            if (kind == EnvDTE80.vsCMDataTypeKind.vsCMDataTypeKindPartial)
            {
                flags |= ModifierFlags.Partial;
            }
            else if (kind == EnvDTE80.vsCMDataTypeKind.vsCMDataTypeKindMain)
            {
                flags &= ~ModifierFlags.Partial;
            }

            return type.UpdateModifiers(flags);
        }
コード例 #28
0
 /// <summary>
 /// 
 /// </summary>
 public CodeEventInfo(BaseInfo parent, EnvDTE80.CodeEvent item)
     : base(parent, item as CodeElement2)
 {
     this._item = item;
     this.Access = ObjectFactory.Convert(this._item.Access);
 }
コード例 #29
0
        public override SyntaxNode SetOverrideKind(SyntaxNode memberNode, EnvDTE80.vsCMOverrideKind kind)
        {
            Debug.Assert(memberNode is BaseMethodDeclarationSyntax ||
                         memberNode is BasePropertyDeclarationSyntax ||
                         memberNode is EventFieldDeclarationSyntax);

            // The legacy C# code model sets the MustImplement property here depending on whether the Abstract kind is set
            // TODO(DustinCa): VB implements MustImplement in terms of OverrideKind, should we do the same?
            memberNode = SetMustImplement(memberNode, (kind & EnvDTE80.vsCMOverrideKind.vsCMOverrideKindAbstract) != 0);

            var member = (MemberDeclarationSyntax)memberNode;
            var flags = member.GetModifierFlags();
            flags &= ~(ModifierFlags.Abstract | ModifierFlags.Virtual | ModifierFlags.Override | ModifierFlags.New | ModifierFlags.Sealed);

            if (member.IsParentKind(SyntaxKind.InterfaceDeclaration))
            {
                if ((kind & (EnvDTE80.vsCMOverrideKind.vsCMOverrideKindOverride | EnvDTE80.vsCMOverrideKind.vsCMOverrideKindSealed)) != 0)
                {
                    throw Exceptions.ThrowEInvalidArg();
                }
                else if ((kind & (EnvDTE80.vsCMOverrideKind.vsCMOverrideKindAbstract | EnvDTE80.vsCMOverrideKind.vsCMOverrideKindVirtual)) != 0)
                {
                    // Switch these flags off
                    kind = kind & ~(EnvDTE80.vsCMOverrideKind.vsCMOverrideKindAbstract | EnvDTE80.vsCMOverrideKind.vsCMOverrideKindVirtual);
                }
            }

            if (kind != EnvDTE80.vsCMOverrideKind.vsCMOverrideKindNone)
            {
                if ((kind & EnvDTE80.vsCMOverrideKind.vsCMOverrideKindAbstract) != 0)
                {
                    flags |= ModifierFlags.Abstract;
                }

                if ((kind & EnvDTE80.vsCMOverrideKind.vsCMOverrideKindVirtual) != 0)
                {
                    flags |= ModifierFlags.Virtual;
                }

                if ((kind & EnvDTE80.vsCMOverrideKind.vsCMOverrideKindOverride) != 0)
                {
                    flags |= ModifierFlags.Override;
                }

                if ((kind & EnvDTE80.vsCMOverrideKind.vsCMOverrideKindSealed) != 0)
                {
                    flags |= ModifierFlags.Sealed;
                }

                if ((kind & EnvDTE80.vsCMOverrideKind.vsCMOverrideKindNew) != 0)
                {
                    flags |= ModifierFlags.New;
                }
            }

            return member.UpdateModifiers(flags);
        }
コード例 #30
0
 /// <summary>
 /// Accepts the event.
 /// </summary>
 /// <param name="e">The e.</param>
 /// <returns></returns>
 protected virtual bool AcceptEvent(EnvDTE80.CodeEvent e)
 {
     return true;
 }