[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