mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 18:39:09 +02:00
IDE: find overloads: find main declaration
git-svn-id: trunk@19751 -
This commit is contained in:
parent
c62f7d1f75
commit
a927537fcb
@ -2116,19 +2116,24 @@ end;
|
|||||||
function TCodeToolManager.GatherOverloads(Code: TCodeBuffer; X, Y: integer; out
|
function TCodeToolManager.GatherOverloads(Code: TCodeBuffer; X, Y: integer; out
|
||||||
Graph: TDeclarationOverloadsGraph): boolean;
|
Graph: TDeclarationOverloadsGraph): boolean;
|
||||||
var
|
var
|
||||||
CursorPos: TCodeXYPosition;
|
NewCode: TCodeBuffer;
|
||||||
|
NewX, NewY, NewTopLine: integer;
|
||||||
begin
|
begin
|
||||||
Graph:=nil;
|
|
||||||
{$IFDEF CTDEBUG}
|
{$IFDEF CTDEBUG}
|
||||||
DebugLn('TCodeToolManager.GatherOverloads A ',Code.Filename);
|
DebugLn('TCodeToolManager.GatherOverloads A ',Code.Filename);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Result:=false;
|
Result:=false;
|
||||||
|
Graph:=nil;
|
||||||
|
if not FindMainDeclaration(Code,X,Y,NewCode,NewX,NewY,NewTopLine)
|
||||||
|
then begin
|
||||||
|
DebugLn('TCodeToolManager.GatherOverloads unable to FindMainDeclaration ',Code.Filename,' x=',dbgs(x),' y=',dbgs(y));
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if NewTopLine=0 then ;
|
||||||
if not InitCurCodeTool(Code) then exit;
|
if not InitCurCodeTool(Code) then exit;
|
||||||
CursorPos.X:=X;
|
|
||||||
CursorPos.Y:=Y;
|
|
||||||
CursorPos.Code:=Code;
|
|
||||||
try
|
try
|
||||||
Graph:=TDeclarationOverloadsGraph.Create;
|
Graph:=TDeclarationOverloadsGraph.Create;
|
||||||
|
Result:=Graph.Init(NewCode,NewX,NewY);
|
||||||
except
|
except
|
||||||
on e: Exception do Result:=HandleException(e);
|
on e: Exception do Result:=HandleException(e);
|
||||||
end;
|
end;
|
||||||
|
@ -30,7 +30,7 @@ unit FindOverloads;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, CodeGraph;
|
Classes, SysUtils, CodeGraph, CodeCache;
|
||||||
|
|
||||||
type
|
type
|
||||||
TOverloadsGraphNode = class(TCodeGraphNode)
|
TOverloadsGraphNode = class(TCodeGraphNode)
|
||||||
@ -55,12 +55,19 @@ type
|
|||||||
private
|
private
|
||||||
FGraph: TCodeGraph;
|
FGraph: TCodeGraph;
|
||||||
FIdentifier: string;
|
FIdentifier: string;
|
||||||
|
FStartCode: TCodeBuffer;
|
||||||
|
FStartX: integer;
|
||||||
|
FStartY: integer;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
|
function Init(Code: TCodeBuffer; X,Y: integer): Boolean;
|
||||||
property Identifier: string read FIdentifier;
|
property Identifier: string read FIdentifier;
|
||||||
property Graph: TCodeGraph read FGraph;
|
property Graph: TCodeGraph read FGraph;
|
||||||
|
property StartCode: TCodeBuffer read FStartCode;
|
||||||
|
property StartX: integer read FStartX;
|
||||||
|
property StartY: integer read FStartY;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -84,5 +91,18 @@ begin
|
|||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TDeclarationOverloadsGraph.Init(Code: TCodeBuffer; X, Y: integer
|
||||||
|
): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
FStartCode:=Code;
|
||||||
|
FStartX:=X;
|
||||||
|
FStartY:=Y;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -83,13 +83,12 @@ type
|
|||||||
procedure ScanSomeFiles;
|
procedure ScanSomeFiles;
|
||||||
procedure ScanFile(AFile: TFOWFile);
|
procedure ScanFile(AFile: TFOWFile);
|
||||||
public
|
public
|
||||||
StartCodeXY: TCodeXYPosition;
|
|
||||||
Scopes: TFindOverloadsScopes;
|
Scopes: TFindOverloadsScopes;
|
||||||
CompletedScopes: TFindOverloadsScopes;
|
CompletedScopes: TFindOverloadsScopes;
|
||||||
|
Graph: TDeclarationOverloadsGraph;
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Clear;
|
procedure Clear;
|
||||||
procedure SetStartPosition(Code: TCodeBuffer; X, Y: integer);
|
|
||||||
procedure Work;
|
procedure Work;
|
||||||
function Done: boolean;
|
function Done: boolean;
|
||||||
procedure StopSearching;
|
procedure StopSearching;
|
||||||
@ -154,13 +153,22 @@ function ShowFindOverloadsDialog(Code: TCodeBuffer; X, Y: integer
|
|||||||
): TModalResult;
|
): TModalResult;
|
||||||
var
|
var
|
||||||
FindOverloadsDialog: TFindOverloadsDialog;
|
FindOverloadsDialog: TFindOverloadsDialog;
|
||||||
|
Graph: TDeclarationOverloadsGraph;
|
||||||
begin
|
begin
|
||||||
FindOverloadsDialog:=TFindOverloadsDialog.Create(nil);
|
Graph:=nil;
|
||||||
|
FindOverloadsDialog:=nil;
|
||||||
try
|
try
|
||||||
FindOverloadsDialog.Worker.SetStartPosition(Code,X,Y);
|
if not CodeToolBoss.GatherOverloads(Code,X,Y,Graph) then begin
|
||||||
|
LazarusIDE.DoJumpToCodeToolBossError;
|
||||||
|
exit(mrCancel);
|
||||||
|
end;
|
||||||
|
DebugLn(['ShowFindOverloadsDialog ',Graph.StartCode.Filename,' ',Graph.StartX,',',Graph.StartY]);
|
||||||
|
FindOverloadsDialog:=TFindOverloadsDialog.Create(nil);
|
||||||
|
FindOverloadsDialog.Worker.Graph:=Graph;
|
||||||
Result:=FindOverloadsDialog.ShowModal;
|
Result:=FindOverloadsDialog.ShowModal;
|
||||||
finally
|
finally
|
||||||
FindOverloadsDialog.Free;
|
FindOverloadsDialog.Free;
|
||||||
|
Graph.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -374,14 +382,6 @@ begin
|
|||||||
FStagePosMax:=100;
|
FStagePosMax:=100;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFindOverloadsWorker.SetStartPosition(Code: TCodeBuffer; X, Y: integer
|
|
||||||
);
|
|
||||||
begin
|
|
||||||
StartCodeXY.Code:=Code;
|
|
||||||
StartCodeXY.X:=X;
|
|
||||||
StartCodeXY.Y:=Y;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TFindOverloadsWorker.Work;
|
procedure TFindOverloadsWorker.Work;
|
||||||
begin
|
begin
|
||||||
DebugLn(['TFindOverloadsWorker.Work START']);
|
DebugLn(['TFindOverloadsWorker.Work START']);
|
||||||
|
@ -4175,6 +4175,8 @@ var
|
|||||||
SelAvail: Boolean;
|
SelAvail: Boolean;
|
||||||
SelAvailAndWritable: Boolean;
|
SelAvailAndWritable: Boolean;
|
||||||
CurFilename: String;
|
CurFilename: String;
|
||||||
|
CurWordAtCursor: String;
|
||||||
|
AtIdentifier: Boolean;
|
||||||
begin
|
begin
|
||||||
//DebugLn(['TSourceNotebook.SrcPopUpMenuPopup ',dbgsName(Sender)]);
|
//DebugLn(['TSourceNotebook.SrcPopUpMenuPopup ',dbgsName(Sender)]);
|
||||||
//SourceEditorMenuRoot.WriteDebugReport('TSourceNotebook.SrcPopUpMenuPopup START ',true);
|
//SourceEditorMenuRoot.WriteDebugReport('TSourceNotebook.SrcPopUpMenuPopup START ',true);
|
||||||
@ -4241,18 +4243,21 @@ begin
|
|||||||
EditorPopupPoint:=EditorComp.ScreenToClient(SrcPopUpMenu.PopupPoint);
|
EditorPopupPoint:=EditorComp.ScreenToClient(SrcPopUpMenu.PopupPoint);
|
||||||
if EditorPopupPoint.X>EditorComp.GutterWidth then begin
|
if EditorPopupPoint.X>EditorComp.GutterWidth then begin
|
||||||
// user clicked on text
|
// user clicked on text
|
||||||
|
// collect some flags
|
||||||
SelAvail:=ASrcEdit.EditorComponent.SelAvail;
|
SelAvail:=ASrcEdit.EditorComponent.SelAvail;
|
||||||
SelAvailAndWritable:=SelAvail and (not ASrcEdit.ReadOnly);
|
SelAvailAndWritable:=SelAvail and (not ASrcEdit.ReadOnly);
|
||||||
SrcEditMenuEncloseSelection.Enabled := SelAvailAndWritable;
|
SrcEditMenuEncloseSelection.Enabled := SelAvailAndWritable;
|
||||||
SrcEditMenuExtractProc.Enabled := SelAvailAndWritable;
|
SrcEditMenuExtractProc.Enabled := SelAvailAndWritable;
|
||||||
SrcEditMenuInvertAssignment.Enabled := SelAvailAndWritable;
|
SrcEditMenuInvertAssignment.Enabled := SelAvailAndWritable;
|
||||||
SrcEditMenuFindIdentifierReferences.Enabled:=
|
CurWordAtCursor:=ASrcEdit.GetWordAtCurrentCaret;
|
||||||
IsValidIdent(ASrcEdit.GetWordAtCurrentCaret);
|
AtIdentifier:=IsValidIdent(CurWordAtCursor);
|
||||||
SrcEditMenuRenameIdentifier.Enabled:=
|
// enable menu items
|
||||||
IsValidIdent(ASrcEdit.GetWordAtCurrentCaret)
|
SrcEditMenuFindIdentifierReferences.Enabled:=AtIdentifier;
|
||||||
and (not ASrcEdit.ReadOnly);
|
SrcEditMenuRenameIdentifier.Enabled:=AtIdentifier
|
||||||
|
and (not ASrcEdit.ReadOnly);
|
||||||
SrcEditMenuShowAbstractMethods.Enabled:=not ASrcEdit.ReadOnly;
|
SrcEditMenuShowAbstractMethods.Enabled:=not ASrcEdit.ReadOnly;
|
||||||
SrcEditMenuShowEmptyMethods.Enabled:=not ASrcEdit.ReadOnly;
|
SrcEditMenuShowEmptyMethods.Enabled:=not ASrcEdit.ReadOnly;
|
||||||
|
SrcEditMenuFindOverloads.Enabled:=AtIdentifier;
|
||||||
end else begin
|
end else begin
|
||||||
// user clicked on gutter
|
// user clicked on gutter
|
||||||
SourceEditorMarks.GetMarksForLine(EditorComp,EditorComp.CaretY,
|
SourceEditorMarks.GetMarksForLine(EditorComp,EditorComp.CaretY,
|
||||||
|
Loading…
Reference in New Issue
Block a user