Got: IllegalArgumentException: Could not resolve class

Øystein Myhre Andersen o.myhre at gmail.com
Sun Apr 28 10:52:48 UTC 2024


I'm writing a compiler for Simula (the very first oo language).
Simula is block-oriented with nested blocks and each block is compiled into
a classFile.
At a certain level in the hierarchy I get an exception at the end of the
classfile building.

Exception in thread "main" java.lang.IllegalArgumentException:
             Could not resolve class
adHoc000_adHoc000_PBLK39_Floor_activateIdleLift

at
java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.resolve(ClassHierarchyImpl.java:75)
at
java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.isInterface(ClassHierarchyImpl.java:85)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeReferenceFrom(StackMapGenerator.java:1363)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeFrom(StackMapGenerator.java:1331)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.merge(StackMapGenerator.java:1193)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.checkAssignableTo(StackMapGenerator.java:1135)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator.checkJumpTarget(StackMapGenerator.java:280)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator.processExceptionHandlerTargets(StackMapGenerator.java:678)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator.processBlock(StackMapGenerator.java:667)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator.processMethod(StackMapGenerator.java:440)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator.generate(StackMapGenerator.java:317)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator.<init>(StackMapGenerator.java:243)
at
java.base/jdk.internal.classfile.impl.StackMapGenerator.of(StackMapGenerator.java:156)
at
java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.generateStackMaps(DirectCodeBuilder.java:331)
at
java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.tryGenerateStackMaps(DirectCodeBuilder.java:340)
at
java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.writeBody(DirectCodeBuilder.java:382)
at
java.base/jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute.writeTo(UnboundAttribute.java:914)
at
java.base/jdk.internal.classfile.impl.AttributeHolder.writeTo(AttributeHolder.java:56)
at
java.base/jdk.internal.classfile.impl.DirectMethodBuilder.writeTo(DirectMethodBuilder.java:156)
at
java.base/jdk.internal.classfile.impl.BufWriterImpl.writeList(BufWriterImpl.java:207)
at
java.base/jdk.internal.classfile.impl.DirectClassBuilder.build(DirectClassBuilder.java:181)
at
java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:114)
... ...

Is this a known problem?
What am I doing wrong?

I am attaching a file with an edited trace leading up to the exception.

- Øystein Myhre Andersen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/classfile-api-dev/attachments/20240428/9b5611b3/attachment.htm>
-------------- next part --------------
Begin buildClassFile: ClassDesc[adHoc000]
                      public class simulaTestPrograms.adHoc000 extends simula.runtime.RTS_Drawing
                        flags: (0x0021) ACC_PUBLIC, ACC_SUPER
                        this_class: #2  // simulaTestPrograms/adHoc000
                        super_class: #4 // simula/runtime/RTS_Drawing
                        interfaces: 0, fields: 12, methods: 4, attributes: 1
                        Constant pool:
                          ... ...

Begin buildClassFile:    ClassDesc[adHoc000_PBLK39]
                         public class simulaTestPrograms.adHoc000_PBLK39 extends simula.runtime.RTS_Simulation
                           flags: (0x0021) ACC_PUBLIC, ACC_SUPER
                           this_class: #2                          // simulaTestPrograms/adHoc000_PBLK39
                           super_class: #4                         // simula/runtime/RTS_Simulation
                           interfaces: 0, fields: 16, methods: 4, attributes: 1
                           Constant pool:
                             ... ...


Begin buildClassFile:       ClassDesc[adHoc000_adHoc000_PBLK39_Person]
                            public class simulaTestPrograms.adHoc000_adHoc000_PBLK39_Person extends simula.runtime.RTS_Process
                              flags: (0x0021) ACC_PUBLIC, ACC_SUPER
                              this_class: #2  // simulaTestPrograms/adHoc000_adHoc000_PBLK39_Person
                              super_class: #4 // simula/runtime/RTS_Process
                              interfaces: 0, fields: 7, methods: 3, attributes: 1
                              Constant pool:
                                ... ...

Begin buildClassFile:          ClassDesc[adHoc000_adHoc000_PBLK39_Person_getLiftGoingUp]
                               public final class simulaTestPrograms.adHoc000_adHoc000_PBLK39_Person_getLiftGoingUp extends simula.runtime.RTS_PROCEDURE
                                 flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
                                 this_class: #2  // simulaTestPrograms/adHoc000_adHoc000_PBLK39_Person_getLiftGoingUp
                                 super_class: #4 // simula/runtime/RTS_PROCEDURE
                                 interfaces: 0, fields: 2, methods: 3, attributes: 1
                                 Constant pool:
                                   ... ...
ClassFile written to:          adHoc000_adHoc000_PBLK39_Person_getLiftGoingUp.class  nBytes=1229

ClassFile written to:       adHoc000_adHoc000_PBLK39_Person.class  nBytes=1113

