public static Description coerceToDescription(Stella_Object self, Stella_Object original) {
    if (original == null) {
      original = self;
    }
    if (self == null) {
      System.out.println("Can't find a description for the object `" + original + "'.");
      return (null);
    }
    { Surrogate testValue000 = Stella_Object.safePrimaryType(self);

      if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_DESCRIPTION)) {
        { Description self000 = ((Description)(self));

          return (self000);
        }
      }
      else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_STELLA_RELATION)) {
        { Relation self000 = ((Relation)(self));

          return (Logic.getDescription(self000));
        }
      }
      else if (Surrogate.subtypeOfSurrogateP(testValue000)) {
        { Surrogate self000 = ((Surrogate)(self));

          return (Logic.coerceToDescription(self000.surrogateValue, original));
        }
      }
      else if (Surrogate.subtypeOfSymbolP(testValue000)) {
        { Symbol self000 = ((Symbol)(self));

          return (Logic.coerceToDescription(Surrogate.lookupSurrogateInModule(self000.symbolName, ((Module)(self000.homeContext)), false), original));
        }
      }
      else if (Surrogate.subtypeOfKeywordP(testValue000)) {
        { Keyword self000 = ((Keyword)(self));

          return (Logic.coerceToDescription(Surrogate.lookupSurrogate(self000.symbolName), original));
        }
      }
      else if (Surrogate.subtypeOfStringP(testValue000)) {
        { StringWrapper self000 = ((StringWrapper)(self));

          return (Logic.coerceToDescription(Surrogate.lookupSurrogate(self000.wrapperValue), original));
        }
      }
      else {
        return (Logic.coerceToDescription(null, original));
      }
    }
  }