# Implementation of the method-related annotation `cached`
#
-# Note this module can be used as a reference on how to implements
-# complex annotation that modify both the model and the AST of a Nit program
+# The cached annotation is deprecated, use the `lazy` annotation instead.
module cached
import modelize
private import parser_util
import simple_misc_analysis
private import annotation
+intrude import modelize::modelize_property
redef class ToolContext
+ # Process the `cached` annotation on methods
var cached_phase: Phase = new CachedPhase(self, [modelize_property_phase])
end
private class CachedPhase
super Phase
- init(toolcontext, depends)
+ init
do
# FIXME The phase has to be executed just after `modelize_property_phase`
# But there is no simple way to express this
# Sanity checks
assert nclassdef.mclassdef == mclassdef
+ if n isa AAttrPropdef then
+ n.has_value = n.n_expr != null or n.n_block != null
+ end
+
# Required so that propdef are visited in visitors
if not nclassdef.n_propdefs.has(n) then nclassdef.n_propdefs.add(n)
end