protected void consumeGetSetPropertyAssignment(boolean isSetter) {
	// remove two expressions property name/remove an optional property set parameter list
	// remove all statement from function body
	this.intPtr -= 2; // int pushed by consumeNestedMethod() and consumeOpenBlock() (called inside consumeMethodBody())
	int length = this.astLengthStack[this.astLengthPtr--];
	Statement[] statements = new Statement[length];
	this.astPtr -= length;
	System.arraycopy(
			this.astStack,
			this.astPtr + 1,
			statements,
			0,
			length);
	Expression varName = null;
	if (isSetter) {
		this.expressionLengthPtr--;
		varName = this.expressionStack[this.expressionPtr--];
	}
	// property name
	this.expressionLengthPtr--;
	Expression propertyName = this.expressionStack[this.expressionPtr--];
	// set or get
	this.expressionLengthPtr--;
	Expression expression = this.expressionStack[this.expressionPtr--];
	int end = this.endStatementPosition;
	int start = expression.sourceStart;

	if (expression instanceof SingleNameReference) {
		SingleNameReference reference = (SingleNameReference) expression;
		if (isSetter) {
			if (!CharOperation.equals(reference.token, "set".toCharArray())) {
				// report error
				this.problemReporter.invalidValueForGetterSetter(expression, true);
			}
		} else {
			if (!CharOperation.equals(reference.token, "get".toCharArray())) {
				// report error
				this.problemReporter.invalidValueForGetterSetter(expression, false);
			}
		}
	}
	ObjectGetterSetterField getterSetterField = new ObjectGetterSetterField(propertyName, statements, varName, start, end);
	pushOnExpressionStack(getterSetterField);
}