This is an old revision of the document!



Convert source code(Java,C++,C code) to srcML(XML format)
./src2srcml <input_filename.java> -o <output_filename.xml>

Extract method calls in order as in an srcml file.
Retains the full path of the method call

Preethas-MacBook-Pro:srcML preethac$ ./srcml2src –xpath=“src:call/src:name” SplashActivity.xml“
<?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?>
<unit xmlns=“http://www.sdml.info/srcML/src”>
<unit language=“Java” filename=“SplashActivity.java” item=“1”><name><name>super</name>.<name>onCreate</name></name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“2”><name>setContentView</name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“3”><name><name>super</name>.<name>onResume</name></name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“4”><name>Handler</name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“5”><name>postDelayed</name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“6”><name><name>SplashActivity</name>.<name>this</name>.<name>finish</name>\</name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“7”><name>Intent</name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“8”><name><name>SplashActivity</name>.<name>this</name>.<name>startActivity</name></name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“9”><name>finish</name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“10”><name>Intent</name></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“11”><name><name>SplashActivity</name>.<name>this</name>.<name>startActivity</name></name></unit>
</unit>
Extract method calls in order from a specific class

Preethas-MacBook-Pro:srcML preethac$ ./srcml2src –xpath=”
src:class[src:name='<class_name>']src:call“ <filename.xml>
Storing the output in a file

<xpath-expression> > <outputfile_name>

Counting number of blocks/functions:

wifi-roaming-128-4-153-85:srcML preethac$ ./srcml2src –xpath=“count(
src:block)” SplashActivity.xml

7
wifi-roaming-128-4-153-85:srcML preethac$ ./srcml2src –xpath=“count(src:function)” SplashActivity.xml
3
Counting the number of calls with arguments

'Preethas-MacBook-Pro:srcML preethac$ ./srcml2src –xpath=”
src:blocksrc:call“ SplashActivity.xml'


<?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?>
<unit xmlns=“http://www.sdml.info/srcML/src”>
<unit language=“Java” filename=“SplashActivity.java” item=“1”><call><name><name>super</name>.<name>onCreate</name></name><argument_list>(<argument><expr><name>savedInstanceState</name></expr></argument>)</argument_list></call></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“2”><call><name>setContentView</name><argument_list>(<argument><expr><name><name>R</name>.<name>layout</name>.<name>splash</name></name></expr></argument>)</argument_list></call></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“3”><call><name><name>super</name>.<name>onResume</name></name><argument_list>()</argument_list></call></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“4”><call><name>Handler</name><argument_list>()</argument_list></call></unit>
<unit language=“Java” filename=“SplashActivity.java” item=“5”><call><name>postDelayed</name><argument_list>(<argument><expr>new <class><super><name>Runnable</name></super><argument_list>()</argument_list> <block>{ <function><type><specifier>public</specifier> <name>void</name></type> <name>run</name><parameter_list>()</parameter_list> <block>{ <comment type=“line”>
Finish the splash activity so it can't be returned to.</comment>

                  <expr_stmt><expr><call><name><name>SplashActivity</name>.<name>this</name>.<name>finish</name></name><argument_list>()</argument_list></call></expr>;</expr_stmt>
                  <comment type="line">// Create an Intent that will start the main activity.</comment>
                  <decl_stmt><decl><type><name>Intent</name></type> <name>mainIntent</name> <init>= <expr>new <call><name>Intent</name><argument_list>(<argument><expr><name><name>SplashActivity</name>.<name>this</name></name></expr></argument>, <argument><expr><name><name>CuringDepressionActivity</name>.<name>class</name></name></expr></argument>)</argument_list></call></expr></init></decl>;</decl_stmt>
                  <expr_stmt><expr><call><name><name>SplashActivity</name>.<name>this</name>.<name>startActivity</name></name><argument_list>(<argument><expr><name>mainIntent</name></expr></argument>)</argument_list></call></expr>;</expr_stmt>
              }</block></function>
          }</block></class></expr></argument>, <argument><expr><name>SPLASH_DISPLAY_LENGTH</name></expr></argument>)</argument_list></call></unit>

