avm2: Don't include interface methods in describeTypeJSON
This commit is contained in:
parent
2ac4e7e62d
commit
db0fd879d2
|
@ -6,7 +6,7 @@ use crate::avm2::object::{ArrayObject, TObject};
|
|||
use crate::avm2::parameters::ParametersExt;
|
||||
use crate::avm2::property::Property;
|
||||
|
||||
use crate::avm2::{Activation, Error, Namespace, Object, Value};
|
||||
use crate::avm2::{Activation, Error, Multiname, Namespace, Object, Value};
|
||||
use crate::avm2_stub_method;
|
||||
|
||||
// Implements `avmplus.describeTypeJSON`
|
||||
|
@ -355,6 +355,17 @@ fn describe_internal_body<'gc>(
|
|||
let method = vtable
|
||||
.get_full_method(*disp_id)
|
||||
.unwrap_or_else(|| panic!("Missing method for id {disp_id:?}"));
|
||||
|
||||
// Don't include methods that also exist in any interface
|
||||
if method
|
||||
.class
|
||||
.all_interfaces()
|
||||
.iter()
|
||||
.any(|interface| interface.vtable().has_trait(&Multiname::new(ns, prop_name)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
let return_type_name = method
|
||||
.method
|
||||
.return_type()
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
package com.ruffle {
|
||||
public interface MyInterface {
|
||||
function interfaceMethod();
|
||||
}
|
||||
}
|
|
@ -23,5 +23,8 @@
|
|||
|
||||
public function myMethod(first:String, second:ByteArray) {
|
||||
}
|
||||
|
||||
public function interfaceMethod() {
|
||||
}
|
||||
}
|
||||
}
|
|
@ -169,7 +169,7 @@ traits = [object Object]
|
|||
constructor = null
|
||||
interfaces = null
|
||||
metadata = null
|
||||
methods = [object Object],[object Object],[object Object],[object Object],[object Object]
|
||||
methods = [object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
|
||||
0 = [object Object]
|
||||
declaredBy = com.ruffle::RuffleBase
|
||||
metadata = null
|
||||
|
@ -188,6 +188,13 @@ traits = [object Object]
|
|||
returnType = Boolean
|
||||
uri = http://adobe.com/AS3/2006/builtin
|
||||
2 = [object Object]
|
||||
declaredBy = com.ruffle::RuffleTest
|
||||
metadata = null
|
||||
name = interfaceMethod
|
||||
parameters =
|
||||
returnType = *
|
||||
uri = null
|
||||
3 = [object Object]
|
||||
declaredBy = Object
|
||||
metadata = null
|
||||
name = isPrototypeOf
|
||||
|
@ -197,7 +204,7 @@ traits = [object Object]
|
|||
type = *
|
||||
returnType = Boolean
|
||||
uri = http://adobe.com/AS3/2006/builtin
|
||||
3 = [object Object]
|
||||
4 = [object Object]
|
||||
declaredBy = com.ruffle::RuffleTest
|
||||
metadata = null
|
||||
name = myMethod
|
||||
|
@ -210,7 +217,7 @@ traits = [object Object]
|
|||
type = flash.utils::ByteArray
|
||||
returnType = *
|
||||
uri = null
|
||||
4 = [object Object]
|
||||
5 = [object Object]
|
||||
declaredBy = Object
|
||||
metadata = null
|
||||
name = propertyIsEnumerable
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue