Bug in developer preview

Vicente-Arturo Romero-Zaldivar vicente.romero at oracle.com
Thu Sep 19 03:05:24 PDT 2013


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