Skip to content

Commit 8078b4a

Browse files
authored
Create separate ObjectWrapper.Create factory method (#1810)
1 parent d306162 commit 8078b4a

12 files changed

+32
-25
lines changed

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<PackageVersion Include="NUnit3TestAdapter" Version="4.5.0" />
2222
<PackageVersion Include="SharpZipLib" Version="1.4.0" />
2323
<PackageVersion Include="Spectre.Console.Cli" Version="0.45.0" />
24-
<PackageVersion Include="System.Text.Json" Version="6.0.8" />
24+
<PackageVersion Include="System.Text.Json" Version="8.0.3" />
2525
<PackageVersion Include="Test262Harness" Version="1.0.0" />
2626
<PackageVersion Include="xunit" Version="2.7.0" />
2727
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.7" PrivateAssets="all" />

Jint.Benchmark/ListInteropBenchmark.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ public void Setup()
4949
options
5050
.SetWrapObjectHandler((engine, target, type) =>
5151
{
52-
var instance = new ObjectWrapper(engine, target);
53-
var isArrayLike = IsArrayLike(instance.Target.GetType());
52+
var instance = ObjectWrapper.Create(engine, target);
53+
var isArrayLike = IsArrayLike(target.GetType());
5454
if (isArrayLike)
5555
{
5656
instance.Prototype = engine.Intrinsics.Array.PrototypeObject;

Jint.Tests.PublicInterface/InteropTests.SystemTextJson.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
using Jint.Native;
44
using Jint.Runtime.Interop;
55
using System.Text.Json;
6+
67
namespace Jint.Tests.PublicInterface;
78

8-
#if NET8_0_OR_GREATER
9-
public class TestJsonValueConverter : IObjectConverter
9+
public sealed class SystemTextJsonValueConverter : IObjectConverter
1010
{
1111
public bool TryConvert(Engine engine, object value, out JsValue result)
1212
{
@@ -95,15 +95,15 @@ public void AccessingJsonNodeShouldWork()
9595
{
9696
if (target is JsonArray)
9797
{
98-
var wrapped = new ObjectWrapper(e, target);
98+
var wrapped = ObjectWrapper.Create(e, target);
9999
wrapped.Prototype = e.Intrinsics.Array.PrototypeObject;
100100
return wrapped;
101101
}
102102

103-
return new ObjectWrapper(e, target);
103+
return ObjectWrapper.Create(e, target);
104104
};
105105

106-
options.AddObjectConverter(new TestJsonValueConverter());
106+
options.AddObjectConverter(new SystemTextJsonValueConverter());
107107
// we cannot access this[string] with anything else than JsonObject, otherwise itw will throw
108108
options.Interop.TypeResolver = new TypeResolver
109109
{
@@ -193,4 +193,3 @@ function populateFullName() {
193193
Assert.True(engine.Evaluate("variables.employees.other == 'def'").AsBoolean());
194194
}
195195
}
196-
#endif

Jint.Tests/Runtime/InteropTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ public void CanAddArrayPrototypeForArrayLikeClrObjects()
850850
.AllowClr(typeof(Person).Assembly)
851851
.SetWrapObjectHandler((engine, target, type) =>
852852
{
853-
var instance = new ObjectWrapper(engine, target);
853+
var instance = ObjectWrapper.Create(engine, target);
854854
if (instance.IsArrayLike)
855855
{
856856
instance.SetPrototypeOf(engine.Realm.Intrinsics.Array.PrototypeObject);
@@ -885,7 +885,7 @@ public void CanSetIsConcatSpreadableForArrays()
885885
{
886886
opt.SetWrapObjectHandler((eng, obj, type) =>
887887
{
888-
var wrapper = new ObjectWrapper(eng, obj);
888+
var wrapper = ObjectWrapper.Create(eng, obj);
889889
if (wrapper.IsArrayLike)
890890
{
891891
wrapper.SetPrototypeOf(eng.Realm.Intrinsics.Array.PrototypeObject);
@@ -2633,7 +2633,7 @@ public void ObjectWrapperOverridingEquality()
26332633
[Fact]
26342634
public void ObjectWrapperWrappingDictionaryShouldNotBeArrayLike()
26352635
{
2636-
var wrapper = new ObjectWrapper(_engine, new Dictionary<string, object>());
2636+
var wrapper = ObjectWrapper.Create(_engine, new Dictionary<string, object>());
26372637
Assert.False(wrapper.IsArrayLike);
26382638
}
26392639

Jint.Tests/Runtime/ModuleTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ public void EngineShouldTransmitSourceModuleForModuleLoader()
631631
}
632632
public class ModuleLoaderForEngineShouldTransmitSourceModuleForModuleLoaderTest : ModuleLoader
633633
{
634-
public override ResolvedSpecifier Resolve(string? referencingModuleLocation, ModuleRequest moduleRequest)
634+
public override ResolvedSpecifier Resolve(string referencingModuleLocation, ModuleRequest moduleRequest)
635635
{
636636
var moduleSpec = moduleRequest.Specifier;
637637

Jint.Tests/Runtime/PropertyDescriptorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public void ClrAccessDescriptor()
167167
JsValue ExtractClrAccessDescriptor(JsValue jsArugments)
168168
{
169169
var pd = ((JsArguments) jsArugments).ParameterMap.GetOwnProperty("0");
170-
return new ObjectWrapper(_engine, pd);
170+
return ObjectWrapper.Create(_engine, pd);
171171
}
172172
_engine.SetValue("ExtractClrAccessDescriptor", ExtractClrAccessDescriptor);
173173
var pdobj = _engine.Evaluate("""

Jint/Options.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ internal void Apply(Engine engine)
125125
new NamespaceReference(engine, TypeConverter.ToString(arguments.At(0)))),
126126
PropertyFlag.AllForbidden));
127127

128-
engine.Realm.GlobalObject.SetProperty("clrHelper", new PropertyDescriptor(new ObjectWrapper(engine, new ClrHelper(Interop)), PropertyFlag.AllForbidden));
128+
engine.Realm.GlobalObject.SetProperty("clrHelper", new PropertyDescriptor(ObjectWrapper.Create(engine, new ClrHelper(Interop)), PropertyFlag.AllForbidden));
129129

130130
#pragma warning restore IL2026
131131
}
@@ -291,7 +291,7 @@ public class InteropOptions
291291
/// ObjectInstance using class ObjectWrapper. This function can be used to
292292
/// change the behavior.
293293
/// </summary>
294-
public WrapObjectDelegate WrapObjectHandler { get; set; } = static (engine, target, type) => new ObjectWrapper(engine, target, type);
294+
public WrapObjectDelegate WrapObjectHandler { get; set; } = static (engine, target, type) => ObjectWrapper.Create(engine, target, type);
295295

296296
/// <summary>
297297
///

Jint/Runtime/Interop/ClrHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public JsValue ToString(JsValue value)
3030
public JsValue Unwrap(ObjectWrapper obj)
3131
#pragma warning restore CA1822
3232
{
33-
return new ObjectWrapper(obj.Engine, obj.Target);
33+
return ObjectWrapper.Create(obj.Engine, obj.Target);
3434
}
3535

3636
/// <summary>
@@ -44,7 +44,7 @@ public JsValue Wrap(ObjectWrapper obj, TypeReference type)
4444
{
4545
ExceptionHelper.ThrowTypeError(type.Engine.Realm, "Argument obj must be an instance of type");
4646
}
47-
return new ObjectWrapper(obj.Engine, obj.Target, type.ReferenceType);
47+
return ObjectWrapper.Create(obj.Engine, obj.Target, type.ReferenceType);
4848
}
4949

5050
/// <summary>

Jint/Runtime/Interop/DefaultTypeConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ internal static class ObjectExtensions
395395

396396
public static void SetHiddenClrObjectProperty(this ObjectInstance obj, string name, object value)
397397
{
398-
obj.SetOwnProperty(name, new PropertyDescriptor(new ObjectWrapper(obj.Engine, value), PropertyFlag.AllForbidden));
398+
obj.SetOwnProperty(name, new PropertyDescriptor(ObjectWrapper.Create(obj.Engine, value), PropertyFlag.AllForbidden));
399399
}
400400
}
401401
}
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
namespace Jint.Runtime.Interop
1+
namespace Jint.Runtime.Interop;
2+
3+
public interface IObjectWrapper
24
{
3-
public interface IObjectWrapper
4-
{
5-
object Target { get; }
6-
}
5+
object Target { get; }
76
}

Jint/Runtime/Interop/ObjectWrapper.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public sealed class ObjectWrapper : ObjectInstance, IObjectWrapper, IEquatable<O
2121
{
2222
internal readonly TypeDescriptor _typeDescriptor;
2323

24+
[Obsolete("Use ObjectWrapper.Create instead of calling constructor directly")]
2425
public ObjectWrapper(
2526
Engine engine,
2627
object obj,
@@ -39,6 +40,14 @@ public ObjectWrapper(
3940
}
4041
}
4142

43+
/// <summary>
44+
/// Creates a new object wrapper for given object instance and exposed type.
45+
/// </summary>
46+
public static ObjectInstance Create(Engine engine, object obj, Type? type = null)
47+
#pragma warning disable CS0618 // Type or member is obsolete
48+
=> new ObjectWrapper(engine, obj, type);
49+
#pragma warning restore CS0618 // Type or member is obsolete
50+
4251
public object Target { get; }
4352
internal Type ClrType { get; }
4453

Jint/Runtime/Interop/TypeReference.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ private static JsBoolean HasInstance(JsValue thisObject, JsValue[] arguments)
356356

357357
var derivedType = other switch
358358
{
359-
ObjectWrapper wrapper => wrapper.Target.GetType(),
359+
IObjectWrapper wrapper => wrapper.Target.GetType(),
360360
TypeReferencePrototype otherTypeReference => otherTypeReference.TypeReference.ReferenceType,
361361
_ => null
362362
};

0 commit comments

Comments
 (0)