/* abc - The AspectBench Compiler * Copyright (C) 2010 Eric Bodden * * This compiler is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This compiler is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this compiler, in the file LESSER-GPL; * if not, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ import java.util.Collections; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; /* * Advice specs can now hold an additional advice name. */ aspect AdviceNames { interface NamedAdvice { Access getName(); } CJPBeforeSpec implements NamedAdvice; CJPAfterSpec implements NamedAdvice; CJPAfterReturningSpec implements NamedAdvice; CJPAfterThrowingSpec implements NamedAdvice; CJPAroundSpec implements NamedAdvice; syn lazy boolean AdviceSpec.hasGivenName() = false; eq NamedAdvice.hasGivenName() = true; //propagate upwards, from AdviceSpec to CJPAdviceDecl syn lazy boolean CJPAdviceDecl.hasGivenName() { boolean ret = getAdviceSpec().hasGivenName(); if(ret && abc.main.Debug.v().traceExecution) { getAdviceSpec().localLookupImplicitVariable("thisJoinPointStaticPart"); } return ret; } syn lazy Access CJPAdviceDecl.getName() { return ((NamedAdvice)getAdviceSpec()).getName(); } }