public GetClassReturnType(IProjectContent content, string fullName, int typeArgumentCount, GetClassOptions options)
		{
			this.content = content;
			this.typeArgumentCount = typeArgumentCount;
			SetFullyQualifiedName(fullName);
			this.options = options;
		}
예제 #2
0
 public GetClassReturnType(IProjectContent content, string fullName, int typeArgumentCount, GetClassOptions options)
 {
     this.content           = content;
     this.typeArgumentCount = typeArgumentCount;
     SetFullyQualifiedName(fullName);
     this.options = options;
 }
예제 #3
0
        /// <summary>
        /// Gets the position of a member in this project content (not a referenced one).
        /// </summary>
        /// <param name="fullMemberName">The full class name in Reflection syntax (always case sensitive, ` for generics)</param>
        /// <param name="lookInReferences">Whether to search in referenced project contents.</param>
        public IClass GetClassByReflectionName(string className, bool lookInReferences)
        {
            if (className == null)
            {
                throw new ArgumentNullException("className");
            }
            int typeParameterCount;

            className = ReflectionLayer.ReflectionClass.ConvertReflectionNameToFullName(className, out typeParameterCount);
            GetClassOptions options = GetClassOptions.Default;

            if (!lookInReferences)
            {
                options &= ~GetClassOptions.LookInReferences;
            }
            return(GetClass(className, typeParameterCount, LanguageProperties.CSharp, options));
        }
