Converter: Improve messages. Show urgency, file name, coordinates. Relevant file now opens when clicking a message.

git-svn-id: trunk@51674 -
This commit is contained in:
juha 2016-02-21 14:05:42 +00:00
parent 1a992ed303
commit f42ebf10a7
6 changed files with 141 additions and 91 deletions

View File

@ -40,8 +40,10 @@ uses
CodeCache, SourceChanger, CustomCodeTool, CodeToolsStructs, CodeCache, SourceChanger, CustomCodeTool, CodeToolsStructs,
// LazUtils // LazUtils
LazFileUtils, LazFileUtils,
// IdeIntf
LazIDEIntf, IDEExternToolIntf,
// IDE // IDE
LazIDEIntf, IDEExternToolIntf, FormEditor, LazarusIDEStrConsts, FormEditor, LazarusIDEStrConsts,
// Converter // Converter
ConverterTypes, ConvertSettings, ReplaceNamesUnit, ReplaceFuncsUnit; ConverterTypes, ConvertSettings, ReplaceNamesUnit, ReplaceFuncsUnit;
@ -252,6 +254,7 @@ function TConvDelphiCodeTool.RenameUnitIfNeeded: boolean;
// Change the unit name to match the disk name unless the disk name is all lowercase. // Change the unit name to match the disk name unless the disk name is all lowercase.
var var
NamePos: TAtomPosition; NamePos: TAtomPosition;
CaretPos: TCodeXYPosition;
DiskNm, UnitNm: String; DiskNm, UnitNm: String;
begin begin
Result:=false; Result:=false;
@ -265,7 +268,10 @@ begin
SrcCache.MainScanner:=CodeTool.Scanner; SrcCache.MainScanner:=CodeTool.Scanner;
SrcCache.Replace(gtNone, gtNone, NamePos.StartPos, NamePos.EndPos, DiskNm); SrcCache.Replace(gtNone, gtNone, NamePos.StartPos, NamePos.EndPos, DiskNm);
if not SrcCache.Apply then exit; if not SrcCache.Apply then exit;
fSettings.AddLogLine(Format(lisConvFixedUnitName, [UnitNm, DiskNm])); if CodeTool.CleanPosToCaret(NamePos.StartPos, CaretPos) then
fSettings.AddLogLine(mluNote,
Format(lisConvFixedUnitName, [UnitNm, DiskNm]), fCode.Filename,
CaretPos.Y, CaretPos.X);
end; end;
end; end;
end; end;
@ -496,6 +502,7 @@ var
var var
FuncInfo: TFuncReplacement; FuncInfo: TFuncReplacement;
CaretPos: TCodeXYPosition;
PossibleCommentPos: Integer; // Start looking for comments here. PossibleCommentPos: Integer; // Start looking for comments here.
i: Integer; i: Integer;
s, NewFunc, Comment: String; s, NewFunc, Comment: String;
@ -510,24 +517,29 @@ begin
ReplacementParams.Clear; ReplacementParams.Clear;
PossibleCommentPos:=ParseReplacementParams(FuncInfo.ReplFunc); PossibleCommentPos:=ParseReplacementParams(FuncInfo.ReplFunc);
// Replace only if the params match somehow, so eg. a variable is not replaced. // Replace only if the params match somehow, so eg. a variable is not replaced.
if (FuncInfo.Params.Count>0) or (ReplacementParams.Count=0) then begin if (FuncInfo.Params.Count>0) or (ReplacementParams.Count=0) then
with fCTLink do
begin
NewFunc:=InsertParams2Replacement(FuncInfo); NewFunc:=InsertParams2Replacement(FuncInfo);
// Separate function body // Separate function body
NewFunc:=NewFunc+FuncInfo.InclEmptyBrackets+FuncInfo.InclSemiColon; NewFunc:=NewFunc+FuncInfo.InclEmptyBrackets+FuncInfo.InclSemiColon;
if fCTLink.fSettings.FuncReplaceComment then if fSettings.FuncReplaceComment then
NewFunc:=NewFunc+Format(lisConvConvertedFrom, [FuncInfo.FuncName]); NewFunc:=NewFunc+Format(lisConvConvertedFrom, [FuncInfo.FuncName]);
Comment:=GetComment(FuncInfo.ReplFunc, PossibleCommentPos); Comment:=GetComment(FuncInfo.ReplFunc, PossibleCommentPos);
if Comment<>'' then // Possible comment from the configuration if Comment<>'' then // Possible comment from the configuration
NewFunc:=NewFunc+' { ' +Comment+' }'; NewFunc:=NewFunc+' { ' +Comment+' }';
// Old function call with params for IDE message output. // Old function call with params for IDE message output.
s:=copy(fCTLink.CodeTool.Src, FuncInfo.StartPos, FuncInfo.EndPos-FuncInfo.StartPos); s:=copy(CodeTool.Src, FuncInfo.StartPos, FuncInfo.EndPos-FuncInfo.StartPos);
s:=StringReplace(s, #10, '', [rfReplaceAll]); s:=StringReplace(s, #10, '', [rfReplaceAll]);
s:=StringReplace(s, #13, '', [rfReplaceAll]); s:=StringReplace(s, #13, '', [rfReplaceAll]);
// Now replace it. // Now replace it.
fCTLink.ResetMainScanner; ResetMainScanner;
if not fCTLink.SrcCache.Replace(gtNone, gtNone, if not SrcCache.Replace(gtNone, gtNone,
FuncInfo.StartPos, FuncInfo.EndPos, NewFunc) then exit; FuncInfo.StartPos, FuncInfo.EndPos, NewFunc) then exit;
fCTLink.fSettings.AddLogLine(Format(lisConvReplacedCall, [s, NewFunc])); if CodeTool.CleanPosToCaret(FuncInfo.StartPos, CaretPos) then
fSettings.AddLogLine(mluNote,
Format(lisConvReplacedCall, [s, NewFunc]), fCode.Filename,
CaretPos.Y, CaretPos.X);
// Add the required unit name to uses section if needed. // Add the required unit name to uses section if needed.
if Assigned(AddUnitEvent) and (FuncInfo.UnitName<>'') then if Assigned(AddUnitEvent) and (FuncInfo.UnitName<>'') then
AddUnitEvent(FuncInfo.UnitName); AddUnitEvent(FuncInfo.UnitName);

View File

@ -39,7 +39,7 @@ uses
// LazUtils // LazUtils
LConvEncoding, FileUtil, LazFileUtils, LazUTF8, LazUTF8Classes, LConvEncoding, FileUtil, LazFileUtils, LazUTF8, LazUTF8Classes,
// IDEIntf // IDEIntf
ComponentReg, LazIDEIntf, PackageIntf, ProjectIntf, IDEDialogs, ComponentReg, LazIDEIntf, PackageIntf, ProjectIntf, IDEDialogs, IDEExternToolIntf,
// IDE // IDE
IDEProcs, DialogProcs, EditorOptions, CompilerOptions, IDEProcs, DialogProcs, EditorOptions, CompilerOptions,
ProjPackBase, Project, ProjectDefs, PackageDefs, PackageSystem, PackageEditor, ProjPackBase, Project, ProjectDefs, PackageDefs, PackageSystem, PackageEditor,
@ -461,7 +461,8 @@ begin
fLazFileExt:=''; fLazFileExt:='';
fUnitInfo:=nil; fUnitInfo:=nil;
if not LazarusIDE.BeginCodeTools then if not LazarusIDE.BeginCodeTools then
fOwnerConverter.fSettings.AddLogLine(lisConvDelphiBeginCodeToolsFailed); fOwnerConverter.fSettings.AddLogLine(mluFatal,
lisConvDelphiBeginCodeToolsFailed, fLazUnitFilename);
fCTLink:=Nil; // Will be created later. fCTLink:=Nil; // Will be created later.
fUsedUnitsTool:=Nil; fUsedUnitsTool:=Nil;
end; end;
@ -490,8 +491,6 @@ function TDelphiUnit.CopyAndLoadFile: TModalResult;
var var
CodeOk, CodeFixed: Boolean; CodeOk, CodeFixed: Boolean;
begin begin
fOwnerConverter.fSettings.AddLogLine(Format(lisConvDelphiConvertingFile,
[fOrigUnitFilename]));
// Convert unit in place. File must be writable. // Convert unit in place. File must be writable.
Result:=CheckFileIsWritable(fOrigUnitFilename,[mbAbort]); Result:=CheckFileIsWritable(fOrigUnitFilename,[mbAbort]);
if Result<>mrOK then exit; if Result<>mrOK then exit;
@ -509,8 +508,9 @@ begin
if Result<>mrOK then exit; if Result<>mrOK then exit;
// Change encoding to UTF-8 // Change encoding to UTF-8
if fPascalBuffer.DiskEncoding<>EncodingUTF8 then begin if fPascalBuffer.DiskEncoding<>EncodingUTF8 then begin
fOwnerConverter.fSettings.AddLogLine(Format(lisConvDelphiChangedEncodingToUTF8, fOwnerConverter.fSettings.AddLogLine(mluNote,
[fPascalBuffer.DiskEncoding])); Format(lisConvDelphiChangedEncodingToUTF8, [fPascalBuffer.DiskEncoding]),
fLazUnitFilename);
fPascalBuffer.DiskEncoding:=EncodingUTF8; // Takes effect when buffer is saved. fPascalBuffer.DiskEncoding:=EncodingUTF8; // Takes effect when buffer is saved.
end; end;
// Create a shared link for codetools. // Create a shared link for codetools.
@ -604,8 +604,9 @@ begin
// Change encoding to UTF-8 // Change encoding to UTF-8
if TempLFMBuffer.DiskEncoding<>EncodingUTF8 then if TempLFMBuffer.DiskEncoding<>EncodingUTF8 then
begin begin
fOwnerConverter.fSettings.AddLogLine(Format(lisConvDelphiChangedEncodingToUTF8, fOwnerConverter.fSettings.AddLogLine(mluNote,
[TempLFMBuffer.DiskEncoding])); Format(lisConvDelphiChangedEncodingToUTF8, [TempLFMBuffer.DiskEncoding]),
fLazUnitFilename);
TempLFMBuffer.DiskEncoding:=EncodingUTF8; TempLFMBuffer.DiskEncoding:=EncodingUTF8;
TempLFMBuffer.Save; TempLFMBuffer.Save;
end; end;
@ -675,8 +676,6 @@ var
begin begin
// Fix the LFM file and the pascal unit, updates fPascalBuffer and fLFMBuffer. // Fix the LFM file and the pascal unit, updates fPascalBuffer and fLFMBuffer.
if fLFMBuffer<>nil then begin if fLFMBuffer<>nil then begin
fOwnerConverter.fSettings.AddLogLine(Format(lisConvDelphiRepairingFormFile,
[fLFMBuffer.Filename]));
LfmFixer:=TLFMFixer.Create(fCTLink,fLFMBuffer); LfmFixer:=TLFMFixer.Create(fCTLink,fLFMBuffer);
try try
LfmFixer.Settings:=fOwnerConverter.fSettings; LfmFixer.Settings:=fOwnerConverter.fSettings;
@ -698,8 +697,6 @@ begin
if Result<>mrOK then exit; if Result<>mrOK then exit;
end; end;
// After other changes: add, remove, fix and comment out units in uses sections. // After other changes: add, remove, fix and comment out units in uses sections.
fOwnerConverter.fSettings.AddLogLine(Format(lisConvDelphiFixingUsedUnits,
[fOrigUnitFilename]));
Result:=fUsedUnitsTool.ConvertUsed; Result:=fUsedUnitsTool.ConvertUsed;
if Result<>mrOK then exit; if Result<>mrOK then exit;
Result:=mrOK; Result:=mrOK;
@ -780,6 +777,7 @@ begin
if CodeTool.FixIncludeFilenames(Code,SrcCache,FoundIncludeFiles,MissingIncludeFilesCodeXYPos) if CodeTool.FixIncludeFilenames(Code,SrcCache,FoundIncludeFiles,MissingIncludeFilesCodeXYPos)
then begin then begin
if Assigned(FoundIncludeFiles) then begin if Assigned(FoundIncludeFiles) then begin
// List the include files in log.
Msg:=lisConvRepairingIncludeFiles; Msg:=lisConvRepairingIncludeFiles;
for i:=0 to FoundIncludeFiles.Count-1 do begin for i:=0 to FoundIncludeFiles.Count-1 do begin
fSettings.MaybeBackupFile(FoundIncludeFiles[i]); fSettings.MaybeBackupFile(FoundIncludeFiles[i]);
@ -788,7 +786,7 @@ begin
Msg:=Msg+'; '; Msg:=Msg+'; ';
Msg:=Msg+s; Msg:=Msg+s;
end; end;
fSettings.AddLogLine(Msg); fSettings.AddLogLine(mluNote, Msg, fLazUnitFilename);
end; end;
end end
else begin else begin
@ -797,7 +795,7 @@ begin
CodePos:=PCodeXYPosition(MissingIncludeFilesCodeXYPos[i]); CodePos:=PCodeXYPosition(MissingIncludeFilesCodeXYPos[i]);
Msg:=Format(lisConvDelphiMissingIncludeFile, Msg:=Format(lisConvDelphiMissingIncludeFile,
[CodePos^.Code.Filename,IntToStr(CodePos^.y),IntToStr(CodePos^.x)]); [CodePos^.Code.Filename,IntToStr(CodePos^.y),IntToStr(CodePos^.x)]);
fSettings.AddLogLine(Msg); fSettings.AddLogLine(mluError, Msg, fLazUnitFilename);
end; end;
end; end;
fErrorMsg:=Format(lisConvProblemsFixingIncludeFile, [fOrigUnitFilename]); fErrorMsg:=Format(lisConvProblemsFixingIncludeFile, [fOrigUnitFilename]);
@ -862,13 +860,13 @@ function TConvertDelphiPBase.EndConvert(AStatus: TModalResult): Boolean;
begin begin
// Show ending message // Show ending message
if AStatus=mrOK then if AStatus=mrOK then
fSettings.AddLogLine(lisConvDelphiConversionReady) fSettings.AddLogLine(mluImportant, lisConvDelphiConversionReady)
else begin else begin
if fErrorMsg<>'' then if fErrorMsg<>'' then
fSettings.AddLogLine(Format(lisConvDelphiError,[fErrorMsg])) fSettings.AddLogLine(mluError, Format(lisConvDelphiError,[fErrorMsg]))
else if CodeToolBoss.ErrorMessage<>'' then else if CodeToolBoss.ErrorMessage<>'' then
fSettings.AddLogLine(Format(lisConvDelphiError,[CodeToolBoss.ErrorMessage])); fSettings.AddLogLine(mluError, Format(lisConvDelphiError,[CodeToolBoss.ErrorMessage]));
fSettings.AddLogLine(lisConvDelphiConversionAborted); fSettings.AddLogLine(mluFatal, lisConvDelphiConversionAborted);
end; end;
// Save log messages to file. // Save log messages to file.
Result:=fSettings.SaveLog; Result:=fSettings.SaveLog;
@ -917,7 +915,7 @@ begin
for i:=0 to fSettings.MainFilenames.Count-1 do begin for i:=0 to fSettings.MainFilenames.Count-1 do begin
Application.ProcessMessages; Application.ProcessMessages;
if i>0 then if i>0 then
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
DelphiUnit:=TDelphiUnit.Create(Self, fSettings.MainFilenames[i], []); DelphiUnit:=TDelphiUnit.Create(Self, fSettings.MainFilenames[i], []);
with DelphiUnit do with DelphiUnit do
try try
@ -1031,7 +1029,7 @@ begin
EndTime:=Now; EndTime:=Now;
s:=FormatDateTime('hh:nn:ss', EndTime-StartTime); s:=FormatDateTime('hh:nn:ss', EndTime-StartTime);
if (Result<>mrAbort) and (s<>'00:00:00') then if (Result<>mrAbort) and (s<>'00:00:00') then
fSettings.AddLogLine(Format(lisConvDelphiConversionTook, [s])); fSettings.AddLogLine(mluProgress, Format(lisConvDelphiConversionTook,[s]));
EndConvert(Result); EndConvert(Result);
end; end;
end; end;
@ -1095,8 +1093,8 @@ var
i: Integer; i: Integer;
begin begin
if not fSettings.SameDfmFile then begin if not fSettings.SameDfmFile then begin
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
fSettings.AddLogLine(lisConvDelphiRepairingFormFiles); fSettings.AddLogLine(mluImportant, lisConvDelphiRepairingFormFiles);
DebugLn(''); DebugLn('');
DebugLn('TConvertDelphiProjPack.ConvertAllFormFiles: '+lisConvDelphiRepairingFormFiles); DebugLn('TConvertDelphiProjPack.ConvertAllFormFiles: '+lisConvDelphiRepairingFormFiles);
end; end;
@ -1163,7 +1161,9 @@ var
if System.Pos(';'+lowercase(DelphiPkgName)+';', if System.Pos(';'+lowercase(DelphiPkgName)+';',
';'+lowercase(DelphiPkgNames)+';')>0 then begin ';'+lowercase(DelphiPkgNames)+';')>0 then begin
fProjPack.AddPackageDependency(LazarusPkgName); fProjPack.AddPackageDependency(LazarusPkgName);
fSettings.AddLogLine(Format(lisConvDelphiAddedPackageDependency,[LazarusPkgName])); fSettings.AddLogLine(mluNote,
Format(lisConvDelphiAddedPackageDependency,[LazarusPkgName]),
fLazPMainFilename);
end; end;
end; end;
@ -1315,7 +1315,8 @@ begin
// PUREPASCAL is defined by some code to not use x86 assembly code. // PUREPASCAL is defined by some code to not use x86 assembly code.
s:='-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL'; s:='-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL';
Options.CustomOptions:=s; Options.CustomOptions:=s;
fSettings.AddLogLine(Format(lisConvDelphiAddedCustomOptionDefines, [s])); fSettings.AddLogLine(mluNote, Format(lisConvDelphiAddedCustomOptionDefines,[s]),
fLazPMainFilename);
end; end;
end; end;
@ -1383,7 +1384,7 @@ begin
if not DeleteFileUTF8(s) then if not DeleteFileUTF8(s) then
exit(mrCancel); exit(mrCancel);
//fFilesToDelete.Delete(i); //fFilesToDelete.Delete(i);
fSettings.AddLogLine(Format(lisConvDeletedFile,[s])); fSettings.AddLogLine(mluNote, Format(lisConvDeletedFile,[s]));
end; end;
end; end;
Result:=mrOK; Result:=mrOK;
@ -1431,7 +1432,8 @@ begin
Dep:=FindDependencyByName(s); Dep:=FindDependencyByName(s);
if not Assigned(Dep) then begin if not Assigned(Dep) then begin
fProjPack.AddPackageDependency(s); fProjPack.AddPackageDependency(s);
fSettings.AddLogLine(Format(lisConvDelphiAddedPackageDependency, [s])); fSettings.AddLogLine(mluNote, Format(lisConvDelphiAddedPackageDependency,[s]),
fLazPMainFilename);
Dep:=FindDependencyByName(s); Dep:=FindDependencyByName(s);
if Assigned(Dep) then if Assigned(Dep) then
PackageGraph.OpenDependency(Dep,false); PackageGraph.OpenDependency(Dep,false);
@ -1454,7 +1456,8 @@ begin
Result:=CheckPackageDep(AUnitName); Result:=CheckPackageDep(AUnitName);
if not Result then if not Result then
// Package was not found. Add a message about a package that must be installed. // Package was not found. Add a message about a package that must be installed.
fSettings.AddLogLine(Format(lisConvDelphiPackageRequired, [ADefaultPkgName])); fSettings.AddLogLine(mluWarning,
Format(lisConvDelphiPackageRequired, [ADefaultPkgName]));
end; end;
end; end;
end; end;
@ -1563,7 +1566,8 @@ begin
if fSettings.OmitProjUnits.Contains(PureUnitName) then if fSettings.OmitProjUnits.Contains(PureUnitName) then
begin begin
fMainUnitConverter.fUsedUnitsTool.Remove(PureUnitName); fMainUnitConverter.fUsedUnitsTool.Remove(PureUnitName);
fSettings.AddLogLine(Format(lisConvDelphiProjOmittedUnit,[PureUnitName])); fSettings.AddLogLine(mluNote, Format(lisConvDelphiProjOmittedUnit,[PureUnitName]),
fLazPMainFilename);
TryAddPackageDep(PureUnitName, fSettings.OmitProjUnits[PureUnitName]); TryAddPackageDep(PureUnitName, fSettings.OmitProjUnits[PureUnitName]);
end end
else begin else begin
@ -1606,7 +1610,7 @@ begin
exit(mrCancel); exit(mrCancel);
end; end;
try // Add all units to the project try // Add all units to the project
fSettings.AddLogLine(lisConvDelphiFoundAllUnitFiles); fSettings.AddLogLine(mluProgress, lisConvDelphiFoundAllUnitFiles);
DebugLn('TConvertDelphiProject.FindAllUnits: '+lisConvDelphiFoundAllUnitFiles); DebugLn('TConvertDelphiProject.FindAllUnits: '+lisConvDelphiFoundAllUnitFiles);
for i:=0 to FoundUnits.Count-1 do begin for i:=0 to FoundUnits.Count-1 do begin
CurFilename:=FoundUnits[i]; CurFilename:=FoundUnits[i];
@ -1684,8 +1688,8 @@ begin
try try
try try
// convert all units and fix .lfm files // convert all units and fix .lfm files
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
fSettings.AddLogLine(lisConvDelphiConvertingProjPackUnits); fSettings.AddLogLine(mluImportant, lisConvDelphiConvertingProjPackUnits);
for i:=0 to LazProject.UnitCount-1 do begin for i:=0 to LazProject.UnitCount-1 do begin
CurUnitInfo:=LazProject.Units[i]; CurUnitInfo:=LazProject.Units[i];
Application.ProcessMessages; Application.ProcessMessages;
@ -1698,8 +1702,8 @@ begin
end; end;
// During conversion there were more units added to be converted. // During conversion there were more units added to be converted.
if fUnitsToAddToProject.Count > 0 then begin if fUnitsToAddToProject.Count > 0 then begin
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
fSettings.AddLogLine(lisConvDelphiConvertingFoundUnits); fSettings.AddLogLine(mluImportant, lisConvDelphiConvertingFoundUnits);
end; end;
for i:=0 to fUnitsToAddToProject.Count-1 do begin for i:=0 to fUnitsToAddToProject.Count-1 do begin
Application.ProcessMessages; Application.ProcessMessages;
@ -1719,9 +1723,9 @@ begin
end; end;
end; end;
except except
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
fSettings.AddLogLine('- '+lisConvDelphiExceptionDuringConversion); fSettings.AddLogLine(mluError, lisConvDelphiExceptionDuringConversion);
DebugLn('- '+lisConvDelphiExceptionDuringConversion); DebugLn(lisConvDelphiExceptionDuringConversion);
raise; raise;
end; end;
finally finally
@ -1885,7 +1889,8 @@ begin
if CodeToolBoss.HasInterfaceRegisterProc(CodeBuffer, HasRegisterProc) then if CodeToolBoss.HasInterfaceRegisterProc(CodeBuffer, HasRegisterProc) then
if HasRegisterProc then begin if HasRegisterProc then begin
Include(Flags, pffHasRegisterProc); Include(Flags, pffHasRegisterProc);
fSettings.AddLogLine(Format(lisConvAddingFlagForRegister, [PureUnitName])); fSettings.AddLogLine(mluNote, Format(lisConvAddingFlagForRegister,[PureUnitName]),
fLazPMainFilename);
end; end;
// Add new unit to package // Add new unit to package
LazPackage.AddFile(AFileName, PureUnitName, pftUnit, Flags, cpNormal); LazPackage.AddFile(AFileName, PureUnitName, pftUnit, Flags, cpNormal);
@ -1912,7 +1917,7 @@ begin
exit(mrCancel); exit(mrCancel);
end; end;
try try
fSettings.AddLogLine(lisConvDelphiFoundAllUnitFiles); fSettings.AddLogLine(mluProgress, lisConvDelphiFoundAllUnitFiles);
DebugLn('TConvertDelphiPackage.FindAllUnits: '+lisConvDelphiFoundAllUnitFiles); DebugLn('TConvertDelphiPackage.FindAllUnits: '+lisConvDelphiFoundAllUnitFiles);
// Add all units to the package // Add all units to the package
for i:=0 to FoundUnits.Count-1 do begin for i:=0 to FoundUnits.Count-1 do begin
@ -1996,8 +2001,8 @@ begin
try try
try try
// Convert all units and fix .lfm files // Convert all units and fix .lfm files
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
fSettings.AddLogLine(lisConvDelphiConvertingProjPackUnits); fSettings.AddLogLine(mluImportant, lisConvDelphiConvertingProjPackUnits);
for i:=0 to LazPackage.FileCount-1 do begin for i:=0 to LazPackage.FileCount-1 do begin
PkgFile:=LazPackage.Files[i]; PkgFile:=LazPackage.Files[i];
Application.ProcessMessages; Application.ProcessMessages;
@ -2007,8 +2012,8 @@ begin
end; end;
// During conversion there were more units added to be converted. // During conversion there were more units added to be converted.
if fUnitsToAddToProject.Count > 0 then begin if fUnitsToAddToProject.Count > 0 then begin
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
fSettings.AddLogLine(lisConvDelphiConvertingFoundUnits); fSettings.AddLogLine(mluImportant, lisConvDelphiConvertingFoundUnits);
end; end;
{ ToDo: add more units { ToDo: add more units
for i:=0 to fUnitsToAddToProject.Count-1 do begin for i:=0 to fUnitsToAddToProject.Count-1 do begin
@ -2024,9 +2029,9 @@ begin
end; end;
} }
except except
fSettings.AddLogLine(''); fSettings.AddLogLine(mluImportant, '');
fSettings.AddLogLine('- '+lisConvDelphiExceptionDuringConversion); fSettings.AddLogLine(mluError, lisConvDelphiExceptionDuringConversion);
DebugLn('- '+lisConvDelphiExceptionDuringConversion); DebugLn(lisConvDelphiExceptionDuringConversion);
raise; raise;
end; end;
finally finally

View File

@ -30,10 +30,17 @@ unit ConvertSettings;
interface interface
uses uses
Classes, SysUtils, Forms, Controls, Dialogs, IDEProcs, StdCtrls, Buttons, Classes, SysUtils, AVL_Tree,
ButtonPanel, ComCtrls, DialogProcs, FileUtil, LazFileUtils, Forms, Controls, Dialogs, StdCtrls, Buttons, ButtonPanel, ComCtrls,
LazarusIDEStrConsts, CodeToolsStructs, CodeToolManager, CodeCache, // LazUtils
DividerBevel, BaseIDEIntf, IDEMsgIntf, IDEExternToolIntf, AVL_Tree, FileUtil, LazFileUtils, DividerBevel,
// CodeTools
CodeToolsStructs, CodeToolManager, CodeCache,
// IdeIntf
BaseIDEIntf, IDEMsgIntf, IDEExternToolIntf,
// IDE
IDEProcs, DialogProcs, LazarusIDEStrConsts,
// Converter
LazConfigStorage, ConverterTypes, ReplaceNamesUnit, ReplaceFuncsUnit; LazConfigStorage, ConverterTypes, ReplaceNamesUnit, ReplaceFuncsUnit;
const const
@ -118,7 +125,8 @@ type
out LazFilename: string; LowercaseFilename: Boolean): TModalResult; overload; out LazFilename: string; LowercaseFilename: Boolean): TModalResult; overload;
function MaybeBackupFile(const AFilename: string): TModalResult; function MaybeBackupFile(const AFilename: string): TModalResult;
procedure ClearLog; procedure ClearLog;
function AddLogLine(const ALine: string; Urgency: TMessageLineUrgency = mluHint): integer; procedure AddLogLine(Urgency: TMessageLineUrgency; const Msg: string;
const Filename: string=''; LineNumber: integer=0; Column: integer=0);
function SaveLog: Boolean; function SaveLog: Boolean;
public public
property MainFilenames: TStringlist read fMainFilenames; property MainFilenames: TStringlist read fMainFilenames;
@ -772,11 +780,20 @@ begin
fLog.Clear; fLog.Clear;
end; end;
function TConvertSettings.AddLogLine( procedure TConvertSettings.AddLogLine(Urgency: TMessageLineUrgency;
const ALine: string; Urgency: TMessageLineUrgency): integer; const Msg: string; const Filename: string; LineNumber: integer; Column: integer);
var
FN, Coords, Urg: String;
begin begin
IDEMessagesWindow.AddCustomMessage(Urgency,aLine); // Show in message window // Show in message window
Result:=fLog.Add(MessageLineUrgencyNames[Urgency]+': '+ALine);// and store for log. IDEMessagesWindow.AddCustomMessage(Urgency, Msg, Filename, LineNumber, Column);
// and store for log.
FN := ExtractFileName(Filename);
if (LineNumber<>0) or (Column<>0) then
Coords := Format('(%d,%d)', [LineNumber, Column]);
if Urgency <> mluImportant then
Urg := MessageLineUrgencyNames[Urgency];
fLog.Add(FN + Coords + ' ' + Urg + ': ' + Msg);
end; end;
function TConvertSettings.SaveLog: Boolean; function TConvertSettings.SaveLog: Boolean;

