public func getVersion() -> Int { #if BEFORE return 0 #else return 1 #endif } open class Base { public init() {} open func method() -> String { return "Base.method()" } open class func classMethod() -> String { return "Base.classMethod()" } open func nonOverriddenMethod() -> String { return "Base.nonOverriddenMethod()" } } open class InBetween : Base { open override func method() -> String { return "InBetween.method()" } open override class func classMethod() -> String { return "InBetween.classMethod()" } } #if BEFORE open class AddInterposingMethod : Base {} #else open class AddInterposingMethod : Base { open override func method() -> String { return "AddInterposingMethod.method()" } open override class func classMethod() -> String { return "AddInterposingMethod.classMethod()" } } #endif #if BEFORE open class RemoveInterposingMethod : Base { open override func method() -> String { return "RemoveInterposingMethod.method()" } open override class func classMethod() -> String { return "RemoveInterposingMethod.classMethod()" } } #else open class RemoveInterposingMethod : Base {} #endif #if BEFORE open class InsertSuperclass : Base {} #else open class InsertSuperclass : InBetween {} #endif