mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-23 10:59:31 +01:00
IDE: identifier completion: do not replace virtualwith overrides for object, bug #14432
git-svn-id: trunk@21448 -
This commit is contained in:
parent
dcc5a7a431
commit
fcf2e7f4fb
@ -141,6 +141,7 @@ type
|
|||||||
ErrorOnNotFound: boolean): TCodeTreeNode;
|
ErrorOnNotFound: boolean): TCodeTreeNode;
|
||||||
function FindFirstIdentNodeInClass(ClassNode: TCodeTreeNode): TCodeTreeNode;
|
function FindFirstIdentNodeInClass(ClassNode: TCodeTreeNode): TCodeTreeNode;
|
||||||
function ClassSectionNodeStartsWithWord(ANode: TCodeTreeNode): boolean;
|
function ClassSectionNodeStartsWithWord(ANode: TCodeTreeNode): boolean;
|
||||||
|
function IsClassNode(Node: TCodeTreeNode): boolean; // class, not object
|
||||||
|
|
||||||
// records
|
// records
|
||||||
function ExtractRecordCaseType(RecordCaseNode: TCodeTreeNode): string;
|
function ExtractRecordCaseType(RecordCaseNode: TCodeTreeNode): string;
|
||||||
@ -1469,6 +1470,17 @@ begin
|
|||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TPascalReaderTool.IsClassNode(Node: TCodeTreeNode): boolean;
|
||||||
|
begin
|
||||||
|
if Node.Desc<>ctnClass then exit(false);
|
||||||
|
MoveCursorToNodeStart(Node);
|
||||||
|
ReadNextAtom;
|
||||||
|
if UpAtomIs('PACKED') then
|
||||||
|
ReadNextAtom;
|
||||||
|
if UpAtomIs('CLASS') then exit(true);
|
||||||
|
Result:=false;
|
||||||
|
end;
|
||||||
|
|
||||||
function TPascalReaderTool.ExtractRecordCaseType(RecordCaseNode: TCodeTreeNode
|
function TPascalReaderTool.ExtractRecordCaseType(RecordCaseNode: TCodeTreeNode
|
||||||
): string;
|
): string;
|
||||||
begin
|
begin
|
||||||
|
|||||||
@ -467,6 +467,7 @@ var
|
|||||||
ProcHeadFlags: TProcHeadAttributes;
|
ProcHeadFlags: TProcHeadAttributes;
|
||||||
CanAddSemicolon: Boolean;
|
CanAddSemicolon: Boolean;
|
||||||
CanAddComma: Boolean;
|
CanAddComma: Boolean;
|
||||||
|
ClassNode: TCodeTreeNode;
|
||||||
begin
|
begin
|
||||||
Result:='';
|
Result:='';
|
||||||
CursorToLeft:=0;
|
CursorToLeft:=0;
|
||||||
@ -550,6 +551,8 @@ begin
|
|||||||
then
|
then
|
||||||
Exclude(ProcHeadFlags,phpWithStart);
|
Exclude(ProcHeadFlags,phpWithStart);
|
||||||
Result:=IdentItem.Tool.ExtractProcHead(IdentItem.Node,ProcHeadFlags);
|
Result:=IdentItem.Tool.ExtractProcHead(IdentItem.Node,ProcHeadFlags);
|
||||||
|
ClassNode:=IdentItem.Node.GetNodeOfTypes([ctnClass,ctnClassInterface]);
|
||||||
|
if (ClassNode<>nil) and (IdentItem.Tool.IsClassNode(ClassNode)) then begin
|
||||||
// replace virtual and dynamic with override
|
// replace virtual and dynamic with override
|
||||||
ProcModifierPos:=System.Pos('VIRTUAL;',UpperCaseStr(Result));
|
ProcModifierPos:=System.Pos('VIRTUAL;',UpperCaseStr(Result));
|
||||||
if ProcModifierPos<1 then
|
if ProcModifierPos<1 then
|
||||||
@ -557,6 +560,7 @@ begin
|
|||||||
if ProcModifierPos>0 then
|
if ProcModifierPos>0 then
|
||||||
Result:=copy(Result,1,ProcModifierPos-1)+'override;'
|
Result:=copy(Result,1,ProcModifierPos-1)+'override;'
|
||||||
+copy(Result,ProcModifierPos+8,length(Result));
|
+copy(Result,ProcModifierPos+8,length(Result));
|
||||||
|
end;
|
||||||
// remove abstract
|
// remove abstract
|
||||||
ProcModifierPos:=System.Pos('ABSTRACT;',UpperCaseStr(Result));
|
ProcModifierPos:=System.Pos('ABSTRACT;',UpperCaseStr(Result));
|
||||||
if ProcModifierPos>0 then
|
if ProcModifierPos>0 then
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user