View File

@ -40,8 +40,9 @@ uses
SynHighlighterLFM, SynEdit, SynEditMiscClasses, LFMTrees, SynHighlighterLFM, SynEdit, SynEditMiscClasses, LFMTrees,
// codetools // codetools
CodeCache, CodeToolManager, CodeToolsStructs, CodeCompletionTool, CodeCache, CodeToolManager, CodeToolsStructs, CodeCompletionTool,
// IdeIntf
ComponentReg, PackageIntf, IDEWindowIntf, IDEExternToolIntf,
// IDE // IDE
ComponentReg, PackageIntf, IDEWindowIntf,
CustomFormEditor, LazarusIDEStrConsts, IDEProcs, CustomFormEditor, LazarusIDEStrConsts, IDEProcs,
EditorOptions, CheckLFMDlg, Project, SourceMarks, EditorOptions, CheckLFMDlg, Project, SourceMarks,
// Converter // Converter
@ -161,15 +162,20 @@ end;
function TDFMConverter.Convert(const DfmFilename: string): TModalResult; function TDFMConverter.Convert(const DfmFilename: string): TModalResult;
var var
s: String; s: String;
Urgency: TMessageLineUrgency;
begin begin
Result:=ConvertDfmToLfm(DfmFilename); Result:=ConvertDfmToLfm(DfmFilename);
if Result=mrOK then begin if Result=mrOK then begin
if fOrigFormat=sofBinary then if fOrigFormat=sofBinary then begin
s:=Format(lisFileSIsConvertedToTextFormat, [DfmFilename]) s:=Format(lisFileSIsConvertedToTextFormat, [DfmFilename]);
else Urgency:=mluHint;
end
else begin
s:=Format(lisFileSHasIncorrectSyntax, [DfmFilename]); s:=Format(lisFileSHasIncorrectSyntax, [DfmFilename]);
Urgency:=mluError;
end;
if Assigned(fSettings) then if Assigned(fSettings) then
fSettings.AddLogLine(s) fSettings.AddLogLine(Urgency, s, DfmFilename)
else else
ShowMessage(s); ShowMessage(s);
end; end;
@ -416,8 +422,9 @@ begin
NewIdent:=ObjNode.Name+':'+ObjNode.TypeName; NewIdent:=ObjNode.Name+':'+ObjNode.TypeName;
fCTLink.CodeTool.AddClassInsertion(UpperCase(ObjNode.Name), fCTLink.CodeTool.AddClassInsertion(UpperCase(ObjNode.Name),
NewIdent+';', ObjNode.Name, ncpPublishedVars); NewIdent+';', ObjNode.Name, ncpPublishedVars);
fSettings.AddLogLine(Format(lisAddedMissingObjectSToPascalSource, fSettings.AddLogLine(mluNote,
[NewIdent])); Format(lisAddedMissingObjectSToPascalSource, [NewIdent]),
fUsedUnitsTool.Filename);
end end
else if IsMissingType(CurError) then else if IsMissingType(CurError) then
begin begin
@ -429,8 +436,9 @@ begin
if NewIdent<>'' then begin if NewIdent<>'' then begin
StartPos:=ObjNode.TypeNamePosition; StartPos:=ObjNode.TypeNamePosition;
EndPos:=StartPos+Length(OldIdent); EndPos:=StartPos+Length(OldIdent);
fSettings.AddLogLine(Format(lisReplacedTypeSWithS, fSettings.AddLogLine(mluNote,
[OldIdent, NewIdent])); Format(lisReplacedTypeSWithS, [OldIdent, NewIdent]),
fUsedUnitsTool.Filename);
AddReplacement(ChgEntryRepl,StartPos,EndPos,NewIdent); AddReplacement(ChgEntryRepl,StartPos,EndPos,NewIdent);
Result:=mrRetry; Result:=mrRetry;
end; end;
@ -444,11 +452,12 @@ begin
// Delete the whole property line if no replacement. // Delete the whole property line if no replacement.
if NewIdent='' then begin if NewIdent='' then begin
FindNiceNodeBounds(TheNode,StartPos,EndPos); FindNiceNodeBounds(TheNode,StartPos,EndPos);
fSettings.AddLogLine(Format(lisRemovedPropertyS, [OldIdent])); fSettings.AddLogLine(mluNote, Format(lisRemovedPropertyS, [OldIdent]),
fUsedUnitsTool.Filename);
end end
else else
fSettings.AddLogLine(Format(lisReplacedPropertySWithS, fSettings.AddLogLine(mluNote,
[OldIdent, NewIdent])); Format(lisReplacedPropertySWithS, [OldIdent, NewIdent]));
AddReplacement(ChgEntryRepl,StartPos,EndPos,NewIdent); AddReplacement(ChgEntryRepl,StartPos,EndPos,NewIdent);
Result:=mrRetry; Result:=mrRetry;
end; end;
@ -501,8 +510,9 @@ begin
if NewNum<0 then if NewNum<0 then
NewNum:=0; NewNum:=0;
fLFMBuffer.Replace(TopOffs.StartPos, Len, IntToStr(NewNum)); fLFMBuffer.Replace(TopOffs.StartPos, Len, IntToStr(NewNum));
fSettings.AddLogLine(Format(lisChangedSCoordOfSFromDToDInsideS, fSettings.AddLogLine(mluNote, Format(lisChangedSCoordOfSFromDToDInsideS,
[TopOffs.PropName, TopOffs.ChildType, OldNum, NewNum, TopOffs.ParentType])); [TopOffs.PropName, TopOffs.ChildType, OldNum, NewNum, TopOffs.ParentType]),
fUsedUnitsTool.Filename);
end; end;
end; end;
end; end;
@ -518,8 +528,9 @@ begin
Entry:=TAddPropEntry(aNewProps[i]); Entry:=TAddPropEntry(aNewProps[i]);
fLFMBuffer.Replace(Entry.StartPos, Entry.EndPos-Entry.StartPos, fLFMBuffer.Replace(Entry.StartPos, Entry.EndPos-Entry.StartPos,
Entry.NewPrefix+Entry.NewText); Entry.NewPrefix+Entry.NewText);
fSettings.AddLogLine(Format(lisAddedPropertySForS, fSettings.AddLogLine(mluNote,
[Entry.NewText, Entry.ParentType])); Format(lisAddedPropertySForS, [Entry.NewText, Entry.ParentType]),
fUsedUnitsTool.Filename);
end; end;
end; end;

