jsweet icon indicating copy to clipboard operation
jsweet copied to clipboard

java.lang.ClassCastException - fixable by hand?

Open aolney opened this issue 3 years ago • 3 comments

Throwing on this:

    public Pair<Integer, Integer> span() {
        return new Pair<Integer, Integer>(new Integer(position), new Integer(position + 1));
    }

where position is a private member.

Pair is this:

public class Pair<T1, T2> implements java.io.Serializable {
    private static final long serialVersionUID = 0;
    public T1 left;
    public T2 right;
    public Pair(T1 left, T2 right) {
        this.left = left;
        this.right = right;
    }
    ...

It seems all the TS has generated; even span(), where the error occurred, has generated partially:

        public span(): se.lth.cs.nlp.nlputils.core.Pair<number, number> {
            return <any>(new se.lth.cs.nlp.nlputils.core.Pair<number, number>();
        }

It seems I can repair by removing <any>(, and adding back in position, though I don't know TS well at all :smile_cat:

Questions:

  • Can I get a successful compile w/o this error?
  • If not, can I have confidence that everything else is fine, since there are no other errors?

The internal transpiler error in full:

2021-01-21 19:32:57.057 ERROR output:55 - internal transpiler error at /z/aolney/repos/jsweet-quickstart/src/main/java/pennconverter-master/src/se/lth/cs/nlp/nlputils/pstree/TerminalNode.java(65)
dumping transpiler's strack trace:
   [JCNewClass] new Pair<Integer, Integer>(new... (/z/aolney/repos/jsweet-quickstart/src/main/java/pennconverter-master/src/se/lth/cs/nlp/nlputils/pstree/TerminalNode.java(65,16))
   [JCReturn] return new Pair<Integer, Integ... (/z/aolney/repos/jsweet-quickstart/src/main/java/pennconverter-master/src/se/lth/cs/nlp/nlputils/pstree/TerminalNode.java(65,9))
   [JCBlock] {... (/z/aolney/repos/jsweet-quickstart/src/main/java/pennconverter-master/src/se/lth/cs/nlp/nlputils/pstree/TerminalNode.java(64,42))
   [JCMethodDecl] public Pair<Integer, Integer> ... (/z/aolney/repos/jsweet-quickstart/src/main/java/pennconverter-master/src/se/lth/cs/nlp/nlputils/pstree/TerminalNode.java(64,5))
   [JCClassDecl] public abstract class Terminal... (/z/aolney/repos/jsweet-quickstart/src/main/java/pennconverter-master/src/se/lth/cs/nlp/nlputils/pstree/TerminalNode.java(36,1))
   [JCCompilationUnit] package se.lth.cs.nlp.nlputils... (/z/aolney/repos/jsweet-quickstart/src/main/java/pennconverter-master/src/se/lth/cs/nlp/nlputils/pstree/TerminalNode.java(29,1))
java.lang.ClassCastException: class com.sun.tools.javac.code.Symbol$TypeVariableSymbol cannot be cast to class javax.lang.model.element.TypeElement (com.sun.tools.javac.code.Symbol$TypeVariableSymbol is in module jdk.compiler of loader 'app'; javax.lang.model.element.TypeElement is in module java.compiler of loader 'platform')
        at org.jsweet.transpiler.Java2TypeScriptTranslator.substituteAssignedExpression(Java2TypeScriptTranslator.java:6592)
        at org.jsweet.transpiler.util.AbstractTreePrinter.printArgList(AbstractTreePrinter.java:389)
        at org.jsweet.transpiler.util.AbstractTreePrinter.printArgList(AbstractTreePrinter.java:455)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.printConstructorArgList(Java2TypeScriptTranslator.java:5135)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.printDefaultNewClass(Java2TypeScriptTranslator.java:5077)
        at org.jsweet.transpiler.extension.Java2TypeScriptAdapter.substituteNewClass(Java2TypeScriptAdapter.java:1723)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitNewClass(Java2TypeScriptTranslator.java:5008)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitNewClass(Java2TypeScriptTranslator.java:150)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1711)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
        at org.jsweet.transpiler.util.AbstractTreeScanner.scan(AbstractTreeScanner.java:279)
        at org.jsweet.transpiler.util.AbstractTreePrinter.print(AbstractTreePrinter.java:155)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.substituteAssignedExpression(Java2TypeScriptTranslator.java:6608)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitReturn(Java2TypeScriptTranslator.java:5472)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitReturn(Java2TypeScriptTranslator.java:150)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1554)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
        at org.jsweet.transpiler.util.AbstractTreeScanner.scan(AbstractTreeScanner.java:279)
        at org.jsweet.transpiler.util.AbstractTreePrinter.print(AbstractTreePrinter.java:155)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.printBlockStatement(Java2TypeScriptTranslator.java:3307)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.printBlockStatements(Java2TypeScriptTranslator.java:3300)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitMethod(Java2TypeScriptTranslator.java:2700)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitMethod(Java2TypeScriptTranslator.java:150)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
        at org.jsweet.transpiler.util.AbstractTreeScanner.scan(AbstractTreeScanner.java:279)
        at org.jsweet.transpiler.util.AbstractTreePrinter.print(AbstractTreePrinter.java:155)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitClass(Java2TypeScriptTranslator.java:1875)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitClass(Java2TypeScriptTranslator.java:150)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
        at org.jsweet.transpiler.util.AbstractTreeScanner.scan(AbstractTreeScanner.java:279)
        at org.jsweet.transpiler.util.AbstractTreePrinter.print(AbstractTreePrinter.java:155)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitCompilationUnit(Java2TypeScriptTranslator.java:923)
        at org.jsweet.transpiler.Java2TypeScriptTranslator.visitCompilationUnit(Java2TypeScriptTranslator.java:150)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
        at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
        at org.jsweet.transpiler.util.AbstractTreeScanner.scan(AbstractTreeScanner.java:279)
        at org.jsweet.transpiler.util.AbstractTreePrinter.print(AbstractTreePrinter.java:155)
        at org.jsweet.transpiler.JSweetTranspiler.generateTsFiles(JSweetTranspiler.java:947)
        at org.jsweet.transpiler.JSweetTranspiler.java2ts(JSweetTranspiler.java:898)
        at org.jsweet.transpiler.JSweetTranspiler.transpile(JSweetTranspiler.java:821)
        at org.jsweet.transpiler.JSweetTranspiler.transpile(JSweetTranspiler.java:779)
        at org.jsweet.AbstractJSweetMojo.transpile(AbstractJSweetMojo.java:674)
        at org.jsweet.JSweetMojo.execute(JSweetMojo.java:43)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:193)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)

aolney avatar Jan 22 '21 02:01 aolney

Solved this particular problem by rewriting this:

    public Pair<Integer, Integer> span() {
        return new Pair<Integer, Integer>(new Integer(position), new Integer(position + 1));
    }

as this:

  public Pair<Integer, Integer> span() {
        Integer first = new Integer(position);
        Integer second = new Integer(position + 1 );
        Pair< Integer, Integer> pair = new Pair<Integer, Integer>(first,second);
        return pair;
    }

aolney avatar Jan 23 '21 01:01 aolney

Thanks, I will keep it open because it is a bug (quite surprising I have to say).

renaudpawlak avatar Jan 23 '21 06:01 renaudpawlak

Great, let me know if I can provide anything else to help you reproduce it.

aolney avatar Jan 23 '21 15:01 aolney