예제 #4
0
        public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
        {
            IClass c = GetClassInternal(typeName, typeParameterCount, language);

            if (c != null && c.TypeParameters.Count == typeParameterCount)
            {
                return(c);
            }

            // Search in references:
            if ((options & GetClassOptions.LookInReferences) != 0)
            {
                lock (referencedContents) {
                    foreach (IProjectContent content in referencedContents)
                    {
                        // Look for the class in the referenced content.
                        // Don't do a inner-class search in the recursive call - one search
                        // done by this GetClass call is sufficient.
                        IClass contentClass = content.GetClass(
                            typeName, typeParameterCount, language,
                            options & ~(GetClassOptions.LookInReferences | GetClassOptions.LookForInnerClass));
                        if (contentClass != null)
                        {
                            if (contentClass.TypeParameters.Count == typeParameterCount &&
                                IsAccessibleClass(contentClass))
                            {
                                return(contentClass);
                            }
                            else
                            {
                                c = contentClass;
                            }
                        }
                    }
                }
            }

            if ((options & GetClassOptions.LookForInnerClass) != 0)
            {
                // not found -> maybe nested type -> trying to find class that contains this one.
                int lastIndex = typeName.LastIndexOf('.');
                if (lastIndex > 0)
                {
                    string outerName  = typeName.Substring(0, lastIndex);
                    IClass upperClass = GetClass(outerName, typeParameterCount, language, options);
                    if (upperClass != null)
                    {
                        foreach (IClass upperBaseClass in upperClass.ClassInheritanceTree)
                        {
                            IList <IClass> innerClasses = upperBaseClass.InnerClasses;
                            if (innerClasses != null)
                            {
                                string innerName = typeName.Substring(lastIndex + 1);
                                foreach (IClass innerClass in innerClasses)
                                {
                                    if (language.NameComparer.Equals(innerClass.Name, innerName))
                                    {
                                        if (innerClass.TypeParameters.Count == typeParameterCount)
                                        {
                                            return(innerClass);
                                        }
                                        else
                                        {
                                            // store match
                                            c = innerClass;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if ((options & GetClassOptions.ExactMatch) == GetClassOptions.ExactMatch)
            {
                return(null);
            }
            else
            {
                // no matching class found - we'll return a class with different type paramter count
                return(c);
            }
        }
예제 #5
0
		public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
		{
			throw new NotImplementedException();
		}
예제 #6
0
		public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
		{
			IClass c = GetClassInternal(typeName, typeParameterCount, language);
			if (c != null && c.TypeParameters.Count == typeParameterCount) {
				return c;
			}
			
			// Search in references:
			if ((options & GetClassOptions.LookInReferences) != 0) {
				lock (referencedContents) {
					foreach (IProjectContent content in referencedContents) {
						// Look for the class in the referenced content.
						// Don't do a inner-class search in the recursive call - one search
						// done by this GetClass call is sufficient.
						IClass contentClass = content.GetClass(
							typeName, typeParameterCount, language,
							options & ~(GetClassOptions.LookInReferences | GetClassOptions.LookForInnerClass));
						if (contentClass != null) {
							if (contentClass.TypeParameters.Count == typeParameterCount
							    && IsAccessibleClass(contentClass))
							{
								return contentClass;
							} else {
								c = contentClass;
							}
						}
					}
				}
			}
			
			if ((options & GetClassOptions.LookForInnerClass) != 0) {
				// not found -> maybe nested type -> trying to find class that contains this one.
				int lastIndex = typeName.LastIndexOf('.');
				if (lastIndex > 0) {
					string outerName = typeName.Substring(0, lastIndex);
					IClass upperClass = GetClass(outerName, typeParameterCount, language, options);
					if (upperClass != null) {
						foreach (IClass upperBaseClass in upperClass.ClassInheritanceTree) {
							IList<IClass> innerClasses = upperBaseClass.InnerClasses;
							if (innerClasses != null) {
								string innerName = typeName.Substring(lastIndex + 1);
								foreach (IClass innerClass in innerClasses) {
									if (language.NameComparer.Equals(innerClass.Name, innerName)) {
										if (innerClass.TypeParameters.Count == typeParameterCount) {
											return innerClass;
										} else {
											// store match
											c = innerClass;
										}
									}
								}
							}
						}
					}
				}
			}
			if ((options & GetClassOptions.ExactMatch) == GetClassOptions.ExactMatch) {
				return null;
			} else {
				// no matching class found - we'll return a class with different type paramter count
				return c;
			}
		}
		public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
		{
			IClass c = GetClassInternal(typeName, typeParameterCount, language);
			if (c != null && c.TypeParameters.Count == typeParameterCount) {
				return c;
			}
			
			// Search in references:
			if ((options & GetClassOptions.LookInReferences) != 0) {
				lock (referencedContents) {
					foreach (IProjectContent content in referencedContents) {
						IClass contentClass = content.GetClass(typeName, typeParameterCount, language, GetClassOptions.None);
						if (contentClass != null) {
							if (contentClass.TypeParameters.Count == typeParameterCount
							    && IsAccessibleClass(contentClass))
							{
								return contentClass;
							} else {
								c = contentClass;
							}
						}
					}
				}
			}
			
			if (c != null) {
				return c;
			}
			
			if ((options & GetClassOptions.LookForInnerClass) != 0) {
				// not found -> maybe nested type -> trying to find class that contains this one.
				int lastIndex = typeName.LastIndexOf('.');
				if (lastIndex > 0) {
					string outerName = typeName.Substring(0, lastIndex);
					IClass upperClass = GetClass(outerName, typeParameterCount, language, options);
					if (upperClass != null) {
						foreach (IClass upperBaseClass in upperClass.ClassInheritanceTree) {
							IList<IClass> innerClasses = upperBaseClass.InnerClasses;
							if (innerClasses != null) {
								string innerName = typeName.Substring(lastIndex + 1);
								foreach (IClass innerClass in innerClasses) {
									if (language.NameComparer.Equals(innerClass.Name, innerName)) {
										return innerClass;
									}
								}
							}
						}
					}
				}
			}
			return null;
		}
예제 #8
0
 public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
 {
     return(GetClass(typeName, typeParameterCount));
 }
예제 #9
0
 public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
 {
     throw new NotImplementedException();
 }
예제 #10
0
		public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
		{
			return GetClass(typeName, typeParameterCount);
		}
        public IClass GetClass(string typeName, int typeParameterCount, LanguageProperties language, GetClassOptions options)
        {
            IClass c = GetClassInternal(typeName, typeParameterCount, language);

            if (c != null && c.TypeParameters.Count == typeParameterCount)
            {
                return(c);
            }

            // Search in references:
            if ((options & GetClassOptions.LookInReferences) != 0)
            {
                lock (referencedContents) {
                    foreach (IProjectContent content in referencedContents)
                    {
                        IClass contentClass = content.GetClass(typeName, typeParameterCount, language, GetClassOptions.None);
                        if (contentClass != null)
                        {
                            if (contentClass.TypeParameters.Count == typeParameterCount &&
                                IsAccessibleClass(contentClass))
                            {
                                return(contentClass);
                            }
                            else
                            {
                                c = contentClass;
                            }
                        }
                    }
                }
            }

            if (c != null)
            {
                return(c);
            }

            if ((options & GetClassOptions.LookForInnerClass) != 0)
            {
                // not found -> maybe nested type -> trying to find class that contains this one.
                int lastIndex = typeName.LastIndexOf('.');
                if (lastIndex > 0)
                {
                    string outerName  = typeName.Substring(0, lastIndex);
                    IClass upperClass = GetClass(outerName, typeParameterCount, language, options);
                    if (upperClass != null)
                    {
                        foreach (IClass upperBaseClass in upperClass.ClassInheritanceTree)
                        {
                            IList <IClass> innerClasses = upperBaseClass.InnerClasses;
                            if (innerClasses != null)
                            {
                                string innerName = typeName.Substring(lastIndex + 1);
                                foreach (IClass innerClass in innerClasses)
                                {
                                    if (language.NameComparer.Equals(innerClass.Name, innerName))
                                    {
                                        return(innerClass);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(null);
        }