public static org.lgna.project.ast.NamedUserType getNamedUserTypeFromSuperType(
      org.lgna.project.ast.JavaType superType) {
    // <lg> Added to support generality in reuse
    if (superType.isAssignableTo(org.lgna.story.SScene.class)) {
      return getSceneUserType();
    }
    // </lg>

    org.lgna.project.ast.AbstractType<?, ?, ?> parameter0Type =
        ConstructorArgumentUtilities.getContructor0Parameter0Type(superType);
    ExtendsTypeCriterion criterion;
    if (parameter0Type != null) {
      criterion =
          new ExtendsTypeWithConstructorParameterTypeCriterion(
              superType, ConstructorArgumentUtilities.getContructor0Parameter0Type(superType));
    } else {
      criterion = new DefaultConstructorExtendsTypeCriterion(superType);
    }
    org.alice.ide.IDE ide = org.alice.ide.IDE.getActiveInstance();
    if (ide != null) {
      org.lgna.project.Project project = ide.getProject();
      if (project != null) {
        java.util.Set<org.lgna.project.ast.NamedUserType> existingTypes =
            project.getNamedUserTypes();
        for (org.lgna.project.ast.NamedUserType existingType : existingTypes) {
          if (criterion.accept(existingType)) {
            return existingType;
          }
        }
      }
    }
    return createTypeFor(superType, createClassNameFromSuperType(superType), null, null);
  }
 public static org.lgna.project.ast.AbstractType<?, ?, ?>[] getArgumentTypes(
     org.lgna.project.ast.AbstractType<?, ?, ?> ancestorType,
     org.lgna.project.ast.AbstractType<?, ?, ?> resourceType) {
   java.util.List<org.lgna.project.ast.AbstractType<?, ?, ?>> types =
       edu.cmu.cs.dennisc.java.util.Lists.newLinkedList();
   updateArgumentTypes(
       types,
       ConstructorArgumentUtilities.getContructor0Parameter0Type(ancestorType),
       resourceType);
   org.lgna.project.ast.AbstractType<?, ?, ?>[] rv =
       new org.lgna.project.ast.AbstractType<?, ?, ?>[types.size()];
   types.toArray(rv);
   return rv;
 }