KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > compiler > crosscuts > ast > PlanData


1 /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This file is part of the compiler and core tools for the AspectJ(tm)
4  * programming language; see http://aspectj.org
5  *
6  * The contents of this file are subject to the Mozilla Public License
7  * Version 1.1 (the "License"); you may not use this file except in
8  * compliance with the License. You may obtain a copy of the License at
9  * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is AspectJ.
17  *
18  * The Initial Developer of the Original Code is Xerox Corporation. Portions
19  * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
20  * All Rights Reserved.
21  *
22  * Contributor(s):
23  */

24
25 package org.aspectj.compiler.crosscuts.ast;
26 import org.aspectj.compiler.base.ast.*;
27 import org.aspectj.compiler.base.*;
28 import org.aspectj.compiler.crosscuts.joinpoints.*;
29
30 import java.util.*;
31
32 public class PlanData {
33     public AspectDec inAspect;
34     private JpPlannerMaker jpPlannerMaker;
35     public Set bindingNames = new HashSet();
36     
37     public Type nameBindingType;
38
39     /**
40      * declare error: call(PlanData.new(..)) &&
41      * !(within(PlanData) || within(BuildAdvicePlannersPass)):
42      * "shouldn't be creating new PlanData here";
43      */

44     public PlanData(AspectDec inAspect, JpPlannerMaker jpPlannerMaker) {
45         this.jpPlannerMaker = jpPlannerMaker;
46         this.inAspect = inAspect;
47     }
48     
49     /**
50      * returns the ast object that is making this plan
51      */

52     public ASTObject getPlanMaker() {
53         if (jpPlannerMaker instanceof ASTObject) {
54             return (ASTObject)jpPlannerMaker;
55         } else {
56             return getAspectDec();
57         }
58     }
59
60     public AspectDec getAspectDec() {
61         return inAspect;
62     }
63     
64     public Type getNameBindingType() {
65         if (nameBindingType == null) {
66             if (inAspect == null) return null;
67             return inAspect.getType();
68         } else {
69             return nameBindingType;
70         }
71     }
72     
73     public PlanData makeInner(NamePcd bindingName) {
74         PlanData pd = new PlanData(this.inAspect, this.jpPlannerMaker);
75         pd.bindingNames.addAll(this.bindingNames);
76         pd.bindingNames.add(bindingName);
77         if (bindingName.getParentName() != null) {
78             pd.nameBindingType = bindingName.getParentName().getType();
79         } else {
80             pd.nameBindingType = this.nameBindingType;
81         }
82         return pd;
83     }
84     
85     public boolean isPlanning(NamePcd namePcd) {
86         return bindingNames.contains(namePcd);
87     }
88 }
89
Popular Tags