Abstraction of steps in the analysis/processing of Nit programs

Specific phases should implements one of the process_* method

Introduced properties

private var _depends: nullable Collection[Phase]

nitc :: Phase :: _depends

The explicit dependences, used to initialize in_importation
private var _disabled: Bool

nitc :: Phase :: _disabled

Is the phase globally disabled?
private var _in_hierarchy: POSetElement[Phase]

nitc :: Phase :: _in_hierarchy

The dependence relation of the phase with the other phases
private var _toolcontext: ToolContext

nitc :: Phase :: _toolcontext

The toolcontext instance attached to the phase
init defaultinit(toolcontext: ToolContext, depends: nullable Collection[Phase])

nitc :: Phase :: defaultinit

fun depends: nullable Collection[Phase]

nitc :: Phase :: depends

The explicit dependences, used to initialize in_importation
protected fun depends=(depends: nullable Collection[Phase])

nitc :: Phase :: depends=

The explicit dependences, used to initialize in_importation
fun disabled: Bool

nitc :: Phase :: disabled

Is the phase globally disabled?
fun disabled=(disabled: Bool)

nitc :: Phase :: disabled=

Is the phase globally disabled?
fun in_hierarchy: POSetElement[Phase]

nitc :: Phase :: in_hierarchy

The dependence relation of the phase with the other phases
protected fun in_hierarchy=(in_hierarchy: POSetElement[Phase])

nitc :: Phase :: in_hierarchy=

The dependence relation of the phase with the other phases
fun process_annotated_node(node: ANode, nat: AAnnotation)

nitc :: Phase :: process_annotated_node

Specific actions to execute on annotated nodes
fun process_mainmodule(mainmodule: MModule, given_mmodules: SequenceRead[MModule])

nitc :: Phase :: process_mainmodule

Specific action to execute on the whole program.
fun process_nclassdef(nclassdef: AClassdef)

nitc :: Phase :: process_nclassdef

Specific actions to execute on the tree of a class definition
fun process_nmodule(nmodule: AModule)

nitc :: Phase :: process_nmodule

Specific actions to execute on the whole tree of a module
fun process_nmodule_after(nmodule: AModule)

nitc :: Phase :: process_nmodule_after

Specific actions to execute on the whole tree of a module
fun process_npropdef(npropdef: APropdef)

nitc :: Phase :: process_npropdef

Specific actions to execute on the tree of a property
fun toolcontext: ToolContext

nitc :: Phase :: toolcontext

The toolcontext instance attached to the phase
protected fun toolcontext=(toolcontext: ToolContext)

nitc :: Phase :: toolcontext=

The toolcontext instance attached to the phase

Redefined properties

redef type SELF: Phase

nitc $ Phase :: SELF

Type of this instance, automatically specialized in every class
redef init init

nitc $ Phase :: init

Initialize and register a phase to the toolcontext
redef fun to_s: String

nitc $ Phase :: to_s

By default, the name is the lowercased prefix of the classname

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
private var _depends: nullable Collection[Phase]

nitc :: Phase :: _depends

The explicit dependences, used to initialize in_importation
private var _disabled: Bool

nitc :: Phase :: _disabled

Is the phase globally disabled?
private var _in_hierarchy: POSetElement[Phase]

nitc :: Phase :: _in_hierarchy

The dependence relation of the phase with the other phases
private var _toolcontext: ToolContext

nitc :: Phase :: _toolcontext

The toolcontext instance attached to the phase
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
init defaultinit(toolcontext: ToolContext, depends: nullable Collection[Phase])

nitc :: Phase :: defaultinit

fun depends: nullable Collection[Phase]

nitc :: Phase :: depends

The explicit dependences, used to initialize in_importation
protected fun depends=(depends: nullable Collection[Phase])

nitc :: Phase :: depends=

The explicit dependences, used to initialize in_importation
fun disabled: Bool

nitc :: Phase :: disabled

Is the phase globally disabled?
fun disabled=(disabled: Bool)

nitc :: Phase :: disabled=

Is the phase globally disabled?
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun in_hierarchy: POSetElement[Phase]

nitc :: Phase :: in_hierarchy

The dependence relation of the phase with the other phases
protected fun in_hierarchy=(in_hierarchy: POSetElement[Phase])

nitc :: Phase :: in_hierarchy=

The dependence relation of the phase with the other phases
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
private intern fun native_class_name: CString

core :: Object :: native_class_name

The class name of the object in CString format.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun process_annotated_node(node: ANode, nat: AAnnotation)

nitc :: Phase :: process_annotated_node

Specific actions to execute on annotated nodes
fun process_mainmodule(mainmodule: MModule, given_mmodules: SequenceRead[MModule])

nitc :: Phase :: process_mainmodule

Specific action to execute on the whole program.
fun process_nclassdef(nclassdef: AClassdef)

nitc :: Phase :: process_nclassdef

Specific actions to execute on the tree of a class definition
fun process_nmodule(nmodule: AModule)

nitc :: Phase :: process_nmodule

Specific actions to execute on the whole tree of a module
fun process_nmodule_after(nmodule: AModule)

nitc :: Phase :: process_nmodule_after

Specific actions to execute on the whole tree of a module
fun process_npropdef(npropdef: APropdef)

nitc :: Phase :: process_npropdef

Specific actions to execute on the tree of a property
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun toolcontext: ToolContext

nitc :: Phase :: toolcontext

The toolcontext instance attached to the phase
protected fun toolcontext=(toolcontext: ToolContext)

nitc :: Phase :: toolcontext=

