And you have the second effect which is, if the permit clause raise a warning when the class doesn't exist, it logically also means that the case clause of a switch on type also raises a warning when the class doesn't exist.
This is true, but remember such things can happen in different files. The real question is whether the naming of a type in a permits clause is a _use_ of that type. (Clearly, naming a type in a case clause is a use.) So while it would be impossible for a switch to proceed without being able to find all the types it names, the same is not necessarily true for the declaration.
I get what you're saying: "this will catch more errors, and I don't see the downside, so its good". And that may in the end be how we want to do it.
The reality is that the compiler doesn't _need_ to go and find all the named classes when we compile the declaration. And to the extent that this might make life more difficult for users that have weird build procedures, where the subtype can't be found at compile time, doing so _just for the purpose of error checking_ is a cost, which needs to be set off against the benefit.
As I said, my current inclination is to warn here, but I could imagine backing off in either direction.
