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