From our previous code generation which generated:
we found that C# could not cope with those if A belonged to a non-null namespace. So first we need to let the user decide if he wants a dot between `Imp' or `Create' and the class name.
But now we want expanded types, so we need two different implementations, one that will correspond to the Eiffel reference type (equivalent to our `Imp' class) and the other that will correspond to the expanded type. Therefore we came up with the following new classes:
where you can replace the dot by nothing depending on the code generation flag specified by user.
Once the layout is done, then it is quite easy to do the code generation. Each time that an Eiffel routine refers to an expanded type we should use its expanded implementation Value.A as part of the signature (locals, arguments, attributes), otherwise we use its associated interface A.