Skip to content

Commit

Permalink
Fixed issue with erroneous "invalid tag" error message
Browse files Browse the repository at this point in the history
Modified EventHandler to allow for methods that accept a type compatible with, but not necessarily matching, the type specified in [EventHandler] tag.
  • Loading branch information
bclinkinbeard committed Sep 9, 2011
1 parent 084a88d commit 4fd5265
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/org/swizframework/processors/EventHandlerProcessor.as
Expand Up @@ -126,7 +126,7 @@ package org.swizframework.processors
*/
protected function addEventHandlerByEventType( eventHandlerTag:EventHandlerMetadataTag, method:Function, eventClass:Class, eventType:String ):void
{
var eventHandler:EventHandler = new eventHandlerClass( eventHandlerTag, method, eventClass );
var eventHandler:EventHandler = new eventHandlerClass( eventHandlerTag, method, eventClass, swiz.domain );

eventHandlersByEventType[ eventType ] ||= [];
eventHandlersByEventType[ eventType ].push( eventHandler );
Expand Down
28 changes: 25 additions & 3 deletions src/org/swizframework/utils/event/EventHandler.as
Expand Up @@ -17,13 +17,16 @@
package org.swizframework.utils.event
{
import flash.events.Event;
import flash.system.ApplicationDomain;
import flash.utils.getQualifiedClassName;

import mx.rpc.AsyncToken;

import org.swizframework.metadata.EventHandlerMetadataTag;
import org.swizframework.reflection.MetadataHostMethod;
import org.swizframework.reflection.MethodParameter;
import org.swizframework.reflection.TypeCache;
import org.swizframework.reflection.TypeDescriptor;
import org.swizframework.utils.async.AsyncTokenOperation;
import org.swizframework.utils.async.IAsynchronousEvent;
import org.swizframework.utils.async.IAsynchronousOperation;
Expand Down Expand Up @@ -52,6 +55,11 @@ package org.swizframework.utils.event
*/
protected var _eventClass:Class;

/**
* Backing variable for <code>domain</code> property.
*/
protected var _domain:ApplicationDomain;

/**
* Strongly typed reference to metadataTag.host
*/
Expand Down Expand Up @@ -85,14 +93,22 @@ package org.swizframework.utils.event
return _eventClass;
}

/**
* The ApplicationDomain in which to operate.
*/
public function get domain():ApplicationDomain
{
return _domain;
}

// ========================================
// constructor
// ========================================

/**
* Constructor
*/
public function EventHandler( metadataTag:EventHandlerMetadataTag, method:Function, eventClass:Class )
public function EventHandler( metadataTag:EventHandlerMetadataTag, method:Function, eventClass:Class, domain:ApplicationDomain )
{
_metadataTag = metadataTag;
_method = method;
Expand Down Expand Up @@ -154,8 +170,14 @@ package org.swizframework.utils.event
{
hostMethod = MetadataHostMethod( metadataTag.host );

if( metadataTag.properties == null && hostMethod.requiredParameterCount > 0 && !( getParameterType( 0 ) == eventClass ) )
throw new Error( metadataTag.asTag + " is invalid. If you do not specify a properties attribute your method must accept no arguments or the event itself." );
if( metadataTag.properties == null && hostMethod.requiredParameterCount > 0 )
{
var eventClassDescriptor:TypeDescriptor = TypeCache.getTypeDescriptor( eventClass, domain );
var parameterTypeName:String = getQualifiedClassName( getParameterType( 0 ) );

if( eventClassDescriptor.satisfiesType( parameterTypeName ) == false )
throw new Error( metadataTag.asTag + " is invalid. If you do not specify a properties attribute your method must either accept no arguments or an object compatible with the type specified in the tag." );
}

if( metadataTag.properties != null && ( metadataTag.properties.length < hostMethod.requiredParameterCount || metadataTag.properties.length > hostMethod.parameterCount ) )
throw new Error( "The properties attribute of " + metadataTag.asTag + " is not compatible with the method signature of " + hostMethod.name + "()." );
Expand Down

0 comments on commit 4fd5265

Please sign in to comment.