Project

General

Profile

FWD Source Code Analytics

Added by Atul Dalvi almost 7 years ago

How can we use FWD only for Source Code Analytics without much complicated setup ?


Replies (155)

RE: FWD Source Code Analytics - Added by Greg Shah over 6 years ago

I think creating those Skelton classes is not easy. There are many properties and methods involved into it.

You only need the ones that you reference in 4GL code.

Is there any other way to create it ?

Not at this time. Tools could be written to read the .NET class definitions and generate the skeletons. Or better yet, to dynamically resolve these references at parse time by inspecting the existing .NET classes on the local system. Either of these will take some work to implement.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Greg Shah wrote:

I think creating those Skelton classes is not easy. There are many properties and methods involved into it.

You only need the ones that you reference in 4GL code.

Is there any other way to create it ?

Not at this time. Tools could be written to read the .NET class definitions and generate the skeletons. Or better yet, to dynamically resolve these references at parse time by inspecting the existing .NET classes on the local system. Either of these will take some work to implement.

OK.

For encrypted class, parsing is possible ? I am getting below errors for the encrypted class

Exception: antlr.TokenStreamIOException: marker found on input
ClearStream state: clearCount = 0; inComment = no; inString = no; keepTildes = no
Scanning: +,󔳨իȱ߬0%ӿo
Scanning: LA='9' LA='m'
antlr.TokenStreamIOException: marker found on input

RE: FWD Source Code Analytics - Added by Greg Shah over 6 years ago

We don't have a tool for decrypting yet. I have documented in #3363 the work that would be needed to implement this along with some useful links and source code.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Greg Shah wrote:

We don't have a tool for decrypting yet. I have documented in #3363 the work that would be needed to implement this along with some useful links and source code.

OK. Is there any implementation work already going on for this issue ?

Also today I am trying to parse the program getting below errors don't know why. Pls suggest.

[Fatal Error] :1:1: Premature end of file.
okt 26, 2017 11:54:33 AM com.goldencode.p2j.convert.ConversionDriver <clinit>
SEVERE: Conversion initialization failed!
com.goldencode.ast.AstException: Error loading registry XML file: .\cfg\registry.xml
at com.goldencode.ast.XmlFilePlugin.load(XmlFilePlugin.java:599)
at com.goldencode.ast.XmlFilePlugin.<init>(XmlFilePlugin.java:215)
at com.goldencode.ast.XmlFilePlugin.<init>(XmlFilePlugin.java:232)
at com.goldencode.p2j.convert.ConversionDriver.<clinit>(ConversionDriver.java:241)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.goldencode.util.XmlHelper.parse(XmlHelper.java:575)
at com.goldencode.util.XmlHelper.parse(XmlHelper.java:438)
at com.goldencode.ast.XmlFilePlugin.load(XmlFilePlugin.java:588)
... 3 more

------------------------------------------------------------------------------
P2J Conversion Driver
------------------------------------------------------------------------------

------------------------------------------------------------------------------
SchemaLoader
------------------------------------------------------------------------------

[Fatal Error] :1:1: Premature end of file.
[Fatal Error] :1:1: Premature end of file.
Importing 'standard.df' for schema 'standard'...
ERROR:
com.goldencode.p2j.schema.SchemaException: Error importing schema data: standard
at com.goldencode.p2j.schema.SchemaLoader.importSchema(SchemaLoader.java:393)
at com.goldencode.p2j.schema.SchemaLoader.importAll(SchemaLoader.java:284)
at com.goldencode.p2j.convert.ConversionDriver.runSchemaLoader(ConversionDriver.java:459)
at com.goldencode.p2j.convert.ConversionDriver.front(ConversionDriver.java:372)
at com.goldencode.p2j.convert.ConversionDriver.main(ConversionDriver.java:2005)
Caused by: com.goldencode.ast.AstException: AstManager is not yet initialized!
at com.goldencode.ast.AstManager.get(AstManager.java:200)
at com.goldencode.ast.AnnotatedAst.brainwash(AnnotatedAst.java:750)
at com.goldencode.ast.AnnotatedAst.brainwash(AnnotatedAst.java:722)
at com.goldencode.p2j.schema.SchemaLoader.importSchema(SchemaLoader.java:380)
... 4 more

