resolving of corba aliases and structures fixed BLD200408161800
authordprusa@netbeans.org
Mon, 16 Aug 2004 07:45:33 +0000
changeset 1565a1d8426b912a
parent 1564 81e08d8fcf88
child 1566 890949007e1e
resolving of corba aliases and structures fixed
mdr/jmiutils/src/org/netbeans/lib/jmi/xmi/XmiContext.java
mdr/jmiutils/src/org/netbeans/lib/jmi/xmi/XmiElement.java
     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))