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