1.1 --- a/mdr/jmiutils/src/org/netbeans/lib/jmi/xmi/XmiContext.java Sun Aug 08 18:25:34 2004 +0000
1.2 +++ b/mdr/jmiutils/src/org/netbeans/lib/jmi/xmi/XmiContext.java Mon Aug 16 07:45:33 2004 +0000
1.3 @@ -72,7 +72,7 @@
1.4 // stores primitive types contained in @link #primitiveTypesPackage
1.5 private HashMap primitiveTypes = null;
1.6 // stores all Alias instances created instead of Corba primitive types
1.7 - private List aliasesInsteadOfCorbaPrimitives = new LinkedList ();
1.8 + private List corbaTypesReferencingPrimitiveTypes = new LinkedList ();
1.9
1.10 // cache storing instance level attributes
1.11 private HashMap instanceAttributes_cache = new HashMap ();
1.12 @@ -601,7 +601,7 @@
1.13 return;
1.14
1.15 HashMap checkedPackages = new HashMap ();
1.16 - Iterator iter = aliasesInsteadOfCorbaPrimitives.iterator ();
1.17 + Iterator iter = corbaTypesReferencingPrimitiveTypes.iterator ();
1.18 while (iter.hasNext ()) {
1.19 ModelElement element = (ModelElement) iter.next ();
1.20 Namespace container = element.getContainer ();
1.21 @@ -1144,39 +1144,39 @@
1.22 // Corba types resolving
1.23 // ==========================================================================
1.24
1.25 - public Classifier resolveCorbaType (XmiElement.DataTypeElement.Node node) {
1.26 + public Classifier resolveCorbaType (XmiElement.DataTypeElement.Node node, boolean nestedCall) {
1.27 node = node.firstSubNode ();
1.28 String id = node.name;
1.29 if (id.equals (XmiConstants.XMICorbaTcShort))
1.30 - return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE);
1.31 + return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE, nestedCall);
1.32 if (id.equals (XmiConstants.XMICorbaTcLong))
1.33 - return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE);
1.34 + return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE, nestedCall);
1.35 if (id.equals (XmiConstants.XMICorbaTcUShort))
1.36 - return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE);
1.37 + return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE, nestedCall);
1.38 if (id.equals (XmiConstants.XMICorbaTcULong))
1.39 - return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE);
1.40 + return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE, nestedCall);
1.41 if (id.equals (XmiConstants.XMICorbaTcFloat))
1.42 - return resolveCorbaPrimitive (node, XmiConstants.FLOAT_TYPE);
1.43 + return resolveCorbaPrimitive (node, XmiConstants.FLOAT_TYPE, nestedCall);
1.44 if (id.equals (XmiConstants.XMICorbaTcDouble))
1.45 - return resolveCorbaPrimitive (node, XmiConstants.DOUBLE_TYPE);
1.46 + return resolveCorbaPrimitive (node, XmiConstants.DOUBLE_TYPE, nestedCall);
1.47 if (id.equals (XmiConstants.XMICorbaTcBoolean))
1.48 - return resolveCorbaPrimitive (node, XmiConstants.BOOLEAN_TYPE);
1.49 + return resolveCorbaPrimitive (node, XmiConstants.BOOLEAN_TYPE, nestedCall);
1.50 if (id.equals (XmiConstants.XMICorbaTcChar))
1.51 - return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE);
1.52 + return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE, nestedCall);
1.53 if (id.equals (XmiConstants.XMICorbaTcWChar))
1.54 - return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE);
1.55 + return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE, nestedCall);
1.56 if (id.equals (XmiConstants.XMICorbaTcOctet))
1.57 - return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE);
1.58 + return resolveCorbaPrimitive (node, XmiConstants.INTEGER_TYPE, nestedCall);
1.59 if (id.equals (XmiConstants.XMICorbaTcString))
1.60 - return resolveCorbaPrimitive (node, XmiConstants.STRING_TYPE);
1.61 + return resolveCorbaPrimitive (node, XmiConstants.STRING_TYPE, nestedCall);
1.62 if (id.equals (XmiConstants.XMICorbaTcWString))
1.63 - return resolveCorbaPrimitive (node, XmiConstants.STRING_TYPE);
1.64 + return resolveCorbaPrimitive (node, XmiConstants.STRING_TYPE, nestedCall);
1.65 if (id.equals (XmiConstants.XMICorbaTcLongLong))
1.66 - return resolveCorbaPrimitive (node, XmiConstants.LONG_TYPE);
1.67 + return resolveCorbaPrimitive (node, XmiConstants.LONG_TYPE, nestedCall);
1.68 if (id.equals (XmiConstants.XMICorbaTcULongLong))
1.69 - return resolveCorbaPrimitive (node, XmiConstants.LONG_TYPE);
1.70 + return resolveCorbaPrimitive (node, XmiConstants.LONG_TYPE, nestedCall);
1.71 if (id.equals (XmiConstants.XMICorbaTcLongDouble))
1.72 - return resolveCorbaPrimitive (node, XmiConstants.DOUBLE_TYPE);
1.73 + return resolveCorbaPrimitive (node, XmiConstants.DOUBLE_TYPE, nestedCall);
1.74
1.75 if (id.equals (XmiConstants.XMICorbaTcStruct))
1.76 return resolveCorbaStruct (node);
1.77 @@ -1185,7 +1185,7 @@
1.78 if (id.equals (XmiConstants.XMICorbaTcAlias))
1.79 return resolveCorbaAlias (node);
1.80 if (id.equals (XmiConstants.XMICorbaTcAny))
1.81 - return resolveCorbaPrimitive (node, XmiConstants.STRING_TYPE);
1.82 + return resolveCorbaPrimitive (node, XmiConstants.STRING_TYPE, nestedCall);
1.83
1.84 throw new DebugException ("Unsupported Corba type: " + id);
1.85 }
1.86 @@ -1193,6 +1193,7 @@
1.87 private Classifier resolveCorbaStruct (XmiElement.DataTypeElement.Node node) {
1.88 StructureField field;
1.89 Classifier fieldType;
1.90 + boolean hasPrimType = false;
1.91 String name = node.tcName;
1.92 StructureFieldClass fieldProxy = modelPackage.getStructureField ();
1.93 List fields = new LinkedList ();
1.94 @@ -1201,7 +1202,7 @@
1.95 XmiElement.DataTypeElement.Node fieldNode =
1.96 (XmiElement.DataTypeElement.Node) iter.next ();
1.97 String fieldName = fieldNode.tcName;
1.98 - fieldType = resolveCorbaType (fieldNode.firstSubNode ());
1.99 + fieldType = resolveCorbaType (fieldNode.firstSubNode (), true);
1.100 field = fieldProxy.createStructureField (
1.101 fieldName, ANNOTATION
1.102 );
1.103 @@ -1216,7 +1217,15 @@
1.104 while (iter.hasNext ()) {
1.105 field = (StructureField) iter.next ();
1.106 field.setContainer (struct);
1.107 - field.getType ().setContainer (struct);
1.108 + fieldType = field.getType ();
1.109 + if (fieldType instanceof PrimitiveType) {
1.110 + hasPrimType = true;
1.111 + } else {
1.112 + fieldType.setContainer(struct);
1.113 + }
1.114 + }
1.115 + if (hasPrimType) {
1.116 + corbaTypesReferencingPrimitiveTypes.add (struct);
1.117 }
1.118 return struct;
1.119 }
1.120 @@ -1238,13 +1247,17 @@
1.121
1.122 private Classifier resolveCorbaAlias (XmiElement.DataTypeElement.Node node) {
1.123 String name = node.tcName;
1.124 - Classifier type = resolveCorbaType (node.firstSubNode ());
1.125 + Classifier type = resolveCorbaType (node.firstSubNode (), true);
1.126 AliasType alias = modelPackage.getAliasType ().createAliasType (
1.127 name, ANNOTATION,
1.128 false, false, false, VisibilityKindEnum.PUBLIC_VIS
1.129 );
1.130 alias.setType (type);
1.131 - type.setContainer (alias);
1.132 + if (type instanceof PrimitiveType) {
1.133 + corbaTypesReferencingPrimitiveTypes.add (alias);
1.134 + } else {
1.135 + type.setContainer (alias);
1.136 + }
1.137 return alias;
1.138 }
1.139
1.140 @@ -1252,17 +1265,21 @@
1.141 * Resolves Corba primitive type as an Alias pointing to an equivalent
1.142 * of the primitive type.
1.143 */
1.144 - private AliasType resolveCorbaPrimitive (XmiElement.DataTypeElement.Node node, String name) {
1.145 + private Classifier resolveCorbaPrimitive (XmiElement.DataTypeElement.Node node, String name, boolean nestedCall) {
1.146 PrimitiveType primitive = substCorbaPrimitive (node, name);
1.147 - AliasType alias = modelPackage.getAliasType ().createAliasType (
1.148 - name, ANNOTATION,
1.149 - false, false, false, VisibilityKindEnum.PUBLIC_VIS
1.150 - );
1.151 - alias.setType (primitive);
1.152 - // Store created Alias instance to be able set all needed Imports later when
1.153 - // all elements of XMI document are deserialized.
1.154 - aliasesInsteadOfCorbaPrimitives.add (alias);
1.155 - return alias;
1.156 + if (nestedCall) {
1.157 + return primitive;
1.158 + } else {
1.159 + AliasType alias = modelPackage.getAliasType ().createAliasType (
1.160 + name, ANNOTATION,
1.161 + false, false, false, VisibilityKindEnum.PUBLIC_VIS
1.162 + );
1.163 + alias.setType (primitive);
1.164 + // Store created Alias instance to be able set all needed Imports later when
1.165 + // all elements of XMI document are deserialized.
1.166 + corbaTypesReferencingPrimitiveTypes.add (alias);
1.167 + return alias;
1.168 + }
1.169 }
1.170
1.171 private PrimitiveType substCorbaPrimitive (XmiElement.DataTypeElement.Node node, String name) {
2.1 --- a/mdr/jmiutils/src/org/netbeans/lib/jmi/xmi/XmiElement.java Sun Aug 08 18:25:34 2004 +0000
2.2 +++ b/mdr/jmiutils/src/org/netbeans/lib/jmi/xmi/XmiElement.java Mon Aug 16 07:45:33 2004 +0000
2.3 @@ -841,7 +841,7 @@
2.4 if (!qName.endsWith ("DataType"))
2.5 return this;
2.6 // the end of DataTypeElement has been reached
2.7 - RefObject typeEquivalent = context.resolveCorbaType (node);
2.8 + RefObject typeEquivalent = context.resolveCorbaType (node, false);
2.9 if (xmiId != null)
2.10 context.putReference (docId, xmiId, typeEquivalent);
2.11 if (!(parent instanceof XmiElement.Content))