RE: FWD Source Code Analytics - Added by Hynek Cihlar over 6 years ago

Atul Dalvi wrote:

Also today I am trying to parse the program getting below errors don't know why. Pls suggest.

[Fatal Error] :1:1: Premature end of file.
okt 26, 2017 11:54:33 AM com.goldencode.p2j.convert.ConversionDriver <clinit>
SEVERE: Conversion initialization failed!
com.goldencode.ast.AstException: Error loading registry XML file: .\cfg\registry.xml

Check whether you have a missing closing tag in the document.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Hynek Cihlar wrote:

Atul Dalvi wrote:

Also today I am trying to parse the program getting below errors don't know why. Pls suggest.

[Fatal Error] :1:1: Premature end of file.
okt 26, 2017 11:54:33 AM com.goldencode.p2j.convert.ConversionDriver <clinit>
SEVERE: Conversion initialization failed!
com.goldencode.ast.AstException: Error loading registry XML file: .\cfg\registry.xml

Check whether you have a missing closing tag in the document.

Which document ?

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Hi,

.\cfg\registry.xml is empty.

Is that the cause ? Then what should it contains ?

RE: FWD Source Code Analytics - Added by Hynek Cihlar over 6 years ago

Atul Dalvi wrote:

Hi,

.\cfg\registry.xml is empty.

Is that the cause ? Then what should it contains ?

Yes, I meant registry.xml. This is file is generated during FWD conversion. No content means that a previous conversion run didn't finish successfully. Just clean the generated files (using the clean ant target in your project: ant clean) and rerun the conversion.

RE: FWD Source Code Analytics - Added by Greg Shah over 6 years ago

Is there any implementation work already going on for this issue ?

No one is currently working on it. We have no plan to work on it. This might take a week or so of work, so it is really something that would need to be done on a fee basis for Golden Code to work on it.

By the way, from my quick look at it, the use of XCODE is not very secure. The default key is well known and if you use a non-default key, that key must be present in some way for the execution or compilation of the code. In addition, it is not a cryptographically sound encryption. XCODE is just an easily reversible encoding of the text in a form that is not human readable. As soon as the key is known (or guessed) the source code will be fully available. This is especially susceptible to dictionary attacks.

Even if we implement the support for decoding, then the source code will be included in the results shown in the Code Analytics. If you start with the plain text source, you'll get the same result.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

OK.

Thanks. Now whatever I parsed till now I am able to see on the web server. Now I am trying to implement the call graphs but none of the link below is working. Is there any change in the link ?

Call Graph -

Chapter 18 Call Graph Analyzer
Chapter 19 Call Graph Visualization
Chapter 20 Call Graph Reports

https://proj.goldencode.com/projects/p2j/wiki/Code_Analytics

RE: FWD Source Code Analytics - Added by Greg Shah over 6 years ago

Our documentation on the call graph is not written yet. However, most of the Call Graph in FWD v3.0 is still accurate. This is true for the parts about how to configure the call graph and handle the hints.

That chapter's discussion about the reports is no longer correct. We've replaced all of the old reports with new ones on the Call Graph Reports tab in the Analytics web application. In addition the UI for visualizing the call graph is all new and is not yet documented. The call graph processing is very powerful.

The basic idea:

1. Create a cfg/rootlist.xml that defines the top level entry points for the application. See Specifying the Entry Point Programs

2. Run the call graph generation processing. The standard project template has ant targets for this. Use ant callgraph or ant report_server which both will run call graph generation, but both will run parsing as well. We currently don't have the equivalent of ant rpt-no-front. You can also manually run the CallGraphGenerator after the the files are all parsed.

3. Start the report server. On the Call Graph Reports tab, review the Ambiguous Call Sites report. Create hints for each ambiguous call site. See Resolving the Ambiguous Call Sites for how to do that. It will take some time to get the hints right because of the pervasiveness of dynamic invocations (e.g. RUN VALUE(some_runtime_expression)).

4. When there are no more ambiguous call sites, you are done. Otherwise go back to step 2 and re-run call graph generation, then step 3...

