if (obj == null)
{
//Debug.output (3, "A reference from the Repository is null... (but it should not)");
return null;
}
IRObject irObject = null;
TypeSystemNode result = null;
System.out.flush();
// Typ-Unterscheidung für obj vornehmen und korrespondierendes
// org.jacorb.ir.gui.typesystem-Objekt erzeugen.
// knownIRObjects: zu jedem Objekt des IR wird das
// korrespondierende org.jacorb.ir.gui.typesystem-Objekt
// festgehalten, damit letzteres nicht mehrfach für
/// das selbe IR-Objekt erzeugt wird
// (die Abbildung von IR-Objekten auf
// org.jacorb.ir.gui.typesystem-Objekte wird sozusagen injektiv gehalten)
// Je nach Typ wird ein anderer Hashcode verwendet,
// um das obj in knownIRObjects abzulegen:
// die von Object geerbte hashcode() Methode reicht
// hier nicht, weil sie equals() verwendet und
// diese Methode nicht für alle möglichen Typen von
/// obj korrekt redefiniert wurde (testet nur auf
// Objekt-Identität)
if ( obj instanceof IRObject )
{
try
{
irObject = IRObjectHelper.narrow((org.omg.CORBA.Object)obj);
}
catch( org.omg.CORBA.BAD_PARAM bp )
{
}
}
if( irObject != null )
{
// insbesondere "echte" IRObjects können beim Aufbau
// des Trees mehrmals referenziert
// und dieser Methode als Argument übergeben werden
// if (knownIRObjects.get(ORB.init().object_to_string((org.omg.CORBA.Object)irObject))!=null) {
// return (TypeSystemNode)knownIRObjects.get(ORB.init().object_to_string((org.omg.CORBA.Object)irObject));
// }
result = (TypeSystemNode)knownIRObjects.get(irObject);
if( result != null )
{
// Debug.output(2, result.getInstanceNodeTypeName()+" "+
// result.getAbsoluteName()+" (cached)");
return result;
}
// try again using Repository-ID
try
{
Contained contained =
ContainedHelper.narrow((org.omg.CORBA.Object)irObject);
result = (TypeSystemNode)knownIRObjects.get(contained.id());
if (result != null)
{
// Debug.output(2,
// result.getInstanceNodeTypeName()+" "+
// result.getAbsoluteName()+" (cached by id)");
return result;
}
}
catch( org.omg.CORBA.BAD_PARAM bp )
{}
try
{
switch(irObject.def_kind().value())
{
// create IRObjects
case DefinitionKind._dk_Module:
result = new IRModule(irObject);
break;
case DefinitionKind._dk_Interface:
result = new IRInterface(irObject);
break;
case DefinitionKind._dk_Constant:
result = new IRConstant(irObject);
break;
case DefinitionKind._dk_Attribute:
result = new IRAttribute(irObject);
break;
case DefinitionKind._dk_Operation:
result = new IROperation(irObject);
break;
/* Typedef ist eine abstrakte Oberklasse,
theoretisch dürfte es kein Objekt mit
DefinitionKind._dk_Typedef geben case
DefinitionKind._dk_Typedef: result = new
IRTypedef(irObject); break; */
case DefinitionKind._dk_Exception:
result = new IRException(irObject);
break;
case DefinitionKind._dk_Struct:
result = new IRStruct(irObject);
break;
case DefinitionKind._dk_Union:
result = new IRUnion(irObject);
break;
case DefinitionKind._dk_Primitive:
result = new IRPrimitive(irObject);
break;
case DefinitionKind._dk_Fixed:
result = new IRFixed(irObject);
break;
case DefinitionKind._dk_String:
result = new IRString(irObject);
break;
case DefinitionKind._dk_Wstring:
result = new IRWstring(irObject);
break;
case DefinitionKind._dk_Alias:
result = new IRAlias(irObject);
break;
case DefinitionKind._dk_Sequence:
result = new IRSequence(irObject);
break;
case DefinitionKind._dk_Enum:
result = new IREnum(irObject);
break;
case DefinitionKind._dk_Array:
result = new IRArray(irObject);
break;
case DefinitionKind._dk_ValueBox:
result = new IRValueBox(irObject);
break;
case DefinitionKind._dk_Value:
result = new IRValue(irObject);
break;
case DefinitionKind._dk_ValueMember:
result = new IRValueMember(irObject);
break;
default:
System.out.println("Unknown/senseless DefinitionKind returned from Repository: "+irObject.def_kind().value());
break;
} // switch
}
catch( Exception exc )
{