class ClassContext extends Context<Context> {
		private final int access;
		private final String name;

		/**
		 * @param access
		 * 		Class modifiers.
		 * @param name
		 * 		Name of class.
		 */
		ClassContext(int access, String name) {
			this.access = access;
			this.name = name;
		}

		/**
		 * @return Class modifiers.
		 */
		public int getAccess() {
			return access;
		}

		/**
		 * @return Name of class.
		 */
		public String getName() {
			return name;
		}

		/**
		 * Appends a member context.
		 *
		 * @param access
		 * 		Member modifiers.
		 * @param name
		 * 		Name of member.
		 * @param desc
		 * 		Descriptor of member.
		 *
		 * @return Member context.
		 */
		public MemberContext withMember(int access, String name, String desc) {
			return new MemberContext(this, access, name, desc);
		}

		@Override
		public int compareTo(Context<?> other) {
			if(other instanceof ClassContext) {
				ClassContext otherClass = (ClassContext) other;
				return name.compareTo(otherClass.name);
			}
			return WIDER_SCOPE;
		}

		@Override
		public boolean contains(Context<?> other) {<FILL_FUNCTION_BODY>}

		@Override
		public String toString() {
			return name;
		}
	}

			// Check if member is in class
			if (other instanceof MemberContext)
				return (other.getParent().compareTo(this) == 0);
			else {
				// Get root context of other
				while (other.getParent() != null)
					other = other.getParent();
				// Check for match against this class
				return (other.compareTo(this) == 0);
			}
		
<no_super_class>