private static IDeclaredElement TryFindDeclaration([NotNull] IInvocationExpression expression, [NotNull] string propertyName, [NotNull] string requiredTypeName, [NotNull] string requiredMethodName, out string name) { name = null; var baseClass = expression.GetContainingNode <IClassLikeDeclaration>(); if (baseClass == null) { return(null); } var result = TryFindIdDeclarationInClassLikeDeclaration(baseClass, propertyName, requiredTypeName, requiredMethodName, out name); if (result != null) { return(result); } var next = ClassLikeDeclarationNavigator.GetByNestedTypeDeclaration(baseClass); while (next != null) { baseClass = next; result = TryFindIdDeclarationInClassLikeDeclaration(baseClass, propertyName, requiredTypeName, requiredMethodName, out name); if (result != null) { return(result); } next = ClassLikeDeclarationNavigator.GetByNestedTypeDeclaration(baseClass); } return(null); }
private static IClassLikeDeclaration GetTopLevelClassLikeDeclaration([NotNull] IInvocationExpression expression) { var baseClass = expression.GetContainingNode <IClassLikeDeclaration>(); if (baseClass == null) { return(null); } var next = ClassLikeDeclarationNavigator.GetByNestedTypeDeclaration(baseClass); while (next != null) { baseClass = next; next = ClassLikeDeclarationNavigator.GetByNestedTypeDeclaration(baseClass); } return(baseClass); }