5. At this point you can review all the call graph reports and the visualization too. The visualization is a more experimental tool for more dynamic exploration of the graph, but the reports are really powerful and useful. For example, you will be able to see all dead files in the project. You may see some things in the list that you know are not dead. If so, then it is likely that something is missing in the root node list or in some of the ambiguous call site hints. Make the changes needed and go back to step 2. If everything looks right, then go to step 6.

6. Generally, at this point I would cut out all the dead code and run testing on the application to prove that the result is valid. In our experience, large 4GL applications that have existed for decades will have somewhere between 25% and 40% dead code.

Take a look at those links and we can answer questions here.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Hi,

Can someone explain me about what exactly the use of Call Graph Analyzer and what exactly the call sites, internal or external targets ?

Just for testing in rootlist.xml, I have added below lines and


<roots>
<node folder="./" pattern="*.ast" recursive="true"/>
</roots

and trying to run command

java -classpath ./p2j/build/lib/p2j.jar com.goldencode.p2j.uast.CallGraphGenerator

In log it is showing details as below -

Started loading the code-set.
Using *.[fhi] for include-file specifications.

------- few .I file names -------

Done adding include-files.
null
Elapsed job time: 00:02:55.413
com.goldencode.p2j.pattern.TreeWalkException: ERROR! Active Rule:
-----------------------
RULE REPORT
-----------------------
Rule Type : INIT
Source AST: [ block ] BLOCK/ @0:0 {5527622909953}
Copy AST : [ block ] BLOCK/ @0:0 {5527622909953}
Condition : procfile = cgw.findUniqueNode("os-filename", cgw.prepareFilename(this.filename))
Loop : false
--- END RULE REPORT ---

at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1068)
at com.goldencode.p2j.uast.CallGraphGenerator.generateGraphs(CallGraphGenerator.java:178)
at com.goldencode.p2j.uast.CallGraphGenerator.main(CallGraphGenerator.java:400)
Caused by: java.lang.NullPointerException
at com.goldencode.p2j.uast.CallGraphHelper.prepareFilename(CallGraphHelper.java:258)
at com.goldencode.p2j.uast.CallGraphWorker$CallGraph.prepareFilename(CallGraphWorker.java:584)
at com.goldencode.expr.CE7.execute(Unknown Source)
at com.goldencode.expr.Expression.execute(Expression.java:373)
at com.goldencode.p2j.pattern.Rule.apply(Rule.java:491)
at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:583)
at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98)
at com.goldencode.p2j.pattern.PatternEngine.apply(PatternEngine.java:1610)
at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1529)
at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1477)
at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1032)
... 2 more

Looking at this, not able to understand whether the command has completed successfully or not.

Pls suggest.

RE: FWD Source Code Analytics - Added by Greg Shah over 6 years ago

Can someone explain me about what exactly the use of Call Graph Analyzer

The Call Graph Analyzer models the calling linkages between programs and callable parts of programs such the FWD tools will know what code is reachable in your application and the exact calling paths that can be followed.

This is NOT required to use the Code Reports, the Schema Reports, Search or Custom Reports. It is however, highly valuable because it can answer many interesting questions, including a big one: "What code in my project is actually live code and what code is dead?"

In our experience, 25% to 40% of 4GL projects is dead code. By dropping this out, you can greatly ease future development tasks and simplify your project.

and what exactly the call sites, internal or external targets ?

A call site is a location in your code that calls other code. A RUN statement is a call site. A call to a user-defined function is a call site.

An internal target is some code in your project that is called by other code in your project. For example, an internal or external procedure is an internal target.

An external target is some program/API that is outside of the 4GL which is invoked by your 4GL code. A shell program or a WIN32 API call are examples of external targets.

Looking at this, not able to understand whether the command has completed successfully or not.

I did not complete successfully. Any stack trace like that is a problem.

Pls suggest.

We will get back to you with more information or questions.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Thanks for the clarification.

I don't have any stack trace for the CallGraphGenerator command other than the below log errors.

done adding include-files.
null
Elapsed job time: 00:02:53.377
com.goldencode.p2j.pattern.TreeWalkException: ERROR! Active Rule:
-----------------------
RULE REPORT
-----------------------
Rule Type : INIT
Source AST: [ block ] BLOCK/ @0:0 {5527622909953}
Copy AST : [ block ] BLOCK/ @0:0 {5527622909953}
Condition : procfile = cgw.findUniqueNode("os-filename", cgw.prepareFilename(this.filename))
Loop : false
--- END RULE REPORT ---

