public GetClassReturnType(IProjectContent content, string fullName, int typeArgumentCount, GetClassOptions options) { this.content = content; this.typeArgumentCount = typeArgumentCount; SetFullyQualifiedName(fullName); this.options = options; }
/// <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)); }
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) { throw new NotImplementedException(); }
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; }
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) { 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); }