public boolean setInitializer(Expression expr) {
		if (constant != null)
			return constant.equals(expr);

		/*
		 * This should check for isFinal(), but sadly, sometimes jikes doesn't
		 * make a val$ field final. I don't know when, or why, so I currently
		 * ignore isFinal.
		 */
		if (isSynthetic
				&& (fieldName.startsWith("this$") || fieldName
						.startsWith("val$"))) {
			if (fieldName.startsWith("val$") && fieldName.length() > 4
					&& expr instanceof OuterLocalOperator) {
				LocalInfo li = ((OuterLocalOperator) expr).getLocalInfo();
				li.addHint(fieldName.substring(4), type);
			}
			analyzedSynthetic();
		} else
			expr.makeInitializer(type);

		constant = expr;
		return true;
	}