mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 05:36:10 +02:00
codetools: identifier completion: when a tools deletes nodes, clear list only if tool is used
git-svn-id: trunk@31230 -
This commit is contained in:
parent
c15760ec41
commit
f278799dc0
@ -174,7 +174,10 @@ type
|
|||||||
property Node: TCodeTreeNode read GetNode write SetNode;
|
property Node: TCodeTreeNode read GetNode write SetNode;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TIdentifierListFlag = (ilfFilteredListNeedsUpdate);
|
TIdentifierListFlag = (
|
||||||
|
ilfFilteredListNeedsUpdate,
|
||||||
|
ilfUsedToolsNeedsUpdate
|
||||||
|
);
|
||||||
TIdentifierListFlags = set of TIdentifierListFlag;
|
TIdentifierListFlags = set of TIdentifierListFlag;
|
||||||
|
|
||||||
TIdentifierListContextFlag = (
|
TIdentifierListContextFlag = (
|
||||||
@ -205,6 +208,7 @@ type
|
|||||||
FHistory: TIdentifierHistoryList;
|
FHistory: TIdentifierHistoryList;
|
||||||
FItems: TAVLTree; // tree of TIdentifierListItem (completely sorted)
|
FItems: TAVLTree; // tree of TIdentifierListItem (completely sorted)
|
||||||
FIdentView: TAVLTree; // tree of TIdentHistListItem sorted for identifiers
|
FIdentView: TAVLTree; // tree of TIdentHistListItem sorted for identifiers
|
||||||
|
FUsedTools: TAVLTree; // tree of TFindDeclarationTool
|
||||||
FIdentSearchItem: TIdentifierListSearchItem;
|
FIdentSearchItem: TIdentifierListSearchItem;
|
||||||
FPrefix: string;
|
FPrefix: string;
|
||||||
FStartContext: TFindContext;
|
FStartContext: TFindContext;
|
||||||
@ -657,6 +661,7 @@ end;
|
|||||||
destructor TIdentifierList.Destroy;
|
destructor TIdentifierList.Destroy;
|
||||||
begin
|
begin
|
||||||
Clear;
|
Clear;
|
||||||
|
FreeAndNil(FUsedTools);
|
||||||
FreeAndNil(FItems);
|
FreeAndNil(FItems);
|
||||||
FreeAndNil(FIdentView);
|
FreeAndNil(FIdentView);
|
||||||
FreeAndNil(FFilteredList);
|
FreeAndNil(FFilteredList);
|
||||||
@ -684,7 +689,9 @@ begin
|
|||||||
FCreatedIdentifiers.Clear;
|
FCreatedIdentifiers.Clear;
|
||||||
FItems.FreeAndClear;
|
FItems.FreeAndClear;
|
||||||
FIdentView.Clear;
|
FIdentView.Clear;
|
||||||
Include(FFlags,ilfFilteredListNeedsUpdate);
|
if FUsedTools<>nil then
|
||||||
|
FUsedTools.Clear;
|
||||||
|
FFlags:=FFlags+[ilfFilteredListNeedsUpdate,ilfUsedToolsNeedsUpdate];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIdentifierList.Add(NewItem: TIdentifierListItem);
|
procedure TIdentifierList.Add(NewItem: TIdentifierListItem);
|
||||||
@ -697,7 +704,7 @@ begin
|
|||||||
NewItem.HistoryIndex:=History.GetHistoryIndex(NewItem);
|
NewItem.HistoryIndex:=History.GetHistoryIndex(NewItem);
|
||||||
FItems.Add(NewItem);
|
FItems.Add(NewItem);
|
||||||
FIdentView.Add(NewItem);
|
FIdentView.Add(NewItem);
|
||||||
Include(FFlags,ilfFilteredListNeedsUpdate);
|
FFlags:=FFlags+[ilfFilteredListNeedsUpdate,ilfUsedToolsNeedsUpdate];
|
||||||
end else begin
|
end else begin
|
||||||
// redefined identifier -> ignore
|
// redefined identifier -> ignore
|
||||||
//DebugLn('TIdentifierList.Add redefined: ',NewItem.AsString);
|
//DebugLn('TIdentifierList.Add redefined: ',NewItem.AsString);
|
||||||
@ -823,8 +830,28 @@ end;
|
|||||||
|
|
||||||
procedure TIdentifierList.ToolTreeNodesDeleting(Tool: TCustomCodeTool;
|
procedure TIdentifierList.ToolTreeNodesDeleting(Tool: TCustomCodeTool;
|
||||||
NodesDeleting: boolean);
|
NodesDeleting: boolean);
|
||||||
|
var
|
||||||
|
ItemNode: TAVLTreeNode;
|
||||||
|
Item: TIdentifierListItem;
|
||||||
begin
|
begin
|
||||||
|
if Tool=nil then exit;
|
||||||
if FIdentView.Count=0 then exit;
|
if FIdentView.Count=0 then exit;
|
||||||
|
if (FUsedTools=nil) or (ilfUsedToolsNeedsUpdate in FFlags) then begin
|
||||||
|
Exclude(FFlags,ilfUsedToolsNeedsUpdate);
|
||||||
|
// create list of all used tools
|
||||||
|
if FUsedTools=nil then
|
||||||
|
FUsedTools:=TAVLTree.Create
|
||||||
|
else
|
||||||
|
FUsedTools.Clear;
|
||||||
|
ItemNode:=FItems.FindLowest;
|
||||||
|
while ItemNode<>nil do begin
|
||||||
|
Item:=TIdentifierListItem(ItemNode.Data);
|
||||||
|
if (Item.Tool<>nil) and (FUsedTools.Find(Item.Tool)=nil) then
|
||||||
|
FUsedTools.Add(Item.Tool);
|
||||||
|
ItemNode:=FItems.FindSuccessor(ItemNode);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if FUsedTools.Find(Tool)=nil then exit;
|
||||||
Clear;
|
Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user