JavaMethod.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 28 Jan 2015 03:12:08 +0100
branchcvs_MAIN
changeset 3360 1a8899091305
parent 3324 a58245c0e83a
child 3412 df11bb428463
permissions -rw-r--r--
Merged with mercurial revision cb6c15e66be (594 changesets total) Merged changesets: - 69af63cd04a3: Jan Vrany, 2013-09-06 10:36 +0100: Added JarFileTests to test signed jars. - d87e89dd5276: Jan Vrany, 2013-09-10 10:34 +0100: Removed packages from subProjects, makefiles uodated. - 13f5be2bf83b: Jan Vrany, 2013-09-15 01:44 +0100: Merged d87e89dd5276 and fe83a843a7bf (branch default - CVS HEAD) - 7d1a1fb5b01a: Jan Vrany, 2013-09-15 02:16 +0100: Merged 272689c14005 and 13f5be2bf83b. - 3d97124aebf5: Jan Vrany, 2013-09-16 01:04 +0100: Fixes for syntax highlighting. - f56049613ff3: Jan Vrany, 2013-09-16 14:09 +0100: Initial support for live code checker / lint. - e20dd8496371: Jan Vrany, 2013-09-17 11:22 +0100: Initial support for source code indexing (for semi-modal navigation) - 7cb269d572d3: Jan Vrany, 2013-09-17 12:19 +0100: Added link to Jenkins. - 83f8416e153c: Jan Vrany, 2013-09-20 02:03 +0100: Cleanup. Change source API in `Java` to return stream rather than string. - a633a2e8e67e: Jan Vrany, 2013-09-20 02:13 +0100: Make sure eclipse Parser is initialized before actually start parsing. - b34398d8856b: Jan Vrany, 2013-09-20 10:56 +0100: Bugfix: JavaClass>>source: check for missing source. - 5c458398e060: Jan Vrany, 2013-09-20 10:57 +0100: Fixes for JavaLintService/Highlighter: correctly flush previous problems... - a9ac61c2c454: Jan Vrany, 2013-09-21 05:23 +0100: Fixes for Java syntax highlighting and checking. - 8ff7a8f45a9f: Jan Vrany, 2013-09-22 10:33 +0100: Fix in JavaClassReloader: do not transfer compiler problems... - 0db3e311a7e7: Jan Vrany, 2013-09-22 19:32 +0100: - JavaMethodDeclarationNode - 7c283887f8c4: Jan Vrany, 2013-09-22 19:35 +0100: Fixes. - 08ef7d05987b: Jan Vrany, 2013-09-23 10:03 +0100: Update JavaLintService after rename of SmallSense::SyntaxHighlightingService... - ba792256b173: Jan Vrany, 2013-09-24 00:11 +0100: Added initial version of Jabber Client demo application. - 718fab8ca4cf: Jan Vrany, 2013-09-24 01:56 +0100: Do not load libj2pcks11.so/dll but do not bark when it's loaded. - d68db9271133: Jan Vrany, 2013-09-24 01:59 +0100: Removed examples/jabber from subprojects. - ddc68c69915a: Jan Vrany, 2013-09-24 12:45 +0100: Improvements for Java code navigation. - bf52a1e5701b: Jan Vrany, 2013-09-25 10:27 +0100: Support for implementors/senders menu. - 825b27484850: Jan Vrany, 2013-09-25 16:11 +0100: Added JavaPackage>>#compiler / #source methods... - f5f21ffdbfd9: Jan Vrany, 2013-09-26 09:11 +0100: More fixes for semi-modal navigation. - 18d2c83ecb3c: Jan Vrany, 2013-09-26 09:15 +0100: Added parse tree inspector tab to JavaSourceDocument to ease debugging. - 7638771efcbe: Jan Vrany, 2013-09-28 01:49 +0100: Fix in JavaClass>>source. - bdabb1cf8408: Jan Vrany, 2013-10-01 14:17 +0100: Some more fixes for semi-modal navigation. - 1b698ca5f0fd: Jan Vrany, 2013-10-01 23:36 +0100: More fixes for semi-modal navigation - 4756cc015954: Jan Vrany, 2013-10-02 00:59 +0100: Fix in JavaSourceDocument>>#inspector2TabParseTreeInspector - added missing notNil - 09774212044f: Jan Vrany, 2013-10-02 12:31 +0100: Another fix for semimodal navigation - d82859be4462: Marcel Hlopko, 2013-09-10 00:11 +0200: remove findResolvedStaticValue from JavaFieldRef2, not used anymore - 3d4c32e21475: Marcel Hlopko, 2013-09-10 00:14 +0200: add JavaClass>>canCacheReferences - fc8ef16dcb5c: Marcel Hlopko, 2013-09-12 23:43 +0200: add JavaClass>>hasMultipleVersions - fa96e547c9a5: Marcel Hlopko, 2013-09-12 23:44 +0200: set cleanCacheFlag in JavaFieldRef when multiple java class versions present - b097de8f18b1: Marcel Hlopko, 2013-09-12 23:47 +0200: merge heads - ad96da73c612: Marcel Hlopko, 2013-09-12 23:53 +0200: merge heads - 630363041ceb: Marcel Hlopko, 2013-09-13 22:11 +0200: tiny refactoring - e3092c16bcce: Marcel Hlopko, 2013-09-19 23:24 +0200: add cleanCacheFlag to JavaFieldRef2 - 7cdd959123dd: Marcel Hlopko, 2013-09-20 00:10 +0200: fix reloading tests (now they fail where expected) - c6f2c3b4a45b: Marcel Hlopko, 2013-09-22 21:12 +0200: merge heads - 2158564a90d1: Marcel Hlopko, 2013-10-01 22:58 +0200: temporarily add JavaConstantPool>>invalidateReferencesForClass - 6659925a80a4: Marcel Hlopko, 2013-10-01 23:06 +0200: tiny fix in reloading tests - 66f842986836: Marcel Hlopko, 2013-10-02 22:07 +0200: cleanup multiple Java class versions handling - 06599146279d: Marcel Hlopko, 2013-10-02 23:33 +0200: fix JavaClassReloader>>invalidate - 7d5ffec2f654: Marcel Hlopko, 2013-10-02 23:35 +0200: run ObjectMemory>>garbageCollect before and after each Java reloading test - 0216e0808608: Jan Vrany, 2013-10-03 15:30 +0100: Bugfix: Added missing JavaSocket>>timeout: - 241e36a125a9: Jan Vrany, 2013-10-03 17:36 +0100: Added java support code for stx:libjava/libtool - d4914ffbb0cf: Jan Vrany, 2013-10-03 20:07 +0100: Fix in JavaSourceHighlighter: save full tree in sourceIndex. - b25c8b9e886a: Jan Vrany, 2013-10-04 08:59 +0100: Highlighter cleanup, addes support for Groovy. - e6109bd7dfd2: Jan Vrany, 2013-10-04 12:22 +0100: Problem highlighting optimization/cleanup. - b530c3f48cd3: Jan Vrany, 2013-10-04 12:49 +0100: Changed display string for Java methods. - 6a57107d168a: Jan Vrany, 2013-10-04 17:02 +0100: Improvement in interop/java extensions. - 662204c99509: Jan Vrany, 2013-10-05 00:57 +0100: Oops, fixed interop for extensions defined on interfaces. - f3cfee185a72: Jan Vrany, 2013-10-05 01:01 +0100: Fix for GroovyEvaluator - cec025d0f359: Jan Vrany, 2013-10-05 01:11 +0100: Oops, fix for resolving. - 92ae91b29303: Jan Vrany, 2013-10-05 01:27 +0100: Added some common collection methods to java.util.Collection... - f0c1243363d8: Jan Vrany, 2013-10-05 01:50 +0100: Improvement in GroovyEvaluator: add receiver's instance variables to accessible variables. - 6936cde374d2: Jan Vrany, 2013-10-05 23:36 +0100: Fix in Java parser: set source level to 1.6 or 1.7 depending on running system. - 2fdee4f9e146: Jan Vrany, 2013-10-05 23:37 +0100: Added Java files required by interop tests. - b2fa940b8184: Jan Vrany, 2013-10-06 00:01 +0100: Fixed tests JavaFieldRefTests>>testCorrectResolving - 24e508459735: Jan Vrany, 2013-10-06 00:03 +0100: Merged 2fdee4f9e146 (tools support and fixes) and 7d5ffec2f654 (multivers fixes) - 62c767616a13: Jan Vrany, 2013-10-06 22:37 +0100: Fixed stupid bug in JavaFieldRef2 (did not correctly set type to R_DOUBLE for double fields) - b9c510a2234e: Jan Vrany, 2013-10-06 22:39 +0100: Merged 62c767616a13 and 24e508459735 - ba98473322b9: Jan Vrany, 2013-10-07 11:06 +0100: Fix in JavaToolbox>>#displayStringForSelector:in:withClassName: - 43370b378bf9: Jan Vrany, 2013-10-07 11:27 +0100: Added lost extension MessageSend>>navigateToUsing: - c4bd856eeb26: Jan Vrany, 2013-10-07 11:29 +0100: Oops, fixed MessageSend>>navigateToUsing: extension. Sigh... - 41d1af53f1eb: Jan Vrany, 2013-10-07 11:54 +0100: Fix in JavaVM>>standardThreadGroup - 46f6ef83cce6: Jan Vrany, 2013-10-07 19:16 +0100: More extensions for List - 13b4f59e3b0a: Jan Vrany, 2013-10-08 07:05 +0100: Fixes in parsing/highlighting. - e3b939ba5a5d: Jan Vrany, 2013-10-08 09:25 +0100: Fix in JavaSourceDocument>>initializeSourceRefsInMethods - match methods using their descriptors... - 7072f7fb65f6: Jan Vrany, 2013-10-08 09:28 +0100: Support for generic (parametrized) types in source indexer. - 8542f6311dcc: Jan Vrany, 2013-10-08 10:02 +0100: Merged 7072f7fb65f6 and e3b939ba5a5d - 7cd5e50a6c5a: Jan Vrany, 2013-10-08 11:13 +0100: Load java extension methods silently. - b00543ba4599: Jan Vrany, 2013-10-08 14:06 +0100: Added #first, #second, ... extensions to the List interface - 342fbc21cc23: Jan Vrany, 2013-10-08 14:08 +0100: Small fix in JavaMethod>>argAndVarNamesInContext: - 1c7b69664136: Jan Vrany, 2013-10-08 18:04 +0100: Fixes in JavaSourceHighlighter: - 681e5db578ad: Jan Vrany, 2013-10-08 19:16 +0100: Cleanup - remove old tools (parsers/parse nodes...) - 4b819ed57eeb: Jan Vrany, 2013-10-09 11:30 +0100: Oops, cleanup commit swept way to much. Restored Java extension containers for AST nodes. - 6d3bac6f72c7: Jan Vrany, 2013-10-09 23:37 +0100: Fix in stx.libjava.tools.text.Highligter - do not override parseClassBodyDeclarations()... - 7fb4ad65d417: Jan Vrany, 2013-10-09 23:38 +0100: build.xml files fixed. - 6fa1bcf9c997: Jan Vrany, 2013-10-10 00:08 +0100: JavaClass>>#name vs. #binaryName refactoring - 881eb22c2724: Jan Vrany, 2013-10-10 01:03 +0100: Bugfix in JavaClass>>nameSpaceName: all classes loaded by primordial, ext or system class loader should go to JAVA namespace. - 36f000314bcd: Jan Vrany, 2013-10-10 10:42 +0100: Fix in mixed exception handling. - 5157d3aea2c5: Jan Vrany, 2013-10-10 10:49 +0100: Merged 6fa1bcf9c997 (classname refactoring) and 7fb4ad65d417 (main) - 16c497edc69d: Jan Vrany, 2013-10-10 10:50 +0100: Merged 5157d3aea2c5 and 36f000314bcd (mixed exception handling fix) - d4ebf2a7c399: Jan Vrany, 2013-10-10 11:00 +0100: Merged 16c497edc69d and 881eb22c2724 (fix in JavaClass>>nameSpaceName - 5ea0697eef5f: Jan Vrany, 2013-10-10 11:25 +0100: Hack for old VM JavaClass>>binaryName:numStatic: - 96f3e2254489: Marcel Hlopko, 2013-10-08 19:02 +0200: remove JavaConstantPool#ConstantPools weak array, use JavaVM registry instead - 9e7d690fdc68: Marcel Hlopko, 2013-10-10 16:53 +0200: add blank requestRecompile & requestReload methods - 06e68d6098db: Jan Vrany, 2013-10-10 16:48 +0100: Added JavaObject>#instanceOf: - 90bcc3f41a0a: Jan Vrany, 2013-10-11 10:16 +0100: Merged 06e68d6098db and 9e7d690fdc68 (Marcel's fixes) - e4f0dcc42f4a: Jan Vrany, 2013-10-11 11:33 +0100: Fixed logging of monitor-related events - honour JavaVM.MonitorTrace flag. - 3680bdc3ef00: Jan Vrany, 2013-10-11 18:34 +0100: Merged 5ea0697eef5f and e4f0dcc42f4a (monitor trace fixes) - 76893aac6a7e: Marcel Hlopko, 2013-10-12 15:53 +0200: add JavaFieldRef>>reresolveForVersion: javaClass - 1ab75f8aa9de: Marcel Hlopko, 2013-10-12 18:10 +0200: small cleanup - ad2948878d56: Marcel Hlopko, 2013-10-12 18:13 +0200: fix stupid test and voila - hierarchy tests passing :) - 751597d0526a: Marcel Hlopko, 2013-10-12 21:01 +0200: do not migrate instances when type of the field is generalized - d030cf717ca2: Marcel Hlopko, 2013-10-12 21:03 +0200: temporarily ignore type inconsistencies on return values - 6d2d593cb29e: Marcel Hlopko, 2013-10-12 21:52 +0200: rename reresolveForVersion to resolveForVersion - cace5e1f84f3: Marcel Hlopko, 2013-10-13 12:04 +0200: experimenting with fieldRef resolving for particular class version - a31c3f2902d7: Marcel Hlopko, 2013-10-13 12:31 +0200: jv please revide, I probably broke something and this only fixes a symptom. - b9fadb7c9a1f: Marcel Hlopko, 2013-10-13 14:54 +0200: move resolveForVersion moved to JavaClassRef2 - a141e4ea784d: Marcel Hlopko, 2013-10-13 16:22 +0200: ensure JavaClassRef2>>resolveForVersionOf:or: chooses class specified by the reference - 83f90bb755e8: Marcel Hlopko, 2013-10-13 16:23 +0200: fix hierarchy reloading test so it is type safe. - 853c11fe1ce8: Marcel Hlopko, 2013-10-13 20:55 +0200: wire in requestRecompile sends - c62aa3987316: Marcel Hlopko, 2013-10-13 20:56 +0200: fix another field reloading tests - 36690c744edb: Marcel Hlopko, 2013-10-13 21:11 +0200: fix field visibility reloading text so surprising behavior is even more visible - and CALLING FOR HELP :) - 47083445aaf9: Jan Vrany, 2013-10-14 08:45 +0100: Merged 3680bdc3ef00 and 36690c744edb (Marcel's reloading fixes) - 095a83d77fe3: Jan Vrany, 2013-10-14 15:18 +0100: Added #creator for mixed exception handling. - ca49798e0a5d: Jan Vrany, 2013-10-14 19:11 +0100: More fixes for new naming scheme - cfd4ec1ffa22: Jan Vrany, 2013-10-14 23:17 +0100: Reverted back Marcel's change in JavaCompiler: pass plain Smalltalk string. - 7d803d440e44: Jan Vrany, 2013-10-14 23:18 +0100: Fix in JavaClassReloaderTests>>register: (send #binaryName instead of #name) - 10c0fcf2d304: Jan Vrany, 2013-10-14 23:29 +0100: Fix JavaClassReloader for new naming (#name -> #binaryName) - 3a85f55763e2: Jan Vrany, 2013-10-15 02:33 +0100: Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1) - af4e7f1dd33e: Jan Vrany, 2013-10-15 02:34 +0100: Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 3) - 192833bfdba1: Jan Vrany, 2013-10-15 15:30 +0100: Implemented stx.libjava.tools.environment.Environment.cleanup() - 3d942fb39104: Jan Vrany, 2013-10-15 15:31 +0100: Removed eclipse-runtime from stx:libjava/libs dependencies... - 7bd41088bd64: Jan Vrany, 2013-10-15 17:58 +0100: Fix in JavaCompiler>>#compile:register:notifying: (send #binaryName instead of #name) - c330ff3eb374: Jan Vrany, 2013-10-15 23:40 +0100: Fix in JavaClassReloader (recompilation) - 50b4916dd8d2: Jan Vrany, 2013-10-16 01:20 +0100: Fixes for Java method tracing/counting. - 916f3eedc505: Jan Vrany, 2013-10-16 09:09 +0100: Fix in JavaClassReloader - when updating class, also update attributes and annotations. - d92f88db7514: Jan Vrany, 2013-10-16 10:05 +0100: Improved JavaClassReader to read InnerClasses and MissingTypes attributes. - 1eaa3f10540b: Jan Vrany, 2013-10-16 10:48 +0100: Removed JavaSingleClassReloaderTests, tests merged in JavaClassReloaderTests. - 90724c4fa7f8: Jan Vrany, 2013-10-16 14:15 +0100: Fix to recompile erroneous classes upon reload. - 4b11c2089443: Jan Vrany, 2013-10-17 02:02 +0100: Removed obsolete tests... - b8187695c8cd: Jan Vrany, 2013-10-17 02:05 +0100: Added JavaMethod>>#interpretWithReceiver:arguments: - 948160ac3435: Jan Vrany, 2013-10-17 02:24 +0100: Fix in JavaCompiler>>#recompile: when recompiling, use class's original class loader. - 3ed529d88338: Jan Vrany, 2013-10-17 11:11 +0100: Recompilation fixed (avoid endless recursion) - 3084c43f20a1: Jan Vrany, 2013-10-18 16:54 +0100: Introduced GroovyScanner with support for Groovy-only tokens... - e62187297585: Jan Vrany, 2013-10-18 16:55 +0100: Fix in JavaSourceDocument - care for types with no method declarations - d8458cc3aabe: Jan Vrany, 2013-10-19 17:38 +0100: Make JavaVM>>#loadClassesIn: to work with .jar files as well. - 7bcde178eee7: Jan Vrany, 2013-10-20 00:07 +0100: Fix in JavaSourceHighlighter: do full highlighting for applications spawn from the debugger. - 5f7f5fca111a: Jan Vrany, 2013-10-21 08:31 +0100: Fix stx.libjava.tools.Source#getFileName(): always return a name to avoid NPE. - 83a135e3ef74: Jan Vrany, 2013-10-21 08:32 +0100: Call CompilationUnitDeclaration#analyseCde() to perform flow analysis... - a4c9642a6a67: Jan Vrany, 2013-10-21 10:39 +0100: Bugfix in JavaScannerBase>>:syntaxError:position:to: - raise ParseError. - dc03c9cd404a: Jan Vrany, 2013-10-22 00:07 +0100: Optimization in JavaLintService: cache language of the code view in an instvar. - 781c4bed22d0: Jan Vrany, 2013-10-22 03:44 +0100: Added JavaScannerBase>>#tokenName for compativility with smalltalk Scanner. - a284a338f355: Jan Vrany, 2013-10-22 14:57 +0100: Fixed a very. very nasty bug in wait(). - 64b02ee49807: Jan Vrany, 2013-10-22 18:50 +0100: Addes synchronization in JavaClass>>classInit. - 38bc44ad0f95: Jan Vrany, 2013-10-22 23:21 +0100: More fixes after Java class name refactoring. - 2f98edaf6aba: Jan Vrany, 2013-10-23 00:49 +0100: Removed JavaContext>>#argsAndVars - context inspector should show `this` as well. - 5b492b74975f: Jan Vrany, 2013-10-23 10:50 +0100: Bugfix in JavaMethod>>lineNumber (missing return) - a988e67e4dea: Jan Vrany, 2013-10-23 12:25 +0100: Fix in native java.lang.Class#forName0() - 96f3d8a73343: Jan Vrany, 2013-10-24 23:19 +0100: Fixed JavaLintService>>#unregister - break dependencies when unregistering - 60ed1d160ea5: Jan Vrany, 2013-10-26 17:56 +0100: Fix in JavaClassReloader - ignore non-Java methods when recompiling users of removed method. - 80bc02e62077: Jan Vrany, 2013-10-26 18:05 +0100: - JavaClassReloader - 272f9a99e3db: Jan Vrany, 2013-10-26 21:29 +0100: Fix in JavaSourceHighlighter::Indexer - allow for null variable binding. - 75e3fb8a615f: Jan Vrany, 2013-10-27 09:43 +0000: Fix in JavaSourceHighlighter>>doLexicalHighlightingOnly: care for window groups with no main view - 70df89fe0af0: Jan Vrany, 2013-10-27 10:28 +0000: Fix in JavaSourceDocument>>#initializeSourceRefsInMethods - 20d65bcdae80: Jan Vrany, 2013-10-28 10:42 +0000: Refactored JavaObject>>#doesNotUnderstand: refacttored to provide better UX in debugger - 1dbc311e1d74: Jan Vrany, 2013-10-28 11:29 +0000: Bugfix JavaClassReloader: handle missing/mis-spelled classes. - 894e894aa511: Jan Vrany, 2013-10-28 11:39 +0000: Fix in JavaClassReloader>>updateOldClass: update old method only if class of the method is the same. - edaa0c80646e: Marcel Hlopko, 2013-10-28 15:36 +0100: fix JavaBehavior>>hasMultipleVersions - 21a756977e9f: Marcel Hlopko, 2013-10-28 15:37 +0100: add Java reloading tests - fields in parent, GCing unused class versions - ec6e8825f168: Jan Vrany, 2013-10-31 07:53 -0300: Fix in stx.libjava.tools.text.Highlighter: do not try resolve fields when binding is null. - b7070e447ed0: Jan Vrany, 2013-11-05 17:52 +0000: Fixes for displaying local variables in debugger. - 89c09ec6e109: Jan Vrany, 2013-11-06 23:31 +0000: Fix for JavaTestsLoader (after JavaClass>>name refactoring) - 8005b7c3e51a: Jan Vrany, 2013-11-06 23:33 +0000: Fix in stx.libjava.tools.text.Highlighter: do not try resolve QualifiedNameReference when binding is null - 3a7d18c7fe40: Jan Vrany, 2013-11-06 23:40 +0000: Merged 8005b7c3e51a and 21a756977e9f - 3dd946439657: Jan Vrany, 2013-11-07 18:48 +0000: Fix in JavaClass>>#javaUnwrap: care for nil/null. - 503761e88b38: Jan Vrany, 2013-11-08 10:11 +0000: Fixes for Mauve tests. - 064418faa2e3: Jan Vrany, 2013-11-11 09:48 +0000: Another pass over Mauve tests. - 2fae1fd966be: Jan Vrany, 2013-11-11 17:27 +0000: Added JavaRelease>>system which uses default system Java installation. - f6e83cfb4d0f: Jan Vrany, 2013-11-11 21:20 +0000: Added natives required by OpenJDK 7, update 25. - 69560c0ea583: Jan Vrany, 2013-11-11 21:32 +0000: Oops, fix in JavaNativeMethodImpl_OpenJDK6>>invoke:receiver:arguments:context:constructor: - a38c23f77e42: Jan Vrany, 2013-11-11 22:05 +0000: Fixed native java.io.*FileSystem#createFileExclusively - 7d69859368db: Jan Vrany, 2013-11-11 22:33 +0000: Oops, fixed mispelled arg name in JavaNativeMethodImpl_OpenJDK6. - 1f4c3054998c: Jan Vrany, 2013-11-12 01:31 +0000: Native java.lang.Object#clone() refactored to use ACX_CLOENABLE flag. - ac252847cc04: Jan Vrany, 2013-11-12 02:14 +0000: Oops, fix in isCloneable - if ACX_CLONEABLE is not set, always check interfaces. - 3d8a63dbf6dd: Jan Vrany, 2013-11-12 11:17 +0000: Oops, fix for JavaClass>>isCloneable - handle subclasses of a class that implements Cloneable. - e634189c444e: Jan Vrany, 2013-11-13 11:13 +0000: Another pass over java.io.* natives. Fixes for OpenJDK 7. - e2fc5ead5542: Jan Vrany, 2013-11-14 01:25 +0000: Fix in Float/LargeInteger>>javaBox: - d4ef0fe45599: Jan Vrany, 2013-11-14 12:06 +0000: Fix in JUnitTestCaseProxy>>#testSelectors. - 36e0682339ed: Jan Vrany, 2013-11-14 23:24 +0000: Fixed natives to convert float/double to int/long bits and other way around... - 85ccd41f883c: Jan Vrany, 2013-11-14 14:50 -0800: Fixes and (void) natives for shared-memory JDI transport. - 9fd2ea0570fe: Jan Vrany, 2013-11-15 11:01 +0000: Merged 36e0682339ed and 85ccd41f883c - 0be6bc618029: Jan Vrany, 2013-11-15 15:17 +0000: When accessing Java source in .har, try uncompress it using ZipArchive first... - 0479c114bcc0: Jan Vrany, 2013-11-15 22:39 +0000: Merged 9fd2ea0570fe and 0be6bc618029 - a77c05c8cd68: Jan Vrany, 2013-11-15 23:00 +0000: Fix in JavaVM for exception debugging. - 223fb480e1fb: Jan Vrany, 2013-11-15 23:01 +0000: Fix for OpenJDK7 native _java_util_zip_ZipFile_getEntryBytes:_: _: _: - b8295c72dd53: Jan Vrany, 2013-11-18 14:00 +0000: Added tests for FREM/DREM and ?AND and ?OR. - 08a14f3553a2: Jan Vrany, 2013-11-18 14:53 +0000: Fix in JavaVM>>#unpark: (typo) - b919ffd3d2a6: Jan Vrany, 2013-11-18 22:08 +0000: Fixed classpath for stx:libjava/libs eclipse project (removed obsolete libs) - 8c690545a18d: Jan Vrany, 2013-11-18 23:04 +0000: Fix in JavaCodeLibrary>>classPathOn: - allow for sources-only libraries. - e215dba1f0fb: Jan Vrany, 2013-11-18 23:07 +0000: Fix in JavaClassReader for concurrent access to zipa archives. - 54787b966373: Jan Vrany, 2013-11-18 23:08 +0000: Added Java code bundle with Tomcat sources to ease debugging. - 7c556b58cd4b: Jan Vrany, 2013-11-19 00:44 +0000: Fixes in ApacheTomcat6 (misspelled class name) + build files regenerated - 969166ba9c7c: Jan Vrany, 2013-11-19 00:45 +0000: Merged 7c556b58cd4b and 08a14f3553a2 - 1fc9ae49376d: Jan Vrany, 2013-11-19 00:46 +0000: Merged 969166ba9c7c and 54787b966373 - 7a439bd8ae5b: Jan Vrany, 2013-11-19 10:01 +0000: Added JavaCompilerForSmalltalkExtensionsOnly for environments without full JavaCompiler... - 65d127f0c9c1: Jan Vrany, 2013-11-19 10:20 +0000: Fix in interop - make sure the class is initialized when invoking static method. - c464794e5fa2: Jan Vrany, 2013-11-19 11:29 +0000: Added signal handlers to ApacheTomcat6 startup class. - 3f4853b3c30d: Jan Vrany, 2013-11-20 10:00 +0000: Calls to fdlim functions embedded into natives, JavaMathSupport removed. - 451954b79f93: Jan Vrany, 2013-11-20 10:42 +0000: Fixes for Tomcat 6 startup. - c342efcd1bcb: Jan Vrany, 2013-11-20 16:13 +0000: Oops, added missing class JavaCompilerForSmalltalkExtensionsOnly. - c39cbf09ea3d: Jan Vrany, 2013-11-20 16:40 +0000: Fixes for Java reflection on Smalltalk classes. - cc9cf6c073bd: Jan Vrany, 2013-11-20 16:41 +0000: Merged c342efcd1bcb and c39cbf09ea3d - d0b831020baa: Jan Vrany, 2013-11-20 17:31 +0000: Fixes for Tomcat example: allow Workspace WEBAPP to run without JavaScript loaded. - 98971af93e31: Jan Vrany, 2013-11-20 23:45 +0000: Fix in JavaVM>>#initializeSystemPropertiesInto: be careful when initializing stx.libjava.tests... - 5f8f0ac505a5: Jan Vrany, 2013-11-22 10:33 +0000: Fix in JavaClassReader>>#readClass:from:ignoring: (fix wrong code for zar refcounting) - e5fc3aaad7a2: Jan Vrany, 2013-11-23 10:19 +0000: Build support files for tomcat6 laucnher fixed - af30789878ce: Jan Vrany, 2013-11-26 21:19 +0000: Temporary class loading race-condition workaround. - 448a12efa893: Jan Vrany, 2013-11-26 21:21 +0000: Fix in Mauve DoubleTest. - ec1be126d72e: Jan Vrany, 2013-11-26 23:04 +0000: Fixes in Java source highlighting - boot Java if not already. - 590fd4bf22a8: Jan Vrany, 2013-11-27 00:29 +0000: Hack in JavaSourceHighlighter for JImport expecco plugin. - ff6465e92d95: Jan Vrany, 2013-12-03 00:17 +0000: Flush JavaClassRegistry's notifier when flushing classes. - 7c542571c7c1: Jan Vrany, 2013-12-03 00:37 +0000: Added interop tests for constructors. - f5b13d9b249b: Jan Vrany, 2013-12-03 01:14 +0000: Added all stubs for native methods from recent OpenJDK 6. - 55692310d4e6: Jan Vrany, 2013-12-06 22:10 +0000: Fix in JavaVM>>monitorEnter:in: inflate thinlock using #getMonitor. - 17be352f0130: Jan Vrany, 2013-12-08 00:41 +0000: Added lockWord to JavaBehavior to enable thinlocking for static methods and resolver. - 02b58c7079ac: Jan Vrany, 2013-12-08 22:36 +0000: Added JavaObject>>synchronized: and JavaClass>>synchronized: - bbd626006ab0: Jan Vrany, 2013-12-09 23:52 +0000: Access to ZipEntryCache synchronized to avoid races. - 3e837849ce3e: Jan Vrany, 2013-12-10 10:46 +0000: Bugfix: fixed premature freeing of zip entry causing zip entry. - d133d35e293b: Jan Vrany, 2013-12-10 22:33 +0000: Class loading refactoring (part 1) - 86e181f74199: Jan Vrany, 2013-12-10 23:04 +0000: Class loading refactoring (part 2) - 83d32dc4fcea: Jan Vrany, 2013-12-10 23:20 +0000: Class loading refactoring (part 3) - 2397022c7057: Jan Vrany, 2013-12-12 15:30 +0000: Bugfix in JavaRelease::OracleJDK7>>validateJavaHome2: - 7c3b2a89f173: Jan Vrany, 2013-12-18 00:02 +0100: Use system class loader when loading class for JavaClassAccessor. - bac7022ca26a: Jan Vrany, 2013-12-18 12:03 +0100: Merged 7c3b2a89f173 and 80a1a085a982 (branch performance-optimizations) - afd174546057: Jan Vrany, 2013-12-18 14:52 +0100: Post-merge fixes. - 8ffaaa45f964: Jan Vrany, 2013-12-23 22:49 +0100: Fix in Java>>flushClasses: do not use Smalltalk>>removeKey: - d4963adcb114: Jan Vrany, 2013-12-23 22:59 +0100: Added JavaClass>>synchronized: that uses thinlocks. - 38f0943c97a4: Jan Vrany, 2013-12-23 23:14 +0100: Fix in JavaRef2>>#resolve: resolving is now synchronized on class. - c9408352a572: Jan Vrany, 2014-01-07 13:44 +0100: Fix in JavaClass>>#perform:onReceiver:from:ifNotFound: pass selector/sender when evaluatinh method using Method>>valueWith:... - a44d1fa11204: Jan Vrany, 2014-01-14 09:49 +0000: Fix in JavaSourceHighlighter>>#formatClassDefinition:in: - care for formatting class side... - 3d6c08acf4cd: Jan Vrany, 2014-01-18 11:43 +0000: Fixed native #_sun_reflect_Reflection_getCallerClass:_: to work with new JIT compilation scheme. - 64ec2085e797: Jan Vrany, 2014-01-18 21:42 +0000: Better printOn: / printString: fpr JavaMethodRef2 - 36b5b06398b5: Jan Vrany, 2014-01-18 21:44 +0000: Fix in ByteArray>>_CHECKCAST:/_INSTANCEOF: (typo/copy paste error) - ec1f7113fac0: Jan Vrany, 2014-01-18 21:47 +0000: Added _INVOKE*R: methods used by new JIT compiler. - a384a02381c0: Jan Vrany, 2014-01-20 14:04 +0000: Update JavaLookup to work with new JIT-compilation scheme... - c3005d991df7: Jan Vrany, 2014-01-20 14:06 +0000: JavaRef2>>invalidate/invalidateForClass: moved from experiments to stx:libjava - f44a7499454b: Jan Vrany, 2014-01-20 15:11 +0000: Added _GETFIELD_R:_:/ _GETSTATIC_R: / _PUTFIELD_R:_:_: / _PUTSTATIC_R:_: (used by new JIT code) - c69ab7aefc53: Jan Vrany, 2014-01-20 23:08 +0000: Fixed _GETSTATIC_R: / _PUTSTATIC_R: - initialize class if not already. - 604d4f079e66: Jan Vrany, 2014-01-21 11:28 +0000: Fix in JavaClass>>basicNew initialize class if not already. - 5c86c719a79b: Jan Vrany, 2014-01-21 14:44 +0000: Fix in JavaLookup::Smalltalk2Java: match Unicode16/32String to java.lang.String when calling Java method from Smalltalk. - 673487527490: Jan Vrany, 2014-01-22 15:02 +0000: Fix in JUnitTestCaseProxy>>performTest. - 3947e2e8f8d9: Jan Vrany, 2014-01-22 15:28 +0000: Added new native JavaNativeMethodImpl_OpenJDK6>>#_java_lang_Class_getDeclaringClass0: - 3f59f05b601e: Jan Vrany, 2014-01-23 16:16 +0000: Added tests from GETFIELD/PUTFIELD and INVOKE*. - 369b56b7f766: Jan Vrany, 2014-01-23 23:10 +0000: Merged 3f59f05b601e and 64ec2085e797 - 6b521f99c43b: Jan Vrany, 2014-01-27 14:00 +0000: Moved JavaCompilerTests to stx:libtool. - 1badaa4fa024: Jan Vrany, 2014-01-28 11:23 +0000: Added support for new MULTIANEWARRAY implementation. - ed6c057accab: Jan Vrany, 2014-01-28 11:23 +0000: Added tests for MULTIANEWARRAY instruction - 593add70a2cd: Jan Vrany, 2014-01-28 14:43 +0000: Added _MULTIANEWARRAY* methods to suppott new MULTIANEWARRAY implementation. - 21011804a910: Jan Vrany, 2014-01-29 17:27 +0000: Fixed _GETFIELD_R: / _PUTFIELD_R: to throw NPE when an object is nil. - c45e84ee0baf: Jan Vrany, 2014-01-30 23:40 +0000: Fix in method ref: initialize class if not already, removed breakpoints... - 732f9db2a195: Jan Vrany, 2014-01-31 09:19 +0000: Cleanup & refactoring of constant pool references (JavaRef2 hierarchy) - ed8cd8e5a16d: Jan Vrany, 2014-01-31 12:41 +0000: Added JavaBooleanArray to represent boolean[]. - 53644e5c7d2b: Jan Vrany, 2014-01-31 17:17 +0000: Rename __ACC_BREAKPNT to __ACX_BREAKPNT, there's no such constant in JVM spec. - 4f0cd5c93d1b: Jan Vrany, 2014-02-03 09:25 +0000: Fixed some java.io.WinNT/Win32FileSystem natives. - 7472dbd72ef7: Jan Vrany, 2014-02-05 09:08 +0000: Fixed native _java_net_Inet4AddressImpl_lookupAllHostAddr:_: - 7702920fa03a: Jan Vrany, 2014-02-05 14:01 +0100: Added tests for reflection on arrays. More tests for shift instructions. - 220f5d25933a: Jan Vrany, 2014-02-05 15:13 +0100: Merged 7702920fa03a and 1badaa4fa024 - fe87c228905c: Jan Vrany, 2014-02-05 15:22 +0100: Merged 220f5d25933a and 7472dbd72ef7 - 08d798b4ef80: Jan Vrany, 2014-02-05 16:26 +0100: Added run-all.rb scrip to run all tests on several different configurations - a80a2d7fc0e1: Jan Vrany, 2014-02-05 16:28 +0100: Added XMPP Chat example (shown at Smalltalks 2013) - c1ec15d94457: Marcel Hlopko, 2014-01-25 21:35 +0100: fix javaHome for oracle-7 - c9f0019485ff: Marcel Hlopko, 2014-01-25 21:47 +0100: get rid of old mh breakpoint - 659fb25645b0: Marcel Hlopko, 2014-01-26 17:15 +0100: fix constant pool content tests - 394676d5c68e: Marcel Hlopko, 2013-12-12 16:42 +0100: fix typo in JavaRelease - c1c82d3baae7: Jan Vrany, 2014-02-06 10:38 +0100: Use Ant+Ivy instead of Maven to download libraries in stx:libjava/libs - 8fcf6cde056e: Jan Vrany, 2014-02-06 10:45 +0100: Merged c1c82d3baae7 and 394676d5c68e - 414e6567b574: Jan Vrany, 2014-02-06 10:48 +0100: Merged 8fcf6cde056e and 659fb25645b0 - 024e71f1142e: Jan Vrany, 2014-02-06 11:10 +0100: Merged Claus's Java release definition for OS X into JavaRelease::AppleJDK6. - 8b3f1f16a660: Jan Vrany, 2014-02-06 14:06 +0100: Fix in JavaRelease::AppleJDK6 - removed JavaVMData pool - 7ff48afbef00: Jan Vrany, 2014-02-07 09:07 +0100: Fixes in natives for non-TRADITIONAL_STACK machines. - c04668cd040d: Jan Vrany, 2014-02-07 09:49 +0100: Natives cleaned up a bit. - e7c286435bfe: Jan Vrany, 2014-02-11 16:29 +0000: Fixed tests'run-all.rb to run under Windows as well. - 39a55d1baeff: Jan Vrany, 2014-02-11 20:21 +0000: Yet another cleanup of java.io.FileSystem mess. - 506844f3740e: Jan Vrany, 2014-02-11 21:52 +0000: Reduced dimensions on MULTIANEWARRAY#test_incomplete_02 to avoid 2-pass compressing GC. - 31dc5184bf9a: Jan Vrany, 2014-02-12 10:30 +0000: Workaround in JavaRelease::OpenJDK7>>searchForSourcePath for Debian boxes. - 93a610491bf8: Jan Vrany, 2014-02-12 11:10 +0000: Fixes in java.io,Win32FileSystem - added listDrives0() native. - e2137bf62524: Jan Vrany, 2014-02-12 12:39 +0000: Fix in JUnit/TestletTestCaseProxy. - 2efe1601724c: Jan Vrany, 2014-02-12 15:37 +0000: Merged 31dc5184bf9a and e2137bf62524 - aed7115ce6e8: Jan Vrany, 2014-02-12 20:47 +0000: Fix in JavaRelease::OpenJDK6>>searchForSourcePath. - 3bc512cb6649: Jan Vrany, 2014-02-12 21:28 +0000: Branch development merged into default. - f17a68612f53: Jan Vrany, 2014-02-13 08:54 +0000: Fake-merged bdf545540de0 into 3bc512cb6649 to get rid of second head. - 5f69bed172fe: Jan Vrany, 2014-02-17 15:22 +0100: Fix in JavaRelease::AppleJDK6 - should be available only on OS X. - 590aa6c3cb24: Jan Vrany, 2014-02-19 10:21 +0000: Improvements and fixes in GroovyEvaluator. - b5001e1fb06c: Jan Vrany, 2014-02-20 22:54 +0000: More compatibility extensions for java.util.List - a7a3fdc9d6b7: Jan Vrany, 2014-02-25 17:01 +0000: Fixes in java.util.List>>indexOf: & identityIndexOf: - 36a4e9ab4d00: Jan Vrany, 2014-03-04 13:36 +0000: Skip all workspace tests in GroovyEvaluatorTests when there's no display connection... - 66e0970661db: Jan Vrany, 2014-03-04 17:03 +0000: Removed #preRequisites, build files regenerated. - 366b8f64dc45: Jan Vrany, 2014-03-07 00:20 +0000: Eclipse projects updated. - 31ddc9aa291d: Jan Vrany, 2014-03-18 11:32 +0100: Fix in JavaRelease>>system for UNIX-like systems. - e924b175ca61: Jan Vrany, 2014-03-19 11:12 +0000: Added ThreadStopTests to tests execution abortion. - ff90519ce3ac: Jan Vrany, 2014-03-19 11:48 +0000: Interop tests refactoring. - 7a326f9f8aad: Jan Vrany, 2014-03-19 17:44 +0000: Bug fix in interop with respect to overloaded methods in subclasses. - 40beb6dad64f: Jan Vrany, 2014-03-20 14:13 +0000: Eclipse projects cleanup - b25792751803: Tomáš Heger, 2014-03-19 05:32 +0100: First implementation of ClassFileScanner. - 135c3202c5b7: Tomáš Heger, 2014-03-19 23:43 +0100: ClassFileScanner fixed, tests added. - 08238e0175ae: Tomáš Heger, 2014-03-20 10:52 +0100: Major version number verifying added. - f08a8f57d43b: Jan Vrany, 2014-03-20 14:39 +0000: Merged 08238e0175ae and 40beb6dad64f (Tom's ClassFileScanner) - 3ac5c037b13d: Jan Vrany, 2014-03-20 14:43 +0000: Fixed stx.libjava.tools.compiler.CompilerError initialization problem. - 74535b57b370: Jan Vrany, 2014-03-21 13:25 +0000: Make internal JVM processes to form a new provess group on Smalltalk VM level. - 033e56844dc9: Jan Vrany, 2014-03-25 15:36 +0000: Fixes to for JDI debugger. - d23f94ac7fd5: Jan Vrany, 2014-03-31 12:05 +0200: Made non-ASCII literals encoded using \uXXXX rather than using direct UTF8 in .java sources. - 36df3896ac57: Jan Vrany, 2014-04-01 13:41 +0200: Fixed JavaReleaser>>JDK6/JDK7 - eae56960a120: Jan Vrany, 2014-04-01 14:40 +0200: Oops, fixed syntax error (missing dot) - 642c961ea130: Jan Vrany, 2014-04-02 16:19 +0200: Fix in JavaRelease::SunJDK122. - 7e5ad1b76629: Jan Vrany, 2014-04-03 12:38 +0200: Initial stubs for Java 8 - 10b7a8f2e23c: Jan Vrany, 2014-04-03 21:00 +0200: Change JavaRelease to use output of `java -version` when validating Java installation directory. - fd92dea7b142: Jan Vrany, 2014-04-04 13:10 +0200: Bugfix in JavaVM>>initializeVM: do not deadlock caller if VM initialization failed. - cec6d766280e: Jan Vrany, 2014-04-08 09:34 +0200: Workaround for JAVA NameSpace (from Java bridge) vs JAVA JavaPackage (from STX:LIBJAVA) - ccf0bb9b983b: Jan Vrany, 2014-04-08 14:59 +0200: JavaRelease>>inDirectory refactored to not hard-code relative paths to java executable within JRE/JDK. - 824804a0ae03: Jan Vrany, 2014-04-08 16:28 +0200: Added extension java.util.Collection#anElement - f252b6759c9e: Jan Vrany, 2014-04-08 19:16 +0200: Fixed DNU in JavaReleaseTests - d64f0b5cc383: Jan Vrany, 2014-04-09 08:37 +0200: Oops, fixed condition in skipIf: in JavaReleaseTests - a3f6e540a232: Jan Vrany, 2014-04-09 10:00 +0200: Keep source along with parse tree index. - 3ac1f611b373: Jan Vrany, 2014-04-09 14:30 +0200: Fixes in GroovyLanguage - fcbadfecc4d7: Jan Vrany, 2014-04-09 17:14 +0200: Updated Groovy to 2.1.1. Download Groovy and JUnit using IVY. - dd7f7a54107b: Jan Vrany, 2014-04-09 17:29 +0200: .hgignore improved - 8c0339f8c175: Jan Vrany, 2014-04-09 18:41 +0200: Fixes for groovy. - 4bbacafb9592: Jan Vrany, 2014-04-09 18:54 +0200: Renamed JavaClassRegistry>>classesDo: to allClassesDo: - a65f7a72b3bf: Jan Vrany, 2014-04-09 21:53 +0200: JavaCodeBundle>>standardPackageBundleFor: improved - a29506c02dcc: Jan Vrany, 2014-04-10 09:04 +0200: Minor fixes in start/stop position for local/type declaration nodes. - 3f6f3b935c17: Jan Vrany, 2014-04-10 10:10 +0200: Fixed unimplemented native java.lang.reflect.Array.get() - 7145c825db68: Jan Vrany, 2014-04-10 15:39 +0200: More work on java.lang.reflect.Array natives. - f22d5febda61: Jan Vrany, 2014-04-11 18:20 +0200: Introduced a JavaClassEnvironment - an abstract namespace-like class to keep Java classes. - 7c91a4227264: Tomáš Heger, 2014-04-04 11:38 +0200: Added the ".metadata" directory. - a6feb6da5718: Tomáš Heger, 2014-04-14 11:34 +0200: Initial implementation of a dumper of IBinaryType objects. - 92d7ca788f14: Tomáš Heger, 2014-04-14 11:35 +0200: Initial (and incomplete) implementation of Reflective* classes. - 642396977525: Tomáš Heger, 2014-04-14 12:09 +0200: Various fixes (including Honza's) regarding Reflective* classes. - a60e7d264dc2: Tomáš Heger, 2014-04-14 13:27 +0200: Unused code commented out. - db83cc770144: Tomáš Heger, 2014-04-14 13:37 +0200: Returning correct names fixed. - 7cb0df30d317: Tomáš Heger, 2014-04-14 14:38 +0200: test_06 fixed - f44978fc1abd: Jan Vrany, 2014-04-15 13:51 +0200: Added #hash and #= to JavaCodeLibraryOrBundle. - 718746a2ac28: Claus Gittinger, 2014-04-13 16:53 +0200: - JavaRelease - 76a10700c053: Claus Gittinger, 2014-04-15 01:04 +0200: - JavaObject - aa8989bbd454: Claus Gittinger, 2014-04-15 01:08 +0200: - JavaNativeMethodImpl_OpenJDK6 - eba90d210e65: Claus Gittinger, 2014-04-15 01:21 +0200: - JavaNativeMethodImpl_OpenJDK6 - 375c8ea59bad: Jan Vrany, 2014-04-15 19:01 +0200: Merged f44978fc1abd and eba90d210e65 - df5a76fdd3a6: Jan Vrany, 2014-04-15 22:22 +0200: Changed display string of JavaRelease. - e35f2fac0337: Jan Vrany, 2014-04-16 08:59 +0200: Improved JavaCodeBundle>>standardPackageBundleFor: to support layout with separated tests... - 4fbf1e915fdd: Claus Gittinger, 2014-04-16 14:28 +0200: - GroovyEvaluator - 51c43574dc90: Claus Gittinger, 2014-04-16 15:57 +0200: - JavaRelease - 99f84ab46898: Claus Gittinger, 2014-04-16 18:27 +0200: - JavaNativeMethodImpl_OpenJDK6 - ccde6af7278c: Claus Gittinger, 2014-04-16 18:53 +0200: JavaContext: - 88ad88fdeca5: Jan Vrany, 2014-04-16 19:32 +0200: Merged df5a76fdd3a6 and ccde6af7278c - 54211576c9ce: Claus Gittinger, 2014-04-16 20:14 +0200: JavaClassRef2: - 08ec1ceb01e7: Claus Gittinger, 2014-04-16 21:17 +0200: JavaLanguage: - 78e1d19eb584: Jan Vrany, 2014-04-17 07:45 +0200: Fixed JavaCompiler>>synchronizationSemaphore. - 9d79b824c1ad: Claus Gittinger, 2014-04-17 10:13 +0200: JavaRelease: - 7eef27e37553: Jan Vrany, 2014-04-17 11:56 +0200: Fixed path to Groovy jars in ant build files. - 35b8520c46f2: Jan Vrany, 2014-04-17 12:53 +0200: Oops, more fixes to ant build files. - 7bb1f4106033: Jan Vrany, 2014-04-17 16:20 +0200: Cherry-picked changes from 35b8520c46f2. - c49c94053695: Jan Vrany, 2014-04-17 16:34 +0200: Moved CompilerAdapterTests.java to tools/java/src-tests. - 5d7c92ab734b: Jan Vrany, 2014-04-17 20:16 +0200: Fixed JavaRelease class>>system - 388adc0de925: Jan Vrany, 2014-04-22 16:32 +0200: Fix in JavaClassEnvironment>>at:ifAbsent: - b1192955f5a3: Jan Vrany, 2014-04-22 22:37 +0200: Fixed native _java_lang_ClassLoader_defineClass1: _: _: _: _: _: _: _: - 158c061202f3: Jan Vrany, 2014-04-22 22:41 +0200: Merged 388adc0de925 and b1192955f5a3 - c37c50e0aa5a: Jan Vrany, 2014-04-27 21:00 +0100: Fix in containsMethodsAnnotatedWith: - do not compare binary names, compare superclasses - ebf6ad1545af: Claus Gittinger, 2014-04-30 20:29 +0200: source code access fixed for apple: - 19a2b75907ce: Claus Gittinger, 2014-04-30 22:02 +0200: new native - cf2d8949d5a5: Jan Vrany, 2014-05-05 10:10 +0100: Better coding style of JavaClass/JavaBehaviour>>setInterfaces: - 446b34b9a386: Jan Vrany, 2014-05-12 17:34 +0100: Fixed GroovyScanner w.r.t ''' multiline comments. - c0d467b37565: Jan Vrany, 2014-05-13 11:49 +0100: Changed supeclass of JavaClassEnvironment to SystemEnvironment. - a7d69709920f: Jan Vrany, 2014-05-14 00:07 +0100: Use lexical highlighting when JVM is not booted. - c4709bcca97a: Jan Vrany, 2014-05-14 16:36 +0100: Bugfix in JavaScanner - correctly handle dot a the end of input. - 7cc116da75e8: Jan Vrany, 2014-05-18 13:11 +0100: Added 'def' to keywords. - e53888146940: Jan Vrany, 2014-05-20 17:57 +0100: Added support for new constants used bu JSR 272 Invoke dynamic. - d1d41053a1c8: Jan Vrany, 2014-05-21 11:22 +0100: Mark all classes in stx:libjava/benchmark as obsolete. - 6d8f66f1ff39: Jan Vrany, 2014-05-21 16:56 +0100: [Class reader optimization 1/3]: Added JavaBenchmarkClassReader - 2c747ca6078d: Jan Vrany, 2014-05-21 17:10 +0100: [JavaClassReader optimization 2/3]: add methods at once instead of individually. - 3119ced5d03c: Jan Vrany, 2014-05-21 21:08 +0100: [JavaClassReader optimization 3/3]: optimize JavaMethod>>setName:descriptor: - b442904eec25: Jan Vrany, 2014-05-23 22:26 +0100: Moved Context>>arg1Index to stx:libbasic. - 1f8c991bc1d2: Jan Vrany, 2014-05-27 12:49 +0100: Variaous optimizations in string manipulatios to speed up class reading. - 3cdcaf15c918: Jan Vrany, 2014-05-27 13:18 +0100: Merged 1f8c991bc1d2 and b442904eec25 - 819926f83b48: Tomáš Heger, 2014-04-14 15:46 +0200: Occurences of "assertTrue(false)" replaced by "fail()" in the tests. Useless catch block removed from test_06. - 3e12320cb6c7: Tomáš Heger, 2014-05-22 02:01 +0200: Fields, annotations and tag bits implemented. - 54d901dba381: Tomáš Heger, 2014-05-22 03:25 +0200: Generic signature dumping fixed (wrong use of the delimiter). - 84a135e483a6: Tomáš Heger, 2014-05-27 16:34 +0200: Added testcase for the ReflectiveField.getConstant() method. - d73feaf2aecc: Tomáš Heger, 2014-05-27 16:37 +0200: ReflectiveField.getConstant() implemented. It's not working yet though - any attempt to get value of a field throws IllegalAccessException. - 6451ff1e43cf: Tomáš Heger, 2014-05-27 16:55 +0200: Anonymous inner classes aren't being returned by the ReflectiveType.getMemberTypes() method anymore. - 2720184478b7: Jan Vrany, 2014-05-30 08:55 +0100: Fix in ReflectiveField.getConstant() - make field accessible if it is not. - e4470b7efc3b: Jan Vrany, 2014-05-30 09:03 +0100: Made ReflectiveField.getConstant() return always NotAConstant. - b63dbae22813: Jan Vrany, 2014-05-30 09:04 +0100: Moved CompilerAdapterTests to from src to src-tests - ba69147aea97: Jan Vrany, 2014-06-02 14:54 +0100: Better error message for VM-thrown ArrayStoreException. - e4b35ecfc645: Jan Vrany, 2014-06-02 14:58 +0100: Oops. remove Context>>arg1Index from extensions list. - c09dc2c6937b: Jan Vrany, 2014-06-02 16:38 +0200: Fix in JavaRelease - correctly detect OpenJDK6 on Linux. - ffe44966a226: Jan Vrany, 2014-06-02 15:56 +0100: Merged e4b35ecfc645 and c09dc2c6937b - 546aadb1fee1: Jan Vrany, 2014-06-02 18:30 +0200: Implemented sun.net.PortConfig.getLower0/getHigher0 natives. - b4fa505f93c5: Jan Vrany, 2014-06-04 09:52 +0100: Increated timeout for JUnit/Testlet tests. - 93cf25f66530: Jan Vrany, 2014-06-04 10:30 +0100: Do not create JavaClassAccessor for `JAVA java lang Object`-style class references. - cc0ea0656186: Jan Vrany, 2014-06-12 12:12 +0100: Fixed bug #77: Ignore unhandled ThreadDeath exceptions. - c1a47c6796fc: Jan Vrany, 2014-06-12 16:07 +0100: Increated per-process stack size limit for Groocy 2.x.x - 81791eb890eb: Jan Vrany, 2014-06-13 08:43 +0100: Bugfix in GroovyEvaluator: properly wrap primitive values. - 553b1c08b6b1: Jan Vrany, 2014-06-13 15:46 +0100: Bugfix in JavaLintService>>unregister: call super unregister at the end of the unregister method. - 012cc8eddb86: Jan Vrany, 2014-06-25 11:03 +0100: Use Semaphore>>waitWithTimeoutMs:state: instead of copy'paste version of waitWithTimeoutMs: - 4eaeba9fa910: Jan Vrany, 2014-06-25 13:58 +0100: Java source highlughter refactoring. - 72765a504e7c: Tomáš Heger, 2014-06-03 22:13 +0200: Removed unused imports. - a0139792a8cd: Tomáš Heger, 2014-06-03 22:17 +0200: Methods usable to actually dump IBinaryTypes added to IBinaryDumper -> it's executable now. Output directory is expected as the first argument, names of the classes to be dumped as the following arguments. - f25781926cca: Tomáš Heger, 2014-06-24 00:53 +0200: IBinaryDumper modified so it can dump classes from jar files. It accepts an arbitrary number of parameters - the first one is supposed to be a directory used for output and the rest are supposed to be class names and/or jar files. - e7b9ceda9923: Jan Vrany, 2014-07-02 17:53 +0100: Make ReflectiveType#getSuperclassName() to return java.lang.Object for interfaces. - fb9e5936daec: Jan Vrany, 2014-07-02 17:58 +0100: Do not dump properties known to differ for ReflectiveType and ClassReader by default. - 490a1b914f93: Jan Vrany, 2014-07-02 23:09 +0100: Renamed IBinaryDumper to BinaryDumper as I prefix denotes interface. - ade0060d3c12: Jan Vrany, 2014-07-08 12:55 +0100: Added tag expecco_2_7_0 for changeset 4eaeba9fa910 - ee329fef15db: Jan Vrany, 2014-07-10 13:54 +0100: Merged 490a1b914f93 and e35f2fac0337 - 2f2937ea3f03: Jan Vrany, 2014-07-10 16:48 +0100: Merged ade0060d3c12 and ee329fef15db - defac61e541c: Jan Vrany, 2014-07-07 23:48 +0100: stx.libjava.tools.environment.Environment.java cleanup. - 4dbc3b22d078: Jan Vrany, 2014-07-08 00:16 +0100: Fix in Environment#isPackage() - conservatively return true. - 04c5d3e67c13: Jan Vrany, 2014-07-11 16:42 +0100: Fixed ReflectiveMethod#getGenericSignature() for constructors. - e683134b3617: Jan Vrany, 2014-07-11 16:44 +0100: BinaryDumper improvements - 3aa14b90dacd: Jan Vrany, 2014-07-15 13:07 +0100: Removed code for flushing shared compiler Environment. - f041babfda85: Claus Gittinger, 2014-05-09 15:06 +0200: fixed apple-jdk searchForSourcePath (should return strings, - 7f36435f79c9: Claus Gittinger, 2014-05-29 13:12 +0200: comment characters - 36bab0a3c02b: Claus Gittinger, 2014-05-29 13:14 +0200: comment strings - f9fe8892084a: Claus Gittinger, 2014-05-29 20:31 +0200: comment strings - e8002e2c2fd9: cg, 2014-07-10 16:34 +0200: no message - a37928cf9a1b: cg, 2014-07-10 16:45 +0200: Merge - 47fda38729e0: Claus Gittinger, 2014-07-10 16:46 +0200: merge - 8f159d8e0749: Claus Gittinger, 2014-07-10 16:47 +0200: merge - b95b1843ab38: Claus Gittinger, 2014-07-18 18:30 +0200: filename vs. string - 0d4ba716d325: Jan Vrany, 2014-07-19 10:32 +0100: Merged 3aa14b90dacd and b95b1843ab38 - 21134786ad33: Jan Vrany, 2014-07-13 22:02 +0100: Environment renamed to ReflectiveEnvrionment to match naming of other classes. - 3ae04adf796f: Jan Vrany, 2014-07-19 02:01 +0100: Oops, fixed ReflectiveType#getGenericSignature() - 770c76797564: Jan Vrany, 2014-07-20 02:41 +0100: ReflectiveEnvironment#isPackage() refactored to scan classpath for packages. - fb5aefff7ae5: Jan Vrany, 2014-07-20 21:46 +0100: ReflectiveEnvironmnt#isPackage() now consult a list of classes loaded by given ClassLoader. - fb47f223848a: Jan Vrany, 2014-07-24 20:56 +0100: Merged 0d4ba716d325 and fb5aefff7ae5 - 26dd7e06c4bb: Jan Vrany, 2014-07-24 21:18 +0100: Removed classFileBytes from JavaClass. - a95e78d1d7dc: Jan Vrany, 2014-07-25 00:08 +0100: Speed optimization in ReflectiveEnvironment#isPackage() - 87cedea6290e: Jan Vrany, 2014-07-25 00:51 +0100: Got rid of JavaZipSupport. Inflater/Deflater made public. - 243dcc6b3220: Jan Vrany, 2014-07-25 01:52 +0100: Optimized java.util.zip.ZipFile#getNextEntry() - 79cde29be713: Jan Vrany, 2014-07-25 09:23 +0100: Another speed optimization in ReflectiveEnvironment#isPackage() - 99e1b2bde5de: Jan Vrany, 2014-07-25 09:53 +0100: Fix in JavaMapInspectorView (use #binaryName instead of #name) - d7978de50434: Jan Vrany, 2014-07-25 10:08 +0100: For Java objects, use standars Java toString() as value string in inspectors. - a80e78c59918: Jan Vrany, 2014-07-25 10:11 +0100: Make JavaClass>>nameWithoutNameSpacePrefix returning the lastName. - 19acb606dd69: Jan Vrany, 2014-07-28 11:49 +0100: Merged 79cde29be713 and a80e78c59918 - 2d3e5574157a: Jan Vrany, 2014-07-28 21:17 +0100: Removed jdtcore from stx:libjava/benchmark dependencies. - a725721c7855: Jan Vrany, 2014-07-28 22:40 +0100: Fix in JavaSyntaxHighlighter - resolve types even if class does not exist yet. - 3611c3493dbc: Jan Vrany, 2014-07-28 23:49 +0100: Introduced package annotation stx.libjava.annotations.Package. - 9003a9074b2c: Jan Vrany, 2014-07-30 16:34 +0100: Renamed ReflectiveEnvironment#packages to cachedIsPackageResults. Added more comments. - 945bee015640: Jan Vrany, 2014-07-31 09:30 +0100: Made JavaClass>>package returning Smalltalk/X package name from annotation, if annotated. - 3f605f43f795: Jan Vrany, 2014-08-01 14:25 +0100: Fixed JavaRelease>>validateJavaVersionString: - d9a3d685c8b9: Jan Vrany, 2014-08-01 14:27 +0100: Force a garbage collect after each run of classreader benchmark. - 304d3543242f: Jan Vrany, 2014-08-03 23:28 +0100: Cleanup in ReflectiveEnvironment: more comments & logging. - 603fdba602c4: Jan Vrany, 2014-08-03 18:16 +0100: Fixed annotation support in reflective environment (getValue() and standard tag bits) - 5260fddf10f6: Jan Vrany, 2014-08-03 23:39 +0100: Merged 304d3543242f and 603fdba602c4 - b6bced0551a9: Jan Vrany, 2014-08-03 23:43 +0100: Merged d9a3d685c8b9 and 5260fddf10f6 - 7abed44f04cc: Jan Vrany, 2014-08-03 23:46 +0100: Merged 945bee015640 and b6bced0551a9 - 9aade8151557: Jan Vrany, 2014-08-04 00:38 +0100: Added JavaSourceFileWriter>>fileOut:on:withTimestamp:... - 0b6a9ff08acd: Jan Vrany, 2014-08-04 15:43 +0100: Class reading optimization [1/4]: optimize CharacterArray class>>decodeFromJavaUTF8: - d617b4590431: Jan Vrany, 2014-08-04 16:13 +0100: (Class reading) optimization [2/4]: rewrite slow ifNil:... by faster isNil ifTrue:... - d44f099dcff0: Jan Vrany, 2014-08-04 16:47 +0100: Classr reading optimization [3/4]: Optimize JavaMethod class>>numArgsFromDescriptor: - a4ddeef7c5e9: Jan Vrany, 2014-08-04 17:12 +0100: Class reading optimization [4/4]: defer cache flushing at class initialization time. - 189c572dbe71: Jan Vrany, 2014-08-04 23:08 +0100: Fixed getDeclaringClass() native. - a63cf3e1042f: Jan Vrany, 2014-08-05 00:11 +0100: Merged 9aade8151557 and 189c572dbe71 - 3890b120ec7f: Jan Vrany, 2014-08-05 01:02 +0100: Little tweak in ReflectiveEnvironment - a3cb415bc22b: Jan Vrany, 2014-08-05 09:27 +0100: Merged a63cf3e1042f and 3890b120ec7f - 185bbb8910e8: Jan Vrany, 2014-08-05 11:57 +0100: Fixed native java.lang.Class.getEnclosingMethod0 - ea55682eefe7: Jan Vrany, 2014-08-05 12:03 +0100: Align JavaClass>>enclosingClass with java.lang.Class.getEnclosingClass() - 4284af836b5d: Jan Vrany, 2014-08-05 20:42 +0100: Merged ea55682eefe7 and a4ddeef7c5e9 - 959071100332: Jan Vrany, 2014-08-05 21:57 +0100: Merged a3cb415bc22b and 4284af836b5d - 6cb006c63c4a: Jan Vrany, 2014-08-05 22:41 +0100: Return enclusing class's package for inner classes. Make #owningClass to return enclosing class. - 5517d6a75d40: Jan Vrany, 2014-08-06 14:24 +0100: Fix in GroovyEvaluator: care for nil values of workspace variables. - b96f863a8500: Jan Vrany, 2014-08-07 01:49 +0100: Java lint service now do dry-compilation to get more accurate problem list. - 546065d4319b: Jan Vrany, 2014-08-07 10:32 +0100: Fixed off-by-one bug in AbstractVariableDeclaration>>startPosition / endPosition extensions. - c771a69d7f7d: Jan Vrany, 2014-08-07 12:41 +0100: Removed slot JavaClass#sourceFile. - caa15c28f3a1: Jan Vrany, 2014-08-07 14:42 +0100: Fixed bad bug in realoding - do not flush type when invalidating field ref. - d3094b384e55: Jan Vrany, 2014-08-08 07:36 +0100: Fix in JavaNativeMethod: compute line number by searching the source. - c38fcee7b0da: Jan Vrany, 2014-08-08 11:02 +0100: Fixes bad bug in Java thread handling that caused memory/resource leak. - 1f63ee2cdd97: Jan Vrany, 2014-08-11 01:19 +0100: Fixed JavaClass>>fileOutAs: - 1d977d2d3abb: Jan Vrany, 2014-08-11 01:55 +0100: es to ClassLoader#classes list. - 261bad2a9657: Jan Vrany, 2014-08-11 09:46 +0100: Fixes for class unloadfing: unload inner classes first. - 93a3efa06bd1: Jan Vrany, 2014-08-11 10:55 +0100: ReflectiveEnvironment#isPackage() refactored to provide better performance. - 19fc0c196e75: Jan Vrany, 2014-08-11 10:57 +0100: Fixed typo in comment in ASTNodeComparator - dac830f75266: Jan Vrany, 2014-08-11 10:57 +0100: Merged 19fc0c196e75 and 261bad2a9657 - 3aed12bd6638: Jan Vrany, 2014-08-11 12:23 +0100: Added Echo example. - 81e439368e3d: Jan Vrany, 2014-08-11 21:26 +0100: Added option to a JavaScanner to allow for runaway string constants. - 7940d8a38e51: Jan Vrany, 2014-08-12 09:42 +0100: Oops, added missing methods. - 79fe9b2d4932: Jan Vrany, 2014-08-12 11:15 +0100: Added ASTNodeFinder, a simple visitor to locate AST node based on position in source. - dce4fa6c6dad: Jan Vrany, 2014-08-12 11:16 +0100: Merged 79fe9b2d4932 and 7940d8a38e51 - 36c8ea432a7c: Jan Vrany, 2014-08-12 13:46 +0100: Fixes in syntax hibglighting - add support for line-based highlighting - 9e60100a47c6: Jan Vrany, 2014-08-12 22:40 +0100: Fix in JavaClass>>innerClassesIgnoreUnloaded: - also return anonymous classes. - a35cc585bb5a: Jan Vrany, 2014-08-12 23:09 +0100: Fix in JavaContext>>argsAndVars: do not strip receiver (this) from arg-and-vars - 4d120f1a64f1: Jan Vrany, 2014-08-14 08:54 +0100: Fixed native java.lang.Class.getDeclaredClasses0() - 7a4491b4b7eb: Jan Vrany, 2014-08-14 08:57 +0100: Added some (unimplemented) natives for OpenJDK7's java.nio.* - 1ce74dc95339: Jan Vrany, 2014-08-14 12:24 +0100: Fix for JavaSetInspectorView (after binaryName / name refactoring ) - 1ab5987f3982: Jan Vrany, 2014-08-14 12:50 +0100: Oops, fix for class reader - remember exception table. - 7bf7a8831ed9: Jan Vrany, 2014-08-14 12:55 +0100: Fixed assertions Java>>removeThread:for: - 5c9cb5b7a35b: Jan Vrany, 2014-08-14 16:00 +0100: Merged 7bf7a8831ed9 and 9e60100a47c6 - 6a5d85f29c3a: Jan Vrany, 2014-08-16 08:13 +0100: Fixes for reloading - c8b42e8c2d6c: Jan Vrany, 2014-08-17 08:46 +0100: Fix in reloading of a method with method-level breakpoint. - 2a7558e77d4d: Jan Vrany, 2014-09-17 17:13 +0100: Changed GroovyEvaluatorTests workspace tests to run headless. - 01aa5d9b5206: Jan Vrany, 2014-09-17 17:13 +0100: Fixed comment in INVOKESPECIALX tests. - 353f4a75d558: Jan Vrany, 2014-09-18 10:00 +0100: Eclipse project settings fixed (works on 4.4 Luna) - 4e707dec1e44: Jan Vrany, 2014-09-18 11:56 +0100: Fix in GroovyScanner: honour allowRunawayString - 422e32abb28d: Jan Vrany, 2014-09-18 16:13 +0100: Fix in Java: do not flush Threads dictionary when rebooting JVM - b340178eb595: Jan Vrany, 2014-09-18 16:59 +0100: Added JavaMetaclass>>topOwningClass - 769369f7b48c: Jan Vrany, 2014-10-10 11:56 +0100: Bugfix in JavaCodeBundle: handle correclt non-exisitng packages... - 0a8b9f03ffa5: Jan Vrany, 2014-10-11 23:21 +0100: Fixed class reloader in cases a top-level class has both, nested and anonymous classes. - 16a1b7c1eccc: Jan Vrany, 2014-10-11 23:25 +0100: Eclipse projects renamec to use dotted named. - 7bd0c3fb8bfb: Jan Vrany, 2014-10-27 22:26 +0000: Fix in JavaRelease class>>system - care for broken links - e3119602c69d: Jan Vrany, 2014-11-04 08:50 +0000: Eclipse project settings fixed (again, sigh) - 03cc67fbfd3d: Jan Vrany, 2014-11-04 09:21 +0000: Added variant of native Class.forName0 as used by OpenJDK 7u71. - da769ad115e1: Jan Vrany, 2014-11-04 16:51 +0000: Merged e3119602c69d and 03cc67fbfd3d - c2c8a670bb76: Tomáš Heger, 2014-07-17 00:00 +0200: IBinaryDumper now indicates the end of dumping. - f3b26e7e56ee: Tomáš Heger, 2014-07-23 22:36 +0200: Merged with Honza's changes. - f4240f7f424a: Tomas Heger, 2014-09-10 17:28 +0200: Merged f3b26e7e56ee and c8b42e8c2d6c. - d9c528c25924: Tomas Heger, 2014-09-10 18:11 +0200: java.lang.SafeVarargs added to the supported annotations. - 98d2f92fe05b: Tomas Heger, 2014-09-10 18:17 +0200: A bug in ReflectiveType.getMemberTypes() fixed. It now returns null instead of an empty array if there are no member types. This behaviour is in compliance with the specification in the IBinaryType interface. - 645964f5513e: Tomas Heger, 2014-09-10 18:21 +0200: BinaryDumper doesn't dump SourceName for anonymous classes anymore. - a3c96c7782f1: Tomas Heger, 2014-09-18 22:33 +0200: Method ReflectiveAnnotation.getXConstant() implemented. - 225b46c95c0d: Tomas Heger, 2014-10-03 16:43 +0200: BinaryDumper has new method of dumping objects. It dumps arrays' contents and ignores an actual hashcode of the object (replaces it with a constant string), which is useful when looking for differences in dumps. - 259a03474cc4: Tomas Heger, 2014-10-03 17:15 +0200: BinaryDumper's stringToDump() method improved. It now works for empty arrays and dumps arrays' types as well. - f48973e448ab: Tomas Heger, 2014-10-03 18:14 +0200: BinaryDumper now correctly dumps methods when <clinit> is there. - 4ff24f26a19e: Tomas Heger, 2014-10-13 17:14 +0200: New class ReflectiveUtils created. General methods getXConstant() and getFieldType() moved to the new class. These are methods used by various classes. - ba5d431a3b8c: Tomas Heger, 2014-10-21 16:10 +0200: Enclosing method dumping fixed. Now it's dumped on its own row as it should be. - 0e4e6b5a86c6: Tomas Heger, 2014-10-21 16:44 +0200: If a type (ReflectiveType instance) represents a local or anonymous class within a constructor, that constructor is now returned by the ReflectiveType.getEnclosingMethod() method. - 65569ad02b60: Jan Vrany, 2014-11-05 09:03 +0000: Merged da769ad115e1 and 0e4e6b5a86c6 - 69fc19f5e37d: Jan Vrany, 2014-11-04 13:58 +0000: For Windows JDK7, make sure TwoStackSocketImpl is used - dcaeeee3e396: Jan Vrany, 2014-11-05 11:01 +0000: Implemented natives for TwoStackPlainSocketImpl - c8b892ed8c91: Jan Vrany, 2014-11-05 11:45 +0000: Merged 65569ad02b60 and dcaeeee3e396 - c536d81240a9: Tomas Heger, 2014-11-07 10:42 +0100: The getFieldType() method refactored (the actual functionality moved to new method called getSigFromName()) and new method called getNameFromSig() added. - 60ac91f62d59: Tomas Heger, 2014-11-07 10:44 +0100: A config option (dumpRuntimeInvisibleAnnots) added. With this config option set to false (which is the default value) only annotations with RetentionPolicy.RUNTIME are dumped by the BinaryDumper. - 8ca0926cc281: Tomas Heger, 2014-11-10 16:23 +0100: Functionality to find out if the annotations should be dumped (in case that they're not runtime visible) moved to a new method which is also newly used for dumping parameter annotations. - 9d8b5fb04b41: Jan Vrany, 2014-11-11 21:01 +0100: Fixed ReflectiveAnnotation on JDK6 - 34baed88b792: Jan Vrany, 2014-11-11 21:02 +0100: Merged c8b892ed8c91 and 9d8b5fb04b41 - 7a2b5c67bc0f: Jan Vrany, 2014-11-13 00:25 +0100: Fixed getXConstant() for Enums - 31b5a49df0e0: Jan Vrany, 2014-11-13 00:35 +0100: Fixed ReflectiveElementValuePair for Enum values. - a19f06fa6f09: Jan Vrany, 2014-11-13 00:49 +0100: Fixed ReflectiveAnnotation for type java.lang.invoke.MethodHandle$PolymorphicSignature. - 881799d310e3: Jan Vrany, 2014-11-13 12:18 +0100: Intern all constant pool strings. - e35a94591cb1: Jan Vrany, 2014-11-14 10:32 +0100: Updates after JavaPackage has been moved to stx:libbasic - 31188d530b64: Jan Vrany, 2014-11-16 10:25 +0000: Merged 881799d310e3 and e35a94591cb1 - c56b4d5f0c52: Marcel Hlopko, 2014-11-23 18:45 +0000: README.md edited online with Bitbucket - 3188fcb8391d: Jan Vrany, 2014-11-26 16:45 +0000: Fix in JavaClassReader>>skipAttribute: - 821170928b31: Jan Vrany, 2014-11-21 09:02 +0000: Added tag expecco_2_7_0 for changeset 31188d530b64 - d95fd165e9e3: Jan Vrany, 2014-12-01 00:20 +0000: Update for recent OpenJDK6 - 12d89689d2f2: Jan Vrany, 2014-12-01 00:48 +0000: Merge - 90f0566d8145: Jan Vrany, 2014-12-04 20:56 +0000: Extracted readMagic to alow lazy loading of constant pool. - c56313e00930: Jakub Nesveda, 2014-12-07 13:16 +0100: typo fix - e48aed9570a9: Jakub Nesveda, 2014-12-07 13:17 +0100: cc - 19e3d2dac675: Jakub Nesveda, 2014-12-07 14:25 +0100: fixed JavaRelease >> displayString for non installed or not found java releases - 1d1b9d446dd6: Jakub Nesveda, 2014-12-07 15:08 +0100: Merge - 4ac115074bce: Jan Vrany, 2014-12-07 22:55 +0000: Fixes for JavaRelase>>displayString tests. - 3aaf43a51816: Jan Vrany, 2014-12-08 18:08 +0000: Extracted magic and version detection into separate methods - 76d4443744ed: Jan Vrany, 2014-12-08 23:03 +0000: JavaClass memory optimization (part 1) - 2cf782f380f2: Jan Vrany, 2014-12-03 15:29 +0000: JavaClass memory optimization (part 2) - 10163a452c54: Jan Vrany, 2014-12-07 01:25 +0000: JavaClass memory optimization (part 3) - 14292924cac7: Jan Vrany, 2014-12-07 02:16 +0000: JavaClass memory optimization (part 4) - 1013708261a8: Jan Vrany, 2014-12-08 16:37 +0000: JavaClass memory optimization (part 5) - 87ec39ef23b8: Jan Vrany, 2014-12-08 10:26 +0000: Java settings cleanup (part 1): minor tweaks and fixes - 761c7bb5853c: Jan Vrany, 2014-12-09 14:49 +0000: Java settings cleanup (part 2): release settings refactored. - 8eb3481bfdcf: Jan Vrany, 2014-12-09 15:06 +0000: Java settings cleanup (part 3): removed user bundle editor - d9b55a42fa54: Jan Vrany, 2014-12-09 16:18 +0000: Merged 8eb3481bfdcf and 1013708261a8 - 61e9df43f8a4: Jan Vrany, 2014-12-10 09:06 +0000: Sigh, more fixes for JavaRelease>>displayString tests. - ca8cb260a3d0: Jan Vrany, 2014-12-11 00:44 +0000: Fix in JavaRelease class>>system - 1155c0d79d45: Jan Vrany, 2014-12-12 00:33 +0000: Fixed JavaClass#innerClasses, added #anonynousClasses - 777478bcd3f9: Jan Vrany, 2014-12-12 03:12 +0000: Fix in JavaSyntaxHighlighter: do resolve classes... - af659e602072: Jan Vrany, 2014-12-16 01:08 +0000: Fixes for class unloading. - ac4ecd6e586c: Jan Vrany, 2014-12-16 02:05 +0000: Minor clieanup in tools tests. - d85c559c01c6: Jan Vrany, 2014-12-16 02:42 +0000: Fixed bug in ReflectiveEnvironment#isPackage() - 8bbc18b95b78: Jan Vrany, 2014-12-16 02:49 +0000: Added JavaLintAnnotation - required by recent CodeView2 - cf7c55662e21: Jan Vrany, 2014-12-16 02:56 +0000: Merged d85c559c01c6 and 8bbc18b95b78 - b0f4e406b42d: Jan Vrany, 2014-12-17 01:20 +0000: Fix in flushing Java - flush smalltalk-to-java thread object mapping... - a467328c29fd: Jan Vrany, 2014-12-20 01:47 +0100: Fix in flushing Java - flush all dynamic proxies - b3526f83c2ff: Tomas Heger, 2014-11-16 15:08 +0100: Fixed ReflectiveUtils.getXConstant() for Classes. - 7bc74064acf3: Tomas Heger, 2014-11-18 22:54 +0100: Member filtering implemented. - ac4ade238e90: Tomas Heger, 2014-11-19 18:25 +0100: ReflectiveElementValuePair.getValue() fixed for Constant values. - 186065c6ada4: Tomas Heger, 2014-11-19 18:27 +0100: NullPointerException bug fixed in BinaryDumper.stringToDump() - bdc3f443e3c0: Tomas Heger, 2014-11-19 18:37 +0100: BinaryDumper.stringToDump() returns "null" instead of "" if null is given as a parameter. - c9cb51667da1: Tomas Heger, 2014-11-21 21:39 +0100: ReflectiveElementValuePair class tests added. - b78cacf5e303: Tomas Heger, 2014-12-11 22:47 +0100: Tests for getConstant() and getModifiers() added. - 490bd00c692c: Tomas Heger, 2014-12-11 22:53 +0100: BinaryDumper.stringToDump() now returns a String "null" for runtime invisible annotation (if the relevant config option is used). - ec683302163c: Tomas Heger, 2014-12-18 22:30 +0100: Fixed two bugs related to annotations (java.lang.annotation.Target hack improved and the problem with element-value pairs with the default value solved) - b0871eb73fd2: Tomas Heger, 2015-01-01 13:54 +0100: Minor refactoring of ReflectiveUtils. No funcionality changes. - 264b56c86880: Tomas Heger, 2015-01-04 11:25 +0100: Static variable that is no longer needed was removed from ReflectiveField. - cdab5cc716a7: Jan Vrany, 2014-12-17 00:08 +0000: Fixed bad bug in URL to to File conversion... - 00320742d075: Jan Vrany, 2015-01-05 11:00 +0100: Merged a467328c29fd and cdab5cc716a7 - 740ba227611d: Jan Vrany, 2015-01-05 11:04 +0100: Merged 00320742d075 and 264b56c86880 - a58245c0e83a: Jan Vrany, 2015-01-05 17:10 +0100: Updated copyright notices. - d9297d724fa0: Jan Vrany, 2015-01-06 11:01 +0100: Fix for D116331: Do not write to a changefile when compiling new native method - a373d416ae8c: Jan Vrany, 2015-01-11 08:03 +0000: Fix in JavaClass>>annotations - 3f9968ddacf8: Jan Vrany, 2015-01-14 11:19 +0000: Ant build files refactoring (part 1) - 327e493d2688: Jan Vrany, 2015-01-19 17:08 +0100: Ant build files refactoring (part 2) - 4c3b0badaa5f: Jan Vrany, 2015-01-20 09:42 +0100: Oops, fixed endless recursion in JavaClass>>innerClasses... - b14c58b2876c: Jan Vrany, 2015-01-20 10:41 +0100: Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava. - ee36f2088d60: Jan Vrany, 2015-01-20 10:49 +0100: JavaClassReloaderTests moved from stx:libjava/experiments to stx:libjava - 7aa6c098fb82: Jan Vrany, 2015-01-21 09:09 +0100: Repository cleanup (1/7): removed esug2012 and thesis directories. - 81e0e61fa317: Jan Vrany, 2015-01-21 09:30 +0100: Repository cleanup (2/7): removed smaCC directory. - 297cc823a07a: Jan Vrany, 2015-01-21 10:02 +0100: Repository cleanup (3/7): removed obsolete eclipse projects. - acdda45271f7: Jan Vrany, 2015-01-21 11:28 +0100: Repository cleanup (4/7): moved mauve source to stx:libjava/mauve/java where it belongs - 08a79331ec58: Jan Vrany, 2015-01-21 13:19 +0100: Repository cleanup (5/7): made stx:libjava/tests a full Smalltalk/X package. - fd5013aca049: Jan Vrany, 2015-01-21 13:46 +0100: Repository cleanup (6/7): moved Mauve test suite under stx:libjava/tests - 1dd84eba684a: Jan Vrany, 2015-01-21 15:50 +0100: Repository cleanup (7/7): removed docs/todo.txt - 23451a6823b1: Jan Vrany, 2015-01-22 21:31 +0100: More Java AST utilities. - e8d92a1c50f3: Jan Vrany, 2015-01-23 14:49 +0100: Updated Apache POI to 3.11 - 0f2df59e58e2: Tomas Heger, 2015-01-09 21:41 +0100: Shell script for easier launching of BinaryDumper added. - 77aa10f9e436: Tomas Heger, 2015-01-09 21:41 +0100: Many tests for the whole reflective environment added as well as some mock classes used by the tests. - a29efdbbfad2: Jan Vrany, 2015-01-27 10:14 +0000: Updated to Groovy 2.1.9 - a3ad7164f528: Jan Vrany, 2015-01-27 10:34 +0000: Groovy and JUnit .jars commited to repository. - 34b4fea6dd4f: Jan Vrany, 2015-01-27 10:45 +0000: Merged a3ad7164f528 and 77aa10f9e436 - a6358ca80d11: convert-repo, 2015-01-27 21:07 +0000: update tags - a3407cf1cd0d: Jan Vrany, 2015-01-27 22:34 +0000: Merged 34b4fea6dd4f and a6358ca80d11 - cb6c15e66bed: Jan Vrany, 2015-01-28 00:49 +0000: Temporary workaround to make tests running in eXept builds.

