Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CalculateMethodDefTreatmentAndRowId()

uint System.Reflection.Metadata.MetadataReader.CalculateMethodDefTreatmentAndRowId ( MethodDefinitionHandle methodDef)
inlineprivate

Definition at line 1558 of file MetadataReader.cs.

1559 {
1561 TypeDefinitionHandle declaringType = GetDeclaringType(methodDef);
1563 if ((flags & TypeAttributes.WindowsRuntime) != 0)
1564 {
1566 {
1567 methodDefTreatment = MethodDefTreatment.Implementation;
1568 }
1569 else if (flags.IsNested())
1570 {
1571 methodDefTreatment = MethodDefTreatment.Implementation;
1572 }
1573 else if ((flags & TypeAttributes.ClassSemanticsMask) != 0)
1574 {
1575 methodDefTreatment = MethodDefTreatment.InterfaceMethod;
1576 }
1577 else if (_metadataKind == MetadataKind.ManagedWindowsMetadata && (flags & TypeAttributes.Public) == 0)
1578 {
1579 methodDefTreatment = MethodDefTreatment.Implementation;
1580 }
1581 else
1582 {
1585 if (extends.Kind == HandleKind.TypeReference)
1586 {
1587 switch (GetSpecialTypeRefTreatment((TypeReferenceHandle)extends))
1588 {
1589 case TypeRefTreatment.SystemAttribute:
1590 methodDefTreatment = MethodDefTreatment.AttributeMethod;
1591 break;
1592 case TypeRefTreatment.SystemDelegate:
1593 methodDefTreatment = MethodDefTreatment.DelegateMethod | MethodDefTreatment.MarkPublicFlag;
1594 break;
1595 }
1596 }
1597 }
1598 }
1600 {
1601 bool flag = false;
1602 bool flag2 = false;
1603 bool isIDisposable = false;
1604 foreach (MethodImplementationHandle item in new MethodImplementationHandleCollection(this, declaringType))
1605 {
1607 if (!(methodImplementation.MethodBody == methodDef))
1608 {
1609 continue;
1610 }
1611 EntityHandle methodDeclaration = methodImplementation.MethodDeclaration;
1612 if (methodDeclaration.Kind == HandleKind.MemberReference && ImplementsRedirectedInterface((MemberReferenceHandle)methodDeclaration, out isIDisposable))
1613 {
1614 flag = true;
1615 if (isIDisposable)
1616 {
1617 break;
1618 }
1619 }
1620 else
1621 {
1622 flag2 = true;
1623 }
1624 }
1625 if (isIDisposable)
1626 {
1627 methodDefTreatment = MethodDefTreatment.DisposeMethod;
1628 }
1629 else if (flag && !flag2)
1630 {
1631 methodDefTreatment = MethodDefTreatment.HiddenInterfaceImplementation;
1632 }
1633 }
1635 {
1637 }
1638 return TreatmentAndRowId((byte)methodDefTreatment, methodDef.RowId);
1639 }
static uint TreatmentAndRowId(byte treatment, int rowId)
TypeDefinitionHandle GetDeclaringType(MethodDefinitionHandle methodDef)
TypeRefTreatment GetSpecialTypeRefTreatment(TypeReferenceHandle handle)
bool ImplementsRedirectedInterface(MemberReferenceHandle memberRef, out bool isIDisposable)
MethodDefTreatment GetMethodTreatmentFromCustomAttributes(MethodDefinitionHandle methodDef)
bool IsClrImplementationType(TypeDefinitionHandle typeDef)
MethodImplementation GetMethodImplementation(MethodImplementationHandle handle)
EntityHandle GetExtends(TypeDefinitionHandle handle)
TypeAttributes GetFlags(TypeDefinitionHandle handle)

References System.Reflection.Metadata.MetadataReader._metadataKind, System.Reflection.Metadata.MetadataReader.GetDeclaringType(), System.Reflection.Metadata.Ecma335.TypeDefTableReader.GetExtends(), System.Reflection.Metadata.Ecma335.TypeDefTableReader.GetFlags(), System.Reflection.Metadata.MetadataReader.GetMethodImplementation(), System.Reflection.Metadata.MetadataReader.GetMethodTreatmentFromCustomAttributes(), System.Reflection.Metadata.MetadataReader.GetSpecialTypeRefTreatment(), System.Reflection.Metadata.MetadataReader.ImplementsRedirectedInterface(), System.Reflection.Metadata.MetadataReader.IsClrImplementationType(), System.item, System.Reflection.Metadata.MetadataReader.TreatmentAndRowId(), and System.Reflection.Metadata.MetadataReader.TypeDefTable.

Referenced by System.Reflection.Metadata.MetadataReader.GetMethodDefTreatmentAndRowId().