From a418b3b9fc798dc72d96048f98603e6628259da8 Mon Sep 17 00:00:00 2001 From: mattias Date: Tue, 13 Jan 2004 22:34:06 +0000 Subject: [PATCH] changed consistency stops during method renaming to errors git-svn-id: trunk@5063 - --- components/codetools/eventcodetool.pas | 64 +++++++++++++++++--------- examples/easter/holyday.lpi | 2 +- ide/main.pp | 14 ++++-- ideintf/objectinspector.pp | 13 +++++- 4 files changed, 63 insertions(+), 30 deletions(-) diff --git a/components/codetools/eventcodetool.pas b/components/codetools/eventcodetool.pas index 7e075603a1..56eb7b439c 100644 --- a/components/codetools/eventcodetool.pas +++ b/components/codetools/eventcodetool.pas @@ -479,7 +479,6 @@ function TEventsCodeTool.RenamePublishedMethod(const UpperClassName, var ClassNode: TCodeTreeNode; begin BuildTree(false); - if not EndOfSourceFound then exit; ClassNode:=FindClassNodeInInterface(UpperClassName,true,false,true); Result:=RenamePublishedMethod(ClassNode,UpperOldMethodName,NewMethodName, SourceChangeCache); @@ -489,45 +488,64 @@ function TEventsCodeTool.RenamePublishedMethod(ClassNode: TCodeTreeNode; const UpperOldMethodName, NewMethodName: string; SourceChangeCache: TSourceChangeCache): boolean; // rename published method in class and in procedure itself -var ANode, ProcHeadNode: TCodeTreeNode; +var ProcNode, ProcHeadNode: TCodeTreeNode; NameStart, NameEnd: integer; UpperClassName: string; + ProcBodyNode: TCodeTreeNode; begin Result:=false; - if (ClassNode=nil) or (ClassNode.Desc<>ctnClass) or (UpperOldMethodName='') - or (NewMethodName='') or (SourceChangeCache=nil) or (Scanner=nil) then - exit; + if (ClassNode=nil) or (ClassNode.Desc<>ctnClass) then + RaiseException('Invalid class node'); + if (UpperOldMethodName='') then + RaiseException('Invalid UpperOldMethodName="'+UpperOldMethodName+'"'); + if (NewMethodName='') then + RaiseException('Invalid NewMethodName="'+NewMethodName+'"'); + if (SourceChangeCache=nil) or (Scanner=nil) then + RaiseException('Invalid SourceChangeCache or Scanner'); SourceChangeCache.MainScanner:=Scanner; // rename in class - ANode:=FindIdentifierNodeInClass(ClassNode,@UpperOldMethodName[1]); - if (ANode=nil) then begin + ProcNode:=FindIdentifierNodeInClass(ClassNode,@UpperOldMethodName[1]); + if (ProcNode=nil) then begin MoveCursorToNodeStart(ClassNode); RaiseExceptionFmt(ctsOldMethodNotFound,[UpperOldMethodName]); end; - if (ANode.Desc<>ctnProcedure) then begin - MoveCursorToNodeStart(ANode); + if (ProcNode.Desc<>ctnProcedure) then begin + MoveCursorToNodeStart(ProcNode); RaiseExceptionFmt(ctsOldMethodNotFound,[UpperOldMethodName]); end; - ProcHeadNode:=ANode.FirstChild; - if ProcHeadNode=nil then exit; + ProcHeadNode:=ProcNode.FirstChild; + if ProcHeadNode=nil then begin + MoveCursorToNodeStart(ProcNode); + RaiseException('Invalid proc header'); + end; NameStart:=ProcHeadNode.StartPos; NameEnd:=NameStart; while (NameEnd<=SrcLen) and (IsIdentChar[UpperSrc[NameEnd]]) do inc(NameEnd); if not SourceChangeCache.Replace(gtNone,gtNone,NameStart,NameEnd, - NewMethodName) then exit; - // rename procedure itself -> find implementation node + NewMethodName) + then begin + MoveCursorToNodeStart(ProcHeadNode); + RaiseException('Unable to rename method declaration'); + end; + // main goal achieved + Result:=true; + + // rename procedure body -> find implementation node UpperClassName:=ExtractClassName(ClassNode,true); - ANode:=FindMethodNodeInImplementation(UpperClassName,UpperOldMethodName,false); - if ANode=nil then exit; - ProcHeadNode:=ANode.FirstChild; - if ProcHeadNode=nil then exit; - MoveCursorToNodeStart(ProcHeadNode); - ReadNextAtom; // read class name - ReadNextAtom; // read '.' - ReadNextAtom; // read method name - Result:=SourceChangeCache.Replace(gtNone,gtNone, - CurPos.StartPos,CurPos.EndPos,NewMethodName); + ProcBodyNode:=FindMethodNodeInImplementation(UpperClassName, + UpperOldMethodName,false); + if (ProcBodyNode<>nil) and (ProcBodyNode<>nil) then begin + ProcHeadNode:=ProcBodyNode.FirstChild; + MoveCursorToNodeStart(ProcHeadNode); + ReadNextAtom; // read class name + ReadNextAtom; // read '.' + ReadNextAtom; // read method name + SourceChangeCache.Replace(gtNone,gtNone, + CurPos.StartPos,CurPos.EndPos,NewMethodName); + end; + + Result:=SourceChangeCache.Apply; end; function TEventsCodeTool.CreatePublishedMethod(const UpperClassName, diff --git a/examples/easter/holyday.lpi b/examples/easter/holyday.lpi index a1f743a101..f14866de53 100644 --- a/examples/easter/holyday.lpi +++ b/examples/easter/holyday.lpi @@ -26,7 +26,7 @@ - + diff --git a/ide/main.pp b/ide/main.pp index 9141f3e802..913a499076 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -9881,7 +9881,8 @@ end; procedure TMainIDE.OnPropHookRenameMethod(const CurName, NewName: ShortString); var ActiveSrcEdit: TSourceEditor; ActiveUnitInfo: TUnitInfo; - r: boolean; + BossResult: boolean; + ErrorMsg: String; begin if not BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[ctfSwitchToFormSource]) then exit; @@ -9892,19 +9893,21 @@ begin FOpenEditorsOnCodeToolChange:=true; try // create published method - r:=CodeToolBoss.RenamePublishedMethod(ActiveUnitInfo.Source, + BossResult:=CodeToolBoss.RenamePublishedMethod(ActiveUnitInfo.Source, ActiveUnitInfo.Component.ClassName,CurName,NewName); {$IFDEF IDE_DEBUG} writeln(''); writeln('[TMainIDE.OnPropHookRenameMethod] ************2 ',r); {$ENDIF} ApplyCodeToolChanges; - if r then begin + if BossResult then begin FormEditor1.RenameJITMethod(ActiveUnitInfo.Component,CurName,NewName); end else begin + ErrorMsg:=CodeToolBoss.ErrorMessage; DoJumpToCodeToolBossError; raise Exception.Create( - lisUnableToRenameMethodPlzFixTheErrorShownInTheMessag); + lisUnableToRenameMethodPlzFixTheErrorShownInTheMessag + +#13#13+lisError+ErrorMsg); end; finally FOpenEditorsOnCodeToolChange:=false; @@ -10269,6 +10272,9 @@ end. { ============================================================================= $Log$ + Revision 1.701 2004/01/13 22:34:05 mattias + changed consistency stops during method renaming to errors + Revision 1.700 2004/01/13 16:39:01 mattias changed consistency stops during var renaming to errors diff --git a/ideintf/objectinspector.pp b/ideintf/objectinspector.pp index 471298a374..9e3d0a7849 100644 --- a/ideintf/objectinspector.pp +++ b/ideintf/objectinspector.pp @@ -1285,10 +1285,19 @@ begin if (ItemIndex=0) then (ShrinkRow(ItemIndex)); + if (FCurrentEdit=nil) + and (ItemIndex>=0) and (Rows[ItemIndex].Expanded) then + ShrinkRow(ItemIndex) + else + Handled:=false; VK_RIGHT: - if (ItemIndex>=0) then (ExpandRow(ItemIndex)); + if (FCurrentEdit=nil) + and (ItemIndex>=0) and (not Rows[ItemIndex].Expanded) + and (paSubProperties in Rows[ItemIndex].Editor.GetAttributes) then + ExpandRow(ItemIndex) + else + Handled:=false; VK_RETURN: SetRowValue;