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

[display] loop through interfaces for fields completion on an interface (fixes #8345)

Aleksandr Kuzmenko пре 6 година
родитељ
комит
ed703bfb85
2 измењених фајлова са 27 додато и 3 уклоњено
  1. 6 3
      src/core/type.ml
  2. 21 0
      tests/display/src/cases/Issue8345.hx

+ 6 - 3
src/core/type.ml

@@ -2996,9 +2996,12 @@ module TClass = struct
 				end else acc
 			in
 			let acc = if self_too || c != c0 then List.fold_left maybe_add acc c.cl_ordered_fields else acc in
-			match c.cl_super with
-			| Some(c,tl) -> loop acc c (List.map apply tl)
-			| None -> acc
+			if c.cl_interface then
+				List.fold_left (fun acc (i,tl) -> loop acc i (List.map apply tl)) acc c.cl_implements
+			else
+				match c.cl_super with
+				| Some(c,tl) -> loop acc c (List.map apply tl)
+				| None -> acc
 		in
 		loop PMap.empty c0 tl
 

+ 21 - 0
tests/display/src/cases/Issue8345.hx

@@ -0,0 +1,21 @@
+package cases;
+
+class Issue8345 extends DisplayTestCase {
+	/**
+		class Main {
+			static function main() {
+				var i:Test2 = null;
+				i.{-1-};
+			}
+		}
+
+		interface Test {
+			var foo:Int;
+		}
+
+		interface Test2 extends Test {}
+	**/
+	function test() {
+		eq(true, hasField(fields(pos(1)), "foo", "Int"));
+	}
+}