mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-22 07:28:12 +02:00
Converter: improve handling of errors and error messages
git-svn-id: trunk@37682 -
This commit is contained in:
parent
abf1dac7dc
commit
ee02cf6a72
@ -61,7 +61,7 @@ type
|
|||||||
constructor Create(ACode: TCodeBuffer);
|
constructor Create(ACode: TCodeBuffer);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure ResetMainScanner;
|
procedure ResetMainScanner;
|
||||||
function HandleCodetoolError: TModalResult;
|
// function HandleCodetoolError: TModalResult;
|
||||||
public
|
public
|
||||||
property CodeTool: TCodeTool read fCodeTool;
|
property CodeTool: TCodeTool read fCodeTool;
|
||||||
property Code: TCodeBuffer read fCode;
|
property Code: TCodeBuffer read fCode;
|
||||||
@ -129,22 +129,22 @@ begin
|
|||||||
fCodeTool:=nil;
|
fCodeTool:=nil;
|
||||||
fSrcCache:=nil;
|
fSrcCache:=nil;
|
||||||
if not CodeToolBoss.InitCurCodeTool(fCode) then exit;
|
if not CodeToolBoss.InitCurCodeTool(fCode) then exit;
|
||||||
try
|
// try
|
||||||
fCodeTool:=CodeToolBoss.CurCodeTool;
|
fCodeTool:=CodeToolBoss.CurCodeTool;
|
||||||
fSrcCache:=CodeToolBoss.SourceChangeCache;
|
fSrcCache:=CodeToolBoss.SourceChangeCache;
|
||||||
ResetMainScanner;
|
ResetMainScanner;
|
||||||
fCodeTool.Scanner.IgnoreMissingIncludeFiles:=True;
|
fCodeTool.Scanner.IgnoreMissingIncludeFiles:=True;
|
||||||
except
|
{ except
|
||||||
on e: Exception do
|
on e: Exception do
|
||||||
CodeToolBoss.HandleException(e);
|
CodeToolBoss.HandleException(e);
|
||||||
end;
|
end; }
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCodeToolLink.ResetMainScanner;
|
procedure TCodeToolLink.ResetMainScanner;
|
||||||
begin
|
begin
|
||||||
fSrcCache.MainScanner:=fCodeTool.Scanner;
|
fSrcCache.MainScanner:=fCodeTool.Scanner;
|
||||||
end;
|
end;
|
||||||
|
{
|
||||||
function TCodeToolLink.HandleCodetoolError: TModalResult;
|
function TCodeToolLink.HandleCodetoolError: TModalResult;
|
||||||
// returns mrOk or mrAbort
|
// returns mrOk or mrAbort
|
||||||
const
|
const
|
||||||
@ -163,7 +163,7 @@ begin
|
|||||||
Result:=mrOK;
|
Result:=mrOK;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
}
|
||||||
{ TConvDelphiCodeTool }
|
{ TConvDelphiCodeTool }
|
||||||
|
|
||||||
constructor TConvDelphiCodeTool.Create(APascalBuffer: TCodeBuffer);
|
constructor TConvDelphiCodeTool.Create(APascalBuffer: TCodeBuffer);
|
||||||
@ -177,12 +177,12 @@ begin
|
|||||||
fIsConsoleApp:=False;
|
fIsConsoleApp:=False;
|
||||||
fCTLinkCreated:=True;
|
fCTLinkCreated:=True;
|
||||||
if Assigned(fCTLink.CodeTool) then
|
if Assigned(fCTLink.CodeTool) then
|
||||||
try
|
// try
|
||||||
fCTLink.CodeTool.BuildTree(lsrInitializationStart);
|
fCTLink.CodeTool.BuildTree(lsrInitializationStart);
|
||||||
except
|
{ except
|
||||||
on e: Exception do
|
on e: Exception do
|
||||||
CodeToolBoss.HandleException(e);
|
CodeToolBoss.HandleException(e);
|
||||||
end;
|
end; }
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TConvDelphiCodeTool.Create(ACTLink: TCodeToolLink);
|
constructor TConvDelphiCodeTool.Create(ACTLink: TCodeToolLink);
|
||||||
|
@ -422,7 +422,8 @@ begin
|
|||||||
DelphiUnit := TDelphiUnit.Create(Self, fOrigFilename, []);
|
DelphiUnit := TDelphiUnit.Create(Self, fOrigFilename, []);
|
||||||
Result:=fSettings.RunForm;
|
Result:=fSettings.RunForm;
|
||||||
if Result=mrOK then
|
if Result=mrOK then
|
||||||
with DelphiUnit do begin
|
with DelphiUnit do
|
||||||
|
try
|
||||||
Result:=CopyAndLoadFile;
|
Result:=CopyAndLoadFile;
|
||||||
if Result=mrOK then begin
|
if Result=mrOK then begin
|
||||||
Result:=ConvertUnitFile;
|
Result:=ConvertUnitFile;
|
||||||
@ -437,6 +438,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
except
|
||||||
|
on e: EDelphiConverterError do begin
|
||||||
|
fErrorMsg:=e.Message;
|
||||||
|
end;
|
||||||
|
else begin
|
||||||
|
fErrorMsg:=CodeToolBoss.ErrorMessage;
|
||||||
|
end;
|
||||||
|
Result:=mrAbort;
|
||||||
end;
|
end;
|
||||||
ShowEndingMessage(Result);
|
ShowEndingMessage(Result);
|
||||||
end;
|
end;
|
||||||
@ -688,21 +697,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
// Do the actual code conversion.
|
// Do the actual code conversion.
|
||||||
ConvTool:=TConvDelphiCodeTool.Create(fCTLink);
|
ConvTool:=TConvDelphiCodeTool.Create(fCTLink);
|
||||||
try
|
|
||||||
try
|
try
|
||||||
ConvTool.IsConsoleApp:=fOwnerConverter.fIsConsoleApp;
|
ConvTool.IsConsoleApp:=fOwnerConverter.fIsConsoleApp;
|
||||||
ConvTool.LowerCaseRes:=FileExistsUTF8(ChangeFileExt(fLazUnitFilename, '.res'));
|
ConvTool.LowerCaseRes:=FileExistsUTF8(ChangeFileExt(fLazUnitFilename, '.res'));
|
||||||
ConvTool.HasFormFile:=DfmFilename<>'';
|
ConvTool.HasFormFile:=DfmFilename<>'';
|
||||||
ConvTool.AddUnitEvent:=@fUsedUnitsTool.AddUnitIfNeeded;
|
ConvTool.AddUnitEvent:=@fUsedUnitsTool.AddUnitIfNeeded;
|
||||||
Result:=ConvTool.Convert;
|
Result:=ConvTool.Convert;
|
||||||
except
|
|
||||||
on e: EDelphiConverterError do begin
|
|
||||||
fOwnerConverter.fErrorMsg:=e.Message;
|
|
||||||
Result:=mrAbort;
|
|
||||||
end;
|
|
||||||
else
|
|
||||||
Result:=fCTLink.HandleCodetoolError;
|
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
ConvTool.Free;
|
ConvTool.Free;
|
||||||
end;
|
end;
|
||||||
@ -740,18 +740,9 @@ begin
|
|||||||
// 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.
|
||||||
IDEMessagesWindow.AddMsg(Format(lisConvDelphiFixingUsedUnits,
|
IDEMessagesWindow.AddMsg(Format(lisConvDelphiFixingUsedUnits,
|
||||||
[fOrigUnitFilename]), '', -1);
|
[fOrigUnitFilename]), '', -1);
|
||||||
try
|
Result:=fUsedUnitsTool.Convert;
|
||||||
Result:=fUsedUnitsTool.Convert;
|
if Result<>mrOk then exit;
|
||||||
if Result<>mrOk then exit;
|
Result:=mrOk;
|
||||||
Result:=mrOk;
|
|
||||||
except
|
|
||||||
on e: EDelphiConverterError do begin
|
|
||||||
fOwnerConverter.fErrorMsg:=e.Message;
|
|
||||||
Result:=mrAbort;
|
|
||||||
end;
|
|
||||||
else
|
|
||||||
Result:=fCTLink.HandleCodetoolError;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TDelphiUnit.AskUnitPathFromUser: TModalResult;
|
function TDelphiUnit.AskUnitPathFromUser: TModalResult;
|
||||||
@ -821,8 +812,16 @@ begin
|
|||||||
LazarusIDE.OpenEditorsOnCodeToolChange:=False;
|
LazarusIDE.OpenEditorsOnCodeToolChange:=False;
|
||||||
try
|
try
|
||||||
with fCTLink do
|
with fCTLink do
|
||||||
if not CodeTool.FixIncludeFilenames(Code,SrcCache,FoundIncludeFiles,
|
if CodeTool.FixIncludeFilenames(Code,SrcCache,FoundIncludeFiles,MissingIncludeFilesCodeXYPos)
|
||||||
MissingIncludeFilesCodeXYPos) then begin
|
then begin
|
||||||
|
if Assigned(FoundIncludeFiles) then begin
|
||||||
|
FoundIncludeFiles.Delimiter:=';';
|
||||||
|
FoundIncludeFiles.StrictDelimiter:=True;
|
||||||
|
Msg:='Repairing include files : ' + FoundIncludeFiles.DelimitedText;
|
||||||
|
IDEMessagesWindow.AddMsg(Msg, '', -1);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
if MissingIncludeFilesCodeXYPos<>nil then begin
|
if MissingIncludeFilesCodeXYPos<>nil then begin
|
||||||
for i:=0 to MissingIncludeFilesCodeXYPos.Count-1 do begin
|
for i:=0 to MissingIncludeFilesCodeXYPos.Count-1 do begin
|
||||||
CodePos:=PCodeXYPosition(MissingIncludeFilesCodeXYPos[i]);
|
CodePos:=PCodeXYPosition(MissingIncludeFilesCodeXYPos[i]);
|
||||||
@ -904,29 +903,39 @@ begin
|
|||||||
// without delay but then we must wait for the thread before continuing.
|
// without delay but then we must wait for the thread before continuing.
|
||||||
CacheUnitsThread:=TCacheUnitsThread.Create(Self, fSettings.MainPath);
|
CacheUnitsThread:=TCacheUnitsThread.Create(Self, fSettings.MainPath);
|
||||||
try
|
try
|
||||||
CacheUnitsThread.Start;
|
|
||||||
Result:=fSettings.RunForm; // Get settings from user.
|
|
||||||
Screen.Cursor:=crHourGlass;
|
|
||||||
try
|
try
|
||||||
CacheUnitsThread.WaitFor; // Make sure the thread has finished.
|
CacheUnitsThread.Start;
|
||||||
finally
|
Result:=fSettings.RunForm; // Get settings from user.
|
||||||
Screen.Cursor:=crDefault;
|
Screen.Cursor:=crHourGlass;
|
||||||
end;
|
try
|
||||||
if Result=mrOK then begin
|
CacheUnitsThread.WaitFor; // Make sure the thread has finished.
|
||||||
// create/open lazarus project or package file
|
finally
|
||||||
fLazPFilename:=fSettings.DelphiToLazFilename(fOrigFilename, fLazPSuffix, false);
|
Screen.Cursor:=crDefault;
|
||||||
|
end;
|
||||||
|
if Result=mrOK then begin
|
||||||
|
// create/open lazarus project or package file
|
||||||
|
fLazPFilename:=fSettings.DelphiToLazFilename(fOrigFilename, fLazPSuffix, false);
|
||||||
|
|
||||||
// Find Delphi project / package file name
|
// Find Delphi project / package file name
|
||||||
if CompareFileExt(fOrigFilename,fDelphiPSuffix,false)=0 then
|
if CompareFileExt(fOrigFilename,fDelphiPSuffix,false)=0 then
|
||||||
fDelphiPFilename:=fOrigFilename
|
fDelphiPFilename:=fOrigFilename
|
||||||
else
|
else
|
||||||
fDelphiPFilename:=ChangeFileExt(fOrigFilename,fDelphiPSuffix);
|
fDelphiPFilename:=ChangeFileExt(fOrigFilename,fDelphiPSuffix);
|
||||||
if not FileExistsUTF8(fDelphiPFilename) then
|
if not FileExistsUTF8(fDelphiPFilename) then
|
||||||
fDelphiPFilename:=FindDiskFileCaseInsensitive(fOrigFilename);
|
fDelphiPFilename:=FindDiskFileCaseInsensitive(fOrigFilename);
|
||||||
// ? fDelphiPFilename:=CodeToolBoss.DirectoryCachePool.FindDiskFilename(fDelphiPFilename);
|
// ? fDelphiPFilename:=CodeToolBoss.DirectoryCachePool.FindDiskFilename(fDelphiPFilename);
|
||||||
|
|
||||||
// Actual conversion.
|
// Actual conversion.
|
||||||
Result:=ConvertSub;
|
Result:=ConvertSub;
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on e: EDelphiConverterError do begin
|
||||||
|
fErrorMsg:=e.Message;
|
||||||
|
end;
|
||||||
|
else begin
|
||||||
|
fErrorMsg:=CodeToolBoss.ErrorMessage;
|
||||||
|
end;
|
||||||
|
Result:=mrAbort;
|
||||||
end;
|
end;
|
||||||
ShowEndingMessage(Result);
|
ShowEndingMessage(Result);
|
||||||
finally
|
finally
|
||||||
|
@ -88,9 +88,13 @@ type
|
|||||||
constructor Create(const AMessage: string);
|
constructor Create(const AMessage: string);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
//procedure RaiseDelphiConverterErrorFmt(const AMessage: string;
|
||||||
|
// const args: array of const{; ClearNicePos: boolean});
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
|
||||||
{ TSrcPropOffset }
|
{ TSrcPropOffset }
|
||||||
|
|
||||||
constructor TSrcPropOffset.Create(aParentType, aChildType, aPropName: string; aStartPos: integer);
|
constructor TSrcPropOffset.Create(aParentType, aChildType, aPropName: string; aStartPos: integer);
|
||||||
|
@ -255,7 +255,7 @@ begin
|
|||||||
end else if CodeTool.CurPos.Flag=cafSemicolon then begin
|
end else if CodeTool.CurPos.Flag=cafSemicolon then begin
|
||||||
break;
|
break;
|
||||||
end else
|
end else
|
||||||
CodeTool.RaiseExceptionFmt(ctsStrExpectedButAtomFound,[';',CodeTool.GetAtom]);
|
Raise EDelphiConverterError.CreateFmt(ctsStrExpectedButAtomFound,[';',CodeTool.GetAtom]);
|
||||||
until false;
|
until false;
|
||||||
end;
|
end;
|
||||||
Result:=true;
|
Result:=true;
|
||||||
|
Loading…
Reference in New Issue
Block a user