at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1068)
at com.goldencode.p2j.uast.CallGraphGenerator.generateGraphs(CallGraphGenerator.java:178)
at com.goldencode.p2j.uast.CallGraphGenerator.main(CallGraphGenerator.java:400)
Caused by: java.lang.NullPointerException
at com.goldencode.p2j.uast.CallGraphHelper.prepareFilename(CallGraphHelper.java:258)
at com.goldencode.p2j.uast.CallGraphWorker$CallGraph.prepareFilename(CallGraphWorker.java:584)
at com.goldencode.expr.CE7.execute(Unknown Source)
at com.goldencode.expr.Expression.execute(Expression.java:373)
at com.goldencode.p2j.pattern.Rule.apply(Rule.java:491)
at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:583)
at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98)
at com.goldencode.p2j.pattern.PatternEngine.apply(PatternEngine.java:1610)
at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1529)
at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1477)
at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1032)
... 2 more

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

any update on this ?

RE: FWD Source Code Analytics - Added by Constantin Asofiei over 6 years ago

Atul, I assume you are running this in a project which was had previously parsed only one file? The error I think it might be because FWD is picking up some ASTs which are not in cfg/registry.xml. So, if you want to test for a single program, make sure to do a ant clean, parse that single program, and after that run the callgraph command.

What I suggest is to use our ANT tasks: create a file-cvt-list.txt with the program names which you want to parse, and just run ant report_server. The content of file-cvt-list.txt is something like:

./abl/path/to/program1.p
./abl/path/to/program2.p

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Constantin Asofiei wrote:

Atul, I assume you are running this in a project which was had previously parsed only one file? The error I think it might be because FWD is picking up some ASTs which are not in cfg/registry.xml. So, if you want to test for a single program, make sure to do a ant clean, parse that single program, and after that run the callgraph command.

What I suggest is to use our ANT tasks: create a file-cvt-list.txt with the program names which you want to parse, and just run ant report_server. The content of file-cvt-list.txt is something like:
[...]

OK.

Who is creating entries in the cfg/registry.xml file ?

RE: FWD Source Code Analytics - Added by Constantin Asofiei over 6 years ago

Atul Dalvi wrote:

Who is creating entries in the cfg/registry.xml file ?

Each time you convert a file (no matter how you do it, via the ANT task or explicitly via ConversionDriver), the FWD conversion process will overwrite the registry.xml file with the list of programs ran in that conversion. So, at any time, registry.xml will have only the files from the last ran conversion.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Constantin Asofiei wrote:

Atul Dalvi wrote:

Who is creating entries in the cfg/registry.xml file ?

Each time you convert a file (no matter how you do it, via the ANT task or explicitly via ConversionDriver), the FWD conversion process will overwrite the registry.xml file with the list of programs ran in that conversion. So, at any time, registry.xml will have only the files from the last ran conversion.

OK.

What do you mean by "The error I think it might be because FWD is picking up some ASTs which are not in cfg/registry.xml" ?

I have converted and calculated all the files without any error.

And for testing in rootlist.xml, I have added below lines that should pick all the AST programs correct ?

<roots>
<node folder="./" pattern="*.ast" recursive="true"/>
</roots

RE: FWD Source Code Analytics - Added by Constantin Asofiei over 6 years ago

Atul Dalvi wrote:

What do you mean by "The error I think it might be because FWD is picking up some ASTs which are not in cfg/registry.xml" ?

Something else I forgot to add: if you don't clean up the project before running a conversion, the .ast files from a previous conversion will remain intact (will not be deleted). The CallGraphGenerator will pick up ALL .ast files in the project, no matter when they were converted. Thus, as registry.xml will contain only the latest programs which were converted, if you haven't cleaned the project before the last conversion, the CallGraphGenerator will pick up ASTs which are NOT in registry.xml - and you'll get the NPE error.

And for testing in rootlist.xml, I have added below lines that should pick all the AST programs correct ?

