## @file # (Enter your file info here) # # @copy 2007 MailerMailer LLC # $Id: ClassData.pm 437 2008-05-06 14:22:02Z damjan $ ## @class RWDE::Doxy::ClassData # This class stores an intermediate representation of a class (or package). package RWDE::Doxy::ClassData; use strict; use warnings; use Error qw(:try); use RWDE::Exceptions; use RWDE::Doxy::MethodData; use base qw(RWDE::RObject); our (%fields, %static_fields, %modifiable_fields, @fieldnames, @static_fieldnames, @modifiable_fieldnames); BEGIN { #all of the static fields present %static_fields = ( # Field => [Type, Descr] ); #all of the fields allowed to be modified %modifiable_fields = ( # Field => [Type, Descr] class_name => [ 'char', 'Name of the class' ], class_methods => [ 'hash', 'Hash of methods for this class. The keys will be the method names and the values will be corresponding MethodData objects' ], #Array is used for class_info because we need to preserver order. class_info => [ 'array', 'list of all of the doxygen info lines that existed in the source file_content' ] ); %fields = (%static_fields, %modifiable_fields); @static_fieldnames = sort keys %static_fields; @modifiable_fieldnames = sort keys %modifiable_fields; @fieldnames = sort keys %fields; } ## @method void initialize($class_name) # (Enter initialize info here) # @param class_name (Enter explanation for param here) sub initialize() { my ($self, $params) = @_; $self->class_name($$params{class_name}); $self->class_methods({}); $self->class_info([]); return (); } #Create a new class data object and add it to file_classes hash ## @method object add_new_method() # (Enter add_new_method info here) # @return (Enter explanation for return value here) sub add_new_method() { my ($self, $params) = @_; my $method_data = new RWDE::Doxy::MethodData($params); $self->class_methods->{ $method_data->method_name } = $method_data; return $method_data; } #Add a param to the parameter list ## @method void add_info($info_line) # (Enter add_info info here) # @param info_line (Enter explanation for param here) sub add_info() { my ($self, $params) = @_; throw RWDE::DataMissingException({ info => 'No info line to add to info_list' }) unless defined($$params{info_line}); my $class_info = $self->class_info; push(@{$class_info}, $$params{info_line}); return (); } ## @method object get_method($method_name) # Returns the class_method object for a class name or creates and returns a new one if one does not exists. # @param method_name (Enter explanation for param here) # @return (Enter explanation for return value here) sub get_method() { my ($self, $params) = @_; my @required = qw( method_name ); $self->check_params({ required => \@required, supplied => $params }); my $method_data; if (not defined($self->class_methods->{ $$params{method_name} })) { $method_data = $self->add_new_method({ method_name => $$params{method_name} }); } else { $method_data = $self->class_methods->{ $$params{method_name} }; } return $method_data; } 1;