IDE: identifier completion: do not replace virtualwith overrides for object, bug #14432

git-svn-id: trunk@21448 -
This commit is contained in:
mattias 2009-08-25 17:25:33 +00:00
parent dcc5a7a431
commit fcf2e7f4fb
2 changed files with 23 additions and 7 deletions

View File

@ -141,6 +141,7 @@ type
ErrorOnNotFound: boolean): TCodeTreeNode;
function FindFirstIdentNodeInClass(ClassNode: TCodeTreeNode): TCodeTreeNode;
function ClassSectionNodeStartsWithWord(ANode: TCodeTreeNode): boolean;
function IsClassNode(Node: TCodeTreeNode): boolean; // class, not object
// records
function ExtractRecordCaseType(RecordCaseNode: TCodeTreeNode): string;
@ -1469,6 +1470,17 @@ begin
Result:=true;
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
): string;
begin

View File

@ -467,6 +467,7 @@ var
ProcHeadFlags: TProcHeadAttributes;
CanAddSemicolon: Boolean;
CanAddComma: Boolean;
ClassNode: TCodeTreeNode;
begin
Result:='';
CursorToLeft:=0;
@ -550,13 +551,16 @@ begin
then
Exclude(ProcHeadFlags,phpWithStart);
Result:=IdentItem.Tool.ExtractProcHead(IdentItem.Node,ProcHeadFlags);
// replace virtual and dynamic with override
ProcModifierPos:=System.Pos('VIRTUAL;',UpperCaseStr(Result));
if ProcModifierPos<1 then
ProcModifierPos:=System.Pos('DYNAMIC;',UpperCaseStr(Result));
if ProcModifierPos>0 then
Result:=copy(Result,1,ProcModifierPos-1)+'override;'
+copy(Result,ProcModifierPos+8,length(Result));
ClassNode:=IdentItem.Node.GetNodeOfTypes([ctnClass,ctnClassInterface]);
if (ClassNode<>nil) and (IdentItem.Tool.IsClassNode(ClassNode)) then begin
// replace virtual and dynamic with override
ProcModifierPos:=System.Pos('VIRTUAL;',UpperCaseStr(Result));
if ProcModifierPos<1 then
ProcModifierPos:=System.Pos('DYNAMIC;',UpperCaseStr(Result));
if ProcModifierPos>0 then
Result:=copy(Result,1,ProcModifierPos-1)+'override;'
+copy(Result,ProcModifierPos+8,length(Result));
end;
// remove abstract
ProcModifierPos:=System.Pos('ABSTRACT;',UpperCaseStr(Result));
if ProcModifierPos>0 then