Begin buildClassFile:       ClassDesc[adHoc000_adHoc000_PBLK39_Elevator]
                            public class simulaTestPrograms.adHoc000_adHoc000_PBLK39_Elevator extends simula.runtime.RTS_Process
                              flags: (0x0021) ACC_PUBLIC, ACC_SUPER
                              this_class: #2  // simulaTestPrograms/adHoc000_adHoc000_PBLK39_Elevator
                              super_class: #4 // simula/runtime/RTS_Process
                              interfaces: 0, fields: 7, methods: 3, attributes: 1
                              Constant pool:
                                ... ...
ClassFile written to:       adHoc000_adHoc000_PBLK39_Elevator.class  nBytes=1382

Begin buildClassFile:       ClassDesc[adHoc000_adHoc000_PBLK39_Floor]
                            public class simulaTestPrograms.adHoc000_adHoc000_PBLK39_Floor extends simula.runtime.RTS_CLASS
                              flags: (0x0021) ACC_PUBLIC, ACC_SUPER
                              this_class: #2  // simulaTestPrograms/adHoc000_adHoc000_PBLK39_Floor
                              super_class: #4 // simula/runtime/RTS_CLASS
                              interfaces: 0, fields: 5, methods: 2, attributes: 1
                              Constant pool:
                                ... ...

Begin buildClassFile:          ClassDesc[adHoc000_adHoc000_PBLK39_Floor_activateIdleLift]
                               public final class simulaTestPrograms.adHoc000_adHoc000_PBLK39_Floor_activateIdleLift extends simula.runtime.RTS_PROCEDURE
                                 flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
                                 this_class: #2  // simulaTestPrograms/adHoc000_adHoc000_PBLK39_Floor_activateIdleLift
                                 super_class: #4 // simula/runtime/RTS_PROCEDURE
                                 interfaces: 0, fields: 2, methods: 2, attributes: 1
                                 Constant pool:
                                   ... ...

Begin buildClassFile:             ClassDesc[adHoc000$THUNK$1]
                                  public class simulaTestPrograms.adHoc000$THUNK$1 extends simula.runtime.RTS_NAME<simula.runtime.RTS_Process>
                                    flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
                                    this_class: #2  // simulaTestPrograms/adHoc000$THUNK$1
                                    super_class: #4 // simula/runtime/RTS_NAME
                                    interfaces: 0, fields: 0, methods: 4, attributes: 2
                                    Constant pool:
                                      ... ...
ClassFile written to:             adHoc000$THUNK$1.class
 
                        NOTE: THUNK2-5 very like THUNK1
Begin buildClassFile:             ClassDesc[adHoc000$THUNK$2]
ClassFile written to:             adHoc000$THUNK$2.class
Begin buildClassFile:             ClassDesc[adHoc000$THUNK$3]
ClassFile written to:             adHoc000$THUNK$3.class
Begin buildClassFile:             ClassDesc[adHoc000$THUNK$4]
ClassFile written to:             adHoc000$THUNK$4.class
Begin buildClassFile:             ClassDesc[adHoc000$THUNK$5]
ClassFile written to:             adHoc000$THUNK$5.class


		       NOTE: When the classFile Builder is closing: adHoc000_adHoc000_PBLK39_Floor_activateIdleLift 
                             I got an exception:

