diff options
author | Mark Spruiell <mes@zeroc.com> | 2009-04-03 15:15:13 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2009-04-03 15:15:13 -0700 |
commit | b415955846ce0d5c2e0c283f897190ccd2c3616a (patch) | |
tree | 10daf6bb8a05edf5052a33f10ea16c73d8ae0d89 /cpp/src/Slice/JavaUtil.cpp | |
parent | Bug 3465 - Remove _adapter members from test where unecessary (diff) | |
download | ice-b415955846ce0d5c2e0c283f897190ccd2c3616a.tar.bz2 ice-b415955846ce0d5c2e0c283f897190ccd2c3616a.tar.xz ice-b415955846ce0d5c2e0c283f897190ccd2c3616a.zip |
removing Java2 mapping
Diffstat (limited to 'cpp/src/Slice/JavaUtil.cpp')
-rw-r--r-- | cpp/src/Slice/JavaUtil.cpp | 1262 |
1 files changed, 200 insertions, 1062 deletions
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp index e1ca7fdbba0..ded9eea1231 100644 --- a/cpp/src/Slice/JavaUtil.cpp +++ b/cpp/src/Slice/JavaUtil.cpp @@ -168,8 +168,6 @@ Slice::JavaOutput::printHeader() } const string Slice::JavaGenerator::_getSetMetaData = "java:getset"; -const string Slice::JavaGenerator::_java2MetaData = "java:java2"; -const string Slice::JavaGenerator::_java5MetaData = "java:java5"; Slice::JavaGenerator::JavaGenerator(const string& dir) : _featureProfile(Slice::Ice), @@ -533,22 +531,12 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, return getAbsolute(dict, package, "", "Holder"); } - bool java2 = dict->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; - // // The custom type may or may not be compatible with the type used - // in the generated holder. For Java5, we can use a generic holder - // that holds a value of the formal custom type. Otherwise, we - // use MapHolder. + // in the generated holder. We use a generic holder that holds a value of the + // formal custom type. // - if(java2) - { - return "Ice.MapHolder"; - } - else - { - return string("Ice.Holder<") + formalType + " >"; - } + return string("Ice.Holder<") + formalType + " >"; } } else @@ -599,33 +587,12 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, return getAbsolute(seq, package, "", "Holder"); } - bool java2 = seq->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; - // // The custom type may or may not be compatible with the type used - // in the generated holder. For Java5, we can use a generic holder - // that holds a value of the formal custom type. Otherwise, we - // choose a predefined holder class. + // in the generated holder. We use a generic holder that holds a value of the + // formal custom type. // - if(java2) - { - if(formalType == "java.util.ArrayList") - { - return "Ice.ArrayListHolder"; - } - else if(formalType == "java.util.LinkedList") - { - return "Ice.LinkedListHolder"; - } - else - { - return "Ice.ListHolder"; - } - } - else - { - return string("Ice.Holder<") + formalType + " >"; - } + return string("Ice.Holder<") + formalType + " >"; } } else @@ -990,13 +957,10 @@ Slice::JavaGenerator::writeDictionaryMarshalUnmarshalCode(Output& out, string stream = marshal ? "__os" : "__is"; string v = param; - bool java2 = false; string instanceType; if(_featureProfile != Slice::IceE) { - java2 = dict->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; - // // We have to determine whether it's possible to use the // type's generated helper class for this marshal/unmarshal @@ -1059,24 +1023,13 @@ Slice::JavaGenerator::writeDictionaryMarshalUnmarshalCode(Output& out, out << nl << "else"; out << sb; out << nl << "__os.writeSize(" << v << ".size());"; - if(java2) - { - out << nl << "java.util.Iterator __i" << iterS << " = " << v << ".entrySet().iterator();"; - out << nl << "while(__i" << iterS << ".hasNext())"; - out << sb; - out << nl << "java.util.Map.Entry __e = (java.util.Map.Entry)" << "__i" << iterS << ".next();"; - } - else - { - string keyObjectS = typeToObjectString(key, TypeModeIn, package); - string valueObjectS = typeToObjectString(value, TypeModeIn, package); - out << nl << "for(java.util.Map.Entry<" << keyObjectS << ", " << valueObjectS << "> __e : " << v - << ".entrySet())"; - out << sb; - } + string keyObjectS = typeToObjectString(key, TypeModeIn, package); + string valueObjectS = typeToObjectString(value, TypeModeIn, package); + out << nl << "for(java.util.Map.Entry<" << keyObjectS << ", " << valueObjectS << "> __e : " << v + << ".entrySet())"; + out << sb; for(i = 0; i < 2; i++) { - string val; string arg; TypePtr type; if(i == 0) @@ -1089,76 +1042,7 @@ Slice::JavaGenerator::writeDictionaryMarshalUnmarshalCode(Output& out, arg = "__e.getValue()"; type = value; } - - // - // We have to downcast unless we're using Java5. - // - if(java2) - { - BuiltinPtr b = BuiltinPtr::dynamicCast(type); - if(b) - { - switch(b->kind()) - { - case Builtin::KindByte: - { - val = "((java.lang.Byte)" + arg + ").byteValue()"; - break; - } - case Builtin::KindBool: - { - val = "((java.lang.Boolean)" + arg + ").booleanValue()"; - break; - } - case Builtin::KindShort: - { - val = "((java.lang.Short)" + arg + ").shortValue()"; - break; - } - case Builtin::KindInt: - { - val = "((java.lang.Integer)" + arg + ").intValue()"; - break; - } - case Builtin::KindLong: - { - val = "((java.lang.Long)" + arg + ").longValue()"; - break; - } - case Builtin::KindFloat: - { - val = "((java.lang.Float)" + arg + ").floatValue()"; - break; - } - case Builtin::KindDouble: - { - val = "((java.lang.Double)" + arg + ").doubleValue()"; - break; - } - case Builtin::KindString: - case Builtin::KindObject: - case Builtin::KindObjectProxy: - { - break; - } - case Builtin::KindLocalObject: - { - assert(false); - break; - } - } - } - - if(val.empty()) - { - val = "((" + typeToString(type, TypeModeIn, package) + ')' + arg + ')'; - } - } - else - { - val = arg; - } - writeMarshalUnmarshalCode(out, package, type, val, true, iter, false); + writeMarshalUnmarshalCode(out, package, type, arg, true, iter, false); } out << eb; out << eb; @@ -1188,87 +1072,18 @@ Slice::JavaGenerator::writeDictionaryMarshalUnmarshalCode(Output& out, } BuiltinPtr b = BuiltinPtr::dynamicCast(type); - if(b && java2) + if(ClassDeclPtr::dynamicCast(type) || (b && b->kind() == Builtin::KindObject)) { - switch(b->kind()) - { - case Builtin::KindByte: - { - out << nl << "java.lang.Byte " << arg << " = new java.lang.Byte(__is.readByte());"; - break; - } - case Builtin::KindBool: - { - out << nl << "java.lang.Boolean " << arg << " = new java.lang.Boolean(__is.readBool());"; - break; - } - case Builtin::KindShort: - { - out << nl << "java.lang.Short " << arg << " = new java.lang.Short(__is.readShort());"; - break; - } - case Builtin::KindInt: - { - out << nl << "java.lang.Integer " << arg << " = new java.lang.Integer(__is.readInt());"; - break; - } - case Builtin::KindLong: - { - out << nl << "java.lang.Long " << arg << " = new java.lang.Long(__is.readLong());"; - break; - } - case Builtin::KindFloat: - { - out << nl << "java.lang.Float " << arg << " = new java.lang.Float(__is.readFloat());"; - break; - } - case Builtin::KindDouble: - { - out << nl << "java.lang.Double " << arg << " = new java.lang.Double(__is.readDouble());"; - break; - } - case Builtin::KindString: - { - out << nl << "java.lang.String " << arg << " = __is.readString();"; - break; - } - case Builtin::KindObject: - { - assert(i == 1); // Must be the element value, since an object cannot be a key. - string keyTypeStr = typeToObjectString(key, TypeModeIn, package); - string valueTypeStr = typeToObjectString(value, TypeModeIn, package); - out << nl << "__is.readObject(new IceInternal.DictionaryPatcher<" << keyTypeStr << ", " - << valueTypeStr << ">(" << v << ", " - << valueS << ".class, \"" << value->typeId() << "\", __key));"; - break; - } - case Builtin::KindObjectProxy: - { - out << nl << "Ice.ObjectPrx " << arg << " = __is.readProxy();"; - break; - } - case Builtin::KindLocalObject: - { - assert(false); - break; - } - } + string keyTypeStr = typeToObjectString(key, TypeModeIn, package); + string valueTypeStr = typeToObjectString(value, TypeModeIn, package); + writeMarshalUnmarshalCode(out, package, type, arg, false, iter, false, StringList(), + "new IceInternal.DictionaryPatcher<" + keyTypeStr + ", " + valueTypeStr + + ">(" + v + ", " + typeS + ".class, \"" + type->typeId() + "\", __key)"); } else { - if(ClassDeclPtr::dynamicCast(type) || (b && b->kind() == Builtin::KindObject)) - { - string keyTypeStr = typeToObjectString(key, TypeModeIn, package); - string valueTypeStr = typeToObjectString(value, TypeModeIn, package); - writeMarshalUnmarshalCode(out, package, type, arg, false, iter, false, StringList(), - "new IceInternal.DictionaryPatcher<" + keyTypeStr + ", " + valueTypeStr + - ">(" + v + ", " + typeS + ".class, \"" + type->typeId() + "\", __key)"); - } - else - { - out << nl << typeS << ' ' << arg << ';'; - writeMarshalUnmarshalCode(out, package, type, arg, false, iter, false); - } + out << nl << typeS << ' ' << arg << ';'; + writeMarshalUnmarshalCode(out, package, type, arg, false, iter, false); } } BuiltinPtr builtin = BuiltinPtr::dynamicCast(value); @@ -1292,7 +1107,6 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out, { string stream = marshal ? "__os" : "__is"; string v = param; - bool java2 = seq->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; // // If the sequence is a byte sequence, check if there's the serializable or protobuf metadata to @@ -1420,331 +1234,121 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out, // Marshal/unmarshal a custom sequence type. // BuiltinPtr b = BuiltinPtr::dynamicCast(type); - if(b && b->kind() != Builtin::KindObject && b->kind() != Builtin::KindObjectProxy && java2) + string typeS = getAbsolute(seq, package); + ostringstream o; + o << origContentS; + int d = depth; + while(d--) { - if(marshal) - { - out << nl << "if(" << v << " == null)"; - out << sb; - out << nl << stream << ".writeSize(0);"; - out << eb; - out << nl << "else"; - out << sb; - out << nl << stream << ".writeSize(" << v << ".size());"; - ostringstream o; - o << "__i" << iter; - string it = o.str(); - iter++; - out << nl << "java.util.Iterator " << it << " = " << v << ".iterator();"; - out << nl << "while(" << it << ".hasNext())"; - out << sb; - - switch(b->kind()) - { - case Builtin::KindByte: - { - out << nl << "java.lang.Byte __elem = (java.lang.Byte)" << it << ".next();"; - out << nl << stream << ".writeByte(__elem.byteValue());"; - break; - } - case Builtin::KindBool: - { - out << nl << "java.lang.Boolean __elem = (java.lang.Boolean)" << it << ".next();"; - out << nl << stream << ".writeBool(__elem.booleanValue());"; - break; - } - case Builtin::KindShort: - { - out << nl << "java.lang.Short __elem = (java.lang.Short)" << it << ".next();"; - out << nl << stream << ".writeShort(__elem.shortValue());"; - break; - } - case Builtin::KindInt: - { - out << nl << "java.lang.Integer __elem = (java.lang.Integer)" << it << ".next();"; - out << nl << stream << ".writeInt(__elem.intValue());"; - break; - } - case Builtin::KindLong: - { - out << nl << "java.lang.Long __elem = (java.lang.Long)" << it << ".next();"; - out << nl << stream << ".writeLong(__elem.longValue());"; - break; - } - case Builtin::KindFloat: - { - out << nl << "java.lang.Float __elem = (java.lang.Float)" << it << ".next();"; - out << nl << stream << ".writeFloat(__elem.floatValue());"; - break; - } - case Builtin::KindDouble: - { - out << nl << "java.lang.Double __elem = (java.lang.Double)" << it << ".next();"; - out << nl << stream << ".writeDouble(__elem.doubleValue());"; - break; - } - case Builtin::KindString: - { - out << nl << "java.lang.String __elem = (java.lang.String)" << it << ".next();"; - out << nl << stream << ".writeString(__elem);"; - break; - } - case Builtin::KindObject: - case Builtin::KindObjectProxy: - case Builtin::KindLocalObject: - { - assert(false); - break; - } - } - out << eb; // while - out << eb; - } - else - { - out << nl << v << " = new " << instanceType << "();"; - ostringstream o; - o << origContentS << "[]"; - int d = depth; - while(d--) - { - o << "[]"; - } - switch(b->kind()) - { - case Builtin::KindByte: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readByteSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Byte(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindBool: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readBoolSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(__seq" << iter << "[__i" << iter - << "] ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);"; - out << eb; - iter++; - break; - } - case Builtin::KindShort: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readShortSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Short(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindInt: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readIntSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Integer(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindLong: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readLongSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Long(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindFloat: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readFloatSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Float(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindDouble: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readDoubleSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Double(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindString: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readStringSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(__seq" << iter << "[__i" << iter << "]);"; - out << eb; - iter++; - break; - } - case Builtin::KindObject: - case Builtin::KindObjectProxy: - case Builtin::KindLocalObject: - { - assert(false); - break; - } - } - } + o << "[]"; + } + string cont = o.str(); + if(marshal) + { + out << nl << "if(" << v << " == null)"; + out << sb; + out << nl << stream << ".writeSize(0);"; + out << eb; + out << nl << "else"; + out << sb; + out << nl << stream << ".writeSize(" << v << ".size());"; + string typeS = typeToString(type, TypeModeIn, package); + out << nl << "for(" << typeS << " __elem : " << v << ')'; + out << sb; + writeMarshalUnmarshalCode(out, package, type, "__elem", true, iter, false); + out << eb; + out << eb; // else } else { - string typeS = getAbsolute(seq, package); - ostringstream o; - o << origContentS; - int d = depth; - while(d--) + bool isObject = false; + ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); + if((b && b->kind() == Builtin::KindObject) || cl) { - o << "[]"; + isObject = true; } - string cont = o.str(); - if(marshal) + out << nl << v << " = new " << instanceType << "();"; + out << nl << "final int __len" << iter << " = " << stream << ".readSize();"; + if(type->isVariableLength()) { - out << nl << "if(" << v << " == null)"; - out << sb; - out << nl << stream << ".writeSize(0);"; - out << eb; - out << nl << "else"; - out << sb; - out << nl << stream << ".writeSize(" << v << ".size());"; - if(java2) - { - ostringstream oit; - oit << "__i" << iter; - iter++; - string it = oit.str(); - out << nl << "java.util.Iterator " << it << " = " << v << ".iterator();"; - out << nl << "while(" << it << ".hasNext())"; - out << sb; - out << nl << cont << " __elem = (" << cont << ")" << it << ".next();"; - writeMarshalUnmarshalCode(out, package, type, "__elem", true, iter, false); - out << eb; - } - else - { - string typeS = typeToString(type, TypeModeIn, package); - out << nl << "for(" << typeS << " __elem : " << v << ')'; - out << sb; - writeMarshalUnmarshalCode(out, package, type, "__elem", true, iter, false); - out << eb; - } - out << eb; // else + out << nl << stream << ".startSeq(__len" << iter << ", " << type->minWireSize() << ");"; } else { - bool isObject = false; - ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); - if((b && b->kind() == Builtin::KindObject) || cl) - { - isObject = true; - } - out << nl << v << " = new " << instanceType << "();"; - out << nl << "final int __len" << iter << " = " << stream << ".readSize();"; - if(type->isVariableLength()) + out << nl << stream << ".checkFixedSeq(__len" << iter << ", " << type->minWireSize() << ");"; + } + if(isObject) + { + if(b) { - out << nl << stream << ".startSeq(__len" << iter << ", " << type->minWireSize() << ");"; + out << nl << "final String __type" << iter << " = Ice.ObjectImpl.ice_staticId();"; } else { - out << nl << stream << ".checkFixedSeq(__len" << iter << ", " << type->minWireSize() << ");"; - } - if(isObject) - { - if(b) + assert(cl); + if(cl->isInterface()) { - out << nl << "final String __type" << iter << " = Ice.ObjectImpl.ice_staticId();"; + out << nl << "final String __type" << iter << " = " + << getAbsolute(cl, package, "_", "Disp") << ".ice_staticId();"; } else { - assert(cl); - if(cl->isInterface()) - { - out << nl << "final String __type" << iter << " = " - << getAbsolute(cl, package, "_", "Disp") << ".ice_staticId();"; - } - else - { - out << nl << "final String __type" << iter << " = " << origContentS << ".ice_staticId();"; - } + out << nl << "final String __type" << iter << " = " << origContentS << ".ice_staticId();"; } } - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __len" << iter << "; __i" << iter - << "++)"; - out << sb; - if(isObject) - { - // - // Add a null value to the list as a placeholder for the element. - // - out << nl << v << ".add(null);"; - ostringstream patchParams; - patchParams << "new IceInternal.ListPatcher<" << origContentS << ">(" << v << ", " << origContentS - << ".class, __type" << iter << ", __i" << iter << ')'; - writeMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false, StringList(), - patchParams.str()); - } - else - { - out << nl << cont << " __elem;"; - writeMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false); - } - if(!isObject) - { - out << nl << v << ".add(__elem);"; - } - + } + out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __len" << iter << "; __i" << iter + << "++)"; + out << sb; + if(isObject) + { // - // After unmarshaling each element, check that there are still enough bytes left in the stream - // to unmarshal the remainder of the sequence, and decrement the count of elements - // yet to be unmarshaled for sequences with variable-length element type (that is, for sequences - // of classes, structs, dictionaries, sequences, strings, or proxies). This allows us to - // abort unmarshaling for bogus sequence sizes at the earliest possible moment. - // (For fixed-length sequences, we don't need to do this because the prediction of how many - // bytes will be taken up by the sequence is accurate.) + // Add a null value to the list as a placeholder for the element. // - if(type->isVariableLength()) - { - if(!SequencePtr::dynamicCast(type)) - { - // - // No need to check for directly nested sequences because, at the at start of each - // sequence, we check anyway. - // - out << nl << stream << ".checkSeq();"; - } - out << nl << stream << ".endElement();"; - } - out << eb; - if(type->isVariableLength()) + out << nl << v << ".add(null);"; + ostringstream patchParams; + patchParams << "new IceInternal.ListPatcher<" << origContentS << ">(" << v << ", " << origContentS + << ".class, __type" << iter << ", __i" << iter << ')'; + writeMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false, StringList(), + patchParams.str()); + } + else + { + out << nl << cont << " __elem;"; + writeMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false); + } + if(!isObject) + { + out << nl << v << ".add(__elem);"; + } + + // + // After unmarshaling each element, check that there are still enough bytes left in the stream + // to unmarshal the remainder of the sequence, and decrement the count of elements + // yet to be unmarshaled for sequences with variable-length element type (that is, for sequences + // of classes, structs, dictionaries, sequences, strings, or proxies). This allows us to + // abort unmarshaling for bogus sequence sizes at the earliest possible moment. + // (For fixed-length sequences, we don't need to do this because the prediction of how many + // bytes will be taken up by the sequence is accurate.) + // + if(type->isVariableLength()) + { + if(!SequencePtr::dynamicCast(type)) { - out << nl << stream << ".endSeq(__len" << iter << ");"; + // + // No need to check for directly nested sequences because, at the at start of each + // sequence, we check anyway. + // + out << nl << stream << ".checkSeq();"; } - iter++; + out << nl << stream << ".endElement();"; } + out << eb; + if(type->isVariableLength()) + { + out << nl << stream << ".endSeq(__len" << iter << ");"; + } + iter++; } } else @@ -1918,7 +1522,7 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out, } } // - // In Java5, we cannot allocate an array of a generic type, such as + // We cannot allocate an array of a generic type, such as // // arr = new Map<String, String>[sz]; // @@ -2299,8 +1903,6 @@ Slice::JavaGenerator::writeStreamDictionaryMarshalUnmarshalCode(Output& out, string stream = marshal ? "__outS" : "__inS"; string v = param; - bool java2 = dict->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; - // // We have to determine whether it's possible to use the // type's generated helper class for this marshal/unmarshal @@ -2362,24 +1964,13 @@ Slice::JavaGenerator::writeStreamDictionaryMarshalUnmarshalCode(Output& out, out << nl << "else"; out << sb; out << nl << "__outS.writeSize(" << v << ".size());"; - if(java2) - { - out << nl << "java.util.Iterator __i" << iterS << " = " << v << ".entrySet().iterator();"; - out << nl << "while(__i" << iterS << ".hasNext())"; - out << sb; - out << nl << "java.util.Map.Entry __e = (java.util.Map.Entry)" << "__i" << iterS << ".next();"; - } - else - { - string keyObjectS = typeToObjectString(key, TypeModeIn, package); - string valueObjectS = typeToObjectString(value, TypeModeIn, package); - out << nl << "for(java.util.Map.Entry<" << keyObjectS << ", " << valueObjectS << "> __e : " << v - << ".entrySet())"; - out << sb; - } + string keyObjectS = typeToObjectString(key, TypeModeIn, package); + string valueObjectS = typeToObjectString(value, TypeModeIn, package); + out << nl << "for(java.util.Map.Entry<" << keyObjectS << ", " << valueObjectS << "> __e : " << v + << ".entrySet())"; + out << sb; for(i = 0; i < 2; i++) { - string val; string arg; TypePtr type; if(i == 0) @@ -2392,76 +1983,7 @@ Slice::JavaGenerator::writeStreamDictionaryMarshalUnmarshalCode(Output& out, arg = "__e.getValue()"; type = value; } - - // - // We have to downcast unless we're using Java5. - // - if(java2) - { - BuiltinPtr b = BuiltinPtr::dynamicCast(type); - if(b) - { - switch(b->kind()) - { - case Builtin::KindByte: - { - val = "((java.lang.Byte)" + arg + ").byteValue()"; - break; - } - case Builtin::KindBool: - { - val = "((java.lang.Boolean)" + arg + ").booleanValue()"; - break; - } - case Builtin::KindShort: - { - val = "((java.lang.Short)" + arg + ").shortValue()"; - break; - } - case Builtin::KindInt: - { - val = "((java.lang.Integer)" + arg + ").intValue()"; - break; - } - case Builtin::KindLong: - { - val = "((java.lang.Long)" + arg + ").longValue()"; - break; - } - case Builtin::KindFloat: - { - val = "((java.lang.Float)" + arg + ").floatValue()"; - break; - } - case Builtin::KindDouble: - { - val = "((java.lang.Double)" + arg + ").doubleValue()"; - break; - } - case Builtin::KindString: - case Builtin::KindObject: - case Builtin::KindObjectProxy: - { - break; - } - case Builtin::KindLocalObject: - { - assert(false); - break; - } - } - } - - if(val.empty()) - { - val = "((" + typeToString(type, TypeModeIn, package) + ')' + arg + ')'; - } - } - else - { - val = arg; - } - writeStreamMarshalUnmarshalCode(out, package, type, val, true, iter, false); + writeStreamMarshalUnmarshalCode(out, package, type, arg, true, iter, false); } out << eb; out << eb; @@ -2491,88 +2013,20 @@ Slice::JavaGenerator::writeStreamDictionaryMarshalUnmarshalCode(Output& out, } BuiltinPtr b = BuiltinPtr::dynamicCast(type); - if(b && java2) + string s = typeToString(type, TypeModeIn, package); + if(ClassDeclPtr::dynamicCast(type) || (b && b->kind() == Builtin::KindObject)) { - switch(b->kind()) - { - case Builtin::KindByte: - { - out << nl << "java.lang.Byte " << arg << " = new java.lang.Byte(__inS.readByte());"; - break; - } - case Builtin::KindBool: - { - out << nl << "java.lang.Boolean " << arg << " = new java.lang.Boolean(__inS.readBool());"; - break; - } - case Builtin::KindShort: - { - out << nl << "java.lang.Short " << arg << " = new java.lang.Short(__inS.readShort());"; - break; - } - case Builtin::KindInt: - { - out << nl << "java.lang.Integer " << arg << " = new java.lang.Integer(__inS.readInt());"; - break; - } - case Builtin::KindLong: - { - out << nl << "java.lang.Long " << arg << " = new java.lang.Long(__inS.readLong());"; - break; - } - case Builtin::KindFloat: - { - out << nl << "java.lang.Float " << arg << " = new java.lang.Float(__inS.readFloat());"; - break; - } - case Builtin::KindDouble: - { - out << nl << "java.lang.Double " << arg << " = new java.lang.Double(__inS.readDouble());"; - break; - } - case Builtin::KindString: - { - out << nl << "java.lang.String " << arg << " = __inS.readString();"; - break; - } - case Builtin::KindObject: - { - string keyTypeStr = typeToObjectString(key, TypeModeIn, package); - string valueTypeStr = typeToObjectString(value, TypeModeIn, package); - out << nl << "__inS.readObject(new IceInternal.DictionaryPatcher<" << keyTypeStr << ", " - << valueTypeStr << ">(" << v << ", " << valueS << ".class, \"" << value->typeId() - << "\", __key));"; - break; - } - case Builtin::KindObjectProxy: - { - out << nl << "Ice.ObjectPrx " << arg << " = __inS.readProxy();"; - break; - } - case Builtin::KindLocalObject: - { - assert(false); - break; - } - } + string keyTypeStr = typeToObjectString(key, TypeModeIn, package); + string valueTypeStr = typeToObjectString(value, TypeModeIn, package); + writeStreamMarshalUnmarshalCode(out, package, type, arg, false, iter, false, StringList(), + "new IceInternal.DictionaryPatcher<" + keyTypeStr + ", " + + valueTypeStr + ">(" + v + ", " + s + ".class, \"" + + type->typeId() + "\", __key)"); } else { - string s = typeToString(type, TypeModeIn, package); - if(ClassDeclPtr::dynamicCast(type) || (b && b->kind() == Builtin::KindObject)) - { - string keyTypeStr = typeToObjectString(key, TypeModeIn, package); - string valueTypeStr = typeToObjectString(value, TypeModeIn, package); - writeStreamMarshalUnmarshalCode(out, package, type, arg, false, iter, false, StringList(), - "new IceInternal.DictionaryPatcher<" + keyTypeStr + ", " + - valueTypeStr + ">(" + v + ", " + s + ".class, \"" + - type->typeId() + "\", __key)"); - } - else - { - out << nl << s << ' ' << arg << ';'; - writeStreamMarshalUnmarshalCode(out, package, type, arg, false, iter, false); - } + out << nl << s << ' ' << arg << ';'; + writeStreamMarshalUnmarshalCode(out, package, type, arg, false, iter, false); } } BuiltinPtr builtin = BuiltinPtr::dynamicCast(value); @@ -2596,7 +2050,6 @@ Slice::JavaGenerator::writeStreamSequenceMarshalUnmarshalCode(Output& out, { string stream = marshal ? "__outS" : "__inS"; string v = param; - bool java2 = seq->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; // // If the sequence is a byte sequence, check if there's the serializable or protobuf metadata to @@ -2718,297 +2171,87 @@ Slice::JavaGenerator::writeStreamSequenceMarshalUnmarshalCode(Output& out, // Marshal/unmarshal a custom sequence type. // BuiltinPtr b = BuiltinPtr::dynamicCast(type); - if(b && b->kind() != Builtin::KindObject && b->kind() != Builtin::KindObjectProxy && java2) + string typeS = getAbsolute(seq, package); + ostringstream o; + o << origContentS; + int d = depth; + while(d--) { - if(marshal) + o << "[]"; + } + string cont = o.str(); + if(marshal) + { + out << nl << "if(" << v << " == null)"; + out << sb; + out << nl << stream << ".writeSize(0);"; + out << eb; + out << nl << "else"; + out << sb; + out << nl << stream << ".writeSize(" << v << ".size());"; + string typeS = typeToString(type, TypeModeIn, package); + out << nl << "for(" << typeS << " __elem : " << v << ')'; + out << sb; + writeStreamMarshalUnmarshalCode(out, package, type, "__elem", true, iter, false); + out << eb; + out << eb; // else + } + else + { + bool isObject = false; + ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); + if((b && b->kind() == Builtin::KindObject) || cl) { - out << nl << "if(" << v << " == null)"; - out << sb; - out << nl << stream << ".writeSize(0);"; - out << eb; - out << nl << "else"; - out << sb; - out << nl << stream << ".writeSize(" << v << ".size());"; - ostringstream o; - o << "__i" << iter; - string it = o.str(); - iter++; - out << nl << "java.util.Iterator " << it << " = " << v << ".iterator();"; - out << nl << "while(" << it << ".hasNext())"; - out << sb; - - switch(b->kind()) - { - case Builtin::KindByte: - { - out << nl << "java.lang.Byte __elem = (java.lang.Byte)" << it << ".next();"; - out << nl << stream << ".writeByte(__elem.byteValue());"; - break; - } - case Builtin::KindBool: - { - out << nl << "java.lang.Boolean __elem = (java.lang.Boolean)" << it << ".next();"; - out << nl << stream << ".writeBool(__elem.booleanValue());"; - break; - } - case Builtin::KindShort: - { - out << nl << "java.lang.Short __elem = (java.lang.Short)" << it << ".next();"; - out << nl << stream << ".writeShort(__elem.shortValue());"; - break; - } - case Builtin::KindInt: - { - out << nl << "java.lang.Integer __elem = (java.lang.Integer)" << it << ".next();"; - out << nl << stream << ".writeInt(__elem.intValue());"; - break; - } - case Builtin::KindLong: - { - out << nl << "java.lang.Long __elem = (java.lang.Long)" << it << ".next();"; - out << nl << stream << ".writeLong(__elem.longValue());"; - break; - } - case Builtin::KindFloat: - { - out << nl << "java.lang.Float __elem = (java.lang.Float)" << it << ".next();"; - out << nl << stream << ".writeFloat(__elem.floatValue());"; - break; - } - case Builtin::KindDouble: - { - out << nl << "java.lang.Double __elem = (java.lang.Double)" << it << ".next();"; - out << nl << stream << ".writeDouble(__elem.doubleValue());"; - break; - } - case Builtin::KindString: - { - out << nl << "java.lang.String __elem = (java.lang.String)" << it << ".next();"; - out << nl << stream << ".writeString(__elem);"; - break; - } - case Builtin::KindObject: - case Builtin::KindObjectProxy: - case Builtin::KindLocalObject: - { - assert(false); - break; - } - } - out << eb; // while - out << eb; + isObject = true; } - else + out << nl << v << " = new " << instanceType << "();"; + out << nl << "final int __len" << iter << " = " << stream << ".readSize();"; + if(isObject) { - out << nl << v << " = new " << instanceType << "();"; - ostringstream o; - o << origContentS << "[]"; - int d = depth; - while(d--) + if(b) { - o << "[]"; + out << nl << "final String __type" << iter << " = Ice.ObjectImpl.ice_staticId();"; } - switch(b->kind()) + else { - case Builtin::KindByte: + assert(cl); + if(cl->isInterface()) { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readByteSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Byte(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; + out << nl << "final String __type" << iter << " = " + << getAbsolute(cl, package, "_", "Disp") << ".ice_staticId();"; } - case Builtin::KindBool: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readBoolSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(__seq" << iter << "[__i" << iter - << "] ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);"; - out << eb; - iter++; - break; - } - case Builtin::KindShort: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readShortSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Short(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindInt: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readIntSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Integer(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindLong: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readLongSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Long(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindFloat: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readFloatSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Float(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindDouble: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readDoubleSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(new java.lang.Double(__seq" << iter << "[__i" << iter << "]));"; - out << eb; - iter++; - break; - } - case Builtin::KindString: - { - out << nl << o.str() << " __seq" << iter << " = " << stream << ".readStringSeq();"; - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter - << ".length; __i" << iter << "++)"; - out << sb; - out << nl << v << ".add(__seq" << iter << "[__i" << iter << "]);"; - out << eb; - iter++; - break; - } - case Builtin::KindObject: - case Builtin::KindObjectProxy: - case Builtin::KindLocalObject: + else { - assert(false); - break; + out << nl << "final String __type" << iter << " = " << origContentS << ".ice_staticId();"; } } } - } - else - { - string typeS = getAbsolute(seq, package); - ostringstream o; - o << origContentS; - int d = depth; - while(d--) + out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __len" << iter << "; __i" << iter + << "++)"; + out << sb; + if(isObject) { - o << "[]"; + // + // Add a null value to the list as a placeholder for the element. + // + out << nl << v << ".add(null);"; + ostringstream patchParams; + patchParams << "new IceInternal.ListPatcher<" << origContentS << ">(" << v << ", " << origContentS + << ".class, __type" << iter << ", __i" << iter << ')'; + writeStreamMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false, + StringList(), patchParams.str()); } - string cont = o.str(); - if(marshal) + else { - out << nl << "if(" << v << " == null)"; - out << sb; - out << nl << stream << ".writeSize(0);"; - out << eb; - out << nl << "else"; - out << sb; - out << nl << stream << ".writeSize(" << v << ".size());"; - if(java2) - { - ostringstream oit; - oit << "__i" << iter; - iter++; - string it = oit.str(); - out << nl << "java.util.Iterator " << it << " = " << v << ".iterator();"; - out << nl << "while(" << it << ".hasNext())"; - out << sb; - out << nl << cont << " __elem = (" << cont << ")" << it << ".next();"; - writeStreamMarshalUnmarshalCode(out, package, type, "__elem", true, iter, false); - out << eb; - } - else - { - string typeS = typeToString(type, TypeModeIn, package); - out << nl << "for(" << typeS << " __elem : " << v << ')'; - out << sb; - writeStreamMarshalUnmarshalCode(out, package, type, "__elem", true, iter, false); - out << eb; - } - out << eb; // else + out << nl << cont << " __elem;"; + writeStreamMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false); } - else + if(!isObject) { - bool isObject = false; - ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); - if((b && b->kind() == Builtin::KindObject) || cl) - { - isObject = true; - } - out << nl << v << " = new " << instanceType << "();"; - out << nl << "final int __len" << iter << " = " << stream << ".readSize();"; - if(isObject) - { - if(b) - { - out << nl << "final String __type" << iter << " = Ice.ObjectImpl.ice_staticId();"; - } - else - { - assert(cl); - if(cl->isInterface()) - { - out << nl << "final String __type" << iter << " = " - << getAbsolute(cl, package, "_", "Disp") << ".ice_staticId();"; - } - else - { - out << nl << "final String __type" << iter << " = " << origContentS << ".ice_staticId();"; - } - } - } - out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __len" << iter << "; __i" << iter - << "++)"; - out << sb; - if(isObject) - { - // - // Add a null value to the list as a placeholder for the element. - // - out << nl << v << ".add(null);"; - ostringstream patchParams; - patchParams << "new IceInternal.ListPatcher<" << origContentS << ">(" << v << ", " << origContentS - << ".class, __type" << iter << ", __i" << iter << ')'; - writeStreamMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false, - StringList(), patchParams.str()); - } - else - { - out << nl << cont << " __elem;"; - writeStreamMarshalUnmarshalCode(out, package, type, "__elem", false, iter, false); - } - if(!isObject) - { - out << nl << v << ".add(__elem);"; - } - out << eb; - iter++; + out << nl << v << ".add(__elem);"; } + out << eb; + iter++; } } else @@ -3174,7 +2417,7 @@ Slice::JavaGenerator::writeStreamSequenceMarshalUnmarshalCode(Output& out, } } // - // In Java5, we cannot allocate an array of a generic type, such as + // We cannot allocate an array of a generic type, such as // // arr = new Map<String, String>[sz]; // @@ -3328,8 +2571,6 @@ Slice::JavaGenerator::getDictionaryTypes(const DictionaryPtr& dict, return customType; } - bool java2 = dict->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; - // // Collect metadata for a custom type. // @@ -3343,13 +2584,8 @@ Slice::JavaGenerator::getDictionaryTypes(const DictionaryPtr& dict, // // Get the types of the key and value. // - string keyTypeStr; - string valueTypeStr; - if(!java2) - { - keyTypeStr = typeToObjectString(dict->keyType(), TypeModeIn, package); - valueTypeStr = typeToObjectString(dict->valueType(), TypeModeIn, package); - } + string keyTypeStr = typeToObjectString(dict->keyType(), TypeModeIn, package); + string valueTypeStr = typeToObjectString(dict->valueType(), TypeModeIn, package); // // Handle a custom type. @@ -3357,46 +2593,8 @@ Slice::JavaGenerator::getDictionaryTypes(const DictionaryPtr& dict, if(customType) { assert(!ct.empty()); - - // - // Check for portable syntax. Convert {type} to type<key, value> for Java5. - // - if(ct[0] == '{') - { - string::size_type pos = ct.find('}'); - if(pos != string::npos) - { - instanceType = ct.substr(1, pos - 1); - if(!java2) - { - instanceType += "<" + keyTypeStr + ", " + valueTypeStr + ">"; - } - } - } - else - { - instanceType = ct; - } - - if(!at.empty()) - { - if(at[0] == '{') - { - string::size_type pos = at.find('}'); - if(pos != string::npos) - { - formalType = at.substr(1, pos - 1); - if(!java2) - { - formalType += "<" + keyTypeStr + ", " + valueTypeStr + ">"; - } - } - } - else - { - formalType = at; - } - } + instanceType = ct; + formalType = at; } // @@ -3404,11 +2602,7 @@ Slice::JavaGenerator::getDictionaryTypes(const DictionaryPtr& dict, // if(instanceType.empty()) { - instanceType = "java.util.HashMap"; - if(!java2) - { - instanceType += "<" + keyTypeStr + ", " + valueTypeStr + ">"; - } + instanceType = "java.util.HashMap<" + keyTypeStr + ", " + valueTypeStr + ">"; } // @@ -3420,11 +2614,7 @@ Slice::JavaGenerator::getDictionaryTypes(const DictionaryPtr& dict, // if(formalType.empty()) { - formalType = "java.util.Map"; - if(!java2) - { - formalType += "<" + keyTypeStr + ", " + valueTypeStr + ">"; - } + formalType = "java.util.Map<" + keyTypeStr + ", " + valueTypeStr + ">"; } return customType; @@ -3445,8 +2635,6 @@ Slice::JavaGenerator::getSequenceTypes(const SequencePtr& seq, return customType; } - bool java2 = seq->definitionContext()->findMetaData(_java2MetaData) == _java2MetaData; - // // Collect metadata for a custom type. // @@ -3460,11 +2648,7 @@ Slice::JavaGenerator::getSequenceTypes(const SequencePtr& seq, // // Get the inner type. // - string typeStr; - if(!java2) - { - typeStr = typeToObjectString(seq->type(), TypeModeIn, package); - } + string typeStr = typeToObjectString(seq->type(), TypeModeIn, package); // // Handle a custom type. @@ -3472,45 +2656,11 @@ Slice::JavaGenerator::getSequenceTypes(const SequencePtr& seq, if(customType) { assert(!ct.empty()); - - // - // Check for portable syntax. Convert {type} to type<key, value> for Java5. - // - if(ct[0] == '{') - { - string::size_type pos = ct.find('}'); - if(pos != string::npos) - { - instanceType = ct.substr(1, pos - 1); - if(!java2) - { - instanceType += "<" + typeStr + ">"; - } - } - } - else - { - instanceType = ct; - } + instanceType = ct; if(!at.empty()) { - if(at[0] == '{') - { - string::size_type pos = at.find('}'); - if(pos != string::npos) - { - formalType = at.substr(1, pos - 1); - if(!java2) - { - formalType += "<" + typeStr + ">"; - } - } - } - else - { - formalType = at; - } + formalType = at; } else { @@ -3521,11 +2671,7 @@ Slice::JavaGenerator::getSequenceTypes(const SequencePtr& seq, // allow polymorphic assignment between generic types if it can weaken the // compile-time type safety rules. // - formalType = "java.util.List"; - if(!java2) - { - formalType += "<" + typeStr + ">"; - } + formalType = "java.util.List<" + typeStr + ">"; } } @@ -3583,14 +2729,6 @@ Slice::JavaGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p) { ok = true; } - else if(s == _java2MetaData) - { - ok = true; - } - else if(s == _java5MetaData) - { - ok = true; - } if(!ok) { |