### §2.3.5 Consequences of lifting problems

The rules for lifting and role binding allow (after issuing a warning) two problematic situations:

1. A potential binding ambiguity makes selection of the approprate role type impossible (§2.3.4.(a))
2. A role which might be relevant for lifting is abstract (§2.5.(b))

Whenever lifting fails for one of these reasons an `org.objectteams.LiftingFailedException` (§6.2.(d)) is thrown. Given that this is a checked exception and depending on the location requiring lifting this has the following consequences:

#### (a) Problematic declared lifting

A method with declared lifting (§2.3.2) may have to declare `org.objectteams.LiftingFailedException`.

#### (b) Problematic callout binding

The role method of a callout binding with result lifting (§3.3.(c)) may have to declare `org.objectteams.LiftingFailedException`.

#### (c) Problematic callin binding

A callin binding (§4) may silently fail due to a `org.objectteams.LiftingFailedException`. This exception will actually remain hidden because the callin binding is not explicitly invoked from any source code but implicitly by the runtime dispatch mechanism. To signal this situation the compiler raises an error against such callin binding.

However, the compiler should allow to configure this error and understand the warning token `"hidden-lifting-problem"` for suppressing this problem (§4.1.(b)). If the problem is ignored/suppressed and if at runtime the lifting problem occurs, triggering of the callin binding will silently fail, i.e., the program will continue in this situation as if the binding hadn't existed in the first place.

#### (d) Incompatible redefinition of a role hierarchy

Consider a team `T1` with a method `m` with declared lifting regarding role `R`, where no lifting problems are detected. Consider next a sub-team `T2` which modifies the hierarchy of role `R` such that lifting to `T2.R` is problematic due to a binding ambiguity. In this case clients invoking `T1.m()` could face the situation at runtime that an instance of `T2` is used that unexpectedly fails to lift to its role `R`. Here, the compiler signals a specific error against `T2` alerting of the incompatible change.