Browse Source

[java] Added -java-lib imports completion

Caue Waneck 12 years ago
parent
commit
d605c402e6
2 changed files with 19 additions and 4 deletions
  1. 7 4
      genjava.ml
  2. 12 0
      main.ml

+ 7 - 4
genjava.ml

@@ -2084,7 +2084,7 @@ let before_generate con =
       Common.define_value con Define.JavaVer "7";
       Common.define_value con Define.JavaVer "7";
       7
       7
   in
   in
-  if java_ver < 5 then failwith ("Java version is defined to target Java " ^ string_of_int java_ver ^ ", but the compiler can only output code to versions equal or superior to Java 5");
+ if java_ver < 5 then failwith ("Java version is defined to target Java " ^ string_of_int java_ver ^ ", but the compiler can only output code to versions equal or superior to Java 5");
   let rec loop i =
   let rec loop i =
     Common.raw_define con ("java" ^ (string_of_int i));
     Common.raw_define con ("java" ^ (string_of_int i));
     if i > 0 then loop (i - 1)
     if i > 0 then loop (i - 1)
@@ -2405,12 +2405,15 @@ let create_ctx com base_pack =
     jcur_pack = base_pack;
     jcur_pack = base_pack;
   }
   }
 
 
+let filename_to_clsname f =
+  String.map (fun c -> if c = '$' then '_' else c) (String.sub f 0 (String.length f - 6))
+
 let rec get_classes_dir pack dir ret =
 let rec get_classes_dir pack dir ret =
   Array.iter (fun f -> match (Unix.stat (dir ^"/"^ f)).st_kind with
   Array.iter (fun f -> match (Unix.stat (dir ^"/"^ f)).st_kind with
     | S_DIR ->
     | S_DIR ->
         get_classes_dir (pack @ [f]) (dir ^"/"^ f) ret
         get_classes_dir (pack @ [f]) (dir ^"/"^ f) ret
     | _ when (String.sub (String.uncapitalize f) (String.length f - 6) 6) = ".class" ->
     | _ when (String.sub (String.uncapitalize f) (String.length f - 6) 6) = ".class" ->
-        ret := (pack, String.sub f 0 (String.length f - 6)) :: !ret;
+        ret := (pack, filename_to_clsname f) :: !ret;
     | _ -> ()
     | _ -> ()
   ) (Sys.readdir dir)
   ) (Sys.readdir dir)
 
 
@@ -2420,9 +2423,9 @@ let get_classes_zip zip =
     | { Zip.is_directory = false; Zip.filename = f } when (String.sub (String.uncapitalize f) (String.length f - 6) 6) = ".class" ->
     | { Zip.is_directory = false; Zip.filename = f } when (String.sub (String.uncapitalize f) (String.length f - 6) 6) = ".class" ->
         (match List.rev (String.nsplit f "/") with
         (match List.rev (String.nsplit f "/") with
         | clsname :: pack ->
         | clsname :: pack ->
-            ret := (List.rev pack, String.sub f 0 (String.length f - 6)) :: !ret
+            ret := (List.rev pack, filename_to_clsname f) :: !ret
         | _ ->
         | _ ->
-            ret := ([], String.sub f 0 (String.length f - 6)) :: !ret)
+            ret := ([], filename_to_clsname f) :: !ret)
     | _ -> ()
     | _ -> ()
   ) (Zip.entries zip);
   ) (Zip.entries zip);
   !ret
   !ret

+ 12 - 0
main.ml

@@ -232,6 +232,18 @@ let rec read_type_path com p =
 			loop path p
 			loop path p
 		) (extract());
 		) (extract());
 	) com.swf_libs;
 	) com.swf_libs;
+  List.iter (fun (path,close,all_files,lookup) ->
+    List.iter (fun (path, name) ->
+      if path = p then classes := name :: !classes else
+      let rec loop p1 p2 =
+        match p1, p2 with
+        | [], _ -> ()
+        | x :: _, [] -> packages := x :: !packages
+        | a :: p1, b :: p2 -> if a = b then loop p1 p2
+      in
+      loop path p
+    ) (all_files())
+  ) com.java_libs;
 	unique !packages, unique !classes
 	unique !packages, unique !classes
 
 
 let delete_file f = try Sys.remove f with _ -> ()
 let delete_file f = try Sys.remove f with _ -> ()