IDE: Turn ExternalTools from a global var into a global function, returning ExternalToolList. Avoid duplicate assignments to ExternalToolList.

git-svn-id: trunk@63079 -
This commit is contained in:
juha 2020-04-25 15:30:42 +00:00
parent d4f25d678f
commit c43d57c21a
5 changed files with 25 additions and 27 deletions

View File

@ -1611,6 +1611,8 @@ constructor TExternalToolsBase.Create(aOwner: TComponent);
begin begin
inherited Create(aOwner); inherited Create(aOwner);
fItems:=TFPList.Create; fItems:=TFPList.Create;
if ExternalToolList=nil then
ExternalToolList:=Self;
end; end;
destructor TExternalToolsBase.Destroy; destructor TExternalToolsBase.Destroy;

View File

@ -357,7 +357,7 @@ end;
destructor TBuildManager.Destroy; destructor TBuildManager.Destroy;
begin begin
ExternalTools.Free; // sets ExternalTools to nil, do not use FreeAndNil! ExternalToolList.Free; // sets ExternalToolList to nil, do not use FreeAndNil!
GetBuildMacroValues:=nil; GetBuildMacroValues:=nil;
OnAppendCustomOption:=nil; OnAppendCustomOption:=nil;
@ -535,8 +535,8 @@ var
begin begin
// setup the external tool queue // setup the external tool queue
Tools:=aToolsClass.Create(Self); Tools:=aToolsClass.Create(Self);
if Tools<>ExternalTools then if Tools<>ExternalToolList then
raise Exception.Create('TBuildManager.SetupExternalTools ExternalTools='+DbgSName(ExternalTools)); raise Exception.Create('TBuildManager.SetupExternalTools ExternalTools='+DbgSName(ExternalToolList));
EnvOptsChanged; EnvOptsChanged;
RegisterFPCParser; RegisterFPCParser;
RegisterPas2jsParser; RegisterPas2jsParser;
@ -561,9 +561,9 @@ end;
procedure TBuildManager.EnvOptsChanged; procedure TBuildManager.EnvOptsChanged;
begin begin
if EnvironmentOptions.MaxExtToolsInParallel<=0 then if EnvironmentOptions.MaxExtToolsInParallel<=0 then
ExternalTools.MaxProcessCount:=DefaultMaxProcessCount ExternalToolsRef.MaxProcessCount:=DefaultMaxProcessCount
else else
ExternalTools.MaxProcessCount:=EnvironmentOptions.MaxExtToolsInParallel; ExternalToolsRef.MaxProcessCount:=EnvironmentOptions.MaxExtToolsInParallel;
end; end;
function TBuildManager.GetBuildMacroOverride(const MacroName: string): string; function TBuildManager.GetBuildMacroOverride(const MacroName: string): string;

View File

@ -2752,7 +2752,7 @@ procedure TMessagesFrame.MsgCtrlPopupMenuPopup(Sender: TObject);
if View.Tool=nil then continue; if View.Tool=nil then continue;
ToolData:=TIDEExternalToolData(View.Tool.Data); ToolData:=TIDEExternalToolData(View.Tool.Data);
if not (ToolData is TIDEExternalToolData) then continue; if not (ToolData is TIDEExternalToolData) then continue;
IDETool:=ExternalTools.GetIDEObject(ToolData); IDETool:=ExternalToolList.GetIDEObject(ToolData);
if IDETool=nil then continue; if IDETool=nil then continue;
if IDETool is TLazProject then begin if IDETool is TLazProject then begin
CompOpts:=TLazProject(IDETool).LazCompilerOptions as TBaseCompilerOptions; CompOpts:=TLazProject(IDETool).LazCompilerOptions as TBaseCompilerOptions;
@ -3046,7 +3046,7 @@ begin
Item:=TIDEMenuCommand(Sender); Item:=TIDEMenuCommand(Sender);
MsgId:=Item.Tag; MsgId:=Item.Tag;
ToolData:=TIDEExternalToolData(Item.UserTag); ToolData:=TIDEExternalToolData(Item.UserTag);
IDETool:=ExternalTools.GetIDEObject(ToolData); IDETool:=ExternalToolList.GetIDEObject(ToolData);
if IDETool=nil then exit; if IDETool=nil then exit;
if IDETool is TLazProject then begin if IDETool is TLazProject then begin
CompOpts:=TLazProject(IDETool).LazCompilerOptions; CompOpts:=TLazProject(IDETool).LazCompilerOptions;

View File

