Commit Graph

9 Commits

Author SHA1 Message Date
Denis Zharkov
406e31f54a Change default rules for declaration-site wildcards
Mostly this commit is about skipping wildcards that are redundant in some sense.
The motivation is that they looks `long` in Java code.

There are basically two important parts: return types and value parameters.

1. For return types default behaviour is skipping all declaration-site wildcards.
The intuition behind this rule is simple: return types are basically used in subtype position
(as an argument for another call), and here everything works well in case of 'out'-variance.
For example we have 'Out<Out<T>>>' as subtype both for 'Out<Out<T>>>' and 'Out<? extends Out<? extends T>>>',
so values of such type is more flexible in contrast to `Out<? extends Out<? extends T>>>` that could be used only
for the second case.

But we have choosen to treat `in`-variance in a different way: argument itself
should be rendered without wildcard while nested arguments are rendered by the rules
described further (see second part).

For example: 'In<Out<OpenClass>>' will have generic signature 'In<Out<? extends OpenClass>>'.
If we omit all wildcards here, then value of type 'In<Out<OpenClass>>'
will be impossible to use as argument for function expecting 'In<? super Out<? extends Derived>>'
where Derived <: OpenClass (you can check it manually :]).

And this exception should not be very inconvinient because in-variance is rather rare.

2. For value parameters we decided to skip wildcards if it doesn't make obtained signature weaker
in a sense of set of acceptable arguments.

More precisely:
    a. We write wildcard for 'Out<T>' iff T ``can have subtypes ignoring nullability''
    b. We write wildcard for 'In<T>' iff T is not equal to it's class upper bound (ignoring nullability again)

Definition of ``can have subtypes ignoring nullability'' is straightforward and you can see it in commit.

 #KT-9801 Fixed
 #KT-9890 Fixed
2015-12-01 08:20:59 +03:00
Pavel V. Talanov
5f108905d1 Remove testing Kotlin signature from WriteSignatureTest 2013-08-26 15:59:34 +04:00
Andrey Breslav
889ea107f6 Reflect Kotlin's declaration-site variance in Java signatures 2012-11-24 15:59:15 +04:00
Svetlana Isakova
47769ed638 tests changed after KT-2745
Write exact Kotlin type (if it's mapped) in signature while generating bytecode
 #KT-2745 fixed
2012-09-19 13:06:25 +04:00
Svetlana Isakova
7c828b9ff7 diagnostic tests changes after collections mapping 2012-09-05 18:55:16 +04:00
Stepan Koltsov
c9e3891a5e fix test 2012-03-02 21:25:18 +04:00
Stepan Koltsov
c15bd2f75d KT-1490 serialization of constructor parameters 2012-03-02 20:43:47 +04:00
Alex Tkachman
8b622f97f4 getting rid of TypeInfo 2012-02-21 14:54:00 +02:00
Stepan Koltsov
f21ad2f536 fix couple of bugs in constructor signature serialization/parsing 2012-01-23 22:49:46 +04:00