Bug in developer preview

Marcos Antonio marcos_antonio_ps at hotmail.com
Thu Sep 19 18:24:17 PDT 2013


I just created this simple nonsense class to reproduce the problem and the compiler crashed
again with the same error. Just place this file in any Project with the last build (b106) and
see if the compiler crashes as well.

import static java.util.Comparator.comparing;
import static java.util.Comparator.nullsFirst;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Abc<T>
{
    private void abc()
    {
        List<T> list = new ArrayList<>();
        list.sort(nullsFirst(comparing(e -> getValue(e))));
    }

    @SuppressWarnings("unchecked")
    private <V extends Comparable<? super V>> V getValue(T object)
    {
        try
        {
            Method m = object.getClass().getMethod("getName");
            return (V) m.invoke(object);
        }
        catch (NoSuchMethodException | SecurityException |
               IllegalAccessException | IllegalArgumentException |
               InvocationTargetException ex)
        {
            throw new RuntimeException(ex);
        }
    }
}

Marcos

----------------------------------------
> Date: Thu, 19 Sep 2013 11:05:24 +0100
> From: vicente.romero at oracle.com
> To: marcos_antonio_ps at hotmail.com
> CC: lambda-dev at openjdk.java.net
> Subject: Re: Bug in developer preview
>
> Hi Marcos Antonio,
>
> This seems to be an important bug, but the report is incomplete. Could
> you please send me the whole class.
>
> Also as a side comment, I think that using English identifiers makes the
> code easier to understand by a wider audience, even if you don't speak
> Portuguese ;)
>
> Thanks,
> Vicente
>
> On 19/09/13 02:11, Marcos Antonio wrote:
>> I'm using JDK 8 Developer Preview (b106)
>>
>> First I had this code in a class of mine:
>>
>> private void ordenar()
>> {
>> final Comparator<T> ORDEM_CRESCENTE =
>> new Comparator<T>()
>> {
>> @Override
>> public int compare(T entidade1, T entidade2)
>> {
>> Object valor1 = obterValorPropriedadeOrdem(entidade1);
>> Object valor2 = obterValorPropriedadeOrdem(entidade2);
>> return comparar(valor1, valor2);
>> }
>>
>> private Object obterValorPropriedadeOrdem(T entidade)
>> {
>> EstruturaEntidade estruturaEntidade =
>> _estruturasEntidadesAtuais.get(entidade);
>> PropriedadeObjeto propriedadeObjeto =
>> estruturaEntidade.propriedadesObjetos.get(
>> _nomePropriedadeOrdem);
>> return propriedadeObjeto.getValor();
>> }
>> @SuppressWarnings("unchecked")
>> private <V> int comparar(V valor1, V valor2)
>> {
>> if (valor1 != null && valor2 != null)
>> {
>> return ((Comparable<V>) valor1).compareTo(valor2);
>> }
>> else
>> {
>> return valor1 == valor2 ? 0 : (valor1 == null ? 1 : -1);
>> }
>> }
>> };
>>
>> _entidades.sort(ORDEM_CRESCENTE);
>> // ...
>> }
>>
>> Then I tried to convert it to use lambda expression:
>>
>> private void ordenar()
>> {
>> final Comparator<T> ORDEM_CRESCENTE =
>> nullsFirst(comparing(e -> obterValorPropriedadeOrdem(e)));
>>
>> _entidades.sort(ORDEM_CRESCENTE);
>> // ...
>> }
>>
>> @SuppressWarnings("unchecked")
>> private <V extends Comparable<? super V>> V obterValorPropriedadeOrdem(T entidade)
>> {
>> EstruturaEntidade estruturaEntidade =
>> _estruturasEntidadesAtuais.get(entidade);
>> PropriedadeObjeto propriedadeObjeto =
>> estruturaEntidade.propriedadesObjetos.get(
>> _nomePropriedadeOrdem);
>> return (V) propriedadeObjeto.getValor();
>> }
>>
>> Now I get this error when I compile:
>>
>> [javac] An exception has occurred in the compiler (1.8.0-ea). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you.
>> [javac] java.lang.NullPointerException
>> [javac] at com.sun.tools.javac.code.Types$DescriptorCache.get(Types.java:392)
>> [javac] at com.sun.tools.javac.code.Types.findDescriptorSymbol(Types.java:563)
>> [javac] at com.sun.tools.javac.code.Types.isFunctionalInterface(Types.java:579)
>> [javac] at com.sun.tools.javac.code.Types.functionalInterfaceBridges(Types.java:662)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$TranslationContext.<init>(LambdaToMethod.java:1669)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$LambdaTranslationContext.<init>(LambdaToMethod.java:1722)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.makeLambdaContext(LambdaToMethod.java:1618)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitLambda(LambdaToMethod.java:1213)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1619)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.visitApply(TreeTranslator.java:275)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1459)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.visitApply(TreeTranslator.java:275)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1459)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.visitVarDef(TreeTranslator.java:153)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitVarDef(LambdaToMethod.java:1381)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:846)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:162)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitBlock(LambdaToMethod.java:1123)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:903)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:145)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitMethodDef(LambdaToMethod.java:1233)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:772)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitClassDef(LambdaToMethod.java:1160)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:687)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeAndPreprocessClass(LambdaToMethod.java:1113)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.access$300(LambdaToMethod.java:1083)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:218)
>> [javac] at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:687)
>> [javac] at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:183)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:176)
>> [javac] at com.sun.tools.javac.comp.LambdaToMethod.translateTopLevelClass(LambdaToMethod.java:203)
>> [javac] at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1465)
>> [javac] at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1350)
>> [javac] at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:900)
>> [javac] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:859)
>> [javac] at com.sun.tools.javac.main.Main.compile(Main.java:523)
>> [javac] at com.sun.tools.javac.main.Main.compile(Main.java:381)
>> [javac] at com.sun.tools.javac.main.Main.compile(Main.java:370)
>> [javac] at com.sun.tools.javac.main.Main.compile(Main.java:361)
>> [javac] at com.sun.tools.javac.Main.compile(Main.java:64)
>> [javac] at com.sun.tools.javac.Main.main(Main.java:50)
>>
>> Sorry if I can't give you a simpler example, but I think you can come up with something simple and similar.
>>
>> Marcos
>>
> 		 	   		  


More information about the lambda-dev mailing list