A single annotation

Introduced properties

private var _n_args: ANodes[AExpr]

nitc :: AAnnotation :: _n_args

The list of arguments
private var _n_atid: AAtid

nitc :: AAnnotation :: _n_atid

The name of the annotation
private var _n_cpar: nullable TCpar

nitc :: AAnnotation :: _n_cpar

The closing parenthesis
private var _n_opar: nullable TOpar

nitc :: AAnnotation :: _n_opar

The opening parenthesis of the arguments
fun arg_as_id(modelbuilder: ModelBuilder): nullable String

nitc :: AAnnotation :: arg_as_id

Get the single argument of self as an identifier.
fun arg_as_int(modelbuilder: ModelBuilder): nullable Int

nitc :: AAnnotation :: arg_as_int

Get the single argument of self as an Int.
fun arg_as_string(modelbuilder: ModelBuilder): nullable String

nitc :: AAnnotation :: arg_as_string

Get the single argument of self as a String.
private fun as_relative_paths(modelbuilder: ModelBuilder): Array[String]

nitc :: AAnnotation :: as_relative_paths

Parse all arguments as paths relative to the declaring module
private fun as_version(modelbuilder: ModelBuilder): String

nitc :: AAnnotation :: as_version

Returns a version string (example: "1.5.6b42a7c") from an annotation version(1, 5, git_revision).
private fun construct_condition(v: ContractsVisitor): AExpr

nitc :: AAnnotation :: construct_condition

Returns the conditions of annotation parameters. If there are several parameters, the result is an AAndExpr
init init_aannotation(n_doc: nullable ADoc, n_kwredef: nullable TKwredef, n_visibility: nullable AVisibility, n_atid: nullable AAtid, n_opar: nullable TOpar, n_args: Collection[Object], n_cpar: nullable TCpar, n_annotations: nullable AAnnotations)

nitc :: AAnnotation :: init_aannotation

private init make(n_args: ANodes[AExpr])

nitc :: AAnnotation :: make

fun n_args: ANodes[AExpr]

nitc :: AAnnotation :: n_args

The list of arguments
protected fun n_args=(n_args: ANodes[AExpr])

nitc :: AAnnotation :: n_args=

The list of arguments
fun n_atid: AAtid

nitc :: AAnnotation :: n_atid

The name of the annotation
fun n_atid=(n_atid: AAtid)

nitc :: AAnnotation :: n_atid=

The name of the annotation
fun n_cpar: nullable TCpar

nitc :: AAnnotation :: n_cpar

The closing parenthesis
fun n_cpar=(n_cpar: nullable TCpar)

nitc :: AAnnotation :: n_cpar=

The closing parenthesis
fun n_opar: nullable TOpar

nitc :: AAnnotation :: n_opar

The opening parenthesis of the arguments
fun n_opar=(n_opar: nullable TOpar)

nitc :: AAnnotation :: n_opar=

The opening parenthesis of the arguments
fun name: String

nitc :: AAnnotation :: name

The name of the annotation

Redefined properties

redef type SELF: AAnnotation

nitc $ AAnnotation :: SELF

Type of this instance, automatically specialized in every class
redef fun accept_pretty_printer(v: PrettyPrinterVisitor)

nitc :: pretty $ AAnnotation :: accept_pretty_printer

Start visit of self using a PrettyPrinterVisitor
redef fun n_annotations=(node: nullable AAnnotations)

nitc :: parser_prod $ AAnnotation :: n_annotations=

All the annotations attached directly to the node
redef fun n_atid=(node: AAtid)

nitc :: parser_prod $ AAnnotation :: n_atid=

The name of the annotation
redef fun n_cpar=(node: nullable TCpar)

nitc :: parser_prod $ AAnnotation :: n_cpar=

The closing parenthesis
redef fun n_doc=(node: nullable ADoc)

nitc :: parser_prod $ AAnnotation :: n_doc=

The documentation
redef fun n_kwredef=(node: nullable TKwredef)

nitc :: parser_prod $ AAnnotation :: n_kwredef=

The redef keyword
redef fun n_opar=(node: nullable TOpar)

nitc :: parser_prod $ AAnnotation :: n_opar=

The opening parenthesis of the arguments
redef fun n_visibility=(node: nullable AVisibility)

nitc :: parser_prod $ AAnnotation :: n_visibility=

The declared visibility
redef fun replace_child(old_child: ANode, new_child: nullable ANode)

