Oops, AIOOBE ?

forax at univ-mlv.fr forax at univ-mlv.fr
Sat Oct 6 09:16:13 UTC 2018


I will just point out that using a Consumer instead of a Function actually works,

  public class Visitor {
    private final HashMap<Class<?>, Consumer<Object>> map = new HashMap<>();
 
    public <T> void register(Class<T> type, Consumer<? super T> consumer) -> map.put(type, o -> consumer.accept(type.cast(o)));
  
    public void call(Object o) = map.get(o.getClass())::accept;
  }

so i think it still worth digging to find the source of this AIIOOBE.

Rémi

----- Mail original -----
> De: "Maurizio Cimadamore" <maurizio.cimadamore at oracle.com>
> À: "Remi Forax" <forax at univ-mlv.fr>, "Vicente Romero" <vicente.romero at oracle.com>, "amber-dev"
> <amber-dev at openjdk.java.net>
> Envoyé: Samedi 6 Octobre 2018 01:00:40
> Objet: Re: Oops, AIOOBE ?

> I see this has also been discussed in the spec-experts mailing list:
> 
> http://mail.openjdk.java.net/pipermail/amber-spec-experts/2018-October/000798.html
> 
> In his response to Kevin, Brian seems to end up in the same place I did
> - this code should be rejected.
> 
> Maurizio
> 
> 
> On 05/10/18 23:55, Maurizio Cimadamore wrote:
>> Should 'o' even be in scope in the receiver expression of the method
>> reference body?
>>
>> Maurizio
>>
>>
>> On 05/10/18 23:46, Remi Forax wrote:
>>> Hi Vicente,
>>> another bug :)
>>>
>>> import java.util.HashMap;
>>> import java.util.function.Function;
>>>
>>> public class Visitor<R> {
>>>    private final HashMap<Class<?>, Function<Object, R>> map = new
>>> HashMap<>();
>>>       public void call(Object o) = map.get(o.getClass())::apply;
>>> }
>>>
>>>
>>> An exception has occurred in the compiler (12-amber). Please file a
>>> bug against the Java compiler via the Java bug reporting page
>>> (http://bugreport.java.com) after checking the Bug Database
>>> (http://bugs.java.com) for duplicates. Include your program and the
>>> following diagnostic in your report. Thank you.
>>> java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for
>>> length 16
>>>     at
>>> jdk.compiler/com.sun.tools.javac.jvm.Code$State.pop(Code.java:1764)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Code.emitop0(Code.java:862)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.jvm.Items$Item.coerce(Items.java:256)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.jvm.Items$Item.coerce(Items.java:269)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:814)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.jvm.Gen.visitTypeCast(Gen.java:2007)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:2098)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:812)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.visitExec(Gen.java:1590)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1524)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:590)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:625)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:611)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStats(Gen.java:662)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.jvm.Gen.visitBlock(Gen.java:1026)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1033)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:590)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genStat(Gen.java:625)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genMethod(Gen.java:896)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.jvm.Gen.visitMethodDef(Gen.java:859)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:879)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genDef(Gen.java:590)
>>>     at jdk.compiler/com.sun.tools.javac.jvm.Gen.genClass(Gen.java:2196)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.main.JavaCompiler.genCode(JavaCompiler.java:756)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1635)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.main.JavaCompiler.generate(JavaCompiler.java:1603)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973)
>>>     at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:311)
>>>     at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:170)
>>>     at
>>> jdk.compiler/com.sun.tools.javac.main.JavacToolProvider.run(JavacToolProvider.java:46)
>>>     at java.base/java.util.spi.ToolProvider.run(ToolProvider.java:137)
>>>
>>>
>>> regards,
>>> Rémi


More information about the amber-dev mailing list