Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/jdk.jdi/share/classes/com/sun/jdi/Method.java
41159 views
1
/*
2
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package com.sun.jdi;
27
28
import java.util.List;
29
30
/**
31
* A static or instance method in the target VM. See {@link TypeComponent}
32
* for general information about Field and Method mirrors.
33
*
34
* @see ObjectReference
35
* @see ReferenceType
36
*
37
* @author Robert Field
38
* @author Gordon Hirsch
39
* @author James McIlree
40
* @since 1.3
41
*/
42
public interface Method extends TypeComponent, Locatable, Comparable<Method> {
43
44
/**
45
* Returns a text representation of the return type,
46
* as specified in the declaration of this method.
47
* <P>
48
* This type name is always available even if
49
* the type has not yet been created or loaded.
50
*
51
* @return a {@code String} containing the return type name.
52
*/
53
String returnTypeName();
54
55
/**
56
* Returns the return type,
57
* as specified in the declaration of this method.
58
* <P>
59
* Note: if the return type of this method is a reference type (class,
60
* interface, or array) and it has not been created or loaded
61
* by the declaring type's class loader - that is,
62
* {@link TypeComponent#declaringType declaringType()}
63
* {@code .classLoader()},
64
* then ClassNotLoadedException will be thrown.
65
* Also, a reference type may have been loaded but not yet prepared,
66
* in which case the type will be returned
67
* but attempts to perform some operations on the returned type
68
* (e.g. {@link ReferenceType#fields() fields()}) will throw
69
* a {@link ClassNotPreparedException}.
70
* Use {@link ReferenceType#isPrepared()} to determine if
71
* a reference type is prepared.
72
*
73
* @see Type
74
* @see Field#type() Field.type() - for usage examples
75
* @return the return {@link Type} of this method.
76
* @throws ClassNotLoadedException if the type has not yet been
77
* created or loaded
78
* through the appropriate class loader.
79
*/
80
Type returnType() throws ClassNotLoadedException;
81
82
/**
83
* Returns a list containing a text representation of the type
84
* of each formal parameter of this method.
85
* <P>
86
* This list is always available even if
87
* the types have not yet been created or loaded.
88
*
89
* @return a {@link java.util.List List} of {@link String},
90
* one List element for each parameter of this method.
91
* Each element represents the type of a formal parameter
92
* as specified at compile-time.
93
* If the formal parameter was declared with an ellipsis, then
94
* it is represented as an array of the type before the ellipsis.
95
*/
96
List<String> argumentTypeNames();
97
98
/**
99
* Returns a list containing the type
100
* of each formal parameter of this method.
101
* <P>
102
* Note: if there is any parameter whose type
103
* is a reference type (class, interface, or array)
104
* and it has not been created or loaded
105
* by the declaring type's class loader - that is,
106
* {@link TypeComponent#declaringType declaringType()}
107
* {@code .classLoader()},
108
* then ClassNotLoadedException will be thrown.
109
* Also, a reference type may have been loaded but not yet prepared,
110
* in which case the list will be returned
111
* but attempts to perform some operations on the type
112
* (e.g. {@link ReferenceType#fields() fields()}) will throw
113
* a {@link ClassNotPreparedException}.
114
* Use {@link ReferenceType#isPrepared()} to determine if
115
* a reference type is prepared.
116
*
117
* @see Type
118
* @return return a {@link java.util.List List} of {@link Type},
119
* one List element for each parameter of this method.
120
* Each element represents the type of a formal parameter
121
* as specified at compile-time.
122
* If the formal parameter was declared with an ellipsis, then
123
* it is represented as an array of the type before the ellipsis.
124
*
125
* @throws ClassNotLoadedException if the type has not yet been loaded
126
* through the appropriate class loader.
127
*/
128
List<Type> argumentTypes() throws ClassNotLoadedException;
129
130
/**
131
* Determine if this method is abstract.
132
*
133
* @return {@code true} if the method is declared abstract;
134
* {@code false} otherwise.
135
*/
136
boolean isAbstract();
137
138
/**
139
* Determine if this method is a default method
140
*
141
* @return {@code true} if the method is declared default;
142
* {@code false} otherwise.
143
*
144
* @since 1.8
145
*/
146
default boolean isDefault() {
147
throw new UnsupportedOperationException();
148
}
149
150
/**
151
* Determine if this method is synchronized.
152
*
153
* @return {@code true} if the method is declared synchronized;
154
* {@code false} otherwise.
155
*/
156
boolean isSynchronized();
157
158
/**
159
* Determine if this method is native.
160
*
161
* @return {@code true} if the method is declared native;
162
* {@code false} otherwise.
163
*/
164
boolean isNative();
165
166
/**
167
* Determine if this method accepts a variable number of arguments.
168
*
169
* @return {@code true} if the method accepts a variable number
170
* of arguments, {@code false} otherwise.
171
*
172
* @since 1.5
173
*/
174
boolean isVarArgs();
175
176
/**
177
* Determine if this method is a bridge method. Bridge
178
* methods are defined in
179
* <cite>The Java Language Specification</cite>.
180
*
181
* @return {@code true} if the method is a bridge method,
182
* {@code false} otherwise.
183
*
184
* @since 1.5
185
*/
186
boolean isBridge();
187
188
/**
189
* Determine if this method is a constructor.
190
*
191
* @return {@code true} if the method is a constructor;
192
* {@code false} otherwise.
193
*/
194
boolean isConstructor();
195
196
/**
197
* Determine if this method is a static initializer.
198
*
199
* @return {@code true} if the method is a static initializer;
200
* {@code false} otherwise.
201
*/
202
boolean isStaticInitializer();
203
204
/**
205
* Determine if this method is obsolete.
206
*
207
* @return {@code true} if this method has been made obsolete by a
208
* {@link VirtualMachine#redefineClasses} operation.
209
*
210
* @since 1.4
211
*/
212
boolean isObsolete();
213
214
/**
215
* Returns a list containing a {@link Location} object for
216
* each executable source line in this method.
217
* <P>
218
* This method is equivalent to
219
* {@code allLineLocations(vm.getDefaultStratum(),null)} -
220
* see {@link #allLineLocations(String,String)}
221
* for more information.
222
*
223
* @return a List of all source line {@link Location} objects.
224
*
225
* @throws AbsentInformationException if there is no line
226
* number information for this (non-native, non-abstract)
227
* method.
228
*/
229
List<Location> allLineLocations() throws AbsentInformationException;
230
231
/**
232
* Returns a list containing a {@link Location} object for
233
* each executable source line in this method.
234
* <P>
235
* Each location maps a source line to a range of code
236
* indices.
237
* The beginning of the range can be determined through
238
* {@link Location#codeIndex}.
239
* The returned list is ordered by code index
240
* (from low to high).
241
* <P>
242
* The returned list may contain multiple locations for a
243
* particular line number, if the compiler and/or VM has
244
* mapped that line to two or more disjoint code index ranges.
245
* <P>
246
* If the method is native or abstract, an empty list is
247
* returned.
248
* <P>
249
* Returned list is for the specified <i>stratum</i>
250
* (see {@link Location} for a description of strata).
251
*
252
* @param stratum The stratum to retrieve information from
253
* or {@code null} for the {@link ReferenceType#defaultStratum()}
254
*
255
* @param sourceName Return locations only within this
256
* source file or {@code null} to return locations.
257
*
258
* @return a List of all source line {@link Location} objects.
259
*
260
* @throws AbsentInformationException if there is no line
261
* number information for this (non-native, non-abstract)
262
* method. Or if <i>sourceName</i> is non-{@code null}
263
* and source name information is not present.
264
*
265
* @since 1.4
266
*/
267
List<Location> allLineLocations(String stratum, String sourceName)
268
throws AbsentInformationException;
269
270
/**
271
* Returns a List containing all {@link Location} objects
272
* that map to the given line number.
273
* <P>
274
* This method is equivalent to
275
* {@code locationsOfLine(vm.getDefaultStratum(), null,
276
* lineNumber)} -
277
* see {@link
278
* #locationsOfLine(java.lang.String,java.lang.String,int)}
279
* for more information.
280
*
281
* @param lineNumber the line number
282
*
283
* @return a List of {@link Location} objects that map to
284
* the given line number.
285
*
286
* @throws AbsentInformationException if there is no line
287
* number information for this method.
288
*/
289
List<Location> locationsOfLine(int lineNumber) throws AbsentInformationException;
290
291
/**
292
* Returns a List containing all {@link Location} objects
293
* that map to the given line number and source name.
294
* <P>
295
* Returns a list containing each {@link Location} that maps
296
* to the given line. The returned list will contain a
297
* location for each disjoint range of code indices that have
298
* been assigned to the given line by the compiler and/or
299
* VM. Each returned location corresponds to the beginning of
300
* this range. An empty list will be returned if there is no
301
* executable code at the specified line number; specifically,
302
* native and abstract methods will always return an empty
303
* list.
304
* <p>
305
* Returned list is for the specified <i>stratum</i>
306
* (see {@link Location} for a description of strata).
307
*
308
* @param stratum the stratum to use for comparing line number
309
* and source name, or null to use the default
310
* stratum
311
* @param sourceName the source name containing the
312
* line number, or null to match all
313
* source names
314
* @param lineNumber the line number
315
*
316
* @return a List of {@link Location} objects that map to
317
* the given line number.
318
*
319
* @throws AbsentInformationException if there is no line
320
* number information for this method.
321
* Or if <i>sourceName</i> is non-{@code null}
322
* and source name information is not present.
323
*
324
* @since 1.4
325
*/
326
List<Location> locationsOfLine(String stratum, String sourceName,
327
int lineNumber)
328
throws AbsentInformationException;
329
330
/**
331
* Returns a {@link Location} for the given code index.
332
*
333
* @return the {@link Location} corresponding to the
334
* given code index or null if the specified code index is not a
335
* valid code index for this method (native and abstract methods
336
* will always return null).
337
*/
338
Location locationOfCodeIndex(long codeIndex);
339
340
/**
341
* Returns a list containing each {@link LocalVariable} declared
342
* in this method. The list includes any variable declared in any
343
* scope within the method. It may contain multiple variables of the
344
* same name declared within disjoint scopes. Arguments are considered
345
* local variables and will be present in the returned list.
346
*
347
* If local variable information is not available, values of
348
* actual arguments to method invocations can be obtained
349
* by using the method {@link StackFrame#getArgumentValues()}
350
*
351
* @return the list of {@link LocalVariable} objects which mirror
352
* local variables declared in this method in the target VM.
353
* If there are no local variables, a zero-length list is returned.
354
* @throws AbsentInformationException if there is no variable
355
* information for this method.
356
* Generally, local variable information is not available for
357
* native or abstract methods (that is, their argument name
358
* information is not available), thus they will throw this exception.
359
*/
360
List<LocalVariable> variables() throws AbsentInformationException;
361
362
/**
363
* Returns a list containing each {@link LocalVariable} of a
364
* given name in this method.
365
* Multiple variables can be returned
366
* if the same variable name is used in disjoint
367
* scopes within the method.
368
*
369
* @return the list of {@link LocalVariable} objects of the given
370
* name.
371
* If there are no matching local variables, a zero-length list
372
* is returned.
373
* @throws AbsentInformationException if there is no variable
374
* information for this method.
375
* Generally, local variable information is not available for
376
* native or abstract methods (that is, their argument name
377
* information is not available), thus they will throw this exception.
378
*/
379
List<LocalVariable> variablesByName(String name)
380
throws AbsentInformationException;
381
382
/**
383
* Returns a list containing each {@link LocalVariable} that is
384
* declared as an argument of this method.
385
*
386
* If local variable information is not available, values of
387
* actual arguments to method invocations can be obtained
388
* by using the method {@link StackFrame#getArgumentValues()}
389
*
390
* @return the list of {@link LocalVariable} arguments.
391
* If there are no arguments, a zero-length list is returned.
392
* @throws AbsentInformationException if there is no variable
393
* information for this method.
394
* Generally, local variable information is not available for
395
* native or abstract methods (that is, their argument name
396
* information is not available), thus they will throw this exception.
397
*/
398
List<LocalVariable> arguments() throws AbsentInformationException;
399
400
/**
401
* Returns an array containing the bytecodes for this method.
402
* <P>
403
* Not all target virtual machines support this operation.
404
* Use {@link VirtualMachine#canGetBytecodes()}
405
* to determine if the operation is supported.
406
*
407
* @return the array of bytecodes; abstract and native methods
408
* will return a zero-length array.
409
* @throws java.lang.UnsupportedOperationException if
410
* the target virtual machine does not support
411
* the retrieval of bytecodes.
412
*/
413
byte[] bytecodes();
414
415
/**
416
* Returns the {@link Location} of this method, if there
417
* is executable code associated with it.
418
*
419
* @return the {@link Location} of this mirror, or null if
420
* this is an abstract method; native methods will return a
421
* Location object whose codeIndex is -1.
422
*/
423
Location location();
424
425
/**
426
* Compares the specified Object with this method for equality.
427
*
428
* @return true if the Object is a method and if both
429
* mirror the same method (declared in the same class or interface, in
430
* the same VM).
431
*/
432
boolean equals(Object obj);
433
434
/**
435
* Returns the hash code value for this Method.
436
*
437
* @return the integer hash code.
438
*/
439
int hashCode();
440
}
441
442