From 91d9045736aa5705ad0289c0209474bac205aab7 Mon Sep 17 00:00:00 2001 From: jhugunin Date: Wed, 8 Jan 2003 02:15:21 +0000 Subject: proper error checks for around advice return type compatibility with join points --- weaver/src/org/aspectj/weaver/Advice.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'weaver') diff --git a/weaver/src/org/aspectj/weaver/Advice.java b/weaver/src/org/aspectj/weaver/Advice.java index cb6a4d5bc..b0b1023bd 100644 --- a/weaver/src/org/aspectj/weaver/Advice.java +++ b/weaver/src/org/aspectj/weaver/Advice.java @@ -112,13 +112,21 @@ public abstract class Advice extends ShadowMunger { getSourceLocation(), shadow.getSourceLocation()); return false; } else { - if (!getSignature().getReturnType().isConvertableFrom(shadow.getReturnType(), world)) { + //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.getMessageHandler().handleMessage( - MessageUtil.error("incompatible return type applying to " + shadow, - getSourceLocation())); - //XXX need a crosscutting error message here + world.showMessage(IMessage.ERROR, + "incompatible return type applying to " + shadow, + getSourceLocation(), shadow.getSourceLocation()); return false; } } -- cgit v1.2.3