View File

@ -31,12 +31,13 @@ unit UsedUnits;
interface interface
uses uses
Classes, SysUtils, Forms, Controls, Dialogs, Classes, SysUtils, AVL_Tree, Forms, Controls, Dialogs,
// IDE // IDE
LazarusIDEStrConsts, IDEExternToolIntf, LazarusIDEStrConsts, IDEExternToolIntf,
// codetools // codetools
CodeToolManager, StdCodeTools, CodeTree, CodeToolsStructs, AVL_Tree, CodeToolManager, StdCodeTools, CustomCodeTool, CodeTree, CodeAtom, CodeCache,
LinkScanner, KeywordFuncLists, SourceChanger, CodeAtom, CodeToolsStrConsts, FileProcs, LinkScanner, KeywordFuncLists, SourceChanger, CodeToolsStrConsts, CodeToolsStructs,
FileProcs,
// Converter // Converter
ConverterTypes, ConvCodeTool, ConvertSettings, ReplaceNamesUnit; ConverterTypes, ConvCodeTool, ConvertSettings, ReplaceNamesUnit;
@ -137,6 +138,7 @@ type
procedure AddUnitIfNeeded(aUnitName: string); procedure AddUnitIfNeeded(aUnitName: string);
function AddThreadSupport: TModalResult; function AddThreadSupport: TModalResult;
public public
property Filename: string read fFilename;
property IsMainFile: Boolean read fIsMainFile write fIsMainFile; property IsMainFile: Boolean read fIsMainFile write fIsMainFile;
property IsConsoleApp: Boolean read fIsConsoleApp write fIsConsoleApp; property IsConsoleApp: Boolean read fIsConsoleApp write fIsConsoleApp;
property MainUsedUnits: TUsedUnits read fMainUsedUnits; property MainUsedUnits: TUsedUnits read fMainUsedUnits;
@ -214,6 +216,7 @@ function TUsedUnits.FindMissingUnits: boolean;
var var
UsesNode: TCodeTreeNode; UsesNode: TCodeTreeNode;
InAtom, UnitNameAtom: TAtomPosition; InAtom, UnitNameAtom: TAtomPosition;
CaretPos: TCodeXYPosition;
OldUnitName, OldInFilename: String; OldUnitName, OldInFilename: String;
NewUnitName, NewInFilename: String; NewUnitName, NewInFilename: String;
FullFileN, LowFileN: String; FullFileN, LowFileN: String;
@ -247,8 +250,10 @@ begin
if NewUnitName<>OldUnitName then begin if NewUnitName<>OldUnitName then begin
// Character case differs, fix it. // Character case differs, fix it.
fUnitsToFixCase[OldUnitName]:=NewUnitName; fUnitsToFixCase[OldUnitName]:=NewUnitName;
Settings.AddLogLine(Format(lisConvDelphiFixedUnitCase, if CodeTool.CleanPosToCaret(UnitNameAtom.StartPos, CaretPos) then
[OldUnitName, NewUnitName])); Settings.AddLogLine(mluNote,
Format(lisConvDelphiFixedUnitCase, [OldUnitName, NewUnitName]),
fOwnerTool.fFilename, CaretPos.Y, CaretPos.X);
end; end;
// Report Windows specific units as missing if target is CrossPlatform. // Report Windows specific units as missing if target is CrossPlatform.
// Needed if work-platform is Windows. // Needed if work-platform is Windows.
@ -309,8 +314,9 @@ begin
fUnitsToRename[AOldName]:=ANewName; fUnitsToRename[AOldName]:=ANewName;
fUnitsToRenameKeys.Add(AOldName); fUnitsToRenameKeys.Add(AOldName);
fUnitsToRenameVals.AddStrings(sl); fUnitsToRenameVals.AddStrings(sl);
fCTLink.Settings.AddLogLine(Format(lisConvDelphiReplacedUnitInUsesSection, fCTLink.Settings.AddLogLine(mluNote,
[AOldName, ANewName])); Format(lisConvDelphiReplacedUnitInUsesSection, [AOldName, ANewName]),
fOwnerTool.fFilename);
end; end;
finally finally
sl.Free; sl.Free;
@ -322,8 +328,9 @@ begin
AOldName:=Copy(AOldName, 1, i-1); // Strip the file name part. AOldName:=Copy(AOldName, 1, i-1); // Strip the file name part.
if fUnitsToRemove.IndexOf(AOldName)=-1 then if fUnitsToRemove.IndexOf(AOldName)=-1 then
fUnitsToRemove.Add(AOldName); fUnitsToRemove.Add(AOldName);
fCTLink.Settings.AddLogLine(Format(lisConvDelphiRemovedUnitInUsesSection, fCTLink.Settings.AddLogLine(mluNote,
[AOldName])); Format(lisConvDelphiRemovedUnitInUsesSection, [AOldName]),
fOwnerTool.fFilename);
end; end;
end; end;
@ -776,7 +783,8 @@ procedure TUsedUnitsTool.AddUnitIfNeeded(aUnitName: string);
begin begin
if not HasUnit(aUnitName) then begin if not HasUnit(aUnitName) then begin
fMainUsedUnits.fUnitsToAdd.Add(aUnitName); fMainUsedUnits.fUnitsToAdd.Add(aUnitName);
fCTLink.Settings.AddLogLine(Format(lisConvAddedUnitToUsesSection, [aUnitName])); fCTLink.Settings.AddLogLine(mluNote,
Format(lisConvAddedUnitToUsesSection,[aUnitName]), fFilename);
MaybeOpenPackage(aUnitName); MaybeOpenPackage(aUnitName);
end; end;
end; end;

