EncapsulateVariables.refscript
This page describes the EncapsulateVariables RefactorScript shipped with VisualGDB.
Overview
This script generates a class containing fields equivalent to the selected variables.
In order to run this script, first select one or more variables or fields via Code Explorer -> Outline.
Script
[Main, Description("Encapsulate variables")]
generator EncapsulateVariables(Array variables, string className = "MyClass")
{
>class $className
>{
>private:
foreach(var in variables)
{
set fieldName = MakeFieldName(var.ShortName);
> $var.Type.Literal $fieldName;
}
>
>public:
>> $className(
MakeArgList(variables);
>)
MakeInitializerList(variables);
> {
> }
>};
}
function MakeFieldName(string argName)
{
return "m_" + argName.UppercaseFirst();
}
generator MakeArgList(Array args)
{
foreach(arg in args)
{
>>$arg.Type.Literal $arg.ShortName
if (!arg.IsLast)
>>,
}
}
generator MakeInitializerList(Array args)
{
foreach(arg in args)
{
if (arg.IsFirst)
>> :
else
>> ,
set fieldName = MakeFieldName(arg.ShortName);
> $fieldName($arg.ShortName)
}
}
Sample Input
class SimpleClass
{
public:
int IntField;
void *PointerField;
};
{
public:
int IntField;
void *PointerField;
};
Sample Output
class NewClass
{
private:
int m_IntField;
void * m_PointerField;
public:
NewClass(int IntField, void * PointerField)
: m_IntField(IntField)
, m_PointerField(PointerField)
{
}
};
A detailed reference on RefactorScript syntax and data model is available here.{
private:
int m_IntField;
void * m_PointerField;
public:
NewClass(int IntField, void * PointerField)
: m_IntField(IntField)
, m_PointerField(PointerField)
{
}
};
See this page for a full list of RefactorScripts shipped with VisualGDB.