"
 COPYRIGHT (c) 1996-2015 by Claus Gittinger

 New code and modifications done at SWING Research Group [1]:

 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
                            SWING Research Group, Czech Technical University in Prague

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.

 [1] Code written at SWING Research Group contains a signature
     of one of the above copright owners. For exact set of such code,
     see the differences between this version and version stx:libjava
     as of 1.9.2010
"
"{ Package: 'stx:libjava' }"

CompiledCode variableSubclass:#JavaMethod
	instanceVariableNames:'accessFlags selector javaClass descriptor signature lookupObject
		lineNumberTable localVariableTable source annotations'
	classVariableNames:'AbstractMethodInvokationSignal SignatureTypeCodes
		ForceByteCodeDisplay ShowFullSource UnresolvedClassSignal
		A_PUBLIC A_PRIVATE A_PROTECTED A_STATIC A_FINAL A_SYNCHRONIZED
		A_ABSTRACT A_NATIVE A_BREAKPOINT A_HASHANDLER A_BRIDGE A_VARARGS
		A_STRICT A_SYNTHETIC A_RESOLVED A_HASFINALLY'
	poolDictionaries:'JavaConstants'
	category:'Languages-Java-Classes'
!

!JavaMethod class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1996-2015 by Claus Gittinger

 New code and modifications done at SWING Research Group [1]:

 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
                            SWING Research Group, Czech Technical University in Prague

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.

 [1] Code written at SWING Research Group contains a signature
     of one of the above copright owners. For exact set of such code,
     see the differences between this version and version stx:libjava
     as of 1.9.2010

