mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-03 16:07:19 +01:00
codetools: fixed FindSourceNameReferences to check also source name
This commit is contained in:
parent
f61782fb4a
commit
fd115f2c71
@ -7229,6 +7229,7 @@ function TFindDeclarationTool.FindSourceNameReferences(const TargetFilename: str
|
||||
TreeOfPCodeXYPosition: TAVLTree; SyntaxExceptions: boolean): boolean;
|
||||
var
|
||||
IsSelf: Boolean; // true = searching references of my program/unit name
|
||||
MySrcName: String;
|
||||
LocalSrcNamePos: integer;
|
||||
CleanPositions: TIntegerDynArray;
|
||||
CleanPosCount: integer;
|
||||
@ -7356,6 +7357,22 @@ var
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
procedure FindLongestSrcName(const Expr: string;
|
||||
var BestUseName: string; var BestDotCount: integer);
|
||||
var
|
||||
ExprP, SrcNameP: PChar;
|
||||
DotCount: Integer;
|
||||
begin
|
||||
ExprP:=PChar(Expr);
|
||||
SrcNameP:=PChar(MySrcName);
|
||||
if CompareDottedIdentifiers(SrcNameP,ExprP)<>0 then exit;
|
||||
DotCount:=GetDotCountInIdentifier(SrcNameP);
|
||||
if DotCount>BestDotCount then begin
|
||||
BestDotCount:=DotCount;
|
||||
BestUseName:=MySrcName;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure FindLongestUsesName(UseNames: TStringArray; const Expr: string;
|
||||
var BestUseName: string; var BestDotCount: integer);
|
||||
var
|
||||
@ -7410,6 +7427,8 @@ var
|
||||
FindLongestUsesName(ImplUseNames,Expr,BestUseName,BestDotCount);
|
||||
if (InterfaceUsesNode<>nil) and (InterfaceUsesNode.EndPos<=StartPos) then
|
||||
FindLongestUsesName(IntfUseNames,Expr,BestUseName,BestDotCount);
|
||||
FindLongestSrcName(Expr,BestUseName,BestDotCount);
|
||||
|
||||
if (BestUseName<>'')
|
||||
and (CompareDottedIdentifiers(PChar(BestUseName),PChar(LocalSrcName))<>0) then
|
||||
begin
|
||||
@ -7695,7 +7714,6 @@ var
|
||||
|
||||
var
|
||||
NamePos: TAtomPosition;
|
||||
MySrcName: String;
|
||||
StartPos, MaxPos: Integer;
|
||||
begin
|
||||
Result:=false;
|
||||
|
||||
@ -1529,28 +1529,43 @@ begin
|
||||
end;
|
||||
|
||||
procedure TTestRefactoring.TestRenameProgramName_ToraToraTora;
|
||||
var
|
||||
ToraUnit: TCodeBuffer;
|
||||
begin
|
||||
Add([
|
||||
'program tora.tora.{comment}tora;',
|
||||
'{$mode objFPC}',
|
||||
'var Toranaga: longint;',
|
||||
'begin',
|
||||
' Toranaga:=3;',
|
||||
' tora.tora.tora.Toranaga:=3*Toranaga;',
|
||||
' tora.{}tora.{comment}tora.{}Toranaga:=3*tora.tora.tora.Toranaga;',
|
||||
'end.',
|
||||
'']);
|
||||
RenameSourceName('Red.Green.Blue','red.green.blue.pas');
|
||||
CheckDiff(Code,[
|
||||
'program Red.Green.{comment}Blue;',
|
||||
'{$mode objFPC}',
|
||||
'var Toranaga: longint;',
|
||||
'begin',
|
||||
' Toranaga:=3;',
|
||||
' Red.Green.Blue.Toranaga:=3*Toranaga;',
|
||||
' Red.{}Green.{comment}Blue.{}Toranaga:=3*Red.Green.Blue.Toranaga;',
|
||||
'end.',
|
||||
'']);
|
||||
ToraUnit:=CodeToolBoss.CreateFile('tora.pas');
|
||||
try
|
||||
ToraUnit.Source:=LinesToStr([
|
||||
'unit Tora;',
|
||||
'interface',
|
||||
'implementation',
|
||||
'end.']);
|
||||
|
||||
Add([
|
||||
'program tora.tora.{comment}tora;',
|
||||
'{$mode objFPC}',
|
||||
'uses tora;',
|
||||
'var Toranaga: longint;',
|
||||
'begin',
|
||||
' Toranaga:=3;',
|
||||
' tora.tora.tora.Toranaga:=3*Toranaga;',
|
||||
' tora.{}tora.{comment}tora.{}Toranaga:=3*tora.tora.tora.Toranaga;',
|
||||
'end.',
|
||||
'']);
|
||||
RenameSourceName('Red.Green.Blue','red.green.blue.pas');
|
||||
CheckDiff(Code,[
|
||||
'program Red.Green.{comment}Blue;',
|
||||
'{$mode objFPC}',
|
||||
'uses tora;',
|
||||
'var Toranaga: longint;',
|
||||
'begin',
|
||||
' Toranaga:=3;',
|
||||
' Red.Green.Blue.Toranaga:=3*Toranaga;',
|
||||
' Red.{}Green.{comment}Blue.{}Toranaga:=3*Red.Green.Blue.Toranaga;',
|
||||
'end.',
|
||||
'']);
|
||||
finally
|
||||
ToraUnit.IsDeleted:=true;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTestRefactoring.TestRenameUnitName_IncludeUsedTwiceInOneUnit;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user