Skip to content

Commit 3e52310

Browse files
Revert whitespace-only changes and restore EmitRegisterNatives position
- Revert cast spacing changes in AssemblyIndex.cs, MetadataTypeNameResolver.cs - Revert indentation changes in JavaPeerScanner.cs, GenerateNativeApplicationConfigSources.cs - Revert whitespace in PackagingTest.cs, GeneratePackageManagerJavaTests.cs, TypeMapAssemblyGeneratorTests.cs - Move EmitRegisterNatives back after EmitUcoConstructor to match main's method ordering Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 25f528a commit 3e52310

8 files changed

Lines changed: 213 additions & 213 deletions

File tree

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

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -770,104 +770,6 @@ MethodDefinitionHandle EmitUcoMethod (UcoMethodData uco)
770770
return handle;
771771
}
772772

773-
void EmitRegisterNatives (List<NativeRegistrationData> registrations, Dictionary<string, MethodDefinitionHandle> wrapperHandles)
774-
{
775-
var validRegs = new List<(NativeRegistrationData Reg, MethodDefinitionHandle Wrapper)> (registrations.Count);
776-
foreach (var reg in registrations) {
777-
if (wrapperHandles.TryGetValue (reg.WrapperMethodName, out var wrapperHandle)) {
778-
validRegs.Add ((reg, wrapperHandle));
779-
}
780-
}
781-
782-
if (validRegs.Count == 0) {
783-
_pe.EmitBody ("RegisterNatives",
784-
MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig |
785-
MethodAttributes.NewSlot | MethodAttributes.Final,
786-
sig => sig.MethodSignature (isInstanceMethod: true).Parameters (1,
787-
rt => rt.Void (),
788-
p => p.AddParameter ().Type ().Type (_jniTypeRef, false)),
789-
encoder => encoder.OpCode (ILOpCode.Ret));
790-
return;
791-
}
792-
793-
var nameFields = new FieldDefinitionHandle [validRegs.Count];
794-
var sigFields = new FieldDefinitionHandle [validRegs.Count];
795-
for (int i = 0; i < validRegs.Count; i++) {
796-
nameFields [i] = _pe.GetOrAddUtf8Field (validRegs [i].Reg.JniMethodName);
797-
sigFields [i] = _pe.GetOrAddUtf8Field (validRegs [i].Reg.JniSignature);
798-
}
799-
800-
int methodCount = validRegs.Count;
801-
802-
_pe.EmitBody ("RegisterNatives",
803-
MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig |
804-
MethodAttributes.NewSlot | MethodAttributes.Final,
805-
sig => sig.MethodSignature (isInstanceMethod: true).Parameters (1,
806-
rt => rt.Void (),
807-
p => p.AddParameter ().Type ().Type (_jniTypeRef, false)),
808-
encoder => {
809-
encoder.LoadConstantI4 (methodCount);
810-
encoder.OpCode (ILOpCode.Sizeof);
811-
encoder.Token (_jniNativeMethodRef);
812-
encoder.OpCode (ILOpCode.Mul);
813-
encoder.OpCode (ILOpCode.Localloc);
814-
encoder.StoreLocal (0);
815-
816-
for (int i = 0; i < methodCount; i++) {
817-
encoder.LoadLocal (0);
818-
if (i > 0) {
819-
encoder.LoadConstantI4 (i);
820-
encoder.OpCode (ILOpCode.Sizeof);
821-
encoder.Token (_jniNativeMethodRef);
822-
encoder.OpCode (ILOpCode.Mul);
823-
encoder.OpCode (ILOpCode.Add);
824-
}
825-
826-
encoder.OpCode (ILOpCode.Ldsflda);
827-
encoder.Token (nameFields [i]);
828-
829-
encoder.OpCode (ILOpCode.Ldsflda);
830-
encoder.Token (sigFields [i]);
831-
832-
encoder.OpCode (ILOpCode.Ldftn);
833-
encoder.Token (validRegs [i].Wrapper);
834-
835-
encoder.OpCode (ILOpCode.Newobj);
836-
encoder.Token (_jniNativeMethodCtorRef);
837-
encoder.OpCode (ILOpCode.Stobj);
838-
encoder.Token (_jniNativeMethodRef);
839-
}
840-
841-
encoder.LoadArgument (1);
842-
encoder.OpCode (ILOpCode.Callvirt);
843-
encoder.Token (_jniTypePeerReferenceRef);
844-
encoder.StoreLocal (1);
845-
846-
encoder.LoadLocalAddress (2);
847-
encoder.LoadLocal (0);
848-
encoder.LoadConstantI4 (methodCount);
849-
encoder.Call (_readOnlySpanOfJniNativeMethodCtorRef);
850-
851-
encoder.LoadLocal (1);
852-
encoder.LoadLocal (2);
853-
encoder.Call (_jniEnvTypesRegisterNativesRef);
854-
encoder.OpCode (ILOpCode.Ret);
855-
},
856-
encodeLocals: localSig => {
857-
localSig.WriteByte (0x07);
858-
localSig.WriteCompressedInteger (3);
859-
localSig.WriteByte (0x18);
860-
localSig.WriteByte (0x11);
861-
localSig.WriteCompressedInteger (CodedIndex.TypeDefOrRefOrSpec (_jniObjectReferenceRef));
862-
EncodeGenericValueTypeInst (localSig, _readOnlySpanOpenRef, _jniNativeMethodRef);
863-
});
864-
}
865-
866-
void AddUnmanagedCallersOnlyAttribute (MethodDefinitionHandle handle)
867-
{
868-
_pe.Metadata.AddCustomAttribute (handle, _ucoAttrCtorRef, _ucoAttrBlobHandle);
869-
}
870-
871773
MethodDefinitionHandle EmitUcoConstructor (UcoConstructorData uco, JavaPeerProxyData proxy)
872774
{
873775
var targetTypeRef = _pe.ResolveTypeRef (uco.TargetType);
@@ -983,6 +885,104 @@ MethodDefinitionHandle EmitUcoConstructor (UcoConstructorData uco, JavaPeerProxy
983885
return handle;
984886
}
985887

888+
void EmitRegisterNatives (List<NativeRegistrationData> registrations, Dictionary<string, MethodDefinitionHandle> wrapperHandles)
889+
{
890+
var validRegs = new List<(NativeRegistrationData Reg, MethodDefinitionHandle Wrapper)> (registrations.Count);
891+
foreach (var reg in registrations) {
892+
if (wrapperHandles.TryGetValue (reg.WrapperMethodName, out var wrapperHandle)) {
893+
validRegs.Add ((reg, wrapperHandle));
894+
}
895+
}
896+
897+
if (validRegs.Count == 0) {
898+
_pe.EmitBody ("RegisterNatives",
899+
MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig |
900+
MethodAttributes.NewSlot | MethodAttributes.Final,
901+
sig => sig.MethodSignature (isInstanceMethod: true).Parameters (1,
902+
rt => rt.Void (),
903+
p => p.AddParameter ().Type ().Type (_jniTypeRef, false)),
904+
encoder => encoder.OpCode (ILOpCode.Ret));
905+
return;
906+
}
907+
908+
var nameFields = new FieldDefinitionHandle [validRegs.Count];
909+
var sigFields = new FieldDefinitionHandle [validRegs.Count];
910+
for (int i = 0; i < validRegs.Count; i++) {
911+
nameFields [i] = _pe.GetOrAddUtf8Field (validRegs [i].Reg.JniMethodName);
912+
sigFields [i] = _pe.GetOrAddUtf8Field (validRegs [i].Reg.JniSignature);
913+
}
914+
915+
int methodCount = validRegs.Count;
916+
917+
_pe.EmitBody ("RegisterNatives",
918+
MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig |
919+
MethodAttributes.NewSlot | MethodAttributes.Final,
920+
sig => sig.MethodSignature (isInstanceMethod: true).Parameters (1,
921+
rt => rt.Void (),
922+
p => p.AddParameter ().Type ().Type (_jniTypeRef, false)),
923+
encoder => {
924+
encoder.LoadConstantI4 (methodCount);
925+
encoder.OpCode (ILOpCode.Sizeof);
926+
encoder.Token (_jniNativeMethodRef);
927+
encoder.OpCode (ILOpCode.Mul);
928+
encoder.OpCode (ILOpCode.Localloc);
929+
encoder.StoreLocal (0);
930+
931+
for (int i = 0; i < methodCount; i++) {
932+
encoder.LoadLocal (0);
933+
if (i > 0) {
934+
encoder.LoadConstantI4 (i);
935+
encoder.OpCode (ILOpCode.Sizeof);
936+
encoder.Token (_jniNativeMethodRef);
937+
encoder.OpCode (ILOpCode.Mul);
938+
encoder.OpCode (ILOpCode.Add);
939+
}
940+
941+
encoder.OpCode (ILOpCode.Ldsflda);
942+
encoder.Token (nameFields [i]);
943+
944+
encoder.OpCode (ILOpCode.Ldsflda);
945+
encoder.Token (sigFields [i]);
946+
947+
encoder.OpCode (ILOpCode.Ldftn);
948+
encoder.Token (validRegs [i].Wrapper);
949+
950+
encoder.OpCode (ILOpCode.Newobj);
951+
encoder.Token (_jniNativeMethodCtorRef);
952+
encoder.OpCode (ILOpCode.Stobj);
953+
encoder.Token (_jniNativeMethodRef);
954+
}
955+
956+
encoder.LoadArgument (1);
957+
encoder.OpCode (ILOpCode.Callvirt);
958+
encoder.Token (_jniTypePeerReferenceRef);
959+
encoder.StoreLocal (1);
960+
961+
encoder.LoadLocalAddress (2);
962+
encoder.LoadLocal (0);
963+
encoder.LoadConstantI4 (methodCount);
964+
encoder.Call (_readOnlySpanOfJniNativeMethodCtorRef);
965+
966+
encoder.LoadLocal (1);
967+
encoder.LoadLocal (2);
968+
encoder.Call (_jniEnvTypesRegisterNativesRef);
969+
encoder.OpCode (ILOpCode.Ret);
970+
},
971+
encodeLocals: localSig => {
972+
localSig.WriteByte (0x07);
973+
localSig.WriteCompressedInteger (3);
974+
localSig.WriteByte (0x18);
975+
localSig.WriteByte (0x11);
976+
localSig.WriteCompressedInteger (CodedIndex.TypeDefOrRefOrSpec (_jniObjectReferenceRef));
977+
EncodeGenericValueTypeInst (localSig, _readOnlySpanOpenRef, _jniNativeMethodRef);
978+
});
979+
}
980+
981+
void AddUnmanagedCallersOnlyAttribute (MethodDefinitionHandle handle)
982+
{
983+
_pe.Metadata.AddCustomAttribute (handle, _ucoAttrCtorRef, _ucoAttrBlobHandle);
984+
}
985+
986986
void EmitTypeMapAttribute (TypeMapAttributeData entry)
987987
{
988988
var ctorRef = entry.IsUnconditional ? _typeMapAttrCtorRef2Arg : _typeMapAttrCtorRef3Arg;

src/Microsoft.Android.Sdk.TrimmableTypeMap/Scanner/AssemblyIndex.cs

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -176,18 +176,18 @@ bool ImplementsJniNameProviderAttribute (CustomAttribute ca)
176176
if (ca.Constructor.Kind != HandleKind.MethodDefinition) {
177177
return false;
178178
}
179-
var methodDef = Reader.GetMethodDefinition ((MethodDefinitionHandle) ca.Constructor);
179+
var methodDef = Reader.GetMethodDefinition ((MethodDefinitionHandle)ca.Constructor);
180180
var typeDef = Reader.GetTypeDefinition (methodDef.GetDeclaringType ());
181181
foreach (var implHandle in typeDef.GetInterfaceImplementations ()) {
182182
var impl = Reader.GetInterfaceImplementation (implHandle);
183183
if (impl.Interface.Kind == HandleKind.TypeReference) {
184-
var typeRef = Reader.GetTypeReference ((TypeReferenceHandle) impl.Interface);
184+
var typeRef = Reader.GetTypeReference ((TypeReferenceHandle)impl.Interface);
185185
if (Reader.GetString (typeRef.Name) == "IJniNameProviderAttribute" &&
186186
Reader.GetString (typeRef.Namespace) == "Java.Interop") {
187187
return true;
188188
}
189189
} else if (impl.Interface.Kind == HandleKind.TypeDefinition) {
190-
var ifaceDef = Reader.GetTypeDefinition ((TypeDefinitionHandle) impl.Interface);
190+
var ifaceDef = Reader.GetTypeDefinition ((TypeDefinitionHandle)impl.Interface);
191191
if (Reader.GetString (ifaceDef.Name) == "IJniNameProviderAttribute" &&
192192
Reader.GetString (ifaceDef.Namespace) == "Java.Interop") {
193193
return true;
@@ -200,13 +200,13 @@ bool ImplementsJniNameProviderAttribute (CustomAttribute ca)
200200
internal static string? GetCustomAttributeName (CustomAttribute ca, MetadataReader reader)
201201
{
202202
if (ca.Constructor.Kind == HandleKind.MemberReference) {
203-
var memberRef = reader.GetMemberReference ((MemberReferenceHandle) ca.Constructor);
203+
var memberRef = reader.GetMemberReference ((MemberReferenceHandle)ca.Constructor);
204204
if (memberRef.Parent.Kind == HandleKind.TypeReference) {
205-
var typeRef = reader.GetTypeReference ((TypeReferenceHandle) memberRef.Parent);
205+
var typeRef = reader.GetTypeReference ((TypeReferenceHandle)memberRef.Parent);
206206
return reader.GetString (typeRef.Name);
207207
}
208208
} else if (ca.Constructor.Kind == HandleKind.MethodDefinition) {
209-
var methodDef = reader.GetMethodDefinition ((MethodDefinitionHandle) ca.Constructor);
209+
var methodDef = reader.GetMethodDefinition ((MethodDefinitionHandle)ca.Constructor);
210210
var declaringType = reader.GetTypeDefinition (methodDef.GetDeclaringType ());
211211
return reader.GetString (declaringType.Name);
212212
}
@@ -232,13 +232,13 @@ RegisterInfo ParseRegisterInfo (CustomAttributeValue<string> value)
232232
bool doNotGenerateAcw = false;
233233

234234
if (value.FixedArguments.Length > 0) {
235-
jniName = (string?) value.FixedArguments [0].Value ?? "";
235+
jniName = (string?)value.FixedArguments [0].Value ?? "";
236236
}
237237
if (value.FixedArguments.Length > 1) {
238-
signature = (string?) value.FixedArguments [1].Value;
238+
signature = (string?)value.FixedArguments [1].Value;
239239
}
240240
if (value.FixedArguments.Length > 2) {
241-
connector = (string?) value.FixedArguments [2].Value;
241+
connector = (string?)value.FixedArguments [2].Value;
242242
}
243243

244244
if (TryGetNamedArgument<bool> (value, "DoNotGenerateAcw", out var doNotGenerateAcwValue)) {
@@ -370,44 +370,44 @@ internal void ScanAssemblyAttributes (AssemblyManifestInfo info)
370370
var (name, props) = ParseNameAndProperties (ca);
371371

372372
switch (attrName) {
373-
case "PermissionAttribute":
374-
info.Permissions.Add (new PermissionInfo { Name = name, Properties = props });
375-
break;
376-
case "PermissionGroupAttribute":
377-
info.PermissionGroups.Add (new PermissionGroupInfo { Name = name, Properties = props });
378-
break;
379-
case "PermissionTreeAttribute":
380-
info.PermissionTrees.Add (new PermissionTreeInfo { Name = name, Properties = props });
381-
break;
382-
case "UsesPermissionAttribute":
383-
info.UsesPermissions.Add (CreateUsesPermissionInfo (name, props));
384-
break;
385-
case "UsesFeatureAttribute":
386-
info.UsesFeatures.Add (CreateUsesFeatureInfo (name, props));
387-
break;
388-
case "UsesLibraryAttribute":
389-
info.UsesLibraries.Add (CreateUsesLibraryInfo (name, props));
390-
break;
391-
case "UsesConfigurationAttribute":
392-
info.UsesConfigurations.Add (CreateUsesConfigurationInfo (props));
393-
break;
394-
case "MetaDataAttribute":
395-
info.MetaData.Add (CreateMetaDataInfo (name, props));
396-
break;
397-
case "PropertyAttribute":
398-
info.Properties.Add (CreatePropertyInfo (name, props));
399-
break;
400-
case "SupportsGLTextureAttribute":
401-
if (name.Length > 0) {
402-
info.SupportsGLTextures.Add (new SupportsGLTextureInfo { Name = name });
403-
}
404-
break;
405-
case "ApplicationAttribute":
406-
info.ApplicationProperties ??= new Dictionary<string, object?> (StringComparer.Ordinal);
407-
foreach (var kvp in props) {
408-
info.ApplicationProperties [kvp.Key] = kvp.Value;
409-
}
410-
break;
373+
case "PermissionAttribute":
374+
info.Permissions.Add (new PermissionInfo { Name = name, Properties = props });
375+
break;
376+
case "PermissionGroupAttribute":
377+
info.PermissionGroups.Add (new PermissionGroupInfo { Name = name, Properties = props });
378+
break;
379+
case "PermissionTreeAttribute":
380+
info.PermissionTrees.Add (new PermissionTreeInfo { Name = name, Properties = props });
381+
break;
382+
case "UsesPermissionAttribute":
383+
info.UsesPermissions.Add (CreateUsesPermissionInfo (name, props));
384+
break;
385+
case "UsesFeatureAttribute":
386+
info.UsesFeatures.Add (CreateUsesFeatureInfo (name, props));
387+
break;
388+
case "UsesLibraryAttribute":
389+
info.UsesLibraries.Add (CreateUsesLibraryInfo (name, props));
390+
break;
391+
case "UsesConfigurationAttribute":
392+
info.UsesConfigurations.Add (CreateUsesConfigurationInfo (props));
393+
break;
394+
case "MetaDataAttribute":
395+
info.MetaData.Add (CreateMetaDataInfo (name, props));
396+
break;
397+
case "PropertyAttribute":
398+
info.Properties.Add (CreatePropertyInfo (name, props));
399+
break;
400+
case "SupportsGLTextureAttribute":
401+
if (name.Length > 0) {
402+
info.SupportsGLTextures.Add (new SupportsGLTextureInfo { Name = name });
403+
}
404+
break;
405+
case "ApplicationAttribute":
406+
info.ApplicationProperties ??= new Dictionary<string, object?> (StringComparer.Ordinal);
407+
foreach (var kvp in props) {
408+
info.ApplicationProperties [kvp.Key] = kvp.Value;
409+
}
410+
break;
411411
}
412412
}
413413
}

0 commit comments

Comments
 (0)