"
! !

!JavaMethod class methodsFor:'initialization'!

initialize
    AbstractMethodInvokationSignal isNil ifTrue:[
        AbstractMethodInvokationSignal := ExecutionError newSignalMayProceed:true.
        AbstractMethodInvokationSignal nameClass:self message:#abstractMethodInvokationSignal.
        AbstractMethodInvokationSignal notifierString:'attempt to execute abstract method'.

        UnresolvedClassSignal := ExecutionError newSignalMayProceed:true.
        UnresolvedClassSignal nameClass:self message:#unresolvedClassSignal.
        UnresolvedClassSignal notifierString:'unresolved class'.
    ].

    ShowFullSource := true.
    ForceByteCodeDisplay := false.

    A_PUBLIC       := 16r0001.
    A_PRIVATE      := 16r0002.
    A_PROTECTED    := 16r0004.
    A_STATIC       := 16r0008.
    A_FINAL        := 16r0010.
    A_SYNCHRONIZED := 16r0020.
    A_BRIDGE       := 16r0040.
    A_VARARGS      := 16r0080.
    A_NATIVE       := 16r0100.
    A_ABSTRACT     := 16r0400.
    A_STRICT       := 16r0800.
    A_SYNTHETIC    := 16r1000.

    A_BREAKPOINT   := 16r10000000.
    A_HASHANDLER   := 16r20000000.
    A_HASFINALLY   := 16r00004000.
    A_RESOLVED     := 16r00000200.

    self flags:(self flags bitOr:Behavior flagJavaMethod).

    SignatureTypeCodes := IdentityDictionary new.
    SignatureTypeCodes at:$B put:#byte.
    SignatureTypeCodes at:$C put:#char.
    SignatureTypeCodes at:$D put:#double.
    SignatureTypeCodes at:$F put:#float.
    SignatureTypeCodes at:$I put:#int.
    SignatureTypeCodes at:$J put:#long.
    SignatureTypeCodes at:$S put:#'unsigned short'.
    SignatureTypeCodes at:$Z put:#boolean.
    SignatureTypeCodes at:$L put:#object.
    SignatureTypeCodes at:$[ put:#array.
    SignatureTypeCodes at:$T put:#typevar.

    ForceByteCodeDisplay := false.

    "
     JavaMethod initialize.
     JavaMethodWithHandler initialize.
     ForceByteCodeDisplay := true.
     ForceByteCodeDisplay := false.
    "

    "Modified: / 16-10-1998 / 01:29:48 / cg"
    "Modified: / 31-01-2014 / 03:35:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

reinitialize

    self flags:(self flags bitOr:Behavior flagJavaMethod).

    "Created: / 14-12-2010 / 20:58:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod class methodsFor:'instance creation'!

fromMethod:aJavaMethod
    "create a new javaMethod, copying values from another javaMethod"

    ^ self new fromMethod:aJavaMethod

    "Created: / 16.10.1998 / 01:25:12 / cg"
!

new
    "create a new javaMethod.
     Redefined, since constants are NOT stored in a literalArray,
     but my classes constantTable instead."

    ^ self basicNew:0.

    "Created: / 16.10.1998 / 01:13:02 / cg"
! !

!JavaMethod class methodsFor:'Signal constants'!

abstractMethodInvokationSignal
    "return the signal raised when an abstract method is invoked"

    ^ AbstractMethodInvokationSignal

    "Created: / 27.1.1998 / 21:50:05 / cg"
!

unresolvedClassSignal
    "return the signal raised when an unresolved class is referenced"

    ^ UnresolvedClassSignal

    "Created: / 27.1.1998 / 21:50:05 / cg"
! !

!JavaMethod class methodsFor:'accessing'!

showFullSource
    ^ ShowFullSource

    "Created: / 14-09-2013 / 11:56:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod class methodsFor:'misc'!

forceByteCodeDisplay
    ^ ForceByteCodeDisplay

    "Created: 7.4.1997 / 20:11:39 / cg"
!

forceByteCodeDisplay:aBoolean
    ForceByteCodeDisplay := aBoolean

    "
     self forceByteCodeDisplay:true
     self forceByteCodeDisplay:false
    "

    "Created: / 4.2.1998 / 00:22:54 / cg"
!

makeJavaMethod

    self flags:((self flags
                 bitOr:Behavior flagJavaMethod)
                 bitClear:Behavior flagMetaMethod)

    "
        JavaMethod makeJavaMethod
        JavaMethod makeMetaMethod
    "

    "Created: / 23-02-2011 / 12:56:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

makeMetaMethod

    self flags:((self flags
                 bitOr:Behavior flagMetaMethod)
                 bitClear:Behavior flagJavaMethod)
     "
        JavaMethod makeJavaMethod
        JavaMethod makeMetaMethod
    "

    "Created: / 23-02-2011 / 12:56:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod class methodsFor:'others'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !

!JavaMethod class methodsFor:'signature parsing'!

argSigArrayFromSignature:aSignature
    "given a signature, return a specArray for the arguments"

    |s|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt].

    ^ self argSigArrayFromStream:s.

    "
     JavaMethod argSigArrayFromSignature:'(LObject;)V'
     JavaMethod argSigArrayFromSignature:'(BB)S'
     JavaMethod argSigArrayFromSignature:'(LObject;LObject;II)V'
    "
!

argSigArrayFromStream:s
    "parse an argSpec, return an array of specs - see java doc"

    |argSpec spec|

    spec := #().
    [s atEnd or:[s peek == $)]] whileFalse:[
"/        s peek == Character space ifTrue:[
"/            s next
"/        ] ifFalse:[
            argSpec := self fieldTypeFromStream:s in:nil.
            spec := spec copyWith:argSpec.
"/        ]
    ].
    ^ spec

    "Modified: / 8.1.1998 / 19:10:20 / cg"
!

argSignatureFromArgTypeArray:arr
    | sig |

    sig := ''.
    arr do:
            [:el |
            | jCLass |

            jCLass := el.
            jCLass isJavaClass
                ifFalse:[ jCLass := JavaVM reflection classForJavaClassObject:el ].
            jCLass isJavaClass
                ifTrue:
                    [ sig := sig , jCLass typeName.
                    ]
                ifFalse:[ self halt. ] ].
    ^ sig

    "
     self argSignatureFromArgTypeArray:
 (Array
     with:(JavaVM javaClassObjectForClass:(Java at:'com.sun.java.swing.JComponent')))"

    "Modified: / 13-02-1998 / 14:57:58 / cg"
    "Modified: / 02-03-2011 / 22:49:24 / Marcel Hlopko <hlopik@gmail.com>"
