Пример #1
0
 protected override T GetFirstMemberOrDefault <T>(object obj, MemberNamePredicate predicate)
 {
     return(GetFirstDotNetPropertyOrDefault <T>(obj, predicate)
            ?? GetFirstDotNetMethodOrDefault <T>(obj, predicate)
            ?? GetFirstDotNetEventOrDefault <T>(obj, predicate)
            ?? GetFirstDynamicMemberOrDefault <T>(obj, predicate));
 }
Пример #2
0
        private T GetDotNetPropertyImpl <T>(object obj, string propertyName, MemberNamePredicate predicate = null)
            where T : PSMemberInfo
        {
            bool lookingForProperties = typeof(T).IsAssignableFrom(typeof(PSProperty));
            bool lookingForParameterizedProperties = IsTypeParameterizedProperty(typeof(T));

            if (!lookingForProperties && !lookingForParameterizedProperties)
            {
                return(null);
            }

            CacheTable typeTable = _isStatic
                ? GetStaticPropertyReflectionTable((Type)obj)
                : GetInstancePropertyReflectionTable(obj.GetType());

            object entry = typeTable[propertyName];

            return(entry switch
            {
                null => null,
                PropertyCacheEntry cacheEntry when lookingForProperties
                => new PSProperty(
                    cacheEntry.member.Name,
                    this,
                    obj,
                    cacheEntry) as T,
                ParameterizedPropertyCacheEntry paramCacheEntry when lookingForParameterizedProperties
                => new PSParameterizedProperty(
                    paramCacheEntry.propertyName,
                    this,
                    obj,
                    paramCacheEntry) as T,
                _ => null,
            });
Пример #3
0
        private static T DotNetGetFirstMemberOrDefaultDelegate <T>(PSObject msjObj, MemberNamePredicate predicate) where T : PSMemberInfo
        {
            Adapter adapter = msjObj.InternalBaseDotNetAdapter;

            if (adapter is null || adapter.GetType() == typeof(DotNetAdapter))
            {
                adapter = s_customInstance;
            }

            return(adapter.BaseGetFirstMemberOrDefault <T>(msjObj.ImmediateBaseObject, predicate));
        }
Пример #4
0
        /// <summary>
        /// Returns the first PSMemberInfo whose name matches the specified <see cref="MemberNamePredicate"/>.
        /// </summary>
        protected override T GetFirstMemberOrDefault <T>(object obj, MemberNamePredicate predicate)
        {
            bool lookingForProperties = typeof(T).IsAssignableFrom(typeof(PSProperty));
            bool lookingForParameterizedProperties = typeof(T).IsAssignableFrom(typeof(PSParameterizedProperty));

            if (lookingForProperties || lookingForParameterizedProperties)
            {
                foreach (ComProperty prop in _comTypeInfo.Properties.Values)
                {
                    if (prop.IsParameterized &&
                        lookingForParameterizedProperties &&
                        predicate(prop.Name))
                    {
                        return(new PSParameterizedProperty(prop.Name, this, obj, prop) as T);
                    }

                    if (lookingForProperties && predicate(prop.Name))
                    {
                        return(new PSProperty(prop.Name, this, obj, prop) as T);
                    }
                }
            }

            bool lookingForMethods = typeof(T).IsAssignableFrom(typeof(PSMethod));

            if (lookingForMethods)
            {
                foreach (ComMethod method in _comTypeInfo.Methods.Values)
                {
                    if (predicate(method.Name))
                    {
                        var mshMethod = new PSMethod(method.Name, this, obj, method);
                        return(mshMethod as T);
                    }
                }
            }

            return(null);
        }
Пример #5
0
        protected override PSProperty DoGetFirstPropertyOrDefault(object obj, MemberNamePredicate predicate)
        {
            PSAdaptedProperty property = null;

            try
            {
                property = _externalAdapter.GetFirstPropertyOrDefault(obj, predicate);
            }
            catch (Exception exception)
            {
                throw new ExtendedTypeSystemException(
                          "PSPropertyAdapter.GetProperty",
                          exception,
                          ExtendedTypeSystem.GetProperty, nameof(predicate), obj.ToString());
            }

            if (property != null)
            {
                InitializeProperty(property, obj);
            }

            return(property);
        }
Пример #6
0
        /// <inheritdoc />
        public override PSAdaptedProperty GetFirstPropertyOrDefault(object baseObject, MemberNamePredicate predicate)
        {
            if (predicate is null)
            {
                throw new PSArgumentNullException(nameof(predicate));
            }

            // baseObject should never be null
            CimInstance cimInstance = baseObject as CimInstance;

            if (cimInstance is null)
            {
                string msg = string.Format(
                    CultureInfo.InvariantCulture,
                    CimInstanceTypeAdapterResources.BaseObjectNotCimInstance,
                    "baseObject",
                    typeof(CimInstance).ToString());
                throw new PSInvalidOperationException(msg);
            }

            if (predicate(RemotingConstants.ComputerNameNoteProperty))
            {
                PSAdaptedProperty prop = GetPSComputerNameAdapter(cimInstance);
                return(prop);
            }

            foreach (CimProperty cimProperty in cimInstance.CimInstanceProperties)
            {
                if (cimProperty != null && predicate(cimProperty.Name))
                {
                    PSAdaptedProperty prop = GetCimPropertyAdapter(cimProperty, baseObject, cimProperty.Name);
                    return(prop);
                }
            }

            return(null);
        }
Пример #7
0
        /// <summary>
        /// Returns a property if it's name matches the specified <see cref="MemberNamePredicate"/>, otherwise null.
        /// </summary>
        /// <returns>An adapted property if the predicate matches, or <see langword="null"/>.</returns>
        public virtual PSAdaptedProperty GetFirstPropertyOrDefault(object baseObject, MemberNamePredicate predicate)
        {
            foreach (var property in GetProperties(baseObject))
            {
                if (predicate(property.Name))
                {
                    return(property);
                }
            }

            return(null);
        }
Пример #8
0
 private static T DotNetGetFirstMemberOrDefaultDelegate <T>(PSObject msjObj, MemberNamePredicate predicate)
     where T : PSMemberInfo
 {
     throw null;
 }