annotate Lib/IMPL/Class/PropertyInfo.pm @ 228:431db7034a88

Для синхронизации
author andrei <andrei@nap21.upri>
date Thu, 13 Sep 2012 17:55:01 +0400
parents a8db61d0ed33
children 6d8092d8ce1b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
1 package IMPL::Class::PropertyInfo;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
2 use strict;
163
6ce1f052b90a temp commit
wizard
parents: 134
diff changeset
3 use IMPL::_core::version;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
4
228
431db7034a88 Для синхронизации
andrei <andrei@nap21.upri>
parents: 209
diff changeset
5 use parent qw(IMPL::Class::MemberInfo);
431db7034a88 Для синхронизации
andrei <andrei@nap21.upri>
parents: 209
diff changeset
6
431db7034a88 Для синхронизации
andrei <andrei@nap21.upri>
parents: 209
diff changeset
7 our %CTOR = ( 'IMPL::Class::MemberInfo' => '@_' );
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
8
60
b0c068da93ac Lazy activation for the configuration objects (final concept)
wizard
parents: 49
diff changeset
9 __PACKAGE__->mk_accessors(qw(Type Mutators canGet canSet ownerSet));
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
10
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
11 my %LoadedModules;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
12
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
13 sub CTOR {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
14 my $this = shift;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
15
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
16 if ( my $type = $this->Attributes ? delete $this->Attributes->{type} : undef ) {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
17 $this->Type($type);
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
18 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
19
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
20 $this->Mutators(0) unless defined $this->Mutators;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
21 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
22
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
23 sub Implementor {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
24 my $this = shift;
134
44977efed303 Significant performance optimizations
wizard
parents: 60
diff changeset
25
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
26 if (@_) {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
27 $this->SUPER::Implementor(@_);
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
28 } else {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
29 my $implementor = $this->SUPER::Implementor;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
30 return $implementor if $implementor;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
31
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
32 $implementor = $this->SelectImplementor();
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
33
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
34 if (my $class = ref $implementor ? undef : $implementor) {
134
44977efed303 Significant performance optimizations
wizard
parents: 60
diff changeset
35 eval "require $class; 1;" or die $@ unless $LoadedModules{$class}++;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
36 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
37
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
38 $this->Implementor($implementor);
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
39 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
40
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
41 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
42
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
43 sub SelectImplementor {
134
44977efed303 Significant performance optimizations
wizard
parents: 60
diff changeset
44 eval {$_[0]->Class->_PropertyImplementor} or die new IMPL::Exception('Can\'t find a property implementor for the specified class',$_[0]->Class);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
45 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
46
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 27
diff changeset
47 1;
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
48
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
49 __END__
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
50
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
51 =pod
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
52
209
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
53 =head1 NAME
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
54
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
55 C<IMPL::Class::PropertyInfo> - метаданные о свойствах объектов. Используются для отражения и
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
56 проверки данных объектов.
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
57
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
58 =head1 DESCRIPTION
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
59
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
60 В зависимости от типа каждый объект предоставляет способ хранения данных, например хеши позволяют
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
61 хранить состояние в виде ассоциативного массива и т.д. Информация о свойстве предоставляет определенный
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
62 уровень абстракции.
a8db61d0ed33 IMPL::Class::Meta refactoring
cin
parents: 180
diff changeset
63
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
64 =cut