!

argSpecFromSignature:aSignature withName:name
    "given a signature, return a spec"

    |s argSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecFromStream:s in:nil.

    s next ~~ $) ifTrue:[self halt. ^ name].

    ^ name , ' (' , argSpec , ')'

    "
     JavaMethod argSpecFromSignature:'(LObject;)V' withName:'foo'
     JavaMethod argSpecFromSignature:'(BB)S'       withName:'foo'
    "

    "Modified: / 8.1.1998 / 19:05:36 / cg"
!

argSpecFromStream:s in:aPackage
    "parse an argSpec - see java doc"

    |argSpec spec|

    spec := ''.
    [s atEnd or:[s peek == $)]] whileFalse:[
"/        s peek == Character space ifTrue:[
"/            s next
"/        ] ifFalse:[
            argSpec := self fieldTypeFromStream:s in:aPackage.
            spec size ~~ 0 ifTrue:[
                spec := spec , ', '
            ].
            spec := spec , argSpec.
"/        ]
    ].
    ^ spec

    "Created: / 18-03-1997 / 11:06:44 / cg"
    "Modified: / 04-10-2013 / 12:45:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

argSpecWithArgsFromStream:s in:aPackage
    "parse an argSpec - see java doc"

    ^ self argSpecWithArgsFromStream:s in:aPackage argNames:nil

    "Modified: / 8.1.1998 / 19:21:00 / cg"
!

argSpecWithArgsFromStream:s in:aPackage argNames:argNames
    "parse an argSpec - see java doc"

    |argSpec spec argNr nm|

    argNr := 1.
    spec := ''.
    [s atEnd or:[s peek == $)]] whileFalse:[
        argSpec := self fieldTypeFromStream:s in:aPackage.

        (argNames notNil
        and:[argNames size >= argNr
        and:[(nm := argNames at:argNr) notNil]]) ifFalse:[
            nm := 'arg' , argNr printString.
        ].
        argSpec := argSpec , ' ' , nm.

        spec size ~~ 0 ifTrue:[
            spec := spec , ', '
        ].
        spec := spec , argSpec.

        argNr := argNr + 1.
    ].
    ^ spec

    "Created: / 8.1.1998 / 19:20:36 / cg"
    "Modified: / 8.1.1998 / 21:14:33 / cg"
!

fieldTypeFromStream:s in:aPackage
    "parse a fieldTypeSpec - see java doc"

    |typeChar typeSym elType size className nm out nangles |

    typeChar := s next.

    typeSym := SignatureTypeCodes at:typeChar ifAbsent:#unknown.

    typeSym == #unknown ifTrue:[
        ^ typeSym
    ].
    (typeSym == #object or: [typeSym == #typevar]) ifTrue:[
        "Take care about type variables"
        out := String new writeStream.
        [ s peek ~~ $; and:[ s peek ~~ $< ] ] whileTrue:[
            out nextPut: s next.
        ].
        className := out contents.
        "Eat possible type variables"
        (s peek == $<) ifTrue:[
            nangles := 1. s next.
            [  nangles ~~ 0 ] whileTrue:[
                s peek == $< ifTrue:[nangles := nangles + 1].
                s peek == $> ifTrue:[nangles := nangles - 1].
                s next.
            ]
        ].
        s peek ~~ $; ifTrue:[self error: 'Signature corrupted?'].
        s next. "/eat ;


        typeSym == #typevar ifTrue:[^className].
        "/ strip off default
        nm := className.
"/        aPackage notNil ifTrue:[
"/            (nm startsWith:aPackage) ifTrue:[
"/                nm := nm copyFrom:(aPackage size + 2).
"/            ].
"/        ].
        "/ Show only local name, otherwise names are way too long...
        nm := nm copyFrom: (nm lastIndexOf: $/) + 1.

"/        nm := nm copyReplaceAll:$/ with:$..
        ^ nm
    ].

    typeSym == #array ifTrue:[
        s peek isDigit ifTrue:[
            size := Integer readFrom:s.
            elType := self fieldTypeFromStream:s in:aPackage.
            ^ elType , '[' , size printString , ']'
        ].
        elType := self fieldTypeFromStream:s in:aPackage.
        ^ elType , '[]'
    ].

    ^ typeSym

    "Created: / 18-03-1997 / 11:07:56 / cg"
    "Modified: / 18-07-1998 / 22:57:06 / cg"
    "Modified: / 04-10-2013 / 12:42:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

numArgsFromDescriptor:descriptor 
    "Given a method descriptor, return the number physical of args (number of arg slots)"

    | i c numArgs |

    "/ The following code is king of ugly, but it is optimized for speed as
    "/ profiling shown that some 10% time was spent in descriptor parsing.
    "/ Fillowing code is written upon assumption we get a proper method
    "/ descriptor (i.e., descriptor, not signature with type parameters).

    numArgs := 0.
    i := descriptor indexOf: $(.
    i ~~ 0 ifTrue:[ 
        i := i + 1.
        [ (c := descriptor at: i) ~~ $) ] whileTrue:[
            c == $D ifTrue:[ 
                numArgs := numArgs + 2.
            ] ifFalse:[ 
                c == $J ifTrue:[ 
                    numArgs := numArgs + 2.
                ] ifFalse:[ 
                    numArgs := numArgs + 1.
                    c == $[ ifTrue:[ 
                        i := i + 1.
                        [ (c := descriptor at: i) == $[ ] whileTrue:[ i := i + 1 ].
                    ].
                    c == $L ifTrue:[ 
                        i := descriptor indexOf: $; startingAt: i + 1.
                        i == 0 ifTrue:[ 
                            self error: 'Invalid descriptor'
                        ].
                    ].
                ].
            ].
            i := i + 1.
        ].
        ^ numArgs
    ].
    self error: 'Invalid descriptor'


    "
     JavaMethod numArgsFromDescriptor:'(LObject;)V'
     JavaMethod numArgsFromDescriptor:'(BB)S'
     JavaMethod numArgsFromDescriptor:'()V'  
     JavaMethod numArgsFromDescriptor:'(Ljava/util/ArrayList<*>;)V'
     JavaMethod numArgsFromDescriptor:'(LObject;J)V'
     JavaMethod numArgsFromDescriptor:'([[LObject;J)V'
     JavaMethod numArgsFromDescriptor:'([[J)V'
    "

    "/ Original (slow) code:
"/    | s |
"/
"/    s := descriptor readStream.
"/    (descriptor includes:$() ifFalse:[
"/        self error:'Invalid signature'
"/    ].
"/    [ s next ~~ $( ] whileTrue.
"/    ^ self numArgsFromStream:s.

    "Modified: / 04-08-2014 / 16:39:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

numArgsFromStream:s
    "parse an argSpec - see java doc"

    |n t|

    n := 0.
    [s atEnd or:[s peek == $)]] whileFalse:[
        t := self fieldTypeFromStream:s in:nil.
        "/
        "/ some args count as 2
        "/
        t == #long ifTrue:[
            n := n + 2.
        ] ifFalse:[
            t == #double ifTrue:[
                n := n + 2
            ] ifFalse:[
                n := n + 1.
            ]
        ]
    ].
    ^ n

    "Modified: / 8.1.1998 / 19:10:25 / cg"
!

retValSpecFromSignature:aSignature in:aPackage
    "given a signature, return a spec"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt].

    argSpec := self argSpecFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ retvalSpec

    "
     JavaMethod retValSpecFromSignature:'(LObject;)V'
     JavaMethod retValSpecFromSignature:'(BB)S'
    "

    "Created: 18.3.1997 / 11:11:50 / cg"
!

