if ( memberDefn.getTypeCode( ) == PropertyType.NAME_TYPE || memberDefn.getTypeCode( ) == PropertyType.MEMBER_KEY_TYPE )
if ( memberDefn.getTypeCode( ) == IPropertyType.NAME_TYPE || memberDefn.getTypeCode( ) == IPropertyType.MEMBER_KEY_TYPE )
	public void setMember( MemberRef ref, Object value )			throws SemanticException	{		PropertyDefn memberDefn = ref.getMemberDefn( );		PropertyDefn propDefn = ref.getPropDefn( );		assert propDefn != null;		assertExtendedElement( module, element, propDefn );		assert memberDefn != null;		value = memberDefn.validateValue( module, value );		// if set the value to the name of a structure, must ensure this		// would not create duplicates.		if ( memberDefn.getTypeCode( ) == PropertyType.NAME_TYPE				|| memberDefn.getTypeCode( ) == PropertyType.MEMBER_KEY_TYPE )			checkItemName( ref, (String) value );		if ( value instanceof ElementRefValue				&& memberDefn.getTypeCode( ) == IPropertyType.ELEMENT_REF_TYPE )		{			checkRecursiveElementReference( memberDefn, (ElementRefValue) value );		}		// Ignore duplicate values, even if the current value is not local.		// This avoids making local copies if the user enters the existing		// value, or if the UI gets a bit sloppy.		Object oldValue = ref.getLocalValue( module, element );		if ( oldValue == null && value == null )			return;		if ( oldValue != null && value != null && oldValue.equals( value ) )			return;		// The values differ. Make the change.		ActivityStack stack = getActivityStack( );		String label = ModelMessages				.getMessage( MessageConstants.CHANGE_ITEM_MESSAGE );		stack.startTrans( label );		makeLocalCompositeValue( ref );		MemberRecord record = new MemberRecord( module, element, ref, value );		stack.execute( record );		Structure structure = ref.getStructure( module, element );		List semanticList = structure.validate( module, element );		if ( semanticList.size( ) > 0 )		{			stack.rollback( );			throw (SemanticException) semanticList.get( 0 );		}		stack.commit( );	}