/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_script_InvocationInfo_idl__ 
#define __com_sun_star_script_InvocationInfo_idl__ 
 
#ifndef __com_sun_star_script_MemberType_idl__
#include <com/sun/star/script/MemberType.idl> 
#endif 
 
#ifndef __com_sun_star_reflection_ParamMode_idl__
#include <com/sun/star/reflection/ParamMode.idl> 
#endif 

//============================================================================= 
 
 module com {  module sun {  module star {  module script {  
 
//============================================================================= 
 
/** 
	This struct is used to specify information about object members
	(methods or properties) accessed via XInvocation, such as names, 
	types, or parameters.
	</p>
 */
published struct InvocationInfo
{ 

	/** Name of the method or property.
	 */
	string aName;

	/** Kind of the member (method or property).
	 */
	MemberType eMemberType;

	/** Only for property members:
		This field may contain zero or more constants of the
		<type scope="com::sun::star::beans">PropertyAttribute</type> 
		constants group. It is not guaranteed that all necessary 
		constants are set to describe the property completely,
		but a flag will only be set, if the corresponding charac-
		teristic really exists. Example: If the READONLY flag
		is set, the property is readonly. If it isn't set, the
		property nevertheless can be readonly. 

		For methods this field is irrelevant and is set to 0.
	 */
 	short PropertyAttribute;

	/** Type of the member, for methods the return type
	 */
	type aType;

	/** Types method parameters, for properties this sequence is empty
	 */
	sequence< type > aParamTypes;

	/** Mode of method parameters (IN, OUT, INOUT), 
		for properties this sequence is empty.
	 */
	sequence< com::sun::star::reflection::ParamMode > aParamModes; 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
