From 75852d7b1915cddfd4ba3dea272324617abdaa60 Mon Sep 17 00:00:00 2001 From: aclement Date: Mon, 26 Jul 2004 13:28:20 +0000 Subject: Fix for Bug 70619 compiler aborts with "conflicting dominates orders" with circular declare precedences --- weaver/src/org/aspectj/weaver/World.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'weaver/src') diff --git a/weaver/src/org/aspectj/weaver/World.java b/weaver/src/org/aspectj/weaver/World.java index 0d019fd1c..6da90ebca 100644 --- a/weaver/src/org/aspectj/weaver/World.java +++ b/weaver/src/org/aspectj/weaver/World.java @@ -300,13 +300,22 @@ public abstract class World { //??? number of dominates declares in the whole system. //??? This method can be called a large number of times. int order = 0; + DeclarePrecedence orderer = null; // Records the declare precedence statement that gives the first ordering for (Iterator i = crosscuttingMembersSet.getDeclareDominates().iterator(); i.hasNext(); ) { DeclarePrecedence d = (DeclarePrecedence)i.next(); int thisOrder = d.compare(aspect1, aspect2); //System.out.println("comparing: " + thisOrder + ": " + d); if (thisOrder != 0) { + if (orderer==null) orderer = d; if (order != 0 && order != thisOrder) { - throw new BCException("conflicting dominates orders"); + ISourceLocation[] isls = new ISourceLocation[2]; + isls[0]=orderer.getSourceLocation(); + isls[1]=d.getSourceLocation(); + Message m = + new Message("conflicting declare precedence orderings for aspects: "+ + aspect1.getName()+" and "+aspect2.getName(),null,true,isls); + messageHandler.handleMessage(m); + // throw new BCException("conflicting dominates orders"+d.getSourceLocation()); } else { order = thisOrder; } -- cgit v1.2.3