LuciferYang edited a comment on pull request #32536:
URL: https://github.com/apache/spark/pull/32536#issuecomment-842979946


   @maropu for the above problem, can we add a case similar to the following to 
compare the result of `reflection api and using ClassBodyEvaluator.getBytecodes 
api` directly ?
   
   ```
   val codeBody = s"""
           public java.lang.Object generate(Object[] references) {
             return new TestMetricCode(references);
           }
   
           class TestMetricCode {
   
             public TestMetricCode(Object[] references) {
             }
   
             public long sumOfSquares(long left, long right) {
               return left * left + right * right;
             }
           }
         """
      // createClassBodyEvaluator is a new method to extract from 
CodeGenerator#doCompile
       val evaluator = CodeGenerator.createClassBodyEvaluator() 
   
       evaluator.cook("generated.java", codeBody)
   
       import scala.collection.JavaConverters._
       val bytecodesFromApi = evaluator.getBytecodes.asScala
       val bytecodesFromReflectionApi = {
         val scField = classOf[ClassBodyEvaluator].getDeclaredField("sc")
         scField.setAccessible(true)
         val compiler = scField.get(evaluator).asInstanceOf[SimpleCompiler]
         val loader = compiler.getClassLoader.asInstanceOf[ByteArrayClassLoader]
         val classesField = loader.getClass.getDeclaredField("classes")
         classesField.setAccessible(true)
         classesField.get(loader).asInstanceOf[java.util.Map[String, 
Array[Byte]]].asScala
       }
   
       // If bytecodes is the same, the metrics state should not be changed
       assert(bytecodesFromApi == bytecodesFromReflectionApi)
   ```
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to