mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 01:39:42 +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;
|
||||
begin
|
||||
if Tree.Root<>nil then begin
|
||||
//DebugLn(['TCustomCodeTool.DoDeleteNodes ',MainFilename]);
|
||||
// first notify, so that references could be deleted clean
|
||||
IncreaseTreeChangeStep(true);
|
||||
// then change
|
||||
|
@ -76,6 +76,7 @@ type
|
||||
FShortestNodes: TAVLTree;
|
||||
FStartCode: TCodeBuffer;
|
||||
FStartCodeNode: TCodeTreeNode;
|
||||
FStartTool: TFindDeclarationTool;
|
||||
FStartX: integer;
|
||||
FStartY: integer;
|
||||
function AddContext(Tool: TFindDeclarationTool;
|
||||
@ -97,6 +98,7 @@ type
|
||||
property StartCode: TCodeBuffer read FStartCode;
|
||||
property StartX: integer read FStartX;
|
||||
property StartY: integer read FStartY;
|
||||
property StartTool: TFindDeclarationTool read FStartTool;
|
||||
property StartCodeNode: TCodeTreeNode read FStartCodeNode;
|
||||
property OnGetCodeToolForBuffer: TOnGetCodeToolForBuffer
|
||||
read FOnGetCodeToolForBuffer write FOnGetCodeToolForBuffer;
|
||||
@ -272,7 +274,6 @@ end;
|
||||
function TDeclarationOverloadsGraph.Init(Code: TCodeBuffer; X, Y: integer
|
||||
): Boolean;
|
||||
var
|
||||
Tool: TFindDeclarationTool;
|
||||
CleanPos: integer;
|
||||
begin
|
||||
Result:=false;
|
||||
@ -280,18 +281,18 @@ begin
|
||||
FStartX:=X;
|
||||
FStartY:=Y;
|
||||
|
||||
Tool:=OnGetCodeToolForBuffer(Self,Code,true);
|
||||
if Tool.CaretToCleanPos(CodeXYPosition(X,Y,Code),CleanPos)<>0 then begin
|
||||
fStartTool:=OnGetCodeToolForBuffer(Self,Code,true);
|
||||
if fStartTool.CaretToCleanPos(CodeXYPosition(X,Y,Code),CleanPos)<>0 then begin
|
||||
DebugLn(['TDeclarationOverloadsGraph.Init Tool.CaretToCleanPos failed']);
|
||||
exit(false);
|
||||
end;
|
||||
fStartCodeNode:=Tool.FindDeepestNodeAtPos(CleanPos,true);
|
||||
//DebugLn(['TDeclarationOverloadsGraph.Init Add start context']);
|
||||
AddContext(Tool,StartCodeNode);
|
||||
fStartCodeNode:=fStartTool.FindDeepestNodeAtPos(CleanPos,true);
|
||||
DebugLn(['TDeclarationOverloadsGraph.Init Add start context ',FStartTool.MainFilename,' ',FStartCodeNode.DescAsString,' ',dbgstr(copy(FStartTool.Src,FStartCodeNode.StartPos,20))]);
|
||||
AddContext(fStartTool,StartCodeNode);
|
||||
|
||||
fIdentifier:='';
|
||||
if fStartCodeNode.Desc in AllIdentifierDefinitions+[ctnEnumIdentifier] then
|
||||
fIdentifier:=GetIdentifier(@Tool.Src[fStartCodeNode.StartPos]);
|
||||
fIdentifier:=GetIdentifier(@fStartTool.Src[fStartCodeNode.StartPos]);
|
||||
|
||||
Result:=true;
|
||||
end;
|
||||
|
@ -33,7 +33,8 @@ uses
|
||||
Classes, SysUtils, LCLProc,FileUtil, LResources, Forms, Controls, Graphics,
|
||||
Dialogs, ExtCtrls, StdCtrls, Buttons, ButtonPanel, ComCtrls, AvgLvlTree,
|
||||
// codetools
|
||||
CodeTree, CodeCache, CodeAtom, CodeToolManager, CodeGraph, FindOverloads,
|
||||
FindDeclarationTool, PascalParserTool, CodeTree, CodeCache, CodeAtom,
|
||||
CodeToolManager, CodeGraph, FindOverloads,
|
||||
// IDE
|
||||
LazIDEIntf, ProjectIntf, SrcEditorIntf, IDEProcs;
|
||||
|
||||
@ -122,10 +123,12 @@ type
|
||||
procedure OnIdle(Sender: TObject; var Done: Boolean);
|
||||
private
|
||||
FIdleConnected: boolean;
|
||||
fCurTreeViewComplete: boolean;
|
||||
fWorker: TFindOverloadsWorker;
|
||||
procedure SetIdleConnected(const AValue: boolean);
|
||||
procedure UpdateProgress;
|
||||
procedure StopWorking;
|
||||
procedure UpdateCurTreeView;
|
||||
public
|
||||
property Worker: TFindOverloadsWorker read fWorker;
|
||||
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
|
||||
@ -226,6 +229,8 @@ begin
|
||||
if Done then
|
||||
IdleConnected:=false;
|
||||
UpdateProgress;
|
||||
if not fCurTreeViewComplete then
|
||||
UpdateCurTreeView;
|
||||
end;
|
||||
|
||||
procedure TFindOverloadsDialog.SetIdleConnected(const AValue: boolean);
|
||||
@ -260,6 +265,70 @@ begin
|
||||
Worker.StopSearching;
|
||||
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 }
|
||||
|
||||
procedure TFOWFile.SetCode(const AValue: TCodeBuffer);
|
||||
|
Loading…
Reference in New Issue
Block a user