<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> * specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.felix.ipojo.manipulation;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Map;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.TreeMap;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.objectweb.asm.AnnotationVisitor;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.objectweb.asm.ClassVisitor;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.objectweb.asm.FieldVisitor;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.objectweb.asm.Label;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.objectweb.asm.MethodVisitor;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.objectweb.asm.Opcodes;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.objectweb.asm.Type;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.objectweb.asm.commons.EmptyVisitor;<a name="line.33"></a>
<span class="sourceLineNo">034</span><a name="line.34"></a>
<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
<span class="sourceLineNo">036</span> * Checks that a POJO is already manipulated or not.<a name="line.36"></a>
<span class="sourceLineNo">037</span> * Moreover it allows to get manipulation data about this class.<a name="line.37"></a>
<span class="sourceLineNo">038</span> * @author &lt;a href="mailto:dev@felix.apache.org"&gt;Felix Project Team&lt;/a&gt;<a name="line.38"></a>
<span class="sourceLineNo">039</span> */<a name="line.39"></a>
<span class="sourceLineNo">040</span>public class ClassChecker extends EmptyVisitor implements ClassVisitor, Opcodes {<a name="line.40"></a>
<span class="sourceLineNo">041</span><a name="line.41"></a>
<span class="sourceLineNo">042</span>    /**<a name="line.42"></a>
<span class="sourceLineNo">043</span>     * True if the class is already manipulated.<a name="line.43"></a>
<span class="sourceLineNo">044</span>     */<a name="line.44"></a>
<span class="sourceLineNo">045</span>    private boolean m_isAlreadyManipulated = false;<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
<span class="sourceLineNo">047</span>    /**<a name="line.47"></a>
<span class="sourceLineNo">048</span>     * Interfaces implemented by the component.<a name="line.48"></a>
<span class="sourceLineNo">049</span>     */<a name="line.49"></a>
<span class="sourceLineNo">050</span>    private List&lt;String&gt; m_itfs = new ArrayList&lt;String&gt;();<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>    /**<a name="line.52"></a>
<span class="sourceLineNo">053</span>     * Field map [field name, type] discovered in the component class.<a name="line.53"></a>
<span class="sourceLineNo">054</span>     */<a name="line.54"></a>
<span class="sourceLineNo">055</span>    private Map&lt;String, String&gt; m_fields = new TreeMap&lt;String, String&gt;();<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>    /**<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * Method List of method descriptor discovered in the component class.<a name="line.58"></a>
<span class="sourceLineNo">059</span>     */<a name="line.59"></a>
<span class="sourceLineNo">060</span>    private List&lt;MethodDescriptor&gt; m_methods = new ArrayList&lt;MethodDescriptor&gt;();<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
<span class="sourceLineNo">063</span>     * Super class if not java.lang.Object.<a name="line.63"></a>
<span class="sourceLineNo">064</span>     */<a name="line.64"></a>
<span class="sourceLineNo">065</span>    private String m_superClass;<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span>    /**<a name="line.67"></a>
<span class="sourceLineNo">068</span>     * Class name.<a name="line.68"></a>
<span class="sourceLineNo">069</span>     */<a name="line.69"></a>
<span class="sourceLineNo">070</span>    private String m_className;<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>    /**<a name="line.72"></a>
<span class="sourceLineNo">073</span>     * List of visited inner class owned by the implementation class.<a name="line.73"></a>
<span class="sourceLineNo">074</span>     */<a name="line.74"></a>
<span class="sourceLineNo">075</span>    private List&lt;String&gt; m_inners = new ArrayList&lt;String&gt;();<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>    /**<a name="line.77"></a>
<span class="sourceLineNo">078</span>     * &lt;code&gt;true&lt;/code&gt; if the class supports annotations.<a name="line.78"></a>
<span class="sourceLineNo">079</span>     * This enables the analysis of the code to find and moves annotations.<a name="line.79"></a>
<span class="sourceLineNo">080</span>     */<a name="line.80"></a>
<span class="sourceLineNo">081</span>    private boolean m_supportAnnotation = false;<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>    /**<a name="line.83"></a>
<span class="sourceLineNo">084</span>     * Class Version.<a name="line.84"></a>
<span class="sourceLineNo">085</span>     * Used to determine the frame format.<a name="line.85"></a>
<span class="sourceLineNo">086</span>     */<a name="line.86"></a>
<span class="sourceLineNo">087</span>    private int m_classVersion;<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>    /**<a name="line.89"></a>
<span class="sourceLineNo">090</span>     * Check if the _cm field already exists.<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * Update the field list.<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * @param access : access of the field<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * @param name : name of the field<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * @param desc : description of the field<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * @param signature : signature of the field<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * @param value : value of the field (for static field only)<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * @return the field visitor<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * @see org.objectweb.asm.ClassVisitor#visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)<a name="line.98"></a>
<span class="sourceLineNo">099</span>     */<a name="line.99"></a>
<span class="sourceLineNo">100</span>    public FieldVisitor visitField(int access, String name, String desc,<a name="line.100"></a>
<span class="sourceLineNo">101</span>            String signature, Object value) {<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span>        if (access == ACC_PRIVATE &amp;&amp; name.equals(MethodCreator.IM_FIELD)<a name="line.103"></a>
<span class="sourceLineNo">104</span>                &amp;&amp; desc.equals("Lorg/apache/felix/ipojo/InstanceManager;")) {<a name="line.104"></a>
<span class="sourceLineNo">105</span>            m_isAlreadyManipulated = true;<a name="line.105"></a>
<span class="sourceLineNo">106</span>        } else if (name.startsWith("class$")) { // Does not add class$* field generated by 'x.class'<a name="line.106"></a>
<span class="sourceLineNo">107</span>            return null;<a name="line.107"></a>
<span class="sourceLineNo">108</span>        } else if ((access &amp; ACC_STATIC) == ACC_STATIC) {<a name="line.108"></a>
<span class="sourceLineNo">109</span>            return null;<a name="line.109"></a>
<span class="sourceLineNo">110</span>        }<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span>        if (isManipulatedField(name)) {<a name="line.112"></a>
<span class="sourceLineNo">113</span>            return null;<a name="line.113"></a>
<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span>        Type type = Type.getType(desc);<a name="line.116"></a>
<span class="sourceLineNo">117</span>        if (type.getSort() == Type.ARRAY) {<a name="line.117"></a>
<span class="sourceLineNo">118</span>            if (type.getInternalName().startsWith("L")) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>                String internalType = type.getInternalName().substring(1);<a name="line.119"></a>
<span class="sourceLineNo">120</span>                String nameType = internalType.replace('/', '.');<a name="line.120"></a>
<span class="sourceLineNo">121</span>                m_fields.put(name, nameType + "[]");<a name="line.121"></a>
<span class="sourceLineNo">122</span>            } else {<a name="line.122"></a>
<span class="sourceLineNo">123</span>                String nameType = type.getClassName().substring(0,<a name="line.123"></a>
<span class="sourceLineNo">124</span>                        type.getClassName().length() - 2);<a name="line.124"></a>
<span class="sourceLineNo">125</span>                m_fields.put(name, nameType + "[]");<a name="line.125"></a>
<span class="sourceLineNo">126</span>            }<a name="line.126"></a>
<span class="sourceLineNo">127</span>        } else {<a name="line.127"></a>
<span class="sourceLineNo">128</span>            m_fields.put(name, type.getClassName());<a name="line.128"></a>
<span class="sourceLineNo">129</span>        }<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>        return null;<a name="line.131"></a>
<span class="sourceLineNo">132</span>    }<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>    private boolean isManipulatedField(String name) {<a name="line.134"></a>
<span class="sourceLineNo">135</span>        return ((MethodCreator.IM_FIELD.equals(name))<a name="line.135"></a>
<span class="sourceLineNo">136</span>                || (name.startsWith(MethodCreator.FIELD_FLAG_PREFIX))<a name="line.136"></a>
<span class="sourceLineNo">137</span>                || (name.startsWith(MethodCreator.METHOD_FLAG_PREFIX)));<a name="line.137"></a>
<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span>    /**<a name="line.140"></a>
<span class="sourceLineNo">141</span>     * Add the inner class to the list of inner class to manipulate.<a name="line.141"></a>
<span class="sourceLineNo">142</span>     * The method checks that the inner class is really owned by the implementation class.<a name="line.142"></a>
<span class="sourceLineNo">143</span>     * @param name inner class qualified name<a name="line.143"></a>
<span class="sourceLineNo">144</span>     * @param outerName outer class name (may be null for anonymous class)<a name="line.144"></a>
<span class="sourceLineNo">145</span>     * @param innerName inner class simple (i.e. short) name<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * @param access inner class visibility<a name="line.146"></a>
<span class="sourceLineNo">147</span>     * @see org.objectweb.asm.commons.EmptyVisitor#visitInnerClass(java.lang.String, java.lang.String, java.lang.String, int)<a name="line.147"></a>
<span class="sourceLineNo">148</span>     */<a name="line.148"></a>
<span class="sourceLineNo">149</span>    public void visitInnerClass(String name, String outerName, String innerName, int access) {<a name="line.149"></a>
<span class="sourceLineNo">150</span>        if (m_className.equals(outerName)  || outerName == null) { // Anonymous classes does not have an outer class.<a name="line.150"></a>
<span class="sourceLineNo">151</span>            m_inners.add(name);<a name="line.151"></a>
<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span><a name="line.155"></a>
<span class="sourceLineNo">156</span>    /**<a name="line.156"></a>
<span class="sourceLineNo">157</span>     * Check if the class was already manipulated.<a name="line.157"></a>
<span class="sourceLineNo">158</span>     * @return true if the class is already manipulated.<a name="line.158"></a>
<span class="sourceLineNo">159</span>     */<a name="line.159"></a>
<span class="sourceLineNo">160</span>    public boolean isalreadyManipulated() {<a name="line.160"></a>
<span class="sourceLineNo">161</span>        return m_isAlreadyManipulated;<a name="line.161"></a>
<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>    /**<a name="line.164"></a>
<span class="sourceLineNo">165</span>     * Gets the extracted class version<a name="line.165"></a>
<span class="sourceLineNo">166</span>     * @return the class version.<a name="line.166"></a>
<span class="sourceLineNo">167</span>     */<a name="line.167"></a>
<span class="sourceLineNo">168</span>    public int getClassVersion() {<a name="line.168"></a>
<span class="sourceLineNo">169</span>        return m_classVersion;<a name="line.169"></a>
<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
<span class="sourceLineNo">171</span><a name="line.171"></a>
<span class="sourceLineNo">172</span>    /**<a name="line.172"></a>
<span class="sourceLineNo">173</span>     * Visit the class.<a name="line.173"></a>
<span class="sourceLineNo">174</span>     * Update the implemented interface list.<a name="line.174"></a>
<span class="sourceLineNo">175</span>     * @param version : version of the class<a name="line.175"></a>
<span class="sourceLineNo">176</span>     * @param access : access of the class<a name="line.176"></a>
<span class="sourceLineNo">177</span>     * @param name : name of the class<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * @param signature : signature of the class<a name="line.178"></a>
<span class="sourceLineNo">179</span>     * @param superName : super class of the class<a name="line.179"></a>
<span class="sourceLineNo">180</span>     * @param interfaces : implemented interfaces.<a name="line.180"></a>
<span class="sourceLineNo">181</span>     * @see org.objectweb.asm.ClassVisitor#visit(int, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])<a name="line.181"></a>
<span class="sourceLineNo">182</span>     */<a name="line.182"></a>
<span class="sourceLineNo">183</span>    public void visit(int version, int access, String name, String signature,<a name="line.183"></a>
<span class="sourceLineNo">184</span>            String superName, String[] interfaces) {<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>        m_classVersion = version;<a name="line.186"></a>
<span class="sourceLineNo">187</span>        m_supportAnnotation = version &gt; V1_4 &amp;&amp; version &lt; V1_1;<a name="line.187"></a>
<span class="sourceLineNo">188</span><a name="line.188"></a>
<span class="sourceLineNo">189</span>        if (! superName.equals("java/lang/Object")) {<a name="line.189"></a>
<span class="sourceLineNo">190</span>            m_superClass = superName.replace('/', '.');<a name="line.190"></a>
<span class="sourceLineNo">191</span>        }<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>        for (int i = 0; i &lt; interfaces.length; i++) {<a name="line.193"></a>
<span class="sourceLineNo">194</span>            if (! interfaces[i].equals("org/apache/felix/ipojo/Pojo")) {<a name="line.194"></a>
<span class="sourceLineNo">195</span>                m_itfs.add(interfaces[i].replace('/', '.'));<a name="line.195"></a>
<span class="sourceLineNo">196</span>            }<a name="line.196"></a>
<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>        m_className = name;<a name="line.199"></a>
<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
<span class="sourceLineNo">201</span><a name="line.201"></a>
<span class="sourceLineNo">202</span>    /**<a name="line.202"></a>
<span class="sourceLineNo">203</span>     * Visit a method.<a name="line.203"></a>
<span class="sourceLineNo">204</span>     * Update the method list (except if it init or clinit.<a name="line.204"></a>
<span class="sourceLineNo">205</span>     * @param  access - the method's access flags (see Opcodes). This parameter also indicates if the method is synthetic and/or deprecated.<a name="line.205"></a>
<span class="sourceLineNo">206</span>     * @param name - the method's name.<a name="line.206"></a>
<span class="sourceLineNo">207</span>     * @param desc - the method's descriptor (see Type).<a name="line.207"></a>
<span class="sourceLineNo">208</span>     * @param signature - the method's signature. May be null if the method parameters, return type and exceptions do not use generic types.<a name="line.208"></a>
<span class="sourceLineNo">209</span>     * @param exceptions - the internal names of the method's exception classes (see getInternalName). May be null.<a name="line.209"></a>
<span class="sourceLineNo">210</span>     * @return nothing.<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * @see org.objectweb.asm.ClassVisitor#visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])<a name="line.211"></a>
<span class="sourceLineNo">212</span>     */<a name="line.212"></a>
<span class="sourceLineNo">213</span>    public MethodVisitor visitMethod(int access, String name, String desc,<a name="line.213"></a>
<span class="sourceLineNo">214</span>            String signature, String[] exceptions) {<a name="line.214"></a>
<span class="sourceLineNo">215</span>        if (!name.equals("&lt;clinit&gt;")) {<a name="line.215"></a>
<span class="sourceLineNo">216</span><a name="line.216"></a>
<span class="sourceLineNo">217</span>            if (name.equals("&lt;init&gt;")) {<a name="line.217"></a>
<span class="sourceLineNo">218</span>                if (!isGeneratedConstructor(name, desc)) {<a name="line.218"></a>
<span class="sourceLineNo">219</span>                    final MethodDescriptor md = new MethodDescriptor("$init", desc, (access &amp; ACC_STATIC) == ACC_STATIC);<a name="line.219"></a>
<span class="sourceLineNo">220</span>                    m_methods.add(md);<a name="line.220"></a>
<span class="sourceLineNo">221</span>                    return new MethodInfoCollector(md);<a name="line.221"></a>
<span class="sourceLineNo">222</span>                }<a name="line.222"></a>
<span class="sourceLineNo">223</span>            } else {<a name="line.223"></a>
<span class="sourceLineNo">224</span>                // no constructors.<a name="line.224"></a>
<span class="sourceLineNo">225</span>                if (!isGeneratedMethod(name, desc)) {<a name="line.225"></a>
<span class="sourceLineNo">226</span>                    final MethodDescriptor md = new MethodDescriptor(name, desc, (access &amp; ACC_STATIC) == ACC_STATIC);<a name="line.226"></a>
<span class="sourceLineNo">227</span>                    m_methods.add(md);<a name="line.227"></a>
<span class="sourceLineNo">228</span>                    return new MethodInfoCollector(md);<a name="line.228"></a>
<span class="sourceLineNo">229</span>                }<a name="line.229"></a>
<span class="sourceLineNo">230</span>            }<a name="line.230"></a>
<span class="sourceLineNo">231</span><a name="line.231"></a>
<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
<span class="sourceLineNo">233</span><a name="line.233"></a>
<span class="sourceLineNo">234</span>        return null;<a name="line.234"></a>
<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
<span class="sourceLineNo">236</span><a name="line.236"></a>
<span class="sourceLineNo">237</span>    private boolean isGeneratedConstructor(String name, String desc) {<a name="line.237"></a>
<span class="sourceLineNo">238</span>        return ("&lt;init&gt;".equals(name) &amp;&amp; isFirstArgumentInstanceManager(desc));<a name="line.238"></a>
<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
<span class="sourceLineNo">240</span><a name="line.240"></a>
<span class="sourceLineNo">241</span>    private boolean isFirstArgumentInstanceManager(String desc) {<a name="line.241"></a>
<span class="sourceLineNo">242</span>        Type[] types = Type.getArgumentTypes(desc);<a name="line.242"></a>
<span class="sourceLineNo">243</span>        if (types != null &amp;&amp; (types.length &gt;= 1)) {<a name="line.243"></a>
<span class="sourceLineNo">244</span>            return Type.getType("Lorg/apache/felix/ipojo/InstanceManager;")<a name="line.244"></a>
<span class="sourceLineNo">245</span>                            .equals(types[0]);<a name="line.245"></a>
<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
<span class="sourceLineNo">247</span>        return false;<a name="line.247"></a>
<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>    private boolean isGeneratedMethod(String name, String desc) {<a name="line.250"></a>
<span class="sourceLineNo">251</span>        return isGetterMethod(name, desc)<a name="line.251"></a>
<span class="sourceLineNo">252</span>                || isSetterMethod(name, desc)<a name="line.252"></a>
<span class="sourceLineNo">253</span>                || isSetInstanceManagerMethod(name)<a name="line.253"></a>
<span class="sourceLineNo">254</span>                || isGetComponentInstanceMethod(name, desc)<a name="line.254"></a>
<span class="sourceLineNo">255</span>                || isManipulatedMethod(name);<a name="line.255"></a>
<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
<span class="sourceLineNo">257</span><a name="line.257"></a>
<span class="sourceLineNo">258</span>    private boolean isGetterMethod(String name, String desc) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>        // TYPE __getXXX()<a name="line.259"></a>
<span class="sourceLineNo">260</span>        Type[] arguments = Type.getArgumentTypes(desc);<a name="line.260"></a>
<span class="sourceLineNo">261</span>        return (name.startsWith("__get")<a name="line.261"></a>
<span class="sourceLineNo">262</span>                &amp;&amp; (arguments.length == 0)<a name="line.262"></a>
<span class="sourceLineNo">263</span>                &amp;&amp; !Type.VOID_TYPE.equals(Type.getReturnType(desc)));<a name="line.263"></a>
<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
<span class="sourceLineNo">265</span><a name="line.265"></a>
<span class="sourceLineNo">266</span>    private boolean isSetterMethod(String name, String desc) {<a name="line.266"></a>
<span class="sourceLineNo">267</span>        // void __setXXX(TYPE)<a name="line.267"></a>
<span class="sourceLineNo">268</span>        Type[] arguments = Type.getArgumentTypes(desc);<a name="line.268"></a>
<span class="sourceLineNo">269</span>        return (name.startsWith("__set")<a name="line.269"></a>
<span class="sourceLineNo">270</span>                &amp;&amp; (arguments.length == 1)<a name="line.270"></a>
<span class="sourceLineNo">271</span>                &amp;&amp; Type.VOID_TYPE.equals(Type.getReturnType(desc)));<a name="line.271"></a>
<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>    private boolean isSetInstanceManagerMethod(String name) {<a name="line.274"></a>
<span class="sourceLineNo">275</span>        return name.startsWith("_setInstanceManager");<a name="line.275"></a>
<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>    private boolean isGetComponentInstanceMethod(String name, String desc) {<a name="line.278"></a>
<span class="sourceLineNo">279</span>        return (name.startsWith("getComponentInstance")<a name="line.279"></a>
<span class="sourceLineNo">280</span>                &amp;&amp; Type.getType("Lorg/apache/felix/ipojo/ComponentInstance;").equals(Type.getReturnType(desc)));<a name="line.280"></a>
<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
<span class="sourceLineNo">282</span><a name="line.282"></a>
<span class="sourceLineNo">283</span>    private boolean isManipulatedMethod(String name) {<a name="line.283"></a>
<span class="sourceLineNo">284</span>        return (name.startsWith(MethodCreator.PREFIX));<a name="line.284"></a>
<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
<span class="sourceLineNo">286</span><a name="line.286"></a>
<span class="sourceLineNo">287</span>    /**<a name="line.287"></a>
<span class="sourceLineNo">288</span>     * Get collected interfaces.<a name="line.288"></a>
<span class="sourceLineNo">289</span>     * @return the interfaces implemented by the component class.<a name="line.289"></a>
<span class="sourceLineNo">290</span>     */<a name="line.290"></a>
<span class="sourceLineNo">291</span>    public List&lt;String&gt; getInterfaces() {<a name="line.291"></a>
<span class="sourceLineNo">292</span>        return m_itfs;<a name="line.292"></a>
<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
<span class="sourceLineNo">296</span>     * Get collected fields.<a name="line.296"></a>
<span class="sourceLineNo">297</span>     * @return the field map [field_name, type].<a name="line.297"></a>
<span class="sourceLineNo">298</span>     */<a name="line.298"></a>
<span class="sourceLineNo">299</span>    public Map&lt;String, String&gt; getFields() {<a name="line.299"></a>
<span class="sourceLineNo">300</span>        return m_fields;<a name="line.300"></a>
<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>    /**<a name="line.303"></a>
<span class="sourceLineNo">304</span>     * Get collected methods.<a name="line.304"></a>
<span class="sourceLineNo">305</span>     * @return the method list of [method, signature].<a name="line.305"></a>
<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
<span class="sourceLineNo">307</span>    public List&lt;MethodDescriptor&gt; getMethods() {<a name="line.307"></a>
<span class="sourceLineNo">308</span>        return m_methods;<a name="line.308"></a>
<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
<span class="sourceLineNo">311</span>    public String getSuperClass() {<a name="line.311"></a>
<span class="sourceLineNo">312</span>        return m_superClass;<a name="line.312"></a>
<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>    public List&lt;String&gt; getInnerClasses() {<a name="line.315"></a>
<span class="sourceLineNo">316</span>        return m_inners;<a name="line.316"></a>
<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>    /**<a name="line.319"></a>
<span class="sourceLineNo">320</span>     * This class collects annotations in a method.<a name="line.320"></a>
<span class="sourceLineNo">321</span>     * This class creates an {@link AnnotationDescriptor}<a name="line.321"></a>
<span class="sourceLineNo">322</span>     * if an annotation is found during the visit.<a name="line.322"></a>
<span class="sourceLineNo">323</span>     * It also collects local variables definition.<a name="line.323"></a>
<span class="sourceLineNo">324</span>     *  @author &lt;a href="mailto:dev@felix.apache.org"&gt;Felix Project Team&lt;/a&gt;<a name="line.324"></a>
<span class="sourceLineNo">325</span>     */<a name="line.325"></a>
<span class="sourceLineNo">326</span>    private final class MethodInfoCollector extends EmptyVisitor {<a name="line.326"></a>
<span class="sourceLineNo">327</span>        /**<a name="line.327"></a>
<span class="sourceLineNo">328</span>         * The method descriptor of the visited method.<a name="line.328"></a>
<span class="sourceLineNo">329</span>         */<a name="line.329"></a>
<span class="sourceLineNo">330</span>        private MethodDescriptor m_method;<a name="line.330"></a>
<span class="sourceLineNo">331</span><a name="line.331"></a>
<span class="sourceLineNo">332</span>        /**<a name="line.332"></a>
<span class="sourceLineNo">333</span>         * Creates an annotation collector.<a name="line.333"></a>
<span class="sourceLineNo">334</span>         * @param md the method descriptor of the visited method.<a name="line.334"></a>
<span class="sourceLineNo">335</span>         */<a name="line.335"></a>
<span class="sourceLineNo">336</span>        private MethodInfoCollector(MethodDescriptor md) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>            m_method = md;<a name="line.337"></a>
<span class="sourceLineNo">338</span>        }<a name="line.338"></a>
<span class="sourceLineNo">339</span><a name="line.339"></a>
<span class="sourceLineNo">340</span>        /**<a name="line.340"></a>
<span class="sourceLineNo">341</span>         * Visits an annotation.<a name="line.341"></a>
<span class="sourceLineNo">342</span>         * This class checks the visibility. If the annotation is visible,<a name="line.342"></a>
<span class="sourceLineNo">343</span>         * creates the {@link AnnotationDescriptor} corresponding to this annotation<a name="line.343"></a>
<span class="sourceLineNo">344</span>         * to visit this annotation. This {@link AnnotationDescriptor} is added to<a name="line.344"></a>
<span class="sourceLineNo">345</span>         * the {@link MethodDescriptor} of the visited method.<a name="line.345"></a>
<span class="sourceLineNo">346</span>         * @param name the name of the annotation<a name="line.346"></a>
<span class="sourceLineNo">347</span>         * @param visible is the annotation visible at runtime<a name="line.347"></a>
<span class="sourceLineNo">348</span>         * @return the {@link AnnotationDescriptor} to visit this annotation or<a name="line.348"></a>
<span class="sourceLineNo">349</span>         * &lt;code&gt;null&lt;/code&gt; if the annotation is not visible.<a name="line.349"></a>
<span class="sourceLineNo">350</span>         * @see org.objectweb.asm.commons.EmptyVisitor#visitAnnotation(java.lang.String, boolean)<a name="line.350"></a>
<span class="sourceLineNo">351</span>         */<a name="line.351"></a>
<span class="sourceLineNo">352</span>        public AnnotationVisitor visitAnnotation(String name, boolean visible) {<a name="line.352"></a>
<span class="sourceLineNo">353</span>            if (visible) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>                AnnotationDescriptor ann = new AnnotationDescriptor(name, visible);<a name="line.354"></a>
<span class="sourceLineNo">355</span>                m_method.addAnnotation(ann);<a name="line.355"></a>
<span class="sourceLineNo">356</span>                return ann;<a name="line.356"></a>
<span class="sourceLineNo">357</span>            }<a name="line.357"></a>
<span class="sourceLineNo">358</span>            return null;<a name="line.358"></a>
<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
<span class="sourceLineNo">360</span>        <a name="line.360"></a>
<span class="sourceLineNo">361</span>        public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {<a name="line.361"></a>
<span class="sourceLineNo">362</span>            m_method.addLocalVariable(name, desc, signature, index);<a name="line.362"></a>
<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
<span class="sourceLineNo">364</span>        <a name="line.364"></a>
<span class="sourceLineNo">365</span>        public void visitEnd() {<a name="line.365"></a>
<span class="sourceLineNo">366</span>            m_method.end();<a name="line.366"></a>
<span class="sourceLineNo">367</span>        }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
<span class="sourceLineNo">369</span>        public AnnotationVisitor visitParameterAnnotation(int id,<a name="line.369"></a>
<span class="sourceLineNo">370</span>                String name, boolean visible) {<a name="line.370"></a>
<span class="sourceLineNo">371</span>            if (visible) {<a name="line.371"></a>
<span class="sourceLineNo">372</span>                AnnotationDescriptor ann = new AnnotationDescriptor(name, visible);<a name="line.372"></a>
<span class="sourceLineNo">373</span>                m_method.addParameterAnnotation(id, ann);<a name="line.373"></a>
<span class="sourceLineNo">374</span>                return ann;<a name="line.374"></a>
<span class="sourceLineNo">375</span>            }<a name="line.375"></a>
<span class="sourceLineNo">376</span>            <a name="line.376"></a>
<span class="sourceLineNo">377</span>            /*<a name="line.377"></a>
<span class="sourceLineNo">378</span>             * It is harmless to keep injected parameter annotations on original constructor<a name="line.378"></a>
<span class="sourceLineNo">379</span>             * for correct property resolution in case of re-manipulation<a name="line.379"></a>
<span class="sourceLineNo">380</span>             */<a name="line.380"></a>
<span class="sourceLineNo">381</span>            if(m_method.getName().equals("$init"))<a name="line.381"></a>
<span class="sourceLineNo">382</span>            {<a name="line.382"></a>
<span class="sourceLineNo">383</span>                AnnotationDescriptor ann = new AnnotationDescriptor(name, visible);<a name="line.383"></a>
<span class="sourceLineNo">384</span>                m_method.addParameterAnnotation(id, ann);<a name="line.384"></a>
<span class="sourceLineNo">385</span>                return ann;<a name="line.385"></a>
<span class="sourceLineNo">386</span>            }<a name="line.386"></a>
<span class="sourceLineNo">387</span>            <a name="line.387"></a>
<span class="sourceLineNo">388</span>            return null;<a name="line.388"></a>
<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
<span class="sourceLineNo">390</span><a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
<span class="sourceLineNo">393</span><a name="line.393"></a>
<span class="sourceLineNo">394</span>    /**<a name="line.394"></a>
<span class="sourceLineNo">395</span>     * Describes a method or constructor annotation.<a name="line.395"></a>
<span class="sourceLineNo">396</span>     * This allows creating a copy of the annotations found in the original class<a name="line.396"></a>
<span class="sourceLineNo">397</span>     * to move them on inserted method. This class implements an<a name="line.397"></a>
<span class="sourceLineNo">398</span>     * {@link AnnotationVisitor} in order to create the copy.<a name="line.398"></a>
<span class="sourceLineNo">399</span>     * This class contains a &lt;code&gt;visit&lt;/code&gt; method re-injecting the<a name="line.399"></a>
<span class="sourceLineNo">400</span>     * annotation in the generated method.<a name="line.400"></a>
<span class="sourceLineNo">401</span>     * @author &lt;a href="mailto:dev@felix.apache.org"&gt;Felix Project Team&lt;/a&gt;<a name="line.401"></a>
<span class="sourceLineNo">402</span>     */<a name="line.402"></a>
<span class="sourceLineNo">403</span>    public class AnnotationDescriptor implements AnnotationVisitor {<a name="line.403"></a>
<span class="sourceLineNo">404</span>        /**<a name="line.404"></a>
<span class="sourceLineNo">405</span>         * The name of the annotation.<a name="line.405"></a>
<span class="sourceLineNo">406</span>         */<a name="line.406"></a>
<span class="sourceLineNo">407</span>        private String m_name;<a name="line.407"></a>
<span class="sourceLineNo">408</span>        /**<a name="line.408"></a>
<span class="sourceLineNo">409</span>         * Is the annotation visible at runtime?<a name="line.409"></a>
<span class="sourceLineNo">410</span>         */<a name="line.410"></a>
<span class="sourceLineNo">411</span>        private boolean m_visible;<a name="line.411"></a>
<span class="sourceLineNo">412</span>        /**<a name="line.412"></a>
<span class="sourceLineNo">413</span>         * The description of the annotation.<a name="line.413"></a>
<span class="sourceLineNo">414</span>         * This attribute is set only for nested annotations.<a name="line.414"></a>
<span class="sourceLineNo">415</span>         */<a name="line.415"></a>
<span class="sourceLineNo">416</span>        private String m_desc;<a name="line.416"></a>
<span class="sourceLineNo">417</span>        /**<a name="line.417"></a>
<span class="sourceLineNo">418</span>         * The list of 'simple' attributes.<a name="line.418"></a>
<span class="sourceLineNo">419</span>         */<a name="line.419"></a>
<span class="sourceLineNo">420</span>        private List&lt;SimpleAttribute&gt; m_simples = new ArrayList&lt;SimpleAttribute&gt;(0);<a name="line.420"></a>
<span class="sourceLineNo">421</span>        /**<a name="line.421"></a>
<span class="sourceLineNo">422</span>         * The list of attribute containing an<a name="line.422"></a>
<span class="sourceLineNo">423</span>         * enumeration value.<a name="line.423"></a>
<span class="sourceLineNo">424</span>         */<a name="line.424"></a>
<span class="sourceLineNo">425</span>        private List&lt;EnumAttribute&gt; m_enums = new ArrayList&lt;EnumAttribute&gt;(0);<a name="line.425"></a>
<span class="sourceLineNo">426</span>        /**<a name="line.426"></a>
<span class="sourceLineNo">427</span>         * The list of attribute which are<a name="line.427"></a>
<span class="sourceLineNo">428</span>         * annotations.<a name="line.428"></a>
<span class="sourceLineNo">429</span>         */<a name="line.429"></a>
<span class="sourceLineNo">430</span>        private List&lt;AnnotationDescriptor&gt; m_nested = new ArrayList&lt;AnnotationDescriptor&gt;(0);<a name="line.430"></a>
<span class="sourceLineNo">431</span>        /**<a name="line.431"></a>
<span class="sourceLineNo">432</span>         * The list of attribute which are<a name="line.432"></a>
<span class="sourceLineNo">433</span>         * arrays.<a name="line.433"></a>
<span class="sourceLineNo">434</span>         */<a name="line.434"></a>
<span class="sourceLineNo">435</span>        private List&lt;ArrayAttribute&gt; m_arrays = new ArrayList&lt;ArrayAttribute&gt;(0);<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
<span class="sourceLineNo">438</span>        /**<a name="line.438"></a>
<span class="sourceLineNo">439</span>         * Creates an annotation descriptor.<a name="line.439"></a>
<span class="sourceLineNo">440</span>         * This constructor is used for 'root' annotations.<a name="line.440"></a>
<span class="sourceLineNo">441</span>         * @param name the name of the  annotation<a name="line.441"></a>
<span class="sourceLineNo">442</span>         * @param visible the visibility of the annotation at runtime<a name="line.442"></a>
<span class="sourceLineNo">443</span>         */<a name="line.443"></a>
<span class="sourceLineNo">444</span>        public AnnotationDescriptor(String name, boolean visible) {<a name="line.444"></a>
<span class="sourceLineNo">445</span>            m_name = name;<a name="line.445"></a>
<span class="sourceLineNo">446</span>            m_visible = visible;<a name="line.446"></a>
<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
<span class="sourceLineNo">448</span><a name="line.448"></a>
<span class="sourceLineNo">449</span>        /**<a name="line.449"></a>
<span class="sourceLineNo">450</span>         * Creates an annotation descriptor.<a name="line.450"></a>
<span class="sourceLineNo">451</span>         * This constructor is used for nested annotations.<a name="line.451"></a>
<span class="sourceLineNo">452</span>         * @param name the name of the  annotation<a name="line.452"></a>
<span class="sourceLineNo">453</span>         * @param desc the descriptor of the annotation<a name="line.453"></a>
<span class="sourceLineNo">454</span>         */<a name="line.454"></a>
<span class="sourceLineNo">455</span>        public AnnotationDescriptor(String name, String desc) {<a name="line.455"></a>
<span class="sourceLineNo">456</span>            m_name = name;<a name="line.456"></a>
<span class="sourceLineNo">457</span>            m_visible = true;<a name="line.457"></a>
<span class="sourceLineNo">458</span>            m_desc = desc;<a name="line.458"></a>
<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
<span class="sourceLineNo">460</span><a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>        /**<a name="line.462"></a>
<span class="sourceLineNo">463</span>         * Visits a simple attribute.<a name="line.463"></a>
<span class="sourceLineNo">464</span>         * @param arg0 the attribute name<a name="line.464"></a>
<span class="sourceLineNo">465</span>         * @param arg1 the attribute value<a name="line.465"></a>
<span class="sourceLineNo">466</span>         * @see org.objectweb.asm.AnnotationVisitor#visit(java.lang.String, java.lang.Object)<a name="line.466"></a>
<span class="sourceLineNo">467</span>         */<a name="line.467"></a>
<span class="sourceLineNo">468</span>        public void visit(String arg0, Object arg1) {<a name="line.468"></a>
<span class="sourceLineNo">469</span>            m_simples.add(new SimpleAttribute(arg0, arg1));<a name="line.469"></a>
<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
<span class="sourceLineNo">471</span><a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>        /**<a name="line.473"></a>
<span class="sourceLineNo">474</span>         * Visits a nested annotation.<a name="line.474"></a>
<span class="sourceLineNo">475</span>         * @param arg0 the attribute name<a name="line.475"></a>
<span class="sourceLineNo">476</span>         * @param arg1 the annotation descriptor<a name="line.476"></a>
<span class="sourceLineNo">477</span>         * @return the annotation visitor parsing the nested annotation<a name="line.477"></a>
<span class="sourceLineNo">478</span>         * @see org.objectweb.asm.AnnotationVisitor#visitAnnotation(java.lang.String, java.lang.String)<a name="line.478"></a>
<span class="sourceLineNo">479</span>         */<a name="line.479"></a>
<span class="sourceLineNo">480</span>        public AnnotationVisitor visitAnnotation(String arg0, String arg1) {<a name="line.480"></a>
<span class="sourceLineNo">481</span>            AnnotationDescriptor ad = new AnnotationDescriptor(arg0, arg1);<a name="line.481"></a>
<span class="sourceLineNo">482</span>            m_nested.add(ad);<a name="line.482"></a>
<span class="sourceLineNo">483</span>            return ad;<a name="line.483"></a>
<span class="sourceLineNo">484</span>        }<a name="line.484"></a>
<span class="sourceLineNo">485</span><a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>        /**<a name="line.487"></a>
<span class="sourceLineNo">488</span>         * Visits an array attribute.<a name="line.488"></a>
<span class="sourceLineNo">489</span>         * @param arg0 the name of the attribute<a name="line.489"></a>
<span class="sourceLineNo">490</span>         * @return the annotation visitor parsing the content of the array,<a name="line.490"></a>
<span class="sourceLineNo">491</span>         * uses a specific {@link ArrayAttribute} to parse this array<a name="line.491"></a>
<span class="sourceLineNo">492</span>         * @see org.objectweb.asm.AnnotationVisitor#visitArray(java.lang.String)<a name="line.492"></a>
<span class="sourceLineNo">493</span>         */<a name="line.493"></a>
<span class="sourceLineNo">494</span>        public AnnotationVisitor visitArray(String arg0) {<a name="line.494"></a>
<span class="sourceLineNo">495</span>            ArrayAttribute aa = new ArrayAttribute(arg0);<a name="line.495"></a>
<span class="sourceLineNo">496</span>            m_arrays.add(aa);<a name="line.496"></a>
<span class="sourceLineNo">497</span>            return aa;<a name="line.497"></a>
<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
<span class="sourceLineNo">499</span><a name="line.499"></a>
<span class="sourceLineNo">500</span><a name="line.500"></a>
<span class="sourceLineNo">501</span>        /**<a name="line.501"></a>
<span class="sourceLineNo">502</span>         * End of the visit.<a name="line.502"></a>
<span class="sourceLineNo">503</span>         * @see org.objectweb.asm.AnnotationVisitor#visitEnd()<a name="line.503"></a>
<span class="sourceLineNo">504</span>         */<a name="line.504"></a>
<span class="sourceLineNo">505</span>        public void visitEnd() { }<a name="line.505"></a>
<span class="sourceLineNo">506</span><a name="line.506"></a>
<span class="sourceLineNo">507</span><a name="line.507"></a>
<span class="sourceLineNo">508</span>        /**<a name="line.508"></a>
<span class="sourceLineNo">509</span>         * Visits an enumeration attribute.<a name="line.509"></a>
<span class="sourceLineNo">510</span>         * @param arg0 the attribute name<a name="line.510"></a>
<span class="sourceLineNo">511</span>         * @param arg1 the enumeration descriptor<a name="line.511"></a>
<span class="sourceLineNo">512</span>         * @param arg2 the attribute value<a name="line.512"></a>
<span class="sourceLineNo">513</span>         * @see org.objectweb.asm.AnnotationVisitor#visitEnum(java.lang.String, java.lang.String, java.lang.String)<a name="line.513"></a>
<span class="sourceLineNo">514</span>         */<a name="line.514"></a>
<span class="sourceLineNo">515</span>        public void visitEnum(String arg0, String arg1, String arg2) {<a name="line.515"></a>
<span class="sourceLineNo">516</span>            m_enums.add(new EnumAttribute(arg0, arg1, arg2));<a name="line.516"></a>
<span class="sourceLineNo">517</span>        }<a name="line.517"></a>
<span class="sourceLineNo">518</span><a name="line.518"></a>
<span class="sourceLineNo">519</span>        /**<a name="line.519"></a>
<span class="sourceLineNo">520</span>         * Methods allowing to recreate the visited (stored) annotation<a name="line.520"></a>
<span class="sourceLineNo">521</span>         * into the destination method.<a name="line.521"></a>
<span class="sourceLineNo">522</span>         * This method recreate the annotations itself and any other<a name="line.522"></a>
<span class="sourceLineNo">523</span>         * attributes.<a name="line.523"></a>
<span class="sourceLineNo">524</span>         * @param mv the method visitor visiting the destination method.<a name="line.524"></a>
<span class="sourceLineNo">525</span>         */<a name="line.525"></a>
<span class="sourceLineNo">526</span>        public void visitAnnotation(MethodVisitor mv) {<a name="line.526"></a>
<span class="sourceLineNo">527</span>            AnnotationVisitor av = mv.visitAnnotation(m_name, m_visible);<a name="line.527"></a>
<span class="sourceLineNo">528</span>            for (int i = 0; i &lt; m_simples.size(); i++) {<a name="line.528"></a>
<span class="sourceLineNo">529</span>                m_simples.get(i).visit(av);<a name="line.529"></a>
<span class="sourceLineNo">530</span>            }<a name="line.530"></a>
<span class="sourceLineNo">531</span>            for (int i = 0; i &lt; m_enums.size(); i++) {<a name="line.531"></a>
<span class="sourceLineNo">532</span>                m_enums.get(i).visit(av);<a name="line.532"></a>
<span class="sourceLineNo">533</span>            }<a name="line.533"></a>
<span class="sourceLineNo">534</span>            for (int i = 0; i &lt; m_nested.size(); i++) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>                m_nested.get(i).visit(av);<a name="line.535"></a>
<span class="sourceLineNo">536</span>            }<a name="line.536"></a>
<span class="sourceLineNo">537</span>            for (int i = 0; i &lt; m_arrays.size(); i++) {<a name="line.537"></a>
<span class="sourceLineNo">538</span>                m_arrays.get(i).visit(av);<a name="line.538"></a>
<span class="sourceLineNo">539</span>            }<a name="line.539"></a>
<span class="sourceLineNo">540</span>            av.visitEnd();<a name="line.540"></a>
<span class="sourceLineNo">541</span>        }<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>        /**<a name="line.543"></a>
<span class="sourceLineNo">544</span>         * Methods allowing to recreate the visited (stored) parameter annotations<a name="line.544"></a>
<span class="sourceLineNo">545</span>         * into the destination method.<a name="line.545"></a>
<span class="sourceLineNo">546</span>         * This method recreate the annotations itself and any other<a name="line.546"></a>
<span class="sourceLineNo">547</span>         * attributes.<a name="line.547"></a>
<span class="sourceLineNo">548</span>         * @param id the paramter id<a name="line.548"></a>
<span class="sourceLineNo">549</span>         * @param mv the method visitor visiting the destination method.<a name="line.549"></a>
<span class="sourceLineNo">550</span>         */<a name="line.550"></a>
<span class="sourceLineNo">551</span>        public void visitParameterAnnotation(int id, MethodVisitor mv) {<a name="line.551"></a>
<span class="sourceLineNo">552</span>            AnnotationVisitor av = mv.visitParameterAnnotation(id, m_name, m_visible);<a name="line.552"></a>
<span class="sourceLineNo">553</span>            for (int i = 0; i &lt; m_simples.size(); i++) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>                m_simples.get(i).visit(av);<a name="line.554"></a>
<span class="sourceLineNo">555</span>            }<a name="line.555"></a>
<span class="sourceLineNo">556</span>            for (int i = 0; i &lt; m_enums.size(); i++) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>                m_enums.get(i).visit(av);<a name="line.557"></a>
<span class="sourceLineNo">558</span>            }<a name="line.558"></a>
<span class="sourceLineNo">559</span>            for (int i = 0; i &lt; m_nested.size(); i++) {<a name="line.559"></a>
<span class="sourceLineNo">560</span>                m_nested.get(i).visit(av);<a name="line.560"></a>
<span class="sourceLineNo">561</span>            }<a name="line.561"></a>
<span class="sourceLineNo">562</span>            for (int i = 0; i &lt; m_arrays.size(); i++) {<a name="line.562"></a>
<span class="sourceLineNo">563</span>                m_arrays.get(i).visit(av);<a name="line.563"></a>
<span class="sourceLineNo">564</span>            }<a name="line.564"></a>
<span class="sourceLineNo">565</span>            av.visitEnd();<a name="line.565"></a>
<span class="sourceLineNo">566</span>        }<a name="line.566"></a>
<span class="sourceLineNo">567</span><a name="line.567"></a>
<span class="sourceLineNo">568</span>        /**<a name="line.568"></a>
<span class="sourceLineNo">569</span>         * Method allowing to recreate the visited (stored) annotation<a name="line.569"></a>
<span class="sourceLineNo">570</span>         * into the destination annotation. This method is used only<a name="line.570"></a>
<span class="sourceLineNo">571</span>         * for nested annotation.<a name="line.571"></a>
<span class="sourceLineNo">572</span>         * @param mv the annotation visitor to populate with the stored<a name="line.572"></a>
<span class="sourceLineNo">573</span>         * annotation<a name="line.573"></a>
<span class="sourceLineNo">574</span>         */<a name="line.574"></a>
<span class="sourceLineNo">575</span>        public void visit(AnnotationVisitor mv) {<a name="line.575"></a>
<span class="sourceLineNo">576</span>            AnnotationVisitor av = mv.visitAnnotation(m_name, m_desc);<a name="line.576"></a>
<span class="sourceLineNo">577</span>            for (int i = 0; i &lt; m_simples.size(); i++) {<a name="line.577"></a>
<span class="sourceLineNo">578</span>                m_simples.get(i).visit(av);<a name="line.578"></a>
<span class="sourceLineNo">579</span>            }<a name="line.579"></a>
<span class="sourceLineNo">580</span>            for (int i = 0; i &lt; m_enums.size(); i++) {<a name="line.580"></a>
<span class="sourceLineNo">581</span>                m_enums.get(i).visit(av);<a name="line.581"></a>
<span class="sourceLineNo">582</span>            }<a name="line.582"></a>
<span class="sourceLineNo">583</span>            for (int i = 0; i &lt; m_nested.size(); i++) {<a name="line.583"></a>
<span class="sourceLineNo">584</span>                m_nested.get(i).visit(av);<a name="line.584"></a>
<span class="sourceLineNo">585</span>            }<a name="line.585"></a>
<span class="sourceLineNo">586</span>            for (int i = 0; i &lt; m_arrays.size(); i++) {<a name="line.586"></a>
<span class="sourceLineNo">587</span>                m_arrays.get(i).visit(av);<a name="line.587"></a>
<span class="sourceLineNo">588</span>            }<a name="line.588"></a>
<span class="sourceLineNo">589</span>            av.visitEnd();<a name="line.589"></a>
<span class="sourceLineNo">590</span>        }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
<span class="sourceLineNo">592</span><a name="line.592"></a>
<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
<span class="sourceLineNo">594</span><a name="line.594"></a>
<span class="sourceLineNo">595</span>    /**<a name="line.595"></a>
<span class="sourceLineNo">596</span>     * Describes an array attribute.<a name="line.596"></a>
<span class="sourceLineNo">597</span>     * This class is able to visit an annotation array attribute, and to<a name="line.597"></a>
<span class="sourceLineNo">598</span>     * recreate this array on another annotation.<a name="line.598"></a>
<span class="sourceLineNo">599</span>     * @author &lt;a href="mailto:dev@felix.apache.org"&gt;Felix Project Team&lt;/a&gt;<a name="line.599"></a>
<span class="sourceLineNo">600</span>     */<a name="line.600"></a>
<span class="sourceLineNo">601</span>    public class ArrayAttribute implements AnnotationVisitor {<a name="line.601"></a>
<span class="sourceLineNo">602</span>        /**<a name="line.602"></a>
<span class="sourceLineNo">603</span>         * The name of the attribute.<a name="line.603"></a>
<span class="sourceLineNo">604</span>         */<a name="line.604"></a>
<span class="sourceLineNo">605</span>        private String m_name;<a name="line.605"></a>
<span class="sourceLineNo">606</span>        /**<a name="line.606"></a>
<span class="sourceLineNo">607</span>         * The content of the parsed array.<a name="line.607"></a>
<span class="sourceLineNo">608</span>         */<a name="line.608"></a>
<span class="sourceLineNo">609</span>        private List&lt;Object&gt; m_content = new ArrayList&lt;Object&gt;();<a name="line.609"></a>
<span class="sourceLineNo">610</span><a name="line.610"></a>
<span class="sourceLineNo">611</span>        /**<a name="line.611"></a>
<span class="sourceLineNo">612</span>         * Creates an array attribute.<a name="line.612"></a>
<span class="sourceLineNo">613</span>         * @param name the name of the attribute.<a name="line.613"></a>
<span class="sourceLineNo">614</span>         */<a name="line.614"></a>
<span class="sourceLineNo">615</span>        public ArrayAttribute(String name) {<a name="line.615"></a>
<span class="sourceLineNo">616</span>            m_name = name;<a name="line.616"></a>
<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
<span class="sourceLineNo">618</span><a name="line.618"></a>
<span class="sourceLineNo">619</span>        /**<a name="line.619"></a>
<span class="sourceLineNo">620</span>         * Visits the content of the array. This method is called for<a name="line.620"></a>
<span class="sourceLineNo">621</span>         * simple values.<a name="line.621"></a>
<span class="sourceLineNo">622</span>         * @param arg0 &lt;code&gt;null&lt;/code&gt;<a name="line.622"></a>
<span class="sourceLineNo">623</span>         * @param arg1 the value<a name="line.623"></a>
<span class="sourceLineNo">624</span>         * @see org.objectweb.asm.AnnotationVisitor#visit(java.lang.String, java.lang.Object)<a name="line.624"></a>
<span class="sourceLineNo">625</span>         */<a name="line.625"></a>
<span class="sourceLineNo">626</span>        public void visit(String arg0, Object arg1) {<a name="line.626"></a>
<span class="sourceLineNo">627</span>            m_content.add(arg1);<a name="line.627"></a>
<span class="sourceLineNo">628</span>        }<a name="line.628"></a>
<span class="sourceLineNo">629</span><a name="line.629"></a>
<span class="sourceLineNo">630</span>        /**<a name="line.630"></a>
<span class="sourceLineNo">631</span>         * Visits the content of the array. This method is called for<a name="line.631"></a>
<span class="sourceLineNo">632</span>         * nested annotations (annotations contained in the array).<a name="line.632"></a>
<span class="sourceLineNo">633</span>         * @param arg0 &lt;code&gt;null&lt;/code&gt;<a name="line.633"></a>
<span class="sourceLineNo">634</span>         * @param arg1 the annotation descriptor<a name="line.634"></a>
<span class="sourceLineNo">635</span>         * @return an {@link AnnotationDescriptor} which creates a copy of<a name="line.635"></a>
<span class="sourceLineNo">636</span>         * the contained annotation.<a name="line.636"></a>
<span class="sourceLineNo">637</span>         * @see org.objectweb.asm.AnnotationVisitor#visitAnnotation(String, String)<a name="line.637"></a>
<span class="sourceLineNo">638</span>         */<a name="line.638"></a>
<span class="sourceLineNo">639</span>        public AnnotationVisitor visitAnnotation(String arg0, String arg1) {<a name="line.639"></a>
<span class="sourceLineNo">640</span>            AnnotationDescriptor ad = new AnnotationDescriptor(null, arg1);<a name="line.640"></a>
<span class="sourceLineNo">641</span>            m_content.add(ad);<a name="line.641"></a>
<span class="sourceLineNo">642</span>            return ad;<a name="line.642"></a>
<span class="sourceLineNo">643</span>        }<a name="line.643"></a>
<span class="sourceLineNo">644</span><a name="line.644"></a>
<span class="sourceLineNo">645</span>        /**<a name="line.645"></a>
<span class="sourceLineNo">646</span>         * Visits the content of the array. This method is called for<a name="line.646"></a>
<span class="sourceLineNo">647</span>         * nested arrays (arrays contained in the array).<a name="line.647"></a>
<span class="sourceLineNo">648</span>         * @param arg0 &lt;code&gt;null&lt;/code&gt;<a name="line.648"></a>
<span class="sourceLineNo">649</span>         * @return an {@link AnnotationVisitor} which creates a copy of<a name="line.649"></a>
<span class="sourceLineNo">650</span>         * the contained array.<a name="line.650"></a>
<span class="sourceLineNo">651</span>         * @see org.objectweb.asm.AnnotationVisitor#visitArray(String)<a name="line.651"></a>
<span class="sourceLineNo">652</span>         */<a name="line.652"></a>
<span class="sourceLineNo">653</span>        public AnnotationVisitor visitArray(String arg0) {<a name="line.653"></a>
<span class="sourceLineNo">654</span>            ArrayAttribute aa = new ArrayAttribute(null);<a name="line.654"></a>
<span class="sourceLineNo">655</span>            m_content.add(aa);<a name="line.655"></a>
<span class="sourceLineNo">656</span>            return aa;<a name="line.656"></a>
<span class="sourceLineNo">657</span>        }<a name="line.657"></a>
<span class="sourceLineNo">658</span><a name="line.658"></a>
<span class="sourceLineNo">659</span>        /**<a name="line.659"></a>
<span class="sourceLineNo">660</span>         * End of the array attribute visit.<a name="line.660"></a>
<span class="sourceLineNo">661</span>         * @see org.objectweb.asm.AnnotationVisitor#visitEnd()<a name="line.661"></a>
<span class="sourceLineNo">662</span>         */<a name="line.662"></a>
<span class="sourceLineNo">663</span>        public void visitEnd() {  }<a name="line.663"></a>
<span class="sourceLineNo">664</span><a name="line.664"></a>
<span class="sourceLineNo">665</span>        /**<a name="line.665"></a>
<span class="sourceLineNo">666</span>         * Visits the content of the array. This method is called for<a name="line.666"></a>
<span class="sourceLineNo">667</span>         * enumeration values.<a name="line.667"></a>
<span class="sourceLineNo">668</span>         * @param arg0 &lt;code&gt;null&lt;/code&gt;<a name="line.668"></a>
<span class="sourceLineNo">669</span>         * @param arg1 the enumeration descriptor<a name="line.669"></a>
<span class="sourceLineNo">670</span>         * @param arg2 the value<a name="line.670"></a>
<span class="sourceLineNo">671</span>         * @see org.objectweb.asm.AnnotationVisitor#visitEnum(String, String, String)<a name="line.671"></a>
<span class="sourceLineNo">672</span>         */<a name="line.672"></a>
<span class="sourceLineNo">673</span>        public void visitEnum(String arg0, String arg1, String arg2) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>            EnumAttribute ea = new EnumAttribute(null, arg1, arg2);<a name="line.674"></a>
<span class="sourceLineNo">675</span>            m_content.add(ea);<a name="line.675"></a>
<span class="sourceLineNo">676</span>        }<a name="line.676"></a>
<span class="sourceLineNo">677</span><a name="line.677"></a>
<span class="sourceLineNo">678</span>        /**<a name="line.678"></a>
<span class="sourceLineNo">679</span>         * Recreates the visited array attribute. This method<a name="line.679"></a>
<span class="sourceLineNo">680</span>         * handle the generation of the object embedded in the<a name="line.680"></a>
<span class="sourceLineNo">681</span>         * array.<a name="line.681"></a>
<span class="sourceLineNo">682</span>         * @param av the annotation visitor on which the array attribute<a name="line.682"></a>
<span class="sourceLineNo">683</span>         * needs to be injected.<a name="line.683"></a>
<span class="sourceLineNo">684</span>         */<a name="line.684"></a>
<span class="sourceLineNo">685</span>        public void visit(AnnotationVisitor av) {<a name="line.685"></a>
<span class="sourceLineNo">686</span>            AnnotationVisitor content = av.visitArray(m_name);<a name="line.686"></a>
<span class="sourceLineNo">687</span>            for (int i = 0; i &lt; m_content.size(); i++) {<a name="line.687"></a>
<span class="sourceLineNo">688</span>                Object component = m_content.get(i);<a name="line.688"></a>
<span class="sourceLineNo">689</span>                if (component instanceof AnnotationDescriptor) {<a name="line.689"></a>
<span class="sourceLineNo">690</span>                    ((AnnotationDescriptor) component).visit(content);<a name="line.690"></a>
<span class="sourceLineNo">691</span>                } else if (component instanceof EnumAttribute) {<a name="line.691"></a>
<span class="sourceLineNo">692</span>                    ((EnumAttribute) component).visit(content);<a name="line.692"></a>
<span class="sourceLineNo">693</span>                } else if (component instanceof ArrayAttribute) {<a name="line.693"></a>
<span class="sourceLineNo">694</span>                    ((ArrayAttribute) component).visit(content);<a name="line.694"></a>
<span class="sourceLineNo">695</span>                } else { // Simple<a name="line.695"></a>
<span class="sourceLineNo">696</span>                    content.visit(null, component);<a name="line.696"></a>
<span class="sourceLineNo">697</span>                }<a name="line.697"></a>
<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
<span class="sourceLineNo">699</span>            content.visitEnd();<a name="line.699"></a>
<span class="sourceLineNo">700</span>        }<a name="line.700"></a>
<span class="sourceLineNo">701</span><a name="line.701"></a>
<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
<span class="sourceLineNo">703</span><a name="line.703"></a>
<span class="sourceLineNo">704</span>    /**<a name="line.704"></a>
<span class="sourceLineNo">705</span>     * Describes a simple attribute.<a name="line.705"></a>
<span class="sourceLineNo">706</span>     * This class is able to visit an annotation simple attribute, and to<a name="line.706"></a>
<span class="sourceLineNo">707</span>     * recreate this attribute on another annotation.<a name="line.707"></a>
<span class="sourceLineNo">708</span>     * @author &lt;a href="mailto:dev@felix.apache.org"&gt;Felix Project Team&lt;/a&gt;<a name="line.708"></a>
<span class="sourceLineNo">709</span>     */<a name="line.709"></a>
<span class="sourceLineNo">710</span>    public static final class SimpleAttribute {<a name="line.710"></a>
<span class="sourceLineNo">711</span>        /**<a name="line.711"></a>
<span class="sourceLineNo">712</span>         * The name of the attribute.<a name="line.712"></a>
<span class="sourceLineNo">713</span>         */<a name="line.713"></a>
<span class="sourceLineNo">714</span>        private String m_name;<a name="line.714"></a>
<span class="sourceLineNo">715</span>        /**<a name="line.715"></a>
<span class="sourceLineNo">716</span>         * The value of the attribute.<a name="line.716"></a>
<span class="sourceLineNo">717</span>         */<a name="line.717"></a>
<span class="sourceLineNo">718</span>        private Object m_value;<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
<span class="sourceLineNo">720</span>        /**<a name="line.720"></a>
<span class="sourceLineNo">721</span>         * Creates a simple attribute.<a name="line.721"></a>
<span class="sourceLineNo">722</span>         * @param name the name of the attribute<a name="line.722"></a>
<span class="sourceLineNo">723</span>         * @param object the value of the attribute<a name="line.723"></a>
<span class="sourceLineNo">724</span>         */<a name="line.724"></a>
<span class="sourceLineNo">725</span>        private SimpleAttribute(String name, Object object) {<a name="line.725"></a>
<span class="sourceLineNo">726</span>            m_name = name;<a name="line.726"></a>
<span class="sourceLineNo">727</span>            m_value = object;<a name="line.727"></a>
<span class="sourceLineNo">728</span>        }<a name="line.728"></a>
<span class="sourceLineNo">729</span><a name="line.729"></a>
<span class="sourceLineNo">730</span>        /**<a name="line.730"></a>
<span class="sourceLineNo">731</span>         * Recreates the attribute on the given annotation.<a name="line.731"></a>
<span class="sourceLineNo">732</span>         * @param visitor the visitor on which the attribute needs<a name="line.732"></a>
<span class="sourceLineNo">733</span>         * to be injected.<a name="line.733"></a>
<span class="sourceLineNo">734</span>         */<a name="line.734"></a>
<span class="sourceLineNo">735</span>        public void visit(AnnotationVisitor visitor) {<a name="line.735"></a>
<span class="sourceLineNo">736</span>            visitor.visit(m_name, m_value);<a name="line.736"></a>
<span class="sourceLineNo">737</span>        }<a name="line.737"></a>
<span class="sourceLineNo">738</span>    }<a name="line.738"></a>
<span class="sourceLineNo">739</span><a name="line.739"></a>
<span class="sourceLineNo">740</span>    /**<a name="line.740"></a>
<span class="sourceLineNo">741</span>     * Describes an attribute. The value of this attribute is an enumerated<a name="line.741"></a>
<span class="sourceLineNo">742</span>     * value.<a name="line.742"></a>
<span class="sourceLineNo">743</span>     * This class is able to visit an annotation enumeration attribute, and to<a name="line.743"></a>
<span class="sourceLineNo">744</span>     * recreate this attribute on another annotation.<a name="line.744"></a>
<span class="sourceLineNo">745</span>     * @author &lt;a href="mailto:dev@felix.apache.org"&gt;Felix Project Team&lt;/a&gt;<a name="line.745"></a>
<span class="sourceLineNo">746</span>     */<a name="line.746"></a>
<span class="sourceLineNo">747</span>    public static final class EnumAttribute {<a name="line.747"></a>
<span class="sourceLineNo">748</span>        /**<a name="line.748"></a>
<span class="sourceLineNo">749</span>         * The name of the attribute.<a name="line.749"></a>
<span class="sourceLineNo">750</span>         */<a name="line.750"></a>
<span class="sourceLineNo">751</span>        private String m_name;<a name="line.751"></a>
<span class="sourceLineNo">752</span>        /**<a name="line.752"></a>
<span class="sourceLineNo">753</span>         * The descriptor of the enumeration.<a name="line.753"></a>
<span class="sourceLineNo">754</span>         */<a name="line.754"></a>
<span class="sourceLineNo">755</span>        private String m_desc;<a name="line.755"></a>
<span class="sourceLineNo">756</span>        /**<a name="line.756"></a>
<span class="sourceLineNo">757</span>         * The value of the attribute.<a name="line.757"></a>
<span class="sourceLineNo">758</span>         */<a name="line.758"></a>
<span class="sourceLineNo">759</span>        private String m_value;<a name="line.759"></a>
<span class="sourceLineNo">760</span><a name="line.760"></a>
<span class="sourceLineNo">761</span>        /**<a name="line.761"></a>
<span class="sourceLineNo">762</span>         * Creates a enumeration attribute.<a name="line.762"></a>
<span class="sourceLineNo">763</span>         * @param name the name of the attribute.<a name="line.763"></a>
<span class="sourceLineNo">764</span>         * @param desc the descriptor of the {@link Enum}<a name="line.764"></a>
<span class="sourceLineNo">765</span>         * @param value the enumerated value<a name="line.765"></a>
<span class="sourceLineNo">766</span>         */<a name="line.766"></a>
<span class="sourceLineNo">767</span>        private EnumAttribute(String name, String desc, String value) {<a name="line.767"></a>
<span class="sourceLineNo">768</span>            m_name = name;<a name="line.768"></a>
<span class="sourceLineNo">769</span>            m_value = value;<a name="line.769"></a>
<span class="sourceLineNo">770</span>            m_desc = desc;<a name="line.770"></a>
<span class="sourceLineNo">771</span>        }<a name="line.771"></a>
<span class="sourceLineNo">772</span><a name="line.772"></a>
<span class="sourceLineNo">773</span>        /**<a name="line.773"></a>
<span class="sourceLineNo">774</span>         * Recreates the attribute on the given annotation.<a name="line.774"></a>
<span class="sourceLineNo">775</span>         * @param visitor the visitor on which the attribute needs<a name="line.775"></a>
<span class="sourceLineNo">776</span>         * to be injected.<a name="line.776"></a>
<span class="sourceLineNo">777</span>         */<a name="line.777"></a>
<span class="sourceLineNo">778</span>        public void visit(AnnotationVisitor visitor) {<a name="line.778"></a>
<span class="sourceLineNo">779</span>            visitor.visitEnum(m_name, m_desc, m_value);<a name="line.779"></a>
<span class="sourceLineNo">780</span>        }<a name="line.780"></a>
<span class="sourceLineNo">781</span><a name="line.781"></a>
<span class="sourceLineNo">782</span>    }<a name="line.782"></a>
<span class="sourceLineNo">783</span><a name="line.783"></a>
<span class="sourceLineNo">784</span><a name="line.784"></a>
<span class="sourceLineNo">785</span>}<a name="line.785"></a>




























































</pre>
</div>
</body>
</html>
