diff --git a/wst/trunk/ws_helper/pascal_parser_intf.pas b/wst/trunk/ws_helper/pascal_parser_intf.pas index 04fcb63ef..8fac32fb5 100644 --- a/wst/trunk/ws_helper/pascal_parser_intf.pas +++ b/wst/trunk/ws_helper/pascal_parser_intf.pas @@ -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,68 +428,75 @@ function CreateWstInterfaceSymbolTable(AContainer : TwstPasTreeContainer) : TPas var loc_TBaseComplexSimpleContentRemotable : TPasClassType; + locOldNameKinds : TElementNameKinds; begin - Result := TPasNativeModule(AContainer.CreateElement(TPasNativeModule,'base_service_intf',AContainer.Package,visPublic,'',0)); + locOldNameKinds := AContainer.DefaultSearchNameKinds; + AContainer.DefaultSearchNameKinds := [elkDeclaredName,elkName]; try - AContainer.Package.Modules.Add(Result); - AContainer.RegisterExternalAlias(Result,sXSD_NS); - Result.InterfaceSection := TInterfaceSection(AContainer.CreateElement(TInterfaceSection,'',Result,visDefault,'',0)); - AddSystemSymbol(Result,AContainer); - AddClassDef(Result,'TBaseRemotable','',TPasNativeClassType); - AContainer.RegisterExternalAlias(AddClassDef(Result,'anyType_Type','TBaseRemotable',TPasNativeClassType),'anyType'); - AddClassDef(Result,'TAbstractSimpleRemotable','TBaseRemotable',TPasNativeClassType); - 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} - AContainer.RegisterExternalAlias(AddClassDef(Result,'TDurationRemotable','TAbstractSimpleRemotable'),'duration'); -{$ENDIF WST_HAS_TDURATIONREMOTABLE} - AContainer.RegisterExternalAlias(AddClassDef(Result,'TTimeRemotable','TAbstractSimpleRemotable'),'time'); + Result := TPasNativeModule(AContainer.CreateElement(TPasNativeModule,'base_service_intf',AContainer.Package,visPublic,'',0)); + try + AContainer.Package.Modules.Add(Result); + AContainer.RegisterExternalAlias(Result,sXSD_NS); + Result.InterfaceSection := TInterfaceSection(AContainer.CreateElement(TInterfaceSection,'',Result,visDefault,'',0)); + AddSystemSymbol(Result,AContainer); + AddClassDef(Result,'TBaseRemotable','',TPasNativeClassType); + AContainer.RegisterExternalAlias(AddClassDef(Result,'anyType_Type','TBaseRemotable',TPasNativeClassType),'anyType'); + AddClassDef(Result,'TAbstractSimpleRemotable','TBaseRemotable',TPasNativeClassType); + 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} + AContainer.RegisterExternalAlias(AddClassDef(Result,'TDurationRemotable','TAbstractSimpleRemotable'),'duration'); + {$ENDIF WST_HAS_TDURATIONREMOTABLE} + AContainer.RegisterExternalAlias(AddClassDef(Result,'TTimeRemotable','TAbstractSimpleRemotable'),'time'); - AddClassDef(Result,'TAbstractComplexRemotable','TBaseRemotable',TPasNativeClassType); - loc_TBaseComplexSimpleContentRemotable := AddClassDef(Result,'TBaseComplexSimpleContentRemotable','TAbstractComplexRemotable',TPasNativeClassType); - (AContainer.FindElementInModule('TComplexInt16SContentRemotable',Result) as TPasClassType).AncestorType := loc_TBaseComplexSimpleContentRemotable; - (AContainer.FindElementInModule('TComplexFloatDoubleContentRemotable',Result) as TPasClassType).AncestorType := loc_TBaseComplexSimpleContentRemotable; - loc_TBaseComplexSimpleContentRemotable.AddRef(); - loc_TBaseComplexSimpleContentRemotable.AddRef(); + AddClassDef(Result,'TAbstractComplexRemotable','TBaseRemotable',TPasNativeClassType); + loc_TBaseComplexSimpleContentRemotable := AddClassDef(Result,'TBaseComplexSimpleContentRemotable','TAbstractComplexRemotable',TPasNativeClassType); + (AContainer.FindElementInModule('TComplexInt16SContentRemotable',Result) as TPasClassType).AncestorType := loc_TBaseComplexSimpleContentRemotable; + (AContainer.FindElementInModule('TComplexFloatDoubleContentRemotable',Result) as TPasClassType).AncestorType := loc_TBaseComplexSimpleContentRemotable; + loc_TBaseComplexSimpleContentRemotable.AddRef(); + loc_TBaseComplexSimpleContentRemotable.AddRef(); - AddClassDef(Result,'TBaseComplexRemotable','TAbstractComplexRemotable',TPasNativeClassType); - AddClassDef(Result,'THeaderBlock','TBaseComplexRemotable',TPasNativeClassType); - AddClassDef(Result,'TSimpleContentHeaderBlock','THeaderBlock',TPasNativeClassType); - AddClassDef(Result,'TBaseArrayRemotable','TAbstractComplexRemotable',TPasNativeClassType); - AddClassDef(Result,'TBaseObjectArrayRemotable','TBaseArrayRemotable',TPasNativeClassType); - AddClassDef(Result,'TBaseSimpleTypeArrayRemotable','TBaseArrayRemotable',TPasNativeClassType); - AddClassDef(Result,'TArrayOfStringRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfBooleanRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt8URemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt8SRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt16SRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt16URemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt32URemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt32SRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt64SRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfInt64URemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfFloatSingleRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfFloatDoubleRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfFloatExtendedRemotable','TBaseSimpleTypeArrayRemotable'); - AddClassDef(Result,'TArrayOfFloatCurrencyRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TBaseComplexRemotable','TAbstractComplexRemotable',TPasNativeClassType); + AddClassDef(Result,'THeaderBlock','TBaseComplexRemotable',TPasNativeClassType); + AddClassDef(Result,'TSimpleContentHeaderBlock','THeaderBlock',TPasNativeClassType); + AddClassDef(Result,'TBaseArrayRemotable','TAbstractComplexRemotable',TPasNativeClassType); + AddClassDef(Result,'TBaseObjectArrayRemotable','TBaseArrayRemotable',TPasNativeClassType); + AddClassDef(Result,'TBaseSimpleTypeArrayRemotable','TBaseArrayRemotable',TPasNativeClassType); + AddClassDef(Result,'TArrayOfStringRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfBooleanRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt8URemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt8SRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt16SRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt16URemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt32URemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt32SRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt64SRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfInt64URemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfFloatSingleRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfFloatDoubleRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfFloatExtendedRemotable','TBaseSimpleTypeArrayRemotable'); + AddClassDef(Result,'TArrayOfFloatCurrencyRemotable','TBaseSimpleTypeArrayRemotable'); - AddAlias('token','string',Result); - AddAlias('language','string',Result); - AddAlias('anyURI','string',Result); - AddAlias('ID','string',Result); - //AddAlias('float','Single',Result); - AddAlias('nonNegativeInteger','LongWord',Result); - AddAlias('positiveInteger','nonNegativeInteger',Result); -{$IFNDEF WST_HAS_TDURATIONREMOTABLE} - AddAlias('duration','string',Result); -{$ENDIF WST_HAS_TDURATIONREMOTABLE} -{$IFNDEF WST_HAS_TTIMEREMOTABLE} - AddAlias('time','string',Result); -{$ENDIF WST_HAS_TTIMEREMOTABLE} - except - FreeAndNil(Result); - raise; + AddAlias('token','string',Result); + AddAlias('language','string',Result); + AddAlias('anyURI','string',Result); + AddAlias('ID','string',Result); + //AddAlias('float','Single',Result); + AddAlias('nonNegativeInteger','LongWord',Result); + AddAlias('positiveInteger','nonNegativeInteger',Result); + {$IFNDEF WST_HAS_TDURATIONREMOTABLE} + AddAlias('duration','string',Result); + {$ENDIF WST_HAS_TDURATIONREMOTABLE} + {$IFNDEF WST_HAS_TTIMEREMOTABLE} + AddAlias('time','string',Result); + {$ENDIF WST_HAS_TTIMEREMOTABLE} + except + FreeAndNil(Result); + raise; + end; + finally + AContainer.DefaultSearchNameKinds := locOldNameKinds; end; end; @@ -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( diff --git a/wst/trunk/ws_helper/ws_helper_prog.inc b/wst/trunk/ws_helper/ws_helper_prog.inc index 537398ec9..a02f6c4f0 100644 --- a/wst/trunk/ws_helper/ws_helper_prog.inc +++ b/wst/trunk/ws_helper/ws_helper_prog.inc @@ -79,10 +79,14 @@ var if ( sourceType = sftXsd ) then begin AppOptions := AppOptions - [ cloProxy, cloImp, cloBinder, cloWsdl ]; end; - if AnsiSameText('S',Trim(GetOptionArg(cloParserCaseSensitive))) then + 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); - if AnsiSameText('I',Trim(GetOptionArg(cloParserCaseSensitive))) then - Exclude(AppOptions,cloParserCaseSensitive); + end; end; function GenerateSymbolTable() : Boolean ; diff --git a/wst/trunk/ws_helper/wsdl_parser.pas b/wst/trunk/ws_helper/wsdl_parser.pas index 6d697ea1d..82fe4533e 100644 --- a/wst/trunk/ws_helper/wsdl_parser.pas +++ b/wst/trunk/ws_helper/wsdl_parser.pas @@ -440,24 +440,31 @@ procedure TWsdlParser.Execute(const AMode: TParserMode; const AModuleName: strin var locSrvcCrs : IObjectCursor; locObj : TDOMNodeRttiExposer; + locOldNameKinds : TElementNameKinds; begin - Prepare(AModuleName); + locOldNameKinds := FSymbols.DefaultSearchNameKinds; + FSymbols.DefaultSearchNameKinds := [elkDeclaredName]; + try + Prepare(AModuleName); - locSrvcCrs := FServiceCursor.Clone() as IObjectCursor; - locSrvcCrs.Reset(); - while locSrvcCrs.MoveNext() do begin - locObj := locSrvcCrs.GetCurrent() as TDOMNodeRttiExposer; - ParseService(locObj.InnerObject); + locSrvcCrs := FServiceCursor.Clone() as IObjectCursor; + locSrvcCrs.Reset(); + while locSrvcCrs.MoveNext() do begin + locObj := locSrvcCrs.GetCurrent() as TDOMNodeRttiExposer; + ParseService(locObj.InnerObject); + end; + + if ( AMode = pmAllTypes ) then begin + ParseTypes(); + end; + + ParseForwardDeclarations(); + SymbolTable.SetCurrentModule(FModule); + ExtractNameSpace(); + FixUsesList(); + finally + FSymbols.DefaultSearchNameKinds := locOldNameKinds; end; - - if ( AMode = pmAllTypes ) then begin - ParseTypes(); - end; - - ParseForwardDeclarations(); - SymbolTable.SetCurrentModule(FModule); - ExtractNameSpace(); - FixUsesList(); end; function TWsdlParser.ParseOperation( diff --git a/wst/trunk/ws_helper/xsd_parser.pas b/wst/trunk/ws_helper/xsd_parser.pas index 65a13649b..cc0558034 100644 --- a/wst/trunk/ws_helper/xsd_parser.pas +++ b/wst/trunk/ws_helper/xsd_parser.pas @@ -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;