public void setProject(org.lgna.project.Project project) {
    StringBuilder sb = new StringBuilder();
    java.util.Set<org.lgna.project.ast.NamedUserType> types = project.getNamedUserTypes();
    for (org.lgna.project.ast.NamedUserType type : types) {
      boolean wasNullMethodRemoved = false;
      java.util.ListIterator<org.lgna.project.ast.UserMethod> methodIterator =
          type.getDeclaredMethods().listIterator();
      while (methodIterator.hasNext()) {
        org.lgna.project.ast.UserMethod method = methodIterator.next();
        if (method != null) {
          // pass
        } else {
          methodIterator.remove();
          wasNullMethodRemoved = true;
        }
      }
      boolean wasNullFieldRemoved = false;
      java.util.ListIterator<org.lgna.project.ast.UserField> fieldIterator =
          type.getDeclaredFields().listIterator();
      while (fieldIterator.hasNext()) {
        org.lgna.project.ast.UserField field = fieldIterator.next();
        if (field != null) {
          // pass
        } else {
          fieldIterator.remove();
          wasNullFieldRemoved = true;
        }
      }
      if (wasNullMethodRemoved) {
        if (sb.length() > 0) {
          sb.append("\n");
        }
        sb.append("null method was removed from ");
        sb.append(type.getName());
        sb.append(".");
      }
      if (wasNullFieldRemoved) {
        if (sb.length() > 0) {
          sb.append("\n");
        }
        sb.append("null field was removed from ");
        sb.append(type.getName());
        sb.append(".");
      }
    }
    if (sb.length() > 0) {
      javax.swing.SwingUtilities.invokeLater(
          () -> {
            new edu.cmu.cs.dennisc.javax.swing.option.OkDialog.Builder(sb.toString())
                .title("A Problem With Your Project Has Been Fixed")
                .messageType(edu.cmu.cs.dennisc.javax.swing.option.MessageType.WARNING)
                .buildAndShow();
          });
    }
    org.lgna.project.ProgramTypeUtilities.sanityCheckAllTypes(project);

    // If this is the free version of Looking Glass (i.e. no sims) then some projects
    // cannot be opened because they use non-free models or resources. We can check this
    // by verifying whether all of the types in the projects have classes that we can
    // locate. If we can't locate them, then we can't open the project.
    if (!project.doAllTypeClassesExist()) {
      throw new TypeClassNotFoundException(ProgramTypeUtilities.getProjectTypeClasses(project));
    }

    this.setDocument(new ProjectDocument(project));
  }