JDK-8151730 : java.lang.AssertionError
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 8u72
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux_ubuntu
  • CPU: x86_64
  • Submitted: 2016-02-23
  • Updated: 2016-05-31
  • Resolved: 2016-04-03
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
$ java -version
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Linux xxxxxx 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

EXTRA RELEVANT SYSTEM CONFIGURATION :
i7-4770K
GTX 980

A DESCRIPTION OF THE PROBLEM :
Trying to compile my project, but getting the below mentioned compiler exception.

Both in maven and intellij

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Try to compile the project

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Compiled project or error message telling me where I am wrong.
ACTUAL -
Compilation fails

ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.8.0_72). 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.AssertionError
	at com.sun.tools.javac.util.Assert.error(Assert.java:126)
	at com.sun.tools.javac.util.Assert.check(Assert.java:45)
	at com.sun.tools.javac.code.Types.functionalInterfaceBridges(Types.java:659)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$TranslationContext.<init>(LambdaToMethod.java:1695)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor$LambdaTranslationContext.<init>(LambdaToMethod.java:1778)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeLambda(LambdaToMethod.java:1278)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitLambda(LambdaToMethod.java:1263)
	at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1624)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.tree.TreeTranslator.visitVarDef(TreeTranslator.java:153)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitVarDef(LambdaToMethod.java:1444)
	at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:852)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:162)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitBlock(LambdaToMethod.java:1172)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:162)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitBlock(LambdaToMethod.java:1172)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:145)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitMethodDef(LambdaToMethod.java:1302)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
	at com.sun.tools.javac.tree.TreeTranslator.visitClassDef(TreeTranslator.java:134)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.visitClassDef(LambdaToMethod.java:1211)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.analyzeAndPreprocessClass(LambdaToMethod.java:1162)
	at com.sun.tools.javac.comp.LambdaToMethod$LambdaAnalyzerPreprocessor.access$300(LambdaToMethod.java:1119)
	at com.sun.tools.javac.comp.LambdaToMethod.visitClassDef(LambdaToMethod.java:232)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
	at com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:197)
	at com.sun.tools.javac.comp.LambdaToMethod.translate(LambdaToMethod.java:190)
	at com.sun.tools.javac.comp.LambdaToMethod.translateTopLevelClass(LambdaToMethod.java:217)
	at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1493)
	at com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1356)
	at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
	at com.sun.tools.javac.main.Main.compile(Main.java:523)
	at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
	at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
	at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:126)
	at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169)
	at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:785)
	at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
Copyright by me, do not make public without permission.


public interface Changeable {
...
}

/**
 * Describes a {@link Changeable} that can be monitored,
 * and therefore a {@link ChangedListener} be registered
 */
public interface MonitorableChangeable<T extends MonitorableChangeable> extends Changeable {

    /**
     * @param listener {@link ChangedListener} to register
     * @return itself
     */
    T registerChangedListener(ChangedListener<T> listener);

    /**
     * @param listener {@link ChangedListener} to remove from the registrations
     * @return itself
     */
    T unregisterChangedListener(ChangedListener<T> listener);



    class ChangedEvent<T extends MonitorableChangeable> implements Event {

        protected final T changeable;

        public ChangedEvent(T changeable) {
            this.changeable = changeable;
        }

        /**
         * @return The {@link MonitorableChangeable} that has changed
         */
        public T getChangeable() {
            return changeable;
        }
    }

    interface ChangedListener<T extends MonitorableChangeable> extends ExplicitEventListener<ChangedEvent<T>> {

        @Override
        default void invoke(ChangedEvent<T> event) {
            onChanged(event);
        }

        /**
         * @param event {@link ChangedEvent} with additional information
         */
        void onChanged(ChangedEvent<T> event);
    }
}

public class Reference<T> {

    private T value;
    
    public Reference (T value) {
        this.value = value;
    }
    
    /**
     * @return The current value
     */
    public T get () {
        return value;
    }
    
    /**
     * @param value New value to set
     * @return The new current value
     */
    public T set (T value) {
        this.value = value;
        return get();
    }
}




// somewhere in the code
Reference<Boolean>                    saveState     = new Reference<>(false);
MonitorableChangeable.ChangedListener listener      = (c) -> saveState.set(true);
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Reference<Boolean>                    saveState     = new Reference<>(false);
MonitorableChangeable.ChangedListener<?> listener      = (c) -> saveState.set(true);




Comments
It's a duplicate issue of JDK-8074381. Therefore, Closing this issue as closed/duplicate.
03-04-2016