Преглед изворни кода

* pas2jni: Added TDateTime Java support class.

git-svn-id: trunk@32733 -
yury пре 9 година
родитељ
комит
f838251662
1 измењених фајлова са 34 додато и 2 уклоњено
  1. 34 2
      utils/pas2jni/writer.pas

+ 34 - 2
utils/pas2jni/writer.pas

@@ -67,6 +67,8 @@ type
 
     function DoCheckItem(const ItemName: string): TCheckItemResult;
 
+    procedure WriteFileComment(st: TTextOutStream);
+
     procedure ProcessRules(d: TDef; const Prefix: string = '');
     function GetUniqueNum: integer;
     function DefToJniType(d: TDef; var err: boolean): string;
@@ -299,6 +301,12 @@ begin
       Result:=crDefault;
 end;
 
+procedure TWriter.WriteFileComment(st: TTextOutStream);
+begin
+  st.WriteLn('// This file was automatically generated by the pas2jni utility.');
+  st.WriteLn('// Do not edit this file.');
+end;
+
 procedure TWriter.ProcessRules(d: TDef; const Prefix: string);
 var
   i: integer;
@@ -1450,6 +1458,7 @@ begin
   u.Name:=LowerCase(u.Name);
   Fjs:=TTextOutStream.Create(IncludeTrailingPathDelimiter(FPkgDir) + u.Name + '.java', fmCreate);
   try
+    WriteFileComment(Fjs);
     Fjs.WriteLn(Format('package %s;', [JavaPackage]));
     HasSystem:=False;
     if Length(u.UsedUnits) > 0 then begin
@@ -1463,6 +1472,11 @@ begin
       if not HasSystem then
         Fjs.WriteLn(Format('import %s.system.*;', [JavaPackage]));
     end;
+    if u.Name = 'system' then begin
+      Fjs.WriteLn('import java.util.Date;');
+      Fjs.WriteLn('import java.util.TimeZone;');
+    end;
+
     Fjs.WriteLn;
     Fjs.WriteLn('public class ' + u.Name + ' {');
     Fjs.IncI;
@@ -1624,6 +1638,25 @@ begin
       Fjs.DecI;
       Fjs.WriteLn('}');
       Fjs.WriteLn;
+
+      // TDateTime support
+      Fjs.WriteLn('public static class TDateTime {');
+      Fjs.IncI;
+      Fjs.WriteLn('public static Date toDateUTC(double d) {');
+      Fjs.WriteLn('return new Date(Math.round((d - 25569)*86400000.0));', 1);
+      Fjs.WriteLn('}');
+      Fjs.WriteLn('public static Date toDate(double d) {');
+      Fjs.WriteLn('long t = Math.round((d - 25569)*86400000.0); return new Date(t - TimeZone.getDefault().getOffset(t));', 1);
+      Fjs.WriteLn('}');
+      Fjs.WriteLn('public static double getUTC(Date d) {');
+      Fjs.WriteLn('return d.getTime()/86400000.0 + 25569;', 1);
+      Fjs.WriteLn('}');
+      Fjs.WriteLn('public static double get(Date d) {');
+      Fjs.WriteLn('return (d.getTime() + TimeZone.getDefault().getOffset(d.getTime()))/86400000.0 + 25569;', 1);
+      Fjs.WriteLn('}');
+      Fjs.DecI;
+      Fjs.WriteLn('}');
+      Fjs.WriteLn;
     end;
     Fjs.WriteLn(Format('static { %s.system.InitJni(); }', [JavaPackage]));
     Fjs.WriteLn;
@@ -2304,8 +2337,7 @@ begin
     ForceDirectories(FPkgDir);
     Fps:=TTextOutStream.Create(OutPath + LibName + '.pas', fmCreate);
 
-    Fps.WriteLn('// This file was automatically generated by the pas2jni utility.');
-    Fps.WriteLn('// Creation time: ' + DateTimeToStr(Now));
+    WriteFileComment(Fps);
     Fps.WriteLn('library '+ LibName + ';');
     Fps.WriteLn('{$ifdef fpc} {$mode objfpc} {$H+} {$endif}');