avm2: Don't include interface methods in describeTypeJSON

This commit is contained in:
Nathan Adams 2024-07-27 22:02:30 +02:00
parent 2ac4e7e62d
commit db0fd879d2
5 changed files with 26 additions and 4 deletions

View File

@ -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()

View File

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

View File

@ -23,5 +23,8 @@
public function myMethod(first:String, second:ByteArray) {
}
public function interfaceMethod() {
}
}
}

View File

@ -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.