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;
};

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.
See this page for a full list of RefactorScripts shipped with VisualGDB.