returnTypeFromSignature:aSignature in:aPackage
    "given a signature, return its type as a string"

    |s c|

    s := aSignature readStream.
    (c := s peek) ~~ $( ifTrue:[
        c == $' ifTrue:[
           [s peek ~= $'] whileTrue:[s next].
           s next.
           ^ (self retvalSpecFromStream:s in:aPackage)
        ].
        ^ (self retvalSpecFromStream:s in:aPackage)
    ].

    s next.
    self argSpecFromStream:s in:aPackage.
    s next ~~ $) ifTrue:[self halt. ^ nil].

    ^ (self retvalSpecFromStream:s in:aPackage)

    "
     JavaMethod returnTypeFromSignature:'(LObject;)V'
     JavaMethod returnTypeFromSignature:'(BB)S'
     JavaMethod returnTypeFromSignature:'()J'
     JavaMethod returnTypeFromSignature:'''first''J'
    "

    "Created: / 1.8.1997 / 10:54:31 / cg"
    "Modified: / 8.1.1998 / 19:09:06 / cg"
!

returnsVoidFromSignature:aSignature
    "given a signature, return true if it returns void, false if not"

    ^ (self typeFromSignature:aSignature in:nil) = 'void'

    "
     JavaMethod returnsVoidFromSignature:'(LObject;)V'
     JavaMethod returnsVoidFromSignature:'(BB)S'
    "

    "Modified: / 8.1.1998 / 19:13:53 / cg"
!

retvalSpecFromStream:s in:aPackage
    "parse a retvalSpec - see java doc"

    |spec|

    s atEnd ifTrue:[self halt. ^ #void].
    s peek == $V ifTrue:[^ #void].
    spec := self fieldTypeFromStream:s in:aPackage.
    spec knownAsSymbol ifTrue:[
        ^ spec asSymbol
    ].
    ^ spec

    "Created: / 18.3.1997 / 11:12:19 / cg"
    "Modified: / 7.4.1998 / 22:28:27 / cg"
!

specComponentsWithArgsFromSignature:aSignature withName:name in:aPackage
    "given a signature, return a spec"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecWithArgsFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ Array with:retvalSpec with:name with:argSpec

    "
     JavaMethod specWithArgsFromSignature:'(LObject;)V' withName:'foo' in:nil
     JavaMethod specComponentsWithArgsFromSignature:'(LObject;)V' withName:'foo' in:nil
    "

    "Created: 18.3.1997 / 11:06:22 / cg"
    "Modified: 1.8.1997 / 11:03:50 / cg"
!

specFromSignature:aSignature withName:name argNames:argNames in:aPackage
    "given a signature, return a spec"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecWithArgsFromStream:s in:aPackage argNames:argNames.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ retvalSpec , ' ' , name , ' (' , argSpec , ')'

    "
     JavaMethod specFromSignature:'(LObject;)V' withName:'foo' argNames:#('a') in:nil
     JavaMethod specFromSignature:'(BB)S'       withName:'foo' argNames:#('a' 'b') in:nil
    "

    "Created: / 18.3.1997 / 11:06:22 / cg"
    "Modified: / 8.1.1998 / 21:14:43 / cg"
!

specFromSignature:aSignature withName:name in:aPackage
    "given a signature, return a spec"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ retvalSpec , ' ' , name , ' (' , argSpec , ')'

    "
     JavaMethod specFromSignature:'(LObject;)V' withName:'foo' in:nil
     JavaMethod specFromSignature:'(BB)S'       withName:'foo' in:nil
    "

    "Created: / 18.3.1997 / 11:06:22 / cg"
    "Modified: / 8.1.1998 / 21:06:32 / cg"
!

specTextFromSignature:aSignature in:aPackage withName:name isConstructor: isCtor
    "given a signature, return a spec as boldified text"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt. ^ name].

    ^ isCtor ifTrue:[
        name , ' (' , argSpec , ')'
    ] ifFalse:[
        retvalSpec := self retvalSpecFromStream:s in:aPackage.
        name , ' (' , argSpec , ') : ' , retvalSpec
    ]

"/    ^


    "
     JavaMethod specTextFromSignature:'(LObject;)V' withName:'foo'
     JavaMethod specTextFromSignature:'(BB)S'       withName:'foo'
    "

    "Created: / 04-10-2013 / 12:36:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

specTextFromSignature:aSignature withName:name
    "given a signature, return a spec as boldified text"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecFromStream:s in:nil.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:nil.

    ^ retvalSpec , ' ' , (name allBold) , ' (' , argSpec , ')'

    "
     JavaMethod specTextFromSignature:'(LObject;)V' withName:'foo'
     JavaMethod specTextFromSignature:'(BB)S'       withName:'foo'
    "

    "Modified: / 8.1.1998 / 19:11:20 / cg"
!

specTextWithArgsFromSignature:aSignature withName:name in:aPackage
    "given a signature, return a spec"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecWithArgsFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ retvalSpec , ' ' , (name allBold) , ' (' , argSpec , ')'

    "
     JavaMethod specWithArgsFromSignature:'(LObject;)V' withName:'foo' in:nil
     JavaMethod specWithArgsFromSignature:'(BB)S'       withName:'foo' in:nil
    "

    "Modified: 20.3.1997 / 12:50:10 / cg"
    "Created: 1.8.1997 / 10:43:57 / cg"
!

specWithArgsFromSignature:aSignature withName:name in:aPackage
    "given a signature, return a spec"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecWithArgsFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ retvalSpec , ' ' , name , ' (' , argSpec , ')'

    "
     JavaMethod specWithArgsFromSignature:'(LObject;)V' withName:'foo' in:nil
     JavaMethod specWithArgsFromSignature:'(BB)S'       withName:'foo' in:nil
    "

    "Created: 18.3.1997 / 11:06:22 / cg"
    "Modified: 20.3.1997 / 12:50:10 / cg"
!

specWithArgsFromSignature:aSignature withName:name in:aPackage isConstructor: isCtor
    "given a signature, return a spec"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecWithArgsFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ retvalSpec , ' ' , name , ' (' , argSpec , ')'

    "
     JavaMethod specWithArgsFromSignature:'(LObject;)V' withName:'foo' in:nil
     JavaMethod specWithArgsFromSignature:'(BB)S'       withName:'foo' in:nil
    "

    "Created: / 04-10-2013 / 12:33:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

typeFromSignature:aSignature in:package
    "given a signature, return its type as a string"

    |s c|

    s := aSignature readStream.
    (c := s peek) ~~ $( ifTrue:[
        c == $' ifTrue:[
           s next.
           [s peek ~= $'] whileTrue:[s next].
           s next.
           ^ (self retvalSpecFromStream:s in:package)
        ].
        ^ (self retvalSpecFromStream:s in:package)
    ].

    s next.
    self argSpecFromStream:s in:nil.
    s next ~~ $) ifTrue:[self halt. ^ nil].

    ^ (self retvalSpecFromStream:s in:package)

    "
     JavaMethod typeFromSignature:'(LObject;)Ljava/lang/Object'
     JavaMethod typeFromSignature:'(LObject;)Ljava/lang/Object' in:'java.lang'
    "

    "Created: / 1.8.1997 / 10:50:38 / cg"
    "Modified: / 8.1.1998 / 19:09:31 / cg"
! !

!JavaMethod methodsFor:'* As yet uncategorized *'!

annotationIndexOf:aSymbol

    ^nil

    "Created: / 24-02-2012 / 16:06:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'* uncategorized *'!

annotationAt:aSymbol    
    ^ nil "/ There are no annotation is Smalltalk sense...

    "Created: / 17-08-2014 / 08:34:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'accessing'!

accessFlags
    "java calls this the modifiers"

    ^ accessFlags

    "Created: / 9.4.1998 / 17:49:44 / cg"
!

analyzer
    "Returns an analyzer for the method which can be used
     to query some statistics like sent messages or modified classvars"

    ^ JavaMethodAnalyzer analyze: self.

    "Created: / 30-08-2013 / 13:47:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

annotations
    annotations isNil ifTrue:[
        ^ JavaMethodAnnotationContainer empty
    ].
    ^ annotations

    "Modified: / 04-08-2014 / 16:01:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

annotations:something
    annotations := something.
!

argSignature
    ^ self class argSigArrayFromSignature:descriptor
!

asByteCodeMethod

    "JavaMethods are always bytecode methods"

    ^self

    "Created: / 18-07-2011 / 20:48:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

comment
    "should access the source here, and parse any method comment"

    ^ nil
!

constantPool
    ^ javaClass constantPool

    "Modified: 16.4.1996 / 12:36:27 / cg"
    "Created: 16.4.1996 / 15:28:50 / cg"
!

containingClass
    ^ javaClass

!

decompiledBytecode
    |s|

    s := '' writeStream.
    JavaDecompiler decompile:self to:s.
    ^ s contents

    "Created: 7.4.1997 / 20:10:37 / cg"
!

decompiledSource
    |s|

    s := '' writeStream.
    self decompileSourceTo:s.
    ^ s contents

    "Modified: 30.7.1997 / 16:27:55 / cg"
!

descriptor

    ^ (JavaDescriptor fromString: descriptor) name: self name

    "Created: / 16-04-1996 / 11:34:29 / cg"
    "Modified: / 06-12-2011 / 21:53:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

descriptorSymbol

    ^descriptor

    "Created: / 16-04-1996 / 11:34:29 / cg"
    "Created: / 06-12-2011 / 23:00:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

ensureHasAnnotations
    annotations isNil ifTrue:[
        annotations := JavaMethodAnnotationContainer for:self
    ].
    ^ annotations

    "Created: / 25-02-2011 / 16:02:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 28-02-2011 / 16:33:00 / Marcel Hlopko <hlopik@gmail.com>"
    "Modified: / 04-08-2014 / 15:55:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

exceptionClasses
    "Return a collection of declared exception classes that this method
     throws"
    ^#()

    "Created: / 01-08-2012 / 10:06:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

exceptionHandlerTable
    ^ nil

    "Created: / 16.10.1998 / 01:50:51 / cg"
!

exceptionTable
    ^ nil

    "Created: / 16.10.1998 / 01:51:04 / cg"
!

firstInstructionLineNumber
    ForceByteCodeDisplay == true ifTrue:[ ^ 1].
    lineNumberTable notNil ifTrue:[ ^ lineNumberTable at:2].
    ^ 0.

    "Created: / 17-12-2010 / 17:02:46 / Jan Kurs <kurs.jan@post.cz>"
    "Modified: / 08-01-2011 / 16:30:16 / Jan Kurs <kurs.jan@post.cz>"
!

getExceptionTable

    ^ nil

    "Created: / 04-02-2011 / 23:07:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

getMclass
    ^javaClass

    "Created: / 15-04-2013 / 17:57:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

getSource
    ^ source

    "Created: / 13-09-2013 / 01:41:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

getSourcePosition
    ^ 1
!

hasLineNumberInformation
    ^ lineNumberTable notNil

    "Created: 16.4.1996 / 12:34:04 / cg"
    "Modified: 16.4.1996 / 12:49:06 / cg"
!

javaByteCode
"/    ^ javaByteCode
    ^ byteCode

    "Created: 16.4.1996 / 14:55:44 / cg"
    "Modified: 1.8.1997 / 00:08:45 / cg"
!

javaClass
    ^ javaClass

    "Modified: 16.4.1996 / 12:36:27 / cg"
    "Created: 16.4.1996 / 14:55:44 / cg"
!

javaExceptionTable
    <resource: #obsolete>

    self obsoleteMethodWarning: 'Use #exceptionClasses  instead'.
    ^ self exceptionClasses

    "Created: / 04-06-2011 / 18:16:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
    "Modified: / 01-08-2012 / 10:08:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

javaNumArgs
^ self argSignature size.

    "Created: / 14-03-2011 / 15:50:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

lineNumber
    ^ self sourceLineNumber.

    "Created: / 16-04-1996 / 12:34:04 / cg"
    "Modified: / 23-10-2013 / 10:48:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

lineNumberTable
"/    lineNumberTable ifNil:[ lineNumberTable := Dictionary new.].
    ^ lineNumberTable

    "Created: / 16-04-1996 / 12:34:04 / cg"
    "Modified: / 13-12-2010 / 11:06:40 / Jan Kurs <kurs.jan@post.cz>"
!

literalsDetect:aBlock ifNone:exceptionBlock
    "execute a one arg block for each of our literals.
     return the first literal for which aBlock returns true"

    "/ sigh - must first extract all accessed literals ...
    "/ must deparse the byteCode in order to do this.

    |walker|

    walker := JavaByteCodeEnumerator new.
    walker literalAction:[:pc :slotIndex :const |
        const isJavaMethodRef ifTrue:[
            (aBlock value:(const name)) ifTrue:[^ const name].
        ] ifFalse:[
            const isJavaClassRef ifTrue:[
                (aBlock value:(const name)) ifTrue:[^ const name].
            ]
        ]
    ].
    walker decompile:self to:nil.
    ^ nil

    "Created: / 9.11.1999 / 15:21:40 / cg"
    "Modified: / 24.12.1999 / 02:55:55 / cg"
!

localVariableTable
    ^ localVariableTable

    "
     JavaMethod allInstancesDo:[:m| m localVariableTable notNil ifTrue:[self halt]]
    "
!

mclass
    ^ self javaClass
!

mclass: anObject

    javaClass := anObject

    "Created: / 18-10-2010 / 19:01:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

methodArgAndVarNames
    ^ "((1 to:self numArgs) collect:[:i | 'arg' , i printString])"
      self methodArgNames
      ,
      "((1 to:self numVars) collect:[:i | 'local' , i printString])"
      self methodVarNames

    "Modified: / 23-11-2010 / 19:32:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

methodArgAndVarNamesInContext: context
    | pc stop |

    self isNative ifTrue:[
        ^ self methodArgNames
    ].

    context isJavaContext ifTrue:[
        pc := context pc.
    ] ifFalse:[
        "/ It may happen that the context for Java method is not
        "/ a JavaContext. This is true for some code-saver functions
        "/ such as __retInst1(), __retSelf1() and so on. In that case,
        "/ method sould be simple enough to have no nested scopes
        "/ or local variables. Forcing pc := 0 therefore works fine
        pc := 0.
    ].

    localVariableTable isNil ifTrue:[^self methodArgNames , self methodVarNames ].

    stop := context arg1Index - 1 + self numArgs + self numVars.
    stop := stop min: context size.

    ^(1 to: stop) collect:[:i|
        (localVariableTable nameForSlot: i - 1 atPC: pc) ? '<inaccessible>'.
    ].

    "Created: / 18-12-2012 / 18:17:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 05-11-2013 / 17:28:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

methodArgAndVarValuesInContext: context
    | pc stop |

    localVariableTable isNil ifTrue:[
        | values |

        values := Array new: context size.
        values replaceFrom: 1  count: context size with: context  startingAt: 1.
        ^ values.
    ].
    context isJavaContext ifTrue:[
        pc := context pc.
    ] ifFalse:[
        "/ It may happen that the context for Java method is not
        "/ a JavaContext. This is true for some code-saver functions
        "/ such as __retInst1(), __retSelf1() and so on. In that case,
        "/ method sould be simple enough to have no nested scopes
        "/ or local variables. Forcing pc := 0 therefore works fine
        pc := 0.
    ].

    stop := context arg1Index - 1 + self numArgs + self numVars.
    stop := stop min: context size.


    ^(1 to: stop) collect:[:i|
        (localVariableTable nameForSlot: i - 1 atPC: pc) notNil ifTrue:[
            context at: i
        ] ifFalse:[
            nil
        ].
    ].

    "Created: / 04-11-2013 / 18:53:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 05-11-2013 / 17:28:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

methodArgNames
    |nA "{ Class: SmallInteger }" isStatic|

    isStatic := self isStatic.
    nA := self numArgs.
    ^ 1 to:nA collect: [:argIndex |
            |slot name|

            "/ search for an entry with that index (slot),
            "/ which has is valid at PC 0

            localVariableTable notNil ifTrue:[
                isStatic ifTrue:[
                    slot := argIndex - 1
                ] ifFalse:[
                    slot := argIndex "/+ 1
                ].
                name := localVariableTable nameForSlot:slot atPC:0.
            ].
            name isNil ifTrue:[
                name := 'arg' , argIndex printString
            ].
            name
    ].

    "Modified: / 23-11-2010 / 19:47:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

methodVarNames
    |nV|

    nV := self numVars.
    localVariableTable notNil ifTrue:[
        ^ (self numArgs + 1 to: self numArgs + nV) collect:
            [:argIndex |
                |slot name|
                "/ search for an entry with that index (slot),
                "/ which has is valid at PC 0

                self isStatic ifTrue:[
                    slot := argIndex - 1
                ] ifFalse:[
                    slot := argIndex"/ + 1
                ].
                name := localVariableTable nameForSlot:slot atPC:0.
                name isNil ifTrue:[
                    'local' , argIndex printString
                ] ifFalse:[
                    name
                ].
            ]
    ].
    ^ (1 to:nV) collect:[:i | 'local' , i printString]

    "Created: / 23-11-2010 / 19:28:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

name
    ^ (selector copyButLast:descriptor size) asSymbol

    "Created: 16.4.1996 / 11:34:22 / cg"
!

nameSpaceName

    ^''

    "Created: / 18-10-2010 / 19:10:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

numJArgs

    ^self numberOfJavaArgs

    "Created: / 25-10-2011 / 10:50:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

numJavaArgs

    ^self numberOfJavaArgs

    "Created: / 25-10-2011 / 10:50:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

numberOfJavaArgs

    ^(accessFlags bitAnd: 16r00FF0000) rightShift: 16.

    "Created: / 25-10-2011 / 10:45:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

numberOfJavaArgs: nArgs

    ( nArgs > 16rFF ) ifTrue:[
        ArgumentError raiseRequestWith:self errorString:'too many args method  - ', nArgs printString.
    ].

    accessFlags := accessFlags bitOr:
        ((nArgs bitAnd: 16rFF) bitShift: 16)

    "Created: / 25-10-2011 / 10:43:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

originalMethodIfWrapped
    "return the method the receiver is wrapping - none here"

    ^ self

    "Created: / 22-10-2010 / 11:46:07 / cg"
!

previousVersion
    ^ nil

    "Created: 30.7.1997 / 15:56:18 / cg"
!

previousVersionCode

    ^nil

    "Created: / 18-10-2010 / 20:15:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

retValSignature
    ^ self class retValSpecFromSignature:descriptor in:nil

    "Modified: / 8.1.1998 / 19:06:40 / cg"
!

returnType
    "/ ^ returnType
    ^ self class typeFromSignature:descriptor in:nil.

    "Modified: / 16.10.1998 / 00:17:43 / cg"
!

returnTypeClass
    |cls returnType|

    (returnType := self returnType) isNil ifTrue:[
        self halt.
    ].
    cls := Java at:returnType.
    cls notNil ifTrue:[^ cls].

    returnType == #void ifTrue:[
        ^ nil
    ].
    returnType == #double ifTrue:[
        'warning: no returnTypeClass for double' printCR.
"/        self halt:'no returnTypeClass for double'.
        ^ nil
    ].
    returnType == #float ifTrue:[
        'warning: no returnTypeClass for float' printCR.
"/        self halt:'no returnTypeClass for float'.
        ^ nil
    ].
    returnType == #long ifTrue:[
        'warning: no returnTypeClass for long' printCR.
"/        self halt:'no returnTypeClass for long'.
        ^ nil
    ].
    returnType == #int ifTrue:[
        'warning: no returnTypeClass for int' printCR.
"/        self halt:'no returnTypeClass for int'.
        ^ nil
    ].
    returnType == #boolean ifTrue:[
        'warning: no returnTypeClass for boolean' printCR.
"/        self halt:'no returnTypeClass for boolean'.
        ^ nil
    ].
    self halt.
    ^ nil

    "Created: / 13.2.1998 / 15:08:26 / cg"
    "Modified: / 16.10.1998 / 00:16:07 / cg"
!

returnsDouble
    ^ self returnType == #double

    "Modified: / 16.10.1998 / 00:18:24 / cg"
!

returnsLong
    ^ self returnType == #long

    "Modified: / 16.10.1998 / 00:18:41 / cg"
!

returnsVoid
    ^ self returnType == #void

    "Modified: / 16-10-1998 / 00:18:53 / cg"
    "Modified: / 22-03-2011 / 12:27:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

selector
    "/ could theoretically be extracted from my classes
    "/ methodDictionary via:
    "/  ^ javaClass methodDictionary keyAtValue:self ifAbsent:nil.

    ^ selector

    "Created: / 7.1.1998 / 14:05:11 / cg"
    "Modified: / 16.10.1998 / 13:41:06 / cg"
!

signature
    ^ signature

    "Modified: / 04-12-2011 / 19:39:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

source
    | sourceString |

    (self isSynthetic or:[ForceByteCodeDisplay == true]) ifTrue:[
        ^ self decompiledBytecode
    ].

    sourceString := javaClass source.
    sourceString isNil ifTrue:[
        ^ self decompiledSource.
    ].
    ShowFullSource ifTrue:[ ^ sourceString ].
    source notNil ifTrue:[
        ^ source readFrom: sourceString.
    ].


    "/ stx:libjava/tools may not be loaded...
    JavaSourceDocument notNil ifTrue:[
        "/ As a side effect, this fills in source references for all methods.
        "/ see JavaSourceDocument
        | document |

        ((document := self sourceDocument) notNil and:[document sourceTreeOrNilIfParsing notNil]) ifTrue:[
            ^ source readFrom: sourceString.
        ]
    ].
    ^ sourceString

    "Modified: / 04-01-1998 / 13:48:35 / cg"
    "Modified: / 13-12-2010 / 11:06:51 / Jan Kurs <kurs.jan@post.cz>"
    "Modified: / 14-09-2013 / 12:01:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

sourceDocument
    | doc |
    "/ stx:libjava/tools may not be loaded...
    JavaSourceDocument notNil ifTrue:[
        doc := JavaSourceDocument cachedDocumentFor: javaClass.
        doc isNil ifTrue:[
            doc := JavaSourceDocument for: javaClass.
            JavaSourceDocument cachedDocumentFor: javaClass put: doc.
        ].
        ^ doc
    ]

    "Created: / 07-09-2013 / 02:29:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

sourceFilename
    ^ javaClass sourceFile
!

sourceLineNumber
    "Return the line number of method declaration
     withing method's source"

    ^ ShowFullSource ifFalse:[
        "Showing only method's source..."
        source notNil
            ifTrue:[source line0 - source lineH + 1]
            ifFalse:[1].
    ] ifTrue:[
        "Showing full source..."
        source notNil ifTrue:[
            source lineH
        ] ifFalse:[
            self firstInstructionLineNumber - 2.
        ]
    ].

    "Created: / 30-07-1997 / 15:40:45 / cg"
    "Modified: / 13-12-2010 / 23:46:30 / Marcel Hlopko <hlopik@gmail.com>"
    "Modified: / 08-01-2011 / 16:20:40 / Jan Kurs <kurs.jan@post.cz>"
    "Modified: / 11-09-2013 / 03:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

wrapper

    ^nil

    "Created: / 18-10-2010 / 19:11:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'compiler interface'!

flushCode
    "Flushes jitted code, effectively cause a recompile"
    self code: nil.
    ObjectMemory flushCachesForSelector: selector.

    "Created: / 15-10-2012 / 21:03:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

mcompile
    "__mcompile(OBJ aMethod, unsigned char *bytecode, int nBytes, int nArgs, OBJ receiver, OBJ selector, OBJ srchClass, OBJ *pArgsOrNull)"

    | bytecode  nBytes  nArgs  receiver  mySelector  srchClass  pArgsOrNull  retVal |
    bytecode := self byteCode.
    nBytes := self byteCode size.
    nArgs := self numArgs.
    receiver := nil.
    mySelector := self selector.
    srchClass := self mclass.

%{
retVal = __mcompile(self, __ByteArrayInstPtr(bytecode), __intVal(nBytes), __intVal(nArgs), receiver, mySelector, srchClass, pArgsOrNull);


%}.
self halt.

    "Created: / 24-02-2012 / 11:39:13 / m"
    "Modified: / 24-02-2012 / 14:00:04 / Marcel Hlopko <hlopik@gmail.com>"
!

programmingLanguage
    "Returns a programming language of the method"

    "Do not return JavaLanguage unconditionally here.
     Consider another JVM-based languages (such as Groovy)"
    ^javaClass programmingLanguage

    "Created: / 26-10-2010 / 23:42:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

updateFrom: anotherMethod

    self class allInstVarNames keysAndValuesDo:[:index :name|
        (#(#'code*' #'javaClass') includes: name) ifFalse:[
            self instVarAt: index put: (anotherMethod instVarAt: index)
        ]
    ]

    "Created: / 19-04-2013 / 00:08:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'debugging'!

breakPoint
    Debugger enter:thisContext sender withMessage:'breakpoint'

    "Modified: / 9.1.1998 / 23:01:17 / cg"
!

clearBreakPoint
    | clsInEvent |

    accessFlags := (accessFlags bitClear:A_BREAKPOINT).
    self hasCode ifTrue:[
        MessageTracer unwrapMethod:self
    ] ifFalse:[
        clsInEvent := self isStatic
                        ifTrue:[ javaClass theMetaclass ]
                        ifFalse:[ javaClass ].
        Smalltalk changed:#methodTrap with:{ clsInEvent . selector }
    ]

    "Modified: / 13-11-1998 / 23:31:00 / cg"
    "Modified: / 30-05-2012 / 19:31:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

isCounting
    ^ false.

    "Created: / 12.1.1998 / 20:02:23 / cg"
!

isCountingMemoryUsage
    ^ false.

    "Created: / 12.1.1998 / 20:03:22 / cg"
!

setBreakPoint
    | clsInEvent |

    accessFlags := (accessFlags bitOr:A_BREAKPOINT).
    self hasCode ifTrue:[
        MessageTracer trapMethod:self
    ] ifFalse:[
        clsInEvent := self isStatic
                        ifTrue:[ javaClass theMetaclass ]
                        ifFalse:[ javaClass ].
        Smalltalk changed:#methodTrap with:{ clsInEvent . selector }
    ].

    "Modified: / 13-11-1998 / 23:30:45 / cg"
    "Modified: / 30-05-2012 / 19:30:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'decompiling'!

decompileSourceTo:aStream
    |argNames|

    byteCode isNil ifTrue:[
        self isPublic ifTrue:[
            aStream nextPutAll:'public '.
        ].
        self isProtected ifTrue:[
            aStream nextPutAll:'protected '.
        ].
        self isPrivate ifTrue:[
            aStream nextPutAll:'private '.
        ].
        self isStatic ifTrue:[
            aStream nextPutAll:'static '.
        ].

        self isNative ifTrue:[
            aStream nextPutAll:'native '.
        ].
        self isAbstract ifTrue:[
            aStream nextPutAll:'abstract '.
        ].
        argNames := #('arg1' 'arg2' 'arg3' 'arg4' 'arg5' 'arg6' 'arg7' 'arg8' 'arg9').
        aStream nextPutAll:(self signatureNameWithArgNames:argNames).
        aStream nextPutAll:';'; cr.
        ^ self
    ].

    "
    JavaDeparser isNil ifTrue:[
        aStream nextPutAll:'// Sorry - no decompiler'.
        ^ self
    ].
    "


"/    self isNative ifFalse:[
"/        self isAbstract ifFalse:[
            aStream nextPutAll:'// source not available...'; cr.
            SignalSet anySignal handle:[:ex |
                ex creator == Object haltSignal ifTrue:[ex reject].
                ex creator == MessageTracer breakpointSignal ifTrue:[ex reject].
                ex creator == Signal noHandlerSignal ifTrue:[ex reject].

                aStream nextPutAll:'error while decompiling:'.
                aStream cr; cr; spaces:4.
                aStream nextPutAll:ex errorString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender sender printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender sender sender printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender sender sender sender printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender sender sender sender sender printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender sender sender sender sender sender printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender sender sender sender sender sender sender printString.
                aStream cr.
                aStream nextPutAll:ex suspendedContext sender sender sender sender sender sender sender sender printString.
                aStream cr.

                "
                JavaByteCodeDisassembler isNil ifTrue:[
                    aStream nextPutAll:'// Sorry - no decompiler'
                ] ifFalse:[
                    JavaByteCodeDisassembler diassemble:self to:aStream.
                ].
                "
                ex return
            ] do:[
                "aStream nextPutAll:(JavaDeparser decompile:self)."
                JavaByteCodeDisassembler diassemble:self to:aStream.
            ].
"/        ].
"/    ].

    "Created: / 30-07-1997 / 16:28:09 / cg"
    "Modified: / 21-12-1999 / 14:31:54 / cg"
    "Modified: / 22-03-2011 / 21:34:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

decompiler
    ^ JavaDecompiler

    "Created: 30.7.1997 / 16:36:48 / cg"
!

isMethod
    "return true, if the receiver is some kind of method;
     true returned here - the method is redefined from Object."

    ^ true

    "Created: / 13.11.1998 / 23:57:40 / cg"
!

originalMethod
    ^ self

    "Created: / 13.1.1998 / 15:03:05 / cg"
! !

!JavaMethod methodsFor:'error handling'!

errorInvalidClassRefAt: index

    "Sent by the VM when an invalid entry in contant pool
     is encountered - for instance when the VM expects
     a classref but the entry is not a classref"

    "
    javaClass constantPool at: index.
    "

    JavaInvalidRefError new
        javaClass: javaClass;
        index: index;
        raiseRequest

    "Created: / 18-07-2011 / 23:33:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

errorInvalidFieldRefAt: index

    "Sent by the VM when an invalid entry in contant pool
     is encountered - for instance when the VM expects
     a classref but the entry is not a classref"

    "
    javaClass constantPool at: index.
    "

    JavaInvalidRefError new
        javaClass: javaClass;
        index: index;
        raiseRequest

    "Created: / 18-07-2011 / 23:33:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

errorInvalidMethodRefAt: index

    "Sent by the VM when an invalid entry in contant pool
     is encountered - for instance when the VM expects
     a classref but the entry is not a classref"

    "
    javaClass constantPool at: index.
    "

    JavaInvalidRefError new
        javaClass: javaClass;
        index: index;
        raiseRequest

    "Created: / 18-07-2011 / 19:59:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

invalidByteCode
    self isAbstract ifTrue:[
        ^ AbstractMethodInvokationSignal raise.
    ].
    ((self class numArgsFromDescriptor:descriptor) > self class maxNumberOfArguments) ifTrue:[
        ^ self error:'method cannot be executed - too many args'
    ].
    ^ super invalidByteCode

    "Created: / 27-01-1998 / 21:48:01 / cg"
    "Modified: / 14-08-2011 / 19:29:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

invalidMethodRef
    self halt.
    ^ nil.

    "Modified: / 27.1.1998 / 21:50:19 / cg"
    "Created: / 16.10.1998 / 11:27:21 / cg"
!

nullClassPointer
    JavaVM throwClassNotFoundException
!

wrongNumberOfArguments:numArgsGiven
    "{ Pragma: +optSpace }"

    "this error is triggered by the VM, if a method is called with a wrong number
     of arguments.
     This only applies to #valueWithReceiverXXX and #perform:withArguments: - sends.
     With a normal send, this error cannot happen."

    ^ JavaVM
        throwIllegalArgumentException:(' - %1 got %2 arg(s) where %3 expected'
                        bindWith:self class name
                        with:numArgsGiven
                        with:self numArgs)

    "
     2 perform:#+
    "

    "Modified: / 01-08-1997 / 00:23:10 / cg"
    "Created: / 07-09-2011 / 14:17:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'executing'!

valueWithReceiver:anObject arguments:argArray selector:aSymbol search:aClass sender:virtualSender
    self isStatic ifTrue:[
        anObject == javaClass ifFalse:[
            self error: 'Invalid receiver - only owning class can be a receiver of static method invocation!!'
        ]
    ].
    ^super valueWithReceiver:anObject arguments:argArray selector:aSymbol search:aClass sender:virtualSender

    "Created: / 31-10-2012 / 23:09:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'initialization'!

resolve
    "Called by VM to resolve all references used by this method. When
     successful (i.e., all references has been successfully resolved, a
     A_RESOLVED flag is set (to prevent VM from subsequent calls
     to this method)

     Returns 1 if successfull, 0 if not (at least one reference
     could not been resolved) or -1 when some (unspecified) erorr
     occurs."
    "Marcel, continue here!! And ALWAYS commit ALL the code!! Sigh"

    [
	JavaByteCodePreresolver preresolve: self.
	accessFlags := accessFlags | A_RESOLVED.
        ^1.
    ] on: Error do:[:ex|
        self breakPoint: #mh.  "Marcel, please fix it"
        ^0.
    ].

    "/RETURN 1...OK,
    "/       0...Something could not be resolved
    "/      -1...Some error
    self breakPoint:#mh.
    ^ 1.

    "Created: / 09-02-2012 / 20:59:22 / mh <hlopik@gmail.com>"
    "Modified: / 11-02-2012 / 13:46:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified (format): / 23-02-2012 / 17:49:09 / Marcel Hlopko <hlopik@gmail.com>"
    "Modified: / 24-02-2012 / 14:46:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

setAccessFlags:flags
    accessFlags := flags.

    "Created: 16.4.1996 / 11:34:14 / cg"
!

setCode:codeBytes maxStack:max_stack maxLocals:max_locals u1:unknown1 u2:unknown2
"/    javaByteCode := codeBytes.
    byteCode := codeBytes.
    "/ numStack := max_stack.
    "/ numLocals := max_locals.
    super numberOfVars:max_locals - self numArgs - (self isStatic ifTrue:[0] ifFalse:[1]).
    super stackSize:max_stack.



"/    self displayString printNL.
"/    '   nStack: ' print. numStack print.
"/    ' nLocal: ' print. numLocals print.
"/    ' u1: ' print. unknown1 print.
"/    ' u2: ' print. unknown2 printNL.

    "Modified: / 01-08-1997 / 00:08:32 / cg"
    "Modified: / 12-10-2012 / 11:46:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setDescriptor:aString

    descriptor := aString asSymbol.

    "Created: / 16-04-1996 / 11:34:29 / cg"
    "Modified: / 16-10-1998 / 00:17:12 / cg"
    "Modified: / 13-08-2011 / 01:21:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Created: / 14-08-2011 / 19:41:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setJavaClass:aJavaClass
    javaClass := aJavaClass

    "Modified: 16.4.1996 / 12:36:27 / cg"
    "Created: 16.4.1996 / 15:28:15 / cg"
!

setLineNumberTable:anArrayOfPCtoLineAssociations
    "since this uses up lots of memory, compress it"

    |allBytes allWords idx|

    allBytes := allWords := true.

    anArrayOfPCtoLineAssociations do:[:assoc |
        assoc key > 255 ifTrue:[
            allBytes := false.
            assoc key > 16rFFFF ifTrue:[
                allWords := false.
            ].
        ].
        assoc value > 255 ifTrue:[
            allBytes := false.
            assoc value > 16rFFFF ifTrue:[
                allWords := false
            ].
        ].
    ].
    allBytes ifTrue:[
        lineNumberTable := ByteArray new:(anArrayOfPCtoLineAssociations size * 2).
    ] ifFalse:[
        allWords ifTrue:[
            lineNumberTable := WordArray new:(anArrayOfPCtoLineAssociations size * 2).
        ] ifFalse:[
            lineNumberTable := Array new:(anArrayOfPCtoLineAssociations size * 2).
        ]
    ].

    idx := 1.
    anArrayOfPCtoLineAssociations do:[:assoc |
        lineNumberTable at:idx   put:assoc key.
        lineNumberTable at:idx+1 put:assoc value.
        idx := idx + 2.
    ].

    "Created: 16.4.1996 / 12:34:04 / cg"
    "Modified: 16.4.1996 / 12:49:06 / cg"
!

setLocalVariableTable:anArray
     localVariableTable := anArray.
!

setName:name descriptor:desc
    | numArgs numJArgs returnTypeSignatureChar returnTypeIsPrimitiveArray |

    "/ Force Symbol creation so Smalltalk syntax highlighter will not
    "/ mark them as unknown message (it detects this solely by existence
    "/ of the symbol.
    name asSymbol.

    selector := (name , desc) asSymbol.
    self setDescriptor:desc.

    numJArgs := self class numArgsFromDescriptor:desc.
    (numJArgs > self class maxNumberOfArguments) ifTrue:[
        numArgs := 1.
    ] ifFalse:[
        numArgs := numJArgs.
    ].
    self numberOfArgs:numArgs.
    self numberOfJavaArgs:numJArgs.
    returnTypeSignatureChar := descriptor last.


     "/ for the convenience of the VM, also mirror the return type in
     "/ the flags ...


    returnTypeSignatureChar == $V ifTrue:[
            accessFlags := accessFlags bitOr:ACX_R_VOID
    ] ifFalse:[
        returnTypeIsPrimitiveArray := (descriptor at: (descriptor size - 1)) == $[.
        returnTypeIsPrimitiveArray ifFalse:[
            returnTypeSignatureChar == $J ifTrue:[
                accessFlags := accessFlags bitOr:ACX_R_LONG
            ] ifFalse:[
               returnTypeSignatureChar == $D ifTrue:[
                  accessFlags := accessFlags bitOr:ACX_R_DOUBLE
               ].
            ].
        ].
    ].

    "Created: / 14-08-2011 / 19:41:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 21-05-2014 / 20:47:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setSignature:aString

    signature := aString asSymbol.

    "Created: / 16-04-1996 / 11:34:29 / cg"
    "Modified: / 16-10-1998 / 00:17:12 / cg"
    "Modified (format): / 14-08-2011 / 19:41:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

setSource:aJavaMethodSourceRef
    self assert: aJavaMethodSourceRef class == JavaSourceRef.
    source := aJavaMethodSourceRef

    "Created: / 07-09-2013 / 01:44:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 13-09-2013 / 02:19:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'inspecting'!

inspectorExtraAttributes
    "extra (pseudo instvar) entries to be shown in an inspector."

    ^ Dictionary new
        declareAllNewFrom:(super inspectorExtraAttributes ? #());
        "/add:'-code' -> [ String streamContents:[:s | JavaDecompiler decompile: self to: s] ];
        add:'-code' -> [ String streamContents:[:s | JavaByteCodeDisassembler diassemble: self to: s] ];
        "/add:'-source' -> [ self source ];
        yourself

    "Modified: / 22-03-2011 / 21:13:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'interpretation'!

interpretWithReceiver: receiver

    ^self
        interpretWithReceiver: receiver
        arguments: #()

    "Created: / 24-02-2011 / 22:05:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

interpretWithReceiver: receiver arg: a1

    ^self
        interpretWithReceiver: receiver
        arguments: (Array with: a1)

    "Created: / 24-02-2011 / 22:05:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

interpretWithReceiver: receiver arg: a1 arg: a2

    ^self
        interpretWithReceiver: receiver
        arguments: (Array with: a1 with: a2)

    "Created: / 24-02-2011 / 22:05:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

interpretWithReceiver: receiver arg: a1 arg: a2 arg: a3

    ^self
        interpretWithReceiver: receiver
        arguments: (Array with: a1 with: a2 with: a3)

    "Created: / 24-02-2011 / 22:06:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

interpretWithReceiver:aReceiver arguments:argVector
    "invoked by VM for non-Smalltalk-methods (MetaMethods)"

    ^ JavaByteCodeInterpreter interpret: self receiver: aReceiver arguments: argVector

    "Created: / 17-10-2013 / 01:56:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'methodref interchangability'!

homeMethod
    ^ self
!

method
    ^ self
!

setPackage:newPackage
    newPackage ~= javaClass package ifTrue:[
        self halt:'java method cannot be in a package different from its class'.
    ]
! !

!JavaMethod methodsFor:'misc'!

fromMethod:aJavaMethod
    "copy values from another javaMethod"

    flags := aJavaMethod flags.
    byteCode := aJavaMethod byteCode.
    accessFlags := aJavaMethod accessFlags.
    selector := aJavaMethod selector.
    javaClass := aJavaMethod javaClass.
    descriptor := aJavaMethod instVarNamed:#descriptor.
    signature := aJavaMethod instVarNamed:#signature.
    lineNumberTable := aJavaMethod lineNumberTable.
    localVariableTable := aJavaMethod localVariableTable.
    annotations := aJavaMethod annotations.

    "Modified: / 16-10-1998 / 01:27:19 / cg"
    "Modified: / 14-08-2011 / 19:30:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

updateClassRefsFrom:oldClass to:newClass
    javaClass == oldClass ifTrue:[
        "/ invalidate
        byteCode := nil.
    ]

    "Created: / 6.1.1998 / 18:19:48 / cg"
! !

!JavaMethod methodsFor:'printing & storing'!

displayString
    javaClass isNil ifTrue:[
        ^ self class name , '(???)'
    ].
    ^ self class name , '(' , javaClass displayString , '::' , self signatureName , ')'

    "Modified: / 25.9.1999 / 23:04:01 / cg"
!

printOn: aStream

    super printOn: aStream.
    aStream nextPut: $(.
    javaClass name printOn: aStream.
    aStream nextPut: $..
    selector printOn: aStream.
    aStream nextPut: $).

    "Created: / 05-12-2011 / 01:30:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

printStringForBrowserWithSelector:dummySelector
"/    self isStatic ifTrue:[
"/        ^ 'static ' , self signatureName
"/    ].
"/    self isBreakpointed ifTrue:[
"/        ^ (LabelAndIcon '!! ' , self signatureName
"/    ].

    self name = #'<clinit>' ifTrue:[
        ^ 'static {}'
    ].

    ^ self name = #'<init>' ifTrue:[
        self class specTextFromSignature:descriptor in:javaClass package withName:(javaClass lastName) isConstructor: true
    ] ifFalse:[
        self class specTextFromSignature:descriptor in:javaClass package withName:(self name) isConstructor: false
    ]

    "Created: / 16-10-2013 / 00:52:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

printStringForBrowserWithSelector:dummySelector inClass:dummyClass
"/    self isStatic ifTrue:[
"/        ^ 'static ' , self signatureName
"/    ].
"/    self isBreakpointed ifTrue:[
"/        ^ (LabelAndIcon '!! ' , self signatureName
"/    ].

    self name = #'<clinit>' ifTrue:[
        ^ 'static {}'
    ].

    ^ self name = #'<init>' ifTrue:[
        self class specTextFromSignature:descriptor in:javaClass package withName:(javaClass lastName) isConstructor: true
    ] ifFalse:[
        self class specTextFromSignature:descriptor in:javaClass package withName:(self name) isConstructor: false
    ]

    "Created: / 16-10-2013 / 00:55:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

selectorPrintStringInBrowserFor:dummySelector
    ^ self selectorPrintStringInBrowserFor:dummySelector class: javaClass

    "Created: / 16-10-2013 / 01:02:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

selectorPrintStringInBrowserFor:dummySelector class: dummyClass
    ^ self printStringForBrowserWithSelector:dummySelector inClass:dummyClass

    "Created: / 16-10-2013 / 01:03:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

shortDisplayString
    ^ javaClass name , '::' , self signatureNameWithoutReturnType
!

signatureName
    "return a string to be used when browsing"

    ^ self class specFromSignature:descriptor withName:(self name) in:nil

    "Modified: / 8.1.1998 / 19:15:33 / cg"
!

signatureNameFor:name withArgsIn:aPackage
    "return a string to be used when decompiling"

    ^ name = '<init>' ifTrue:[
        self class specWithArgsFromSignature:descriptor withName: javaClass lastName in:aPackage isConstructor: true.
    ] ifFalse:[
        self class specWithArgsFromSignature:descriptor withName:(self name) in:aPackage isConstructor: false.
    ]

    "Created: / 25-03-1997 / 18:49:45 / cg"
    "Modified: / 04-10-2013 / 12:33:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

signatureNameIn:aPackage
    "return a string to be used when browsing"

    ^ self class specFromSignature:descriptor withName:(self name) in:aPackage

    "Created: 18.3.1997 / 11:11:01 / cg"
!

signatureNameText
    "return a text to be used when browsing"

    ^ self class specTextFromSignature:descriptor withName:(self name)

    "Created: 30.7.1997 / 14:40:29 / cg"
!

signatureNameTextFor:name withArgsIn:aPackage
    "return a text to be used when decompiling"

    ^ self class specTextWithArgsFromSignature:descriptor withName:name in:aPackage

    "Created: 25.3.1997 / 18:49:45 / cg"
    "Modified: 1.8.1997 / 10:44:28 / cg"
!

signatureNameWithArgNames:argNames
    "return a string to be used when browsing"

    |myName|

    myName := self name.
    myName = '<init>' ifTrue:[
        myName := javaClass name
    ].
    ^ self class specFromSignature:descriptor withName:myName argNames:argNames in:nil

    "Created: / 8.1.1998 / 21:04:03 / cg"
    "Modified: / 8.1.1998 / 21:22:38 / cg"
!

signatureNameWithArgNames:argNames in:package
    "return a string to be used when browsing"

    |myName|

    myName := self name.
    myName = '<init>' ifTrue:[
        myName := javaClass name
    ].
    ^ self class specFromSignature:descriptor withName:myName argNames:argNames in:package

    "Modified: / 8.1.1998 / 21:05:52 / cg"
    "Created: / 8.1.1998 / 21:23:03 / cg"
!

signatureNameWithArgsIn:aPackage
    "return a string to be used when browsing"

    ^ self signatureNameFor: self name withArgsIn: aPackage

    "Created: / 20-03-1997 / 12:44:17 / cg"
    "Modified: / 04-10-2013 / 12:34:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

signatureNameWithModifiers
    "return a string to be used when deassembling"

    | result |

    result := self signatureName.
    self isFinal ifTrue: [ result := 'final ' , result ].
    self isStatic ifTrue: [ result := 'static ' , result ].
    self isSynchronized ifTrue: [ result := 'synchronized ' , result ].
    self isPrivate
        ifTrue: [ result := 'private ' , result ]
        ifFalse:
            [ self isProtected
                ifTrue: [ result := 'protected ' , result ]
                ifFalse: [ self isPublic ifTrue: [ result := 'public ' , result ] ] ].
    self isAbstract ifTrue: [ result := 'abstract ' , result ].
    ^ result.

    "Modified: / 08-01-1998 / 19:15:33 / cg"
    "Created: / 22-03-2011 / 16:25:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

signatureNameWithoutReturnType
    "return a string to be used when browsing"

    ^ self class argSpecFromSignature:descriptor withName:(self name)

!

whoString
    ^ javaClass name , '>>' , (self printStringForBrowserWithSelector:nil inClass:nil)

    "Created: / 13-06-2013 / 08:52:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'queries'!

canBeUpdatedFrom: anotherMethod
    "Return if receiver can be updated from given method, i.e., if it is safe
     to just to take anotherMethod's bytecode. Used to implement fix & restart
     workflow"

    "/ Allready jitted method cannot be updated - no way to restart existing context into
    "/ new code
    self code notNil ifTrue:[ ^ false ].

    "/ Args and their types must match
    selector ~~ anotherMethod selector ifTrue: [ ^ false ].

    "/ max stack depth must be smaller or equal of the current
    (self numVars + self stackSize) < (anotherMethod numVars + anotherMethod stackSize) ifTrue:[ ^ false ].

    ^true

    "Created: / 18-04-2013 / 23:43:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

handlerFor:anException at:pc
    "return an exceptionHandlers pc, for an exception of the given type,
     occurring at pc. Returns nil, if there is none."

    |handlerTable|

    (handlerTable := self exceptionHandlerTable) isNil ifTrue:[^ nil].
    ^handlerTable handlerPCFor:anException at:pc in:self.

    "Created: / 16-10-1998 / 01:18:40 / cg"
    "Modified: / 25-09-1999 / 23:07:01 / cg"
    "Modified: / 06-05-2013 / 21:49:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hasFinally
    ^ (accessFlags bitAnd:A_HASFINALLY) ~~ 0

    "Created: / 28-03-2012 / 20:35:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hasFinallyBasedOnExceptionTable
    "Returns true if the exeption table has at least one
     entry for finally block"
    ^false

    "Created: / 28-03-2012 / 23:18:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hasHandler
    ^ (accessFlags bitAnd:A_HASHANDLER) ~~ 0

    "Created: / 28-03-2012 / 20:35:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hasPrimitiveCode

    ^false

    "Created: / 18-07-2011 / 20:45:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hasResource
    ^ false
!

isAbstract
    ^ (accessFlags bitAnd:A_ABSTRACT) ~~ 0
!

isBreakpointed
    ^ (accessFlags bitAnd:A_BREAKPOINT) ~~ 0

    "Modified: / 11.1.1998 / 13:28:43 / cg"
!

isFinal
    ^ (accessFlags bitAnd:A_FINAL) ~~ 0
!

isIgnored
    "not really a java attribute;
     added to allow browsing"

    ^ false.

    "Created: 30.7.1997 / 15:34:33 / cg"
!

isJavaClassRef
    ^ false

    "Created: / 9.11.1999 / 17:16:20 / cg"
!

isJavaConstructor
    ^((selector first) == $<) and:[selector startsWith:'<init>(']

    "Created: / 01-08-2012 / 00:21:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

isJavaMethod
    ^ true

    "Created: / 10.11.1998 / 18:24:51 / cg"
!

isJavaStaticInitializer
    ^((selector first) == $<) and:[selector startsWith:'<clinit>(']

    "Created: / 19-09-2012 / 16:26:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

isNative
    ^ (accessFlags bitAnd:A_NATIVE) ~~ 0
!

isPackagePrivate
    ^ (accessFlags bitAnd:A_PRIVATE | A_PUBLIC | A_PROTECTED) = 0

    "Created: / 05-07-2012 / 10:12:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

isPrivate
    ^ (accessFlags bitAnd:A_PRIVATE) ~~ 0
!

isProtected
    ^ (accessFlags bitAnd:A_PROTECTED) ~~ 0
!

isPublic
    ^ (accessFlags bitAnd:A_PUBLIC) ~~ 0
!

isResolved
    "Return true, if the receiver is fully resolved, i.e.,
     if all references used by the method are resolved"

    ^ (accessFlags bitAnd:A_RESOLVED) ~~ 0

!

isStatic
    ^ (accessFlags bitAnd:A_STATIC) ~~ 0
!

isSynchronized
    ^ (accessFlags bitAnd:A_SYNCHRONIZED) ~~ 0
!

isTraced
    ^ false

    "Modified: / 11.1.1998 / 13:28:43 / cg"
    "Created: / 11.1.1998 / 13:38:11 / cg"
!

isUnloaded
    ^ false
!

isUnresolved
    "return true, if the receiver is unresolved;"

    ^ self isResolved not

    "Created: / 06-03-2011 / 22:57:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!

isWrapped
    ^ super isWrapped
"/    ^ self isBreakpointed

    "Created: / 11-01-1998 / 13:38:04 / cg"
    "Modified: / 05-11-2013 / 16:19:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

lineNumberForPC0: pc
    | last |

    lineNumberTable notNil ifTrue: [
        lineNumberTable
            pairWiseDo: [:lPc :lNr |
                lPc >= pc ifTrue: [
                    lPc == pc ifTrue: [
                        ^ lNr
                    ].
                    last isNil ifTrue: [
                        ^ lNr
                    ].
                    ^ last.
                ].
                last := lNr.
            ].
        last notNil ifTrue: [
            ^ last
        ].
        ^ lineNumberTable at: 2
    ].
    ^ nil

    "Modified: / 14.1.1998 / 13:30:54 / cg"
    "Created: / 10.11.1998 / 14:18:22 / cg"
!

lineNumberForPC:pc
    |num text|

    num := nil.

    ForceByteCodeDisplay ifFalse:[
        | line0 |

        line0 := self lineNumberForPC0: pc.
        ShowFullSource ifFalse:[
            source isNil ifTrue:[
                "/ Fetch the source ref...
                self sourceDocument sourceTreeOrNilIfParsing.
                source isNil ifTrue:[
                    ^ line0 - self firstInstructionLineNumber - 2.
                ].
            ].
            ^ line0 - source line0 + 1.
        ].
        ^ line0
    ].

    "/ decompile and look which line the pc falls into

    ForceByteCodeDisplay ifTrue:[
        text := self decompiledBytecode asCollectionOfLines.
    ] ifFalse:[
        text := self decompiledSource asCollectionOfLines.
    ].

    text keysAndValuesDo:[:lineNr :line |
        |nr|

        (line startsWith:'    ') ifFalse:[
            nr := Integer readFrom:line onError:0.
            nr >= pc ifTrue:[
                ^ lineNr
            ]
        ]
    ].
    ^ num

    "Modified: / 14-01-1998 / 13:30:54 / cg"
    "Modified: / 13-09-2013 / 02:11:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

messagesSent
    "return a collection of messages sent by this method"
    ^ self analyzer messagesSent

    "Modified: / 31-08-2013 / 10:43:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

overrides: anotherMethod
    "Returns true, if the receiver overwrites anotherMethod.
     This method implements algorithm described in JVM spec, sec. 5.4.2.1"

    anotherMethod isJavaMethod ifFalse:[
        "It is questionable what to return here. Best seems to be
         do following: if anotherMethod belongs to one of my superclasses
         (either JavaObject or Object in current impl), then return true,
         false otherwise"
        ^javaClass inheritsFrom: anotherMethod mclass.
    ].

    "An instance method m1 (self) declared in class C overrides another instance method m2
     (anotherMethod) declared in class A iff all of the following are true:"

    " - m2 has the same name and descriptor as m1. "
    selector == anotherMethod selector ifFalse:[ ^ false ].

    " - C is a subclass of A."
    (javaClass isSubclassOf: anotherMethod javaClass) ifFalse:[ ^ false ].

    "- either:
      - m2 is marked ACC_PUBLIC; or is marked ACC_PROTECTED; or is marked nei-
        ther ACC_PUBLIC nor ACC_PROTECTED nor ACC_PRIVATE and belongs to the
        same runtime package as C, or"

    (anotherMethod isPublic or:[anotherMethod isProtected]) ifTrue:[ ^ true ].
    (anotherMethod isPackagePrivate
        and:[javaClass package == anotherMethod javaClass package])
            ifTrue:[ ^ true ].

    ^false.

    "Created: / 05-07-2012 / 11:04:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

package
    "in java, class extensions are not possible;
     all methods MUST be in their classes package"

    ^ javaClass package
!

referencesGlobal:aGlobalName
    "return true, if this method refers to a global named aGlobalName"

    |walker any|

    "/ quick check, if constantPool includes a methodRef for this
    "/ selector.

    any := false.
    self javaClass constantPool do:[:const |
        (const isNumber
        or:[const isString
        or:[const isNil]]) ifFalse:[
            const isJavaClass ifTrue:[
                any := any or:[const fullName = aGlobalName].
            ] ifFalse:[
                const isJavaClassRef ifTrue:[
                    any := any or:[const fullName = aGlobalName].
                ]
            ].
        ].
    ].
    any ifFalse:[^ false].

    "/ sigh - must extract all accessed literals ...
    "/ must deparse the byteCode in order to do this.

    walker := JavaByteCodeEnumerator new.
    walker
        literalAction:
            [:pc :slotIndex :const |
                |mSel|

                (const isNumber
                or:[const isString
                or:[const isNil]]) ifFalse:[
                    const isJavaClass ifTrue:[
                        mSel := const fullName.
                    ] ifFalse:[
                        const isJavaClassRef ifTrue:[
                            mSel := const fullName.
                        ]
                    ].
                ].
                mSel notNil ifTrue:[
                    "/ Transcript showCR:mSel.
                    mSel = aGlobalName ifTrue:[
                        ^ true
                    ]
                ].
            ].
    walker decompile:self to:nil.

    "Created: / 9.11.1999 / 17:15:46 / cg"
    "Modified: / 9.11.1999 / 17:18:02 / cg"
!

sends:aSelectorSymbol
    "return true, if this method contains a message-send
     with aSelectorSymbol as selector."

     ^ self analyzer sends: aSelectorSymbol

    "Created: / 09-11-1999 / 15:38:14 / cg"
    "Modified: / 09-11-1999 / 17:06:03 / cg"
    "Modified: / 31-08-2013 / 11:37:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

shouldBeSkippedInDebuggersWalkBack

    ^false

    "Created: / 30-11-2010 / 15:35:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

who
    "return the class and selector of where I am defined in."

    |sel|

    javaClass isNil ifTrue:[^ nil].
    sel := selector.
    "/ sel := javaClass methodDictionary keyAtValue:self ifAbsent:nil.
    sel isNil ifTrue:[^ nil].
    ^ Method::MethodWhoInfo class:javaClass selector:sel.

    "Modified: / 16.10.1998 / 13:42:10 / cg"
! !

!JavaMethod methodsFor:'queries-statistic'!

messagesPossiblySent
    ^ self analyzer messagesPossiblySent

    "Created: / 30-08-2013 / 14:05:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 30-08-2013 / 17:07:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

messagesSentToSelf
    ^ self analyzer messagesSentToSelf

    "Created: / 31-08-2013 / 09:32:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

messagesSentToSuper
    ^ self analyzer messagesSentToSuper

    "Created: / 30-03-2013 / 09:59:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 30-08-2013 / 17:07:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

modifiedClassVars
    ^ #()

    "Created: / 30-08-2013 / 13:16:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

modifiedGlobals
    ^ #()

    "Created: / 05-09-2013 / 15:26:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

modifiedInstVars
    ^ self analyzer modifiedInstVars

    "Created: / 30-08-2013 / 13:18:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

modifiedPoolVars
    ^ #()

    "Created: / 05-09-2013 / 15:25:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

readClassVars
    ^ #()

    "Created: / 05-09-2013 / 15:25:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

readGlobals
    ^ self analyzer readGlobals

    "Created: / 05-09-2013 / 15:26:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

readInstVars
    ^ self analyzer readInstVars

    "Created: / 05-09-2013 / 15:24:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

readPoolVars
    ^ #()

    "Created: / 05-09-2013 / 15:25:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

sends:symbol1 or:symbol2
    ^ self analyzer sends:symbol1 or:symbol2

    "Modified: / 30-08-2013 / 17:07:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

sendsAny: selectors
    ^ self analyzer sendsAny: selectors

    "Created: / 02-12-2011 / 23:05:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 30-08-2013 / 17:08:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

usedClassVars
    ^ #() "/ No class vars in Java

    "Created: / 30-08-2013 / 13:18:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

usedGlobals
    ^ self analyzer usedGlobals

    "Created: / 05-09-2013 / 15:26:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

usedInstVars
    ^ self analyzer usedInstVars

    "Created: / 30-08-2013 / 13:18:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

usedPoolVars
    ^ #()

    "Created: / 05-09-2013 / 15:25:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod methodsFor:'signature parsing'!

XXXspecWithArgsFromSignature:aSignature withName:name in:aPackage
    "given a signature, return a spec with args"

    |s argSpec retvalSpec|

    s := aSignature readStream.
    s next ~~ $( ifTrue:[self halt. ^ name].

    argSpec := self argSpecWithArgsFromStream:s in:aPackage.

    s next ~~ $) ifTrue:[self halt. ^ name].

    retvalSpec := self retvalSpecFromStream:s in:aPackage.

    ^ retvalSpec , ' ' , name , ' (' , argSpec , ')'

    "
     JavaMethod specFromSignature:'(LObject;)V' withName:'foo'
     JavaMethod specFromSignature:'(BB)S'       withName:'foo'
    "

    "Created: / 8.1.1998 / 19:17:58 / cg"
! !

!JavaMethod methodsFor:'testing'!

isMethodWithBreakpoints
    ^self isBreakpointed
        or:[(ConfigurableFeatures includesFeature: #VMBreakpointSupport)
            and:[self breakpointTable notEmptyOrNil]]

    "Created: / 11-04-2013 / 14:50:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

isSynthetic
    ^ (accessFlags bitAnd:A_SYNTHETIC) ~~ 0

    "Created: / 18-10-2010 / 19:09:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaMethod class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libjava/JavaMethod.st,v 1.117 2015-01-28 02:10:50 vrany Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/libjava/JavaMethod.st,v 1.117 2015-01-28 02:10:50 vrany Exp $'
!

version_SVN
    ^ 'Id'
! !


JavaMethod initialize!