@ -163,18 +163,22 @@ type
procedure RegisterParser(Parser: TExtToolParserClass); override; procedure RegisterParser(Parser: TExtToolParserClass); override;
procedure UnregisterParser(Parser: TExtToolParserClass); override; procedure UnregisterParser(Parser: TExtToolParserClass); override;
function FindParserForTool(const SubTool: string): TExtToolParserClass; override; function FindParserForTool(const SubTool: string): TExtToolParserClass; override;
function FindParserWithName(const ParserName: string): TExtToolParserClass; function FindParserWithName(const ParserName: string): TExtToolParserClass; override;
override;
function GetMsgTool(Msg: TMessageLine): TAbstractExternalTool; override; function GetMsgTool(Msg: TMessageLine): TAbstractExternalTool; override;
end; end;
TExternalToolsClass = class of TExternalTools; TExternalToolsClass = class of TExternalTools;
var function ExternalToolsRef: TExternalTools;
ExternalTools: TExternalTools = nil;
implementation implementation
function ExternalToolsRef: TExternalTools;
begin
Result := ExternalToolList as TExternalTools;
end;
{$IF defined(VerboseExtToolErrors) or defined(VerboseExtToolThread) or defined(VerboseExtToolAddOutputLines)} {$IF defined(VerboseExtToolErrors) or defined(VerboseExtToolThread) or defined(VerboseExtToolAddOutputLines)}
function ArgsToString(Args: array of const): string; function ArgsToString(Args: array of const): string;
var var
@ -1205,10 +1209,6 @@ begin
fRunning:=TFPList.Create; fRunning:=TFPList.Create;
fParsers:=TFPList.Create; fParsers:=TFPList.Create;
MaxProcessCount:=DefaultMaxProcessCount; MaxProcessCount:=DefaultMaxProcessCount;
if ExternalToolList=nil then
ExternalToolList:=Self;
if ExternalTools=nil then
ExternalTools:=Self;
RunExternalTool := @RunExtToolHandler; RunExternalTool := @RunExtToolHandler;
end; end;
@ -1220,10 +1220,6 @@ begin
try try
if fRunning.Count>0 then if fRunning.Count>0 then
raise Exception.Create('TExternalTools.Destroy some tools still running'); raise Exception.Create('TExternalTools.Destroy some tools still running');
if ExternalToolList=Self then
ExternalToolList:=nil;
if ExternalTools=Self then
ExternalTools:=nil;
inherited Destroy; inherited Destroy;
FreeAndNil(fRunning); FreeAndNil(fRunning);
FreeAndNil(fParsers); FreeAndNil(fParsers);

View File

@ -1666,8 +1666,8 @@ begin
IDECommandList.RemoveCustomUpdateEvent(@UpdateMainIDECommands); IDECommandList.RemoveCustomUpdateEvent(@UpdateMainIDECommands);
if Assigned(ExternalTools) then if Assigned(ExternalToolList) then
ExternalTools.TerminateAll; ExternalToolList.TerminateAll;
if ConsoleVerbosity>0 then if ConsoleVerbosity>0 then
DebugLn('Hint: (lazarus) [TMainIDE.Destroy]'); DebugLn('Hint: (lazarus) [TMainIDE.Destroy]');
@ -4945,7 +4945,7 @@ begin
if (Index<0) if (Index<0)
or (Index>=ExternalUserTools.Count) or (Index>=ExternalUserTools.Count)
then exit; then exit;
if ExternalTools.RunningCount=0 then if ExternalToolsRef.RunningCount=0 then
IDEMessagesWindow.Clear; IDEMessagesWindow.Clear;
DoRunExternalTool(Index,false); DoRunExternalTool(Index,false);
end; end;
@ -7169,7 +7169,7 @@ end;
function TMainIDE.DoAbortBuild(Interactive: boolean): TModalResult; function TMainIDE.DoAbortBuild(Interactive: boolean): TModalResult;
begin begin
Result:=mrOk; Result:=mrOk;
if ExternalTools.RunningCount=0 then exit; if ExternalToolsRef.RunningCount=0 then exit;
// IDE code is currently running a build process // IDE code is currently running a build process
// we cannot continue, while some IDE code is waiting for the processes // we cannot continue, while some IDE code is waiting for the processes
// => exit this event (no matter if the processes are stopped or not) // => exit this event (no matter if the processes are stopped or not)
@ -7766,7 +7766,7 @@ begin
if fBuilder=Nil then if fBuilder=Nil then
fBuilder:=TLazarusBuilder.Create; fBuilder:=TLazarusBuilder.Create;
if ExternalTools.RunningCount=0 then if ExternalToolsRef.RunningCount=0 then
IDEMessagesWindow.Clear; IDEMessagesWindow.Clear;
fBuilder.ProfileChanged:=false; fBuilder.ProfileChanged:=false;
OldToolStatus:=ToolStatus; OldToolStatus:=ToolStatus;
@ -7952,7 +7952,7 @@ begin
exit; exit;
end; end;
end; end;
if ExternalTools.RunningCount=0 then if ExternalToolsRef.RunningCount=0 then
IDEMessagesWindow.Clear; IDEMessagesWindow.Clear;
DirectiveList:=TStringList.Create; DirectiveList:=TStringList.Create;
OldToolStatus:=ToolStatus; OldToolStatus:=ToolStatus;
@ -8379,7 +8379,7 @@ begin
if MainBuildBoss.CompilerOnDiskChanged then if MainBuildBoss.CompilerOnDiskChanged then
MainBuildBoss.RescanCompilerDefines(false,false,false,false); MainBuildBoss.RescanCompilerDefines(false,false,false,false);
if (IDEMessagesWindow<>nil) and (ExternalTools.RunningCount=0) then if (IDEMessagesWindow<>nil) and (ExternalToolsRef.RunningCount=0) then
IDEMessagesWindow.Clear; IDEMessagesWindow.Clear;
end; end;
@ -8626,7 +8626,7 @@ end;
procedure TMainIDE.AbortBuild; procedure TMainIDE.AbortBuild;
begin begin
ExternalTools.TerminateAll; ExternalToolList.TerminateAll;
end; end;
procedure TMainIDE.UpdateCaption; procedure TMainIDE.UpdateCaption;