This file is indexed.

/usr/share/doc/libserp-java/api/src-html/serp/bytecode/lowlevel/Entry.html is in libserp-java-doc 1.15.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
<!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>package serp.bytecode.lowlevel;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>import java.io.DataInput;<a name="line.3"></a>
<span class="sourceLineNo">004</span>import java.io.DataOutput;<a name="line.4"></a>
<span class="sourceLineNo">005</span>import java.io.IOException;<a name="line.5"></a>
<span class="sourceLineNo">006</span><a name="line.6"></a>
<span class="sourceLineNo">007</span>import serp.bytecode.visitor.VisitAcceptor;<a name="line.7"></a>
<span class="sourceLineNo">008</span><a name="line.8"></a>
<span class="sourceLineNo">009</span>/**<a name="line.9"></a>
<span class="sourceLineNo">010</span> * Base type for all constant pool entries. Entries should generally be<a name="line.10"></a>
<span class="sourceLineNo">011</span> * considered immutable; modifying an entry directly can have dire<a name="line.11"></a>
<span class="sourceLineNo">012</span> * consequences, and often renders the resulting class file invalid.<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * &lt;p&gt;Entries cannot be shared among constant pools.&lt;/p&gt;<a name="line.14"></a>
<span class="sourceLineNo">015</span> *<a name="line.15"></a>
<span class="sourceLineNo">016</span> * @author Abe White<a name="line.16"></a>
<span class="sourceLineNo">017</span> */<a name="line.17"></a>
<span class="sourceLineNo">018</span>public abstract class Entry implements VisitAcceptor {<a name="line.18"></a>
<span class="sourceLineNo">019</span>    public static final int UTF8 = 1;<a name="line.19"></a>
<span class="sourceLineNo">020</span>    public static final int INT = 3;<a name="line.20"></a>
<span class="sourceLineNo">021</span>    public static final int FLOAT = 4;<a name="line.21"></a>
<span class="sourceLineNo">022</span>    public static final int LONG = 5;<a name="line.22"></a>
<span class="sourceLineNo">023</span>    public static final int DOUBLE = 6;<a name="line.23"></a>
<span class="sourceLineNo">024</span>    public static final int CLASS = 7;<a name="line.24"></a>
<span class="sourceLineNo">025</span>    public static final int STRING = 8;<a name="line.25"></a>
<span class="sourceLineNo">026</span>    public static final int FIELD = 9;<a name="line.26"></a>
<span class="sourceLineNo">027</span>    public static final int METHOD = 10;<a name="line.27"></a>
<span class="sourceLineNo">028</span>    public static final int INTERFACEMETHOD = 11;<a name="line.28"></a>
<span class="sourceLineNo">029</span>    public static final int NAMEANDTYPE = 12;<a name="line.29"></a>
<span class="sourceLineNo">030</span>    public static final int METHODHANDLE = 15;<a name="line.30"></a>
<span class="sourceLineNo">031</span>    public static final int METHODTYPE = 16;<a name="line.31"></a>
<span class="sourceLineNo">032</span>    public static final int INVOKEDYNAMIC = 18;<a name="line.32"></a>
<span class="sourceLineNo">033</span>    <a name="line.33"></a>
<span class="sourceLineNo">034</span>    private ConstantPool _pool = null;<a name="line.34"></a>
<span class="sourceLineNo">035</span>    private int _index = 0;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>    /**<a name="line.37"></a>
<span class="sourceLineNo">038</span>     * Read a single entry from the given bytecode stream and returns it.<a name="line.38"></a>
<span class="sourceLineNo">039</span>     */<a name="line.39"></a>
<span class="sourceLineNo">040</span>    public static Entry read(DataInput in) throws IOException {<a name="line.40"></a>
<span class="sourceLineNo">041</span>        Entry entry = create(in.readUnsignedByte());<a name="line.41"></a>
<span class="sourceLineNo">042</span>        entry.readData(in);<a name="line.42"></a>
<span class="sourceLineNo">043</span>        return entry;<a name="line.43"></a>
<span class="sourceLineNo">044</span>    }<a name="line.44"></a>
<span class="sourceLineNo">045</span><a name="line.45"></a>
<span class="sourceLineNo">046</span>    /**<a name="line.46"></a>
<span class="sourceLineNo">047</span>     * Write the given entry to the given bytecode stream.<a name="line.47"></a>
<span class="sourceLineNo">048</span>     */<a name="line.48"></a>
<span class="sourceLineNo">049</span>    public static void write(Entry entry, DataOutput out)<a name="line.49"></a>
<span class="sourceLineNo">050</span>        throws IOException {<a name="line.50"></a>
<span class="sourceLineNo">051</span>        out.writeByte(entry.getType());<a name="line.51"></a>
<span class="sourceLineNo">052</span>        entry.writeData(out);<a name="line.52"></a>
<span class="sourceLineNo">053</span>    }<a name="line.53"></a>
<span class="sourceLineNo">054</span><a name="line.54"></a>
<span class="sourceLineNo">055</span>    /**<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * Create an entry based on its type code.<a name="line.56"></a>
<span class="sourceLineNo">057</span>     */<a name="line.57"></a>
<span class="sourceLineNo">058</span>    public static Entry create(int type) {<a name="line.58"></a>
<span class="sourceLineNo">059</span>        switch (type) {<a name="line.59"></a>
<span class="sourceLineNo">060</span>        case CLASS:<a name="line.60"></a>
<span class="sourceLineNo">061</span>            return new ClassEntry();<a name="line.61"></a>
<span class="sourceLineNo">062</span>        case FIELD:<a name="line.62"></a>
<span class="sourceLineNo">063</span>            return new FieldEntry();<a name="line.63"></a>
<span class="sourceLineNo">064</span>        case METHOD:<a name="line.64"></a>
<span class="sourceLineNo">065</span>            return new MethodEntry();<a name="line.65"></a>
<span class="sourceLineNo">066</span>        case INTERFACEMETHOD:<a name="line.66"></a>
<span class="sourceLineNo">067</span>            return new InterfaceMethodEntry();<a name="line.67"></a>
<span class="sourceLineNo">068</span>        case STRING:<a name="line.68"></a>
<span class="sourceLineNo">069</span>            return new StringEntry();<a name="line.69"></a>
<span class="sourceLineNo">070</span>        case INT:<a name="line.70"></a>
<span class="sourceLineNo">071</span>            return new IntEntry();<a name="line.71"></a>
<span class="sourceLineNo">072</span>        case FLOAT:<a name="line.72"></a>
<span class="sourceLineNo">073</span>            return new FloatEntry();<a name="line.73"></a>
<span class="sourceLineNo">074</span>        case LONG:<a name="line.74"></a>
<span class="sourceLineNo">075</span>            return new LongEntry();<a name="line.75"></a>
<span class="sourceLineNo">076</span>        case DOUBLE:<a name="line.76"></a>
<span class="sourceLineNo">077</span>            return new DoubleEntry();<a name="line.77"></a>
<span class="sourceLineNo">078</span>        case NAMEANDTYPE:<a name="line.78"></a>
<span class="sourceLineNo">079</span>            return new NameAndTypeEntry();<a name="line.79"></a>
<span class="sourceLineNo">080</span>        case UTF8:<a name="line.80"></a>
<span class="sourceLineNo">081</span>            return new UTF8Entry();<a name="line.81"></a>
<span class="sourceLineNo">082</span>        case METHODHANDLE:<a name="line.82"></a>
<span class="sourceLineNo">083</span>                return new MethodHandleEntry();<a name="line.83"></a>
<span class="sourceLineNo">084</span>        case METHODTYPE:<a name="line.84"></a>
<span class="sourceLineNo">085</span>                return new MethodTypeEntry();<a name="line.85"></a>
<span class="sourceLineNo">086</span>        case INVOKEDYNAMIC:<a name="line.86"></a>
<span class="sourceLineNo">087</span>                return new InvokeDynamicEntry();<a name="line.87"></a>
<span class="sourceLineNo">088</span>        default:<a name="line.88"></a>
<span class="sourceLineNo">089</span>            throw new IllegalArgumentException("type = " + type);<a name="line.89"></a>
<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * Return the type code for this entry type.<a name="line.94"></a>
<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
<span class="sourceLineNo">096</span>    public abstract int getType();<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span>    /**<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * Return true if this is a wide entry -- i.e. if it takes up two<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * places in the constant pool. Returns false by default.<a name="line.100"></a>
<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
<span class="sourceLineNo">102</span>    public boolean isWide() {<a name="line.102"></a>
<span class="sourceLineNo">103</span>        return false;<a name="line.103"></a>
<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
<span class="sourceLineNo">105</span><a name="line.105"></a>
<span class="sourceLineNo">106</span>    /**<a name="line.106"></a>
<span class="sourceLineNo">107</span>     * Returns the constant pool containing this entry, or null if none.<a name="line.107"></a>
<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
<span class="sourceLineNo">109</span>    public ConstantPool getPool() {<a name="line.109"></a>
<span class="sourceLineNo">110</span>        return _pool;<a name="line.110"></a>
<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>    /**<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * Returns the index of the entry in the owning constant pool, or 0.<a name="line.114"></a>
<span class="sourceLineNo">115</span>     */<a name="line.115"></a>
<span class="sourceLineNo">116</span>    public int getIndex() {<a name="line.116"></a>
<span class="sourceLineNo">117</span>        return _index;<a name="line.117"></a>
<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span>    /**<a name="line.120"></a>
<span class="sourceLineNo">121</span>     * This method is called after reading the entry type from bytecode.<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * It should read all the data for this entry from the given stream.<a name="line.122"></a>
<span class="sourceLineNo">123</span>     */<a name="line.123"></a>
<span class="sourceLineNo">124</span>    abstract void readData(DataInput in) throws IOException;<a name="line.124"></a>
<span class="sourceLineNo">125</span><a name="line.125"></a>
<span class="sourceLineNo">126</span>    /**<a name="line.126"></a>
<span class="sourceLineNo">127</span>     * This method is called after writing the entry type to bytecode.<a name="line.127"></a>
<span class="sourceLineNo">128</span>     * It should write all data for this entry to the given stream.<a name="line.128"></a>
<span class="sourceLineNo">129</span>     */<a name="line.129"></a>
<span class="sourceLineNo">130</span>    abstract void writeData(DataOutput out) throws IOException;<a name="line.130"></a>
<span class="sourceLineNo">131</span><a name="line.131"></a>
<span class="sourceLineNo">132</span>    /**<a name="line.132"></a>
<span class="sourceLineNo">133</span>     * Subclasses must call this method before their state is mutated.<a name="line.133"></a>
<span class="sourceLineNo">134</span>     */<a name="line.134"></a>
<span class="sourceLineNo">135</span>    Object beforeModify() {<a name="line.135"></a>
<span class="sourceLineNo">136</span>        if (_pool == null)<a name="line.136"></a>
<span class="sourceLineNo">137</span>            return null;<a name="line.137"></a>
<span class="sourceLineNo">138</span>        return _pool.getKey(this);<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>    /**<a name="line.141"></a>
<span class="sourceLineNo">142</span>     * Subclasses must call this method when their state is mutated.<a name="line.142"></a>
<span class="sourceLineNo">143</span>     */<a name="line.143"></a>
<span class="sourceLineNo">144</span>    void afterModify(Object key) {<a name="line.144"></a>
<span class="sourceLineNo">145</span>        if (_pool != null)<a name="line.145"></a>
<span class="sourceLineNo">146</span>            _pool.modifyEntry(key, this);<a name="line.146"></a>
<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>    /**<a name="line.149"></a>
<span class="sourceLineNo">150</span>     * Sets the owning pool of the entry.<a name="line.150"></a>
<span class="sourceLineNo">151</span>     */<a name="line.151"></a>
<span class="sourceLineNo">152</span>    void setPool(ConstantPool pool) {<a name="line.152"></a>
<span class="sourceLineNo">153</span>        // attempting to overwrite current pool?<a name="line.153"></a>
<span class="sourceLineNo">154</span>        if (_pool != null &amp;&amp; pool != null &amp;&amp; _pool != pool)<a name="line.154"></a>
<span class="sourceLineNo">155</span>            throw new IllegalStateException("Entry already belongs to a pool");<a name="line.155"></a>
<span class="sourceLineNo">156</span>        _pool = pool;<a name="line.156"></a>
<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>    /**<a name="line.159"></a>
<span class="sourceLineNo">160</span>     * Set the index of this entry within the pool.<a name="line.160"></a>
<span class="sourceLineNo">161</span>     */<a name="line.161"></a>
<span class="sourceLineNo">162</span>    void setIndex(int index) {<a name="line.162"></a>
<span class="sourceLineNo">163</span>        _index = index;<a name="line.163"></a>
<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
<span class="sourceLineNo">165</span>}<a name="line.165"></a>




























































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