public static IdentifierInfo Read(BinaryReader reader)
 {
     var kind = (IdentifierKind)reader.ReadInt32();
     var info = new IdentifierInfo(kind);
     info.IsClassDeclaration = reader.ReadBoolean();
     info.IsTypePropertyDeclaration = reader.ReadBoolean();
     var count = reader.ReadInt32();
     info.DeclaredTypeNames = Enumerable.Range(0, count).Select(_ => reader.ReadString()).ToArray();
     count = reader.ReadInt32();
     info.DeclaredTypePropertyNames = Enumerable.Range(0, count).Select(_ => reader.ReadString()).ToArray();
     return info;
 }
 public static IdentifierInfo CreateClassDeclaration(bool isClassDeclaration, string[] declaredTypePropertyNames)
 {
     var info = new IdentifierInfo
         {
             Kind = IdentifierKind.Subject,
             IsClassDeclaration = isClassDeclaration,
             IsTypePropertyDeclaration = declaredTypePropertyNames.Length > 0,
             DeclaredTypeNames = new string[0],
             DeclaredTypePropertyNames = declaredTypePropertyNames
         };
     return info;
 }
 public static IdentifierInfo CreateClassInstantiation(string[] declaredTypeName)
 {
     var info = new IdentifierInfo
         {
             Kind = IdentifierKind.Subject,
             IsClassDeclaration = false,
             IsTypePropertyDeclaration = false,
             DeclaredTypeNames = declaredTypeName,
             DeclaredTypePropertyNames = new string[0]
         };
     return info;
 }
 public UriIdentifierDeclaredElement(
     IFile file,
     string @namespace,
     string localName,
     IdentifierInfo info,
     IPsiServices services,
     bool filterDeclarations = false,
     IUriIdentifierDeclaredElement parent = null)
 {
     this.myFile = file;
     this.ns = @namespace;
     this.localName = localName;
     this.myName = localName;
     this.myNewName = localName;
     this.myServices = services;
     this.filterDeclarations = filterDeclarations;
     this.parent = parent;
     this.info = info;
 }