Well, for generated (synthetic) methods Java offer magical
$ symbol, which hides generated (in the byte-code) methods from the normal Java-code.
I’d say Kotlin could generate methods
component$2, which it still could use for destruction (those names are not supposed to be used directly). No problems here.
If user decides to provide such method (e.g. like it is done for
Map.Entry), she still could write
component1 manually - and it will be visible from Java (unless it’s an extension method, of course)