astor icon indicating copy to clipboard operation
astor copied to clipboard

Running Gradle based project

Open zhiyufan opened this issue 3 years ago • 9 comments

Hi,

I'm wondering if Astor supports repairing gradle based projects. From the Getting Started document, I didn't see any description about Gradle. However, there is a project called Mockito_22 under the example/ folder. May I ask the command to repair Mockito_22 or other third-party Gradle-based projects? The command that I have tried on Mockito_22 is attached

  1. build Mockito_22 "gradle compileJava" and "gradle compileTestJava" " java -cp $(cat /tmp/astor-classpath.txt):target/classes fr.inria.main.evolution.AstorMain -mode jgenprog -srcjavafolder /src/java/ -srctestfolder /src/test/ -binjavafolder /build/classes/main -bintestfolder /build/classes/test -location /home/zhiyu/astor/examples/mockito_22/ -dependencies examples/mockito_22/lib " and this is the exception that I get. "15:54:10.804 [main] ERROR MutationSupporter - Error compiling: The import org.mockito.cglib cannot be resolved at /home/zhiyu/astor/examples/mockito_22/src/org/mockito/internal/creation/jmock/ClassImposterizer.java:7 15:54:10.848 [main] ERROR MutationSupporter - Astor continues when model build fails. Classes created: 306 Exception in thread "main" java.lang.NullPointerException"

I'm using java 8 as the environment

Thanks in advance!

zhiyufan avatar Mar 10 '21 08:03 zhiyufan

Hi @zhiyufan

From the Getting Started document, I didn't see any description about Gradle.

Astor is not capable of automatically determine the dependencies and structure (e.g., folders with the src/binaries) of a Gradle project. However, you can execute Astor on Gradle project by passing that info using via parameters (-dependencies, -srctestfolder, etc ) as you have done.

java -cp $(cat /tmp/astor-classpath.txt):target/classes fr.inria.main.evolution.AstorMain -mode jgenprog -srcjavafolder /src/java/ -srctestfolder /src/test/ -binjavafolder /build/classes/main -bintestfolder /build/classes/test -location /home/zhiyu/astor/examples/mockito_22/ -dependencies examples/mockito_22/lib "

I think the problem is in the dependencies parameter has a relative path, but it should be an absolute path

martinezmatias avatar Mar 10 '21 08:03 martinezmatias

Thanks for the quick reply.

I have changed to absolute path, but the error is still there. "java -cp $(cat /tmp/astor-classpath.txt):target/classes fr.inria.main.evolution.AstorMain -mode jgenprog -srcjavafolder /src/ -srctestfolder /test/ -binjavafolder /build/classes/main -bintestfolder /build/classes/test -location /home/zhiyu/astor/examples/mockito_22/ -dependencies /home/zhiyu/astor/examples/mockito_22/lib"

Also, I don't understand what does this error means "spoon.compiler.ModelBuildingException: The import org.mockito.cglib cannot be resolved at /home/zhiyu/astor/examples/mockito_22/src/org/mockito/internal/creation/jmock/ClassImposterizer.java:7 at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.report(JDTBasedSpoonCompiler.java:635) at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.reportProblems(JDTBasedSpoonCompiler.java:617) at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:116) at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:97) at fr.inria.astor.core.manipulation.MutationSupporter.buildModel(MutationSupporter.java:85) at fr.inria.astor.core.manipulation.MutationSupporter.buildSpoonModel(MutationSupporter.java:253) at fr.inria.astor.core.solutionsearch.AstorCoreEngine.initModel(AstorCoreEngine.java:776) at fr.inria.main.evolution.AstorMain.createEngine(AstorMain.java:113) at fr.inria.main.evolution.AstorMain.run(AstorMain.java:173) at fr.inria.main.evolution.AstorMain.execute(AstorMain.java:233) at fr.inria.main.evolution.AstorMain.main(AstorMain.java:204)"

It seems that spoon cannot parse the program correctly?

zhiyufan avatar Mar 10 '21 08:03 zhiyufan

It seems It cannot compile the code as it's missing one library: org.mockito.cglib.

Try to put the dependencies explicitly in the parameter, separated by File.pathSeparatior (e.g., :) -dependencies /home/x/x1.jar:/home/y/y1:jar

martinezmatias avatar Mar 10 '21 08:03 martinezmatias

Hello @zhiyufan

Is the issue solved? Can I close it?

Thanks Matias

martinezmatias avatar Apr 08 '21 06:04 martinezmatias

I am not sure if this is helpful, but I was able to run jgenprog with the Mockito 22 bug from defects4j. I did not use the example within the astor repository - maybe they are identical.

defects4j checkout -p Mockito -v 22b -w bugs/Mockito_22
java -cp astor.jar fr.inria.main.evolution.AstorMain \
 -out output \
 -mutationrate 1 \
 -maxtime 240 \
 -loglevel INFO \
 -location bugs/Mockito_22 \
 -mode jgenprog \
 -srcjavafolder /src/ \
 -srctestfolder /test/ \
 -binjavafolder /target/classes/ \
 -bintestfolder  /target/test-classes/ \
 -dependencies bugs/Mockito_22/lib/repackaged/cglib-and-asm-1.0.jar:bugs/Mockito_22/lib/compile/junit-4.10.jar:bugs/Mockito_22/lib/run/objenesis-2.1.jar

I get no error message though no patches are found.

byteSamurai avatar May 01 '21 12:05 byteSamurai

I'm building a plugin for idea. It supports maven and gradle and is in active development these days. Now it can execute Astor with proper arguments and show diff of the best patch.

https://github.com/bc2021-program-repair/intellij-idea-astor-plugin/blob/fa5577978d6806c042d8f91466df2553e76cb9bf/src/main/kotlin/org/bytecamp/program_repair/astor_plugin/services/AstorProjectService.kt#L66-L102

JakkuSakura avatar Jul 30 '21 20:07 JakkuSakura

Hi @qiujiangkun

https://github.com/bc2021-program-repair/intellij-idea-astor-plugin/blob/fa5577978d6806c042d8f91466df2553e76cb9bf/src/main/kotlin/org/bytecamp/program_repair/astor_plugin/services/AstorProjectService.kt#L66-L102

That's really cool.

martinezmatias avatar Aug 02 '21 13:08 martinezmatias

@qiujiangkun PR are welcome. In case you want to integrate the plugin's code into the main project, please contact us.

martinezmatias avatar Aug 02 '21 13:08 martinezmatias

It seems that it requires a new module to auto-configure these paths. Also the code shall be rewritten in Java to be used here. I'm glad to contribute if I had time.

JakkuSakura avatar Aug 02 '21 14:08 JakkuSakura