import weaver.jp.<SUPER_JP>;

/**
 * 
 *
 * @class
 */
function <THIS_JP>(astNode) {
    // Parent constructor
    <SUPER_JP>.call(this,astNode);
    
}
// Inheritance
<THIS_JP>.prototype = Object.create(<SUPER_JP>.prototype);
<THIS_JP>.prototype.constructor = <THIS_JP>;

// JoinPoint Types
<THIS_JP>._JP_TYPES = new Set();
<TYPES_SET>

<THIS_JP>.prototype.instanceOf = function(joinPointType) {
	return <THIS_JP>._JP_TYPES.has(joinPointType);
	
	/*
	if(joinPointType === this.joinPointType) {
		return true;
	}
	
	return (new <SUPER_JP>(this.astNode)).instanceOf(joinPointType);
	*/
}


/**
 * @return an Iterator with the types of this join point.
 */
<THIS_JP>.prototype.types = function(joinPointType) {
	return <THIS_JP>._JP_TYPES.values();
}

_lara_dummy_ = Object.defineProperty(<THIS_JP>.prototype, 'joinPointType', {
	configurable: true,
	get: function () { return '<JP_TYPE>'; }
});

