There’s two aspects to this, really.
For one, even in Oxygene, there are separate “lets not call them namespaces” spaces for identifiers, depending on context. a type can have the same name as a property or field, say, and depending on the location in source, that’s no problem, eg:
property Button: Button;
is perfectly fine (regardless of case, even). Of course this does not extend to having two items with the same name in the same scope (eg a property and a field), which is fine in C# if they differ in case, but not in Oxygene.
More importantly though, regarding your question: Oxidizer does not understand code, it performs mere syntax conversion of code that may, very well, be incorrect (e.g. refer to unknown types or variables). As long as the syntax is valid, Oxidizer can parse the code and translate it, but it gives no thought to whether the code (original or translation) is correct. As such, it’ll happily keep all your identifiers as they are, and not know of care if the end result is, in fact, ambiguous or wrong code.
Think of it as as this: I could write a paragraph of English text that talks about two people called Bob, and if I’m a bad writer, the text might be confusing as to which Bob I’m referring to where. If I ask someone to translate this text to, say, German, the translator can translate the text fine, but it’ll remain just as ambiguous.
It’s the same with Oxidizer. it knows to turn “
foreach (var x in x) x” into “
for each x in x do x”, but it has no idea what each of the
x means in relation to the code or each other.