[DiSL-user] Problems using custom Transformers

Alessio Gambi gambi at st.cs.uni-saarland.de
Thu Apr 20 14:11:34 CEST 2017


The version is 2.1, I downloaded that from the ow2 web site [1]

Date: 2014-11-25
File: disl-2.1-src.zip

I will try the version under trunk to see if the problem is still there. 

If it does I might file a bug report and a patch if this fits with DiSL dev process.

Best

— Alessio


[1] http://forge.ow2.org/project/showfiles.php?group_id=418 

Alessio Gambi, Ph.D.
gambi at st.cs.uni-saarland.de



> On 20 Apr 2017, at 14:06, Lubomír Bulej <lubomir.bulej at d3s.mff.cuni.cz> wrote:
> 
> Dear Alessio,
> 
> please let me know what version of DiSL are you using, and if it's not trunk,
> could you try if the problem is still there in the trunk version? I'll try to
> find time to look at the code this evening...
> 
> 
> Best regards,
> Lubomir
> 
> 
> On 20/04/17 12:13, Alessio Gambi wrote:
>> Dear DiSL-ers
>> 
>> I am having troubles in making my custom implementation working with DiSL.
>> 
>> So far I got to the following point:
>> 
>> - Implemented Transformer interface
>> 
>> - Triggered custom transformation
>> 
>> - NPE (see [1]) when the transformation is applied.
>> 
>> 
>> 
>> I rooted the problem in the following code (DiSL.java) ~ line 440/450 (I
>> introduced few printouts): 
>> 
>> public synchronized byte[] instrument(final byte[] originalBytes) throws
>> DiSLException {
>> 
>> ...
>> 
>> //
>> // Instrument the class. If the class is modified neither by DiSL,
>> // nor by any of the transformers, bail out early and return NULL
>> // to indicate that the class has not been modified in any way.
>> //
>> final InstrumentedClass instResult = instrumentClass(inputCN);
>> if(instResult== null&& transformedBytes== originalBytes) {
>> returnnull;
>> }
>> 
>> 
>> In my case, I get the following condition: "instResult == null” BUT
>> "transformedBytes *!=* originalBytes”,
>> so the if statement does not trigger and later in the same method there’s an
>> access to instResult which raise the NullPointerException
>> 
>> final ClassNode instCN = instResult.classNode;
>> 
>> 
>> I am digging a bit into the code to understand why instResult is null, but in
>> the meanwhile you might suggest something as well.
>> 
>> Best
>> 
>> — Alessio
>> 
>> [1] Console output:
>> 
>>     [exec] de.unisaarland.instrumentation: Info: Transforming mainP/Main
>>     [exec] de.unisaarland.instrumentation: DependencyTrackingClassVisitor.visit()
>>     [exec] de.unisaarland.instrumentation: Adding interface
>> DependencyInstrumented to mainP/Main null java/lang/Object
>>     [exec] dislserver: error instrumenting mainP/Main:
>> java.lang.NullPointerException
>>     [exec] at ch.usi.dag.disl.DiSL.instrument(DiSL.java:450)
>>     [exec] at
>> ch.usi.dag.dislserver.RequestProcessor.process(RequestProcessor.java:71)
>>     [exec] at
>> ch.usi.dag.dislserver.DiSLServer$ConnectionHandler.run(DiSLServer.java:99)
>>     [exec] at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>>     [exec] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>>     [exec] at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>>     [exec] at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>>     [exec] at java.lang.Thread.run(Thread.java:745)
>>     [exec] 
>>     [exec] DiSL-agent error: instrumentation server error:
>>     [exec] error instrumenting mainP/Main: java.lang.NullPointerException
>>     [exec] at ch.usi.dag.disl.DiSL.instrument(DiSL.java:450)
>>     [exec] at
>> ch.usi.dag.dislserver.RequestProcessor.process(RequestProcessor.java:71)
>>     [exec] at
>> ch.usi.dag.dislserver.DiSLServer$ConnectionHandler.run(DiSLServer.java:99)
>>     [exec] at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>>     [exec] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>>     [exec] at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>>     [exec] at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>>     [exec] at java.lang.Thread.run(Thread.java:745)
>>     [exec] 
>>     [exec] dislreserver: fatal error: java.io.EOFException
>>     [exec] at java.io.DataInputStream.readByte(DataInputStream.java:267)
>>     [exec] at
>> ch.usi.dag.dislreserver.DiSLREServer.processRequests(DiSLREServer.java:105)
>>     [exec] at ch.usi.dag.dislreserver.DiSLREServer.run(DiSLREServer.java:76)
>>     [exec] at ch.usi.dag.dislreserver.DiSLREServer.main(DiSLREServer.java:58)
>>     [exec] 
>>     [exec] de.unisaarland.instrumentation: Info: Done with mainP/Main
>>     [exec] disl: Original class transformed
>>     [exec] disl: InstrumentedClass  : null
>> Alessio Gambi, Ph.D.
>> gambi at st.cs.uni-saarland.de <mailto:gambi at st.cs.uni-saarland.de>





More information about the Disl-user mailing list