VS2005でフィールド群からプロパティ群を生成するマクロ
いまさらながらフィールドからのプロパティ生成がひとつずつしかできないのに我慢できなくなったのでマクロを作成。VS2005のマクロはよく分からないのでおかしなところが多々あるかも。
各フィールドの下にプロパティを作るというスタンスもあるが、「プロパティ全削除→全再生成」という使い方をしたいのでクラスの一番下に追加する形にしてある。
C#専用のコードだが、Appendのところだけ変えればVB.NET等でも利用可。
Option Explicit On Imports System Imports EnvDTE Imports EnvDTE80 Imports System.Collections.Generic Imports System.Diagnostics Imports System.Text Public Module MyUtils ' C#専用プロパティ生成マクロ ' クラスの一番後ろにまとめてプロパティを追加する。 ' 既に同名プロパティが存在する場合は追加しない。 ' フィールド名が「aaa」の場合はプロパティ名は「Aaa」となる。 ' いろいろと適当に作ってある。 Sub CreateProperty() Dim selection As TextSelection = DTE.ActiveDocument.Selection Dim activePoint As TextPoint = selection.ActivePoint Dim element As CodeElement = activePoint.CodeElement(vsCMElement.vsCMElementClass) Dim codeType As CodeType = CType(element, CodeType) Dim listProperty As New List(Of String) Dim listField As New List(Of CodeVariable) Dim lastMember As CodeElement For Each member As CodeElement In codeType.Members If TypeOf member Is CodeProperty Then listProperty.Add(member.Name) ElseIf TypeOf member Is CodeVariable Then listField.Add(member) End If lastMember = member Next Dim editPoint As EditPoint Dim sb As New StringBuilder For Each variable As CodeVariable In listField Dim pName As String = VtoPName(variable.Name) If listProperty.Contains(pName) Then Continue For End If sb.AppendLine().AppendLine() sb.Append("/// <summary>").AppendLine() sb.Append("/// ").AppendLine() sb.Append("/// </summary>").AppendLine() sb.Append("public " & variable.Type.AsString & " " & pName).AppendLine() sb.Append("{").AppendLine() sb.Append(" get { return this." & variable.Name & "; }").AppendLine() sb.Append(" set { this." & variable.Name & " = value; }").AppendLine() sb.Append("}") Next editPoint = lastMember.GetEndPoint.CreateEditPoint() editPoint.Insert(sb.ToString()) DTE.ExecuteCommand("Edit.FormatDocument") End Sub Private Function VtoPName(ByVal vName As String) As String Return vName.Substring(0, 1).ToUpper() & vName.Substring(1) End Function End Module