<roots>
<node folder="./" pattern="*.ast" recursive="true"/>
</roots

Yes, this will pick up all AST files in the project and use the as root entry points in the application. But, the list here should include only actual root entry points into your application: client launch programs, schema trigger programs, application server programs, etc. If you include the entire code-set, the reports which determine dead code will be inconclusive.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Constantin Asofiei wrote:

Atul Dalvi wrote:

What do you mean by "The error I think it might be because FWD is picking up some ASTs which are not in cfg/registry.xml" ?

Something else I forgot to add: if you don't clean up the project before running a conversion, the .ast files from a previous conversion will remain intact (will not be deleted). The CallGraphGenerator will pick up ALL .ast files in the project, no matter when they were converted. Thus, as registry.xml will contain only the latest programs which were converted, if you haven't cleaned the project before the last conversion, the CallGraphGenerator will pick up ASTs which are NOT in registry.xml - and you'll get the NPE error.

And for testing in rootlist.xml, I have added below lines that should pick all the AST programs correct ?

<roots>
<node folder="./" pattern="*.ast" recursive="true"/>
</roots

Yes, this will pick up all AST files in the project and use the as root entry points in the application. But, the list here should include only actual root entry points into your application: client launch programs, schema trigger programs, application server programs, etc. If you include the entire code-set, the reports which determine dead code will be inconclusive.

Can you be more specific on the actual root entry points into your application ?

RE: FWD Source Code Analytics - Added by Constantin Asofiei over 6 years ago

Atul Dalvi wrote:

Can you be more specific on the actual root entry points into your application ?

By "root entry points" I mean cases like this:
  1. you have a ABL client which is started via i.e. pro -p path/to/some/program.p. path/to/some/program.p is a 'root entry point' as this is the program used by the users to enter the application.
  2. you have a schema table-trigger for table foo which executes program create-foo.p - again, this is a 'root entry point', as it is executed by the Database.
  3. you have a program exposed by the application server (AppServer in OpenEdge), called myappserver.p - this is a 'root entry point', too, as this is executed by remote 4GL clients.

Basically, any program which is executed by some code which is not part of your business logic is a 'root entry point'. The programs executed internally, by your business logic (via RUN, PUBLISH, etc), will be picked up by the CallGraphGenerator automatically and links will be created between the caller and the callee.

So, rootlist.xml should contain only these kind of programs - check your .pf files, client startup scripts, DB schema, etc, to gather the list of these 'root entry points'.

RE: FWD Source Code Analytics - Added by Constantin Asofiei over 6 years ago

And something else: if you are in 'testing mode', where you convert only a small set of programs (1-10 programs), and your testing is not meant to properly analyse the entire application's code set, it would be OK to include all the ASTs. But otherwise, when you want to properly analyse the full application code, please use the rootlist.xml as described above.

RE: FWD Source Code Analytics - Added by Atul Dalvi over 6 years ago

Constantin Asofiei wrote:

Atul Dalvi wrote:

Can you be more specific on the actual root entry points into your application ?

By "root entry points" I mean cases like this:
  1. you have a ABL client which is started via i.e. pro -p path/to/some/program.p. path/to/some/program.p is a 'root entry point' as this is the program used by the users to enter the application.
  2. you have a schema table-trigger for table foo which executes program create-foo.p - again, this is a 'root entry point', as it is executed by the Database.
  3. you have a program exposed by the application server (AppServer in OpenEdge), called myappserver.p - this is a 'root entry point', too, as this is executed by remote 4GL clients.

Basically, any program which is executed by some code which is not part of your business logic is a 'root entry point'. The programs executed internally, by your business logic (via RUN, PUBLISH, etc), will be picked up by the CallGraphGenerator automatically and links will be created between the caller and the callee.

So, rootlist.xml should contain only these kind of programs - check your .pf files, client startup scripts, DB schema, etc, to gather the list of these 'root entry points'.

Thanks.

Now as you suggested, I have cleared all ast files using ANT clean, converted and calculated limited set of programs without any error.
And for testing in rootlist.xml, I have added below lines that should pick all the converted AST programs even though couple of them are not the entry points.

<roots>
<node folder="./" pattern="*.ast" recursive="true"/>
</roots

