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
inherited Create(aOwner);
fItems:=TFPList.Create;
if ExternalToolList=nil then
ExternalToolList:=Self;
end;
destructor TExternalToolsBase.Destroy;

View File

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

View File

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

View File

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

View File

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