Top Method Summary
Options Name Purpose
FindTypeStatement () Locates the line of the CLASS (INTERFACE, ENUM) statement
Consultingwerk.Studio.ListAnnotation GetClassAnnotations () Gets the List of Annotations of the ClassHeader
Consultingwerk.Studio.ListClassMember GetClassMemberAnnotations () Gets the List of Class Members and their Annotations
Progress.Lang.Class GetParsedClass () Returns the class of the parsed file
MoveToLine (integer) Positions the cursor at the beginning of the given line
MoveToNextAnnotation () Moves the cursor to the next annotation (@), across lines
LOGICAL MoveToNextToken () Moves the cursor to the next non-blank character, across lines
ParseAnnotation () Parses the annotation at the cursor and adds it to the pending annotations
ParseMethodHeader () Parses the method header at the cursor (behind the METHOD keyword) into a ClassMember with the pending annotations
ParseParameters (character, ListNameValuePair) Parses the parameter list of an annotation into name / value pairs
ParseStatement () Parses the statement following the pending annotations
ReadFile (character) Reads the source file into the line temp-table, blanking comments, string literals, include references and preprocessor directives in the Stripped field
CHARACTER ReadIdentifier () Reads an identifier (or qualified type name) at the cursor
CHARACTER ReadParenthesizedText () Reads the original source text of the parenthesized expression at the cursor, including the parentheses, across lines
Scan () Scans the stripped source for annotations and the CLASS and METHOD statements they belong to
CHARACTER StripLine (character) Returns the line with comments, string literals, include references and preprocessor directives replaced by blanks
TrackPreprocessorBlock (character) Tracks the nesting of &IF ... &ENDIF blocks

Top Constructor Summary
Options Name Purpose
LightweightClassAnnotationParser (character) Constructor for the LightweightClassAnnotationParser class
LightweightClassAnnotationParser (character, logical) Constructor for the LightweightClassAnnotationParser class

Top Property Summary
Options Name Purpose
LOGICAL ReadStrongTypedAnnotations
LOGICAL UsesFallbackParser


Method Detail
Top

FindTypeStatement ()

Purpose: Locates the line of the CLASS (INTERFACE, ENUM) statement
Notes: The first line of the stripped source that starts with one of
the keywords. Needed to tell the class annotations (everything
in front of the statement) from the member annotations, also
when the class statement itself has no annotations

Top

Consultingwerk.Studio.ListAnnotation GetClassAnnotations ()

Purpose: Gets the List of Annotations of the ClassHeader
Notes:

Returns Consultingwerk.Studio.ListAnnotation
The ListAnnotation with the list of annotations from the class header
Top

Consultingwerk.Studio.ListClassMember GetClassMemberAnnotations ()

Purpose: Gets the List of Class Members and their Annotations
Notes: Only methods are returned

Returns Consultingwerk.Studio.ListClassMember
The ListClassMember with the list of class members and their annotations
Top

Progress.Lang.Class GetParsedClass ()

Purpose: Returns the class of the parsed file
Notes: Loads the class on first use, raises an error when the class
cannot be loaded

Returns Progress.Lang.Class
The Progress.Lang.Class of the parsed file
Top

MoveToLine (integer)

Purpose: Positions the cursor at the beginning of the given line
Notes: Sets lEndOfFile when the line does not exist

Parameters:
piLine INTEGER
The line number
Top

MoveToNextAnnotation ()

Purpose: Moves the cursor to the next annotation (@), across lines
Notes: Fast forward through code that has no pending annotations

Top

LOGICAL MoveToNextToken ()

Purpose: Moves the cursor to the next non-blank character, across lines
Notes:

Returns LOGICAL
Logical value indicating if a character was found (FALSE at the end of the file)
Top

ParseAnnotation ()

Purpose: Parses the annotation at the cursor and adds it to the pending
annotations
Notes: The cursor is on the @ character

Top

ParseMethodHeader ()

Purpose: Parses the method header at the cursor (behind the METHOD
keyword) into a ClassMember with the pending annotations
Notes: The method name is the last identifier before the opening
parenthesis of the parameter list

Top

ParseParameters (character, ListNameValuePair)

Purpose: Parses the parameter list of an annotation into name / value
pairs
Notes: Same result as the ClassAnnotationParser: the value of a quoted
string is unquoted (StringHelper:Unquote), a string attribute
(:U, U, :T) behind the closing quote is ignored, an empty string
is an empty value

Parameters:
pcParameters CHARACTER
The parameter list including the parentheses, e.g. (expected="Progress.Lang.AppError", errNum=1234)
poParameters Consultingwerk.ListNameValuePair
The ListNameValuePair to add the parameters to
Top

ParseStatement ()

Purpose: Parses the statement following the pending annotations
Notes: The CLASS (INTERFACE, ENUM) statement receives the pending
annotations as class annotations, a METHOD statement becomes a
ClassMember with the pending annotations. For any other
statement behind the CLASS statement the pending annotations
are dropped

Top

ReadFile (character)

Purpose: Reads the source file into the line temp-table, blanking
comments, string literals, include references and
preprocessor directives in the Stripped field
Notes: PreproDepth is the number of open &IF blocks at the line

Parameters:
pcFileName CHARACTER
The file name to read
Top

CHARACTER ReadIdentifier ()

Purpose: Reads an identifier (or qualified type name) at the cursor
Notes: A period is only part of the identifier when it is followed by
an identifier character, so the terminating period of a
statement is not consumed

Returns CHARACTER
The identifier, "" when the cursor is not on an identifier character
Top

CHARACTER ReadParenthesizedText ()

Purpose: Reads the original source text of the parenthesized expression
at the cursor, including the parentheses, across lines
Notes: The cursor is on the opening parenthesis and ends behind the
closing parenthesis. Nested parentheses are matched on the
stripped text (string literals are blanked there)

Returns CHARACTER
The source text from the opening to the closing parenthesis
Top

Scan ()

Purpose: Scans the stripped source for annotations and the CLASS and
METHOD statements they belong to
Notes:

Top

CHARACTER StripLine (character)

Purpose: Returns the line with comments, string literals, include
references and preprocessor directives replaced by blanks
Notes: Keeps the position of every remaining character. The comment
and string state is kept across lines (iCommentDepth,
cStringDelimiter)

Parameters:
pcLine CHARACTER
The source line
Returns CHARACTER
The stripped line
Top

TrackPreprocessorBlock (character)

Purpose: Tracks the nesting of &IF ... &ENDIF blocks
Notes: &ELSEIF and &ELSE keep the depth. Directives are matched on the
first word of the line, case-insensitive

Parameters:
pcDirective CHARACTER
The preprocessor directive line (left-trimmed)


Constructor Detail
Top

LightweightClassAnnotationParser (character)

Purpose: Constructor for the LightweightClassAnnotationParser class
Notes: Reads the strongly typed annotations on OpenEdge 13.1

Parameters:
pcFileName CHARACTER
The file name to parse
Top

LightweightClassAnnotationParser (character, logical)

Purpose: Constructor for the LightweightClassAnnotationParser class
Notes: Scans the file

Parameters:
pcFileName CHARACTER
The file name to parse
plReadStrongTypedAnnotations LOGICAL
Logical value indicating if the strongly typed annotations (OpenEdge 13.1) are read through the reflection API


Property Detail
Top

LOGICAL ReadStrongTypedAnnotations


Returns LOGICAL
Top

LOGICAL UsesFallbackParser


Returns LOGICAL


©2006-2026 Consultingwerk Ltd.         info@consultingwerk.de         http://www.consultingwerk.de       09.11.2026 08:15:14