public override ITypeSymbol ResolveTypeSymbol(PhpCompilation compilation) { if (this.ResolvedType.IsValidType()) { return(this.ResolvedType); } if (_self == null || _self.IsTraitType()) { // no self, parent, static resolvable in compile-time: return(new MissingMetadataTypeSymbol(ToString(), 0, false)); } // resolve types that parser skipped switch (_type) { case ReservedType.self: return(_self); case ReservedType.parent: var btype = _self.BaseType; return((btype == null || btype.IsObjectType()) // no "System.Object" in PHP, invalid parent ? new MissingMetadataTypeSymbol(ToString(), 0, false) : btype); case ReservedType.@static: if (_self.IsSealed) { // `static` == `self` <=> self is sealed return(_self); } break; } // unk return(null); }