"around on pre-initialization not supported (compiler limitation)", getSourceLocation(), shadow.getSourceLocation());
WeaverMessages.format(WeaverMessages.AROUND_ON_PREINIT), getSourceLocation(), shadow.getSourceLocation());
	public boolean match(Shadow shadow, World world) {		if (super.match(shadow, world)) {			if (shadow.getKind() == Shadow.ExceptionHandler) {				if (kind.isAfter() || kind == AdviceKind.Around) {					world.showMessage(IMessage.WARNING,	    				"Only before advice is supported on handler join points (compiler limitation)", 	    				getSourceLocation(), shadow.getSourceLocation());					return false;				}			}						    		if (hasExtraParameter() && kind == AdviceKind.AfterReturning) {    			return getExtraParameterType().isConvertableFrom(shadow.getReturnType(), world);    		} else if (kind == AdviceKind.PerTargetEntry) {    			return shadow.hasTarget();    		} else if (kind == AdviceKind.PerThisEntry) {    			return shadow.hasThis();    		} else if (kind == AdviceKind.Around) {    			if (shadow.getKind() == Shadow.PreInitialization) {	    			world.showMessage(IMessage.ERROR,	    				"around on pre-initialization not supported (compiler limitation)", 	    				getSourceLocation(), shadow.getSourceLocation());					return false;				} else if (shadow.getKind() == Shadow.Initialization) {					world.showMessage(IMessage.ERROR,						"around on initialization not supported (compiler limitation)", 						getSourceLocation(), shadow.getSourceLocation());					return false;				} else if (shadow.getKind() == Shadow.StaticInitialization && 							shadow.getEnclosingType().isInterface(world))				{					world.showMessage(IMessage.ERROR,						"around on staticinitialization of interface \'" + 						shadow.getEnclosingType().getName() +						"\' not supported (compiler limitation)", 						getSourceLocation(), shadow.getSourceLocation());					return false;    			} else {    				//System.err.println(getSignature().getReturnType() + " from " + shadow.getReturnType());    				if (getSignature().getReturnType() == ResolvedTypeX.VOID) {    					if (shadow.getReturnType() != ResolvedTypeX.VOID) {    						world.showMessage(IMessage.ERROR,     							"applying to join point that doesn't return void: " + shadow,    							getSourceLocation(), shadow.getSourceLocation());    						return false;    					}    				} else if (getSignature().getReturnType().equals(TypeX.OBJECT)) {    					return true;    				} else if(!shadow.getReturnType().isAssignableFrom(getSignature().getReturnType(), world)) {    					//System.err.println(this + ", " + sourceContext + ", " + start);						world.showMessage(IMessage.ERROR, 								"incompatible return type applying to " + shadow,								getSourceLocation(), shadow.getSourceLocation());	    				return false;    				}    			}    		}    		return true;     	} else {    		return false;    	}	}