<unit language=“Java” filename=“SplashActivity.java” item=“6”><call><name><name>SplashActivity</name>.<name>this</name>.<name>finish</name></name><argument_list>()</argument_list></call></unit>

<unit language=“Java” filename=“SplashActivity.java” item=“7”><call><name>Intent</name><argument_list>(<argument><expr><name><name>SplashActivity</name>.<name>this</name></name></expr></argument>, <argument><expr><name><name>CuringDepressionActivity</name>.<name>class</name></name></expr></argument>)</argument_list></call></unit>

<unit language=“Java” filename=“SplashActivity.java” item=“8”><call><name><name>SplashActivity</name>.<name>this</name>.<name>startActivity</name></name><argument_list>(<argument><expr><name>mainIntent</name></expr></argument>)</argument_list></call></unit>

<unit language=“Java” filename=“SplashActivity.java” item=“9”><call><name>finish</name><argument_list>()</argument_list></call></unit>

<unit language=“Java” filename=“SplashActivity.java” item=“10”><call><name>Intent</name><argument_list>(<argument><expr><name><name>SplashActivity</name>.<name>this</name></name></expr></argument>, <argument><expr><name><name>CuringDepressionActivity</name>.<name>class</name></name></expr></argument>)</argument_list></call></unit>

<unit language=“Java” filename=“SplashActivity.java” item=“11”><call><name><name>SplashActivity</name>.<name>this</name>.<name>startActivity</name></name><argument_list>(<argument><expr><name>mainIntent</name></expr></argument>)</argument_list></call></unit>

</unit> Preethas-MacBook-Pro:srcML preethac$

Extracting method call sequences between control statements

Important: Does not work for commented out snippets of code.


Preethas-MacBook-Pro:srcML preethac$ ./srcml2src –xpath=”src:forsrc:call/src:name“ CuringDepressionActivity.xml

<?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?> <unit xmlns=“http://www.sdml.info/srcML/src”>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“1”><name><name>Log</name>.<name>v</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“2”><name><name>question</name>.<name>toString</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“3”><name>View</name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“4”><name><name>question</name>.<name>type</name>.<name>equals</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“5”><name><name>question</name>.<name>type</name>.<name>equals</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“6”><name><name>question</name>.<name>type</name>.<name>equals</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“7”><name><name>questionViews</name>.<name>add</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“8”><name><name>text</name>.<name>append</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“9”><name><name>question</name>.<name>toString</name></name></unit>

</unit>
Preethas-MacBook-Pro:srcML preethac$ ./srcml2src –xpath=”src:ifsrc:call/src:name“ CuringDepressionActivity.xml
<?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?> <unit xmlns=“http://www.sdml.info/srcML/src”>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“1”><name>moveTaskToBack</name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“2”><name>setContentView</name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“3”><name><name>question</name>.<name>type</name>.<name>equals</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“4”><name><name>question</name>.<name>type</name>.<name>equals</name></name></unit>

<unit language=“Java” filename=“CuringDepressionActivity.java” item=“5”><name><name>question</name>.<name>type</name>.<name>equals</name></name></unit>

</unit> Preethas-MacBook-Pro:srcML preethac$


Preethas-MacBook-Pro:srcML preethac$ ./srcml2src –xpath=”src:ifsrc:blocksrc:call/src:name“ CuringDepressionActivity.xml
<?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?> <unit xmlns=“http://www.sdml.info/srcML/src”> <unit language=“Java” filename=“CuringDepressionActivity.java” item=“1”><name>moveTaskToBack</name></unit> <unit language=“Java” filename=“CuringDepressionActivity.java” item=“2”><name>setContentView</name></unit> </unit>

Limitations:

srcml does not store source code line numbers, so by using xpath we are not able to know if the method calls are in consecutive lines of code or not.

Question?

How to determine the control statements?if/for etc?

resarch/nlpa/xpath_tools_on_srcml.1420610327.txt.gz · Last modified: 2015/01/07 00:58 by preethac
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0