avm2: Also exclude interface based virtual properties from describeTypeJSON

This commit is contained in:
Nathan Adams 2024-07-28 01:59:43 +02:00
parent 4ae2a73b54
commit f6ca9bcdac
5 changed files with 22 additions and 1 deletions

View File

@ -460,6 +460,15 @@ fn describe_internal_body<'gc>(
unreachable!();
};
// Don't include virtual properties that also exist in any interface
if defining_class
.all_interfaces()
.iter()
.any(|interface| interface.vtable().has_trait(&Multiname::new(ns, prop_name)))
{
continue;
}
let uri = if ns.as_uri().is_empty() {
None
} else {

View File

@ -1,5 +1,6 @@
package com.ruffle {
public interface MyInterface {
function interfaceMethod();
function get interfaceGetter();
}
}

View File

@ -26,5 +26,9 @@
public function interfaceMethod() {
}
public function get interfaceGetter() {
return null;
}
}
}

View File

@ -94,7 +94,7 @@ isFinal = false
isStatic = false
name = com.ruffle::RuffleTest
traits = [object Object]
accessors = [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
accessors = [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
0 = [object Object]
access = readonly
declaredBy = com.ruffle::RuffleBase
@ -145,6 +145,13 @@ traits = [object Object]
type = Boolean
uri = null
7 = [object Object]
access = readonly
declaredBy = com.ruffle::RuffleTest
metadata = null
name = interfaceGetter
type = *
uri = null
8 = [object Object]
access = writeonly
declaredBy = com.ruffle::RuffleTest
metadata = null

Binary file not shown.