NAME
Class::MOP::Immutable - A class to transform Class::MOP::Class metaclasses
SYNOPSIS
use Class::MOP::Immutable;
my $immutable_metaclass = Class::MOP::Immutable->new($metaclass, {
read_only => [qw/superclasses/],
cannot_call => [qw/
add_method
alias_method
remove_method
add_attribute
remove_attribute
add_package_symbol
remove_package_symbol
/],
memoize => {
class_precedence_list => 'ARRAY',
get_all_attributes => 'ARRAY',
get_meta_instance => 'SCALAR',
get_method_map => 'SCALAR',
}
});
$immutable_metaclass->make_metaclass_immutable;
DESCRIPTION
This class encapsulates the logic behind immutabilization.
This class provides generic immutabilization logic. Decisions about what gets transformed are up to the caller.
Immutabilization allows for a number of transformations. It can ask the calling metaclass to inline methods such as the constructor, destructor, or accessors. It can memoize metaclass accessors themselves. It can also turn read-write accessors in the metaclass into read-only methods, and make attempting to set these values an error. Finally, it can make some methods throw an exception when they are called. This is used to disable methods that can alter the class.
METHODS
- Class::MOP::Immutable->new($metaclass, %options)
-
This method takes a metaclass object (typically a Class::MOP::Class object) and a hash of options.
It returns a new transformer, but does not actually do any transforming yet.
This method accepts the following options:
inline_accessors
inline_constructor
inline_destructor
These are all booleans indicating whether the specified method(s) should be inlined.
By default, accessors and the constructor are inlined, but not the destructor.
replace_constructor
This is a boolean indicating whether an existing constructor should be replaced when inlining a constructor. This defaults to false.
constructor_name
This is the constructor method name. This defaults to "new".
constructor_class
The name of the method metaclass for constructors. It will be used to generate the inlined constructor. This defaults to "Class::MOP::Method::Constructor".
destructor_class
The name of the method metaclass for destructors. It will be used to generate the inlined destructor. This defaults to "Class::MOP::Method::Denstructor".
memoize
This option takes a hash reference. They keys are method names to be memoized, and the values are the type of data the method returns. This can be one of "SCALAR", "ARRAY", or "HASH".
read_only
This option takes an array reference of read-write methods which will be made read-only. After they are transformed, attempting to set them will throw an error.
cannot_call
This option takes an array reference of methods which cannot be called after immutabilization. Attempting to call these methods will throw an error.
wrapped
This option takes a hash reference. The keys are method names and the body is a subroutine reference which will wrap the named method. This allows you to do some sort of custom transformation to a method.
- $transformer->options
-
Returns a hash reference of the options passed to
new
. - $transformer->metaclass
-
Returns the metaclass object passed to
new
. - $transformer->immutable_metaclass
-
Returns the immutable metaclass object that is created by the transformation process.
- $transformer->inlined_constructor
-
If the constructor was inlined, this returns the constructor method object that was created to do this.
- $transformer->make_metaclass_immutable
-
Makes the transformer's metaclass immutable.
- $transformer->make_metaclass_mutable
-
Makes the transformer's metaclass mutable.
AUTHORS
Stevan Little <stevan@iinteractive.com>
COPYRIGHT AND LICENSE
Copyright 2006-2009 by Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.