public static MethodSymbol ResolveMethodImplementation(MethodSymbol method, NamedTypeSymbol type) { // ignoring System.Object (we don't override its methods from PHP) bool ignoreSystemObject = method.ContainingType.IsPhpType(); for (; type != null; type = type.BaseType) { if (ignoreSystemObject && type.SpecialType == SpecialType.System_Object) { break; } var members = type.GetMembersByPhpName(method.RoutineName).OfType <MethodSymbol>().Where(CanOverride); if (method.ContainingType.IsInterface) { // check explicit interface override members = members.Concat(type.GetMembers(method.ContainingType.GetFullName() + "." + method.RoutineName).OfType <MethodSymbol>()); } var resolved = ResolveMethodImplementation(method, members); if (resolved != null) { return(resolved); } } // return(null); }
public override ImmutableArray <Symbol> GetMembersByPhpName(string name) { var originalMembers = _originalDefinition.GetMembersByPhpName(name); if (originalMembers.IsDefaultOrEmpty) { return(originalMembers); } return(originalMembers.Select(t => t.SymbolAsMember(this)).AsImmutable()); }
public static MethodSymbol ResolveMethodImplementation(MethodSymbol method, NamedTypeSymbol type) { for (; type != null; type = type.BaseType) { var members = type.GetMembersByPhpName(method.RoutineName).OfType <MethodSymbol>().Where(CanOverride); if (method.ContainingType.IsInterface) { // check explicit interface override members = members.Concat(type.GetMembers(method.ContainingType.GetFullName() + "." + method.RoutineName).OfType <MethodSymbol>()); } var resolved = ResolveMethodImplementation(method, members); if (resolved != null) { return(resolved); } } // return(null); }