nitc :: parser_prod $ AAnnotation :: replace_child

Replace a child with an other node in the AST
redef fun visit_all(v: Visitor)

nitc :: parser_prod $ AAnnotation :: visit_all

Visit all nodes in order.

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 _first_location: nullable Location

nitc :: Prod :: _first_location

Location on the first token after the start of a production
private var _first_token: nullable Token

nitc :: Prod :: _first_token

The first token of the production in the AST
private var _force_block: Bool

nitc :: ANode :: _force_block

Force self to be rendered as a block.
private var _force_inline: Bool

nitc :: ANode :: _force_inline

Force self to be rendered as a line.
private var _is_broken: Bool

nitc :: ANode :: _is_broken

The indication that the node did not pass some semantic verifications.
private var _last_token: nullable Token

nitc :: Prod :: _last_token

The last token of the production in the AST
private var _location: Location

nitc :: ANode :: _location

Location is set during AST building. Once built, location can not be null.
private var _n_annotations: nullable AAnnotations

nitc :: Prod :: _n_annotations

All the annotations attached directly to the node
private var _n_args: ANodes[AExpr]

nitc :: AAnnotation :: _n_args

The list of arguments
private var _n_atid: AAtid

nitc :: AAnnotation :: _n_atid

The name of the annotation
private var _n_cpar: nullable TCpar

nitc :: AAnnotation :: _n_cpar

The closing parenthesis
private var _n_doc: nullable ADoc

nitc :: ADefinition :: _n_doc

The documentation
private var _n_kwredef: nullable TKwredef

nitc :: ADefinition :: _n_kwredef

The redef keyword
private var _n_opar: nullable TOpar

nitc :: AAnnotation :: _n_opar

The opening parenthesis of the arguments
private var _n_visibility: nullable AVisibility

nitc :: ADefinition :: _n_visibility

The declared visibility
private var _parent: nullable ANode

nitc :: ANode :: _parent

Parent of the node in the AST
fun accept_forward_analysis(v: ForwardAnalysis)

nitc :: ANode :: accept_forward_analysis

Apply the forward analysis v to self.
private abstract fun accept_pretty_printer(v: PrettyPrinterVisitor)

nitc :: ANode :: accept_pretty_printer

Start visit of self using a PrettyPrinterVisitor
fun accept_reaching_defs(v: ReachingDefsAnalysis)

nitc :: ANode :: accept_reaching_defs

Apply a ReachingDefsAnalysis to self.
fun arg_as_id(modelbuilder: ModelBuilder): nullable String

nitc :: AAnnotation :: arg_as_id

Get the single argument of self as an identifier.
fun arg_as_int(modelbuilder: ModelBuilder): nullable Int

nitc :: AAnnotation :: arg_as_int

Get the single argument of self as an Int.
fun arg_as_string(modelbuilder: ModelBuilder): nullable String

nitc :: AAnnotation :: arg_as_string

Get the single argument of self as a String.
private fun as_relative_paths(modelbuilder: ModelBuilder): Array[String]

nitc :: AAnnotation :: as_relative_paths

Parse all arguments as paths relative to the declaring module
private fun as_version(modelbuilder: ModelBuilder): String

nitc :: AAnnotation :: as_version

Returns a version string (example: "1.5.6b42a7c") from an annotation version(1, 5, git_revision).
private fun bad_expr_message(child: AExpr): nullable String

nitc :: ANode :: bad_expr_message

An additional information message to explain the role of a child expression.
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.
abstract fun clone: SELF

core :: Cloneable :: clone

Duplicate self
fun collect_annotations_by_name(name: String): Array[AAnnotation]

nitc :: ANode :: collect_annotations_by_name

Do a deep search and return an array of node that are annotated
private fun collect_comments: Array[TComment]

nitc :: Prod :: collect_comments

Collect all TComment contained in the production
private abstract fun collect_length: Int

nitc :: ANode :: collect_length

Collect the length (in Char) of the node.
fun collect_text: String

nitc :: Prod :: collect_text

Join the text of all visited tokens
fun collect_tokens_by_text(text: String): Array[Token]

nitc :: ANode :: collect_tokens_by_text

Do a deep search and return an array of tokens that match a given text
fun common_parent(other: ANode): nullable ANode

nitc :: ANode :: common_parent

The most specific common parent between self and other
private fun construct_condition(v: ContractsVisitor): AExpr

nitc :: AAnnotation :: construct_condition

Returns the conditions of annotation parameters. If there are several parameters, the result is an AAndExpr
fun debug(message: String)

nitc :: ANode :: debug

Display a message for the colored location of the node
protected fun decorate_tag(v: HtmlightVisitor, res: HTMLTag, token: Token): nullable HInfoBox

nitc :: ANode :: decorate_tag

Add aditionnal information on a child-token and return an additionnal HInfoBox on it
fun depth: Int

nitc :: ANode :: depth

Number of nodes between self and the root of the AST
fun detach

nitc :: ANode :: detach

Detach a node from its parent
private fun do_cloneable(v: CloneVisitor)

nitc :: ANode :: do_cloneable

fun dump_info(v: ASTDump): String

nitc :: ANode :: dump_info

Information to display on a node
fun dump_tree(display_structural: nullable Bool, display_line: nullable Bool)

nitc :: ANode :: dump_tree

Write the subtree on stdout.
fun fatal(v: NaiveInterpreter, message: String)

nitc :: ANode :: fatal

Aborts the program with a message
fun first_location: nullable Location

nitc :: Prod :: first_location

Location on the first token after the start of a production
protected fun first_location=(first_location: nullable Location)

nitc :: Prod :: first_location=

Location on the first token after the start of a production
fun first_token: nullable Token

nitc :: Prod :: first_token

The first token of the production in the AST
protected fun first_token=(first_token: nullable Token)

nitc :: Prod :: first_token=

The first token of the production in the AST
private fun force_block: Bool

nitc :: ANode :: force_block

Force self to be rendered as a block.
private fun force_block=(force_block: Bool)

nitc :: ANode :: force_block=

Force self to be rendered as a block.
private fun force_inline: Bool

nitc :: ANode :: force_inline

Force self to be rendered as a line.
private fun force_inline=(force_inline: Bool)

nitc :: ANode :: force_inline=

Force self to be rendered as a line.
fun get_annotations(name: String): Array[AAnnotation]

nitc :: Prod :: get_annotations

Return all its annotations of a given name in the order of their declaration
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun get_single_annotation(name: String, modelbuilder: ModelBuilder): nullable AAnnotation

nitc :: Prod :: get_single_annotation

Try to get its single annotation with a given name
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun hot_location: Location

nitc :: ANode :: hot_location

The location of the important part of the node (identifier or whatever)
fun infobox(v: HtmlightVisitor): nullable HInfoBox

nitc :: ANode :: infobox

Return a optional infobox
init init

core :: Object :: init

init init_aannotation(n_doc: nullable ADoc, n_kwredef: nullable TKwredef, n_visibility: nullable AVisibility, n_atid: nullable AAtid, n_opar: nullable TOpar, n_args: Collection[Object], n_cpar: nullable TCpar, n_annotations: nullable AAnnotations)

nitc :: AAnnotation :: init_aannotation

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
fun is_block: Bool

nitc :: Prod :: is_block

Is the production contained in full block of line?
fun is_broken: Bool

nitc :: ANode :: is_broken

The indication that the node did not pass some semantic verifications.
fun is_broken=(is_broken: Bool)

nitc :: ANode :: is_broken=

The indication that the node did not pass some semantic verifications.
private fun is_inlinable: Bool

nitc :: ANode :: is_inlinable

Is self printable in one line?
private fun is_noserialize: Bool

nitc :: ANode :: is_noserialize

Is this node annotated to not be made serializable?
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 fun is_serialize: Bool

nitc :: ANode :: is_serialize

Is this node annotated to be made serializable?
fun is_span: Bool

nitc :: Prod :: is_span

Is the production a part of a single line (without being a block)
fun is_structural: Bool

nitc :: ANode :: is_structural

Is self a token or a pure-structural production like AQId?
fun last_token: nullable Token

nitc :: Prod :: last_token

The last token of the production in the AST
protected fun last_token=(last_token: nullable Token)

nitc :: Prod :: last_token=

The last token of the production in the AST
fun location: Location

nitc :: ANode :: location

Location is set during AST building. Once built, location can not be null.
fun location=(location: Location)

nitc :: ANode :: location=

Location is set during AST building. Once built, location can not be null.
private init make(n_args: ANodes[AExpr])

nitc :: AAnnotation :: make

protected fun make_tag(v: HtmlightVisitor): nullable HTMLTag

nitc :: ANode :: make_tag

