Skip to content

Issue with Secondary Constructor Implementation in Java Records #10190

@happyhua

Description

@happyhua
package test.client;

import java.util.function.Function;

public record Sequence(Function<Integer, Integer> stepFunction) {
    public int next(int stepSize) {
        return stepFunction.apply(stepSize);
    }
}

// This works
new Sequence(step -> 10 + step).next(20);
package test.client;

import java.util.function.Function;

public record Sequence(Function<Integer, Integer> stepFunction) {
    public Sequence(int startValue) {
        this(step -> startValue + step);
    }

    public int next(int stepSize) {
        return stepFunction.apply(stepSize);
    }
}

// This failed with error: The operator + is undefined for the argument type(s) int, Object
new Sequence(step -> 10 + step).next(20);

// This failed with a stack trace:
new Sequence(10).next(20); 
Compilation log [INFO] Compiling 1 permutation [INFO] Compiling permutation 0... [INFO] [ERROR] An internal compiler exception occurred [INFO] com.google.gwt.dev.jjs.InternalCompilerException: Unexpected error during visit. [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.translateException(JVisitor.java:111) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:130) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:122) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transform(JTransformer.java:1100) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transform(GenerateJavaScriptAST.java:2659) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformExpressionStatement(GenerateJavaScriptAST.java:711) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformExpressionStatement(GenerateJavaScriptAST.java:520) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer$JRewriterVisitor.visit(JTransformer.java:755) [INFO] at com.google.gwt.dev.jjs.ast.JExpressionStatement.traverse(JExpressionStatement.java:41) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:127) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:122) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transform(JTransformer.java:1100) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transformIntoExcludingNulls(JTransformer.java:1120) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformBlock(GenerateJavaScriptAST.java:583) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformBlock(GenerateJavaScriptAST.java:520) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer$JRewriterVisitor.visit(JTransformer.java:647) [INFO] at com.google.gwt.dev.jjs.ast.JBlock.traverse(JBlock.java:93) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:127) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:122) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transform(JTransformer.java:1100) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transform(GenerateJavaScriptAST.java:2672) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformMethodBody(GenerateJavaScriptAST.java:833) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformMethodBody(GenerateJavaScriptAST.java:520) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer$JRewriterVisitor.visit(JTransformer.java:854) [INFO] at com.google.gwt.dev.jjs.ast.JMethodBody.traverse(JMethodBody.java:81) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:127) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:122) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transform(JTransformer.java:1100) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformMethod(GenerateJavaScriptAST.java:804) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformMethod(GenerateJavaScriptAST.java:520) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transformConstructor(JTransformer.java:103) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer$JRewriterVisitor.visit(JTransformer.java:707) [INFO] at com.google.gwt.dev.jjs.ast.JConstructor.traverse(JConstructor.java:141) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:127) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:122) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transform(JTransformer.java:1100) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.emitStaticMethods(GenerateJavaScriptAST.java:1869) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformDeclaredType(GenerateJavaScriptAST.java:647) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformDeclaredType(GenerateJavaScriptAST.java:520) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transformClassType(JTransformer.java:95) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer$JRewriterVisitor.visit(JTransformer.java:695) [INFO] at com.google.gwt.dev.jjs.ast.JClassType.traverse(JClassType.java:145) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:127) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:122) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transform(JTransformer.java:1100) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformProgram(GenerateJavaScriptAST.java:1242) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformProgram(GenerateJavaScriptAST.java:520) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer$JRewriterVisitor.visit(JTransformer.java:943) [INFO] at com.google.gwt.dev.jjs.ast.JProgram.traverse(JProgram.java:1248) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:127) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:122) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer.transform(JTransformer.java:1100) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST.execImpl(GenerateJavaScriptAST.java:3171) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST.exec(GenerateJavaScriptAST.java:2944) [INFO] at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.compilePermutation(JavaToJavaScriptCompiler.java:380) [INFO] at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.compilePermutation(JavaToJavaScriptCompiler.java:274) [INFO] at com.google.gwt.dev.CompilePerms.compile(CompilePerms.java:198) [INFO] at com.google.gwt.dev.ThreadedPermutationWorkerFactory$ThreadedPermutationWorker.compile(ThreadedPermutationWorkerFactory.java:50) [INFO] at com.google.gwt.dev.PermutationWorkerFactory$Manager$WorkerThread.run(PermutationWorkerFactory.java:74) [INFO] at java.base/java.lang.Thread.run(Thread.java:1583) [INFO] Caused by: java.lang.NullPointerException: Cannot invoke "String.isEmpty()" because "actualJsName" is null [INFO] at com.google.gwt.dev.jjs.ast.JMethod.getQualifiedJsName(JMethod.java:172) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.dispatchToSuper(GenerateJavaScriptAST.java:920) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformMethodCall(GenerateJavaScriptAST.java:898) [INFO] at com.google.gwt.dev.jjs.impl.GenerateJavaScriptAST$GenerateJavaScriptTransformer.transformMethodCall(GenerateJavaScriptAST.java:520) [INFO] at com.google.gwt.dev.jjs.ast.JTransformer$JRewriterVisitor.visit(JTransformer.java:860) [INFO] at com.google.gwt.dev.jjs.ast.JMethodCall.traverse(JMethodCall.java:265) [INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:127) [INFO] ... 58 more [INFO] [ERROR] at Sequence.java(7): this.Sequence.Sequence(new Sequence$lambda$0$Type(startValue)) [INFO] com.google.gwt.dev.jjs.ast.JMethodCall [INFO] [ERROR] at Sequence.java(7): this.Sequence.Sequence(new Sequence$lambda$0$Type(startValue)) [INFO] com.google.gwt.dev.jjs.ast.JExpressionStatement [INFO] [ERROR] at Sequence.java(6): { [INFO] this.Sequence.Sequence(new Sequence$lambda$0$Type(startValue)); [INFO] } [INFO] com.google.gwt.dev.jjs.ast.JBlock [INFO] [ERROR] at Sequence.java(6): { [INFO] this.Sequence.Sequence(new Sequence$lambda$0$Type(startValue)); [INFO] } [INFO] com.google.gwt.dev.jjs.ast.JMethodBody [INFO] [ERROR] at Sequence.java(6): public Sequence(int startValue); [INFO] [INFO] com.google.gwt.dev.jjs.ast.JConstructor [INFO] [ERROR] at Sequence.java(5): test.client.Sequence (final extends Record) [INFO] com.google.gwt.dev.jjs.ast.JRecordType [INFO] [ERROR] at Unknown(0): [INFO] com.google.gwt.dev.jjs.ast.JProgram [INFO] [ERROR] Unrecoverable exception, shutting down [INFO] com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries) [INFO] at com.google.gwt.dev.javac.CompilationProblemReporter.logAndTranslateException(CompilationProblemReporter.java:106) [INFO] at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.compilePermutation(JavaToJavaScriptCompiler.java:461) [INFO] at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.compilePermutation(JavaToJavaScriptCompiler.java:274) [INFO] at com.google.gwt.dev.CompilePerms.compile(CompilePerms.java:198) [INFO] at com.google.gwt.dev.ThreadedPermutationWorkerFactory$ThreadedPermutationWorker.compile(ThreadedPermutationWorkerFactory.java:50) [INFO] at com.google.gwt.dev.PermutationWorkerFactory$Manager$WorkerThread.run(PermutationWorkerFactory.java:74) [INFO] at java.base/java.lang.Thread.run(Thread.java:1583) [INFO] [ERROR] Not all permutation were compiled , completed (0/1) [INFO] [WARN] recompile failed

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions