RPG - 3.5


Compatibility: v2 v3 Cloud
What's new? Release Notes
ID: com.castsoftware.rpg

Description

This extension provides support for applications written using RPG languages and/or CL languages.

Supported languages

  • RPG III (also known as GAP 3)
  • RPG IV Fixed Format with traditional operation code
  • RPG IV Fixed Format with alternate Calc spec and Extended Factor 2
  • RPG IV Free Format
  • RPG IV Full Free
  • CL

Function Point, Quality and Sizing support

  • Function Points (transactions): a green tick indicates that OMG Function Point counting and Transaction Risk Index are supported
  • Quality and Sizing: a green tick indicates that CAST can measure size and that a minimum set of Quality Rules exist
Function Points (transactions)Quality and Sizing

Download and installation instructions

The extension will be automatically downloaded and installed in CAST Console when at least one RPG type file is delivered for analysis. You can manage the extension using the Application - Extensions interface.

Prepare and deliver the source code

When the extension is downloaded and installed, you can now package your source code and run an analysis. The process of preparing and delivering your source code is described below:

Source code preparation

Before the RPG source code can be delivered and then analyzed, it needs to be collected from the proper iSeries libraries and transferred to the designated location. During this operation, each artifact (program, CL, DSPF) must be put into a single file only. This will result in a single artifact per file. Furthermore, the type of source code must be expressed using the extension to the file. The appropriate file extensions are listed in the following table.

Source code is kept in a member of a file. The file is kept in a library. Each file can have many members. Each member is the source code for a program. The source code files can have any name but conventionally the names start with Q and end with SRC, for source.

Source code typeiSeries libraryRequired extensionUsed in MetaModel
RPG-III programsQRPGSRC*.rpg, *.rpg38, *.sqlrpgRPG300
ILE RPG ProgramsQRPGLESRC*.rpgle, *.rpgleincRPG400
ILE RPG Programs with SQLQSQLRPGLESRC*.sqlrpgleRPG400
Copy source membersQCPYLESRC*.cpyleRPG400
CL programsQCLSRC*.cl, *.clp, *.cl38, *.clp38CL400
ILE CL ProgramsQCLLESRC*.clleCL400
Display FilesQDDSSRC*.dspf, *.dspf38DDS400
Printer FilesQDDSSRC*.prtf, *.prtf38DDS400
Logical FilesQDBSRC*.lf, *.lf38SQL Analyzer/DDS400
Physical FilesQDBSRC*.pf, *.pf38SQL Analyzer/DDS400

The RPG Analyzer is able to autodetect RPG III versus RPG IV, so there is no difference in using *.rpg or *.rpgle. What is very important is to distinguish between Display, Printer, Logical and Physical files using the specific file extensions listed in above table.

What about IBM Db2 for i source code?

In previous releases of the RPG Analyzer extension, when IBM Db2 for i source code was delivered, a dedicated extraction process was launched within the RPG Analyzer to transform this source code into a format that could be analyzed. Starting in release ≥ 3.1.x, the RPG Analyzer is no longer responsible for analyzing source code from IBM DB2 for i. Instead, this task is undertaken by the com.castsoftware.sqlanalyzerexternal link (release ≥ 3.5.4 is required).

There is no change to source code delivery process when using AIP Console - the IBM DB2 for i source code should be delivered together with the RPG source code and AIP Console will be able to detect this type of source code and create the necessary Analysis Units. For those using legacy CAST Management Studio/Delivery Manager Tool, the source code delivery process has changed and is explained below.

IBM Db2 for i is also known as DB400.

What about SQL files called by RPG analyser

Use the RTVQMQRY command to extract the SQL query from a Query Management (QM) query and save it to a source member. This is required for CAST analysis.

Source file verification and correction before delivery

Special Characters in RPG Source Code Extracted from IBM i

When extracting RPG source code from IBM i to Microsoft Windows environments, unwanted special characters may be introduced that can cause analysis failures. While the RPG analyzer is designed to handle these issues robustly, the presence of such characters cannot guarantee reliable analysis results. Source code files must therefore use one of the following encodings:

  • UTF-8 (with or without BOM)
  • GB 18030 or BIG5 for Chinese environments

For complete encoding specifications, see the supported character sets documentationexternal link.

Always validate RPG source code before delivery and correct any character encoding issues to ensure optimal analysis results.

First 12 numerical characters introduced during extraction from IBM i to Microsoft Windows.

Extracting RPG source code can introduce sequence numbers in the first 12 columns. Since release 3.5.2-funcrel, this is supported.

Deliver the source code

CAST Imaging expects either a ZIP/archive file or source code located in a folder. You should include in the ZIP/source code folder all RPG and IBM DB2 for i (if present) source code. When the source code has been delivered, one Analysis Unit will be created for each of the following:

  • IBM Db2 for i (if present) source code
  • RPG source code

Analysis configuration

A dependency is automatically created from RPG Analysis Units to SQL Analysis Units and no manual intervention is required. You should still check that the dependency is present, however:

Configuring Technical Size measures for RPG in the CAST Management Dashboard

Technical Size measures can be displayed for RPG analysis results in the CAST Management Dashboard by manually editing the following file:

1.x WAR file: %CATALINA_HOME%\webapps\<dashboard>\portal\resources\app.json
2.x WAR file: %CATALINA_HOME%\webapps\<dashboard>\WEB-INF\classes\config\hd\app.json
2.x ZIP file: com.castsoftware.aip.dashboard.2.0.0\config\hd\app.json

Add the following entries into the existing section “TechnicalSizeMeasures”:

"TechnicalSizeMeasures": {
...
      {
        "id": 1008000,
        "label": "Number of RPG400 Program(RPG400)"
      },
      {
        "id": 1008001,
        "label": "Number of RPG400 Subroutine(RPG400)"
      },
      {
        "id": 1008002,
        "label": "Number of RPG400 Procedure(RPG400)"
      },
      {
        "id": 1008003,
        "label": "Number of RPG IV Copy Member(RPG400)"
      },
      {
        "id": 1009000,
        "label": "Number of RPG300 Program(RPG300)"
      },
      {
        "id": 1009001,
        "label": "Number of RPG300 Subroutine(RPG300)"
      },
      {
        "id": 1009003,
        "label": "Number of RPG300 Copy Member(RPG300)"
      }
} 

Following any changes you make, save the app.json file and then restart your application server so that the changes are taken into account.

What results can you expect?

Transaction Sample

C     SCRLVL        CHAIN     PACCLVS
C                   IF        %FOUND
C                   DELETE    RACCLV
C                   ENDIF

CALL       PGM(&EXTLIB/&EXTPGM)

CL language

See CL Language for more information.

RPG Language

See RPG Language for more information.

Objects

IconObject NameComment
IBM i Utility
IBM i DataQ Utility
IBM i Data Area Utility
IBM i MQ Utility
IBM i SNADS Utility
IBM i PASE Utility
Axway Transfer CFT Utility
Call to identified external library
CL Project
RPG III Project
RPG IV Project
DDS Project
Internal object to define a scope for CL, RPG III, RPG IV and DDS objects.
CL Program
RPG III Program
RPG IV Program
Standard Program declaration
CL Call to Generic Program
RPG III Call to Generic Program
RPG IV Call to Generic Program
Created when a call to a program is not resolved or an external program
RPG IV ModuleCreated for files that starts with the keyword “NOMAIN”.
RPG IV Procedure
RPG IV Missing Procedure
Standard Procedure declaration.
Created when a reference to a procedure is found.
RPG IV Procedure PrototypeStandard Procedure Prototype declaration.
CL Subroutine
RPG III MainSubroutine
RPG III Subroutine
RPG IV MainSubroutine
RPG IV Subroutine
Standard Subroutine declaration
CL EXEC SQL
RPG III EXEC SQL
RPG IV EXEC SQL
SQL CL example
SQL RPG examples
CL Call to Sql FileSQL script CL example
STRQMQRY CL example
CL Data AreaData Area CL example
CL Data Queue Publisher
RPG III Data Queue Publisher
RPG IV Data Queue Publisher

CL IBM MQ Queue Publisher
RPG III IBM MQ Queue Publisher
RPG IV IBM MQ Queue Publisher
DataQ CL example
DataQ RPG example

IBM MQ CL example
IBM MQ RPG example
CL Data Queue Receiver
RPG III Data Queue Receiver
RPG IV Data Queue Receiver

CL IBM MQ Queue Receiver
RPG III IBM MQ Queue Receiver
RPG IV IBM MQ Queue Receiver
DataQ CL example
DataQ RPG example

IBM MQ CL example
IBM MQ RPG example
CL Data Unknown Queue Publisher
RPG III Data Unknown Queue Publisher
RPG IV Data Unknown Queue Publisher

CL IBM MQ Unknown Queue Publisher
RPG III IBM MQ Unknown Queue Publisher
RPG IV IBM MQ Unknown Queue Publisher
DataQ CL example
DataQ RPG example

IBM MQ CL example
IBM MQ RPG example
CL Data Unknown Queue Receiver
RPG III Data Unknown Queue Receiver
RPG IV Data Unknown Queue Receiver

CL IBM MQ Unknown Queue Receiver
RPG III IBM MQ Unknown Queue Receiver
RPG IV IBM MQ Unknown Queue Receiver
DataQ CL example
DataQ RPG example

IBM MQ CL example
IBM MQ RPG example
CL Disk File
RPG III File Disk
RPG IV File Disk

CL Display File
RPG III File Workstn
RPG IV File Workstn

RPG III File Printer
RPG IV File Printer

RPG III File Special
RPG IV File Special

RPG III File Seq
RPG IV File Seq
Created when a reference to a LF/PF/DSPF/PTRF file is found within a Program (or MainSubroutine/Subroutine/Procedure).
DDS Logical FileDDS Logical File is associated to .lf file and is a hidden object to help linking between RPG III/RPG IV/CL Disk File and Sql Views.
CL Missing Physical/Logical File
RPG III Missing Physical/Logical File
RPG IV Missing Physical/Logical File
DDS Physical File
DDS Physical File is associated to .pf file and is a hidden object to help linking between RPG III/RPG IV/CL Disk File and Sql Tables.
This icon is also used for transaction End Point when there is RPG III/RPG IV/CL Disk File references but no .lf or .pf files associated.
CL Missing Display File
RPG III Missing Display File
RPG IV Missing Display File
DDS Display File

RPG III Missing Printer File
RPG IV Missing Printer File
DDS Printer File
DDS Display File and DDS Printer File are associated with .dspf and .prtf files, respectively.
This icon is also used for transaction End Point when there is RPG III/RPG IV Display/Printer Files references but no .dspf or .ptrf files associated.
RPG III Copy Member
RPG IV Copy Member

RPG III Missing Copy Member
RPG IV Missing Copy Member
-
RPG III SQL Statement/Structure-
RPG IV Get Resource ServiceREST RPG examples
RPG IV Post Resource ServiceREST RPG examples
RPG IV Put Resource ServiceREST RPG examples
RPG IV Delete Resource ServiceREST RPG examples
DDS Join StructureDeprecated will soon be removed from the documentation.
DDS SectionDeprecated will soon be removed from the documentation.
DDS Record Structure LFDeprecated will soon be removed from the documentation.
DDS Record Structure PFDeprecated will soon be removed from the documentation.
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
CL Programcall LinkCL Program-
CL Programcall LinkCL Subroutine-
CL Programcall LinkCL Call to Generic Program
CL Subroutinecall LinkCL Call to Generic Program
CL Subroutinecall LinkCL Call to Sql FileSQL script CL example
STRQMQRY CL example
CL Subroutinecall LinkCL Program
CL Subroutinecall LinkCL Subroutine
CL Programcall LinkCL Data Queue PublisherDataQ CL example
CL Data Queue Receivercall LinkCL ProgramDataQ CL example
CL Data Unknown Queue Receivercall LinkCL ProgramDataQ CL example
CL Programcall LinkCL IBM MQ PublisherIBM MQ CL example
CL IBM MQ Queue Receivercall LinkCL ProgramIBM MQ CL example
CL Programcall LinkCL EXEC SQLSQL CL example
CL Programcall LinkCL Call to Sql FileSQL Script CL example
STRQMQRY CL example
CL ProgramUse Select LinkCL Disk FileDCLF command example
CL Disk FileRelyon LinkCL Missing Physical/logical FileDCLF command example
CL ProgramAccess linkCL Display FileDCLF command example
CL ProgramRead Access linkCL Display FileDCLF command example
CL ProgramWrite Access linkCL Display FileDCLF command example
CL Missing Display Filecall LinkCL ProgramDCLF command example
CL ProgramAccess linkCL Data AreaData Area Example
CL ProgramRead Access linkCL Data AreaData Area Example
CL ProgramWrite Access linkCL Data AreaData Area Example
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
RPG III Programcall LinkRPG III Main Subroutine-
RPG III MainSubroutinecall LinkRPG III Program-
RPG III MainSubroutinecall LinkRPG III Subroutine-
RPG III Subroutinecall LinkRPG III Subroutine-
RPG III Subroutinecall LinkRPG III Call to Generic Program-
RPG III MainSubroutinecall LinkRPG III Call to Generic Program-
RPG III MainSubroutinecall LinkRPG III EXEC SQLSQL RPG III example
RPG III ProgramAccess linkRPG III File WorkstnRPG Display File
RPG III Missing Display Filecall LinkRPG III ProgramRPG Display File
RPG III File DiskRelyon LinkRPG III Missing Physical/Logical FileRPG Disk File
RPG III File PrinterRelyon LinkRPG III Missing Printer File-
RPG III MainSubroutineUse Insert LinkRPG III File DiskRPG Disk File
RPG III MainSubroutineUse Select LinkRPG III File DiskRPG Disk File
RPG III MainSubroutineUse Delete LinkRPG III File DiskRPG Disk File
RPG III MainSubroutineUse Update LinkRPG III File DiskRPG Disk File
RPG III SubroutineUse Insert LinkRPG III File DiskRPG Disk File
RPG III SubroutineUse Select LinkRPG III File DiskRPG Disk File
RPG III SubroutineUse Delete LinkRPG III File DiskRPG Disk File
RPG III SubroutineUse Update LinkRPG III File DiskRPG Disk File
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
RPG IV Programcall LinkRPG IV MainSubroutine
RPG IV Programcall LinkRPG IV Procedure Prototype
RPG IV Procedure Prototypecall LinkRPG IV Program
RPG IV Missing Display Filecall LinkRPG IV Program
RPG IV MainSubroutinecall LinkRPG IV Procedure
RPG IV MainSubroutinecall LinkRPG IV Procedure Prototype
RPG IV MainSubroutinecall LinkRPG IV Program
RPG IV MainSubroutinecall LinkRPG IV Subroutine
RPG IV MainSubroutinecall LinkRPG IV Call to Generic Program-
RPG IV Subroutinecall LinkRPG IV Call to Generic Program-
RPG IV Procedure Prototypecall LinkRPG IV Call to Generic Program-
RPG IV Procedure Prototypecall LinkRPG IV Missing Procedure-
RPG IV ProgramincludeLinkRPG IV Missing Copy Member-
RPG IV Procedurecall LinkRPG IV Procedure
RPG IV Procedurecall LinkRPG IV Procedure Prototype
RPG IV Procedurecall LinkRPG IV Subroutine
RPG IV Subroutinecall LinkRPG IV Procedure
RPG IV Subroutinecall LinkRPG IV Procedure Prototype
RPG IV Subroutinecall LinkRPG IV Program
RPG IV Subroutinecall LinkRPG IV Subroutine
RPG IV Procedure Prototypecall LinkRPG IV Module
RPG IV Procedure Prototypecall LinkRPG IV Procedure
RPG IV Copy Membercall LinkRPG IV Subroutine
RPG IV MainSubroutinecall LinkRPG IV EXEC SQLSQL RPG IV example
RPG IV Subroutinecall LinkRPG IV EXEC SQLSQL RPG IV example
RPG IV Copy Membercall LinkRPG IV EXEC SQLSQL RPG IV example
RPG IV Procedurecall LinkRPG IV EXEC SQLSQL RPG IV example
RPG IV ProgramaccessLinkRPG IV File WorkstnRPG Display File
RPG IV ModuleaccessLinkRPG IV File WorkstnRPG Display File
RPG IV File DiskRelyon LinkRPG IV Missing Physical/Logical File
RPG IV File PrinterRelyon LinkRPG IV Missing Printer File
RPG IV MainSubroutineUse Select LinkRPG IV File DiskRPG Disk File
RPG IV MainSubroutineUse Delete LinkRPG IV File DiskRPG Disk File
RPG IV MainSubroutineUse Insert LinkRPG IV File DiskRPG Disk File
RPG IV MainSubroutineUse Update LinkRPG IV File DiskRPG Disk File
RPG IV MainSubroutineUse Insert LinkRPG IV File Printer
RPG IV SubroutineUse Insert LinkRPG IV File Printer
RPG IV ProcedureUse Select LinkRPG IV File DiskRPG Disk File
RPG IV ProcedureUse Delete LinkRPG IV File DiskRPG Disk File
RPG IV ProcedureUse Insert LinkRPG IV File DiskRPG Disk File
RPG IV ProcedureUse Update LinkRPG IV File DiskRPG Disk File
RPG IV SubroutineUse Select LinkRPG IV File DiskRPG Disk File
RPG IV SubroutineUse Delete LinkRPG IV File DiskRPG Disk File
RPG IV SubroutineUse Insert LinkRPG IV File DiskRPG Disk File
RPG IV SubroutineUse Update LinkRPG IV File DiskRPG Disk File
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
DDS Logical FileUse Select LinkDDS Logical File
DDS Logical FileUse Select LinkDDS Physical File
DDS Physical FileUse Select LinkDDS Physical File
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
CL Disk FileRelyon LinkDDS Display File
CL Disk FileRelyon LinkDDS Logical File
CL Disk FileRelyon LinkDDS Physical File
DDS Display Filecall LinkCL Program
CL ProgramUse Select LinkDDS Logical File
CL ProgramUse Select LinkDDS Physical File
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
DDS Display Filecall LinkRPG III Program
RPG III File DiskRelyon LinkDDS Logical File
RPG III File DiskRelyon LinkDDS Physical File
RPG III MainSubroutineUse Update LinkDDS Logical File
RPG III MainSubroutineUse Insert LinkDDS Logical File
RPG III MainSubroutineUse Select LinkDDS Logical File
RPG III MainSubroutineUse Insert LinkDDS Physical File
RPG III MainSubroutineUse Select LinkDDS Physical File
RPG III SubroutineUse Delete LinkDDS Logical File
RPG III SubroutineUse Update LinkDDS Logical File
RPG III SubroutineUse Select LinkDDS Logical File
RPG III SubroutineUse Insert LinkDDS Logical File
RPG III SubroutineUse Insert LinkDDS Physical File
RPG III SubroutineUse Update LinkDDS Physical File
RPG III SubroutineUse Select LinkDDS Physical File
RPG III SubroutineUse Delete LinkDDS Physical File
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
DDS Display FileDDS Display Filecall LinkRPG IV ModuleRPG IV Module
DDS Display FileDDS Display Filecall LinkRPG IV ProgramRPG IV Program
RPG IV File DiskRPG IV File DiskRelyon LinkDDS Logical FileDDS Logical File
RPG IV File DiskRPG IV File DiskRelyon LinkDDS Physical FileDDS Physical File
RPG IV File DiskRPG IV File DiskRelyon LinkDDS Printer FileDDS Printer File
RPG IV File PrinterRPG IV File PrinterRelyon LinkDDS Physical FileDDS Physical File
RPG IV File PrinterRPG IV File PrinterRelyon LinkDDS Printer FileDDS Printer File
RPG IV MainSubroutineRPG IV MainSubroutineUse Select LinkDDS Logical FileDDS Logical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Update LinkDDS Logical FileDDS Logical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Delete LinkDDS Logical FileDDS Logical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Insert LinkDDS Logical FileDDS Logical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Update LinkDDS Physical FileDDS Physical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Insert LinkDDS Physical FileDDS Physical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Select LinkDDS Physical FileDDS Physical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Delete LinkDDS Physical FileDDS Physical File
RPG IV MainSubroutineRPG IV MainSubroutineUse Insert LinkDDS Printer FileDDS Printer File
Caller IconCaller TypeLink TypeCallee IconCallee TypeRemarks
RPG III MainSubroutinecall LinkCL Program
RPG III Subroutinecall LinkCL Program
RPG IV MainSubroutinecall LinkCL Program
RPG IV Procedure Prototypecall LinkCL Program
RPG IV Subroutinecall LinkCL Program
CL Programcall LinkRPG III Program
CL Programcall LinkRPG IV Copy Member
CL Programcall LinkRPG IV Procedure
CL Programcall LinkRPG IV Program
CL Subroutinecall LinkRPG IV Program

Analysis log messages

The following list of log messages may occur during an analysis and will help locate in which file the warning occured. In addition, just before the Analyzer Statistical Report is displayed in the log file, the extension will report the total number of occurences of these messages, for example:

Info   : [com.castsoftware.rpg] RPG-001: Cannot resolve copy GFCOLEC/QRPGSRC/GF_OBTCN_L -- 1 occurrences
Info   : [com.castsoftware.rpg] RPG-001: Cannot resolve copy QRPGLESRC/HTTPAPI_H -- 5 occurrences
Info   : [com.castsoftware.rpg] RPG-002: Cannot resolve DDS file SGGQGC00 -- 5 occurrences
Info   : [com.castsoftware.rpg] RPG-002: Cannot resolve DDS file SGGQGD00 -- 5 occurrences
Info   : [com.castsoftware.rpg] RPG-002: Cannot resolve DDS file SGSPLZ00 -- 2 occurrences
Info   : [com.castsoftware.rpg] RPG-003: Cannot resolve program RTNFECHA -- 5 occurrences
Info   : [com.castsoftware.rpg] RPG-003: Cannot resolve program SGG4648C -- 1 occurrences
Info   : [com.castsoftware.rpg] RPG-003: Cannot resolve program SGS99500 -- 5 occurrences
Info   : [com.castsoftware.rpg] RPG-003: Cannot resolve program TBL50400 -- 4 occurrences

RPG-001

ItemDescription
IdentifierRPG-001
MessageCannot resolve copy {RefName} – {count} occurrences
SeverityInfo
ExplanationAnalyzer could not find the source file included by a /copy statement. This can lead to various missing results.
User ActionEnsure that all required source code is packaged and delivered. The missing copy can also be in an external library in that case ensure to provide it.

RPG-002

ItemDescription
IdentifierRPG-002
MessageCannot resolve DDS file {Refname} – {count} occurrences
SeverityInfo
ExplanationAnalyzer could not find a DDS file (pf, lf, dspf, prtf, …). The analysis results will be degraded. A fallback mechanism will link missing PF/LF references to available SQL Table & View Objects.
User ActionEnsure that all required source code is packaged and delivered.

RPG-003

ItemDescription
IdentifierRPG-003
MessageCannot resolve program {Refname} – {count} occurrences
SeverityInfo
ExplanationAnalyzer could not find a program. The analysis results will be incomplete.
User ActionEnsure that all required source code is packaged and delivered. The program can also be in a different technology (COBOL, etc…) in that case it will be linked in a later analysis step. The program may also be external to the application, that is outside of the application boundaries. In this case it should not be delivered (the RPG analyzer created a placeholder object of type CL/RPG III/RPG IV Call to Generic Program).

RPG-004

ItemDescription
IdentifierRPG-004
MessageCannot resolve procedure {Refname} – {count} occurrences
SeverityInfo
ExplanationAnalyzer could not find a procedure.
User ActionEnsure that all required source code is packaged and delivered.

Quality rules

Analyzer Statistical Report

At the end of an analysis, a statistical report is printed in the log file displaying the number of saved objects and links. For the com.castsoftware.rpg extension, this report splits the results by object type.

For links, the report uses the information stored in the analysis schema (caller object type, link type, callee object type) to provide a detailed view of links created by the extension.

An example statistical report is shown below:

Info   : [com.castsoftware.rpg] Stats Report:
Info   : [com.castsoftware.rpg] Number of Objects per type:
Info   : [com.castsoftware.rpg] 'RPG IV Call to Generic Program'       : 4 
Info   : [com.castsoftware.rpg] 'RPG IV File Disk'                     : 12 
Info   : [com.castsoftware.rpg] 'RPG IV MainSubroutine'                : 5 
Info   : [com.castsoftware.rpg] 'RPG IV Missing Copy Member'           : 2 
Info   : [com.castsoftware.rpg] 'RPG IV Missing Physical/Logical File' : 3 
Info   : [com.castsoftware.rpg] 'RPG IV Post Resource Service'         : 5 
Info   : [com.castsoftware.rpg] 'RPG IV Program'                       : 5 
Info   : [com.castsoftware.rpg] 'RPG IV Subroutine'                    : 15 
Info   : [com.castsoftware.rpg] Number of Links per link flags:
Info   : [com.castsoftware.rpg] 'RPG IV File Disk'       -- relyonLink    --> 'RPG IV Missing Physical/Logical File' : 12
Info   : [com.castsoftware.rpg] 'RPG IV MainSubroutine'  -- callLink      --> 'RPG IV Subroutine'                    : 11
Info   : [com.castsoftware.rpg] 'RPG IV Program'         -- callLink      --> 'RPG IV MainSubroutine'                : 5
Info   : [com.castsoftware.rpg] 'RPG IV Program'         -- includeLink   --> 'RPG IV Missing Copy Member'           : 6
Info   : [com.castsoftware.rpg] 'RPG IV Subroutine'      -- callLink      --> 'RPG IV Call to Generic Program'       : 15
Info   : [com.castsoftware.rpg] 'RPG IV Subroutine'      -- useSelectLink --> 'RPG IV File Disk'                     : 2
Info   : [com.castsoftware.rpg] 'RPG IV Subroutine'      -- callLink      --> 'RPG IV Post Resource Service'         : 5
Info   : [com.castsoftware.rpg] 'RPG IV Subroutine'      -- callLink      --> 'RPG IV Subroutine'                    : 8

Known limitations

  • SOAP services are not supported
  • With regard to .CLP and .CLLE file extensions:
    • The PMG keyword is optional, depending on the program structure and how the program is being compiled or called. The CL analyser does not support this feature and may produce degraded results.
  • With regard to RPG language:
    • Dynamic calls are not supported
    • Dynamic SQL is partially supported since 3.3.0-alpha2 (prepare and execute immediate with variables are resolved when encountered in RPG IV free format; the support for RPG IV fixed format and CL is available since 3.3.0-alpha3)
    • If you code the /FREE or /END-FREE directive, it will be ignored by the compiler, but the syntax of the directive will be checked - see the official documentation referenceexternal link. The com.castsoftware.rpg extension requires BOTH directives (i.e. a closing /END-FREE directive if there is an opening /FREE directive and vice-versa) in the source code: a missing opening or closing directive will produce traceback issues and missing objects. To fix the issue ensure you add the missing /FREE or /END-FREE appropriately within the file for it to be properly analyzed.