mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 13:59:26 +02:00
IDE: find overloads: show start identifier in dialog
git-svn-id: trunk@19778 -
This commit is contained in:
parent
28a1b83734
commit
dfe1e5a3cf
@ -2528,6 +2528,7 @@ end;
|
|||||||
procedure TCustomCodeTool.DoDeleteNodes;
|
procedure TCustomCodeTool.DoDeleteNodes;
|
||||||
begin
|
begin
|
||||||
if Tree.Root<>nil then begin
|
if Tree.Root<>nil then begin
|
||||||
|
//DebugLn(['TCustomCodeTool.DoDeleteNodes ',MainFilename]);
|
||||||
// first notify, so that references could be deleted clean
|
// first notify, so that references could be deleted clean
|
||||||
IncreaseTreeChangeStep(true);
|
IncreaseTreeChangeStep(true);
|
||||||
// then change
|
// then change
|
||||||
|
@ -76,6 +76,7 @@ type
|
|||||||
FShortestNodes: TAVLTree;
|
FShortestNodes: TAVLTree;
|
||||||
FStartCode: TCodeBuffer;
|
FStartCode: TCodeBuffer;
|
||||||
FStartCodeNode: TCodeTreeNode;
|
FStartCodeNode: TCodeTreeNode;
|
||||||
|
FStartTool: TFindDeclarationTool;
|
||||||
FStartX: integer;
|
FStartX: integer;
|
||||||
FStartY: integer;
|
FStartY: integer;
|
||||||
function AddContext(Tool: TFindDeclarationTool;
|
function AddContext(Tool: TFindDeclarationTool;
|
||||||
@ -97,6 +98,7 @@ type
|
|||||||
property StartCode: TCodeBuffer read FStartCode;
|
property StartCode: TCodeBuffer read FStartCode;
|
||||||
property StartX: integer read FStartX;
|
property StartX: integer read FStartX;
|
||||||
property StartY: integer read FStartY;
|
property StartY: integer read FStartY;
|
||||||
|
property StartTool: TFindDeclarationTool read FStartTool;
|
||||||
property StartCodeNode: TCodeTreeNode read FStartCodeNode;
|
property StartCodeNode: TCodeTreeNode read FStartCodeNode;
|
||||||
property OnGetCodeToolForBuffer: TOnGetCodeToolForBuffer
|
property OnGetCodeToolForBuffer: TOnGetCodeToolForBuffer
|
||||||
read FOnGetCodeToolForBuffer write FOnGetCodeToolForBuffer;
|
read FOnGetCodeToolForBuffer write FOnGetCodeToolForBuffer;
|
||||||
@ -272,7 +274,6 @@ end;
|
|||||||
function TDeclarationOverloadsGraph.Init(Code: TCodeBuffer; X, Y: integer
|
function TDeclarationOverloadsGraph.Init(Code: TCodeBuffer; X, Y: integer
|
||||||
): Boolean;
|
): Boolean;
|
||||||
var
|
var
|
||||||
Tool: TFindDeclarationTool;
|
|
||||||
CleanPos: integer;
|
CleanPos: integer;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
@ -280,18 +281,18 @@ begin
|
|||||||
FStartX:=X;
|
FStartX:=X;
|
||||||
FStartY:=Y;
|
FStartY:=Y;
|
||||||
|
|
||||||
Tool:=OnGetCodeToolForBuffer(Self,Code,true);
|
fStartTool:=OnGetCodeToolForBuffer(Self,Code,true);
|
||||||
if Tool.CaretToCleanPos(CodeXYPosition(X,Y,Code),CleanPos)<>0 then begin
|
if fStartTool.CaretToCleanPos(CodeXYPosition(X,Y,Code),CleanPos)<>0 then begin
|
||||||
DebugLn(['TDeclarationOverloadsGraph.Init Tool.CaretToCleanPos failed']);
|
DebugLn(['TDeclarationOverloadsGraph.Init Tool.CaretToCleanPos failed']);
|
||||||
exit(false);
|
exit(false);
|
||||||
end;
|
end;
|
||||||
fStartCodeNode:=Tool.FindDeepestNodeAtPos(CleanPos,true);
|
fStartCodeNode:=fStartTool.FindDeepestNodeAtPos(CleanPos,true);
|
||||||
//DebugLn(['TDeclarationOverloadsGraph.Init Add start context']);
|
DebugLn(['TDeclarationOverloadsGraph.Init Add start context ',FStartTool.MainFilename,' ',FStartCodeNode.DescAsString,' ',dbgstr(copy(FStartTool.Src,FStartCodeNode.StartPos,20))]);
|
||||||
AddContext(Tool,StartCodeNode);
|
AddContext(fStartTool,StartCodeNode);
|
||||||
|
|
||||||
fIdentifier:='';
|
fIdentifier:='';
|
||||||
if fStartCodeNode.Desc in AllIdentifierDefinitions+[ctnEnumIdentifier] then
|
if fStartCodeNode.Desc in AllIdentifierDefinitions+[ctnEnumIdentifier] then
|
||||||
fIdentifier:=GetIdentifier(@Tool.Src[fStartCodeNode.StartPos]);
|
fIdentifier:=GetIdentifier(@fStartTool.Src[fStartCodeNode.StartPos]);
|
||||||
|
|
||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
@ -33,7 +33,8 @@ uses
|
|||||||
Classes, SysUtils, LCLProc,FileUtil, LResources, Forms, Controls, Graphics,
|
Classes, SysUtils, LCLProc,FileUtil, LResources, Forms, Controls, Graphics,
|
||||||
Dialogs, ExtCtrls, StdCtrls, Buttons, ButtonPanel, ComCtrls, AvgLvlTree,
|
Dialogs, ExtCtrls, StdCtrls, Buttons, ButtonPanel, ComCtrls, AvgLvlTree,
|
||||||
// codetools
|
// codetools
|
||||||
CodeTree, CodeCache, CodeAtom, CodeToolManager, CodeGraph, FindOverloads,
|
FindDeclarationTool, PascalParserTool, CodeTree, CodeCache, CodeAtom,
|
||||||
|
CodeToolManager, CodeGraph, FindOverloads,
|
||||||
// IDE
|
// IDE
|
||||||
LazIDEIntf, ProjectIntf, SrcEditorIntf, IDEProcs;
|
LazIDEIntf, ProjectIntf, SrcEditorIntf, IDEProcs;
|
||||||
|
|
||||||
@ -122,10 +123,12 @@ type
|
|||||||
procedure OnIdle(Sender: TObject; var Done: Boolean);
|
procedure OnIdle(Sender: TObject; var Done: Boolean);
|
||||||
private
|
private
|
||||||
FIdleConnected: boolean;
|
FIdleConnected: boolean;
|
||||||
|
fCurTreeViewComplete: boolean;
|
||||||
fWorker: TFindOverloadsWorker;
|
fWorker: TFindOverloadsWorker;
|
||||||
procedure SetIdleConnected(const AValue: boolean);
|
procedure SetIdleConnected(const AValue: boolean);
|
||||||
procedure UpdateProgress;
|
procedure UpdateProgress;
|
||||||
procedure StopWorking;
|
procedure StopWorking;
|
||||||
|
procedure UpdateCurTreeView;
|
||||||
public
|
public
|
||||||
property Worker: TFindOverloadsWorker read fWorker;
|
property Worker: TFindOverloadsWorker read fWorker;
|
||||||
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
|
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
|
||||||
@ -226,6 +229,8 @@ begin
|
|||||||
if Done then
|
if Done then
|
||||||
IdleConnected:=false;
|
IdleConnected:=false;
|
||||||
UpdateProgress;
|
UpdateProgress;
|
||||||
|
if not fCurTreeViewComplete then
|
||||||
|
UpdateCurTreeView;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFindOverloadsDialog.SetIdleConnected(const AValue: boolean);
|
procedure TFindOverloadsDialog.SetIdleConnected(const AValue: boolean);
|
||||||
@ -260,6 +265,70 @@ begin
|
|||||||
Worker.StopSearching;
|
Worker.StopSearching;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TFindOverloadsDialog.UpdateCurTreeView;
|
||||||
|
var
|
||||||
|
s: String;
|
||||||
|
Node: TCodeTreeNode;
|
||||||
|
Tool: TFindDeclarationTool;
|
||||||
|
ParentNode: TCodeTreeNode;
|
||||||
|
begin
|
||||||
|
fCurTreeViewComplete:=true;
|
||||||
|
CurTreeView.BeginUpdate;
|
||||||
|
CurTreeView.Items.Clear;
|
||||||
|
Node:=Worker.Graph.StartCodeNode;
|
||||||
|
Tool:=Worker.Graph.StartTool;
|
||||||
|
if Node<>nil then begin
|
||||||
|
DebugLn(['TFindOverloadsDialog.UpdateCurTreeView ',Node.DescAsString,' ',dbgstr(copy(Tool.Src,Node.StartPos,20))]);
|
||||||
|
// unit name
|
||||||
|
s:=Tool.GetSourceName(false)+': ';
|
||||||
|
// keyword
|
||||||
|
case Node.Desc of
|
||||||
|
ctnEnumIdentifier: s:=s+'enum';
|
||||||
|
ctnVarDefinition: s:=s+'var';
|
||||||
|
ctnConstDefinition: s:=s+'const';
|
||||||
|
ctnTypeDefinition: s:=s+'type';
|
||||||
|
ctnGenericType: s:=s+'generic';
|
||||||
|
ctnProperty: s:=s+'property';
|
||||||
|
ctnProcedure: s:=s+'procedure';
|
||||||
|
ctnUseUnit: s:=s+'uses';
|
||||||
|
ctnUnit: s:=s+'unit';
|
||||||
|
ctnProgram: s:=s+'program';
|
||||||
|
ctnPackage: s:=s+'package';
|
||||||
|
ctnLibrary: s:=s+'library';
|
||||||
|
end;
|
||||||
|
s:=s+' ';
|
||||||
|
// context
|
||||||
|
if Node.Desc<>ctnEnumIdentifier then
|
||||||
|
begin
|
||||||
|
ParentNode:=Node.Parent;
|
||||||
|
while ParentNode<>nil do begin
|
||||||
|
case ParentNode.Desc of
|
||||||
|
ctnTypeDefinition,ctnGenericType:
|
||||||
|
s:=s+Tool.ExtractDefinitionName(Node)+'.';
|
||||||
|
end;
|
||||||
|
ParentNode:=ParentNode.Parent;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
// name
|
||||||
|
case Node.Desc of
|
||||||
|
ctnEnumIdentifier, ctnTypeDefinition, ctnConstDefinition, ctnVarDefinition,
|
||||||
|
ctnGenericType:
|
||||||
|
s:=s+Tool.ExtractDefinitionName(Node);
|
||||||
|
ctnProperty:
|
||||||
|
s:=s+Tool.ExtractPropName(Node,false);
|
||||||
|
ctnProcedure:
|
||||||
|
s:=s+Tool.ExtractProcName(Node,[phpWithoutClassName,phpCommentsToSpace]);
|
||||||
|
ctnUseUnit:
|
||||||
|
s:=s+Tool.ExtractNode(Node,[phpCommentsToSpace]);
|
||||||
|
ctnUnit,ctnProgram,ctnPackage,ctnLibrary:
|
||||||
|
s:=s+Tool.GetSourceName(false);
|
||||||
|
end;
|
||||||
|
// add node
|
||||||
|
CurTreeView.Items.Add(nil,s);
|
||||||
|
end;
|
||||||
|
CurTreeView.EndUpdate;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TFOWFile }
|
{ TFOWFile }
|
||||||
|
|
||||||
procedure TFOWFile.SetCode(const AValue: TCodeBuffer);
|
procedure TFOWFile.SetCode(const AValue: TCodeBuffer);
|
||||||
|
Loading…
Reference in New Issue
Block a user