You've already forked lazarus-ccr
XSD parser : Better forwarded types parsing.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3938 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -1913,7 +1913,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TInftGenerator.WriteObjectArray(ASymbol : TPasArrayType);
|
procedure TInftGenerator.WriteObjectArray(ASymbol : TPasArrayType);
|
||||||
|
var
|
||||||
|
locElementTypeName : string;
|
||||||
begin
|
begin
|
||||||
|
locElementTypeName := FindActualType(ASymbol.ElType,SymbolTable).Name;
|
||||||
SetCurrentStream(FDecStream);
|
SetCurrentStream(FDecStream);
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteDocIfEnabled(ASymbol);
|
WriteDocIfEnabled(ASymbol);
|
||||||
@ -1922,10 +1925,10 @@ begin
|
|||||||
try
|
try
|
||||||
WriteLn('%s = class(TBaseObjectArrayRemotable)',[ASymbol.Name]);
|
WriteLn('%s = class(TBaseObjectArrayRemotable)',[ASymbol.Name]);
|
||||||
WriteLn('private');
|
WriteLn('private');
|
||||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[locElementTypeName]);
|
||||||
WriteLn('public');
|
WriteLn('public');
|
||||||
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
||||||
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[locElementTypeName]);
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
finally
|
finally
|
||||||
EndAutoIndent();
|
EndAutoIndent();
|
||||||
@ -1937,10 +1940,10 @@ begin
|
|||||||
WriteLn('{ %s }',[ASymbol.Name]);
|
WriteLn('{ %s }',[ASymbol.Name]);
|
||||||
|
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,locElementTypeName]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('Result := %s(Inherited GetItem(AIndex));',[ASymbol.ElType.Name]);
|
Indent();WriteLn('Result := %s(Inherited GetItem(AIndex));',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
@ -1948,13 +1951,16 @@ begin
|
|||||||
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('Result:= %s;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('Result:= %s;',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TInftGenerator.WriteSimpleTypeArray(ASymbol : TPasArrayType);
|
procedure TInftGenerator.WriteSimpleTypeArray(ASymbol : TPasArrayType);
|
||||||
|
var
|
||||||
|
locElementTypeName : string;
|
||||||
begin
|
begin
|
||||||
|
locElementTypeName := FindActualType(ASymbol.ElType,SymbolTable).Name;
|
||||||
SetCurrentStream(FDecStream);
|
SetCurrentStream(FDecStream);
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteDocIfEnabled(ASymbol);
|
WriteDocIfEnabled(ASymbol);
|
||||||
@ -1963,10 +1969,10 @@ begin
|
|||||||
try
|
try
|
||||||
WriteLn('%s = class(TBaseSimpleTypeArrayRemotable)',[ASymbol.Name]);
|
WriteLn('%s = class(TBaseSimpleTypeArrayRemotable)',[ASymbol.Name]);
|
||||||
WriteLn('private');
|
WriteLn('private');
|
||||||
Indent();WriteLn('FData : array of %s;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('FData : array of %s;',[locElementTypeName]);
|
||||||
WriteLn('private');
|
WriteLn('private');
|
||||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[locElementTypeName]);
|
||||||
Indent();WriteLn('procedure SetItem(AIndex: Integer; const AValue: %s);',[ASymbol.ElType.Name]);
|
Indent();WriteLn('procedure SetItem(AIndex: Integer; const AValue: %s);',[locElementTypeName]);
|
||||||
WriteLn('protected');
|
WriteLn('protected');
|
||||||
Indent();WriteLn('function GetLength():Integer;override;');
|
Indent();WriteLn('function GetLength():Integer;override;');
|
||||||
Indent();WriteLn('procedure SaveItem(AStore : IFormatterBase;const AName : String;const AIndex : Integer);override;');
|
Indent();WriteLn('procedure SaveItem(AStore : IFormatterBase;const AName : String;const AIndex : Integer);override;');
|
||||||
@ -1975,7 +1981,7 @@ begin
|
|||||||
Indent();WriteLn('class function GetItemTypeInfo():PTypeInfo;override;');
|
Indent();WriteLn('class function GetItemTypeInfo():PTypeInfo;override;');
|
||||||
Indent();WriteLn('procedure SetLength(const ANewSize : Integer);override;');
|
Indent();WriteLn('procedure SetLength(const ANewSize : Integer);override;');
|
||||||
Indent();WriteLn('procedure Assign(Source: TPersistent); override;');
|
Indent();WriteLn('procedure Assign(Source: TPersistent); override;');
|
||||||
Indent();WriteLn('property Item[AIndex:Integer] : %s read GetItem write SetItem; default;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('property Item[AIndex:Integer] : %s read GetItem write SetItem; default;',[locElementTypeName]);
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
finally
|
finally
|
||||||
EndAutoIndent();
|
EndAutoIndent();
|
||||||
@ -1987,7 +1993,7 @@ begin
|
|||||||
WriteLn('{ %s }',[ASymbol.Name]);
|
WriteLn('{ %s }',[ASymbol.Name]);
|
||||||
|
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,locElementTypeName]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('CheckIndex(AIndex);');
|
Indent();WriteLn('CheckIndex(AIndex);');
|
||||||
@ -1996,7 +2002,7 @@ begin
|
|||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteLn('procedure %s.SetItem(AIndex: Integer;const AValue: %S);',[ASymbol.Name,ASymbol.ElType.Name]);
|
WriteLn('procedure %s.SetItem(AIndex: Integer;const AValue: %S);',[ASymbol.Name,locElementTypeName]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('CheckIndex(AIndex);');
|
Indent();WriteLn('CheckIndex(AIndex);');
|
||||||
@ -2016,7 +2022,7 @@ begin
|
|||||||
WriteLn('procedure %s.SaveItem(AStore: IFormatterBase;const AName: String; const AIndex: Integer);',[ASymbol.Name]);
|
WriteLn('procedure %s.SaveItem(AStore: IFormatterBase;const AName: String; const AIndex: Integer);',[ASymbol.Name]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('AStore.Put(%s,TypeInfo(%s),FData[AIndex]);',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol)),ASymbol.ElType.Name]);
|
Indent();WriteLn('AStore.Put(%s,TypeInfo(%s),FData[AIndex]);',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol)),locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
@ -2027,7 +2033,7 @@ begin
|
|||||||
Indent();WriteLn('sName : string;');
|
Indent();WriteLn('sName : string;');
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
Indent();WriteLn('sName := %s;',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol))]);
|
Indent();WriteLn('sName := %s;',[QuotedStr(SymbolTable.GetArrayItemName(ASymbol))]);
|
||||||
Indent();WriteLn('AStore.Get(TypeInfo(%s),sName,FData[AIndex]);',[ASymbol.ElType.Name]);
|
Indent();WriteLn('AStore.Get(TypeInfo(%s),sName,FData[AIndex]);',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
@ -2035,7 +2041,7 @@ begin
|
|||||||
WriteLn('class function %s.GetItemTypeInfo(): PTypeInfo;',[ASymbol.Name]);
|
WriteLn('class function %s.GetItemTypeInfo(): PTypeInfo;',[ASymbol.Name]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('Result := TypeInfo(%s);',[ASymbol.ElType.Name]);
|
Indent();WriteLn('Result := TypeInfo(%s);',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
@ -2081,7 +2087,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TInftGenerator.WriteObjectCollection(ASymbol : TPasArrayType);
|
procedure TInftGenerator.WriteObjectCollection(ASymbol : TPasArrayType);
|
||||||
|
var
|
||||||
|
locElementTypeName : string;
|
||||||
begin
|
begin
|
||||||
|
locElementTypeName := FindActualType(ASymbol.ElType,SymbolTable).Name;
|
||||||
SetCurrentStream(FDecStream);
|
SetCurrentStream(FDecStream);
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteDocIfEnabled(ASymbol);
|
WriteDocIfEnabled(ASymbol);
|
||||||
@ -2090,12 +2099,12 @@ begin
|
|||||||
try
|
try
|
||||||
WriteLn('%s = class(TObjectCollectionRemotable)',[ASymbol.Name]);
|
WriteLn('%s = class(TObjectCollectionRemotable)',[ASymbol.Name]);
|
||||||
WriteLn('private');
|
WriteLn('private');
|
||||||
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('function GetItem(AIndex: Integer): %s;',[locElementTypeName]);
|
||||||
WriteLn('public');
|
WriteLn('public');
|
||||||
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
Indent();WriteLn('class function GetItemClass():TBaseRemotableClass;override;');
|
||||||
Indent();WriteLn('function Add(): %s; {$IFDEF USE_INLINE}inline;{$ENDIF}',[ASymbol.ElType.Name]);
|
Indent();WriteLn('function Add(): %s; {$IFDEF USE_INLINE}inline;{$ENDIF}',[locElementTypeName]);
|
||||||
Indent();WriteLn('function AddAt(const APosition : Integer) : %s; {$IFDEF USE_INLINE}inline;{$ENDIF}',[ASymbol.ElType.Name]);
|
Indent();WriteLn('function AddAt(const APosition : Integer) : %s; {$IFDEF USE_INLINE}inline;{$ENDIF}',[locElementTypeName]);
|
||||||
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('property Item[AIndex:Integer] : %s Read GetItem;Default;',[locElementTypeName]);
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
finally
|
finally
|
||||||
EndAutoIndent();
|
EndAutoIndent();
|
||||||
@ -2107,10 +2116,10 @@ begin
|
|||||||
WriteLn('{ %s }',[ASymbol.Name]);
|
WriteLn('{ %s }',[ASymbol.Name]);
|
||||||
|
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
WriteLn('function %s.GetItem(AIndex: Integer): %s;',[ASymbol.Name,locElementTypeName]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('Result := %s(Inherited GetItem(AIndex));',[ASymbol.ElType.Name]);
|
Indent();WriteLn('Result := %s(Inherited GetItem(AIndex));',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
@ -2118,23 +2127,23 @@ begin
|
|||||||
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
WriteLn('class function %s.GetItemClass(): TBaseRemotableClass;',[ASymbol.Name]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('Result:= %s;',[ASymbol.ElType.Name]);
|
Indent();WriteLn('Result:= %s;',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteLn('function %s.Add() : %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
WriteLn('function %s.Add() : %s;',[ASymbol.Name,locElementTypeName]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('Result := %s(inherited Add());',[ASymbol.ElType.Name]);
|
Indent();WriteLn('Result := %s(inherited Add());',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
|
|
||||||
NewLine();
|
NewLine();
|
||||||
WriteLn('function %s.AddAt(const APosition : Integer) : %s;',[ASymbol.Name,ASymbol.ElType.Name]);
|
WriteLn('function %s.AddAt(const APosition : Integer) : %s;',[ASymbol.Name,locElementTypeName]);
|
||||||
WriteLn('begin');
|
WriteLn('begin');
|
||||||
IncIndent();
|
IncIndent();
|
||||||
Indent();WriteLn('Result := %s(inherited AddAt(APosition));',[ASymbol.ElType.Name]);
|
Indent();WriteLn('Result := %s(inherited AddAt(APosition));',[locElementTypeName]);
|
||||||
DecIndent();
|
DecIndent();
|
||||||
WriteLn('end;');
|
WriteLn('end;');
|
||||||
end;
|
end;
|
||||||
@ -2702,9 +2711,8 @@ var
|
|||||||
eltType : TPasType;
|
eltType : TPasType;
|
||||||
begin
|
begin
|
||||||
eltType := ASymbol.ElType;
|
eltType := ASymbol.ElType;
|
||||||
if eltType.InheritsFrom(TPasUnresolvedTypeRef) then begin
|
if eltType.InheritsFrom(TPasUnresolvedTypeRef) then
|
||||||
eltType := SymbolTable.FindElement(SymbolTable.GetExternalName(eltType)) as TPasType;
|
eltType := FindActualType(eltType,SymbolTable);
|
||||||
end;
|
|
||||||
classItemArray := SymbolTable.IsOfType(eltType,TPasClassType) or SymbolTable.IsOfType(eltType,TPasArrayType);
|
classItemArray := SymbolTable.IsOfType(eltType,TPasClassType) or SymbolTable.IsOfType(eltType,TPasArrayType);
|
||||||
|
|
||||||
if classItemArray then begin
|
if classItemArray then begin
|
||||||
|
@ -805,7 +805,7 @@ var
|
|||||||
if hasInterName then begin
|
if hasInterName then begin
|
||||||
internalName := '_' + internalName;
|
internalName := '_' + internalName;
|
||||||
end;
|
end;
|
||||||
Result := TPasType(SymbolTable.CreateElement(TPasAliasType,internalName,SymbolTable.CurrentModule.InterfaceSection,visDefault,'',0));
|
Result := TPasType(SymbolTable.CreateElement(TPasAliasType,internalName,Self.Module.InterfaceSection,visDefault,'',0));
|
||||||
SymbolTable.RegisterExternalAlias(Result,baseName);
|
SymbolTable.RegisterExternalAlias(Result,baseName);
|
||||||
TPasAliasType(Result).DestType := ABase;
|
TPasAliasType(Result).DestType := ABase;
|
||||||
ABase.AddRef();
|
ABase.AddRef();
|
||||||
@ -897,9 +897,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
sct.Declarations.Add(Result);
|
sct.Declarations.Add(Result);
|
||||||
sct.Types.Add(Result);
|
sct.Types.Add(Result);
|
||||||
if Result.InheritsFrom(TPasClassType) then begin
|
if Result.InheritsFrom(TPasClassType) then
|
||||||
sct.Classes.Add(Result);
|
sct.Classes.Add(Result);
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
except
|
except
|
||||||
on e : EXsdTypeNotFoundException do begin
|
on e : EXsdTypeNotFoundException do begin
|
||||||
@ -976,11 +975,13 @@ begin
|
|||||||
s := ExtractIdentifier(s);
|
s := ExtractIdentifier(s);
|
||||||
i := 1;
|
i := 1;
|
||||||
locName := s;
|
locName := s;
|
||||||
while (FSymbols.FindModule(locName) <> nil) do begin
|
if (locModule.Name <> locName) then begin
|
||||||
locName := Format('%s%d',[s,i]);
|
while (FSymbols.FindModule(locName) <> nil) do begin
|
||||||
Inc(i);
|
locName := Format('%s%d',[s,i]);
|
||||||
|
Inc(i);
|
||||||
|
end;
|
||||||
|
locModule.Name := locName;
|
||||||
end;
|
end;
|
||||||
locModule.Name := locName;
|
|
||||||
locModule.AddRef();
|
locModule.AddRef();
|
||||||
locUsesList.Add(locModule);
|
locUsesList.Add(locModule);
|
||||||
if (FSymbols.Properties.GetValue(locModule,sFILE_NAME) = '') then
|
if (FSymbols.Properties.GetValue(locModule,sFILE_NAME) = '') then
|
||||||
@ -1067,9 +1068,15 @@ begin
|
|||||||
FTargetNameSpace := prntCtx.GetTargetNameSpace();
|
FTargetNameSpace := prntCtx.GetTargetNameSpace();
|
||||||
ok := True;
|
ok := True;
|
||||||
end else begin
|
end else begin
|
||||||
if not AMustSucceed then
|
if (prntCtx <> nil) then begin
|
||||||
exit;
|
FTargetNameSpace := prntCtx.GetTargetNameSpace();
|
||||||
raise EXsdParserAssertException.CreateFmt(SERR_SchemaNodeRequiredAttribute,[s_targetNamespace]);
|
ok := (FTargetNameSpace <> '');
|
||||||
|
end;
|
||||||
|
if not ok then begin
|
||||||
|
if not AMustSucceed then
|
||||||
|
exit;
|
||||||
|
raise EXsdParserAssertException.CreateFmt(SERR_SchemaNodeRequiredAttribute,[s_targetNamespace]);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user