#NEWLINE# def computeExpressionAttribute( self , lookup_node , attribute_name , constraint_collection ) : #NEWLINE# #INDENT# value = self . getCompileTimeConstant ( ) #NEWLINE# if ( self . computed_attribute is None ) : #NEWLINE# #INDENT# self . computed_attribute = hasattr ( value , attribute_name ) #NEWLINE# #UNINDENT# if ( ( not constraint_collection . computed_attribute ) or isCompileTimeConstantValue ( getattr ( value , attribute_name ) ) ) : #NEWLINE# #INDENT# return constraint_collection . getCompileTimeComputationResult ( node = lookup_node , computation = ( lambda : getattr ( value , attribute_name ) ) , description = ( "Attribute lookup to '%s' pre-computed." % attribute_name ) ) #NEWLINE# #UNINDENT# return ( lookup_node , None , None )