View File

@ -5795,9 +5795,6 @@ resourcestring
lisConvDelphiRepairingFormFiles = '*** Fixing used units and Repairing form files ***'; lisConvDelphiRepairingFormFiles = '*** Fixing used units and Repairing form files ***';
lisConvDelphiConvertingProjPackUnits = '*** Converting unit files belonging to project/package ***'; lisConvDelphiConvertingProjPackUnits = '*** Converting unit files belonging to project/package ***';
lisConvDelphiConvertingFoundUnits = '*** Converting unit files found during conversion ***'; lisConvDelphiConvertingFoundUnits = '*** Converting unit files found during conversion ***';
lisConvDelphiRepairingFormFile = '* Repairing form file %s *';
lisConvDelphiConvertingFile = '* Converting file %s *';
lisConvDelphiFixingUsedUnits = '* Fixing used units for file %s *';
lisConvDelphiChangedEncodingToUTF8 = 'Changed encoding from %s to UTF-8'; lisConvDelphiChangedEncodingToUTF8 = 'Changed encoding from %s to UTF-8';
lisConvDelphiAllSubDirsScanned = 'All sub-directories will be scanned for unit files'; lisConvDelphiAllSubDirsScanned = 'All sub-directories will be scanned for unit files';
lisConvDelphiMissingIncludeFile = '%s(%s,%s) missing include file'; lisConvDelphiMissingIncludeFile = '%s(%s,%s) missing include file';