private DottedInfo ParseAssemblyName(String typeFullName, String assemName)
{
InternalST.Soap( this, "ParseAssemblyName Entry typeFullName ",typeFullName," assemName ",assemName);
DottedInfo dottedInfo;
String nameSpace = null;
String name = null;
String dottedAssemblyName = null;
int assemId;
if (typeNameToDottedInfoTable.ContainsKey(typeFullName))
{
// type name already seen
dottedInfo = (DottedInfo)typeNameToDottedInfoTable[typeFullName];
}
else
{
// type name new, find nameSpace and concatenate the assembly name to it.
int index = typeFullName.LastIndexOf('.');
if (index > 0)
nameSpace = typeFullName.Substring(0, index);
else
nameSpace = "";
dottedAssemblyName = SoapServices.CodeXmlNamespaceForClrTypeNamespace(nameSpace, assemName);
name = typeFullName.Substring(index+1);
if (dottedAssemToAssemIdTable.ContainsKey(dottedAssemblyName))
{
// The dotted assembly name has been seen before, get the assembly Id
assemId = (int)dottedAssemToAssemIdTable[dottedAssemblyName];
}
else
{
// The dotted assembly name has not been seen before, calculate a new
// assemId and remember it so that it can be added to the Envelope xml namespaces
assemId = dottedAssemId++;
assemblyInfos[AssemIdToString(assemId)] = new AssemblyInfo(assemId, dottedAssemblyName, false);
dottedAssemToAssemIdTable[dottedAssemblyName] = assemId;
}
// Create a new DottedInfo structure and remember it with the type name
dottedInfo = new DottedInfo();
dottedInfo.dottedAssemblyName = dottedAssemblyName;
dottedInfo.name = name;
dottedInfo.nameSpace = nameSpace;
dottedInfo.assemId = assemId;
typeNameToDottedInfoTable[typeFullName] = dottedInfo;
InternalST.Soap( this, "ParseAssemblyName new dotted Assembly name ",dottedInfo.name,", dottedAssemblyName ",dottedInfo.dottedAssemblyName,", assemId ",dottedInfo.assemId, " typeFullName ", typeFullName);
}
InternalST.Soap( this, "ParseAssemblyName Exit nameSpace ",dottedInfo.nameSpace," name ",dottedInfo.name," assemblyName ",dottedInfo.dottedAssemblyName," assemId ",dottedInfo.assemId);
return dottedInfo;
}