The toolcontext instance attached to the phase
package_diagram nitc::Phase Phase core::Object Object nitc::Phase->core::Object nitc::Phase... ... nitc::Phase...->nitc::Phase

Parents

interface Object

core :: Object

The root of the class hierarchy.

Children

private class ActorPhase

nitc :: ActorPhase

private class AstMetricsPhase

nitc :: AstMetricsPhase

private class ContractsPhase

nitc :: ContractsPhase

class DefaultPhase

nitc :: DefaultPhase

Empty phase that delegates process_mainmodule to the global do_work.
private class DerivingPhase

nitc :: DerivingPhase

private class DivByZeroPhase

nitc :: DivByZeroPhase

OK, let we create a specific phase
private class ExternClassesTypingPhaseAst

nitc :: ExternClassesTypingPhaseAst

Assigns the ftype to class definitions, work on the AST only
class FFILanguageAssignationPhase

nitc :: FFILanguageAssignationPhase

Phase that assign a FFILanguage to all AExternCodeBlock
private class FlowPhase

nitc :: FlowPhase

private class I18NPhase

nitc :: I18NPhase

private class InheritanceMetricsPhase

nitc :: InheritanceMetricsPhase

Extract metrics about inheritance from model.
private class LiteralPhase

nitc :: LiteralPhase

private class MClassesMetricsPhase

nitc :: MClassesMetricsPhase

Extract metrics about mclasses from model.
private class MModulesMetricsPhase

nitc :: MModulesMetricsPhase

Extract metrics about modules from the model.
private class NitPackagePhase

nitc :: NitPackagePhase

private class Nitdoc

nitc :: Nitdoc

Nitdoc phase explores the model and generate pages for each mentity found
private class NitwebPhase

nitc :: NitwebPhase

Phase that builds the model and wait for http request to serve pages.
private class NoWarningPhase

nitc :: NoWarningPhase

private class ParseAnnotationsPhase

nitc :: ParseAnnotationsPhase

Parse annotations from modules, classdefs and propdefs
private class PkgconfigPhase

nitc :: PkgconfigPhase

Detects the pkgconfig annotation on the module declaration only
private class PlatformPhase

nitc :: PlatformPhase

private class RTAMetricsPhase

nitc :: RTAMetricsPhase

private class ReadmeMetricsPhase

nitc :: ReadmeMetricsPhase

Extract metrics about README files
private class RegexPhase

nitc :: RegexPhase

private class RestfulPhase

nitc :: RestfulPhase

private class ScopePhase

nitc :: ScopePhase

private class TransformPhase

nitc :: TransformPhase

private class TypingPhase

nitc :: TypingPhase

private class UMLPhase

nitc :: UMLPhase

class VerifyNitniCallbacksPhase

nitc :: VerifyNitniCallbacksPhase

  • checks for the validity of callbacks

Class definitions

nitc $ Phase
# Abstraction of steps in the analysis/processing of Nit programs
# Specific phases should implements one of the `process_*` method
abstract class Phase
	# The toolcontext instance attached to the phase
	var toolcontext: ToolContext

	# The dependence relation of the phase with the other phases
	var in_hierarchy: POSetElement[Phase] is noinit

	# The explicit dependences, used to initialize `in_importation`
	var depends: nullable Collection[Phase]

	# Initialize and register a phase to the toolcontext
	init
	do
		in_hierarchy = toolcontext.phases.add_node(self)
		var depends = self.depends
		if depends != null then
			for d in depends do
				toolcontext.phases.add_edge(self, d)
			end
		end
	end

	# By default, the name is the lowercased prefix of the classname
	redef fun to_s do return class_name.strip_extension("Phase").to_snake_case

	# Is the phase globally disabled?
	# A disabled phase is not called automatically called by `ToolContext::run_phases` and cie.
	#
	# Warning: disabling a phase may cause subsequent phases to work in a degraded way or to fail.
	var disabled = false is writable

	# Specific actions to execute on the whole tree of a module
	# @toimplement
	fun process_nmodule(nmodule: AModule) do end

	# Specific actions to execute on the tree of a class definition
	# Note that the order of the visit is the one of the file
	# @toimplement
	fun process_nclassdef(nclassdef: AClassdef) do end

	# Specific actions to execute on the tree of a property
	# Note that the order of the visit is the one of the file
	# @toimplement
	fun process_npropdef(npropdef: APropdef) do end

	# Specific actions to execute on annotated nodes
	# Note that the order of the visit is the one of the file
	# @toimplement
	fun process_annotated_node(node: ANode, nat: AAnnotation) do end

	# Specific actions to execute on the whole tree of a module
	# Called at the end of a phase on a module
	# Last called hook
	# @toimplement
	fun process_nmodule_after(nmodule: AModule) do end
end
src/phase.nit:207,1--264,3

nitc :: modelbuilder $ Phase
redef class Phase
	# Specific action to execute on the whole program.
	# Called by the `ToolContext::run_global_phases`.
	#
	# `mainmodule` is the main module of the program.
	# It could be an implicit module (called like the first given_mmodules).
	#
	# `given_modules` is the list of explicitely requested modules.
	# from the command-line for instance.
	#
	# REQUIRE: `not given_modules.is_empty`
	# REQUIRE: `(given_modules.length == 1) == (mainmodule == given_modules.first)`
	#
	# @toimplement
	fun process_mainmodule(mainmodule: MModule, given_mmodules: SequenceRead[MModule]) do end
end
src/modelbuilder.nit:73,1--88,3