Skip to content

Commit

Permalink
Remove cxxDescription from Swift LocalException (#3501)
Browse files Browse the repository at this point in the history
  • Loading branch information
bernardnormier authored Feb 5, 2025
1 parent 4a56c5c commit 9864221
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 117 deletions.
20 changes: 2 additions & 18 deletions swift/src/Ice/LocalException.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,19 @@ public class LocalException: Exception, CustomStringConvertible {
public let file: String
/// The line number where this exception was thrown.
public let line: Int32
/// The C++ exception description, when this exception is a C++ exception converted to Swift.
private let cxxDescription: String?

/// A textual representation of this Ice exception.
public var description: String { cxxDescription ?? "\(file):\(line) \(ice_id()) \(message)" }
public var description: String { "\(file):\(line) \(ice_id()) \(message)" }

/// Creates a LocalException.
/// - Parameters:
/// - message: The exception message.
/// - file: The file where the exception was thrown.
/// - line: The line where the exception was thrown.
public init(_ message: String, file: String = #fileID, line: Int32 = #line) {
public required init(_ message: String, file: String = #fileID, line: Int32 = #line) {
self.message = message
self.file = file
self.line = line
self.cxxDescription = nil
}

/// Gets the type ID of the class, for example "::Ice::CommunicatorDestroyedException".
Expand All @@ -32,17 +29,4 @@ public class LocalException: Exception, CustomStringConvertible {
public func ice_id() -> String {
"::" + String(reflecting: type(of: self)).replacingOccurrences(of: ".", with: "::")
}

/// Creates a LocalException from an Ice C++ local exception.
/// - Parameters:
/// - message: The exception message.
/// - cxxDescription: The C++ exception description.
/// - file: The file where the exception was thrown.
/// - line: The line where the exception was thrown.
internal required init(message: String, cxxDescription: String, file: String, line: Int32) {
self.message = message
self.file = file
self.line = line
self.cxxDescription = cxxDescription
}
}
36 changes: 12 additions & 24 deletions swift/src/Ice/LocalExceptionFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,30 @@ import IceImpl
class LocalExceptionFactory: ICELocalExceptionFactory {
static func requestFailedException(
_ typeId: String, name: String, category: String, facet: String, operation: String,
message: String, cxxDescription: String, file: String, line: Int32
message: String, file: String, line: Int32
) -> Error {
let className = typeId.dropFirst(2).replacingOccurrences(of: "::", with: ".")
if let requestFailedExceptionType = NSClassFromString(className) as? RequestFailedException.Type {
return requestFailedExceptionType.init(
id: Identity(name: name, category: category), facet: facet, operation: operation,
message: message,
cxxDescription: cxxDescription, file: file, line: line)
message: message, file: file, line: line)
} else {
fatalError("unexpected RequestFailedException type: \(typeId)")
}
}

static func registeredException(
_ typeId: String, kindOfObject: String, objectId: String, message: String,
cxxDescription: String, file: String,
line: Int32
_ typeId: String, kindOfObject: String, objectId: String, message: String, file: String, line: Int32
) -> Error {
switch typeId {
case "::Ice::AlreadyRegisteredException":
AlreadyRegisteredException(
kindOfObject: kindOfObject, id: objectId, message: message, cxxDescription: cxxDescription,
kindOfObject: kindOfObject, id: objectId, message: message,
file: file,
line: line)
case "::Ice::NotRegisteredException":
NotRegisteredException(
kindOfObject: kindOfObject, id: objectId, message: message, cxxDescription: cxxDescription,
kindOfObject: kindOfObject, id: objectId, message: message,
file: file,
line: line)
default:
Expand All @@ -40,43 +37,34 @@ class LocalExceptionFactory: ICELocalExceptionFactory {
}

static func connectionClosedException(
_ typeId: String, closedByApplication: Bool, message: String, cxxDescription: String,
file: String, line: Int32
_ typeId: String, closedByApplication: Bool, message: String, file: String, line: Int32
) -> Error {
switch typeId {
case "::Ice::ConnectionAbortedException":
ConnectionAbortedException(
closedByApplication: closedByApplication, message: message, cxxDescription: cxxDescription,
closedByApplication: closedByApplication, message: message,
file: file,
line: line)
case "::Ice::ConnectionClosedException":
ConnectionClosedException(
closedByApplication: closedByApplication, message: message, cxxDescription: cxxDescription,
closedByApplication: closedByApplication, message: message,
file: file,
line: line)
default:
fatalError("unexpected ConnectionClosedException type: \(typeId)")
}
}

static func localException(
_ typeId: String, message: String, cxxDescription: String, file: String, line: Int32
)
-> Error
{
static func localException(_ typeId: String, message: String, file: String, line: Int32) -> Error {
let className = typeId.dropFirst(2).replacingOccurrences(of: "::", with: ".")
return if let localExceptionType = NSClassFromString(className) as? LocalException.Type {
localExceptionType.init(
message: message, cxxDescription: cxxDescription, file: file, line: line)
localExceptionType.init(message, file: file, line: line)
} else {
CxxLocalException(
typeId: typeId, message: message, cxxDescription: cxxDescription, file: file, line: line)
CxxLocalException(typeId: typeId, message: message, file: file, line: line)
}
}

static func cxxException(_ typeName: String, message: String) -> Error {
CxxLocalException(
typeId: typeName, message: message, cxxDescription: "\(typeName) \(message)", file: "???",
line: 0)
CxxLocalException(typeId: typeName, message: message, file: "???", line: 0)
}
}
74 changes: 24 additions & 50 deletions swift/src/Ice/LocalExceptions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,46 +22,33 @@ public class RequestFailedException: LocalException {
/// - facet: The facet of the target Ice object.
/// - operation: The operation name carried by the request.
/// - message: The exception message.
/// - cxxDescription: The C++ exception description.
/// - file: The file where the exception was thrown.
/// - line: The line where the exception was thrown.
internal required init(
id: Identity, facet: String, operation: String, message: String, cxxDescription: String,
file: String,
line: Int32
id: Identity, facet: String, operation: String, message: String, file: String, line: Int32
) {
self.id = id
self.facet = facet
self.operation = operation
super.init(message: message, cxxDescription: cxxDescription, file: file, line: line)
super.init(message, file: file, line: line)
}

internal init(
typeName: String, id: Identity, facet: String, operation: String, file: String, line: Int32
) {
internal init(typeName: String, id: Identity, facet: String, operation: String, file: String, line: Int32) {
self.id = id
self.facet = facet
self.operation = operation
super.init(
Self.makeMessage(typeName: typeName, id: id, facet: facet, operation: operation), file: file,
line: line)
Self.makeMessage(typeName: typeName, id: id, facet: facet, operation: operation), file: file, line: line)
}

override internal init(_ message: String, file: String, line: Int32) {
internal required init(_ message: String, file: String, line: Int32) {
self.id = Identity()
self.facet = ""
self.operation = ""
super.init(message, file: file, line: line)
}

// Don't use.
internal required init(message: String, cxxDescription: String, file: String, line: Int32) {
fatalError("RequestFailedException must be initialized with an id, facet, and operation")
}

internal class func makeMessage(typeName: String, id: Identity, facet: String, operation: String)
-> String
{
internal class func makeMessage(typeName: String, id: Identity, facet: String, operation: String) -> String {
"dispatch failed with \(typeName) { id = '\(identityToString(id: id))', facet = '\(facet)', operation = '\(operation)' }"
}
}
Expand All @@ -80,8 +67,7 @@ public final class ObjectNotExistException: RequestFailedException {
id: Identity, facet: String, operation: String, file: String = #fileID, line: Int32 = #line
) {
self.init(
typeName: "ObjectNotExistException", id: id, facet: facet, operation: operation, file: file,
line: line)
typeName: "ObjectNotExistException", id: id, facet: facet, operation: operation, file: file, line: line)
}

/// Creates an ObjectNotExistException. The request details (id, facet, operation) will be filled-in by the Ice
Expand All @@ -108,8 +94,7 @@ public final class FacetNotExistException: RequestFailedException {
id: Identity, facet: String, operation: String, file: String = #fileID, line: Int32 = #line
) {
self.init(
typeName: "FacetNotExistException", id: id, facet: facet, operation: operation, file: file,
line: line)
typeName: "FacetNotExistException", id: id, facet: facet, operation: operation, file: file, line: line)
}

/// Creates a FacetNotExistException. The request details (id, facet, operation) will be filled-in by the Ice
Expand Down Expand Up @@ -137,8 +122,7 @@ public final class OperationNotExistException: RequestFailedException {
id: Identity, facet: String, operation: String, file: String = #fileID, line: Int32 = #line
) {
self.init(
typeName: "OperationNotExistException", id: id, facet: facet, operation: operation,
file: file, line: line)
typeName: "OperationNotExistException", id: id, facet: facet, operation: operation, file: file, line: line)
}

/// Creates an OperationNotExistException. The request details (id, facet, operation) will be filled-in by the Ice
Expand Down Expand Up @@ -266,17 +250,14 @@ public final class AlreadyRegisteredException: LocalException {
}

// Initializer for C++ exceptions
internal init(
kindOfObject: String, id: String, message: String, cxxDescription: String, file: String,
line: Int32
) {
internal init(kindOfObject: String, id: String, message: String, file: String, line: Int32) {
self.kindOfObject = kindOfObject
self.id = id
super.init(message: message, cxxDescription: cxxDescription, file: file, line: line)
super.init(message, file: file, line: line)
}

// Don't use.
internal required init(message: String, cxxDescription: String, file: String, line: Int32) {
internal required init(_ message: String, file: String, line: Int32) {
fatalError("AlreadyRegisteredException must be initialized with a kindOfObject and id")
}
}
Expand All @@ -293,15 +274,13 @@ public final class ConnectionAbortedException: LocalException {
/// runtime.
public let closedByApplication: Bool

internal init(
closedByApplication: Bool, message: String, cxxDescription: String, file: String, line: Int32
) {
internal init(closedByApplication: Bool, message: String, file: String, line: Int32) {
self.closedByApplication = closedByApplication
super.init(message: message, cxxDescription: cxxDescription, file: file, line: line)
super.init(message, file: file, line: line)
}

// Don't use.
internal required init(message: String, cxxDescription: String, file: String, line: Int32) {
internal required init(_ message: String, file: String, line: Int32) {
fatalError("ConnectionAbortedException must be initialized with a closedByApplication flag")
}
}
Expand All @@ -312,15 +291,13 @@ public final class ConnectionClosedException: LocalException {
/// runtime.
public let closedByApplication: Bool

internal init(
closedByApplication: Bool, message: String, cxxDescription: String, file: String, line: Int32
) {
internal init(closedByApplication: Bool, message: String, file: String, line: Int32) {
self.closedByApplication = closedByApplication
super.init(message: message, cxxDescription: cxxDescription, file: file, line: line)
super.init(message, file: file, line: line)
}

// Don't use.
internal required init(message: String, cxxDescription: String, file: String, line: Int32) {
internal required init(_ message: String, file: String, line: Int32) {
fatalError("ConnectionClosedException must be initialized with a closedByApplication flag")
}
}
Expand All @@ -331,13 +308,13 @@ internal final class CxxLocalException: LocalException {

override public func ice_id() -> String { typeId }

internal init(typeId: String, message: String, cxxDescription: String, file: String, line: Int32) {
internal init(typeId: String, message: String, file: String, line: Int32) {
self.typeId = typeId
super.init(message: message, cxxDescription: cxxDescription, file: file, line: line)
super.init(message, file: file, line: line)
}

// Don't use.
internal required init(message: String, cxxDescription: String, file: String, line: Int32) {
internal required init(_ message: String, file: String, line: Int32) {
fatalError("CxxLocalException must be initialized with a typeId")
}
}
Expand Down Expand Up @@ -392,17 +369,14 @@ public final class NotRegisteredException: LocalException {
}

// Initializer for C++ exceptions
internal init(
kindOfObject: String, id: String, message: String, cxxDescription: String, file: String,
line: Int32
) {
internal init(kindOfObject: String, id: String, message: String, file: String, line: Int32) {
self.kindOfObject = kindOfObject
self.id = id
super.init(message: message, cxxDescription: cxxDescription, file: file, line: line)
super.init(message, file: file, line: line)
}

// Don't use.
internal required init(message: String, cxxDescription: String, file: String, line: Int32) {
internal required init(_ message: String, file: String, line: Int32) {
fatalError("NotRegisteredException must be initialized with a kindOfObject and id")
}
}
Expand Down
17 changes: 0 additions & 17 deletions swift/src/IceImpl/Convert.mm
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,8 @@
#import "include/LocalExceptionFactory.h"

#include <cstdlib>
#include <sstream>
#include <typeinfo>

namespace
{
inline std::string cxxDescription(const Ice::LocalException& e)
{
std::ostringstream os;
os << e;
return os.str();
}
}

NSError*
convertException(std::exception_ptr exc)
{
Expand All @@ -33,7 +22,6 @@
kindOfObject:toNSString(e.kindOfObject())
objectId:toNSString(e.id())
message:toNSString(e.what())
cxxDescription:toNSString(cxxDescription(e))
file:toNSString(e.ice_file())
line:e.ice_line()];
}
Expand All @@ -43,7 +31,6 @@
kindOfObject:toNSString(e.kindOfObject())
objectId:toNSString(e.id())
message:toNSString(e.what())
cxxDescription:toNSString(cxxDescription(e))
file:toNSString(e.ice_file())
line:e.ice_line()];
}
Expand All @@ -52,7 +39,6 @@
return [factory connectionClosedException:toNSString(e.ice_id())
closedByApplication:e.closedByApplication()
message:toNSString(e.what())
cxxDescription:toNSString(cxxDescription(e))
file:toNSString(e.ice_file())
line:e.ice_line()];
}
Expand All @@ -61,7 +47,6 @@
return [factory connectionClosedException:toNSString(e.ice_id())
closedByApplication:e.closedByApplication()
message:toNSString(e.what())
cxxDescription:toNSString(cxxDescription(e))
file:toNSString(e.ice_file())
line:e.ice_line()];
}
Expand All @@ -73,15 +58,13 @@
facet:toNSString(e.facet())
operation:toNSString(e.operation())
message:toNSString(e.what())
cxxDescription:toNSString(cxxDescription(e))
file:toNSString(e.ice_file())
line:e.ice_line()];
}
catch (const Ice::LocalException& e)
{
return [factory localException:toNSString(e.ice_id())
message:toNSString(e.what())
cxxDescription:toNSString(cxxDescription(e))
file:toNSString(e.ice_file())
line:e.ice_line()];
}
Expand Down
Loading

0 comments on commit 9864221

Please sign in to comment.