Browse Source

[display] disallow access to jvm package

closes #8644
Simon Krajewski 6 years ago
parent
commit
acfcc127bf

+ 4 - 1
src/compiler/main.ml

@@ -259,7 +259,10 @@ module Initialize = struct
 					old_flush()
 				);
 				Java.before_generate com;
-				if defined com Define.Jvm then add_std "jvm";
+				if defined com Define.Jvm then begin
+					add_std "jvm";
+					com.package_rules <- PMap.remove "jvm" com.package_rules;
+				end;
 				add_std "java";
 				"java"
 			| Python ->

+ 1 - 1
src/context/common.ml

@@ -542,7 +542,7 @@ let init_platform com pf =
 	com.platform <- pf;
 	let name = platform_name pf in
 	let forbid acc p = if p = name || PMap.mem p acc then acc else PMap.add p Forbidden acc in
-	com.package_rules <- List.fold_left forbid com.package_rules (List.map platform_name platforms);
+	com.package_rules <- List.fold_left forbid com.package_rules ("jvm" :: (List.map platform_name platforms));
 	com.config <- get_config com;
 	if com.config.pf_static then begin
 		raw_define_value com.defines "target.static" "true";

+ 13 - 0
tests/server/src/DisplayTests.hx

@@ -1,3 +1,4 @@
+import haxe.display.Server;
 import utest.Assert;
 import haxe.display.Display;
 import haxe.display.FsPath;
@@ -137,4 +138,16 @@ typedef Foo = {
 		var result = parseCompletion();
 		Assert.equals(Toplevel, result.result.mode.kind);
 	}
+
+	function testIssue8644() {
+		vfs.putContent("HelloJvm.hx", getTemplate("HelloJvm.hx"));
+		var args = ["-cp", ".", "--interp"];
+		runHaxeJson(args, ServerMethods.ReadClassPaths, null);
+		runHaxeJson(args, DisplayMethods.Completion, {file: new FsPath("HelloJvm.hx"), offset: 55, wasAutoTriggered: false});
+		var completion = parseCompletion();
+		assertHasNoCompletion(completion, module -> switch (module.kind) {
+			case Type: module.args.path.typeName == "Jvm";
+			case _: false;
+		});
+	}
 }

+ 5 - 0
tests/server/test/templates/HelloJvm.hx

@@ -0,0 +1,5 @@
+class HelloJvm {
+	public static function main() {
+		Jvm
+	}
+}