comparison Lib/IMPL/Class/PropertyInfo.pm @ 0:03e58a454b20

Создан репозитарий
author Sergey
date Tue, 14 Jul 2009 12:54:37 +0400
parents
children e59f44f75f20
comparison
equal deleted inserted replaced
-1:000000000000 0:03e58a454b20
1 package IMPL::Class::PropertyInfo;
2 use strict;
3
4 use base qw(IMPL::Class::MemberInfo);
5
6 __PACKAGE__->mk_accessors(qw(Type Mutators canGet canSet));
7 __PACKAGE__->PassThroughArgs;
8
9 our @Implementors = ( ['IMPL::Object' => 'IMPL::Class::Property::Direct'] );
10
11 my %LoadedModules;
12
13 sub CTOR {
14 my $this = shift;
15
16 my $implementor = $this->Implementor($this->SelectImplementor());
17 if (my $class = ref $implementor ? undef : $implementor) {
18 if (not $LoadedModules{$class}) {
19 (my $package = $class.'.pm') =~ s/::/\//g;
20 require $package;
21 $LoadedModules{$class} = 1;
22 }
23 }
24
25 $this->Mutators(0) unless defined $this->Mutators;
26 }
27
28 sub SelectImplementor {
29 my ($this) = @_;
30
31 foreach my $item (@Implementors) {
32 return $item->[1] if $this->Class->isa($item->[0]);
33 }
34
35 die new IMPL::Exception('Can\'t find a property implementor for the specified class',$this->Class);
36 }
37
38 1;