From 62517a19781e57dd1bd426507cecc2151573e234 Mon Sep 17 00:00:00 2001 From: juha Date: Sat, 29 Dec 2012 22:32:30 +0000 Subject: [PATCH] Converter: find replacement also for units that are omitted from project (they have a valid Lazarus package). Improve messages git-svn-id: trunk@39689 - --- converter/convertdelphi.pas | 10 +++++++++- converter/usedunits.pas | 22 +++++++++++++++++++--- ide/lazarusidestrconsts.pas | 6 +++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/converter/convertdelphi.pas b/converter/convertdelphi.pas index 83b2556ba1..90bf1c6d53 100644 --- a/converter/convertdelphi.pas +++ b/converter/convertdelphi.pas @@ -617,6 +617,9 @@ function TDelphiUnit.ConvertUnitFile: TModalResult; // Comment out automatically units that were commented in other files. fUsedUnitsTool.MainUsedUnits.CommentAutomatic(fOwnerConverter.fAllCommentedUnits); fUsedUnitsTool.ImplUsedUnits.CommentAutomatic(fOwnerConverter.fAllCommentedUnits); + // Remove omitted units from MissingUnits. + fUsedUnitsTool.MainUsedUnits.OmitUnits; + fUsedUnitsTool.ImplUsedUnits.OmitUnits; if fUsedUnitsTool.MissingUnitCount=0 then exit; // Interactive dialog for searching unit. Result:=AskUnitPathFromUser; @@ -1017,8 +1020,10 @@ var Converter: TDelphiUnit; i: Integer; begin - if not fSettings.SameDfmFile then + if not fSettings.SameDfmFile then begin + IDEMessagesWindow.AddMsg('', '', -1); IDEMessagesWindow.AddMsg(lisConvDelphiRepairingFormFiles, '', -1); + end; Application.ProcessMessages; Screen.Cursor:=crHourGlass; try @@ -1484,6 +1489,7 @@ begin MisUnits:=nil; NormalUnits:=nil; try + IDEMessagesWindow.AddMsg('', '', -1); IDEMessagesWindow.AddMsg(lisConvDelphiFindAllUnitFiles, '', -1); Application.ProcessMessages; if not CodeToolBoss.FindDelphiProjectUnits(fMainUnitConverter.fPascalBuffer, @@ -1552,6 +1558,7 @@ begin ConvUnits:=TObjectList.Create; try // convert all units and fix .lfm files + IDEMessagesWindow.AddMsg('', '', -1); IDEMessagesWindow.AddMsg(lisConvDelphiConvertingUnitFiles, '', -1); Application.ProcessMessages; for i:=0 to LazProject.UnitCount-1 do begin @@ -1732,6 +1739,7 @@ begin ConvUnits:=TObjectList.create; try // convert all units and fix .lfm files + IDEMessagesWindow.AddMsg('', '', -1); IDEMessagesWindow.AddMsg(lisConvDelphiConvertingUnitFiles, '', -1); Application.ProcessMessages; for i:=0 to LazPackage.FileCount-1 do begin diff --git a/converter/usedunits.pas b/converter/usedunits.pas index 10160f88f6..c050308ced 100644 --- a/converter/usedunits.pas +++ b/converter/usedunits.pas @@ -76,6 +76,7 @@ type constructor Create(ACTLink: TCodeToolLink; aOwnerTool: TUsedUnitsTool); destructor Destroy; override; procedure CommentAutomatic(ACommentedUnits: TStringList); + procedure OmitUnits; public property UnitsToRemove: TStringList read fUnitsToRemove; property UnitsToRename: TStringToStringTree read fUnitsToRename; @@ -211,6 +212,7 @@ var NewUnitName, NewInFilename: String; AFilename, s, LowNU: String; x: Integer; + OmitUnit: Boolean; begin UsesNode:=UsesSectionNode; if UsesNode=nil then exit(true); @@ -234,16 +236,19 @@ begin if NewInFilename<>'' then s:=s+' in '''+NewInFilename+''''; if AFilename<>'' then begin // unit found - if (NewUnitName<>OldUnitName) and not Settings.OmitProjUnits.Find(NewUnitName,x) - then begin + OmitUnit := Settings.OmitProjUnits.Find(NewUnitName,x); + if (NewUnitName<>OldUnitName) and not OmitUnit then begin // Character case differs, fix it. fUnitsToFixCase[OldUnitName]:=NewUnitName; IDEMessagesWindow.AddMsg(Format(lisConvDelphiFixedUnitCase, [OldUnitName, NewUnitName]), '', -1); end; + // Report omitted units as missing, pretend they don't exist here, + if OmitUnit then // but they can have replacements. + fMissingUnits.Add(NewUnitName) // Report Windows specific units as missing if target is MultiPlatform. // Needed if work-platform is Windows (kind of a hack). - if Settings.MultiPlatform and IsWinSpecificUnit(LowNU) then + else if Settings.MultiPlatform and IsWinSpecificUnit(LowNU) then fMissingUnits.Add(s); // Check if the unit is not part of project and needs conversion, too. if Assigned(fOwnerTool.OnCheckUnitForConversion) then @@ -434,6 +439,17 @@ begin end; end; +procedure TUsedUnits.OmitUnits; +// Remove globally omitted units from MissingUnits. +// Those units were added to MissingUnits to find possible replacements. +var + i, x: Integer; +begin + for i:=fMissingUnits.Count-1 downto 0 do + if fCTLink.Settings.OmitProjUnits.Find(fMissingUnits[i], x) then + fMissingUnits.Delete(i); +end; + function TUsedUnits.RemoveUnits: boolean; // Remove units var diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 56197d24fd..46205febac 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -5331,10 +5331,10 @@ resourcestring lisConvDelphiConvertDelphiUnit = 'Convert Delphi unit'; lisConvDelphiConvertDelphiProject = 'Convert Delphi project'; lisConvDelphiConvertDelphiPackage = 'Convert Delphi package'; - lisConvDelphiFindAllUnitFiles = '*** Find all unit files ... ***'; - lisConvDelphiRepairingFormFiles = '*** Repairing form files ... ***'; + lisConvDelphiFindAllUnitFiles = '*** Find all unit files ***'; + lisConvDelphiRepairingFormFiles = '*** Fixing used units and Repairing form files ***'; + lisConvDelphiConvertingUnitFiles = '*** Converting unit files ***'; lisConvDelphiRepairingFormFile = '* Repairing form file %s *'; - lisConvDelphiConvertingUnitFiles = '*** Converting unit files ... ***'; lisConvDelphiConvertingFile = '* Converting file %s *'; lisConvDelphiFixingUsedUnits = '* Fixing used units for file %s *'; lisConvDelphiChangedEncodingToUTF8 = 'Changed encoding from %s to UTF-8';