Isn't this basically java's checked exceptions? Also you should check out error types coming soon in kotlin, very similar idea but uses union return types instead of throwing (more akin to Result in Rust or multireturn values in go minus the problems)
At this point I'm convinced that modern languages should not have exceptions. Exceptions are just fancy goto. A language should depend on returning an error tagged union and have some syntactic sugar for early return of an error type. Rust and Haskell get this right.