IDE: find overloads: show start identifier in dialog

git-svn-id: trunk@19778 -
This commit is contained in:
mattias 2009-05-03 04:00:35 +00:00
parent 28a1b83734
commit dfe1e5a3cf
3 changed files with 79 additions and 8 deletions

View File

@ -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

View File

@ -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;

View File

@ -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);