Skip to content

ClassNotFoundException on lambda expression inside the method #1035

Closed

Description

@alisevych

Description

ClassNotFoundException is thrown on concrete execution of a method with lambda expression producing an anonymous class inside.

To Reproduce

  1. Run a project in IntelliJ Idea 2022.1.4 with one of the latest plugin builds from main branch
  2. Add the following code:
public class A {

    public interface Driver {
        public int getNumber(int n);
    }

    public Driver getDriver() {
        return n -> 2 * n - 1 ;
    }
}
  1. Use plugin to generate tests for getDriver() method.
  2. Open the generated test

Expected behavior

Tests are supposed to be generated without errors.

Actual behavior

There is an error test with concrete execution failed.

Visual proofs (screenshots, logs, images)

    ///region Errors report for getDriver

    public void testGetDriver_errors() {
        // Couldn't generate some tests. List of errors:
        // 
        // 1 occurrences of:
        // Default concrete execution failed

    }
    ///endregion
Concrete execution log - expand for details 16:44:01.974 ERROR| java.lang.ClassNotFoundException: A$$Lambda$15/993989412 at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at org.utbot.instrumentation.process.HandlerClassesLoader.loadClass(ChildProcess.kt:63) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at org.utbot.framework.plugin.api.util.IdUtilKt.getJClass(IdUtil.kt:100) at org.utbot.framework.concrete.UtAssembleModelConstructorsKt.findUtAssembleModelConstructor(UtAssembleModelConstructors.kt:91) at org.utbot.framework.concrete.UtModelConstructor.tryConstructUtAssembleModel(UtModelConstructor.kt:256) at org.utbot.framework.concrete.UtModelConstructor.constructFromAny(UtModelConstructor.kt:247) at org.utbot.framework.concrete.UtModelConstructor.construct(UtModelConstructor.kt:114) at org.utbot.framework.concrete.UtExecutionInstrumentation$invoke$1$1$concreteExecutionResult$1.invoke(UtExecutionInstrumentation.kt:197) at org.utbot.framework.concrete.UtExecutionInstrumentation$invoke$1$1$concreteExecutionResult$1.invoke(UtExecutionInstrumentation.kt:176) at org.utbot.framework.concrete.UtExecutionInstrumentation.withStaticFields(UtExecutionInstrumentation.kt:313) at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:176) at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:118) at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:211) at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:208) at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2$1$1.invoke(ChildProcess.kt:190) at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$1.invokeSuspend(ChildProcess.kt:174) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284) at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59) at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38) at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source) at org.utbot.instrumentation.process.ChildProcessKt.measureExecutionForTermination(ChildProcess.kt:171) at org.utbot.instrumentation.process.ChildProcessKt.access$measureExecutionForTermination(ChildProcess.kt:1) at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2$1.invokeSuspend(ChildProcess.kt:188) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:284) at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:85) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59) at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source) at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38) at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source) at org.utbot.instrumentation.process.ChildProcessKt$measureExecutionForTermination$2.invoke(ChildProcess.kt:187) at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182) at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182) at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360) at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57) at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:56) at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:148) at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56) at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:54) at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase.queue$lambda-3(SingleThreadScheduler.kt:41) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750)

Environment

Windows 10 Pro
JDK 8

Activity

  1. moved this to Todo in UTBot Javaon Sep 29, 2022
  2. alisevych commented on Nov 10, 2022

    @alisevych
    MemberAuthor

    Reproducing on the latest main

    with different Lambda usages

        Integer supplier(Supplier<Integer> supplier) {
            return supplier.get() * supplier.get();
        }
    
        Integer useSupplier(int i) {
            return supplier(() -> i * new Random().nextInt());
        }
    
        Function<Integer, Integer> function = integer -> integer * integer;
    
        Integer useFunction(int i) {
            return function.apply(i);
        }

    The following exception is thrown by Concrete Executor:

    17:41:35.315 | Error | ChildProcess              | 16:Scheduler for Client50635 |  | java.lang.ClassNotFoundException: org.utbot.examples.lambda.A$$Lambda$74/0x00000008001f3c40
    	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
    	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
    	at org.utbot.instrumentation.process.HandlerClassesLoader.loadClass(ChildProcess.kt:48)
    	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    	at org.utbot.framework.plugin.api.util.IdUtilKt.getJClass(IdUtil.kt:102)
    	at org.utbot.framework.concrete.UtAssembleModelConstructorsKt.findUtAssembleModelConstructor(UtAssembleModelConstructors.kt:91)
    	at org.utbot.framework.concrete.UtModelConstructor.tryConstructUtAssembleModel(UtModelConstructor.kt:275)
    	at org.utbot.framework.concrete.UtModelConstructor.constructFromAny(UtModelConstructor.kt:266)
    	at org.utbot.framework.concrete.UtModelConstructor.construct(UtModelConstructor.kt:117)
    	at org.utbot.framework.concrete.UtExecutionInstrumentation$invoke$1$concreteExecutionResult$1.invoke(UtExecutionInstrumentation.kt:195)
    	at org.utbot.framework.concrete.UtExecutionInstrumentation$invoke$1$concreteExecutionResult$1.invoke(UtExecutionInstrumentation.kt:173)
    	at org.utbot.framework.concrete.UtExecutionInstrumentation.withStaticFields(UtExecutionInstrumentation.kt:320)
    	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:173)
    	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:116)
    	at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:125)
    	at org.utbot.instrumentation.process.ChildProcessKt$setup$2.invoke(ChildProcess.kt:121)
    	at org.utbot.rd.CallsSynchronizer$measureExecutionForTermination$1$1.invoke(ClientProcessUtil.kt:84)
    	at org.utbot.rd.CallsSynchronizer.measureExecutionForTermination(ClientProcessUtil.kt:75)
    	at org.utbot.rd.CallsSynchronizer$measureExecutionForTermination$1.invoke(ClientProcessUtil.kt:83)
    	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
    	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
    	at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360)
    	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
    	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:56)
    	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:148)
    	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
    	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:54)
    	at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase.queue$lambda-3(SingleThreadScheduler.kt:41)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at java.base/java.lang.Thread.run(Thread.java:829)
  3. alisevych commented on Nov 11, 2022

    @alisevych
    MemberAuthor

    The issue is reproducing on the build from Sep 26 containing

    with different lambdas listed in previous comments.

  4. self-assigned this
    on Nov 17, 2022
  5. Repository owner moved this from Todo to Done in UTBot Javaon Nov 24, 2022
  6. added this to the 2022.12 Release milestone on Nov 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions