element/attribute form : specify options at registration optimization(to avoid double serializer initializations).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4230 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2015-07-30 19:11:41 +00:00
parent 9c0df635f8
commit d5f0b8a092
2 changed files with 33 additions and 12 deletions

View File

@ -1707,11 +1707,17 @@ type
procedure RegisterInitializer(AInitializer : TRemotableTypeInitializerClass); procedure RegisterInitializer(AInitializer : TRemotableTypeInitializerClass);
function IndexOf(Const ATypeInfo : PTypeInfo):Integer; function IndexOf(Const ATypeInfo : PTypeInfo):Integer;
function Add(AItem:TTypeRegistryItem):Integer; function Add(AItem:TTypeRegistryItem):Integer;
function Register(
const ANameSpace : string;
const ADataType : PTypeInfo;
const ADeclaredName : string;
const AOptions : TTypeRegistryItemOptions
):TTypeRegistryItem;overload;
function Register( function Register(
Const ANameSpace : String; Const ANameSpace : String;
Const ADataType : PTypeInfo; Const ADataType : PTypeInfo;
Const ADeclaredName : String = '' Const ADeclaredName : String = ''
):TTypeRegistryItem; ):TTypeRegistryItem;overload;
function Find(ATypeInfo : PTypeInfo; Const AExact : Boolean):TTypeRegistryItem;overload; function Find(ATypeInfo : PTypeInfo; Const AExact : Boolean):TTypeRegistryItem;overload;
function Find(const APascalTypeName : string):TTypeRegistryItem;overload; function Find(const APascalTypeName : string):TTypeRegistryItem;overload;
function FindByDeclaredName( function FindByDeclaredName(
@ -3444,7 +3450,7 @@ begin
FInitializerList.Add(AInitializer); FInitializerList.Add(AInitializer);
end; end;
function TTypeRegistry.IndexOf(Const ATypeInfo: PTypeInfo): Integer; function TTypeRegistry.IndexOf(const ATypeInfo: PTypeInfo): Integer;
var var
i : Integer; i : Integer;
begin begin
@ -3471,9 +3477,10 @@ begin
end; end;
function TTypeRegistry.Register( function TTypeRegistry.Register(
Const ANameSpace : String; const ANameSpace : string;
Const ADataType : PTypeInfo; const ADataType : PTypeInfo;
Const ADeclaredName : String = '' const ADeclaredName : string;
const AOptions : TTypeRegistryItemOptions
): TTypeRegistryItem; ): TTypeRegistryItem;
var var
i : Integer; i : Integer;
@ -3482,6 +3489,7 @@ begin
if ( i = -1 ) then begin if ( i = -1 ) then begin
Result := GetItemClassFor(ADataType).Create(Self,ANameSpace,ADataType,ADeclaredName); Result := GetItemClassFor(ADataType).Create(Self,ANameSpace,ADataType,ADeclaredName);
Add(Result); Add(Result);
Result.FOptions := Result.FOptions + AOptions;
Result.Init(); Result.Init();
{$IFDEF TRemotableTypeInitializer_Initialize} {$IFDEF TRemotableTypeInitializer_Initialize}
InitializeItem(Result); InitializeItem(Result);
@ -3491,7 +3499,17 @@ begin
end; end;
end; end;
function TTypeRegistry.Find(ATypeInfo : PTypeInfo; Const AExact : Boolean):TTypeRegistryItem; function TTypeRegistry.Register(
const ANameSpace : string;
const ADataType : PTypeInfo;
const ADeclaredName : string
) : TTypeRegistryItem;
begin
Result := Register(ANameSpace,ADataType,ADeclaredName,[]);
end;
function TTypeRegistry.Find(ATypeInfo: PTypeInfo; const AExact: Boolean
): TTypeRegistryItem;
Var Var
i : Integer; i : Integer;
searchClass : TClass; searchClass : TClass;

View File

@ -2644,7 +2644,7 @@ var
end; end;
var var
strBuffer : string; strBuffer, locFormOptionString : string;
begin begin
locParentIsEnum := False; locParentIsEnum := False;
locPropList := TObjectList.Create(False); locPropList := TObjectList.Create(False);
@ -2660,15 +2660,18 @@ begin
Indent(); WriteLn('end;'); Indent(); WriteLn('end;');
DecIndent(); DecIndent();
if (FFormOptions <> '') then
locFormOptionString := Format(',%s',[FFormOptions])
else
locFormOptionString := '';
FImpTempStream.Indent(); FImpTempStream.Indent();
strBuffer := Format( strBuffer := Format(
'%s.Register(%s,TypeInfo(%s),%s)', '%s.Register(%s,TypeInfo(%s),%s%s);',
[ sLOCAL_TYPE_REGISTER_REFERENCE,sNAME_SPACE,ASymbol.Name, [ sLOCAL_TYPE_REGISTER_REFERENCE,sNAME_SPACE,ASymbol.Name,
QuotedStr(SymbolTable.GetExternalName(ASymbol))] QuotedStr(SymbolTable.GetExternalName(ASymbol)),
locFormOptionString
]
); );
if (FFormOptions <> '') then
strBuffer := Format('%s.AddOptions(%s)',[strBuffer,FFormOptions]);
strBuffer := strBuffer + ';';
FImpTempStream.WriteLn(strBuffer); FImpTempStream.WriteLn(strBuffer);
SetCurrentStream(FImpStream); SetCurrentStream(FImpStream);