Skip to content

Commit fd8fad7

Browse files
Tighten trimmable export cleanup
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent dd04b25 commit fd8fad7

5 files changed

Lines changed: 157 additions & 229 deletions

File tree

src/Microsoft.Android.Sdk.TrimmableTypeMap/Generator/ExportMethodDispatchEmitter.cs

Lines changed: 137 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -460,12 +460,144 @@ void AddUnmanagedCallersOnlyAttribute (MethodDefinitionHandle handle)
460460

461461
sealed class ExportMethodDispatchEmitterContext
462462
{
463-
public required TypeReferenceHandle JniObjectReferenceRef { get; init; }
464-
public required TypeReferenceHandle IJavaObjectRef { get; init; }
465-
public required TypeReferenceHandle JniTypeRef { get; init; }
466-
public required TypeReferenceHandle JniNativeMethodRef { get; init; }
467-
public required TypeReferenceHandle ReadOnlySpanOpenRef { get; init; }
463+
public static ExportMethodDispatchEmitterContext Create (
464+
PEAssemblyBuilder pe,
465+
TypeReferenceHandle iJavaPeerableRef,
466+
TypeReferenceHandle jniHandleOwnershipRef,
467+
TypeReferenceHandle jniEnvRef,
468+
TypeReferenceHandle systemTypeRef,
469+
MemberReferenceHandle getTypeFromHandleRef,
470+
MemberReferenceHandle ucoAttrCtorRef,
471+
BlobHandle ucoAttrBlobHandle)
472+
{
473+
var metadata = pe.Metadata;
474+
var iJavaObjectRef = metadata.AddTypeReference (pe.MonoAndroidRef,
475+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("IJavaObject"));
476+
var javaLangObjectRef = metadata.AddTypeReference (pe.MonoAndroidRef,
477+
metadata.GetOrAddString ("Java.Lang"), metadata.GetOrAddString ("Object"));
478+
var systemArrayRef = metadata.AddTypeReference (pe.SystemRuntimeRef,
479+
metadata.GetOrAddString ("System"), metadata.GetOrAddString ("Array"));
480+
var systemStreamRef = metadata.AddTypeReference (pe.SystemRuntimeRef,
481+
metadata.GetOrAddString ("System.IO"), metadata.GetOrAddString ("Stream"));
482+
var systemXmlRef = pe.FindOrAddAssemblyRef ("System.Xml.ReaderWriter");
483+
var systemXmlReaderRef = metadata.AddTypeReference (systemXmlRef,
484+
metadata.GetOrAddString ("System.Xml"), metadata.GetOrAddString ("XmlReader"));
485+
var inputStreamInvokerRef = metadata.AddTypeReference (pe.MonoAndroidRef,
486+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("InputStreamInvoker"));
487+
var outputStreamInvokerRef = metadata.AddTypeReference (pe.MonoAndroidRef,
488+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("OutputStreamInvoker"));
489+
var inputStreamAdapterRef = metadata.AddTypeReference (pe.MonoAndroidRef,
490+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("InputStreamAdapter"));
491+
var outputStreamAdapterRef = metadata.AddTypeReference (pe.MonoAndroidRef,
492+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("OutputStreamAdapter"));
493+
var xmlPullParserReaderRef = metadata.AddTypeReference (pe.MonoAndroidRef,
494+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("XmlPullParserReader"));
495+
var xmlResourceParserReaderRef = metadata.AddTypeReference (pe.MonoAndroidRef,
496+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("XmlResourceParserReader"));
497+
var xmlReaderPullParserRef = metadata.AddTypeReference (pe.MonoAndroidRef,
498+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("XmlReaderPullParser"));
499+
var xmlReaderResourceParserRef = metadata.AddTypeReference (pe.MonoAndroidRef,
500+
metadata.GetOrAddString ("Android.Runtime"), metadata.GetOrAddString ("XmlReaderResourceParser"));
501+
502+
return new ExportMethodDispatchEmitterContext {
503+
IJavaObjectRef = iJavaObjectRef,
504+
GetTypeFromHandleRef = getTypeFromHandleRef,
505+
JniEnvGetStringRef = pe.AddMemberRef (jniEnvRef, "GetString",
506+
sig => sig.MethodSignature ().Parameters (2,
507+
rt => rt.Type ().String (),
508+
p => {
509+
p.AddParameter ().Type ().IntPtr ();
510+
p.AddParameter ().Type ().Type (jniHandleOwnershipRef, true);
511+
})),
512+
JniEnvGetArrayRef = pe.AddMemberRef (jniEnvRef, "GetArray",
513+
sig => sig.MethodSignature ().Parameters (3,
514+
rt => rt.Type ().Type (systemArrayRef, false),
515+
p => {
516+
p.AddParameter ().Type ().IntPtr ();
517+
p.AddParameter ().Type ().Type (jniHandleOwnershipRef, true);
518+
p.AddParameter ().Type ().Type (systemTypeRef, false);
519+
})),
520+
JniEnvCopyArrayRef = pe.AddMemberRef (jniEnvRef, "CopyArray",
521+
sig => sig.MethodSignature ().Parameters (3,
522+
rt => rt.Void (),
523+
p => {
524+
p.AddParameter ().Type ().Type (systemArrayRef, false);
525+
p.AddParameter ().Type ().Type (systemTypeRef, false);
526+
p.AddParameter ().Type ().IntPtr ();
527+
})),
528+
JniEnvNewArrayRef = pe.AddMemberRef (jniEnvRef, "NewArray",
529+
sig => sig.MethodSignature ().Parameters (2,
530+
rt => rt.Type ().IntPtr (),
531+
p => {
532+
p.AddParameter ().Type ().Type (systemArrayRef, false);
533+
p.AddParameter ().Type ().Type (systemTypeRef, false);
534+
})),
535+
JniEnvNewStringRef = pe.AddMemberRef (jniEnvRef, "NewString",
536+
sig => sig.MethodSignature ().Parameters (1,
537+
rt => rt.Type ().IntPtr (),
538+
p => p.AddParameter ().Type ().String ())),
539+
JniEnvToLocalJniHandleRef = pe.AddMemberRef (jniEnvRef, "ToLocalJniHandle",
540+
sig => sig.MethodSignature ().Parameters (1,
541+
rt => rt.Type ().IntPtr (),
542+
p => p.AddParameter ().Type ().Type (iJavaObjectRef, false))),
543+
JavaLangObjectGetObjectRef = pe.AddMemberRef (javaLangObjectRef, "GetObject",
544+
sig => sig.MethodSignature ().Parameters (3,
545+
rt => rt.Type ().Type (iJavaPeerableRef, false),
546+
p => {
547+
p.AddParameter ().Type ().IntPtr ();
548+
p.AddParameter ().Type ().Type (jniHandleOwnershipRef, true);
549+
p.AddParameter ().Type ().Type (systemTypeRef, false);
550+
})),
551+
InputStreamInvokerFromJniHandleRef = pe.AddMemberRef (inputStreamInvokerRef, "FromJniHandle",
552+
sig => sig.MethodSignature ().Parameters (2,
553+
rt => rt.Type ().Type (systemStreamRef, false),
554+
p => {
555+
p.AddParameter ().Type ().IntPtr ();
556+
p.AddParameter ().Type ().Type (jniHandleOwnershipRef, true);
557+
})),
558+
OutputStreamInvokerFromJniHandleRef = pe.AddMemberRef (outputStreamInvokerRef, "FromJniHandle",
559+
sig => sig.MethodSignature ().Parameters (2,
560+
rt => rt.Type ().Type (systemStreamRef, false),
561+
p => {
562+
p.AddParameter ().Type ().IntPtr ();
563+
p.AddParameter ().Type ().Type (jniHandleOwnershipRef, true);
564+
})),
565+
InputStreamAdapterToLocalJniHandleRef = pe.AddMemberRef (inputStreamAdapterRef, "ToLocalJniHandle",
566+
sig => sig.MethodSignature ().Parameters (1,
567+
rt => rt.Type ().IntPtr (),
568+
p => p.AddParameter ().Type ().Type (systemStreamRef, false))),
569+
OutputStreamAdapterToLocalJniHandleRef = pe.AddMemberRef (outputStreamAdapterRef, "ToLocalJniHandle",
570+
sig => sig.MethodSignature ().Parameters (1,
571+
rt => rt.Type ().IntPtr (),
572+
p => p.AddParameter ().Type ().Type (systemStreamRef, false))),
573+
XmlPullParserReaderFromJniHandleRef = pe.AddMemberRef (xmlPullParserReaderRef, "FromJniHandle",
574+
sig => sig.MethodSignature ().Parameters (2,
575+
rt => rt.Type ().Type (systemXmlReaderRef, false),
576+
p => {
577+
p.AddParameter ().Type ().IntPtr ();
578+
p.AddParameter ().Type ().Type (jniHandleOwnershipRef, true);
579+
})),
580+
XmlResourceParserReaderFromJniHandleRef = pe.AddMemberRef (xmlResourceParserReaderRef, "FromJniHandle",
581+
sig => sig.MethodSignature ().Parameters (2,
582+
rt => rt.Type ().Type (systemXmlReaderRef, false),
583+
p => {
584+
p.AddParameter ().Type ().IntPtr ();
585+
p.AddParameter ().Type ().Type (jniHandleOwnershipRef, true);
586+
})),
587+
XmlReaderPullParserToLocalJniHandleRef = pe.AddMemberRef (xmlReaderPullParserRef, "ToLocalJniHandle",
588+
sig => sig.MethodSignature ().Parameters (1,
589+
rt => rt.Type ().IntPtr (),
590+
p => p.AddParameter ().Type ().Type (systemXmlReaderRef, false))),
591+
XmlReaderResourceParserToLocalJniHandleRef = pe.AddMemberRef (xmlReaderResourceParserRef, "ToLocalJniHandle",
592+
sig => sig.MethodSignature ().Parameters (1,
593+
rt => rt.Type ().IntPtr (),
594+
p => p.AddParameter ().Type ().Type (systemXmlReaderRef, false))),
595+
UcoAttrCtorRef = ucoAttrCtorRef,
596+
UcoAttrBlobHandle = ucoAttrBlobHandle,
597+
};
598+
}
468599

600+
public required TypeReferenceHandle IJavaObjectRef { get; init; }
469601
public required MemberReferenceHandle GetTypeFromHandleRef { get; init; }
470602
public required MemberReferenceHandle JniEnvGetStringRef { get; init; }
471603
public required MemberReferenceHandle JniEnvGetArrayRef { get; init; }
@@ -482,11 +614,6 @@ sealed class ExportMethodDispatchEmitterContext
482614
public required MemberReferenceHandle XmlResourceParserReaderFromJniHandleRef { get; init; }
483615
public required MemberReferenceHandle XmlReaderPullParserToLocalJniHandleRef { get; init; }
484616
public required MemberReferenceHandle XmlReaderResourceParserToLocalJniHandleRef { get; init; }
485-
public required MemberReferenceHandle ActivateInstanceRef { get; init; }
486-
public required MemberReferenceHandle JniNativeMethodCtorRef { get; init; }
487-
public required MemberReferenceHandle JniTypePeerReferenceRef { get; init; }
488-
public required MemberReferenceHandle JniEnvTypesRegisterNativesRef { get; init; }
489-
public required MemberReferenceHandle ReadOnlySpanOfJniNativeMethodCtorRef { get; init; }
490617
public required MemberReferenceHandle UcoAttrCtorRef { get; init; }
491618

492619
public required BlobHandle UcoAttrBlobHandle { get; init; }

0 commit comments

Comments
 (0)