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 class OtherBase {
  public init() {}
  open func method() -> String {
    return "OtherBase.method()"
  }
  open class func classMethod() -> String {
    return "OtherBase.classMethod()"
  }
}

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

#if BEFORE
open class ChangeRoot : Base {}
#else
open class ChangeRoot : OtherBase {}
#endif
