diff options
author | Jose <jose@zeroc.com> | 2017-10-30 12:40:46 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2017-10-30 12:40:46 +0100 |
commit | 164a436b839b41076fbee2fa5663af39e6ff56fe (patch) | |
tree | 77eb45d3b765adf57ef2ed91620a4901f147c994 /cpp/src/Slice/JavaUtil.cpp | |
parent | ICE-8457 - Ruby and Python string fixes (diff) | |
download | ice-164a436b839b41076fbee2fa5663af39e6ff56fe.tar.bz2 ice-164a436b839b41076fbee2fa5663af39e6ff56fe.tar.xz ice-164a436b839b41076fbee2fa5663af39e6ff56fe.zip |
Fix Overqualification in generated code
See ICE-7856
Diffstat (limited to 'cpp/src/Slice/JavaUtil.cpp')
-rw-r--r-- | cpp/src/Slice/JavaUtil.cpp | 55 |
1 files changed, 34 insertions, 21 deletions
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp index b5c7f669604..3cc4a2e3967 100644 --- a/cpp/src/Slice/JavaUtil.cpp +++ b/cpp/src/Slice/JavaUtil.cpp @@ -964,6 +964,16 @@ Slice::JavaCompatGenerator::getPackage(const ContainedPtr& cont) const } string +Slice::JavaCompatGenerator::getAbsolute(const std::string& type, const std::string& package) const +{ + if(type.find(".") != string::npos && type.find(package) == 0 && type.find(".", package.size() + 1) == string::npos) + { + return type.substr(package.size() + 1); + } + return type; +} + +string Slice::JavaCompatGenerator::getAbsolute(const ContainedPtr& cont, const string& package, const string& prefix, @@ -3408,6 +3418,16 @@ Slice::JavaGenerator::getPackage(const ContainedPtr& cont) const } string +Slice::JavaGenerator::getAbsolute(const std::string& type, const std::string& package) const +{ + if(type.find(".") != string::npos && type.find(package) == 0 && type.find(".", package.size() + 1) == string::npos) + { + return type.substr(package.size() + 1); + } + return type; +} + +string Slice::JavaGenerator::getAbsolute(const ContainedPtr& cont, const string& package, const string& prefix, @@ -3443,11 +3463,11 @@ Slice::JavaGenerator::getStaticId(const TypePtr& type, const string& package) co if(b && b->kind() == Builtin::KindObject) { - return "com.zeroc.Ice.Object.ice_staticId()"; + return getAbsolute("com.zeroc.Ice.Object", package) + ".ice_staticId()"; } else if(b && b->kind() == Builtin::KindValue) { - return "com.zeroc.Ice.Value.ice_staticId()"; + return getAbsolute("com.zeroc.Ice.Value", package) + ".ice_staticId()"; } else { @@ -3578,26 +3598,12 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, "float", "double", "String", - "com.zeroc.Ice.Value", - "com.zeroc.Ice.ObjectPrx", - "java.lang.Object", - "com.zeroc.Ice.Value" - }; - static const char* builtinLocalTable[] = - { - "byte", - "boolean", - "short", - "int", - "long", - "float", - "double", - "String", "com.zeroc.Ice.Object", "com.zeroc.Ice.ObjectPrx", "java.lang.Object", "com.zeroc.Ice.Value" }; + static const char* builtinOptionalTable[] = { "java.util.Optional<java.lang.Byte>", @@ -3649,7 +3655,7 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, case Builtin::KindFloat: case Builtin::KindDouble: { - return builtinOptionalTable[builtin->kind()]; + return getAbsolute(builtinOptionalTable[builtin->kind()], package); } case Builtin::KindString: case Builtin::KindObject: @@ -3663,7 +3669,14 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, } else { - return local ? builtinLocalTable[builtin->kind()] : builtinTable[builtin->kind()]; + if(!local && builtin->kind() == Builtin::KindObject) + { + return getAbsolute(builtinTable[Builtin::KindValue], package); + } + else + { + return getAbsolute(builtinTable[builtin->kind()], package); + } } } @@ -3678,7 +3691,7 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, { if(cl->isInterface() && !local) { - return "com.zeroc.Ice.Value"; + return getAbsolute("com.zeroc.Ice.Value", package); } else { @@ -3697,7 +3710,7 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, } else { - return "com.zeroc.Ice.ObjectPrx"; + return getAbsolute("com.zeroc.Ice.ObjectPrx", package); } } |