KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > aspectwerkz > transform > inlining > compiler > CompilationInfo


1 /**************************************************************************************
2  * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved. *
3  * http://aspectwerkz.codehaus.org *
4  * ---------------------------------------------------------------------------------- *
5  * The software in this package is published under the terms of the LGPL license *
6  * a copy of which has been included with this distribution in the license.txt file. *
7  **************************************************************************************/

8 package org.codehaus.aspectwerkz.transform.inlining.compiler;
9
10 import org.codehaus.aspectwerkz.joinpoint.management.AdviceInfoContainer;
11 import org.codehaus.aspectwerkz.util.Strings;
12 import org.codehaus.aspectwerkz.transform.TransformationConstants;
13 import org.codehaus.aspectwerkz.transform.inlining.EmittedJoinPoint;
14 import org.codehaus.aspectwerkz.reflect.ClassInfo;
15
16 /**
17  * Info needed for the compilation of the join point, holds both the initial model and the latest redefined model.
18  *
19  * @author <a HREF="mailto:jboner@codehaus.org">Jonas Bonér </a>
20  */

21 public final class CompilationInfo {
22     private final Model m_initialModel;
23     private Model m_redefinedModel;
24     private int m_redefinitionCounter = 0;
25
26     public CompilationInfo(final Model initialModel) {
27         m_initialModel = initialModel;
28     }
29
30     public Model getInitialModel() {
31         return m_initialModel;
32     }
33
34     public Model getRedefinedModel() {
35         return m_redefinedModel;
36     }
37
38     public void setRedefinedModel(final Model redefinedModel) {
39         m_redefinedModel = redefinedModel;
40     }
41
42     public int getRedefinitionCounter() {
43         return m_redefinitionCounter;
44     }
45
46     public void incrementRedefinitionCounter() {
47         m_redefinitionCounter += 1;
48     }
49
50     public boolean equals(Object JavaDoc o) {
51         if (this == o) {
52             return true;
53         }
54         if (!(o instanceof CompilationInfo)) {
55             return false;
56         }
57
58         final CompilationInfo compilationInfo = (CompilationInfo) o;
59
60         if (m_redefinitionCounter != compilationInfo.m_redefinitionCounter) {
61             return false;
62         }
63         if (m_initialModel != null ?
64             !m_initialModel.equals(compilationInfo.m_initialModel) :
65             compilationInfo.m_initialModel != null) {
66             return false;
67         }
68         if (m_redefinedModel != null ?
69             !m_redefinedModel.equals(compilationInfo.m_redefinedModel) :
70             compilationInfo.m_redefinedModel != null) {
71             return false;
72         }
73
74         return true;
75     }
76
77     public int hashCode() {
78         int result;
79         result = (m_initialModel != null ? m_initialModel.hashCode() : 0);
80         result = 29 * result + (m_redefinedModel != null ? m_redefinedModel.hashCode() : 0);
81         result = 29 * result + m_redefinitionCounter;
82         return result;
83     }
84
85     /**
86      * Represents the information needed to compile one joinpoint at a given time
87      *
88      * @author <a HREF="mailto:jboner@codehaus.org">Jonas Bonťr </a>
89      */

90     public final static class Model {
91         private final String JavaDoc m_joinPointClassName;
92         private final EmittedJoinPoint m_emittedJoinPoint;
93         private final AdviceInfoContainer m_adviceInfoContainer;
94         private final ClassInfo m_thisClassInfo;
95
96         public Model(final EmittedJoinPoint emittedJoinPoint,
97                      final AdviceInfoContainer adviceInfoContainer,
98                      final ClassInfo thisClassInfo) {
99             m_emittedJoinPoint = emittedJoinPoint;
100             m_adviceInfoContainer = adviceInfoContainer;
101             m_joinPointClassName = m_emittedJoinPoint.getJoinPointClassName();
102             m_thisClassInfo = thisClassInfo;
103         }
104
105         public Model(final EmittedJoinPoint emittedJoinPoint,
106                      final AdviceInfoContainer adviceInfoContainer,
107                      final int redefinitionCounter,
108                      final ClassInfo thisClassInfo) {
109             m_emittedJoinPoint = emittedJoinPoint;
110             m_adviceInfoContainer = adviceInfoContainer;
111             m_joinPointClassName = Strings.replaceSubString(
112                     m_emittedJoinPoint.getJoinPointClassName(),
113                     TransformationConstants.JOIN_POINT_CLASS_SUFFIX,
114                     new StringBuffer JavaDoc().append('_').append(redefinitionCounter).
115                     append(TransformationConstants.JOIN_POINT_CLASS_SUFFIX).toString()
116             );
117             m_thisClassInfo = thisClassInfo;
118         }
119
120         public String JavaDoc getJoinPointClassName() {
121             return m_joinPointClassName;
122         }
123
124         public EmittedJoinPoint getEmittedJoinPoint() {
125             return m_emittedJoinPoint;
126         }
127
128         public AdviceInfoContainer getAdviceInfoContainer() {
129             return m_adviceInfoContainer;
130         }
131
132         /**
133          * JoinPoint this class class info (caller)
134          * @return
135          */

136         public ClassInfo getThisClassInfo() {
137             return m_thisClassInfo;
138         }
139
140         public int hashCode() {
141             return m_emittedJoinPoint.hashCode();
142         }
143
144         public boolean equals(Object JavaDoc o) {
145             return ((Model) o).m_emittedJoinPoint == m_emittedJoinPoint;
146         }
147     }
148 }
Popular Tags