hg: valhalla/valhalla: 8222784: [lworld] Remove stale compiler options: -XDallowGenericsOverValues and -XDdisallowValueConstructors
Remi Forax
forax at univ-mlv.fr
Sat Apr 20 12:23:42 UTC 2019
----- Mail original -----
> De: "Remi Forax" <forax at univ-mlv.fr>
> À: "Srikanth" <srikanth.adayapalam at oracle.com>
> Cc: "valhalla-dev" <valhalla-dev at openjdk.java.net>
> Envoyé: Samedi 20 Avril 2019 14:06:27
> Objet: Re: hg: valhalla/valhalla: 8222784: [lworld] Remove stale compiler options: -XDallowGenericsOverValues and
> -XDdisallowValueConstructors
> ok,
> i've found only one another one, with
>
> import java.util.stream.IntStream;
>
> public @__value__ class StreamBug {
> final int value;
>
> public StreamBug(int value) {
> this.value = value;
> }
>
> public static void main(String[] args) {
> //var bug = new StreamBug?(7);
>
> IntStream.range(0, 10).mapToObj(StreamBug::new).forEach(System.out::println);
> }
> }
>
> in mapToObj(), it should be StreamBug?::new which doesn't compile, which also
> means that new StreamBug?(7) should be valid.
>
> but i don't think it's the right solution, i think the inference as to be
> smarter and infers that when you capture a value type to a type variable, the
> nullable version has to be inferred automatically.
nope, thinking a little more about this case, it's not a good idea to change the inference, otherwise if in the future Stream is a reified generics, then the inference will return a different type (Stream<StreamBug> instead of Stream<StreamBug?>) and given that in Java generics are non-variant, it means that transforming a generics to a reified generics is not a source backward compatible change.
we have to go with StreamBug?::new and new StreamBug?(42)
Rémi
>
> ----- Mail original -----
>> De: "Srikanth" <srikanth.adayapalam at oracle.com>
>> À: "Remi Forax" <forax at univ-mlv.fr>
>> Cc: "valhalla-dev" <valhalla-dev at openjdk.java.net>
>> Envoyé: Samedi 20 Avril 2019 13:44:22
>> Objet: Re: hg: valhalla/valhalla: 8222784: [lworld] Remove stale compiler
>> options: -XDallowGenericsOverValues and
>> -XDdisallowValueConstructors
>
>> Hi Remi,
>>
>> Thanks for the test cases, I will take a look at these and see how
>> straightforward the fixes will be.
>> If necessary I can revert the withdrawal - do send me other cases as you
>> iterate over your examples
>>
>> Thanks!
>> Srikanth
>>
>> On 20/04/19 3:53 PM, Remi Forax wrote:
>>> Hum,
>>> i think you have been a little too fast on removing -XDallowGenericsOverValues,
>>> there are still a lot of constructions that doesn't support the null projection.
>>>
>>> - you can not use '?' in 'implements Comparable<Foo?>' so the following code
>>> doesn't compile
>>> public @__value__ class Foo implements Comparable<Foo?>{
>>> final int value;
>>>
>>> public Foo(int value) {
>>> this.value = value;
>>> }
>>>
>>> @Override
>>> public int compareTo(Foo? o) {
>>> return Integer.compare(value, foo.value);
>>> }
>>> }
>>>
>>> - lambda with wildcard doesn't work
>>> import java.util.function.Consumer;
>>>
>>> public @__value__ class CaptureBug {
>>> final int value;
>>>
>>> public CaptureBug(int value) {
>>> this.value = value;
>>> }
>>>
>>> private static void accept(Consumer<? super CaptureBug?> consumer) {
>>> consumer.accept(new CaptureBug(3));
>>> }
>>>
>>> public static void main(String[] args) {
>>> accept(value -> System.out.println(value));
>>> }
>>> }
>>>
>>> - .class notation is not supported
>>> public class DotClass {
>>> final int value;
>>>
>>> public DotClass(int value) {
>>> this.value = value;
>>> }
>>>
>>> private static <T> T foo(Class<T> type) {
>>> return null;
>>> }
>>>
>>> public static void main(String[] args) {
>>> foo(DotClass?.class);
>>> }
>>> }
>>>
>>>
>>> I'm sure they are other cases, i will iterate over all my examples later this
>>> week end.
>>>
>>> Rémi
>>>
>>> ----- Mail original -----
>>>> De: "Srikanth" <srikanth.adayapalam at oracle.com>
>>>> À: "valhalla-dev" <valhalla-dev at openjdk.java.net>
>>>> Envoyé: Samedi 20 Avril 2019 07:38:21
>>>> Objet: Re: hg: valhalla/valhalla: 8222784: [lworld] Remove stale compiler
>>>> options: -XDallowGenericsOverValues and
>>>> -XDdisallowValueConstructors
>>>> I have removed the support for these two internal experimental options:
>>>>
>>>> (1) -XDdisallowValueConstructors: We have settled on value instance
>>>> construction using the canonial construction syntax via new ().
>>>>
>>>> (2) -XDallowGenericsOverValues: Use the null projection type instead (V?)
>>>>
>>>> Here is a summary of current internal options: Of these the last two are
>>>> supposed to be transitory. If you are the concerned contributor, let me
>>>> know as soon as these can be withdrawn.
>>>>
>>>> -XDallowWithFieldOperator
>>>> -XDallowValueBasedClasses
>>>> -XDallowEmptyValues
>>>> -XDnonCovariantValueArrays
>>>> -XDallowValueMemberCycles
>>>>
>>>> Thanks!
>>>> Srikanth
>>>>
>>>> On 20/04/19 11:04 AM, srikanth.adayapalam at oracle.com wrote:
>>>>> Changeset: 49898238a5bb
>>>>> Author: sadayapalam
>>>>> Date: 2019-04-20 11:04 +0530
>>>>> URL: http://hg.openjdk.java.net/valhalla/valhalla/rev/49898238a5bb
>>>>>
>>>>> 8222784: [lworld] Remove stale compiler options: -XDallowGenericsOverValues and
>>>>> -XDdisallowValueConstructors
>>>>>
>>>>> ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java
>>>>> ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java
>>>>> !
>>>>> src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
>>>>> ! test/langtools/tools/javac/diags/examples.not-yet.txt
>>>>> ! test/langtools/tools/javac/valhalla/lworld-values/BoxValCastTest.java
>>>>> ! test/langtools/tools/javac/valhalla/lworld-values/BoxValCastTest2.java
>>>>> ! test/langtools/tools/javac/valhalla/lworld-values/CheckFinal.java
>>>>> ! test/langtools/tools/javac/valhalla/lworld-values/CheckFinal.out
>>>>> !
>>>>> test/langtools/tools/javac/valhalla/lworld-values/CheckValueFactoryWithReference.java
>>>>> !
>>>>> test/langtools/tools/javac/valhalla/lworld-values/CheckValueFactoryWithReference.out
>>>>> !
>>>>> test/langtools/tools/javac/valhalla/lworld-values/InferredValueParameterizationTest.java
>>>>> ! test/langtools/tools/javac/valhalla/lworld-values/ValueConstructorRef.java
>>>>> ! test/langtools/tools/javac/valhalla/lworld-values/ValueOverGenericsTest.java
>>>>> - test/langtools/tools/javac/valhalla/lworld-values/ValueOverGenericsTest2.out
> > >>> ! test/langtools/tools/javac/valhalla/lworld-values/ValuesAsRefs.java
More information about the valhalla-dev
mailing list