You've already forked lazarus-ccr
Parser's "CaseSensitive" implementation fix.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1963 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -49,6 +49,7 @@ type
|
||||
|
||||
const
|
||||
BindingStyleNames : array[TBindingStyle] of string = ( 'Document', 'RPC', 'Unknown' );
|
||||
NAME_KINDS_DEFAULT = [elkDeclaredName, elkName];
|
||||
|
||||
type
|
||||
TArrayStyle = ( asScoped, asEmbeded );
|
||||
@ -104,6 +105,7 @@ type
|
||||
FBindingList : TObjectList;
|
||||
FProperties : TPropertyHolder;
|
||||
FCaseSensitive : Boolean;
|
||||
FDefaultSearchNameKinds: TElementNameKinds;
|
||||
private
|
||||
function GetBinding(AIndex : Integer): TwstBinding;
|
||||
function GetBindingCount: Integer;
|
||||
@ -138,8 +140,12 @@ type
|
||||
function FindElementInModule(
|
||||
const AName: String;
|
||||
AModule: TPasModule;
|
||||
const ANameKinds : TElementNameKinds = [elkDeclaredName, elkName]
|
||||
): TPasElement;
|
||||
const ANameKinds : TElementNameKinds
|
||||
): TPasElement; overload;
|
||||
function FindElementInModule(
|
||||
const AName: String;
|
||||
AModule: TPasModule
|
||||
): TPasElement; overload;
|
||||
function FindModule(const AName: String): TPasModule;override;
|
||||
function IsEnumItemNameUsed(const AName : string; AModule : TPasModule) : Boolean;overload;
|
||||
function IsEnumItemNameUsed(const AName : string) : Boolean;overload;
|
||||
@ -168,6 +174,10 @@ type
|
||||
function IsOfType(AType: TPasType; AClass: TClass): Boolean;
|
||||
|
||||
property CaseSensitive : Boolean read FCaseSensitive write FCaseSensitive default CASE_SENSITIVE_DEFAULT;
|
||||
property DefaultSearchNameKinds : TElementNameKinds
|
||||
read FDefaultSearchNameKinds
|
||||
write FDefaultSearchNameKinds
|
||||
default NAME_KINDS_DEFAULT;
|
||||
end;
|
||||
|
||||
TPasNativeModule = class(TPasModule)
|
||||
@ -418,7 +428,11 @@ function CreateWstInterfaceSymbolTable(AContainer : TwstPasTreeContainer) : TPas
|
||||
|
||||
var
|
||||
loc_TBaseComplexSimpleContentRemotable : TPasClassType;
|
||||
locOldNameKinds : TElementNameKinds;
|
||||
begin
|
||||
locOldNameKinds := AContainer.DefaultSearchNameKinds;
|
||||
AContainer.DefaultSearchNameKinds := [elkDeclaredName,elkName];
|
||||
try
|
||||
Result := TPasNativeModule(AContainer.CreateElement(TPasNativeModule,'base_service_intf',AContainer.Package,visPublic,'',0));
|
||||
try
|
||||
AContainer.Package.Modules.Add(Result);
|
||||
@ -431,9 +445,9 @@ begin
|
||||
AContainer.RegisterExternalAlias(AddClassDef(Result,'schema_Type','TAbstractSimpleRemotable'),'schema');
|
||||
AContainer.RegisterExternalAlias(AddClassDef(Result,'TDateRemotable','TAbstractSimpleRemotable'),'date');
|
||||
AContainer.RegisterExternalAlias(AddClassDef(Result,'TDateTimeRemotable','TAbstractSimpleRemotable'),'dateTime');
|
||||
{$IFDEF WST_HAS_TDURATIONREMOTABLE}
|
||||
{$IFDEF WST_HAS_TDURATIONREMOTABLE}
|
||||
AContainer.RegisterExternalAlias(AddClassDef(Result,'TDurationRemotable','TAbstractSimpleRemotable'),'duration');
|
||||
{$ENDIF WST_HAS_TDURATIONREMOTABLE}
|
||||
{$ENDIF WST_HAS_TDURATIONREMOTABLE}
|
||||
AContainer.RegisterExternalAlias(AddClassDef(Result,'TTimeRemotable','TAbstractSimpleRemotable'),'time');
|
||||
|
||||
AddClassDef(Result,'TAbstractComplexRemotable','TBaseRemotable',TPasNativeClassType);
|
||||
@ -471,16 +485,19 @@ begin
|
||||
//AddAlias('float','Single',Result);
|
||||
AddAlias('nonNegativeInteger','LongWord',Result);
|
||||
AddAlias('positiveInteger','nonNegativeInteger',Result);
|
||||
{$IFNDEF WST_HAS_TDURATIONREMOTABLE}
|
||||
{$IFNDEF WST_HAS_TDURATIONREMOTABLE}
|
||||
AddAlias('duration','string',Result);
|
||||
{$ENDIF WST_HAS_TDURATIONREMOTABLE}
|
||||
{$IFNDEF WST_HAS_TTIMEREMOTABLE}
|
||||
{$ENDIF WST_HAS_TDURATIONREMOTABLE}
|
||||
{$IFNDEF WST_HAS_TTIMEREMOTABLE}
|
||||
AddAlias('time','string',Result);
|
||||
{$ENDIF WST_HAS_TTIMEREMOTABLE}
|
||||
{$ENDIF WST_HAS_TTIMEREMOTABLE}
|
||||
except
|
||||
FreeAndNil(Result);
|
||||
raise;
|
||||
end;
|
||||
finally
|
||||
AContainer.DefaultSearchNameKinds := locOldNameKinds;
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetUltimeType(AType : TPasType) : TPasType;
|
||||
@ -635,6 +652,7 @@ end;
|
||||
constructor TwstPasTreeContainer.Create();
|
||||
begin
|
||||
FCaseSensitive := CASE_SENSITIVE_DEFAULT;
|
||||
FDefaultSearchNameKinds := NAME_KINDS_DEFAULT;
|
||||
FPackage := TPasPackage.Create('sample',nil);
|
||||
FBindingList := TObjectList.Create(True);
|
||||
FProperties := TPropertyHolder.Create();
|
||||
@ -794,9 +812,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TwstPasTreeContainer.FindElementInModule(
|
||||
const AName : String;
|
||||
AModule : TPasModule
|
||||
) : TPasElement;
|
||||
begin
|
||||
Result := FindElementInModule(AName,AModule,DefaultSearchNameKinds);
|
||||
end;
|
||||
|
||||
function TwstPasTreeContainer.FindElement(const AName: String): TPasElement;
|
||||
begin
|
||||
Result := FindElement(AName,[elkDeclaredName,elkName]);
|
||||
Result := FindElement(AName,DefaultSearchNameKinds);
|
||||
end;
|
||||
|
||||
function TwstPasTreeContainer.FindElement(
|
||||
|
@ -79,10 +79,14 @@ var
|
||||
if ( sourceType = sftXsd ) then begin
|
||||
AppOptions := AppOptions - [ cloProxy, cloImp, cloBinder, cloWsdl ];
|
||||
end;
|
||||
if (cloParserCaseSensitive in AppOptions) then begin
|
||||
if AnsiSameText('S',Trim(GetOptionArg(cloParserCaseSensitive))) then
|
||||
Include(AppOptions,cloParserCaseSensitive);
|
||||
if AnsiSameText('I',Trim(GetOptionArg(cloParserCaseSensitive))) then
|
||||
Exclude(AppOptions,cloParserCaseSensitive);
|
||||
end else begin
|
||||
Include(AppOptions,cloParserCaseSensitive);
|
||||
end;
|
||||
end;
|
||||
|
||||
function GenerateSymbolTable() : Boolean ;
|
||||
|
@ -440,7 +440,11 @@ procedure TWsdlParser.Execute(const AMode: TParserMode; const AModuleName: strin
|
||||
var
|
||||
locSrvcCrs : IObjectCursor;
|
||||
locObj : TDOMNodeRttiExposer;
|
||||
locOldNameKinds : TElementNameKinds;
|
||||
begin
|
||||
locOldNameKinds := FSymbols.DefaultSearchNameKinds;
|
||||
FSymbols.DefaultSearchNameKinds := [elkDeclaredName];
|
||||
try
|
||||
Prepare(AModuleName);
|
||||
|
||||
locSrvcCrs := FServiceCursor.Clone() as IObjectCursor;
|
||||
@ -458,6 +462,9 @@ begin
|
||||
SymbolTable.SetCurrentModule(FModule);
|
||||
ExtractNameSpace();
|
||||
FixUsesList();
|
||||
finally
|
||||
FSymbols.DefaultSearchNameKinds := locOldNameKinds;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TWsdlParser.ParseOperation(
|
||||
|
@ -115,13 +115,15 @@ type
|
||||
FIncludeList : TStringList;
|
||||
FIncludeParsed : Boolean;
|
||||
FPrepared : Boolean;
|
||||
FOldNameKinds : TElementNameKinds;
|
||||
private
|
||||
procedure DoOnMessage(const AMsgType : TMessageType; const AMsg : string);
|
||||
private
|
||||
function FindNamedNode(AList : IObjectCursor; const AName : WideString; const AOrder : Integer = 0):TDOMNode;
|
||||
function GetParentContext() : IParserContext;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
procedure Prepare(const AMustSucceed : Boolean);
|
||||
function FindElement(const AName: String) : TPasElement; {$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
function FindElement(const AName: String) : TPasElement; overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
function FindElement(const AName: String; const ANameKinds : TElementNameKinds) : TPasElement; overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||
protected
|
||||
function GetXsShortNames() : TStrings;
|
||||
function GetSymbolTable() : TwstPasTreeContainer;
|
||||
@ -217,6 +219,8 @@ begin
|
||||
FDoc := ADoc;
|
||||
FParentContext := Pointer(AParentContext);
|
||||
FSymbols := ASymbols;
|
||||
FOldNameKinds := FSymbols.DefaultSearchNameKinds;
|
||||
FSymbols.DefaultSearchNameKinds := [elkDeclaredName];
|
||||
FSchemaNode := ASchemaNode;
|
||||
|
||||
FNameSpaceList := TStringList.Create();
|
||||
@ -242,6 +246,8 @@ destructor TCustomXsdSchemaParser.Destroy();
|
||||
end;
|
||||
|
||||
begin
|
||||
if (FSymbols <> nil) then
|
||||
FSymbols.DefaultSearchNameKinds := FOldNameKinds;
|
||||
FParentContext := nil;
|
||||
FreeAndNil(FIncludeList);
|
||||
FreeList(FNameSpaceList);
|
||||
@ -298,6 +304,16 @@ begin
|
||||
Result := SymbolTable.FindElement(AName);
|
||||
end;
|
||||
|
||||
function TCustomXsdSchemaParser.FindElement(
|
||||
const AName : String;
|
||||
const ANameKinds : TElementNameKinds
|
||||
) : TPasElement;
|
||||
begin
|
||||
Result := SymbolTable.FindElementInModule(AName,FModule,ANameKinds);
|
||||
if ( Result = nil ) then
|
||||
Result := SymbolTable.FindElement(AName,ANameKinds);
|
||||
end;
|
||||
|
||||
procedure TCustomXsdSchemaParser.ParseImportDocuments();
|
||||
var
|
||||
locOldCurrentModule : TPasModule;
|
||||
@ -638,7 +654,7 @@ var
|
||||
if ASimpleTypeAlias.InheritsFrom(TPasNativeSimpleType) then begin
|
||||
locTypeHint := ExtractTypeHint(typNd);
|
||||
if not IsStrEmpty(locTypeHint) then begin
|
||||
locHintedType := FindElement(locTypeHint) as TPasType;
|
||||
locHintedType := FindElement(locTypeHint,[elkName]) as TPasType;
|
||||
if ( locHintedType <> nil ) then
|
||||
ASimpleTypeAlias := locHintedType;
|
||||
end;
|
||||
|
Reference in New Issue
Block a user