From 164a436b839b41076fbee2fa5663af39e6ff56fe Mon Sep 17 00:00:00 2001 From: Jose Date: Mon, 30 Oct 2017 12:40:46 +0100 Subject: Fix Overqualification in generated code See ICE-7856 --- cpp/src/Slice/JavaUtil.cpp | 55 ++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 21 deletions(-) (limited to 'cpp/src/Slice/JavaUtil.cpp') 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 @@ -963,6 +963,16 @@ Slice::JavaCompatGenerator::getPackage(const ContainedPtr& cont) const return scope; } +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, @@ -3407,6 +3417,16 @@ Slice::JavaGenerator::getPackage(const ContainedPtr& cont) const return scope; } +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, @@ -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 { @@ -3569,21 +3589,6 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, bool local) const { static const char* builtinTable[] = - { - "byte", - "boolean", - "short", - "int", - "long", - "float", - "double", - "String", - "com.zeroc.Ice.Value", - "com.zeroc.Ice.ObjectPrx", - "java.lang.Object", - "com.zeroc.Ice.Value" - }; - static const char* builtinLocalTable[] = { "byte", "boolean", @@ -3598,6 +3603,7 @@ Slice::JavaGenerator::typeToString(const TypePtr& type, "java.lang.Object", "com.zeroc.Ice.Value" }; + static const char* builtinOptionalTable[] = { "java.util.Optional", @@ -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); } } -- cgit v1.2.3