Optionally creates a tag that encapsulate the AST element on HTML rendering
private fun must_be_block: Bool

nitc :: ANode :: must_be_block

Does self have to be rendered as a block?
private fun must_be_inline: Bool

nitc :: ANode :: must_be_inline

Does self have be rendered as a line?
fun n_annotations: nullable AAnnotations

nitc :: Prod :: n_annotations

All the annotations attached directly to the node
fun n_annotations=(n_annotations: nullable AAnnotations)

nitc :: Prod :: n_annotations=

All the annotations attached directly to the node
fun n_args: ANodes[AExpr]

nitc :: AAnnotation :: n_args

The list of arguments
protected fun n_args=(n_args: ANodes[AExpr])

nitc :: AAnnotation :: n_args=

The list of arguments
fun n_atid: AAtid

nitc :: AAnnotation :: n_atid

The name of the annotation
fun n_atid=(n_atid: AAtid)

nitc :: AAnnotation :: n_atid=

The name of the annotation
fun n_cpar: nullable TCpar

nitc :: AAnnotation :: n_cpar

The closing parenthesis
fun n_cpar=(n_cpar: nullable TCpar)

nitc :: AAnnotation :: n_cpar=

The closing parenthesis
fun n_doc: nullable ADoc

nitc :: ADefinition :: n_doc

The documentation
fun n_doc=(n_doc: nullable ADoc)

nitc :: ADefinition :: n_doc=

The documentation
fun n_kwredef: nullable TKwredef

nitc :: ADefinition :: n_kwredef

The redef keyword
fun n_kwredef=(n_kwredef: nullable TKwredef)

nitc :: ADefinition :: n_kwredef=

The redef keyword
fun n_opar: nullable TOpar

nitc :: AAnnotation :: n_opar

The opening parenthesis of the arguments
fun n_opar=(n_opar: nullable TOpar)

nitc :: AAnnotation :: n_opar=

The opening parenthesis of the arguments
fun n_visibility: nullable AVisibility

nitc :: ADefinition :: n_visibility

The declared visibility
fun n_visibility=(n_visibility: nullable AVisibility)

nitc :: ADefinition :: n_visibility=

The declared visibility
fun name: String

nitc :: AAnnotation :: name

The name of the annotation
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 parent: nullable ANode

nitc :: ANode :: parent

Parent of the node in the AST
protected fun parent=(parent: nullable ANode)

nitc :: ANode :: parent=

Parent of the node in the AST
fun parentize_tokens

nitc :: ANode :: parentize_tokens

Visit the AST and computes advanced AST attributes on Tokens and Prod
private abstract fun replace_child(old_child: ANode, new_child: nullable ANode)

nitc :: ANode :: replace_child

Replace a child with an other node in the AST
fun replace_clone

nitc :: ANode :: replace_clone

Create a new clone of self
fun replace_with(node: ANode)

nitc :: ANode :: replace_with

Replace itself with an other node in the AST
fun root: ANode

nitc :: ANode :: root

The topmost ancestor of the element
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
private fun start_token: nullable Token

nitc :: Prod :: start_token

The token where the production really start (skipping ADoc).
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 to_xml: HTMLTag

nitc :: Prod :: to_xml

A XML representation of the AST
fun validate

nitc :: ANode :: validate

Recursively validate a AST node.
abstract fun visit_all(v: Visitor)

nitc :: ANode :: visit_all

Visit all nodes in order.
private abstract fun was_inline: Bool

nitc :: ANode :: was_inline

Does self was written in one line before transformation?
package_diagram nitc::AAnnotation AAnnotation nitc::ADefinition ADefinition nitc::AAnnotation->nitc::ADefinition nitc::Prod Prod nitc::ADefinition->nitc::Prod ...nitc::Prod ... ...nitc::Prod->nitc::Prod nitc::AAnnotPropdef AAnnotPropdef nitc::AAnnotPropdef->nitc::AAnnotation

Ancestors

abstract class ANode

nitc :: ANode

Root of the AST class-hierarchy
interface Cloneable

core :: Cloneable

Something that can be cloned
interface Object

core :: Object

The root of the class hierarchy.
abstract class Prod

nitc :: Prod

Ancestor of all productions

Parents

abstract class ADefinition

nitc :: ADefinition

Abstract class for definition of entities

Children

Class definitions

nitc $ AAnnotation
# A single annotation
class AAnnotation
	super ADefinition

	# The name of the annotation
	var n_atid: AAtid is writable, noinit

	# The opening parenthesis of the arguments
	var n_opar: nullable TOpar = null is writable

	# The list of arguments
	var n_args = new ANodes[AExpr](self)

	# The closing parenthesis
	var n_cpar: nullable TCpar = null is writable

	# The name of the annotation
	fun name: String
	do
		return n_atid.n_id.text
	end
end
src/parser/parser_nodes.nit:3077,1--3098,3

nitc :: parser_prod $ AAnnotation
redef class AAnnotation
	init init_aannotation (
		n_doc: nullable ADoc,
		n_kwredef: nullable TKwredef,
		n_visibility: nullable AVisibility,
		n_atid: nullable AAtid,
		n_opar: nullable TOpar,
		n_args: Collection[Object], # Should be Collection[AExpr]
		n_cpar: nullable TCpar,
		n_annotations: nullable AAnnotations
	)
	do
		_n_doc = n_doc
		if n_doc != null then n_doc.parent = self
		_n_kwredef = n_kwredef
		if n_kwredef != null then n_kwredef.parent = self
		_n_visibility = n_visibility
		if n_visibility != null then n_visibility.parent = self
		_n_atid = n_atid.as(not null)
		n_atid.parent = self
		_n_opar = n_opar
		if n_opar != null then n_opar.parent = self
		self.n_args.unsafe_add_all(n_args)
		_n_cpar = n_cpar
		if n_cpar != null then n_cpar.parent = self
		_n_annotations = n_annotations
		if n_annotations != null then n_annotations.parent = self
	end

	redef fun replace_child(old_child: ANode, new_child: nullable ANode)
	do
		if _n_doc == old_child then
			n_doc = new_child.as(nullable ADoc)
			return
		end
		if _n_kwredef == old_child then
			n_kwredef = new_child.as(nullable TKwredef)
			return
		end
		if _n_visibility == old_child then
			n_visibility = new_child.as(nullable AVisibility)
			return
		end
		if _n_atid == old_child then
			n_atid = new_child.as(AAtid)
			return
		end
		if _n_opar == old_child then
			n_opar = new_child.as(nullable TOpar)
			return
		end
		if n_args.replace_child(old_child, new_child) then return
		if _n_cpar == old_child then
			n_cpar = new_child.as(nullable TCpar)
			return
		end
		if _n_annotations == old_child then
			n_annotations = new_child.as(nullable AAnnotations)
			return
		end
	end

	redef fun n_doc=(node)
	do
		_n_doc = node
		if node != null then node.parent = self
	end
	redef fun n_kwredef=(node)
	do
		_n_kwredef = node
		if node != null then node.parent = self
	end
	redef fun n_visibility=(node)
	do
		_n_visibility = node
		if node != null then node.parent = self
	end
	redef fun n_atid=(node)
	do
		_n_atid = node
		node.parent = self
	end
	redef fun n_opar=(node)
	do
		_n_opar = node
		if node != null then node.parent = self
	end
	redef fun n_cpar=(node)
	do
		_n_cpar = node
		if node != null then node.parent = self
	end
	redef fun n_annotations=(node)
	do
		_n_annotations = node
		if node != null then node.parent = self
	end


	redef fun visit_all(v: Visitor)
	do
		v.enter_visit(_n_doc)
		v.enter_visit(_n_kwredef)
		v.enter_visit(_n_visibility)
		v.enter_visit(_n_atid)
		v.enter_visit(_n_opar)
		n_args.visit_all(v)
		v.enter_visit(_n_cpar)
		v.enter_visit(_n_annotations)
	end
end
src/parser/parser_prod.nit:8698,1--8808,3

nitc :: annotation $ AAnnotation
redef class AAnnotation
	# Get the single argument of `self` as a `String`.
	# Raise error and return null on any inconsistency.
	fun arg_as_string(modelbuilder: ModelBuilder): nullable String
	do
		var args = n_args
		if args.length == 1 then
			var arg = args.first.as_string
			if arg != null then return arg
		end

		modelbuilder.error(self, "Syntax Error: `{name}` expects a single String as argument.")
		return null
	end

	# Get the single argument of `self` as an `Int`.
	# Raise error and return null on any inconsistency.
	fun arg_as_int(modelbuilder: ModelBuilder): nullable Int
	do
		var args = n_args
		if args.length == 1 then
			var arg = args.first.as_int
			if arg != null then return arg
		end

		modelbuilder.error(self, "Syntax Error: `{name}` expects a single Int as argument.")
		return null
	end

	# Get the single argument of `self` as an identifier.
	# Raise error and return null on any inconsistency.
	fun arg_as_id(modelbuilder: ModelBuilder): nullable String
	do
		var args = n_args
		if args.length == 1 then
			var arg = args.first.as_id
			if arg != null then return arg
		end

		modelbuilder.error(self, "Syntax Error: `{name}` expects a single identifier as argument.")
		return null
	end
end
src/annotation.nit:39,1--81,3

nitc :: pretty $ AAnnotation
redef class AAnnotation
	redef fun accept_pretty_printer(v) do
		if n_visibility != null and not n_visibility isa APublicVisibility then
			v.visit n_visibility
			v.adds
		end
		v.visit n_atid
		v.visit_args n_args
	end
end
src/pretty.nit:535,1--544,3

nitc :: app_annotations $ AAnnotation
redef class AAnnotation
	# Returns a version string (example: "1.5.6b42a7c") from an annotation `version(1, 5, git_revision)`.
	#
	# The user can enter as many fields as needed. The call to `git_revision` will be replaced by the short
	# revision number. If the working tree is dirty, it will append another field with "d" for dirty.
	private fun as_version(modelbuilder: ModelBuilder): String
	do
		var version_fields = new Array[Object]

		var args = n_args
		if args.length < 1 then
			modelbuilder.error(self, "Syntax Error: `{name}` expects at least one argument.")
			return ""
		else
			for arg in args do
				var value
				value = arg.as_int
				if value != null then
					version_fields.add value
					continue
				end

				value = arg.as_string
				if value != null then
					version_fields.add value
				end

				value = arg.as_id
				if value == "git_revision" then
					# Get Git short revision
					var proc = new ProcessReader("git", "rev-parse", "--short", "HEAD")
					proc.wait
					if proc.status != 0 then
						# Fallback if this is not a git repository or git bins are missing
						version_fields.add "0"
						modelbuilder.warning(self, "git_revision", "Warning: `git_revision` used outside of a git repository or git binaries not available")
						continue
					end

					var lines = proc.read_all
					var revision = lines.split("\n").first

					# Is it dirty?
					# If not, the return of `git diff --shortstat` is an empty line
					proc = new ProcessReader("git", "diff-index", "--quiet", "HEAD")
					proc.wait
					var dirty = proc.status != 0
					if dirty then revision += ".d"

					version_fields.add revision
					continue
				end

				var format_error = "Syntax Error: `{name}` expects its arguments to be of type Int or a call to `git_revision`."
				modelbuilder.error(self, format_error)
				return ""
			end
		end

		return version_fields.join(".")
	end

	# Parse all arguments as paths relative to the declaring module
	#
	# If no arguments are given, then use the parent directory of the module.
	private fun as_relative_paths(modelbuilder: ModelBuilder): Array[String]
	do
		var paths = new Array[String]

		var file = location.file
		if file == null then return paths

		var args = n_args
		if args.is_empty then
			paths.add file.filename.dirname
		else
			for arg in args do
				var val = arg.as_string
				if val != null then
					paths.add file.filename.dirname/val
				else modelbuilder.error(arg, "Syntax Error: `app_files` expects String literals as arguments.")
			end
		end

		return paths
	end
end
src/platform/app_annotations.nit:82,1--168,3

nitc :: astbuilder $ AAnnotation
redef class AAnnotation

	redef fun accept_ast_validation(v)
	do
		# Do not enter in annotations
	end

	private init make(n_args : ANodes[AExpr])
	do
		_n_visibility = new APublicVisibility
		_n_args = n_args
	end
end
src/astbuilder.nit:935,1--947,3

nitc :: contracts $ AAnnotation
redef class AAnnotation

	# Returns the conditions of annotation parameters. If there are several parameters, the result is an `AAndExpr`
	# Example:
	# the contract `ensure(true, i == 10, f >= 1.0)`
	# return this condition `(true and i == 10 and f >= 1.0)`
	private fun construct_condition(v : ContractsVisitor): AExpr
	do
		var n_condition = n_args.first
		n_args.remove_at(0)
		for n_arg in n_args do n_condition = v.ast_builder.make_and(n_condition, n_arg)
		return n_condition
	end
end
src/contracts.nit:289,1--302,3