But while performing call graph command why it is logging below errors, not able to get it. It should not generate these errors as we have all the corrected ast files now.

Command - C:\FWDTalk\Project>java -classpath ./p2j/build/lib/p2j.jar com.goldencode.p2j.uast.CallGraphGenerator > log.txt 2>&1

Errors -

Adding external node KW_TAB_TRG for target trg_del/wl_printer.p
WARNING: renaming key [label] to [annotation_label]
nov 08, 2017 3:43:08 PM org.janusgraph.graphdb.transaction.StandardJanusGraphTx$6 execute
WARNING: Query requires iterating over all vertices [(reverse-filename PREFIX p.yreuq_lw/erc_grt/)]. For better performance, use indexes
Adding external node KW_TAB_TRG for target trg_cre/wl_query.p
nov 08, 2017 3:43:08 PM org.janusgraph.graphdb.transaction.StandardJanusGraphTx$6 execute
WARNING: Query requires iterating over all vertices [(reverse-filename PREFIX p.yreuq_lw/led_grt/)]. For better performance, use indexes
Adding external node KW_TAB_TRG for target trg_del/wl_query.p
Elapsed job time: 00:00:19.672
Done loading the schema-triggers.
Optional rule set [customer_specific_call_graph] not found.
.\abl\DCORP\Talk\OeFrameWork\service\ApplicationVersion.p
Elapsed job time: 00:00:00.297
com.goldencode.p2j.pattern.TreeWalkException: ERROR! Active Rule:
-----------------------
RULE REPORT
-----------------------
Rule Type : WALK
Source AST: [ : ] BLOCK/PROCEDURE/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/EXPRESSION/OBJECT_INVOCATION/ @41:50 {107374182482}
Copy AST : [ : ] BLOCK/PROCEDURE/BLOCK/STATEMENT/KW_ASSIGN/ASSIGN/EXPRESSION/OBJECT_INVOCATION/ @41:50 {107374182482}
Condition : className = className.toLowerCase()
Loop : false
--- END RULE REPORT ---

at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1068)
at com.goldencode.p2j.uast.CallGraphGenerator.walkTargets(CallGraphGenerator.java:235)
at com.goldencode.p2j.uast.CallGraphGenerator.generateGraphs(CallGraphGenerator.java:190)
at com.goldencode.p2j.uast.CallGraphGenerator.main(CallGraphGenerator.java:400)
Caused by: java.lang.NullPointerException
at com.goldencode.expr.CE341.execute(Unknown Source)
at com.goldencode.expr.Expression.execute(Expression.java:373)
at com.goldencode.p2j.pattern.Rule.apply(Rule.java:491)
at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:738)
at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:707)
at com.goldencode.p2j.pattern.Rule.apply(Rule.java:530)
at com.goldencode.p2j.pattern.Rule.executeActions(Rule.java:738)
at com.goldencode.p2j.pattern.Rule.coreProcessing(Rule.java:707)
at com.goldencode.p2j.pattern.Rule.apply(Rule.java:530)
at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:583)
at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98)
at com.goldencode.p2j.pattern.RuleContainer.apply(RuleContainer.java:583)
at com.goldencode.p2j.pattern.RuleSet.apply(RuleSet.java:98)
at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:261)
at com.goldencode.p2j.pattern.AstWalker.walk(AstWalker.java:209)
at com.goldencode.p2j.pattern.PatternEngine.apply(PatternEngine.java:1631)
at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1529)
at com.goldencode.p2j.pattern.PatternEngine.processAst(PatternEngine.java:1477)
at com.goldencode.p2j.pattern.PatternEngine.run(PatternEngine.java:1032)
... 3 more

RE: FWD Source Code Analytics - Added by Constantin Asofiei over 6 years ago

Atul Dalvi wrote:

But while performing call graph command why it is logging below errors, not able to get it. It should not generate these errors as we have all the corrected ast files now.

Atul, at least you are getting a different error, so we are making progress :).

Can you post how the code at .\abl\DCORP\Talk\OeFrameWork\service\ApplicationVersion.p.cache line 41 looks like (use the .cache file)? It might be a bug in FWD, as this suggests the qualified annotation (with the name of the class in use by that code) is missing.

(126-150/155)