Uses of Package
org.ek9lang.compiler.phase5

Packages that use org.ek9lang.compiler.phase5
Package
Description
I - PRE Intermediate Representation generation checks.
Call graph infrastructure for EK9 compiler static analysis.
Contains critical general components used in the Ek9Compiler listeners.
  • Class
    Description
    Once an expression has been assessed as being simple enough to process, this consumer is called to mark the appropriate symbol(s) used in the expression as safe if the appropriate methods are called.
    THE registrations of every application in the program (EK9_NATIVE_CYCLE_COLLECTOR_DESIGN.md §13.11): each register X() as Y with aspect of A() of every general and service application.
    THE record of which constructor parameters a constructor KEEPS as a closeable property, and the deferred verdict on every construction that hands such a parameter a value that is not new (R4 of the fresh-store rule, E81062).
    What a construction does with the argument it is given at one position - decided only after every source has been walked (CloseableArgumentKeeping.check()).
    A variable of one callable's body - one of its parameters, or a local that may refer to the same object - compared by identity.
    Tracks cognitive complexity within functions/methods/operators.
    Tracks method-field relationships to calculate LCOM4 (Lack of Cohesion of Methods v4).
    Designed to give a broad indication of complexity, this is not true pure Cyclometric Complexity.
    One popped region: its total complexity, and how much of that came from expressions.
    Finds all concrete (non-abstract) subtypes of a given abstract aggregate type.
     
    The per-construct obligation rollup accumulated during the phase-5 walk of one callable body, then squirrelled as OBLIGATIONS_TOTAL/DISCHARGED/UNDISCHARGED at construct exit (docs/tooling/EK9_SYMBOLIC_SCANNER_IMPLEMENTATION_SPEC.md §2.1/§2.4).
    THE marker of what a construct's pre-flow and control expression prove safe for Optional / Result / Iterator access (E08030) - one class for if, switch, try, while, for and the ternary (it was six near-identical subclasses).
    THE look-ahead of the safe-access proofs (E08030): may anything in a region of source - read AHEAD of the walk - change the object a proven Optional / Result / Iterator refers to (ProvenContainerChange)? Use this for any proof that must judge code it has not walked yet; never a private scan.
    Tracks efferent coupling (Ce) - the number of external types a construct depends on.
    Tracks function/method/constructor parameter signatures for data clump detection (E11053).
    An immutable (type, name) pair from a parameter, ordered for deterministic comparison.
    One callable's parameter signature for data clump analysis.
    Why an obligation is considered discharged (proven safe) by an existing analysis, or DischargeReason.UNDISCHARGED when no analysis proves it — the discharge-detection order of docs/tooling/EK9_SYMBOLIC_SCANNER_IMPLEMENTATION_SPEC.md §2.3.
    Tracks complexity of coalescing expression trees with depth-based multiplier.
    Result of field classification for an aggregate.
    Tracks injection counts within functions/methods/operators.
    THE components of an application that sit on a circular injection chain (E08190), as InjectionCycleOrError found them - and THE rule that E08190 suppresses E08200 for them (Steve, 2026-10-11): in a cycle no registration order works, so "reorder registrations" is advice that cannot be followed.
    A stack of integer counters, one per nested function/method/operator scope, accumulated during AST traversal.
    Tracks literal occurrences across files for repeated magic literal detection (E11065).
    One recorded occurrence of a literal.
    Tracks module-level cohesion by recording constructs and their intra-module type references.
    Tracks module-level efferent coupling (Ce) - the number of distinct external modules that a module depends on.
    THE module-to-ErrorListener lookup every module-level check takes (coupling, cohesion, size, data clumps, magic literals), beside callgraph/CallableErrorListenerLookup, which does the same for a callable.
    What PRE_IR_CHECKS needs, collected during Walk 1 (by PreIRListener, every source in parallel), to decide the E08090 verdicts FULL_RESOLUTION deferred (item 5): every local marked NOT_REFERENCED_DEFERRED - initialised by a call, afterwards only mutated in place, never read - with the expression it was initialised by (MutatedOnlyVariableOrError); every user method, operator, function and dynamic function with a returning variable, with each expression that variable is made to REFER to (its initialiser, every pointer assignment (pre-flows included), and through an arm-shaped value the returning variable it yields), so ReceiverInteriorReturns can derive whether a method returns (part of) its receiver and CloseableReturnOrError can require a closeable return to be new - both reading ReturnSourceKind. Shared across the parallel walk, so the queues are concurrent; the per-source state is in a MutatedOnlyVariables.Collector.
    One source's collection.
    A deferred local and the expression it was initialised by.
    A user method, operator, function or dynamic function with a returning variable, and every expression that variable is made to refer to.
    Tracks nesting depth within functions/methods/operators.
    A single contract/partiality obligation found in a construct body, tagged with the analysis (if any) that discharges it (docs/tooling/EK9_SYMBOLIC_SCANNER_IMPLEMENTATION_SPEC.md §2.1).
    The taxonomy of contract/partiality obligations the census counts, from what already exists in the language and analysis (docs/tooling/EK9_SYMBOLIC_SCANNER_IMPLEMENTATION_SPEC.md §2.2).
    THE compile-time check that a hand-written <=> orders every two SET values of its type (E07188; Steve, 2026-10-21, sameness stock-take 4.4: "This is a closed system and we already have code that detects the subtypes").
    What makes one callable's Integer result partial, where the walk found it.
    Used as a base for a range of constructs that can be expressions.
    THE places in source where code of the program's own may run (D66) - what is not pure and not a concrete built-in - and what each can reach (Reach).
    One place where code of the program's own may run: what it reaches, and whether it changes the names it is given in place (an in-place write, an iteration) rather than handing them to a call.
    THE property-type graph: which types an object of a given type can reach through its properties.
    The three kinds of node - see the class javadoc.
    One node, keyed by kind and fully qualified type name (value equality, as the shared Tarjan requires).
    The size of the part of the graph that was reached - what the linearity test asserts on.
    The two whole-program facts the graph needs: the concrete subtypes of a type, and every aggregate.
    THE reading of whether something may change the OBJECT an Optional / Result / Iterator variable refers to, so that a proof that its get(), ok(), error() or next() is safe (E08030) no longer holds: D66 ("a call that is not pure forgets what it can reach", Steve 2026-10-21) applied to the safe-access proofs.
    THE injections that can run when the given callables run - transitively, through the phase-5 call graph: an injection (name as T!) in a body the roots reach, or a property injection of a type they construct (a property's injection belongs to its type and runs wherever the type is constructed).
    THE kinds of what a callable's returning variable is made to refer to - one of the MutatedOnlyVariables.ReturningCallable.sources() collected in Walk 1.
    Marks specific types of variable of specific types (generic Result/Option) in a manner that enables the compiler to check if access to certain methods is safe.
    Tests specific types of variable of specific types (generic Result/Option) in a manner that enables the compiler to check if access to certain methods is safe.
    THE shared "which of Result, Optional or Iterator is this symbol" (the containers whose unwrapping method ok()/error(), get() or next() must be preceded by a check, E08030), and the three-way dispatch onto SymbolsAndScopes' record, is-safe and mark operations.
    The container a symbol's type is a parameterisation of.
     
    Tracks statement counts within functions/methods/operators.
    THE phase-5 reading of a STORE: a statement that makes a variable, property or returning variable refer to the value an expression evaluates to.
    Result of analyzing trait implementation for potential missing 'by' delegation.
  • Class
    Description
    Finds all concrete (non-abstract) subtypes of a given abstract aggregate type.
  • Class
    Description
    Finds all concrete (non-abstract) subtypes of a given abstract aggregate type.