Exception in thread "main" java.lang.IllegalArgumentException:
             Could not resolve class adHoc000_adHoc000_PBLK39_Floor_activateIdleLift

	at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.resolve(ClassHierarchyImpl.java:75)
	at java.base/jdk.internal.classfile.impl.ClassHierarchyImpl.isInterface(ClassHierarchyImpl.java:85)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeReferenceFrom(StackMapGenerator.java:1363)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator$Type.mergeFrom(StackMapGenerator.java:1331)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.merge(StackMapGenerator.java:1193)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator$Frame.checkAssignableTo(StackMapGenerator.java:1135)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator.checkJumpTarget(StackMapGenerator.java:280)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator.processExceptionHandlerTargets(StackMapGenerator.java:678)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator.processBlock(StackMapGenerator.java:667)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator.processMethod(StackMapGenerator.java:440)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator.generate(StackMapGenerator.java:317)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator.<init>(StackMapGenerator.java:243)
	at java.base/jdk.internal.classfile.impl.StackMapGenerator.of(StackMapGenerator.java:156)
	at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.generateStackMaps(DirectCodeBuilder.java:331)
	at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.tryGenerateStackMaps(DirectCodeBuilder.java:340)
	at java.base/jdk.internal.classfile.impl.DirectCodeBuilder$4.writeBody(DirectCodeBuilder.java:382)
	at java.base/jdk.internal.classfile.impl.UnboundAttribute$AdHocAttribute.writeTo(UnboundAttribute.java:914)
	at java.base/jdk.internal.classfile.impl.AttributeHolder.writeTo(AttributeHolder.java:56)
	at java.base/jdk.internal.classfile.impl.DirectMethodBuilder.writeTo(DirectMethodBuilder.java:156)
	at java.base/jdk.internal.classfile.impl.BufWriterImpl.writeList(BufWriterImpl.java:207)
	at java.base/jdk.internal.classfile.impl.DirectClassBuilder.build(DirectClassBuilder.java:181)
	at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:114)
	at java.base/java.lang.classfile.ClassFile.build(ClassFile.java:332)
	at simula.compiler.syntaxClass.declaration.ProcedureDeclaration.buildClassFile(ProcedureDeclaration.java:585)
	at simula.compiler.syntaxClass.declaration.BlockDeclaration.createJavaClassFile(BlockDeclaration.java:386)
	at simula.compiler.syntaxClass.declaration.ProcedureDeclaration.buildField(ProcedureDeclaration.java:991)
	at simula.compiler.syntaxClass.declaration.ClassDeclaration.lambda$0(ClassDeclaration.java:1251)
	at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:113)
	at java.base/java.lang.classfile.ClassFile.build(ClassFile.java:332)
	at simula.compiler.syntaxClass.declaration.ClassDeclaration.buildClassFile(ClassDeclaration.java:1241)
	at simula.compiler.syntaxClass.declaration.BlockDeclaration.createJavaClassFile(BlockDeclaration.java:386)
	at simula.compiler.syntaxClass.declaration.ClassDeclaration.buildField(ClassDeclaration.java:1426)
	at simula.compiler.syntaxClass.declaration.PrefixedBlockDeclaration.lambda$0(PrefixedBlockDeclaration.java:305)
	at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:113)
	at java.base/java.lang.classfile.ClassFile.build(ClassFile.java:332)
	at simula.compiler.syntaxClass.declaration.PrefixedBlockDeclaration.buildClassFile(PrefixedBlockDeclaration.java:296)
	at simula.compiler.syntaxClass.declaration.BlockDeclaration.createJavaClassFile(BlockDeclaration.java:386)
	at simula.compiler.syntaxClass.declaration.PrefixedBlockDeclaration.buildByteCode(PrefixedBlockDeclaration.java:252)
	at simula.compiler.syntaxClass.statement.BlockStatement.buildByteCode(BlockStatement.java:130)
	at simula.compiler.syntaxClass.declaration.ClassDeclaration.buildStatementsAfterInner(ClassDeclaration.java:1523)
	at simula.compiler.syntaxClass.declaration.ClassDeclaration.build_STM_BODY(ClassDeclaration.java:1478)
	at simula.compiler.syntaxClass.declaration.BlockDeclaration.buildMethod_STM(BlockDeclaration.java:491)
	at simula.compiler.syntaxClass.declaration.PrefixedBlockDeclaration.lambda$2(PrefixedBlockDeclaration.java:324)
	at java.base/jdk.internal.classfile.impl.DirectCodeBuilder.build(DirectCodeBuilder.java:110)
	at java.base/jdk.internal.classfile.impl.DirectMethodBuilder.withCode(DirectMethodBuilder.java:125)
	at java.base/jdk.internal.classfile.impl.DirectMethodBuilder.withCode(DirectMethodBuilder.java:132)
	at java.base/java.lang.classfile.ClassBuilder.lambda$withMethodBody$2(ClassBuilder.java:249)
	at java.base/jdk.internal.classfile.impl.DirectMethodBuilder.run(DirectMethodBuilder.java:146)
	at java.base/jdk.internal.classfile.impl.DirectClassBuilder.withMethod(DirectClassBuilder.java:108)
	at java.base/java.lang.classfile.ClassBuilder.withMethodBody(ClassBuilder.java:249)
	at java.base/java.lang.classfile.ClassBuilder.withMethodBody(ClassBuilder.java:284)
	at simula.compiler.syntaxClass.declaration.PrefixedBlockDeclaration.lambda$0(PrefixedBlockDeclaration.java:323)
	at java.base/jdk.internal.classfile.impl.ClassFileImpl.build(ClassFileImpl.java:113)
	at java.base/java.lang.classfile.ClassFile.build(ClassFile.java:332)
	at simula.compiler.syntaxClass.declaration.PrefixedBlockDeclaration.buildClassFile(PrefixedBlockDeclaration.java:296)
	at simula.compiler.syntaxClass.declaration.BlockDeclaration.createJavaClassFile(BlockDeclaration.java:386)
	at simula.compiler.syntaxClass.statement.ProgramModule.createJavaClassFile(ProgramModule.java:175)
	at simula.compiler.SimulaCompiler.doCompile(SimulaCompiler.java:309)
	at make.RunClassFileTest.main(RunClassFileTest.java:358)


More information about the classfile-api-dev mailing list