public override CodeExpression GenerateInstanceExpression(ObjectWrapper wrapper, CodeExpression newObject)
{
string typeName = wrapper.WrappedTypeName;
string memberName = null;
if (wrapper is Wrapper.Widget)
memberName = ((Wrapper.Widget) wrapper).Wrapped.Name;
else if (wrapper is Wrapper.Action)
memberName = ((Wrapper.Action) wrapper).Name;
if (memberName == null)
return base.GenerateInstanceExpression (wrapper, newObject);
if (Options.UsePartialClasses) {
// Don't generate fields for top level widgets and for widgets accessible
// through other widget's properties
Wrapper.Widget ww = wrapper as Wrapper.Widget;
if (ww == null || (!ww.IsTopLevel && ww.InternalChildProperty == null && !ww.Unselectable)) {
type.Members.Add (
new CodeMemberField (
typeName,
memberName
)
);
CodeExpression var = new CodeFieldReferenceExpression (
new CodeThisReferenceExpression (),
memberName
);
Statements.Add (
new CodeAssignStatement (
var,
newObject
)
);
return var;
}
else
return base.GenerateInstanceExpression (wrapper, newObject);
} else {
CodeExpression var = base.GenerateInstanceExpression (wrapper, newObject);
Statements.Add (
new CodeAssignStatement (
new CodeIndexerExpression (
new CodeVariableReferenceExpression ("bindings"),
new CodePrimitiveExpression (memberName)
),
var
)
);
return var;
}
}