diff --git a/README.md b/README.md index 25cda9ad6..4f3def09d 100644 --- a/README.md +++ b/README.md @@ -19,56 +19,45 @@ within Eclipse, with immediate JavaScript testing and debugging in a browser bas in Java. Using the java2script/SwingJS Eclipse plug-in, both Java .class files and their equivalent .js files are created simultaneously. -java2script/SwingJS includes an Eclipse plug-in (technically a "drop-in"), net.sf.j2s.core.zip +java2script/SwingJS includes an Eclipse plug-in (technically a "drop-in"), net.sf.j2s.cor + +e.zip (see https://github.com/BobHanson/java2script/blob/master/sources/net.sf.j2s.core/dist/swingjs), along with a JavaScript version of the Java Virtual Machine (SwingJS, https://github.com/BobHanson/java2script/blob/master/sources/net.sf.j2s.java.core/SwingJS-site.zip) to allow the rapid and automated production of browser-ready JavaScript versions of Java applications and applets. -# QuickStart +# Working Examples -See https://github.com/BobHanson/java2script/tree/master/sources/net.sf.j2s.core/dist and the README file in that directory. - -# Relationship to Alternatives - -A number of alternative methods of using Java to create JavaScript have been proposed and developed to one extent or another. The following discussion compares java2script/SwingJS to these other methods, based on my own limited understanding of them as of Dec. 2019. - -## Google Web Toolkit ## +Examples of SwingJS applied to allow single-source Java+JavaScript development include: -http://www.gwtproject.org/ "GWT is a development toolkit for building and optimizing complex browser-based applications. Its goal is to enable productive development of high-performance web applications without the developer having to be an expert in browser quirks, XMLHttpRequest, and JavaScript." +Jmol-SwingJS https://github.com/BobHanson/Jmol-SwingJS -I know that GWT has been successfully employed for relatively simple application conversions from Java to JavaScript. It implements a reasonably large set of JRE classes [http://www.gwtproject.org/doc/latest/RefJreEmulation.html], but not really a sufficiently large number of classes to support developed Java projects. For example, Class.forName() is missing, so that means no dynamic class loading; File, FileInputStream, and FileOutputStream are missing, meaning no standard file i/o. Most significantly, java.awt and javax.swing are missing. This means that whatever user interface is built must be built from scratch with JavaScript only in mind. +JalView-JS https://www.jalview.org/jalview-js -In contrast, java2script/SwingJS supports an HTML5-based "platform look and feel" (plaf) that leverages all the native features of HTML5 to match the Java AWT and Swing UI. For example, virtually all the Swing and AWT frame, window, panel, dialog, border, and layout classes have been implemented. There are no additional specialized classes that a developer needs to add to his or her project. Rather than using a working Java program as the basis for a JavaScript-specific application, as in GWT, java2script/SwingJS allows for parallel co-production of distributable Java and JavaScript _equivalent_ applications. +InChI-SwingJS https://github.com/BobHanson/InChI-SwingJS (Incorporates Java JNI interface to InchI via webAssembly.) -## TeaVM ## +The Chemical Development Kit (CDK) (CDK-SwingJS) https://github.com/BobHanson/CDK-SwingJS -http://teavm.org/ "TeaVM is an ahead-of-time compiler for Java bytecode that emits JavaScript and WebAssembly that runs in a browser. Its close relative is the well-known GWT. The main difference is that TeaVM does not require source code, only compiled class files. Moreover, the source code is not required to be Java, so TeaVM successfully compiles Kotlin and Scala." +OpenChemLib (OCL-SwingJS) https://github.com/BobHanson/OCL-SwingJS -I can only find a very few examples of TeaVM use. But from what I can see, TeaVM is still at "concept" stage. It appears that they are hand writing "pseudo" Java as they go. For example, we see at +Varna (Varna-SwingJS) https://github.com/BobHanson/VARNA and https://chemapps.stolaf.edu/swingjs/varna -https://github.com/konsoletyper/teavm/tree/master/classlib/src/main/java/org/teavm/classlib +DiffractOGram https://github.com/BobHanson/diffractOgram/tree/SwingJS -that "java.awt" contains three classes: TColor, TDimension, and TPoint. TColor has exactly four methods: getRed(), getGreen(), getBlue(), and getAlpha(). It appears to me that the developer has hand-written a decent collection of 800 files as org.teavm.classlib.java. Apparently, the idea is that you would take your Java project and swap in these pseudo-java classes. But this is not scalable. One can't expect a 100,000-line Java program to be retooled or limited to this small hand-crafted set of classes. +Open Source Physics (OSP) https://github.com/OpenSourcePhysics/osp/tree/swingJS -In the author's own words, "There are Java APIs that are impossible to implement without generating inefficient JavaScript. Some of these APIs are: reflection, resources, class loaders, and JNI. TeaVM restricts usage of these APIs. Generally, you’ll have to manually rewrite your code to fit into TeaVM constraints." OK, but java2script/SwingJS implements reflection, does just-in-time class loading, uses property files and resource bundles, loads images, and much more. There are only minimal constraints that require modifying Java code. Yes, modal dialogs and Thread.sleep() do require refactoring a bit, but we have had no problem with this on over 500,000 lines of code in multiple projects. So it doesn't seem to be a major impediment. +TrackerJS https://physlets.org/tracker/trackerJS -## CheerpJ ## +MathePrisma https://www.matheprisma.de/ (over 600 applets) -https://www.leaningtech.com/cheerpj/ "CheerpJ converts Java applications or libraries into JavaScript. Works on bytecode, does not require access to the source code. Compatible with 100% of Java including reflection and dynamic classes. Existing Java archives can be converted to Web applications effortlessly" +PhET, Falstad, and other tests https://chemapps.stolaf.edu/swingjs/site/swingjs/examples (These are all early "first-generation" SwingJS tests converting AWT to Swing in Java, then transpiling.) -This sounds terrific. And truly it is. I am very impressed! Basically run the Java byte code in JavaScript. The Java Reporter demonstration at https://www.leaningtech.com/cheerpj/demos/ crashed both Firefox and Chrome for me, so I cannot really evaluate what I see here. But I have played with the JFiddle at https://javafiddle.leaningtech.com/, and it is pretty amazing. -The primary differences between java2script/SwingJS and CheerpJ, to the best of my knowledge, include: +# QuickStart -- fast start-up time. SwingJS applications generally start within a second or two, sometimes within 100 ms -- small downloads, anywhere from about 800K for a small non-GUI program to 10 MB for a full-blown Swing application (JSmol) -- class-level just-in-time dynamic class loading; no need to retrieve entire JAR files just for a few methods -- leveraging features of HTML5 and modern JavaScript rather than just painting a canvas the way Java does natively -- delivering an easily interpretable and debuggable JavaScript translation of Java classes, with little or no obscurification (unless that is desired) -- well-designed JavaScript-friendly Java core classes that leverage the considerable power of JavaScript -- open source and completely extensible +See https://github.com/BobHanson/java2script/tree/master/sources/net.sf.j2s.core/dist and the README file in that directory. # History - 2019- @@ -100,6 +89,10 @@ Jmol-SwingJS https://github.com/BobHanson/Jmol-SwingJS (code only) Varna https://github.com/BobHanson/VARNA and https://chemapps.stolaf.edu/swingjs/varna +PhET, Falstad, and other tests https://chemapps.stolaf.edu/swingjs/phet/site/swingjs/examples (These are all early "first-generation" SwingJS tests converting AWT to Swing in Java, then transpiling.) + +JSmol: https://chemapps.stolaf.edu/jmol/jsmol Non-AWT, Non-Swing version. (Our initial application of Java2Script technology, continued as "legacy Jmol" at https://sourceforge.net/projects/jmol. All continued Java development is based on work at Jmol-SwingJS even though this is still not a Swing application.) + # History - 2010-2016 https://github.com/java2script/java2script (stable master) @@ -112,14 +105,13 @@ only known widely-available java2sript application. Developed further in 2016 by zhou Renjian, Udo Borkowski, Bob Hanson, Andrew Raduege, Nadia El Mouldi, and Paul Falstad (http://www.falstad.com) for the first round of post-JSmol application of java2script, adding javax.swing classes and dubbed "SwingJS". Used by Bob Hanson during 11/2016 for conversion of the PhET gas applications applets. -Version 2 allowed extensive development of JavaScript versions of Java applets, including JSmol, Falstad applets, and PhET applets. -However, this version did not produce "fully qualified" method signatures, resulting in error-prone and performance-reducing run-time binding of methods. Java class loading procedures were not consistent with the sequence of events used by the Java class loader, and parameter and array typing was minimal. Thus, while functional, Version 2 was not fully generalizable and required extensive reworking of Java code to be "java2script compliant." +Version 2 allowed extensive development of JavaScript versions of Java applets, including JSmol, Falstad applets, and PhET applets. However, this version did not produce "fully qualified" method signatures, resulting in error-prone and performance-reducing run-time binding of methods. Java class loading procedures were not consistent with the sequence of events used by the Java class loader, and parameter and array typing was minimal. Thus, while functional, Version 2 was not fully generalizable and required extensive reworking of Java code to be "java2script compliant." Synchronized with https://github.com/BobHanson/java2script as the stable master version in 2018. Examples include: -PhET, Falstad, and other tests https://chemapps.stolaf.edu/swingjs/phet/site/swingjs/examples Initial SwingJS tests converting AWT to Swing in Java, then transpiling. +PhET, Falstad, and other tests https://chemapps.stolaf.edu/swingjs/site/swingjs/examples Initial SwingJS tests converting AWT to Swing in Java, then transpiling. JSmol: https://chemapps.stolaf.edu/jmol/jsmol Non-AWT, Non-Swing version, our initial application of Java2Script technology. @@ -133,3 +125,42 @@ Initially developed by Zhou Renjian (aka "Josson Smith", zhourenjian@gmail.com, Soheil Hassas Yeganeh (soheil.h.y@gmail.com, 2006), Sal Ferro (svferro@gmail.com, 2006), Sebastian Gurin (sgurin@softpoint.org, 2008), and others. The project was a "proof-in-concept" that saw limited actual application. +# Relationship to Alternatives + +A number of alternative methods of using Java to create JavaScript have been proposed and developed to one extent or another. The following discussion compares java2script/SwingJS to these other methods, based on my own limited understanding of them as of Dec. 2019. + +## Google Web Toolkit ## + +http://www.gwtproject.org/ "GWT is a development toolkit for building and optimizing complex browser-based applications. Its goal is to enable productive development of high-performance web applications without the developer having to be an expert in browser quirks, XMLHttpRequest, and JavaScript." + +I know that GWT has been successfully employed for relatively simple application conversions from Java to JavaScript. It implements a reasonably large set of JRE classes [http://www.gwtproject.org/doc/latest/RefJreEmulation.html], but not really a sufficiently large number of classes to support developed Java projects. For example, Class.forName() is missing, so that means no dynamic class loading; File, FileInputStream, and FileOutputStream are missing, meaning no standard file i/o. Most significantly, java.awt and javax.swing are missing. This means that whatever user interface is built must be built from scratch with JavaScript only in mind. + +In contrast, java2script/SwingJS supports an HTML5-based "platform look and feel" (plaf) that leverages all the native features of HTML5 to match the Java AWT and Swing UI. For example, virtually all the Swing and AWT frame, window, panel, dialog, border, and layout classes have been implemented. There are no additional specialized classes that a developer needs to add to his or her project. Rather than using a working Java program as the basis for a JavaScript-specific application, as in GWT, java2script/SwingJS allows for parallel co-production of distributable Java and JavaScript _equivalent_ applications. + +## TeaVM ## + +http://teavm.org/ "TeaVM is an ahead-of-time compiler for Java bytecode that emits JavaScript and WebAssembly that runs in a browser. Its close relative is the well-known GWT. The main difference is that TeaVM does not require source code, only compiled class files. Moreover, the source code is not required to be Java, so TeaVM successfully compiles Kotlin and Scala." + +I can only find a very few examples of TeaVM use. But from what I can see, TeaVM is still at "concept" stage. It appears that they are hand writing "pseudo" Java as they go. For example, we see at + +https://github.com/konsoletyper/teavm/tree/master/classlib/src/main/java/org/teavm/classlib + +that "java.awt" contains three classes: TColor, TDimension, and TPoint. TColor has exactly four methods: getRed(), getGreen(), getBlue(), and getAlpha(). It appears to me that the developer has hand-written a decent collection of 800 files as org.teavm.classlib.java. Apparently, the idea is that you would take your Java project and swap in these pseudo-java classes. But this is not scalable. One can't expect a 100,000-line Java program to be retooled or limited to this small hand-crafted set of classes. + +In the author's own words, "There are Java APIs that are impossible to implement without generating inefficient JavaScript. Some of these APIs are: reflection, resources, class loaders, and JNI. TeaVM restricts usage of these APIs. Generally, you’ll have to manually rewrite your code to fit into TeaVM constraints." OK, but java2script/SwingJS implements reflection, does just-in-time class loading, uses property files and resource bundles, loads images, and much more. There are only minimal constraints that require modifying Java code. Yes, modal dialogs and Thread.sleep() do require refactoring a bit, but we have had no problem with this on over 500,000 lines of code in multiple projects. So it doesn't seem to be a major impediment. + +## CheerpJ ## + +https://www.leaningtech.com/cheerpj/ "CheerpJ converts Java applications or libraries into JavaScript. Works on bytecode, does not require access to the source code. Compatible with 100% of Java including reflection and dynamic classes. Existing Java archives can be converted to Web applications effortlessly" + +This sounds terrific. And truly it is. I am very impressed! Basically run the Java byte code in JavaScript. The Java Reporter demonstration at https://www.leaningtech.com/cheerpj/demos/ crashed both Firefox and Chrome for me, so I cannot really evaluate what I see here. But I have played with the JFiddle at https://javafiddle.leaningtech.com/, and it is pretty amazing. + +The primary differences between java2script/SwingJS and CheerpJ, to the best of my knowledge, include: + +- fast start-up time. SwingJS applications generally start within a second or two, sometimes within 100 ms +- small downloads, anywhere from about 800K for a small non-GUI program to 10 MB for a full-blown Swing application (JSmol) +- class-level just-in-time dynamic class loading; no need to retrieve entire JAR files just for a few methods +- leveraging features of HTML5 and modern JavaScript rather than just painting a canvas the way Java does natively +- delivering an easily interpretable and debuggable JavaScript translation of Java classes, with little or no obscurification (unless that is desired) +- well-designed JavaScript-friendly Java core classes that leverage the considerable power of JavaScript +- open source and completely extensible diff --git a/sources/net.sf.j2s.core/.settings/org.eclipse.core.resources.prefs b/sources/net.sf.j2s.core/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..4824b8026 --- /dev/null +++ b/sources/net.sf.j2s.core/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/sources/net.sf.j2s.core/META-INF/MANIFEST.MF b/sources/net.sf.j2s.core/META-INF/MANIFEST.MF index c260f64ef..daa80230c 100644 --- a/sources/net.sf.j2s.core/META-INF/MANIFEST.MF +++ b/sources/net.sf.j2s.core/META-INF/MANIFEST.MF @@ -1,13 +1,14 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 -Bundle-Name: Java2Script Core -Bundle-SymbolicName: net.sf.j2s.core;singleton:=true -Bundle-Version: 3.3.1 -Bundle-Activator: net.sf.j2s.core.CorePlugin -Bundle-Vendor: j2s.sourceforge.net +Bundle-Name: Java2Script Core SwingJS and Legacy +Bundle-SymbolicName: j2s.core;singleton:=true +Bundle-Version: 5.0.1 +Bundle-Activator: j2s.CorePlugin +Bundle-Vendor: bobhanson.sourceforge.net +Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.core.runtime, org.eclipse.jdt.core, org.eclipse.core.resources -Eclipse-AutoStart: true -Export-Package: net.sf.j2s.core +Export-Package: j2s,j2s.core Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Automatic-Module-Name: Java2ScriptCore diff --git a/sources/net.sf.j2s.core/README.txt b/sources/net.sf.j2s.core/README.txt index 037b976af..3658ac76e 100644 --- a/sources/net.sf.j2s.core/README.txt +++ b/sources/net.sf.j2s.core/README.txt @@ -1,4 +1,5 @@ -The net.sf.j2s.core Eclipse project creates the Java2Script transpiler for SwingJS. +The net.sf.j2s.core Eclipse project creates the Java2Script transpiler for +SwingJS as well as a "legacy" transpiler for legacy Jmol. See the dist/dropins folder for the latest distribution and installation notes. diff --git a/sources/net.sf.j2s.core/build.properties b/sources/net.sf.j2s.core/build.properties index 3595411e8..b5a94d50b 100644 --- a/sources/net.sf.j2s.core/build.properties +++ b/sources/net.sf.j2s.core/build.properties @@ -2,5 +2,5 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ - plugin.xml,\ - schema/ + plugin.xml + diff --git a/sources/net.sf.j2s.core/dist/jmol/README.txt b/sources/net.sf.j2s.core/dist/jmol/README.txt new file mode 100644 index 000000000..8a522122c --- /dev/null +++ b/sources/net.sf.j2s.core/dist/jmol/README.txt @@ -0,0 +1,2 @@ +Looking for the transpiler? It's in the dist/swingjs folder. + diff --git a/sources/net.sf.j2s.core/dist/libjs/README.txt b/sources/net.sf.j2s.core/dist/libjs/README.txt deleted file mode 100644 index c515db26d..000000000 --- a/sources/net.sf.j2s.core/dist/libjs/README.txt +++ /dev/null @@ -1,19 +0,0 @@ -SwingJS distribution -- libjs directory - -This directory can be used to hold pre-compiled *.zip files that -have root directories swingjs and swingjs/j2s. They will be -unzipped into the site/ directory by build-site.xml. - -Generally these files would be derived from .jar files that your -program uses. If your program has jar dependencies, you will need to -find the source for those, compile it, and then zip the resulting -.js files into xxxx.zip. The ANT task that might do this should look -something like this: - - - - - Zipping up ${json.zip} - - - diff --git a/sources/net.sf.j2s.core/dist/resources/README.txt b/sources/net.sf.j2s.core/dist/resources/README.txt deleted file mode 100644 index 9c540809b..000000000 --- a/sources/net.sf.j2s.core/dist/resources/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -SwingJS distribution -- resources directory - -This directory can be used to hold non-Java files that your program -needs to run -- data files, for instance. Files in it will be copied to -the site/swingjs/j2s directory by build-site.xml. - diff --git a/sources/net.sf.j2s.core/dist/site-resources/README.txt b/sources/net.sf.j2s.core/dist/site-resources/README.txt deleted file mode 100644 index f43548c13..000000000 --- a/sources/net.sf.j2s.core/dist/site-resources/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -SwingJS distribution -- site-resources directory - -This directory can be used to hold non-Java files that your program -needs to run -- data files, for instance. Files in it will be copied to -the site/ directory by build-site.xml. - diff --git a/sources/net.sf.j2s.core/dist/swingjs/SwingJS-site.zip b/sources/net.sf.j2s.core/dist/swingjs/SwingJS-site.zip index 08b1c3366..e8f1ab3cb 100644 Binary files a/sources/net.sf.j2s.core/dist/swingjs/SwingJS-site.zip and b/sources/net.sf.j2s.core/dist/swingjs/SwingJS-site.zip differ diff --git a/sources/net.sf.j2s.core/dist/swingjs/_j2sclasslist.txt b/sources/net.sf.j2s.core/dist/swingjs/_j2sclasslist.txt index 6190ec887..0e5ac03f4 100644 --- a/sources/net.sf.j2s.core/dist/swingjs/_j2sclasslist.txt +++ b/sources/net.sf.j2s.core/dist/swingjs/_j2sclasslist.txt @@ -1,412 +1,413 @@ -java/applet/Applet.js -java/applet/AppletContext.js -java/applet/AppletStub.js -java/applet/JSApplet.js -java/awt/ActiveEvent.js -java/awt/Adjustable.js -java/awt/AWTEvent.js -java/awt/AWTEventMulticaster.js -java/awt/AWTKeyStroke.js -java/awt/BasicStroke.js -java/awt/BorderLayout.js -java/awt/Button.js -java/awt/Color.js -java/awt/color/ColorSpace.js -java/awt/Component.js -java/awt/ComponentOrientation.js -java/awt/ContainerOrderFocusTraversalPolicy.js -java/awt/Container.js -java/awt/Cursor.js -java/awt/DefaultFocusTraversalPolicy.js -java/awt/DefaultKeyboardFocusManager.js -java/awt/Dialog.js -java/awt/Dimension.js -java/awt/dnd/peer/DropTargetPeer.js -java/awt/event/ActionListener.js -java/awt/event/AdjustmentEvent.js -java/awt/event/AdjustmentListener.js -java/awt/event/AWTEventListener.js -java/awt/event/ComponentAdapter.js -java/awt/event/ComponentEvent.js -java/awt/event/ComponentListener.js -java/awt/event/ContainerListener.js -java/awt/event/FocusEvent.js -java/awt/event/FocusListener.js -java/awt/event/HierarchyBoundsListener.js -java/awt/event/HierarchyListener.js -java/awt/event/InputEvent.js -java/awt/event/InputMethodListener.js -java/awt/event/InvocationEvent.js -java/awt/event/ItemEvent.js -java/awt/event/ItemListener.js -java/awt/event/KeyListener.js -java/awt/event/MouseEvent.js -java/awt/event/MouseListener.js -java/awt/event/MouseMotionListener.js -java/awt/event/MouseWheelListener.js -java/awt/event/TextListener.js -java/awt/event/WindowAdapter.js -java/awt/event/WindowEvent.js -java/awt/event/WindowFocusListener.js -java/awt/event/WindowListener.js -java/awt/event/WindowStateListener.js -java/awt/EventDispatchThread.js -java/awt/EventFilter.js -java/awt/EventQueue.js -java/awt/EventQueueItem.js -java/awt/FlowLayout.js -java/awt/FocusTraversalPolicy.js -java/awt/Font.js -java/awt/font/FontRenderContext.js -java/awt/FontMetrics.js -java/awt/Frame.js -java/awt/geom/AffineTransform.js -java/awt/geom/Dimension2D.js -java/awt/geom/Path2D.js -java/awt/geom/PathIterator.js -java/awt/geom/Point2D.js -java/awt/geom/Rectangle2D.js -java/awt/geom/RectangularShape.js -java/awt/geom/RectIterator.js -java/awt/GraphicsCallback.js -java/awt/GraphicsConfiguration.js -java/awt/GraphicsDevice.js -java/awt/GraphicsEnvironment.js -java/awt/Image.js -java/awt/image/ImageObserver.js -java/awt/Insets.js -java/awt/ItemSelectable.js -java/awt/JSComponent.js -java/awt/JSDialog.js -java/awt/JSFrame.js -java/awt/JSPanel.js -java/awt/KeyboardFocusManager.js -java/awt/KeyEventDispatcher.js -java/awt/KeyEventPostProcessor.js -java/awt/Label.js -java/awt/LayoutManager.js -java/awt/LayoutManager2.js -java/awt/LightweightDispatcher.js -java/awt/Paint.js -java/awt/Panel.js -java/awt/peer/ComponentPeer.js -java/awt/peer/ContainerPeer.js -java/awt/peer/FramePeer.js -java/awt/peer/KeyboardFocusManagerPeer.js -java/awt/peer/LightweightPeer.js -java/awt/peer/WindowPeer.js -java/awt/Point.js -java/awt/Queue.js -java/awt/Rectangle.js -java/awt/RenderingHints.js -java/awt/Scrollbar.js -java/awt/ScrollPane.js -java/awt/Shape.js -java/awt/Stroke.js -java/awt/TextArea.js -java/awt/TextComponent.js -java/awt/TextField.js -java/awt/Toolkit.js -java/awt/Transparency.js -java/awt/Window.js -java/beans/ChangeListenerMap.js -java/beans/PropertyChangeEvent.js -java/beans/PropertyChangeListener.js -java/beans/PropertyChangeSupport.js -java/lang/AbstractStringBuilder.js -java/lang/Class.js -java/lang/Enum.js -java/lang/Iterable.js -java/lang/reflect/Constructor.js -java/lang/reflect/Method.js -java/lang/StringBuffer.js -java/lang/StringBuilder.js -java/lang/Thread.js -java/lang/ThreadGroup.js -java/math/RoundingMode.js -java/net/URL.js -java/net/URLStreamHandlerFactory.js -java/net/HttpURLConnection.js -java/net/URLStreamHandler.js -javax/net/ssl/HttpsUrlConnection.js -java/text/CharacterIterator.js -java/text/DecimalFormat.js -java/text/DecimalFormatSymbols.js -java/text/DigitList.js -java/text/FieldPosition.js -java/text/Format.js -java/text/NumberFormat.js -java/util/AbstractCollection.js -java/util/AbstractList.js -java/util/AbstractMap.js -java/util/AbstractSequentialList.js -java/util/AbstractSet.js -java/util/ArrayList.js -java/util/Arrays.js -java/util/Collection.js -java/util/Collections.js -java/util/Comparator.js -java/util/Deque.js -java/util/Dictionary.js -java/util/Enumeration.js -java/util/EventListener.js -java/util/EventObject.js -java/util/HashMap.js -java/util/HashSet.js -java/util/Hashtable.js -java/util/IdentityHashMap.js -java/util/Iterator.js -java/util/LinkedHashMap.js -java/util/LinkedList.js -java/util/List.js -java/util/ListResourceBundle.js -java/util/Locale.js -java/util/Map.js -java/util/Objects.js -java/util/Queue.js -java/util/Random.js -java/util/RandomAccess.js -java/util/ResourceBundle.js -java/util/Set.js -java/util/TimSort.js -java/util/Vector.js -javajs/api/JSFunction.js -javajs/util/AjaxURLConnection.js -javajs/util/AjaxURLStreamHandlerFactory.js -javajs/util/AU.js -javajs/util/JSThread.js -javajs/util/Lst.js -javajs/util/PT.js -javajs/util/Rdr.js -javajs/util/SB.js -javax/swing/AbstractAction.js -javax/swing/AbstractButton.js -javax/swing/AbstractListModel.js -javax/swing/Action.js -javax/swing/ActionMap.js -javax/swing/AncestorNotifier.js -javax/swing/ArrayTable.js -javax/swing/border/AbstractBorder.js -javax/swing/border/BevelBorder.js -javax/swing/border/Border.js -javax/swing/border/CompoundBorder.js -javax/swing/border/EmptyBorder.js -javax/swing/border/EtchedBorder.js -javax/swing/border/LineBorder.js -javax/swing/border/TitledBorder.js -javax/swing/BorderFactory.js -javax/swing/BoundedRangeModel.js -javax/swing/BoxLayout.js -javax/swing/ButtonGroup.js -javax/swing/ButtonModel.js -javax/swing/ClientPropertyKey.js -javax/swing/ComboBoxModel.js -javax/swing/DefaultBoundedRangeModel.js -javax/swing/DefaultButtonModel.js -javax/swing/DefaultComboBoxModel.js -javax/swing/DefaultSingleSelectionModel.js -javax/swing/DropMode.js -javax/swing/event/AncestorEvent.js -javax/swing/event/AncestorListener.js -javax/swing/event/CaretEvent.js -javax/swing/event/CaretListener.js -javax/swing/event/ChangeEvent.js -javax/swing/event/ChangeListener.js -javax/swing/event/DocumentEvent.js -javax/swing/event/DocumentListener.js -javax/swing/event/EventListenerList.js -javax/swing/event/ListDataEvent.js -javax/swing/event/ListDataListener.js -javax/swing/event/UndoableEditEvent.js -javax/swing/event/UndoableEditListener.js -javax/swing/FocusManager.js -javax/swing/InternalFrameFocusTraversalPolicy.js -javax/swing/LayoutComparator.js -javax/swing/LayoutFocusTraversalPolicy.js -javax/swing/SortingFocusTraversalPolicy.js -javax/swing/SwingContainerOrderFocusTraversalPolicy.js -javax/swing/SwingDefaultFocusTraversalPolicy.js -javax/swing/Icon.js -javax/swing/ImageIcon.js -javax/swing/InputMap.js -javax/swing/JApplet.js -javax/swing/JButton.js -javax/swing/JCheckBox.js -javax/swing/JCheckBoxMenuItem.js -javax/swing/JComboBox.js -javax/swing/JComponent.js -javax/swing/JFrame.js -javax/swing/JLabel.js -javax/swing/JLayeredPane.js -javax/swing/JMenu.js -javax/swing/JMenuBar.js -javax/swing/JMenuItem.js -javax/swing/JPanel.js -javax/swing/JPopupMenu.js -javax/swing/JRadioButtonMenuItem.js -javax/swing/JRootPane.js -javax/swing/JScrollBar.js -javax/swing/JScrollPane.js -javax/swing/JSeparator.js -javax/swing/JTextArea.js -javax/swing/JTextField.js -javax/swing/JToggleButton.js -javax/swing/JViewport.js -javax/swing/KeyboardManager.js -javax/swing/KeyStroke.js -javax/swing/ListModel.js -javax/swing/LookAndFeel.js -javax/swing/MenuElement.js -javax/swing/MutableComboBoxModel.js -javax/swing/plaf/ActionMapUIResource.js -javax/swing/plaf/basic/BasicBorders.js -javax/swing/plaf/BorderUIResource.js -javax/swing/plaf/ColorUIResource.js -javax/swing/plaf/ComponentUI.js -javax/swing/plaf/DimensionUIResource.js -javax/swing/plaf/FontUIResource.js -javax/swing/plaf/InputMapUIResource.js -javax/swing/plaf/InsetsUIResource.js -javax/swing/plaf/UIResource.js -javax/swing/RepaintManager.js -javax/swing/RootPaneContainer.js -javax/swing/Scrollable.js -javax/swing/ScrollPaneConstants.js -javax/swing/ScrollPaneLayout.js -javax/swing/SingleSelectionModel.js -javax/swing/SizeRequirements.js -javax/swing/SwingConstants.js -javax/swing/SwingPaintEventDispatcher.js -javax/swing/SwingUtilities.js -javax/swing/text/AbstractDocument.js -javax/swing/text/AttributeSet.js -javax/swing/text/Caret.js -javax/swing/text/DefaultCaret.js -javax/swing/text/DefaultEditorKit.js -javax/swing/text/Document.js -javax/swing/text/EditorKit.js -javax/swing/text/Element.js -javax/swing/text/GapContent.js -javax/swing/text/GapVector.js -javax/swing/text/JTextComponent.js -javax/swing/text/MutableAttributeSet.js -javax/swing/text/PlainDocument.js -javax/swing/text/PlainView.js -javax/swing/text/Position.js -javax/swing/text/Segment.js -javax/swing/text/SegmentCache.js -javax/swing/text/SimpleAttributeSet.js -javax/swing/text/Style.js -javax/swing/text/StyleConstants.js -javax/swing/text/StyleContext.js -javax/swing/text/TabExpander.js -javax/swing/text/TextAction.js -javax/swing/text/Utilities.js -javax/swing/text/View.js -javax/swing/tree/TreeNode.js -javax/swing/UIDefaults.js -javax/swing/UIManager.js -javax/swing/undo/AbstractUndoableEdit.js -javax/swing/undo/CompoundEdit.js -javax/swing/undo/UndoableEdit.js -javax/swing/ViewportLayout.js -javax/swing/WindowConstants.js -sun/awt/AppContext.js -sun/awt/AWTAutoShutdown.js -sun/awt/CausedFocusEvent.js -sun/awt/ComponentFactory.js -sun/awt/KeyboardFocusManagerPeerProvider.js -sun/awt/MostRecentKeyValue.js -sun/awt/MostRecentThreadAppContext.js -sun/awt/PaintEventDispatcher.js -sun/awt/PostEventQueue.js -sun/awt/RequestFocusController.js -sun/awt/SunToolkit.js -sun/awt/WindowClosingListener.js -sun/awt/WindowClosingSupport.js -sun/awt/image/DataStealer.js -sun/awt/image/IntegerComponentRaster.js -sun/awt/image/IntegerInterleavedRaster.js -sun/awt/image/SunWritableRaster.js -sun/font/FontDesignMetrics.js -sun/swing/DefaultLookup.js -sun/swing/SwingLazyValue.js -sun/text/resources/FormatData.js -sun/text/resources/en/FormatData_en.js -sun/util/resources/LocaleData.js -sun/util/locale/BaseLocale.js -sun/util/locale/LocaleUtils.js -sun/util/locale/provider/LocaleProviderAdapter.js -sun/util/locale/provider/LocaleDataMetaInfo.js -swingjs/a2s/A2SContainer.js -swingjs/a2s/A2SEvent.js -swingjs/a2s/A2SListener.js -swingjs/a2s/Applet.js -swingjs/a2s/Button.js -swingjs/a2s/Label.js -swingjs/a2s/Panel.js -swingjs/a2s/Scrollbar.js -swingjs/a2s/ScrollPane.js -swingjs/a2s/TextArea.js -swingjs/a2s/TextField.js -swingjs/api/Interface.js -swingjs/api/js/DOMNode.js -swingjs/api/js/HTML5CanvasContext2D.js -swingjs/api/js/JSInterface.js -swingjs/jquery/JQueryUI.js -swingjs/JSApp.js -swingjs/JSAppletThread.js -swingjs/JSAppletViewer.js -swingjs/JSFocusPeer.js -swingjs/JSFontMetrics.js -swingjs/JSFrameViewer.js -swingjs/JSGraphics2D.js -swingjs/JSGraphicsConfiguration.js -swingjs/JSGraphicsEnvironment.js -swingjs/JSImage.js -swingjs/JSImagekit.js -swingjs/JSMouse.js -swingjs/JSNullComponentPeer.js -swingjs/JSScreenDevice.js -swingjs/JSThreadGroup.js -swingjs/JSToolkit.js -swingjs/JSUtil.js -swingjs/plaf/ButtonListener.js -swingjs/plaf/DefaultMenuLayout.js -swingjs/plaf/HTML5LookAndFeel.js -swingjs/plaf/JSAppletUI.js -swingjs/plaf/JSButtonUI.js -swingjs/plaf/JSCheckBoxMenuItemUI.js -swingjs/plaf/JSCheckBoxUI.js -swingjs/plaf/JSComboBoxUI.js -swingjs/plaf/JSComponentUI.js -swingjs/plaf/JSEventHandler.js -swingjs/plaf/JSFrameUI.js -swingjs/plaf/JSGraphicsUtils.js -swingjs/plaf/JSLabelUI.js -swingjs/plaf/JSLayeredPaneUI.js -swingjs/plaf/JSLightweightUI.js -swingjs/plaf/JSMenuBarUI.js -swingjs/plaf/JSMenuItemUI.js -swingjs/plaf/JSMenuUI.js -swingjs/plaf/JSPanelUI.js -swingjs/plaf/JSPopupMenuSeparatorUI.js -swingjs/plaf/JSPopupMenuUI.js -swingjs/plaf/JSRadioButtonMenuItemUI.js -swingjs/plaf/JSRadioButtonUI.js -swingjs/plaf/JSRootPaneUI.js -swingjs/plaf/JSScrollBarUI.js -swingjs/plaf/JSScrollPaneUI.js -swingjs/plaf/JSSeparatorUI.js -swingjs/plaf/JSSliderUI.js -swingjs/plaf/JSTextAreaUI.js -swingjs/plaf/JSTextFieldUI.js -swingjs/plaf/JSTextUI.js -swingjs/plaf/JSTextViewUI.js -swingjs/plaf/JSViewportUI.js -swingjs/plaf/JSWindowUI.js -swingjs/plaf/LazyActionMap.js -swingjs/plaf/Resizer.js -swingjs/plaf/TextListener.js - - +java/applet/Applet.js +java/applet/AppletContext.js +java/applet/AppletStub.js +java/applet/JSApplet.js +java/awt/ActiveEvent.js +java/awt/Adjustable.js +java/awt/AWTEvent.js +java/awt/AWTEventMulticaster.js +java/awt/AWTKeyStroke.js +java/awt/BasicStroke.js +java/awt/BorderLayout.js +java/awt/Button.js +java/awt/Color.js +java/awt/color/ColorSpace.js +java/awt/Component.js +java/awt/ComponentOrientation.js +java/awt/ContainerOrderFocusTraversalPolicy.js +java/awt/Container.js +java/awt/Cursor.js +java/awt/DefaultFocusTraversalPolicy.js +java/awt/DefaultKeyboardFocusManager.js +java/awt/Dialog.js +java/awt/Dimension.js +java/awt/dnd/peer/DropTargetPeer.js +java/awt/event/ActionListener.js +java/awt/event/AdjustmentEvent.js +java/awt/event/AdjustmentListener.js +java/awt/event/AWTEventListener.js +java/awt/event/ComponentAdapter.js +java/awt/event/ComponentEvent.js +java/awt/event/ComponentListener.js +java/awt/event/ContainerListener.js +java/awt/event/FocusEvent.js +java/awt/event/FocusListener.js +java/awt/event/HierarchyBoundsListener.js +java/awt/event/HierarchyListener.js +java/awt/event/InputEvent.js +java/awt/event/InputMethodListener.js +java/awt/event/InvocationEvent.js +java/awt/event/ItemEvent.js +java/awt/event/ItemListener.js +java/awt/event/KeyListener.js +java/awt/event/MouseEvent.js +java/awt/event/MouseListener.js +java/awt/event/MouseMotionListener.js +java/awt/event/MouseWheelListener.js +java/awt/event/TextListener.js +java/awt/event/WindowAdapter.js +java/awt/event/WindowEvent.js +java/awt/event/WindowFocusListener.js +java/awt/event/WindowListener.js +java/awt/event/WindowStateListener.js +java/awt/EventDispatchThread.js +java/awt/EventFilter.js +java/awt/EventQueue.js +java/awt/EventQueueItem.js +java/awt/FlowLayout.js +java/awt/FocusTraversalPolicy.js +java/awt/Font.js +java/awt/font/FontRenderContext.js +java/awt/FontMetrics.js +java/awt/Frame.js +java/awt/geom/AffineTransform.js +java/awt/geom/Dimension2D.js +java/awt/geom/Path2D.js +java/awt/geom/PathIterator.js +java/awt/geom/Point2D.js +java/awt/geom/Rectangle2D.js +java/awt/geom/RectangularShape.js +java/awt/geom/RectIterator.js +java/awt/GraphicsCallback.js +java/awt/GraphicsConfiguration.js +java/awt/GraphicsDevice.js +java/awt/GraphicsEnvironment.js +java/awt/Image.js +java/awt/image/ImageObserver.js +java/awt/Insets.js +java/awt/ItemSelectable.js +java/awt/JSComponent.js +java/awt/JSDialog.js +java/awt/JSFrame.js +java/awt/JSPanel.js +java/awt/KeyboardFocusManager.js +java/awt/KeyEventDispatcher.js +java/awt/KeyEventPostProcessor.js +java/awt/Label.js +java/awt/LayoutManager.js +java/awt/LayoutManager2.js +java/awt/LightweightDispatcher.js +java/awt/Paint.js +java/awt/Panel.js +java/awt/peer/ComponentPeer.js +java/awt/peer/ContainerPeer.js +java/awt/peer/FramePeer.js +java/awt/peer/KeyboardFocusManagerPeer.js +java/awt/peer/LightweightPeer.js +java/awt/peer/WindowPeer.js +java/awt/Point.js +java/awt/Queue.js +java/awt/Rectangle.js +java/awt/RenderingHints.js +java/awt/Scrollbar.js +java/awt/ScrollPane.js +java/awt/Shape.js +java/awt/Stroke.js +java/awt/TextArea.js +java/awt/TextComponent.js +java/awt/TextField.js +java/awt/Toolkit.js +java/awt/Transparency.js +java/awt/Window.js +java/beans/ChangeListenerMap.js +java/beans/PropertyChangeEvent.js +java/beans/PropertyChangeListener.js +java/beans/PropertyChangeSupport.js +java/lang/AbstractStringBuilder.js +java/lang/Class.js +java/lang/Enum.js +java/lang/Iterable.js +java/lang/reflect/Constructor.js +java/lang/reflect/Method.js +java/lang/StringBuffer.js +java/lang/StringBuilder.js +java/lang/Thread.js +java/lang/ThreadGroup.js +java/math/RoundingMode.js +java/net/URL.js +java/net/URLStreamHandlerFactory.js +java/net/HttpURLConnection.js +java/net/URLStreamHandler.js +javax/net/ssl/HttpsUrlConnection.js +java/text/CharacterIterator.js +java/text/DecimalFormat.js +java/text/DecimalFormatSymbols.js +java/text/DigitList.js +java/text/FieldPosition.js +java/text/Format.js +java/text/NumberFormat.js +java/util/AbstractCollection.js +java/util/AbstractList.js +java/util/AbstractMap.js +java/util/AbstractSequentialList.js +java/util/AbstractSet.js +java/util/ArrayList.js +java/util/Arrays.js +java/util/Collection.js +java/util/Collections.js +java/util/Comparator.js +java/util/Deque.js +java/util/Dictionary.js +java/util/Enumeration.js +java/util/EventListener.js +java/util/EventObject.js +java/util/HashMap.js +java/util/HashSet.js +java/util/Hashtable.js +java/util/IdentityHashMap.js +java/util/Iterator.js +java/util/LinkedHashMap.js +java/util/LinkedList.js +java/util/List.js +java/util/ListResourceBundle.js +java/util/Locale.js +java/util/Map.js +java/util/Objects.js +java/util/Queue.js +java/util/Random.js +java/util/RandomAccess.js +java/util/ResourceBundle.js +java/util/Set.js +java/util/TimSort.js +java/util/Vector.js +javajs/api/JSFunction.js +javajs/api/js/JSUtilI.js +javajs/api/js/HTML5Applet.js +javajs/util/AjaxURLConnection.js +javajs/util/AjaxURLStreamHandlerFactory.js +javajs/util/AU.js +javajs/util/JSThread.js +javajs/util/Lst.js +javajs/util/PT.js +javajs/util/Rdr.js +javajs/util/SB.js +javax/swing/AbstractAction.js +javax/swing/AbstractButton.js +javax/swing/AbstractListModel.js +javax/swing/Action.js +javax/swing/ActionMap.js +javax/swing/AncestorNotifier.js +javax/swing/ArrayTable.js +javax/swing/border/AbstractBorder.js +javax/swing/border/BevelBorder.js +javax/swing/border/Border.js +javax/swing/border/CompoundBorder.js +javax/swing/border/EmptyBorder.js +javax/swing/border/EtchedBorder.js +javax/swing/border/LineBorder.js +javax/swing/border/TitledBorder.js +javax/swing/BorderFactory.js +javax/swing/BoundedRangeModel.js +javax/swing/BoxLayout.js +javax/swing/ButtonGroup.js +javax/swing/ButtonModel.js +javax/swing/ClientPropertyKey.js +javax/swing/ComboBoxModel.js +javax/swing/DefaultBoundedRangeModel.js +javax/swing/DefaultButtonModel.js +javax/swing/DefaultComboBoxModel.js +javax/swing/DefaultSingleSelectionModel.js +javax/swing/DropMode.js +javax/swing/event/AncestorEvent.js +javax/swing/event/AncestorListener.js +javax/swing/event/CaretEvent.js +javax/swing/event/CaretListener.js +javax/swing/event/ChangeEvent.js +javax/swing/event/ChangeListener.js +javax/swing/event/DocumentEvent.js +javax/swing/event/DocumentListener.js +javax/swing/event/EventListenerList.js +javax/swing/event/ListDataEvent.js +javax/swing/event/ListDataListener.js +javax/swing/event/UndoableEditEvent.js +javax/swing/event/UndoableEditListener.js +javax/swing/FocusManager.js +javax/swing/InternalFrameFocusTraversalPolicy.js +javax/swing/LayoutComparator.js +javax/swing/LayoutFocusTraversalPolicy.js +javax/swing/SortingFocusTraversalPolicy.js +javax/swing/SwingContainerOrderFocusTraversalPolicy.js +javax/swing/SwingDefaultFocusTraversalPolicy.js +javax/swing/Icon.js +javax/swing/ImageIcon.js +javax/swing/InputMap.js +javax/swing/JApplet.js +javax/swing/JButton.js +javax/swing/JCheckBox.js +javax/swing/JCheckBoxMenuItem.js +javax/swing/JComboBox.js +javax/swing/JComponent.js +javax/swing/JFrame.js +javax/swing/JLabel.js +javax/swing/JLayeredPane.js +javax/swing/JMenu.js +javax/swing/JMenuBar.js +javax/swing/JMenuItem.js +javax/swing/JPanel.js +javax/swing/JPopupMenu.js +javax/swing/JRadioButtonMenuItem.js +javax/swing/JRootPane.js +javax/swing/JScrollBar.js +javax/swing/JScrollPane.js +javax/swing/JSeparator.js +javax/swing/JTextArea.js +javax/swing/JTextField.js +javax/swing/JToggleButton.js +javax/swing/JViewport.js +javax/swing/KeyboardManager.js +javax/swing/KeyStroke.js +javax/swing/ListModel.js +javax/swing/LookAndFeel.js +javax/swing/MenuElement.js +javax/swing/MutableComboBoxModel.js +javax/swing/plaf/ActionMapUIResource.js +javax/swing/plaf/basic/BasicBorders.js +javax/swing/plaf/BorderUIResource.js +javax/swing/plaf/ColorUIResource.js +javax/swing/plaf/ComponentUI.js +javax/swing/plaf/DimensionUIResource.js +javax/swing/plaf/FontUIResource.js +javax/swing/plaf/InputMapUIResource.js +javax/swing/plaf/InsetsUIResource.js +javax/swing/plaf/UIResource.js +javax/swing/RepaintManager.js +javax/swing/RootPaneContainer.js +javax/swing/Scrollable.js +javax/swing/ScrollPaneConstants.js +javax/swing/ScrollPaneLayout.js +javax/swing/SingleSelectionModel.js +javax/swing/SizeRequirements.js +javax/swing/SwingConstants.js +javax/swing/SwingPaintEventDispatcher.js +javax/swing/SwingUtilities.js +javax/swing/text/AbstractDocument.js +javax/swing/text/AttributeSet.js +javax/swing/text/Caret.js +javax/swing/text/DefaultCaret.js +javax/swing/text/DefaultEditorKit.js +javax/swing/text/Document.js +javax/swing/text/EditorKit.js +javax/swing/text/Element.js +javax/swing/text/GapContent.js +javax/swing/text/GapVector.js +javax/swing/text/JTextComponent.js +javax/swing/text/MutableAttributeSet.js +javax/swing/text/PlainDocument.js +javax/swing/text/PlainView.js +javax/swing/text/Position.js +javax/swing/text/Segment.js +javax/swing/text/SegmentCache.js +javax/swing/text/SimpleAttributeSet.js +javax/swing/text/Style.js +javax/swing/text/StyleConstants.js +javax/swing/text/StyleContext.js +javax/swing/text/TabExpander.js +javax/swing/text/TextAction.js +javax/swing/text/Utilities.js +javax/swing/text/View.js +javax/swing/tree/TreeNode.js +javax/swing/UIDefaults.js +javax/swing/UIManager.js +javax/swing/undo/AbstractUndoableEdit.js +javax/swing/undo/CompoundEdit.js +javax/swing/undo/UndoableEdit.js +javax/swing/ViewportLayout.js +javax/swing/WindowConstants.js +sun/awt/AppContext.js +sun/awt/AWTAutoShutdown.js +sun/awt/CausedFocusEvent.js +sun/awt/ComponentFactory.js +sun/awt/KeyboardFocusManagerPeerProvider.js +sun/awt/MostRecentKeyValue.js +sun/awt/MostRecentThreadAppContext.js +sun/awt/PaintEventDispatcher.js +sun/awt/PostEventQueue.js +sun/awt/RequestFocusController.js +sun/awt/SunToolkit.js +sun/awt/WindowClosingListener.js +sun/awt/WindowClosingSupport.js +sun/awt/image/DataStealer.js +sun/awt/image/IntegerComponentRaster.js +sun/awt/image/IntegerInterleavedRaster.js +sun/awt/image/SunWritableRaster.js +sun/font/FontDesignMetrics.js +sun/swing/DefaultLookup.js +sun/swing/SwingLazyValue.js +sun/text/resources/FormatData.js +sun/text/resources/en/FormatData_en.js +sun/util/resources/LocaleData.js +sun/util/locale/BaseLocale.js +sun/util/locale/LocaleUtils.js +sun/util/locale/provider/LocaleProviderAdapter.js +sun/util/locale/provider/LocaleDataMetaInfo.js +swingjs/a2s/A2SContainer.js +swingjs/a2s/A2SEvent.js +swingjs/a2s/A2SListener.js +swingjs/a2s/Applet.js +swingjs/a2s/Button.js +swingjs/a2s/Label.js +swingjs/a2s/Panel.js +swingjs/a2s/Scrollbar.js +swingjs/a2s/ScrollPane.js +swingjs/a2s/TextArea.js +swingjs/a2s/TextField.js +swingjs/api/Interface.js +swingjs/api/js/DOMNode.js +swingjs/api/js/HTML5CanvasContext2D.js +swingjs/api/js/JSInterface.js +swingjs/jquery/JQueryUI.js +swingjs/JSApp.js +swingjs/JSAppletThread.js +swingjs/JSAppletViewer.js +swingjs/JSFocusPeer.js +swingjs/JSFontMetrics.js +swingjs/JSFrameViewer.js +swingjs/JSGraphics2D.js +swingjs/JSGraphicsConfiguration.js +swingjs/JSGraphicsEnvironment.js +swingjs/JSImage.js +swingjs/JSImagekit.js +swingjs/JSMouse.js +swingjs/JSNullComponentPeer.js +swingjs/JSScreenDevice.js +swingjs/JSThreadGroup.js +swingjs/JSToolkit.js +swingjs/plaf/ButtonListener.js +swingjs/plaf/DefaultMenuLayout.js +swingjs/plaf/HTML5LookAndFeel.js +swingjs/plaf/JSAppletUI.js +swingjs/plaf/JSButtonUI.js +swingjs/plaf/JSCheckBoxMenuItemUI.js +swingjs/plaf/JSCheckBoxUI.js +swingjs/plaf/JSComboBoxUI.js +swingjs/plaf/JSComponentUI.js +swingjs/plaf/JSEventHandler.js +swingjs/plaf/JSFrameUI.js +swingjs/plaf/JSGraphicsUtils.js +swingjs/plaf/JSLabelUI.js +swingjs/plaf/JSLayeredPaneUI.js +swingjs/plaf/JSLightweightUI.js +swingjs/plaf/JSMenuBarUI.js +swingjs/plaf/JSMenuItemUI.js +swingjs/plaf/JSMenuUI.js +swingjs/plaf/JSPanelUI.js +swingjs/plaf/JSPopupMenuSeparatorUI.js +swingjs/plaf/JSPopupMenuUI.js +swingjs/plaf/JSRadioButtonMenuItemUI.js +swingjs/plaf/JSRadioButtonUI.js +swingjs/plaf/JSRootPaneUI.js +swingjs/plaf/JSScrollBarUI.js +swingjs/plaf/JSScrollPaneUI.js +swingjs/plaf/JSSeparatorUI.js +swingjs/plaf/JSSliderUI.js +swingjs/plaf/JSTextAreaUI.js +swingjs/plaf/JSTextFieldUI.js +swingjs/plaf/JSTextUI.js +swingjs/plaf/JSTextViewUI.js +swingjs/plaf/JSViewportUI.js +swingjs/plaf/JSWindowUI.js +swingjs/plaf/LazyActionMap.js +swingjs/plaf/Resizer.js +swingjs/plaf/TextListener.js + + diff --git a/sources/net.sf.j2s.core/dist/swingjs/differences.txt b/sources/net.sf.j2s.core/dist/swingjs/differences.txt index 773c19360..f61b5bbde 100644 --- a/sources/net.sf.j2s.core/dist/swingjs/differences.txt +++ b/sources/net.sf.j2s.core/dist/swingjs/differences.txt @@ -1,6 +1,7 @@ java2script/SwingJS Notes ========================= +updated 5/4/2025 -- clarity about not supporting UI subclassing updated 3/11/2023 -- adds support for Java Regex Matcher.start/end(groupID) and .start/end(groupName) updated 12/31/2020 -- full support for 64-bit long updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner @@ -359,6 +360,9 @@ Java or JavaScript equivalents. Swing GUI Peers and UIClasses ----------------------------- +SwingJS does not support custom UI classes that subclass UI classes in javax/swing/plaf +or com/sun/javax/swing/plaf. + One of the biggest adaptations introduced in SwingJS is in the area of the graphical user interface. Basically, what we have is a Java Swing "LookAndFeel" customized for HTML. @@ -369,7 +373,7 @@ component "uiClass" (one per component, such as BasicButtonUI or BasicTextFieldU Peers are native objects of the operating system. These are the virtual buttons and text areas that the user is interacting with at a very base level. They are chunks of low-level code that paint the screen to give the illusion that you really are pressing a button or typing text -ot the screen. Their events are being passed on to Java or the browser by the operating system. +to the screen. Their events are being passed on to Java or the browser by the operating system. UI classes provide a consistent "look and feel" for these native objects, rendering them onto the native window canvas and handling all user-generated events. They paint the borders, diff --git a/sources/net.sf.j2s.core/dist/swingjs/j2s.core.jar b/sources/net.sf.j2s.core/dist/swingjs/j2s.core.jar new file mode 100644 index 000000000..2af8cf86f Binary files /dev/null and b/sources/net.sf.j2s.core/dist/swingjs/j2s.core.jar differ diff --git a/sources/net.sf.j2s.core/dist/swingjs/net.sf.j2s.core.jar b/sources/net.sf.j2s.core/dist/swingjs/net.sf.j2s.core.jar deleted file mode 100644 index dd10a4959..000000000 Binary files a/sources/net.sf.j2s.core/dist/swingjs/net.sf.j2s.core.jar and /dev/null differ diff --git a/sources/net.sf.j2s.core/dist/swingjs/timestamp b/sources/net.sf.j2s.core/dist/swingjs/timestamp index 86fe3b363..fde5caea0 100644 --- a/sources/net.sf.j2s.core/dist/swingjs/timestamp +++ b/sources/net.sf.j2s.core/dist/swingjs/timestamp @@ -1 +1 @@ -20230831104534 +20260705081251 diff --git a/sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/DEV_NOTES.txt similarity index 100% rename from sources/net.sf.j2s.java.core/dist/DEV_NOTES.txt rename to sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/DEV_NOTES.txt diff --git a/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/Jmol-j2s-site.zip b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/Jmol-j2s-site.zip new file mode 100644 index 000000000..faff6c606 Binary files /dev/null and b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/Jmol-j2s-site.zip differ diff --git a/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/SwingJS-site.zip b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/SwingJS-site.zip new file mode 100644 index 000000000..e8f1ab3cb Binary files /dev/null and b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/SwingJS-site.zip differ diff --git a/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/_j2sclasslist.txt b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/_j2sclasslist.txt new file mode 100644 index 000000000..0e5ac03f4 --- /dev/null +++ b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/_j2sclasslist.txt @@ -0,0 +1,413 @@ +java/applet/Applet.js +java/applet/AppletContext.js +java/applet/AppletStub.js +java/applet/JSApplet.js +java/awt/ActiveEvent.js +java/awt/Adjustable.js +java/awt/AWTEvent.js +java/awt/AWTEventMulticaster.js +java/awt/AWTKeyStroke.js +java/awt/BasicStroke.js +java/awt/BorderLayout.js +java/awt/Button.js +java/awt/Color.js +java/awt/color/ColorSpace.js +java/awt/Component.js +java/awt/ComponentOrientation.js +java/awt/ContainerOrderFocusTraversalPolicy.js +java/awt/Container.js +java/awt/Cursor.js +java/awt/DefaultFocusTraversalPolicy.js +java/awt/DefaultKeyboardFocusManager.js +java/awt/Dialog.js +java/awt/Dimension.js +java/awt/dnd/peer/DropTargetPeer.js +java/awt/event/ActionListener.js +java/awt/event/AdjustmentEvent.js +java/awt/event/AdjustmentListener.js +java/awt/event/AWTEventListener.js +java/awt/event/ComponentAdapter.js +java/awt/event/ComponentEvent.js +java/awt/event/ComponentListener.js +java/awt/event/ContainerListener.js +java/awt/event/FocusEvent.js +java/awt/event/FocusListener.js +java/awt/event/HierarchyBoundsListener.js +java/awt/event/HierarchyListener.js +java/awt/event/InputEvent.js +java/awt/event/InputMethodListener.js +java/awt/event/InvocationEvent.js +java/awt/event/ItemEvent.js +java/awt/event/ItemListener.js +java/awt/event/KeyListener.js +java/awt/event/MouseEvent.js +java/awt/event/MouseListener.js +java/awt/event/MouseMotionListener.js +java/awt/event/MouseWheelListener.js +java/awt/event/TextListener.js +java/awt/event/WindowAdapter.js +java/awt/event/WindowEvent.js +java/awt/event/WindowFocusListener.js +java/awt/event/WindowListener.js +java/awt/event/WindowStateListener.js +java/awt/EventDispatchThread.js +java/awt/EventFilter.js +java/awt/EventQueue.js +java/awt/EventQueueItem.js +java/awt/FlowLayout.js +java/awt/FocusTraversalPolicy.js +java/awt/Font.js +java/awt/font/FontRenderContext.js +java/awt/FontMetrics.js +java/awt/Frame.js +java/awt/geom/AffineTransform.js +java/awt/geom/Dimension2D.js +java/awt/geom/Path2D.js +java/awt/geom/PathIterator.js +java/awt/geom/Point2D.js +java/awt/geom/Rectangle2D.js +java/awt/geom/RectangularShape.js +java/awt/geom/RectIterator.js +java/awt/GraphicsCallback.js +java/awt/GraphicsConfiguration.js +java/awt/GraphicsDevice.js +java/awt/GraphicsEnvironment.js +java/awt/Image.js +java/awt/image/ImageObserver.js +java/awt/Insets.js +java/awt/ItemSelectable.js +java/awt/JSComponent.js +java/awt/JSDialog.js +java/awt/JSFrame.js +java/awt/JSPanel.js +java/awt/KeyboardFocusManager.js +java/awt/KeyEventDispatcher.js +java/awt/KeyEventPostProcessor.js +java/awt/Label.js +java/awt/LayoutManager.js +java/awt/LayoutManager2.js +java/awt/LightweightDispatcher.js +java/awt/Paint.js +java/awt/Panel.js +java/awt/peer/ComponentPeer.js +java/awt/peer/ContainerPeer.js +java/awt/peer/FramePeer.js +java/awt/peer/KeyboardFocusManagerPeer.js +java/awt/peer/LightweightPeer.js +java/awt/peer/WindowPeer.js +java/awt/Point.js +java/awt/Queue.js +java/awt/Rectangle.js +java/awt/RenderingHints.js +java/awt/Scrollbar.js +java/awt/ScrollPane.js +java/awt/Shape.js +java/awt/Stroke.js +java/awt/TextArea.js +java/awt/TextComponent.js +java/awt/TextField.js +java/awt/Toolkit.js +java/awt/Transparency.js +java/awt/Window.js +java/beans/ChangeListenerMap.js +java/beans/PropertyChangeEvent.js +java/beans/PropertyChangeListener.js +java/beans/PropertyChangeSupport.js +java/lang/AbstractStringBuilder.js +java/lang/Class.js +java/lang/Enum.js +java/lang/Iterable.js +java/lang/reflect/Constructor.js +java/lang/reflect/Method.js +java/lang/StringBuffer.js +java/lang/StringBuilder.js +java/lang/Thread.js +java/lang/ThreadGroup.js +java/math/RoundingMode.js +java/net/URL.js +java/net/URLStreamHandlerFactory.js +java/net/HttpURLConnection.js +java/net/URLStreamHandler.js +javax/net/ssl/HttpsUrlConnection.js +java/text/CharacterIterator.js +java/text/DecimalFormat.js +java/text/DecimalFormatSymbols.js +java/text/DigitList.js +java/text/FieldPosition.js +java/text/Format.js +java/text/NumberFormat.js +java/util/AbstractCollection.js +java/util/AbstractList.js +java/util/AbstractMap.js +java/util/AbstractSequentialList.js +java/util/AbstractSet.js +java/util/ArrayList.js +java/util/Arrays.js +java/util/Collection.js +java/util/Collections.js +java/util/Comparator.js +java/util/Deque.js +java/util/Dictionary.js +java/util/Enumeration.js +java/util/EventListener.js +java/util/EventObject.js +java/util/HashMap.js +java/util/HashSet.js +java/util/Hashtable.js +java/util/IdentityHashMap.js +java/util/Iterator.js +java/util/LinkedHashMap.js +java/util/LinkedList.js +java/util/List.js +java/util/ListResourceBundle.js +java/util/Locale.js +java/util/Map.js +java/util/Objects.js +java/util/Queue.js +java/util/Random.js +java/util/RandomAccess.js +java/util/ResourceBundle.js +java/util/Set.js +java/util/TimSort.js +java/util/Vector.js +javajs/api/JSFunction.js +javajs/api/js/JSUtilI.js +javajs/api/js/HTML5Applet.js +javajs/util/AjaxURLConnection.js +javajs/util/AjaxURLStreamHandlerFactory.js +javajs/util/AU.js +javajs/util/JSThread.js +javajs/util/Lst.js +javajs/util/PT.js +javajs/util/Rdr.js +javajs/util/SB.js +javax/swing/AbstractAction.js +javax/swing/AbstractButton.js +javax/swing/AbstractListModel.js +javax/swing/Action.js +javax/swing/ActionMap.js +javax/swing/AncestorNotifier.js +javax/swing/ArrayTable.js +javax/swing/border/AbstractBorder.js +javax/swing/border/BevelBorder.js +javax/swing/border/Border.js +javax/swing/border/CompoundBorder.js +javax/swing/border/EmptyBorder.js +javax/swing/border/EtchedBorder.js +javax/swing/border/LineBorder.js +javax/swing/border/TitledBorder.js +javax/swing/BorderFactory.js +javax/swing/BoundedRangeModel.js +javax/swing/BoxLayout.js +javax/swing/ButtonGroup.js +javax/swing/ButtonModel.js +javax/swing/ClientPropertyKey.js +javax/swing/ComboBoxModel.js +javax/swing/DefaultBoundedRangeModel.js +javax/swing/DefaultButtonModel.js +javax/swing/DefaultComboBoxModel.js +javax/swing/DefaultSingleSelectionModel.js +javax/swing/DropMode.js +javax/swing/event/AncestorEvent.js +javax/swing/event/AncestorListener.js +javax/swing/event/CaretEvent.js +javax/swing/event/CaretListener.js +javax/swing/event/ChangeEvent.js +javax/swing/event/ChangeListener.js +javax/swing/event/DocumentEvent.js +javax/swing/event/DocumentListener.js +javax/swing/event/EventListenerList.js +javax/swing/event/ListDataEvent.js +javax/swing/event/ListDataListener.js +javax/swing/event/UndoableEditEvent.js +javax/swing/event/UndoableEditListener.js +javax/swing/FocusManager.js +javax/swing/InternalFrameFocusTraversalPolicy.js +javax/swing/LayoutComparator.js +javax/swing/LayoutFocusTraversalPolicy.js +javax/swing/SortingFocusTraversalPolicy.js +javax/swing/SwingContainerOrderFocusTraversalPolicy.js +javax/swing/SwingDefaultFocusTraversalPolicy.js +javax/swing/Icon.js +javax/swing/ImageIcon.js +javax/swing/InputMap.js +javax/swing/JApplet.js +javax/swing/JButton.js +javax/swing/JCheckBox.js +javax/swing/JCheckBoxMenuItem.js +javax/swing/JComboBox.js +javax/swing/JComponent.js +javax/swing/JFrame.js +javax/swing/JLabel.js +javax/swing/JLayeredPane.js +javax/swing/JMenu.js +javax/swing/JMenuBar.js +javax/swing/JMenuItem.js +javax/swing/JPanel.js +javax/swing/JPopupMenu.js +javax/swing/JRadioButtonMenuItem.js +javax/swing/JRootPane.js +javax/swing/JScrollBar.js +javax/swing/JScrollPane.js +javax/swing/JSeparator.js +javax/swing/JTextArea.js +javax/swing/JTextField.js +javax/swing/JToggleButton.js +javax/swing/JViewport.js +javax/swing/KeyboardManager.js +javax/swing/KeyStroke.js +javax/swing/ListModel.js +javax/swing/LookAndFeel.js +javax/swing/MenuElement.js +javax/swing/MutableComboBoxModel.js +javax/swing/plaf/ActionMapUIResource.js +javax/swing/plaf/basic/BasicBorders.js +javax/swing/plaf/BorderUIResource.js +javax/swing/plaf/ColorUIResource.js +javax/swing/plaf/ComponentUI.js +javax/swing/plaf/DimensionUIResource.js +javax/swing/plaf/FontUIResource.js +javax/swing/plaf/InputMapUIResource.js +javax/swing/plaf/InsetsUIResource.js +javax/swing/plaf/UIResource.js +javax/swing/RepaintManager.js +javax/swing/RootPaneContainer.js +javax/swing/Scrollable.js +javax/swing/ScrollPaneConstants.js +javax/swing/ScrollPaneLayout.js +javax/swing/SingleSelectionModel.js +javax/swing/SizeRequirements.js +javax/swing/SwingConstants.js +javax/swing/SwingPaintEventDispatcher.js +javax/swing/SwingUtilities.js +javax/swing/text/AbstractDocument.js +javax/swing/text/AttributeSet.js +javax/swing/text/Caret.js +javax/swing/text/DefaultCaret.js +javax/swing/text/DefaultEditorKit.js +javax/swing/text/Document.js +javax/swing/text/EditorKit.js +javax/swing/text/Element.js +javax/swing/text/GapContent.js +javax/swing/text/GapVector.js +javax/swing/text/JTextComponent.js +javax/swing/text/MutableAttributeSet.js +javax/swing/text/PlainDocument.js +javax/swing/text/PlainView.js +javax/swing/text/Position.js +javax/swing/text/Segment.js +javax/swing/text/SegmentCache.js +javax/swing/text/SimpleAttributeSet.js +javax/swing/text/Style.js +javax/swing/text/StyleConstants.js +javax/swing/text/StyleContext.js +javax/swing/text/TabExpander.js +javax/swing/text/TextAction.js +javax/swing/text/Utilities.js +javax/swing/text/View.js +javax/swing/tree/TreeNode.js +javax/swing/UIDefaults.js +javax/swing/UIManager.js +javax/swing/undo/AbstractUndoableEdit.js +javax/swing/undo/CompoundEdit.js +javax/swing/undo/UndoableEdit.js +javax/swing/ViewportLayout.js +javax/swing/WindowConstants.js +sun/awt/AppContext.js +sun/awt/AWTAutoShutdown.js +sun/awt/CausedFocusEvent.js +sun/awt/ComponentFactory.js +sun/awt/KeyboardFocusManagerPeerProvider.js +sun/awt/MostRecentKeyValue.js +sun/awt/MostRecentThreadAppContext.js +sun/awt/PaintEventDispatcher.js +sun/awt/PostEventQueue.js +sun/awt/RequestFocusController.js +sun/awt/SunToolkit.js +sun/awt/WindowClosingListener.js +sun/awt/WindowClosingSupport.js +sun/awt/image/DataStealer.js +sun/awt/image/IntegerComponentRaster.js +sun/awt/image/IntegerInterleavedRaster.js +sun/awt/image/SunWritableRaster.js +sun/font/FontDesignMetrics.js +sun/swing/DefaultLookup.js +sun/swing/SwingLazyValue.js +sun/text/resources/FormatData.js +sun/text/resources/en/FormatData_en.js +sun/util/resources/LocaleData.js +sun/util/locale/BaseLocale.js +sun/util/locale/LocaleUtils.js +sun/util/locale/provider/LocaleProviderAdapter.js +sun/util/locale/provider/LocaleDataMetaInfo.js +swingjs/a2s/A2SContainer.js +swingjs/a2s/A2SEvent.js +swingjs/a2s/A2SListener.js +swingjs/a2s/Applet.js +swingjs/a2s/Button.js +swingjs/a2s/Label.js +swingjs/a2s/Panel.js +swingjs/a2s/Scrollbar.js +swingjs/a2s/ScrollPane.js +swingjs/a2s/TextArea.js +swingjs/a2s/TextField.js +swingjs/api/Interface.js +swingjs/api/js/DOMNode.js +swingjs/api/js/HTML5CanvasContext2D.js +swingjs/api/js/JSInterface.js +swingjs/jquery/JQueryUI.js +swingjs/JSApp.js +swingjs/JSAppletThread.js +swingjs/JSAppletViewer.js +swingjs/JSFocusPeer.js +swingjs/JSFontMetrics.js +swingjs/JSFrameViewer.js +swingjs/JSGraphics2D.js +swingjs/JSGraphicsConfiguration.js +swingjs/JSGraphicsEnvironment.js +swingjs/JSImage.js +swingjs/JSImagekit.js +swingjs/JSMouse.js +swingjs/JSNullComponentPeer.js +swingjs/JSScreenDevice.js +swingjs/JSThreadGroup.js +swingjs/JSToolkit.js +swingjs/plaf/ButtonListener.js +swingjs/plaf/DefaultMenuLayout.js +swingjs/plaf/HTML5LookAndFeel.js +swingjs/plaf/JSAppletUI.js +swingjs/plaf/JSButtonUI.js +swingjs/plaf/JSCheckBoxMenuItemUI.js +swingjs/plaf/JSCheckBoxUI.js +swingjs/plaf/JSComboBoxUI.js +swingjs/plaf/JSComponentUI.js +swingjs/plaf/JSEventHandler.js +swingjs/plaf/JSFrameUI.js +swingjs/plaf/JSGraphicsUtils.js +swingjs/plaf/JSLabelUI.js +swingjs/plaf/JSLayeredPaneUI.js +swingjs/plaf/JSLightweightUI.js +swingjs/plaf/JSMenuBarUI.js +swingjs/plaf/JSMenuItemUI.js +swingjs/plaf/JSMenuUI.js +swingjs/plaf/JSPanelUI.js +swingjs/plaf/JSPopupMenuSeparatorUI.js +swingjs/plaf/JSPopupMenuUI.js +swingjs/plaf/JSRadioButtonMenuItemUI.js +swingjs/plaf/JSRadioButtonUI.js +swingjs/plaf/JSRootPaneUI.js +swingjs/plaf/JSScrollBarUI.js +swingjs/plaf/JSScrollPaneUI.js +swingjs/plaf/JSSeparatorUI.js +swingjs/plaf/JSSliderUI.js +swingjs/plaf/JSTextAreaUI.js +swingjs/plaf/JSTextFieldUI.js +swingjs/plaf/JSTextUI.js +swingjs/plaf/JSTextViewUI.js +swingjs/plaf/JSViewportUI.js +swingjs/plaf/JSWindowUI.js +swingjs/plaf/LazyActionMap.js +swingjs/plaf/Resizer.js +swingjs/plaf/TextListener.js + + diff --git a/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/differences.txt b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/differences.txt new file mode 100644 index 000000000..f61b5bbde --- /dev/null +++ b/sources/net.sf.j2s.core/dist/swingjs/ver/5.0.1/differences.txt @@ -0,0 +1,1532 @@ +java2script/SwingJS Notes +========================= + +updated 5/4/2025 -- clarity about not supporting UI subclassing +updated 3/11/2023 -- adds support for Java Regex Matcher.start/end(groupID) and .start/end(groupName) +updated 12/31/2020 -- full support for 64-bit long +updated 12/6/2020 -- note about restrictions on long, including BitSet and Scanner +updated 3/21/2020 -- adds note about HashMap, Hashtable, and HashSet iterator ordering +updated 3/20/2020 -- adds note about interning, new String("xxx"), and "xxx" +updated 2/26/2020 -- adds Graphics.setClip issue +updated 12/22/19 -- additional issues +updated 11/03/19 -- adds information about File.exists() and points to src/javajs/async +updated 10/26/19 -- adds information about File.createTempFile() +updated 8/16/19 -- minor typos and added summary paragraph +updated 7/19/19 -- clarification that AWT and Swing classes are supported directly +updated 5/13/19 -- Mandarin U+79D8 reserved character; Missing Math methods; int and long +updated 5/10/19 -- adds a section on static issues in multi-(duplicate)-applet pages +updated 1/4/19 -- nio +updated 9/15/18 -- adds integer 1/0 == Infinity +updated 7/24/18 -- most classes replaced with https://github.com/frohoff/jdk8u-jdk +updated 6/5/17 -- reserved package name "window" +updated 3/11/17 -- myClass.getField +updated 3/7/17 -- overloading of JSplitPane.setDividerLocation +updated 3/2/17 -- more indication of classes not implemented (KeyListener) + +---IMPORTANT CHARACTER SET NOTE--- + +It is critical that all development work in Java2Script be done in UTF-8. This means: + +- making sure your Eclipse project is set up for UTF-8 (not the Eclipse default?) +- making sure your server can serve up UTF-8 by default for any browser-loaded files +- making sure you don't edit a Java2Script class file or one of the site .js files + using a non-UTF-8 editor. It may replace non-Latin characters with "?" or garbage. +- making sure that your web pages are delivered with proper headings indicating HTML5 and UTF-8 + + + + + + +Note that the DOCTYPE tag is critical for some browsers to switch into HTML5 mode. (MSIE?) + + +In particular, the Mandarin character 秘 (mi; "secret") is used extensively throughout +the SwingJS class files to distinguish j2s-specific fields and methods that must not +ever be shadowed or overridden by subclasses. For example, we see in java.lang.Thread.java: + + public static JSThread 秘thisThread; + +---------------------------------- + + + +============================================================================= +SwingJS and OpenJDK 8+ +============================================================================= + +SwingJS implements a wide range of the Java language in JavaScript. The base +version for this implementation is OpenJDK8. some classes are implemented using +older source code, and there are some missing methods. For the most part, this is +no real problem. You can add or modify any java class just be adding it as source +in your project. Or (preferably) you can contact me, and I can get it into the +distribution. Or (even more preferably) you can do that via a patch submission. + +================= +DESIGN PHILOSOPHY +================= + +The java2script/SwingJS design goal is to recreate a recognizable, easily debuggable +equivalent in JavaScript for as much of Java as practical. This means, for example, +that one can call in JavaScript + + new java.util.Hashtable() + +and for all practical purposes it will appear that Java is running. + +The goal of java2script/SwingJS is NOT to reproduce Java byte code processing in a +browser. We leave that task and its own issues to others. Here, instead, we have a +working JavaScript version of the Java classes along with runtime assistance in the +j2sClazz.js library. This design has several advantages: + + 1) It leads to much smaller downloads, since the class loader can dynamically load + code at the class level. + + 2) It allow the browser to use its own optimizations and features, not to ignore those. + This leads to huge performance gains and in many cases much simpler coding. + + 3) It allows for in-browser debugging and analysis. + + 4) It allows for code switching between Java and JavaScript. Working Java code + can be annotated (@j2sNative, @j2sAlias, @j2sIgnore) in a fashion that + allows the code to run slightly differently in a Java than a JavaScript environment. + For example: + + int delayMS = /** @j2sNative 10 ||*/2; + + will read "var delayMS = 10 || 2;" (i.e. 10) in JavaScript but read by the Java + compiler as "int delayMS = 2". + + 5) Just generally, it allows for a much more integrated environment. JavaScript on + the page can call into any SwingJS program, and, likewise, any SwingJS code can + access anything on the page. + + +Method and Field Disambiguation +------------------------------- + +This is no problem. SwingJS has no problem with the overloading of methods, for example: + + public void print(int b); + public void print(float b); + +JavaScript does not allow overloading of methods, and the common practice in +Java of naming a field the same as a method -- isAllowed and isAllowed() -- is +not possible in JavaScript. As a result, SwingJS implements "fully-qualified" +method names using "$" parameter type separation. Thus, these methods in SwingJS +will be referred to as print$I and print$F. The rules for this encoding are +relatively simple: + +1. The seven primitive types in Java are encoded $I (int), $L (long), $F (float), +$D (double), $B (byte) $Z (boolean), and $H (short). + +2. String and Object are encoded as $S and $O, respectively. + +3. "java_lang_" is dropped for all other classes in the java.lang package (as in Java). + For example: $StringBuffer, not $java_lang_StringBuffer + +4. All other classes are encoded as + + "$" + Class.getName().replace(".","_") + +For example, in Java we see: + + public void equals(Object o) {...} + +Whereas in SwingJS we have: + + Clazz.newMeth(C$, 'equals$O', function (o) {...} + +And + + this.getContentPane().add(bar, "North"); + +becomes + + this.getContentPane$().add$java_awt_Component$O(bar, "North"); + +5. Arrays are indicated with appended "A" for each level. So + + setDataVector(Object[][] dataVector, Object[] columnIdentifiers) + +becomes + + setDataVector$OAA$OA(dataVector, columnIdentifiers) + +(It is recognized that this design does introduce a bit of ambiguity, in that + in principal there could be user class named XA and X in the same package, + and methods a(X[]) and a(XA) in the same class that cannot be distinguished. + The benefit of this simple system, however, triumphed over the unlikelyhood + of that scenario.) The transpiler could be set to flag this possibility. + +6. Constructors are prepended with "c$". So + + public JLabel(String text) {...} + +becomes: + + Clazz.newMeth(C$, 'c$$S', function (text) {...}); + +Field disambiguation involves prepending. + +In Java, a class and its subclass can both have the same field name, such as + + boolean visible; + +When this happens, it is called "shadowing", and though not recommended, Java allows +it. The Java2Script transpiler will prepend such shadowing fields with "$" so that the +subclass instance has both "visible" (for use in its methods inherited from its +superclass) and "$visible" (for its own methods). Thus, we might see in Java: + + this.visible = super.visible; + +while in SwingJS we will see: + + this.$visible=this.visible; + +since JavaScript does not have the "super" keyword. + +Parameterless methods such as toString() are appended with "$" to become toString$(). +The one exception to this rule is private methods, which are saved in (truly) private +array in the class (and are not accessible by reflection). Private parameterless +methods retain their simple Java name, since they cannot conflict with field names. + +This renaming of methods has a few consequences, which are discussed more fully below. +See particularly the section on "qualified field and method names", where it is described +how you can use packages or classes or interfaces with ".api.js" in them to represent JavaScript +objects for which all method names are to be left unqualified, and how individual methods +can have more than one name using @j2sAlias. + +The swingjs.api.js package in particular contains a number of useful interfaces that +you can import into your project for JavaScript-specific capabilities. + + +Applet vs. Application +---------------------- + +One of the very cool aspects of SwingJS is that it doesn't particularly matter if a browser-based +Java app is an "applet" or an "application". We don't need JNLP (Java Network Launch Protocol) +because now we can just start up any Java application in a browser just as easily as any applet. +The associative array that passes information to the SwingJS applet (information that formerly +might have been part of the APPLET tag, such as width, height, and codebase, always referred to +in our writing as "the Info array") allows the option to specify the JApplet/Applet "code" +class or the application "main" class. Either one will run just fine. + + +Performance +----------- + +Obviously, there are limitations. One is performance, but we have seen reproducible +performance at 1/6 - 1/3 the speed of Java. Achieving this performance may require +some refactoring of the Java to make it more efficient in both Java and JavaScript. +"for" loops need to be more carefully crafted; use of "new" and "instanceof" need to be +minimized in critical areas. Note that method overloading -- that is, the same method name +with different parameters, such as read(int) and read(byte) -- is no longer any problem. + +Threads +------- + +Although there is only a single thread in JavaScript, meaning Thread.wait(), Thread.sleep(int) and +Thread.notify() cannot be reproduced, we have found that this is not a serious limitation. +For example, javax.swing.Timer() works perfectly in JavaScript. All it means is that threads +that use sleep(int) or notify() must be refactored to allow Timer-like callbacks. That is, +they must allow full exit and re-entry of Thread.run(), not the typical while/sleep motif. + +The key is to create a state-based run() that can be exited and re-entered in JavaScript. + +The javajs.async package can be added to any Java program to provide Java+JavaScript asynchronous +classes, including AsyncColorChooser, AsyncDialog, AsyncFileChooser, and AsyncSwingWorker. All +of these classes work just as well in Java as in JavaScript. There is no need to run them +only when in JavaScript. + +Static fields +------------- + +Final static primitive "constant" fields (String, boolean, int, etc.) such as + +static final int TEST = 3; +static final String MY_STRING = "my " + "string"; + +are converted to their primitive form automatically by the Eclipse Java compiler +and do not appear in the JavaScript by their names. + +Other static fields are properties of their class and can be used as expected. + +Note, however, that SwingJS runs all "Java" code on a page in a common "jvm" +(like older versions of Java). So, like the older Java schema, the JavaScript +equivalents of both applets and applications will share all of their static +fields and methods. This includes java.lang.System. + +Basically, SwingJS implementations of Java run in a browser page-based sandbox +instead of an applet-specific one. + +In general, this is no problem. But if we are to implement pages with +multiple applets present, we must be sure to only have static references +that are "final" or specifically meant to be shared in a JavaScript +environment only (since they will not be shared in Java). + +A simple solution, if static non-constant references are needed, is to attach the +field to Thread.currentThread.threadGroup(), which is an applet-specific reference. +Be sure, if you do this, that you use explicit setters and getters: + +For example, + +private static String myvar; + +... + +public void setMyVar(String x) { + ThreadGroup g = Thread.currentThread().threadGroup(); + /** + * @j2sNative g._myvar = x; + * + */ + { + myvar = x; + } +} + +public String getMyVar() { + ThreadGroup g = Thread.currentThread().threadGroup(); + /** + * @j2sNative return g._myvar || null; + * + */ + { + return myvar; + } +} + + in Java will get and set x the same in JavaScript and in Java. + + +A convenient way to do this in general is to supply a singleton class with +explicitly private-only constructors and then refer to it in Java and in JavaScript +instead of using static field, referring to myclass.getIntance().xxx instead of +myclass.xxx in Java (and JavaScript). + +This was done extensively in the Jalview project. See jalview.bin.Instance. + + +Helper Packages -- swingjs/ and javajs/ +--------------------------------------- + +The SwingJS library is the swingjs/ package. There are interfaces that may be of assistance +in swingjs/api, but other than that, it is not recommended that developers access classes in +this package. The "public" nature of their methods is really an internal necessity. Most access +to this package in working Java should be via the swingjs.api.JSUtilI interface. + +In addition to swingjs/, though, there are several useful classes in the javajs/ package +that could be very useful. This package is a stand-alone package that can be +cloned in any Java project that also would be great to have in any JavaScript project +-- SwingJS-related or not. Functionality ranges from reading and writing various file +formats, including PDF, BMP, PNG, GIF, JPG, JSON, ZIP, and CompoundDocument formats. + +A variety of highly efficient three- and four-dimensional point, vector, matrix, and +quaternion classes are included, as they were developed for JSmol and inherited from that +project. + +Of particular interest should be javajs/async/, which includes + +javajs.async.Async +javajs.async.AsyncColorChooser +javajs.async.AsyncDialog +javajs.async.AsyncFileChooser + +See javajs.async.Async JavaDoc comments for a full description of +these useful classes. + + +Modal Dialogs +------------- + +Although true modal dialogs are not possible with only one thread, a functional equivalent -- +asynchronous modal dialogs -- is relatively easy to set up. All the JOptionPane dialogs will +return PropertyChangeEvents to signal that they have been disposed of and containing the results. +See below and classes in the javajs.async package. + + +Native calls +------------ + +Native calls in Java are calls to operating system methods that are not in Java. JavaScript +has no access to these, of course, and they must all be replaced by JavaScript equivalents. +Fortunately, they are not common, and those that are present in Java (for example, in calculating +checksums in ZIP file creation) are at a low enough level that most developers do not utilize them +or do not even have access to them. All native calls in Java classes have been replaced by +Java or JavaScript equivalents. + + +Swing GUI Peers and UIClasses +----------------------------- + +SwingJS does not support custom UI classes that subclass UI classes in javax/swing/plaf +or com/sun/javax/swing/plaf. + +One of the biggest adaptations introduced in SwingJS is in the area of the graphical +user interface. Basically, what we have is a Java Swing "LookAndFeel" customized for HTML. + +The issue here is complex but workable. In Java there are two background concepts -- the +Component "peer" (one per "heavy-weight" component, such as a Frame) and the +component "uiClass" (one per component, such as BasicButtonUI or BasicTextFieldUI). + +Peers are native objects of the operating system. These are the virtual buttons and text areas +that the user is interacting with at a very base level. They are chunks of low-level code that +paint the screen to give the illusion that you really are pressing a button or typing text +to the screen. Their events are being passed on to Java or the browser by the operating system. + +UI classes provide a consistent "look and feel" for these native objects, rendering them onto +the native window canvas and handling all user-generated events. They paint the borders, +the backgrounds, the highlights, of every control you see in Java. There is one-to-one +correspondence of Swing classes and UI classes. Setting the Look and Feel for a project amounts +to selecting the directory from which to draw these UI classes. Java's UI class interfaces can +be found in the javax.swing.plaf ("platform look and feel") package. Individual look and feel +implementations are found in sun.plaf.basic, sun.plaf.metal, and other such specialized packages. + +Early on in the development of SwingJS, we decided not to fully reproduce the painfully detailed +bit-by-bit painting of controls as is done in Java. Instead, we felt it was wiser to utilize the standard +HTML5 UI capabilities as much as possible, using DIV, and INPUT especially, with extensive use +of CSS and sometimes jQuery (menus, and sliders, for example). Thus, we have created a new +set of UIs -- the "HTML5 Look and Feel". These classes can be found in swingjs.plaf. Besides being +more adaptable, this approach allows far more versatility to SwingJS developers, allowing them +to modify the GUI to suit their needs if desired. + +In SwingJS, since we have no access to native peers except through the browser DOM, +it seemed logical to merge the peer and UI idea. So instead of having one peer per heavy-weight control and +one UI class instance for each control type, we just have one UI class instance per control, and +that UI class instance is what is being referred to when a "peer" is notified. + +In some ways this is a throw back to when all of Swing's components were subclasses of +specific AWT components such as Button and List. These "heavy-weight components" all had their +own individual native peers and thus automatically took on the look and feel provided by the OS. +Later Swing versions implemented full look and feel for all peers, leaving only JDialog, JFrame, +and a few other classes to have native peers. But in SwingJS we have again a 1:1 map of component +and UI class/peer instance. + +The origin of most issues (read "bugs") in relation to the GUI will probably be found in the +swingjs.plaf JSxxxxUI.java code. + + +Swing-only Components -- no longer an issue +------------------------------------------- + +Swing was introduced into Java well after the Java Abstract Window Toolkit (AWT) was well +established. As such, its designers chose to allow AWT controls such as Button and List to be used +alongside their Swing counterparts JButton and JList. Reading the code, it is clear that this +design choice posed a huge headache for Swing class developers. + +For SwingJS, we decided from the beginning NOT to allow this mixed-mode programming and +instead to require that all components be Swing components. However, this is not really an +issue. We have reconfigured the class relationships a bit. In SwingJS, all AWT components +are now subclasses of javax.swing.JComponent. While this might seem error prone, so far we have +found no problem with this arrangement. It's a little surprising to me that the original developers +of Swing did not think of this. + + +The a2s Adapter Package +----------------------- + +Originally, we thought that we would restrict ourselves to JApplets only. That is, only +Swing-based applets. But as we worked, we discovered that there are a lot of great +applets out there that are pre-Swing pure-AWT java.applet.Applet applets. Our problem was +that we also wanted it to be possible to quickly adapt these applets to JavaScript as well. + +The solution turned out to be simple: Write a package (a2s) that recreates the interface for +non-Swing components as subclasses of Swing components. Thus, a2s.Button subclasses javax.swing.JButton +but also accepts all of the methods of java.awt.Button. This works amazingly well, with a few +special adaptations to the core javax.swing to be "AWT-aware." + +Then, to tie it all togeter, all AWT components such as java.awt.Button now subclass their respective +a2s components, which in turn subclass JComponents. So no changes in code are necessary. We have +successfully transpiled over 500 applets using this strategy. + +Working with Files +================== + +Simple String file names are not optimal for passing information about +files read by SwingJS applications. That is because just peeking at a file +in SwingJS will load its entire byte[] data. + +Optimally, all work with files should either use Path or File objects exclusively. +These objects, after a file is read or checked for existence, will already +contain the file byte[] data. The string name can be used alone, since SwingJS will +cache the files itself and not reload them -- just as the browser normally does. + +SwingJS uses the following criteria to determine if File.exists() returns true: + +(1) if this File object has been used directly to read data, or +(2) if reading data using this File object is successful. + +Note that you cannot check to see if a file exists before input or if it +was actually written or if it already exists prior to writing in SwingJS. + +Thus, you should check each use of file.exists() carefully, and if necessary, provide a J2sNative +block that gives an appropriate "OK" message, for example: + +(/** @j2sNative 1 ? false : */ outputfile.exits()) + +or + +(/** @j2sNative 1 ? true : */ inputfile.exits()) + +Temporary files can be created in SwingJS. SwingJS will maintain a pseudo-filesystem for files +created with File.createTempFile(). This is useful in that closure of writing to a temporary file +does not generate a pseudo-download to the user's machine. Temporary files will be placed in the +"/TEMP/" directory, as seen from the running Java program. Any file written to this directory will +simply be stored in memory; files written to any other directory, when closed, will appear to the +user as a download, often involving a "What do you want to do with this file" dialog. + + +See below for details relating to each of the subjects below: + + +UNIMPLEMENTED CLASSES BY DESIGN +=============================== + +The SwingJS implementation of the following classes are present +in a way that gracefully bypasses their functionality: + +accessibility +security +serialization + + + +TODO LIST FOR UNIMPLEMENTED CLASSES +=================================== + +none as of 2020.12.31. Source code for classes and methods missing +from Java 8 or from Java 9+ can be inserted by any developer along +with their running code source, and they should run. + + +MINOR ISSUES--required some rewriting/refactoring by Bob and Udo +================================================================ + +Thread.currentThread() == dispatchThread + + +MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS +===================================================================== + +See below for a full discussion. + +primitive type restrictions - int, long, and float +HashMap, Hashtable, and HashSet iterator ordering +interning, new String("xxx") vs "xxx" +Names with "$" and "_" +ArrayIndexOutOfBounds +java.awt.Color +native methods +javax.swing.JFileDialog +key focus +LookAndFeel and UI Classes +System.exit(0) does not stop all processes +list cell renderers must be JComponents +myClass.getField not implemented +"window" and other reserved JavaScript names +reserved field and method names +qualified field and method names +Component.getGraphics(), Graphics.dispose() +Graphics.setClip() + +MAJOR ISSUES--for Bob and Udo within SwingJS +============================================ + +fonts +OS-dependent classes +AWT component peers +some aspects of reflection + +MAJOR ISSUES--to be resolved by implementers +============================================ + +fonts +threads +modal dialogs +image loading +no format internationalization +Graphics2D: missing winding rules +text-related field implementation +Formatter/Regex limitations + +======================================================================== + +DISCUSS +======= + +Table row/col sorter needs checking after removal of java.text.Collator references + +========================================================================== + +////////////////////////////////////////////////////////////////////////////// + +UNIMPLEMENTED CLASSES +===================== + +accessibility +------------- + +All Accessibility handling has been commented out to save the download footprint. +This removes the need for sun.misc.SharedSecrets as well. +Nothing says we could not implement accessibility. We just didn't. + + +security +-------- + +All JavaScript security is handled by the browser natively. +Thus, Java security checking is no longer necessary, and +java.security.AccessController has been simplified to work without +native security checking. + +Note that private methods in a class are REALLY private. + + +serialization +------------- + +All serialization has been removed. It was never very useful for Swing anyway, +because one needs exactly the same Java version to save and restore serialized objects. + + +keyboard accelerators and mnemonics +----------------------------------- + +This work was completed in the spring of 2019. Note that in a browser, some +key strokes, particularly CTRL-keys, are not available. Bummer. + + +MINOR ISSUES--required some rewriting/refactoring by Bob and Udo +================================================================ + + +Thread.currentThread() == dispatchThread +---------------------------------------- + +changed to JSToolkit.isDispatchThread() + + +MINOR ISSUES--requiring some rewriting/refactoring outside of SwingJS +===================================================================== + +primitive restrictions - int, long, and float +--------------------------------------------- + +int + +For performance reasons, int addition and multiplication do not by default overflow to +negative values. Instead, they just get bigger. Java code that relies on overflow to +negative values should be surrounded by ()|0 -- an OR with integer 0: + + +int bigI, bigJ; +... + +bigI = (bigI + bigJ)|0; + +bigI = (bigI + 1)|0; //instead of bigI++ + + +Thus, in Java, the following is true: + + 2000000000 + 2000000000 == -294967296 + +But in SwingJS, that will be 4000000000. So, for example, the following +strategy will fail in SwingJS: + + int newLength = lineBuf.length * 2; + if (newLength < 0) { + newLength = Integer.MAX_VALUE; + } + +This is because, generally, "-1" in JavaScript is not 0xFFFFFFFF. The simple ()|0 takes +caes of this: + + int newLength = (lineBuf.length * 2)|0; + if (newLength < 0) { + newLength = Integer.MAX_VALUE; + } + +JavaScript does process bitwise operators & | ^ ~ properly for int values. There is no issue using +these operations. + +Note that int 1/0 in Java throws "java.lang.ArithmeticException: / by zero", but in JavaScript is just Infinity. + +Importantly, the JavaScript Int32Array does behave properly. From the Firefox developer console: + +>> x = new Int32Array(1) +<- Int32Array(1) [ 0 ] +>> x[0] = 4000000000 +<- 4000000000 +>> x[0] +<- -294967296 + +Notice that, perhaps unexpectedly, the following two constructs produce +different results in JavaScript: + +x = new Int32Array(1); +b = x[0] = 4000000000; + +(b will be 4000000000) + +and + +x = new Int32Array(1); +x[0] = 4000000000; +b = x[0]; + +(b will be -294967296) + + +SwingJS leverages array typing to handle all byte and short arithmetic so as +to ensure that any byte or short operation in JavaScript does give the same +result in Java. + +long + +Java's 64-bit long type is fully supported, starting with java2script 3.3.1 (2020.12.31) +The transpiler handles all conversions to and from long appropriately. See the discussion +at https://github.com/BobHanson/java2script/issues/202 for how this is done. + +float + +SwingJS does not distinguish between float and double. Everything is double. + + +HashMap, Hashtable, and HashSet iterator ordering +------------------------------------------------- + +In Java, iterators for HashMap, Hashtable, and HashSet do not guarantee any particular order. +From the HashMap documentation for Java 8: + + This class makes no guarantees as to the order of the map; in particular, it does not + guarantee that the order will remain constant over time. + +Likewise, for HashSet (because it is simply a convenience method for HashMap: + + [HashSet] makes no guarantees as to the iteration order of the set. + +JavaScript's Map object is different. It is basically a LinkedHashMap, so it guarantees iteration +in order of object addition. + +Starting with java2script 3.2.9.v1, these classes use the JavaScript Map object rather than hash codes +whenever all keys are strictly of JavaScript typeof "string". If any key is introduced that is not a string, the +implementation falls back to using hash codes, the same as Java. + +The result is significantly faster performance (3-12 x faster) than originally, and up to 3 x faster +performance in JavaScript than in Java itself. That is not a misprint. Faster than Java. + +The JavaScript Map implementation is implemented UNLESS the constructor used is the one that +specifies both initial capacity and load factor in their constructor. Thus, + +new Hashtable() +new HashMap() +new HashMap(16) +new HashSet() + +all use the JavaScript Map. But + +new Hashtable(11, 0.75f) +new HashMap(16, 0.75f) +new HashSet(16, 0.75f) + +do not. + +This design allows for opting out of the JavaScript Map use in order to retain the exact behavior of +iterators in JavaScript as in Java. + + +interning, new String("xxx") vs "xxx" +------------------------------------- + +Note that the following are true in JavaScript: + +typeof new String("xxxx") == "object" +typeof "xxxx" == "string" +var s = "x";typeof ("xxx" + s) == "string" + +There is no equivalence to this behavior in Java, where a String is a String is a String. + +Be aware that SwingJS does not always create a JavaScript String object using JavaScript's +new String(...) constructor. It only does this for Java new String("xxxx") or new String(new String()). + +In all other cases, new String(...) (in Java) results in a simple "xxxx" string in JavaScript. +That is, it will be JavaScript typeof "string", not typeof "object". + +The reason for this design is that several classes in the Java core use toString() +methods that return new String(), and those classes that do that would cause a JavaScript error +if implicitly stringified if new String() returned a JavaScript String object. + +This is fine in JavaScript: + +test1 = function() { return { toString:function(){ return "OK" } } } +"testing" + new test1() +>> "testingOK" + +But for whatever reason in JavaScript: + +test2 = function() { return { toString:function(){ return new String("OK") } } } +"testing" + new test2() +>> Uncaught TypeError: Cannot convert object to primitive value + +The lesson here is never to use + + return new String("..."); + +in a Java toString() method. In Java it will be fine; in JavaScript it will also be fine as long as +that method is never called in JavaScript implicitly in the context of string concatenation. + +A note about interning. Consider the following six Java constructions, where we have a == "x"; + +"xxx" +"xx" + "x" +new String("xxx").intern() + +new String("xxx") +"xx" + a.toString() +"xx" + a + +All six of these will return java.lang.String for .getClass().getName(). +However, the first three are String literals, while the last three are String objects. +Thus: + "xxx" == "xxx" + "xxx" == "xx" + "x" + "xxx" == new String("xxx").intern() + +but none of the other three are equivalent to "xxx" or each other: + + "xxx" != new String("xxx") + "xxx" != "xx" + a.toString() + "xxx" != "xx" + a + new String("xxx") != new String("xxx") + "xx" + a != new String("xxx") + +etc. + +As in Java, in SwingJS, all of the following Java assertions pass as true: + + assert("xxx" == "xx" + "x"); + assert("xxx" == ("xx" + a).intern()); + assert("xxx" === new String("xxx").intern()); + +and both of these do as well: + + assert(new String("xxx") != "xxx"); + assert(new String("xxx") != new String("xxx")); + +But the following two fail to assert true in SwingJS: + + assert("xxx" != "xx" + a); + assert("xxx" != "xx" + a.toString()); + +because, in JavaScript, both of these right-side expressions evaluate to a simple "interned" string. + +In Java, however, these assertions are true because Java implicitly "boxes" String +concatentaion as a String object, not a literal. + +Most of us know not to generally use == with Strings unless they are explicitly interned. +Where this problem may arise, though, is in IdentityHashMap, which compares objects using +System.identityHashCode(), which is not the same for different objects or their string literal equivalents. + +My recommendation, if you need to use IdentityHashMap with strings is to always use an explicit String.intern() +for any keys -- unless you really want to keep every string as separate keys even if they are the same sequence, +in which case, use new String(). This will work in Java and in JavaScript. + +Be aware when working with strings that come from SwingJS and are being used by other JavaScript modules +that those that are String objects will return "object" for the JavaScript typeof operator, not "string". + +The easy way to ensure this is no problem is to concatenate strings with "" to force immediate interning: + + var x = aJavaObject.getString() + ""; + +unless you are certain that the string is being returned is a raw JavaScript string. + + +Names with "$" and "_" +---------------------- + +For the most part, this should be no problem. + +Note that the use of $ and _ in Java field names has always been discouraged: +[https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html] + + You may find some situations where auto-generated names will contain the dollar sign, + but your variable names should always avoid using it. A similar convention + exists for the underscore character; while it's technically legal to begin your + variable's name with "_", this practice is discouraged. + +Some impacts of transpiling method names with full qualification: + +1) SwingJS will introduce fields that start with $ or _. These will not conflict + if the above convention is followed. + +2) Fields that have the same Java name as a method are not an issue. + +3) Fields that have a Java name with $ that matches a transpiled method name, + such as toString$, will need to be refactored in Java to not have that name collision. + +4) Fields in a subclass that have the same name as private fields in a superclass + represent a name collision, because the superclass method needs to call its private + field even if invoked from a subclass. The solution was to modify the subclass field + name using one or more prepended $. + +5) Use of Class.getDeclaredMethods() reflection will return Method objects having the transpiled + name, not the Java name. This could require some j2sNative adjustment + to strip the $... parameters from the name if that is needed. + +6) Use of Method.getParameterTypes() should work fine, provided class names + do not contain "_". This is because the transpiler converts "." to "_" when + creating the fully qualified JavaScript name. + + +ArrayIndexOutOfBounds +--------------------- + +You cannot implicitly throw an ArrayIndexOutOfBoundsException in JavaScript. +JavaScript will simply return "undefined", not throw an Exception. So: + +boolean notAGoodIdeaIsOutOfBounds(String[] sa, int i) { + try { + return (sa[i] == sa[i]); + } catch (ArrayIndexOutOfBoundsException e) { + return false; + } +} + +will work in Java but not in JavaScript. Code should not depend upon this sort +of trap anyway, if you ask me. + + +Throwable vs Error vs Exception +------------------------------- + +True JavaScript errors are trapped as Throwable, whereas you can still trap +Error and Exception as well. So if you want to be sure to catch any JavaScript +error, use try{}catch (Throwable t){}, not try{}catch (Exception e){}. + +java.awt.Color +-------------- + +ColorSpace: only "support" CS_sRGB. + + TODO -- any volunteers?? + + +javax.swing.JFileDialog +----------------------- + +HTML5 cannot expose a file reading directory structure. But you certainly +can still do file reading and writing. It just works a little differently. +It's a simple modification: + + b = new JButton("FileOpenDialog"); + b.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + Test_Dialog.this.onDialogReturn(fc.showOpenDialog(Test_Dialog.this)); + // Java will wait until the dialog is closed, then enter the onDialogReturn method. + // JavaScript will exit with NaN immediately, and then call back with its actual value + // asynchronously. + } + + }); + + public void onDialogReturn(int value) { + if (value != Math.floor(value)) + return; // in JavaScript, this will be NaN, indicating the dialog has been opened + // If we are here, the dialog has closed, in both Java and JavaScript. + System.out.println("int value is " + value); + } + + + @Override + public void propertyChange(PropertyChangeEvent event) { + Object val = event.getNewValue(); + String name = event.getPropertyName(); + System.out.println(name); + switch (event.getSource().getClass().getName()) { + case "javax.swing.JOptionPane": + switch (name) { + case "inputValue": + onDialogReturn(val); + return; + case "value": + if (val instanceof Integer) + onDialogReturn(((Integer) val).intValue()); + else + onDialogReturn(val); + return; + } + break; + case "javax.swing.ColorChooserDialog": + switch (name) { + case "SelectedColor": + onDialogReturn(val); + return; + } + break; + case "javax.swing.JFileChooser": + switch (name) { + case "SelectedFile": + File file = (File) val; + byte[] array = (val == null ? null : /** @j2sNative file.秘bytes || */ + null); + onDialogReturn("fileName is '" + file.getName() + "'\n\n" + new String(array)); + return; + } + break; + } + System.out.println( + event.getSource().getClass().getName() + " " + event.getPropertyName() + ": " + event.getNewValue()); + } + + +Developers are encouraged to create a separate class that handles general calls to JFileDialog. +An example class can be found in the SwingJS distribution as + +/sources/net.sf.j2s.java.core/src/javajs/async/AsyncFileChooser.java. + + +javax.swing.JOptionPane dialogs +------------------------------- + +For a full discussion of modal dialogs, see the javajs.asyc.AsyncDialog.java discussion. + +For this action to work, the parent component must implement +propertyChangeListener, and any call to JOptionPanel should allow for +an asynchronous response, meaning that there is no actionable code following the +call to the dialog opening. + +In addition, for compatibility with the Java version, implementation should +wrap the call to getConfirmDialog or getOptionDialog in a method call to +handle the Java: + +onDialogReturn(JOptionPane.showConfirmDialog(parentFrame, +messageOrMessagePanel, "title", JOptionPane.OK_CANCEL_OPTION)); + +Then parentFrame.propertyChange(event) should also call onDialogReturn. + +This will then work in both Java and JavaScript. + +Note that there is an int and an Object version of onDialogReturn(). + + +In JavaScript: + +The initial return from JOptionPane.showConfirmDialog and showMessageDialog +will be (SwingJS) JDialog.ASYNCHRONOUS_INTEGER (NaN), testable as an impossible +Java int value using ret != -(-ret) if the parent implements PropertyChangeListener, or -1 +(CLOSE_OPTION) if not. + +For showOptionDialog (which returns Object) or showInputDialog (which returns +String), the initial return will be (SwingJS) JDialog.ASYNCHRONOUS_OBJECT, testable as +((Object) ret) instanceof javax.swing.plaf.UIResource if the parent implements +PropertyChangeListeneer, or null if not. + +The second return will be the desired return. + +In Java: + +The initial return will be the one and only modal final return. + + + +For full compatibility, The calling method must not continue beyond this call. + +All of the standard Java events associated with Components are also available. + +Certain fall back mechanisms are possible, where onReturn does not exist, but +only for the following cases: + + +For showMessageDialog, for WARNING_MESSAGE and ERROR_MESSAGE, a simple +JavaScript alert() is used, returning 0 (OK_OPTION) or -1 (CLOSED_OPTION). + +For showInputDialog, if the message is a string, a simple JavaScript prompt() +with input box is used, returning the entered string or null. + +For showConfirmDialog, a simple JavaScript confirm() is used, in which case: + +for YES_NO_OPTION: YES_OPTION or NO_OPTION + +for YES_NO_CANCEL_OPTION: YES_OPTION or CANCEL_OPTION + +for OK_CANCEL_OPTION or any other: OK_OPTION or CANCEL_OPTION + +Note that you should implement a response for CLOSED_OPTION for +showConfirmDialog. For other dialogs, a null return indicates the dialog was +closed, just as for Java. + +Developers are encouraged to create a separate class that handles general calls. +An example class can be found in the SwingJS distribution as src/javajs/async/AsyncDialog.java. +Very simple modifications to the Java allows asynchronous operation using AsyncDialog. Here +is a simple "do you want to close this frame" example, where you can see that what we have +done is to set the reply into an ActionListener that is defined in the constructor of +the AsyncDisplay object: + +// Original: +// +// private void promptQuit() { +// int sel = JOptionPane.showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION); +// switch (sel) { +// case JOptionPane.YES_OPTION: +// resultsTab.clean(); +// seqs.dispose(); +// if (fromMain) { +// System.exit(0); +// } +// break; +// } +// } + + private void promptQuitAsync() { + new AsyncDialog(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + int sel = ((AsyncDialog)e.getSource()).getOption(); + switch (sel) { + case JOptionPane.YES_OPTION: + resultsTab.clean(); + seqs.dispose(); + if (fromMain) { + System.exit(0); + } + break; + } + }}).showConfirmDialog(null, PROMPT_EXIT, NAME, JOptionPane.YES_NO_OPTION); + } + +Very simple! + + +native methods +-------------- + +The J2S compiler ignores all static native method declarations. +Anything of this nature needs to be implemented in JavaScript if it is needed, +using j2sNative blocks: + +/** + * @j2sNative + * + * var putYourJavaScriptCodeHere + * + */ + + Note that if you follow that directly with a {...} block, then + only the javadoc code will run in JavaScript, and only the {...} code will run in Java. + + +key Focus +--------- + +As of June, 2019, the keyboard focus manager is fully implemented. +The one catch is that JTextPane and JTextArea, which already consume +VK_TAB in Java, cannot use CTRL-TAB to continue a tabbing cycle around +the components in a window. Instead, CTRL-TAB is absorbed by the browser. + + +LookAndFeel and UI Classes +-------------------------- + +SwingJS implements the native browser look and feel as swingjs.plaf.HTML5LookAndFeel. +There are small differences between all look and feels -- MacOS, Windows, SwingJS. + +Expert developers know how to coerce changes in the UI by subclassing the UI for a +component. This probably will not work in SwingJS. + +Note that LookAndFeel in Java usually determines canvas size in a Frame because +different operating systems (Mac OS vs Windows vs HTML5) will have +different edge sizes on their frames. If you want to ensure a component size, +use getContentPane().setPreferredSize(). + + +System.exit(0) does not stop all processes +------------------------------------------ + +Although System.ext(int) has been implemented in JavaScript, it just closes the +frames, stops all pending javax.swing.Timer objects in the queue, and runs any +threads added using Runtime.getRuntime().addShutdownHook(Thread). +It may not stop all "threads." So don't rely on that. +Applications are responsible for shutting down prior to executing System.exit(0). + + +myClass.getField not implemented +-------------------------------- + +java.lang.reflect.Field is implemented minimally. It is not +certain that Field.getDeclaringClass() will work. If you just want a +value of a field, you can do this: + +/** + *@j2sNative + * + * return myClass[name] + */ + +But that is not a java.lang.reflection.Field object. + + +"window" and other reserved JavaScript names +-------------------------------------------- + +No reserved top-level JavaScript name is allowed for a package name. So, for example, +one must rename packages such as "window" or "document" to names such as "win" or "doc". + + +reserved field and method names +------------------------------- + +In order to minimize the chance of added SwingJS field and method names colliding with ones +developers might use in subclassing Java classes, we have added U+79D8 (first character of Mandarin +"secret") to the characters already disrecommended by Java documentation ("$" and "_"). The only problem +would be if you use that character followed by certain English words in certain classes. For example +\u79D8canvas for JComponents (in java.awt.JSComponent) and \u79D8byte (in java.io.File). + + +qualified field and method names +-------------------------------- + +Method names in SwingJS are fully qualified, meaning two methods with the same Java name but different +parameters, such as write(int) and write(double), must not have the same name in JavaScript. (In this +case, we will have write$I and write$D.) However, in certain cases it may be desirable to leave the +method names unqualified. In particular, when an interface actually represents a JavaScript object, +the transpiler can leave a method name unqualified. + +You can implement a simple name for a method using the @j2sAlias annoation in the javadoc for the +method involved. For example: + + +/** + * @j2sAlias read + * + */ +public void read(byte[] buf, int pos, int len) {...} + +will allow the method to be accesible either as "read" or "read$BA$I$I" in JavaScript. + + +The default situation for this is a class name includes ".api.js" (case-sensitive). +This means that any method in any class in a package js within a package api, or any private interface js +that has an outer interface api, will have all-unqualified methods. An example of this is +swingjs.plaf.JSComboPopupList, which needs to communicate with a jQuery +object directly using the following interface: + + private interface api { + + interface js extends JQueryObject { + + abstract js j2sCB(Object options); + + abstract Object[] j2sCB(String method); + + abstract Object[] j2sCB(String method, Object o); + + abstract Object[] j2sCB(String method, int i); + + abstract int j2sCB(String OPTION, String name); + + } + } + +Notice that all these variants of j2sCB() will call the same method in JavaScript by design. + + +Component.getGraphics(), Graphics.dispose() +------------------------------------------- + +Use of component.getGraphics() is discouraged in Java and in SwingJS. +Specifically in SwingJS, any call to component.getGraphics() or +BufferedImage.createGraphics() or Graphics.create(...) should be matched with graphics.dispose(), +particularly when it is called outside the context of a paint(Graphics) call from the system. + +If you see your graphics scrolling down the page with each repaint, +look for where you have used Component.getGraphics() and not Graphics.dispose(). +For example, this will definitely NOT work in SwingJS: + + this.paint(getGraphics()) + +and really should not work in Java, either, as it is technically a resource memory leak. + +Instead, if you really do not want to use repaint(), use this: + + Graphics g = getGraphics(); + paint(g); + g.dispose(); + + + +Graphics.setClip() +------------------ + +The HTML5 canvas.clip() method is permanent. You can only reset the clip using +save/restore. This is different from Java, where you can temporarily change it using + + Shape oldClip = Graphics.getClip(); + Graphics.setClip(newClip); + ... + Graphics.setClip(oldClip); + +If you need to do something like this, you must schedule the paints to not have overlapping clip needs. + + +MAJOR ISSUES--for Bob and Udo within SwingJS +============================================ + +fonts +----- + +Fonts and FontMetrics will all be handled in JavaScript. Font matching will +not be exact, and composite (drawn) fonts will not be supported. + +SwingJS handles calls such as font.getFontMetrics(g).stringWidth("xxx") by +creating a
containing that text, placing it in an obscure location on +the page, and reading div.getBoundingClientRect(). This is a VERY precise +value, but can be a pixel or two off from what Java reports for the same font. + + +OS-dependent classes +-------------------- + +Static classes such as: + + java.awt.Toolkit + java.awt.GraphicsEnvironment + +which are created using Class.forName are implemented using classes in the swingjs package. + +sun.awt.AWTAccessor is not implemented. + + +AWT component peers and component "ui" user interfaces +------------------------------------------------------ + +ComponentPeer is a class that represents a native AWT component. +Components with such peers are called "heavy-weight" components. +They are expected to do the dirty work of graphics drawing. + +Java Swing implements peers only for JApplet, JDialog, JFrame, and JWindow. +References to such objects have been removed, but clearly there must be +some connection to similar DOM objects, even for "light-weight" components. + + +MAJOR ISSUES--to be resolved by implementers +============================================ + +fonts +----- + +Glyph/composite/outline fonts are not supported. + + + +threads +------- + +Thread locking and synchronization are not relevant to JavaScript. +Thus, anything requiring "notify.." or "waitFor.." could be a serious issue. + +All threading must be "faked" in JavaScript. Specifically not available is: + + Thread.sleep() + +javax.swing.AbstractButton#doClick(pressTime) will not work, as it requires Thread.sleep(); + +However, java.lang.Thread itself is implemented and used extensively. + +Methods thread.start() and thread.run() both work fine. + +For simple applications that use Thread.sleep() just to have a delay, as in a frame rate, for +example, one can use javax.swing.Timer instead. That is fully implemented. + +Likewise, java.util.Timer can be replaced with no loss of performance with javax.Swing.Timer. +Note that java.util.TimerTask is implemented, but it can also be replaced by an implementation of Runnable. + +task = new TimerTask(){....}; +t = new java.util.Timer(); +t.schedule(task, 0, 1); + +becomes + +task = new TimerTask(){....}; // or task = new Runnable() {...} +t = new javax.swing.Timer(1, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + task.run(); + } +}; +t.setInitialDelay(0); // not particularly necessary +t.start(); + +In addition, SwingJS provides swingjs.JSThread, which can be subclassed +if desired. This class allows simple + + while(!interrupted()){ + wait() + ... + } + +action through an asynchronous function run1(mode). For example: + + protected void run1(int mode) { + try { + while (true) + switch (mode) { + case INIT: + // once-through stuff here + mode = LOOP; + break; + case LOOP: + if (!doDispatch || isInterrupted()) { + mode = DONE; + } else { + Runnable r = new Runnable() { + public void run() { + // put the loop code here + } + }; + dispatchAndReturn(r); + if (isJS) + return; + } + break; + // add more cases as needed + case DONE: + // finish up here + if (isInterrupted()) + return; + // or here + break; + } + } finally { + // stuff here to be executed after each loop in JS or at the end in Java + } + } + + +image loading +------------- +- All image loading in SwingJS is synchronous. A MediaTracker call will immediately return "complete". + However, it still may take one system clock tick to fully load images. Thus, it is recommended that + images be preloaded in the static block of the applet if it is necessary that they be available in init(). + This is only an issue if you are trying to access the pixel buffer of the image in JavaScript. + +- Applet.getImage(path, name) will return null if the image does not exist. + +- BufferedImage: only "support" imageType RGB and ARGB + + -BH: This is a temporary edit, just to get us started. Certainly GRAY will be needed + + +BigInteger and BigDecimal +------------------------- + +java.math.BigInteger and java.math.BigDecimal are fully supported. + + +no format internationalization +------------------------------ + +For now, just "en" for number and date formatters + + +missing winding rules +--------------------- + +When filling a graphic, only nonzero winding rule is implemented in HTML5 Canvas2D. + + + +text-related field implementation +--------------------------------- + +Text fields are: + +JTextField (JavaScript ) +JTextArea (JavaScript "; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // #11217 - WebKit loses check when the name is after the checked attribute - fragment.appendChild( div ); - div.innerHTML = ""; - - // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 - // old WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<9 - // Opera does not clone events (and typeof div.attachEvent === undefined). - // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() - support.noCloneEvent = true; - if ( div.attachEvent ) { - div.attachEvent( "onclick", function() { - support.noCloneEvent = false; - }); - - div.cloneNode( true ).click(); - } - - // Execute the test only if not already executed in another module. - if (support.deleteExpando == null) { - // Support: IE<9 - support.deleteExpando = true; - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - } - - // Null elements to avoid leaks in IE. - fragment = div = input = null; -})(); - - -(function() { - var i, eventName, - div = document.createElement( "div" ); - - // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) - for ( i in { submit: true, change: true, focusin: true }) { - eventName = "on" + i; - - if ( !(support[ i + "Bubbles" ] = eventName in window) ) { - // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) - div.setAttribute( eventName, "t" ); - support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; - } - } - - // Null elements to avoid leaks in IE. - div = null; -})(); - - -var rformElems = /^(?:input|select|textarea)$/i, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, // BHTEST - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - var tmp, events, t, handleObjIn, - special, eventHandle, handleObj, - handlers, type, namespaces, origType, - elemData = jQuery._data( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - var j, handleObj, tmp, - origCount, t, events, - special, handlers, type, - namespaces, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, ret, handleObj, matched, j, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var sel, handleObj, matches, i, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - /* jshint eqeqeq: false */ - for ( ; cur != this; cur = cur.parentNode || this ) { - /* jshint eqeqeq: true */ - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Chrome 23+, Safari? - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Even when returnValue equals to undefined Firefox will still show alert - if ( event.result !== undefined ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === strundefined ) { - elem[ name ] = null; - } - - elem.detachEvent( name, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && ( - // Support: IE < 9 - src.returnValue === false || - // Support: Android < 4.0 - src.getPreventDefault && src.getPreventDefault() ) ? - returnTrue : - returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - if ( !e ) { - return; - } - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ - pointerenter: "pointerover", // BHTEST - pointerleave: "pointerout", // BHTEST - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// IE submit delegation -if ( !support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); - } - }); - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "changeBubbles", true ); - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = jQuery._data( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = jQuery._data( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - jQuery._removeData( doc, fix ); - } else { - jQuery._data( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); - - -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
", "
" ], - area: [ 1, "", "" ], - param: [ 1, "", "" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - col: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} - -// Support: IE<8 -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - if ( match ) { - elem.type = match[1]; - } else { - elem.removeAttribute("type"); - } - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } -} - -function cloneCopyEvent( src, dest ) { - - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( (!support.noCloneEvent || !support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted from table fragments - if ( !support.tbody ) { - - // String was a , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[1] === "
" && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - deletedIds.push( id ); - } - } - } - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map(function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[i], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle ? - - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - window.getDefaultComputedStyle( elem[ 0 ] ).display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - - // Use the already-created iframe if possible - iframe = (iframe || jQuery( "' - J2S.$after("body", s); - } catch (e) { - // ignore - } - delete J2S._tracker; - } - return applet; - } - - var __profiling; - - J2S.getProfile = function(doProfile) { - if (__profiling || arguments.length == 1 && !doProfile) { - var s = Clazz.getProfile(); - System.out.println(s); - alert(s); - return; - } - var seconds = (arguments[0] === true ? 0 : +(arguments.length == 0 ? prompt("How many seconds?", "0 (until I click again)") : arguments[0])); - if (isNaN(seconds)) - seconds = 0; - - Clazz.startProfiling(__profiling = (seconds || arguments.length == 0 || doProfile)); - } - - J2S._getAttr = function(s, a) { - var pt = s.indexOf(a + "="); - return (pt >= 0 && (pt = s.indexOf('"', pt)) >= 0 ? s.substring(pt + 1, - s.indexOf('"', pt + 1)) : null); - } - - J2S.Cache = { - fileCache : {} - }; - - J2S.Cache.get = function(filename) { - return J2S.Cache.fileCache[filename]; - } - - J2S.Cache.put = function(filename, data) { - J2S.Cache.fileCache[filename] = data; - } - // dnd _setDragDrop for swingjs.api.J2S called JSComponentUI - J2S.setDragDropTarget = J2S.Cache.setDragDrop = function(me, node, adding) { - if (adding === false) { - node["data-dropComponent"] = null; - J2S.$appEvent(node, null, "dragover", null); - J2S.$appEvent(node, null, "drop", null); - return; - } - if (adding === true) { - node["data-dropComponent"] = me; - me = node; - node = null; - } - // me can be the node if node is null - node || (node = null); - - - J2S.$appEvent(me, node, "dragover", function(e) { - e = e.originalEvent; - e.stopPropagation(); - e.preventDefault(); - if (e.target == J2S._mouseOwner) { - return; // for now - e.dataTransfer.dropEffect = 'move'; - } else { - e.dataTransfer.dropEffect = 'copy'; - } - }); - J2S.$appEvent(me, node, "drop", function(e) { - J2S._mouseOwner && (J2S._mouseOwner.isDragging = false); - var oe = e.originalEvent; - if (e.target == J2S._mouseOwner) { - oe.preventDefault(); - oe.stopPropagation(); - return; // for now - } - if (!oe.dataTransfer) - return; - try { - var kind = oe.dataTransfer.items[0].kind; - var type = oe.dataTransfer.items[0].type; - var file = oe.dataTransfer.files[0]; - var files = oe.dataTransfer.files; - } catch (e) { - return; - } finally { - oe.preventDefault(); - var doStop = (e.target != J2S._mouseOwner) - if (doStop) { - oe.stopPropagation(); - } - } - var target = oe.target; - var c = target; - var comp; - while (c && !(comp = c["data-dropComponent"])) - c = c.parentElement; - if (!comp) - return; - var d = comp.getLocationOnScreen$(); - var x = oe.pageX - d.x; - var y = oe.pageY - d.y; - if (file == null) { - // FF and Chrome will drop an image here - // but it will be only a URL, not an actual file. - - - Clazz.loadClass("swingjs.JSDnD") - .drop$javax_swing_JComponent$O$S$BA$I$I(comp, - oe.dataTransfer, null, null, x, y); - return; - } - // MSIE will drop an image this way, though, and load it! - var nfiles = files.length; - var arr = []; - for (var i = 0; i < nfiles; i++) { - var file = files[i]; - var reader = new FileReader(); - reader.onloadend = function(evt) { - if (evt.target.readyState == FileReader.DONE) { - var target = oe.target; - var name = evt.target._filename; - var bytes = J2S._toBytes(evt.target.result); - arr.push([name, bytes]); - System.out.println("j2sApplet DnD kind=" + kind + " type=" + type + " name=" + name + " size="+ bytes.length); - if (--nfiles == 0) { - Clazz.loadClass("swingjs.JSDnD") - .drop$javax_swing_JComponent$O$OAA$I$I(comp, oe.dataTransfer, arr, x, y); - } - } - }; - reader._filename = file.name - reader.readAsArrayBuffer(file); - } - }); - } - - J2S._isAsync = false; // testing only - J2S._asyncCallbacks = {}; - - J2S._coreFiles = []; // required for package.js - - // ///////////////// - // This section provides an asynchronous loading sequence - // - - // methods and fields starting with double underscore are private to this - // .js file - - var __clazzLoaded = false; - var __execLog = []; - var __execStack = []; - var __execTimer = 0; - var __coreSet = []; - var __coreMore = []; - var __execDelayMS = 100; // must be > 55 ms for FF - - var __nextExecution = function(trigger) { - arguments.length || (trigger = true); - delete __execTimer; - var es = __execStack; - var e; - while (es.length > 0 && (e = es[0])[4] == "done") - es.shift(); - if (es.length == 0) - return; - if (!J2S._isAsync && !trigger) { - setTimeout(__nextExecution, 10) - return; - } - e.push("done"); - var s = "j2sApplet exec " + e[0]._id + " " + e[3] + " " + e[2]; - if (self.System) - System.out.println(s); - // alert(s) - if (window.console) - window.console.log(s + " -- OK") - __execLog.push(s); - e[1](e[0], e[2]); - }; - - var __loadClazz = function(applet) { - if (!__clazzLoaded) { - __clazzLoaded = true; - // create the Clazz object - J2S.LoadClazz(Clazz); - if (J2S._strict) - System.err.println("j2sApplet j2sstrict - 'use strict' will be used - this is experimental"); - if (J2S._startProfiling) - J2S.getProfile(); - if (applet._noMonitor) - Clazz._LoaderProgressMonitor.showStatus = function() { - } - J2S.LoadClazz = null; - if (applet.__Info.uncompressed) - Clazz.loadClass(); // for now; allows for no compression - Clazz._Loader.onGlobalLoaded = function(file) { - // not really.... just nothing more yet to do yet - Clazz._LoaderProgressMonitor.showStatus("Application loaded.", - true); - if (!J2S._debugCode || !J2S.haveCore) { - J2S.haveCore = true; - __nextExecution(); - } - }; - // load package.js and j2s/core/core.z.js - Clazz._Loader.loadPackageClasspath("java", null, true, - __nextExecution); - return; - } - __nextExecution(); - }; - - J2S.showStatus = function(msg, doFadeout) { - Clazz._LoaderProgressMonitor.showStatus(msg, doFadeout); - } - - J2S.debugClip = function() { return J2S._debugClip }; - - var __loadClass = function(applet, javaClass) { - Clazz._Loader.loadClass(javaClass, function() { - __nextExecution() - }); - }; - - J2S.showExecLog = function() { - return __execLog.join("\n") - }; - - J2S._addExec = function(e) { - e[1] || (e[1] = __loadClass); - var s = "J2SApplet load " + e[0]._id + " " + e[3]; - if (self.console) - console.log(s + "...") - __execLog.push(s); - __execStack.push(e); - } - - J2S._addCoreFile = function(type, path, more) { - - // BH 3/15: idea here is that when both Jmol and JSV are present, - // we want to load a common core file -- jmoljsv.z.js -- - // instead of just one. Otherwise we do a lot of duplication. - // It is not clear how this would play with other concurrent - // apps. So this will take some thinking. But the basic idea is that - // core file to load is - - if (Array.isArray(type)) { - more = type; - type = null; - } - - if (type) { - type = type.toLowerCase().split(".")[0]; // package name only - - // return if type is already part of the set. - if (__coreSet.join("").indexOf(type) >= 0) - return; - - // create a concatenated lower-case name for a core file that - // includes - // all Java applets on the page - - __coreSet.push(type); - __coreSet.sort(); - J2S._coreFiles = [ path + "/core/core" + __coreSet.join("") - + ".z.js" ]; - } - if (more && (Array.isArray(more) || (more = more.split(" ")))) - for (var i = 0; i < more.length; i++) - if (more[i] && __coreMore.join("").indexOf(more[i]) < 0) - __coreMore.push(path + "/core/core" + more[i] + ".z.js") - for (var i = 0; i < __coreMore.length; i++) - J2S._coreFiles.push(__coreMore[i]); - } - - J2S._Canvas2D = function(id, Info, type, checkOnly) { - // type: Jmol or JSV or SwingJS - this._uniqueId = ("" + Math.random()).substring(3); - this._id = id; - this._is2D = true; - this._isJava = false; - this._isJNLP = !!Info.main; - if (typeof Info.isResizable == "undefined") - Info.isResizable = (("" + Info.width).indexOf("px")< 0); - this._jmolType = "J2S._Canvas2D (" + type + ")"; - this._isLayered = Info._isLayered || false; // JSV or SwingJS are - // layered - this._isSwing = Info._isSwing || false; - this._isApp = !!Info._main; - this._isJSV = Info._isJSV || false; - this._isAstex = Info._isAstex || false; - this._platform = Info._platform || ""; - this._spinnerImage = (!Info.spinnerImage || Info.spinnerImage == "NONE" || Info.spinnerImage == "none" ? null - : Info.spinnerImage.indexOf("//") < 0 && Info.spinnerImage.indexOf("/") != 0 ? Info.j2sPath + "/" + Info.spinnerImage - : Info.spinnerImage); - if (checkOnly) - return this; - J2S.setWindowVar(id, this); - if (!this._isApp) - this._createCanvas(id, Info); - if (!this._isJNLP && (!J2S._document || this._deferApplet)) - return this; - this._init(); - return this; - }; - - J2S._setAppletParams = function(availableParams, params, Info, isHashtable) { - for (var i in Info) { - var lci = i.toLowerCase(); - if (!availableParams - || availableParams.indexOf(";" + lci + ";") >= 0) { - if (Info[i] == null || lci == "language" - && !J2S.featureDetection.supportsLocalization()) - continue; - if (isHashtable) - params.put$O$O(i, (Info[i] === true ? Boolean.TRUE - : Info[i] === false ? Boolean.FALSE : Info[i])) - else - params[i] = Info[i]; - } - } - } - - // The original Jmol "applet" was created as an - // extension to a canvas. We still do that even - // though it doesn't make a lot of sense. Nonetheless, - // this canvas is used for the main canvas for - // a SwingJS applet. - J2S._jsSetPrototype = function(proto) { - proto._init = function() { - this._setupJS(); - this._showInfo(!this.__Info.console); - if (this._disableInitialConsole) - this._showInfo(false); - }; - - proto._createCanvas = function(id, Info) { - J2S._setObject(this, id, Info); - if (Info.main) // a Java application, not an applet -- let - // AppletViewer take care of this - return; - var t = J2S._getWrapper(this, true); - if (this._deferApplet) { - } else if (J2S._document) { - J2S._documentWrite(t); - this._newCanvas(false); - t = ""; - } else { - this._deferApplet = true; - t += ''; - } - t += J2S._getWrapper(this, false); - if (Info.addSelectionOptions) - t += J2S._getGrabberOptions(this); - if (J2S._debugAlert && !J2S._document) - alert(t); - this._code = J2S._documentWrite(t); - }; - - proto._newCanvas = function(doReplace) { - if (this._is2D) - this._createCanvas2d(doReplace); - else - this._GLmol.create(); - }; - - // ////// swingjs.api.HTML5Applet interface - proto._getHtml5Canvas = function() { - return this._canvas - }; - - proto._setAppClass = function(app) { this.getApp = function() {this._setThread();return app}}; - - proto._getWidth = function() { - return (this._canvas ? this._canvas.width : 0) - }; - proto._getHeight = function() { - return (this._canvas ? this._canvas.height : 0) - }; - proto._getContentLayer = function() { - return J2S.$(this, "contentLayer")[0] - }; - proto.repaintNow = function() { - J2S.repaint(this, false) - }; - // ////// - - proto._setThread = function() { swingjs.JSToolkit.getCurrentThread$javajs_util_JSThread(this._appletPanel.appletViewer.myThread)} - proto._createCanvas2d = function(doReplace) { - var container = J2S.$(this, "appletdiv"); - // if (doReplace) { - - if (this._canvas) { - try { - container[0].removeChild(this._canvas); - if (this._canvas.frontLayer) - container[0].removeChild(this._canvas.frontLayer); - if (this._canvas.rearLayer) - container[0].removeChild(this._canvas.rearLayer); - if (this._canvas.contentLayer) - container[0].removeChild(this._canvas.contentLayer); - J2S.unsetMouse(this._mouseInterface); - } catch (e) { - } - } - var w = Math.round(container.width()); - var h = Math.round(container.height()); - var canvas = document.createElement('canvas'); - canvas.applet = this; - this._canvas = canvas; - canvas.style.width = "100%"; - canvas.style.height = "100%"; - canvas.width = w; - canvas.height = h; // w and h used in setScreenDimension - canvas.id = this._id + "_canvas2d"; - container.append(canvas); - J2S._$(canvas.id).css({ - "z-index" : J2S.getZ(this, "main") - }); - if (this._isLayered) { - var content = document.createElement("div"); - canvas.contentLayer = content; - content.id = this._id + "_contentLayer"; - container.append(content); - J2S._$(content.id).css({ - zIndex : J2S.getZ(this, "content"), - position : "absolute", - left : "0px", - top : "0px", - width : (this._isSwing ? w : 0) + "px", - height : (this._isSwing ? h : 0) + "px", - overflow : "hidden" - }); - if (this._isSwing) { - this._mouseInterface = content; - content.applet = this; - } else { - this._mouseInterface = this._getLayer("front", container, - w, h, false); - } - } else { - this._mouseInterface = canvas; - } - J2S.setMouse(this._mouseInterface, this._isSwing); - } - - proto._getLayer = function(name, container, w, h, isOpaque) { - var c = document.createElement("canvas"); - this._canvas[name + "Layer"] = c; - c.style.width = "100%"; - c.style.height = "100%"; - c.id = this._id + "_" + name + "Layer"; - c.width = w; - c.height = h; // w and h used in setScreenDimension - container.append(c); - c.applet = this; - J2S._$(c.id).css({ - background : (isOpaque ? "rgb(0,0,0,1)" : "rgb(0,0,0,0.001)"), - "z-index" : J2S.getZ(this, name), - position : "absolute", - left : "0px", - top : "0px", - overflow : "hidden" - }); - return c; - } - - proto._setupJS = function() { - J2S.setGlobal("j2s.lib", { - base : this._j2sPath + "/", - alias : ".", - console : this._console, - monitorZIndex : J2S.getZ(this, "monitorZIndex") - }); - J2S.setGlobal("j2s.tmpdir", "/TEMP/"); - var isFirst = (__execStack.length == 0); - if (isFirst) - J2S._addExec([ this, __loadClazz, null, "loadClazz" ]); - this._addCoreFiles(); - J2S._addExec([ this, this.__startAppletJS, null, "start applet" ]) - this._isSigned = true; // access all files via URL hook - this._ready = false; - this._applet = null; - this._canScript = function(script) { - return true; - }; - this._savedOrientations = []; - __execTimer && clearTimeout(__execTimer); - __execTimer = setTimeout(__nextExecution, __execDelayMS); - }; - - proto.__startAppletJS = function(applet) { - if (J2S._version.indexOf("$Date: ") == 0) - J2S._version = (J2S._version.substring(7) + " -").split(" -")[0] - + " (J2S)"; - if (!Clazz._4Name("java.lang.Class", null, null, true, false, true)) { - if (J2S._isFile) { - J2S.cantLoadLocalFiles(); - return; - } - alert("There was an unknown problem loading java.lang.Class."); - } - J2S._registerApplet(applet._id, applet); - if (J2S._appArgs || applet.__Info.args == "?") { - applet.__Info.args = (J2S._appArgs ? decodeURIComponent(J2S._appArgs).split("|") : []); - } - J2S._lang && (applet.__Info.language = J2S._lang); - var isApp = applet._isApp = !!applet.__Info.main; - try { - var codePath = applet._j2sPath + "/"; - if (codePath.indexOf("://") < 0) { - var base = document.location.href.split("#")[0] - .split("?")[0].split("/"); - if (codePath.indexOf("/") == 0) - base = [ base[0], codePath.substring(1) ]; - else - base[base.length - 1] = codePath; - codePath = base.join("/"); - } - applet._j2sFullPath = codePath.substring(0, codePath.length - 1); - var clazz = (applet.__Info.main || applet.__Info.code); - try { - if (clazz.indexOf(".") < 0) { - clazz = "_." + clazz; - if (isApp) - applet.__Info.main = clazz; - else - applet.__Info.code = clazz; - } - - var cl = Clazz.loadClass(clazz); - //cl.$static$ && cl.$static$(); - if (clazz.indexOf("_.") == 0) - J2S.setWindowVar(clazz.substring(2), cl); - applet.__Info.headless = (J2S._headless || isApp && (cl.$j2sHeadless || cl.j2sHeadless - || cl.superclazz && cl.superclazz.j2sHeadless)); - if (applet.__Info.headless) { - Clazz._isHeadless = "true"; - System.out.println("j2sApplet running headlessly"); - } - } catch (e) { - alert("Java class " + clazz + " was not found."); - return; - } - if (applet.__Info.code) - codePath += applet.__Info.code.replace(/\./g, "/"); - codePath = codePath.substring(0, - codePath.lastIndexOf("/") + 1); - if (isApp && applet.__Info.headless) { - applet._codePath = codePath; - Clazz.loadClass("java.lang.Thread").currentThread$().group.html5Applet = applet; - cl.main$SA(applet.__Info.args || []); - System.exit$(0); - } else { - - var viewerOptions = Clazz.new_("java.util.Hashtable"); - viewerOptions.put = viewerOptions.put$O$O; - J2S._setAppletParams(applet._availableParams, - viewerOptions, applet.__Info, true); - viewerOptions.put("name", applet._id);// + "_object"); - viewerOptions.put("syncId", J2S._syncId); - viewerOptions.put("fullName", applet._id + "__" + J2S._syncId + "__"); - if (J2S._isAsync) - viewerOptions.put("async", true); - if (applet._startupScript) - viewerOptions.put("script", applet._startupScript) - viewerOptions.put("platform", applet._platform); - viewerOptions.put("documentBase", document.location.href); - viewerOptions.put("codePath", codePath); - viewerOptions.put("appletReadyCallback", - "J2S.readyCallback"); - viewerOptions.put("applet", true); - if (applet._color) - viewerOptions.put("bgcolor", applet._color); - if (J2S._syncedApplets.length) - viewerOptions - .put("synccallback", "J2S._mySyncCallback"); - viewerOptions.put("signedApplet", "true"); - if (applet._is2D && !isApp) - viewerOptions.put("display", applet._id + "_canvas2d"); - var w = applet.__Info.width; - var h = applet.__Info.height; - if (w > 0 && h > 0 && (!applet._canvas || w != applet._canvas.width - || h != applet._canvas.height)) { - // developer has used static { J2S.thisApplet.__Info.width=...} - J2S.$(applet, "appletinfotablediv").width(w).height(h); - applet._newCanvas(true); - } - applet._newApplet(viewerOptions); - } - } catch (e) { - System.out.println((J2S._isAsync ? "normal async abort from " - : "") - + e + (e.stack ? "\n" + e.stack : "")); - return; - } - - //applet._jsSetScreenDimensions(); - __nextExecution(); - }; - - proto.__startAppletJS.j2sname = "__START_APPLET__"; - - if (!proto._restoreState) - proto._restoreState = function(clazzName, state) { - // applet-dependent - } - - proto._jsSetScreenDimensions = function() { - if (!this._appletPanel) - return - // strangely, if CTRL+/CTRL- are used repeatedly, then the - // applet div can be not the same size as the canvas if there - // is a border in place. - var d = J2S._getElement(this, (this._is2D ? "canvas2d" : "canvas")); - this._appletPanel.setScreenDimension$I$I(d.width, d.height); - }; - - proto._show = function(tf) { - J2S.$setVisible(J2S.$(this, "appletdiv"), tf); - if (tf && !this._isSwing) // SwingJS applets will handle their own - // repainting - J2S.repaint(this, true); - }; - - proto._canScript = function(script) { - return true - }; - - proto._processGesture = function(touches, frameViewer) { - (frameViewer || this._appletPanel) - .processTwoPointGesture$FAAA(touches); - } - - proto._processEvent = function(type, xym, ev, frameViewer) { - // xym is [x,y,modifiers,wheelScroll] - // also processes key events - (frameViewer || this._appletPanel).processMouseEvent$I$I$I$I$J$O$I( - type, xym[0], xym[1], xym[2], System.currentTimeMillis$(), - ev, xym[3]); - } - - proto._resize = function() { - var s = "__resizeTimeout_" + this._id; - // only at end - if (J2S[s]) - clearTimeout(J2S[s]); - var me = this; - J2S[s] = setTimeout(function() { - J2S.repaint(me, true); - J2S[s] = null - }, 100); - } - - return proto; - }; - - J2S.repaint = function(applet, asNewThread) { - // JmolObjectInterface - // asNewThread: true is from RepaintManager.repaintNow() - // false is from Repaintmanager.requestRepaintAndWait() - // called from apiPlatform Display.repaint() - - // alert("repaint " + Clazz._getStackTrace()) - if (!applet || !applet._appletPanel) - return; - - // asNewThread = false; - var container = J2S.$(applet, "appletdiv"); - var w = Math.round(container.width()); - var h = Math.round(container.height()); - if (applet._is2D && !applet._isApp - && (applet._canvas.width != w || applet._canvas.height != h)) { - applet._newCanvas(true); - applet._appletPanel - .setDisplay$swingjs_api_js_HTML5Canvas(applet._canvas); - } - applet._appletPanel.setScreenDimension$I$I(w, h); - var f = function() { -// if (applet._appletPanel.top) { -// System.out.println("j2sApplet invalidate"); -// applet._appletPanel.top.invalidate$(); -// System.out.println("j2sApplet repaint"); -// applet._appletPanel.top.repaint$(); -// } - }; - //if (asNewThread) { - //self.setTimeout(f,20); // requestAnimationFrame - //} else { - f(); - //} - } - - /** - * loadImage is called for asynchronous image loading. If bytes are not - * null, they are from a ZIP file. They are processed sychronously here - * using an image data URI. Can all browsers handle MB of data in data URI? - * - */ - J2S.loadImage = function(platform, echoName, path, bytes, fOnload, image) { - // JmolObjectInterface - var id = "echo_" + echoName + path + (bytes ? "_" + bytes.length : ""); - var canvas = J2S.getHiddenCanvas(platform.vwr.html5Applet, id, 0, 0, - false, true); - if (canvas == null) { - if (image == null) { - image = new Image(); - if (bytes == null) { - image.onload = function() { - J2S.loadImage(platform, echoName, path, null, fOnload, - image) - }; - image.src = path; - return null; - } else { - System.out - .println("j2sApplet J2S.loadImage using data URI for " - + id) - } - image.src = (typeof bytes == "string" ? bytes : "data:" - + Clazz.loadClass("javajs.util.Rdr") - .guessMimeTypeForBytes$BA(bytes) + ";base64," - + Clazz.loadClass("javajs.util.Base64").getBase64$BA(bytes)); - } - var width = image.width; - var height = image.height; - if (echoName == "webgl") { - // will be antialiased - width /= 2; - height /= 2; - } - canvas = J2S.getHiddenCanvas(platform.vwr.html5Applet, id, width, - height, true, false); - canvas.imageWidth = width; - canvas.imageHeight = height; - canvas.id = id; - canvas.image = image; - J2S.setCanvasImage(canvas, width, height); - // return a null canvas and the error in path if there is a problem - } else { - System.out.println("j2sApplet J2S.loadImage reading cached image for " + id) - } - return (bytes == null ? fOnload(canvas, path) : canvas); - }; - - J2S._canvasCache = {}; - - J2S.getHiddenCanvas = function(applet, id, width, height, forceNew, - checkOnly) { - id = applet._id + "_" + id; - var d = J2S._canvasCache[id]; - if (checkOnly) - return d; - if (forceNew || !d || d.width != width || d.height != height) { - d = document.createElement('canvas'); - // for some reason both these need to be set, or maybe just d.width? - d.width = d.style.width = width; - d.height = d.style.height = height; - d.id = id; - J2S._canvasCache[id] = d; - } - - return d; - } - - J2S.setCanvasImage = function(canvas, width, height) { - // called from org.J2S.awtjs2d.Platform - canvas.buf32 = null; - canvas.width = width; - canvas.height = height; - canvas.getContext("2d").drawImage(canvas.image, 0, 0, - canvas.image.width, canvas.image.height, 0, 0, width, height); - }; - - J2S.applyFunc = function(f, a) { - // J2SObjectInterface - return f(a); - } - - J2S.setDraggable = function(tag, targetOrArray) { - - // draggable tag object; target is itself - - // J2S.setDraggable(tag) - // J2S.setDraggable(tag, true) - - // draggable tag object that controls another target, - // either given as a DOM element or jQuery selector or function - // returning such - - // J2S.setDraggable(tag, target) - // J2S.setDraggable(tag, fTarget) - - // draggable tag object simply loade=s/reports mouse position as - // fDown({x:x,y:y,dx:dx,dy:dy,ev:ev}) should fill x and y with starting - // points - // fDrag(xy) and fUp(xy) will get {x:x,y:y,dx:dx,dy:dy,ev:ev} to use as - // desired - - // J2S.setDraggable(tag, [fAll]) - // J2S.setDraggable(tag, [fDown, fDrag, fUp]) - - // unbind tag - - // J2S.setDraggable(tag, false) - - // draggable frames by their titles. - // activation of dragging with a mouse down action - // deactivates all other mouse operation in SwingJS - // until the mouse is released. - // uses jQuery outside events - v1.1 - 3/16/2010 (see j2sJQueryExt.js) - - // J2S.setDraggable(titlebar, fGetFrameParent), for example, is issued - // in swingjs.plaf.JSFrameUI.js - - var drag, up; - - var dragBind = function(isBind) { - - $tag.unbind('mousemoveoutjsmol'); - $tag.unbind('touchmoveoutjsmol'); - $tag.unbind('mouseupoutjsmol'); - $tag.unbind('touchendoutjsmol'); - J2S._dmouseOwner = null; - tag.isDragging = false; - tag._isDragger = false; - if (isBind) { - $tag.bind('mousemoveoutjsmol touchmoveoutjsmol', function(ev) { - drag && drag(ev); - }); - $tag.bind('mouseupoutjsmol touchendoutjsmol', function(ev) { - up && up(ev); - }); - } - }; - - var $tag = $(tag); - tag = $tag[0]; - if (!tag || tag._isDragger) - return; - - var target, fDown, fDrag, fUp; - if (targetOrArray === false) { - dragBind(tag, false); - return; - } - if (targetOrArray instanceof Array) { - // J2S.setDraggable(tag, [fAll]) - // J2S.setDraggable(tag, [fDown, fDrag, fUp]) - fDown = targetOrArray[0]; - fDrag = targetOrArray[1] || fDown; - fUp = targetOrArray[2] || fDown; - } else { - // J2S.setDraggable(tag) - // J2S.setDraggable(tag, true) - // J2S.setDraggable(tag, target) - // J2S.setDraggable(tag, fTarget) - target = (targetOrArray !== true && targetOrArray || tag); - // allow for a function to return the target - // this allows the target to be created after the call to - // J2S.setDraggable() - if (!(typeof target == "function")) { - var t = target; - target = function() { - return $(t).parent() - } - } - } - - tag._isDragger = true; - - var x, y, dx, dy, pageX0, pageY0, pageX, pageY; - - var down = function(ev) { - J2S._dmouseOwner = tag; - J2S._dmouseDrag = drag; - - tag.isDragging = true; // used by J2S mouse event business - pageX = Math.round(ev.pageX); - pageY = Math.round(ev.pageY); - var xy = { - x : 0, - y : 0, - dx : 0, - dy : 0, - ev : ev - }; - if (fDown) { - fDown(xy, 501); - } else if (target) { - var o = $(target(501)).position(); - if (!o) return false; - xy = { - x : Math.round(o.left), - y : Math.round(o.top) - }; - } - pageX0 = xy.x; - pageY0 = xy.y; - return false; - }, drag = function(ev) { - // we will move the frame's parent node and take the frame along - // with it - var ev0 = ev.ev0 || ev; - if (ev0.buttons == 0 && ev0.button == 0) - tag.isDragging = false; - var mode = (tag.isDragging ? 506 : 503); - if (!J2S._dmouseOwner || tag.isDragging && J2S._dmouseOwner == tag) { - x = pageX0 + (dx = Math.round(ev.pageX) - pageX); - y = pageY0 + (dy = Math.round(ev.pageY) - pageY); - if (isNaN(x))return; - if (fDrag) { - fDrag({ - x : x, - y : y, - dx : dx, - dy : dy, - ev : ev - }, mode); - } else if (target) { - var frame = target(mode, x, y); - if (frame) - $(frame).css({ top : y + 'px', left : x + 'px'}) - } - } - }, up = function(ev) { - J2S._dmouseDrag = null; - if (J2S._dmouseOwner == tag) { - tag.isDragging = false; - J2S._dmouseOwner = null - if (isNaN(x))return; - fUp && fUp({ - x : x, - y : y, - dx : dx, - dy : dy, - ev : ev - }, 502); - return false; - } else { -// if (ev.ev0) -// setTimeout(function(){document.body.dispatchEvent(ev.ev0.originalEvent)},50) - } - }; - - var fixTouch = function(ev) { - if (ev.originalEvent.targetTouches) { - ev.pageX = Math.round(ev.originalEvent.targetTouches[0].pageX); - ev.pageY = Math.round(ev.originalEvent.targetTouches[0].pageY); - } - return ev; - } - - $tag.bind('mousedown touchstart', function(ev) { - return down && down(fixTouch(ev)); - }); - - $tag.bind('mousemove touchmove', function(ev) { - return drag && drag(fixTouch(ev)); - }); - - $tag.bind('mouseup touchend', function(ev) { - // touchend does not express a position, and we don't use it anyway - return up && up(ev); - }); - - dragBind(true); - - } - - J2S.setWindowZIndex = function(node, z) { - // on frame show or mouse-down, create a stack of frames and sort by - // z-order - if (!node || !node.ui || node.ui.embeddedNode) - return - var app = node.ui.jc.appContext.threadGroup.name + "_"; - var a = []; - var zmin = 1e10 - var zmax = -1e10 - var $windows = $("body > div > .swingjs-window").not("body > .swingjs-tooltip :first-child"); - var found = false; - $windows.each(function(c, b) { - if (b == node) - found = true; - if (b.id.indexOf(app) == 0) - a.push([ (b == node ? z : +b.style.zIndex), b ]); - }); - a.sort(function(a, b) { - return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0 - }) - var zbase = z = J2S._z.rear + 2000; - var modalZ = 1e10; - for (var i = 0, i1 = a.length; i < i1; i++) { - var n = a[i][1]; - if (n == node) - z = zbase; - if (!n.ui || !n.ui.embeddingNode) { - n.style.zIndex = zbase; - if (n.ui && n.ui.outerNode && !n.ui.embeddingNode) { - n.ui.outerNode.style.zIndex = zbase; - if (n.ui.jc.isVisible$() && n.ui.modalNode) { - if (zbase < modalZ) - modalZ = zbase; - n.ui.modalNode.style.zIndex = zbase - 1; - } - } - } - zbase += 1000; - } - if (!found) - z += 1000; - node.style.position = "absolute"; - if (!node.ui.jc.modal && modalZ < 1e10 && z > modalZ) { - z = modalZ - 500; - } - node.ui.outerNode && (node.ui.outerNode.style.zIndex = z); - return z; - } - - J2S.say = function(msg) { - alert(msg); - } - - J2S.Swing = { - // a static class for menus and other resources - count : 0, - menuInitialized : 0, - menuCounter : 0 - }; - - J2S.getSwing = function() { - return J2S.Swing - } - - J2S.showInfo = function(applet, tf) { - applet._showInfo(tf); - } - - J2S.Loaded = {}; - - J2S.isResourceLoaded = function(resource, done) { - path = J2S.getResourcePath(resource, true); - var r = J2S.Loaded[resource]; - if (done) - J2S.Loaded[resource] = 1; - return r; - } - - J2S.getResourcePath = function(path, isJavaPath) { - if (!path || path.indexOf("https:/") != 0 - && path.indexOf("https:/") != 0 && path.indexOf("file:/") != 0) { - Clazz.loadClass("swingjs.JSUtil"); - var applet = swingjs.JSUtil.getApplet$(); - path = (!isJavaPath && applet.__Info.resourcePath || applet.__Info.j2sPath) - + "/" + (path || ""); - } - return path; - } - - J2S._newGrayScaleImage = function(context, image, width, height, grayBuffer) { - var c; - image || (image = Jmol.$(context.canvas.applet, "image")[0]); - if (image == null) { - var appId = context.canvas.applet._id; - var id = appId + "_imagediv"; - c = document.createElement("canvas"); - c.id = id; - c.style.width = width + "px"; - c.style.height = height + "px"; - c.width = width; - c.height = height; - - var layer = document.getElementById(appId + "_contentLayer"); - image = new Image(); - image.canvas = c; - image.appId = appId; - image.id = appId + "_image"; - image.layer = layer; - image.w = width; - image.h = height; - image.onload = function(e) { - try { - URL.revokeObjectURL(image.src); - } catch (e) {} - }; - var div = document.createElement("div"); - image.div = div; - div.style.position="absolute"; - layer.appendChild(div); - div.appendChild(image); - } - c = image.canvas.getContext("2d"); - var imageData = c.getImageData(0, 0, width, height); - var buf = imageData.data; - var ng = grayBuffer.length; - var pt = 0; - for (var i = 0; i < ng; i++) { - buf[pt++] = buf[pt++] = buf[pt++] = grayBuffer[i]; - buf[pt++] = 0xFF; - } - c.putImageData(imageData, 0, 0); - image.canvas.toBlob(function(blob){image.src = URL.createObjectURL(blob)}); - return image; - } - - J2S.getCaller = function() { return arguments.callee.caller.caller} - -})(self.J2S, self.jQuery, window, document); -// j2sClazz.js -// NOTE: updates to this file should be copied to j2sjmol.js - -// latest author: Bob Hanson, St. Olaf College, hansonr@stolaf.edu - -// NOTES by Bob Hanson - -// Google closure compiler cannot handle Clazz.new or Clazz.super - -// BH 2023.04.30 fixes issues when Info.console == window.console -// BH 2023.03.01 upgrade for Java11 String, including String.isBlank() and CharSequence.lines(String) (in Java11 this is StringRoman1.lines(byte[]) -// BH 2023.02.12 upgrade for (asynchronous?) packaging -// BH 2023.01.22 fix for Double.doubleToRawLongBits missing and Float.floatToIntBits failing on NaN -// BH 2023.01.15 fix for int[2][3][] not initializing properly -// BH 2022.12.03 fix for Double.isInfinite should not be true for NaN -// BH 2022.12.03 fix for Double.parseDouble("") and new Double(NaN) should be NaN, not 0 -// BH 2022.09.20 fix for Class.forName not loading static inner classes directly -// BH 2022.09.20 fix for default toString for classes using "." name not "$" name for inner classes -// BH 2022.09.15 fix for new Error() failing; just letting java.lang.Error subclass Throwable -// BH 2022.09.08 Fix new Test_Inner().getClass().getMethod("testDollar", new Class[] {Test_Abstract_a.class}).getName() -// BH 2022.04.19 TypeError and ResourceError gain printStackTrace$() methods -// BH 2022.03.19 String.valueOf(Double) does not add ".0" -// BH 2022.01.17 fixes interface default method referencing own static fields -// BH 2021.12.19 adds Double -0; fixes println(Double) -// BH 2021.12.15 default encoding for String.getBytes() should be utf-8. -// BH 2021.08.16 fix for Interface initializing its subclass with static initialization -// BH 2021.07.28 String.instantialize upgraded to use TextDecoder() if possible (not in MSIE) -// BH 2021.07.20 Date.toString() format yyyy moved to end, as in Java -// BH 2021.06.11 Number.compareTo(....) missing -// BH 2021.02.12 implements better(?) interface defaults resolution -- in order of presentation - -// see earlier notes at net.sf.j2s.java.core.srcjs/js/devnotes.txt - -//window["j2s.object.native"] = true; // this is not an option - -/****************************************************************************** - * Copyright (c) 2007 java2script.org and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Zhou Renjian - initial API and implementation - *****************************************************************************/ -/******************************************************************************* - * @author zhou renjian - * @create Nov 5, 2005 - ******************************************************************************/ - - -// encapsulating function - -;(function(J2S, window, document) { - - if (J2S.clazzLoaded) return; - J2S.clazzLoaded = true; - - // at least for now: - - var setWindowValue = function(a, v) { window[a] = v; } - -J2S.LoadClazz = function(Clazz) { - -Clazz.setTVer = function(ver) { // from class loading - if (Clazz._VERSION_T.split('-')[0] != ver.split('-')[0]) - System.err.println("transpiler was " + Clazz._VERSION_T + " now " + ver + " for " + lastLoaded); - Clazz._VERSION_T = ver; -} - -var lastLoaded; -var consoleDiv = J2S.getGlobal("j2s.lib").console; - -Clazz.setConsoleDiv = function(d) { - J2S.getGlobal("j2s.lib").console = consoleDiv = d; - }; - -Clazz.ClassFilesLoaded = []; - -Clazz.popup = Clazz.log = Clazz.error = window.alert; - -/* can be set by page JavaScript */ -Clazz.defaultAssertionStatus = false; - -/* can be set by page JavaScript */ -Clazz._assertFunction = null; - - -// ////// 16 methods called from code created by the transpiler //////// - -var getArrayClass = function(name){ - // "[C" "[[C" - var n = 0; - while (name.charAt(n) == "[") n++; - var type = name.substring(n); - if (type == "S") - type = "H"; // [S is short[] in Java - var clazz = (type.length == 1 ? primTypes[type].TYPE : Clazz._4Name(type.split(";")[0].substring(1),null,null,true)); - return Clazz.array(clazz,-n); -} - -Clazz.array = function(baseClass, paramType, ndims, params, isClone) { - - if (arguments.length == 2 && paramType < 0) - return arrayClass(baseClass, -paramType); - - var t0 = (_profileNew ? window.performance.now() : 0); - - var ret = _array.apply(null, arguments); - - _profileNew && addProfileNew(baseClass == -1 ? paramType.__BASECLASS : baseClass, -1); - - return ret; -} - -var _array = function(baseClass, paramType, ndims, params, isClone) { - - // Object x = Array.newInstance(componentClass, nElements); - // var x=Clazz.array((Clazz.array(componentClass, 3); - - - // int[][].class Clazz.array(Integer.TYPE, -2) - // new int[] {3, 4, 5} Clazz.array(Integer.TYPE, -1, [3, 4, 5]) - // new int[][]{new int[] {3, 4, 5}, {new int[] {3, 4, 5}} - // Clazz.array(Integer.TYPE, -2, Clazz.array(Integer.TYPE, -1, [3, 4, 5]), - // Clazz.array(Integer.TYPE, -1, [3, 4, 5]) ) - // new int[3] Clazz.array(Integer.TYPE, [3]) - // new int[3][3] Clazz.array(Integer.TYPE, [3, 3]) - // new int[3][] Clazz.array(Integer.TYPE, [3, null]) - // new char[3] Clazz.array(Character.TYPE, [3]) - // new String[3] Clazz.array(java.lang.String, [3]) - - if (arguments[0] === -1) { - // four-parameter option from JU.AU.arrayCopyObject; - // truncate array using slice - // Clazz.array(-1, array, ifirst, ilast+1) - var a = arguments[1]; - var b = a.slice(arguments[2], arguments[3]); - return copyArrayProps(a, b); - } - if (arguments.length == 2 && baseClass.BYTES_PER_ELEMENT) { - // Clazz.array(rawInt8Array, int[] array) - // direct transfer of __* metadata (see java.nio.ByteBuffer) - return copyArrayProps(paramType, baseClass); - } - var prim = Clazz._getParamCode(baseClass); - var dofill = true; - if (arguments.length < 4) { - // one-parameter option just for convenience, same as array(String, 0) - // two-parameter options for standard new foo[n], - // Array.newInstance(class, length), and - // Array.newInstance(class, [dim1, dim2, dim3....]) - // three-parameter option for (Integer.TYPE, -1, [3, 4, 5]) - var cl = arguments[0]; - var baseClass = cl.__BASECLASS || cl; - var haveDims = (typeof arguments[1] == "number"); - var vals = arguments[haveDims ? 2 : 1]; - var ndims = (arguments.length == 1 ? 0 : !haveDims ? vals.length : arguments[1] || 0); - if (ndims < 0 && arguments.length == 2) { - return arrayClass(baseClass, -ndims); - } - if (ndims == 0) { - ndims = -1; - vals = []; - } - if (haveDims && ndims >= -1) { - if (ndims == -1) { - // new int[] {3, 4, 5}; - return _array(baseClass, prim + "A", -1, vals); - } - // Array.newInstance(int[][].class, 3); - - - var nElem = ndims; - cl = baseClass; - - ndims = 0; - while ((cl = cl.getComponentType$()) != null) { - baseClass = cl; - ndims++; - } - if (ndims > 0) { - a = new Array(nElem); - setArray(a, baseClass, prim + "A", ndims + 1); - for (var i = nElem; --i >= 0;) - a[i] = null; - } else { - a = _array(baseClass, prim + "A", ndims + 1, [nElem]); - } - return a; - } - params = vals; - paramType = prim; - - for (var i = Math.abs(ndims); --i >= 0;) { - paramType += "A"; - if (!haveDims && params[i] === null) { - params.length--; - dofill = false; - } - } - if (haveDims) { - // new int[][] { {0, 1, 2}, {3, 4, 5} , {3, 4, 5} , {3, 4, 5} }; - return setArray(vals, baseClass, paramType, -ndims); - } - } - if (ndims < 0) { - params = [-1, params]; - } else { - var initValue = null; - if (ndims >= 1 && dofill) { - initValue = _initVal(prim); - } - var p = params; // an Int32Array - var n = p.length; - params = new Array(n + 1); - for (var i = 0; i < n; i++) - params[i] = p[i]; - params[n] = initValue; - } - params.push(paramType); - var nbits = 0; - if (ndims != 0 && !(isClone && Array.isArray(params[1]))) { - switch (prim) { - case "B": - nbits = 8; - break; - case "H": - nbits = 16; - break; - case "I": - nbits = 32; - break; - case "F": - case "D": - case "J": - nbits = 64; - break; - } - } - return newTypedA(baseClass, params, nbits, (dofill ? ndims : -ndims), isClone); -} - -var _initVal = function(p) { - switch (p) { - case "J": - case "B": - case "H": // short - case "I": - case "F": - case "D": - return 0; - case "C": - return '\0'; - case "Z": - return false; - default: - return null; - } -} - -Clazz.assert = function(clazz, obj, tf, msg) { - if (!clazz.$_ASSERT_ENABLED_)return; - var ok = true; - try { - ok = tf.apply(obj) - if (!ok) - msg && (msg = msg.apply(obj)); - } catch (e) { - ok = false; - } - if (!ok) { - doDebugger(); - if (Clazz._assertFunction) { - return Clazz._assertFunction(clazz, obj, msg || Clazz._getStackTrace()); - } - Clazz.load("AssertionError"); - if (msg == null) - throw Clazz.new_(AssertionError.c$); - else - throw Clazz.new_(AssertionError.c$$S, [msg]); - } -} - -Clazz.clone = function(me) { - // BH allows @j2sNative access without super constructor -if (me.__ARRAYTYPE) { - return appendMap(Clazz.array(me.__BASECLASS, me.__ARRAYTYPE, -1, me, true), me); -} - me = appendMap(new me.constructor(inheritArgs), me); - me.__JSID__ = ++_jsid; - return me; -} - -/** - * sgurin Implements Java's keyword "instanceof" in JavaScript's way **for - * exception objects**. - * - * calls Clazz.instanceOf if e is a Java exception. If not, try to detect known - * native exceptions, like native NullPointerExceptions and wrap it into a Java - * exception and call Clazz.instanceOf again. if the native exception can't be - * wrapped, false is returned. - * - * @param obj - * the object to be tested - * @param clazz - * the class to be checked - * @return whether the object is an instance of the class - * @author: sgurin - */ -Clazz.exceptionOf = function(e, clazz) { - if (typeof clazz == "string") - clazz = Clazz.load(clazz); - if(e.__CLASS_NAME__) - return Clazz.instanceOf(e, clazz); - if (!e.getMessage) { - e.getMessage = function() {return "" + e}; - } - if (!e.printStackTrace$) { - e.printStackTrace$ = function(){System.err.println$S(e + "\n" + this.stack)}; - e.printStackTrace$java_io_PrintStream = function(stream){ - stream.println$S(e + "\n" + e.stack); - }; - // alert(e + " try/catch path:" + Clazz._getStackTrace(-10)); - } - if(clazz == Error) { - if (("" + e).indexOf("Error") < 0) - return false; - System.err.println$O(Clazz._getStackTrace()); - return true; - // everything here is a Java Exception, not a Java Error - } - return (clazz == Exception || clazz == Throwable - || clazz == NullPointerException && _isNPEExceptionPredicate(e)); -}; - -Clazz.forName = function(name, initialize, loader, isQuiet) { - // we need to consider loading a class from the path of the calling class. - var cl = null; - (typeof initialize == "undefined") && (initialize = true); - if (loader) { - try { - isQuiet = true; - var className = loader.baseClass.getName$(); // set in - // java.lang.Class.getClassLoader$() - var i = className.lastIndexOf("."); - var name1 = className.substring(0, i + 1); - name1 = (name.indexOf(name1) == 0 ? name : name1 + name); - cl = Clazz._4Name(name1, null, null, false, initialize, true); - } catch (e) {} - } - return cl || Clazz._4Name(name, null, null, false, initialize, isQuiet); -} - -Clazz._setDeclared = function(name, func) { - (name.indexOf(".") < 0) && (name = "java.lang." + name); - Clazz.allClasses[name] = func; -} - -Clazz._getDeclared = function(name) { - (name.indexOf(".") < 0) && (name = "java.lang." + name); - return Clazz.allClasses[name] -} - -Clazz._isClassDefined = function(clazzName) { - if (!clazzName) - return false; /* consider null or empty name as non-defined class */ - if (Clazz.allClasses[clazzName]) - return true; - var pkgFrags = clazzName.split (/\./); - var pkg = null; - for (var i = 0; i < pkgFrags.length; i++) - if (!(pkg = (pkg ? pkg[pkgFrags[i]] : Clazz._allPackage[pkgFrags[0]]))) { - return false; - } - return (pkg && (Clazz.allClasses[clazzName] = pkg)); -}; - - -Clazz.getClass = function(cl, methodList) { - // $Class$ is the java.lang.Class object wrapper - // $clazz$ is the unwrapped JavaScript object - cl = getClazz(cl) || cl; - if (cl.$Class$) - return cl.$Class$; - java.lang.Class || Clazz.load("java.lang.Class"); - var Class_ = cl.$Class$ = new java.lang.Class(); - Class_.$clazz$ = cl; // for arrays - a bit of a hack - Class_.$methodList$ = methodList; - return Class_; -} - - -/** - * Implements Java's keyword "instanceof" in JavaScript's way. Also alows for - * obj to be a class itself - * - * @param obj - * the object to be tested - * @param clazz - * the class to be checked - * @return whether the object is an instance of the class - */ -/* public */ -Clazz.instanceOf = function (obj, clazz) { - if (obj == null) - return false; - // allows obj to be a class already, from arrayX.getClass().isInstance(y) - // unwrap java.lang.Class to JavaScript clazz using $clazz$ - if (typeof clazz == "string") { - clazz = Clazz._getDeclared(clazz); - } - if (!clazz) - return false; - if (obj == clazz) - return true; - // check for object being a java.lang.Class and the other not - if (obj.$clazz$ && !clazz.$clazz$) return (clazz == java.lang.Class); - obj.$clazz$ && (obj = obj.$clazz$); - if (clazz == String) - return typeof obj == "string"; - clazz.$clazz$ && (clazz = clazz.$clazz$); - if (obj == clazz) - return true; - if (obj.__ARRAYTYPE || clazz.__ARRAYTYPE) { - if (obj.__ARRAYTYPE == clazz.__ARRAYTYPE) - return true; - if (clazz.__BASECLASS == Clazz._O) { - return (!obj.__ARRAYTYPE ? Array.isArray(obj) && clazz.__NDIM == 1 - : obj.__NDIM >= clazz.__NDIM && !obj.__BASECLASS.__PRIMITIVE); - } - return obj.__ARRAYTYPE && clazz.__ARRAYTYPE && obj.__NDIM == clazz.__NDIM - && isInstanceOf(obj.__BASECLASS, clazz.__BASECLASS); - } - return (obj instanceof clazz || isInstanceOf(getClassName(obj, true), clazz, true)); -}; - -var initStatic = function(cl, impls) { - if (impls) { - for (var i = 0; i < impls.length; i++) { - initStatic(impls[i], impls[i].implementz); - } - } else if (cl.superclazz) { - initStatic(cl.superclazz); - } - cl.$static$ && (initStatics(cl), cl.$static$()); -} - -/** - * Load a class by name or an array representing a nested list of inner classes. - * Just finalize this class if from $clinit$. - */ -Clazz.load = function(cName, from$clinit$) { - if (!cName) - return null; - var cl = cName; - switch (from$clinit$ || 0) { - case 1: - // C$.$clinit$ call to finalize all dependencies - cl.$clinit$ = 0-cl.$clinit$; - // -2 means v 3.2.6 - // -1 means v 3.2.5 - // NaN means original 3.2.4 function() {Clazz.load(C$, 1)}; - var ld = cl.$load$; - setSuperclass(cl, (ld && ld[0] ? Clazz.load(ld[0]) : null)); - ld[1] && addInterface(cl, ld[1]); - switch (cl.$clinit$) { - case -1: - // done - break; - case -2: - initClass0(cl); - break; - } - return; - case 2: - // C$.$static$ to do static initialization - if (cl.$load$) { - if (cl.$load$[0] && !cl.superclazz) { - // can happen with Clazz.new_($I(n,1)....) - setSuperclass(cl, Clazz.load(cl.$load$[0])); - } - cl.$load$ = 0; - initStatic(cl, cl.$isInterface ? cl.implementz : 0); - } - return; - } - // allow for nested calling: ["foo",".foo_inner1",".foo_inner2"] - if (cName instanceof Array) { - var cl1 = null; - var name; - for (var i = 0; i < cName.length; i++) { - var cn = cName[i]; - cl1 = Clazz.load(name = (cn.indexOf(".") == 0 ? name + cn : cn)); - } - return cl1; - } - // allow for a clazz itself - if (cl.__CLASS_NAME__) - return Clazz._initClass(cl,1,1,0); - // standard load of class by name - if (cName.indexOf("Thread.") == 0) - Clazz._4Name("java.lang.Thread", null, null, true) - if (cName.indexOf("Thread") == 0) - cName = "java.lang." + cName; - return Clazz._4Name(cName, null, null, true); -} - -// create and $init0$ -var initClass0 = function(c) { - var fields = c.$fields$; - var objects = fields && fields[0]; - createDefaults(c, objects, false); - fields && initStatics(c); -} - -var initStatics = function(c) { - var statics = c.$fields$ && c.$fields$[1]; - if (statics && statics.length) - createDefaults(c, statics, true); -} - -// C$.$fields$=[ -// ['I',['test3','itype'],'S',['test1'],'O',['test2','java.util.List[]','test4','test.Test_','+test5']], -// ['D',['d'],'F',['f'],'I',['itest1','itest2'],'S',['stest1']] -// ] -var createDefaults = function(c, data, isStatic) { - var a = getFields(c, data, true); - if (isStatic) { - for (var i = a.length; --i >= 0;) { - var j = a[i][0]; - if (c[j] != undefined) - return; - c[j] = a[i][1]; - } - return; - } - c.$init0$ = function(){ - var cs = c.superclazz; - cs && cs.$init0$ && cs.$init0$.apply(this); - for (var i = a.length; --i >= 0;){ - this[a[i][0]] = a[i][1]; - } - }; - -} - -Clazz._getFieldNames = function(c, isStatic) { - return (c.$fields$ ? getFields(c, c.$fields$[isStatic ? 1 : 0], 0) : []); -} - -Clazz._getFieldTypes = function(c, isStatic) { - return (c.$fields$ ? getFields(c, c.$fields$[isStatic ? 1 : 0], "types") : []); -} - -var fieldTypes = "Integer;Float;Double;Character;Long;Byte;" -/** - * Get correct default (0, '\0', null) or just return a list of names. - */ -var getFields = function(c, data, andDefaults) { - var a = []; - if (!data) - return a; - if (andDefaults == "types") { - for (var i = 0, n = data.length; i < n; i++) { - var type = data[i++]; - var anames = data[i]; - if (type != "O") { - for (var j = anames.length; --j >= 0;) - a.push(type); - continue; - } - type = "String"; - for (var j = 0, na = anames.length; j < na; j++) { - if (anames[j].indexOf("+") != 0) { - type = anames[++j]; - } - a.push(type); - } - continue; - } - return a; - } - if (andDefaults) { - for (var i = 0, n = data.length; i < n; i++) { - var type = data[i++]; - var anames = data[i]; - var defval; - switch (type) { - case 'S': - defval = null; - break; - case 'O': - for (var j = 0, na = anames.length; j < na; j++) { - var name = anames[j]; - if (name.indexOf("+") == 0) - name = name.substring(1); - else - j++; - a.push([name, null]); - } - continue; - case 'C': - defval = '\0'; - break; - case 'Z': - defval = false; - break; - default: - defval = 0; - break; - } - for (var j = 0, na = anames.length; j < na; j++) { - a.push([anames[j], defval]); - } - } - return a; - } - for (var i = 0, n = data.length; i < n; i++) { - var type = data[i++]; - var anames = data[i]; - if (type == 'O') { - for (var j = 0, na = anames.length; j < na; j++) { - var name = anames[j]; - if (name.indexOf("+") == 0) - name = name.substring(1); - else - j++; - a.push(name); - } - } else { - for (var j = 0, na = anames.length; j < na; j++) { - a.push(anames[j]); - } - } - } - return a; -} -Clazz._newCount = 0; - -/** - * Create a new instance of a class. Accepts: a string - * Clazz.new_("java.util.Hashtable") a clazz (has .__CLASS_NAME__ and a default - * contructor) a specific class constructor such as c$$S a constructor from a - * one class (c, anonymous constructor) and a class to create, cl - * - */ - -Clazz.new_ = function(c, args, cl) { - if (!c) - return new Clazz._O(); - - var a = arguments; - if (Array.isArray(c)) { - a = [args, c]; - if (arguments.length == 3) - a.push(cl); - var _ = args;args = c;c = _; - } - var generics; - if (c === 1) { // new for 3.2.6 {K:"java.lang.String",...} - generics = arguments[1]; - a = []; - c = a[0] = arguments[2]; - args = a[1] = arguments[3]; - cl = a[2] = arguments[4]; - a = a.slice(0, arguments.length - 2); - } - var haveArgs = !!args; - args || (args = [[]]); - - Clazz._newCount++; - - var t0 = (_profileNew ? window.performance.now() : 0); - - if (c.__CLASS_NAME__ && c.c$) - c = c.c$; - else if (typeof c == "string") { - // Clazz.new_("path.className") - // Clazz.new_("path.className","$I$O...",[3,"test"]); - switch(arguments.length) { - case 1: - return Clazz.new_(Clazz.load(c)); - case 3: - return Clazz.new_(Clazz.load(c)["c$" + args], cl) - } - } - - // an inner class will attach arguments to the arguments returned - // Integer will be passed as is here, without c.exClazz, or cl - var clInner = cl; - cl = cl || c.exClazz || c; - Clazz._initClass(cl,1,0,0); - // BH note: Critical here that the above is not 1,1,0; - // static init is the responsibility of newInstance - // or a static field or method call (which is handled - // by the $I$(n) handler in the function initializer in - // the newClass() call. - var obj = new (Function.prototype.bind.apply(cl, a)); - if (args[2] != inheritArgs) { - haveArgs && c.apply(obj, args); - clInner && clInner.$init$.apply(obj); - } - - _profileNew && addProfileNew(cl, window.performance.now() - t0); - - if (generics) { - obj.$init$.generics = generics; - } - return obj; -} - -// var C$=Clazz.newClass(P$, -// "Test_Local$1", -// function(){Clazz.newInstance(this, arguments[0],1,C$);}, -// Clazz.load('test.Test_Local$1ReducingSink'), null, 1); -// - -Clazz.newClass = function (prefix, name, clazz, clazzSuper, interfacez, type) { -// if (J2S._debugCore) { -// var qualifiedName = (prefix ? (prefix.__PKG_NAME__ || prefix.__CLASS_NAME__) -// + "." : "") + name; -// checkDeclared(qualifiedName, type); -// } - clazz || (clazz = function () {Clazz.newInstance(this,arguments,0,clazz)}); - - clazz.__NAME__ = name; - // prefix class means this is an inner class, and $this$0 refers to the - // outer class. - // no prefix class but a super class that is an inner class, then $this$0 - // refers to its $this$0. - // there can be a conflict here. - prefix.__CLASS_NAME__ && (clazz.$this$0 = prefix.__CLASS_NAME__) || clazzSuper && clazzSuper.$this$0 && (clazz.$this$0 = clazzSuper.$this$0); - - - clazz.$load$ = [clazzSuper, interfacez]; - clazz.$isEnum = clazzSuper == 'Enum'; - // get qualifed name, and for inner classes, the name to use to refer to - // this - // class in the synthetic reference array b$[]. - - var qName, bName; - if (!prefix) { - // e.g. Clazz.declareInterface (null, "ICorePlugin", - // org.eclipse.ui.IPlugin); - qName = name; - Clazz._setDeclared(name, clazz); - } else if (prefix.__PKG_NAME__) { - // e.g. Clazz.declareInterface (org.eclipse.ui, "ICorePlugin", - // org.eclipse.ui.IPlugin); - qName = prefix.__PKG_NAME__ + "." + name; - prefix[name] = clazz; - if (prefix === java.lang) { - setWindowValue(name, clazz); - } - } else { - // is an inner class - qName = prefix.__CLASS_NAME__ + "." + name; - bName = prefix.__CLASS_NAME__ + "$" + name; - prefix[name] = clazz; - } - - finalizeClazz(clazz, qName, bName, type, false); - -// for (var i = minimalObjNames.length; --i >= 0;) { -// var name = minimalObjNames[i]; -// clazz[name] = objMethods[name]; -// } - Clazz._setDeclared(qName, clazz); - return clazz; - -}; - -Clazz.newEnumConst = function(vals, c, enumName, enumOrdinal, args, cl) { - var clazzEnum = c.exClazz; - var e = clazzEnum.$init$$ || (clazzEnum.$init$$ = clazzEnum.$init$); - clazzEnum.$init$ = function() {e.apply(this); this.name = this.$name = enumName; this.ordinal = enumOrdinal;this.$isEnumConst = true;} - vals.push(clazzEnum[enumName] = clazzEnum.prototype[enumName] = Clazz.new_(c, args, cl)); - } - -Clazz.newInstance = function (objThis, args, isInner, clazz) { - if (args && ( - args[0] == inheritArgs - || args[1] == inheritArgs - || args[2] == inheritArgs - )) { - // Just declaring a class, not creating an instance or doing field - // preparation. - // That is, we are just generating the prototypes for this method using new - // superClass() - return; - } - - if (objThis.__VAL0__) { - // Integer, Long, Byte, Float, Double - // .instantialize(val) - objThis.valueOf = function () { - return this; - }; - } - - objThis.__JSID__ = ++_jsid; - - if (!isInner) { -// if (args) - clazz && Clazz._initClass(clazz,1,1,objThis); - if ((!args || args.length == 0) && objThis.c$) { - // allow for direct default call "new foo()" to run with its default - // constructor - objThis.c$.apply(objThis); - args && (args[2] = inheritArgs) - } - return; - } - - // inner class - - // args[0] = outerObject - // args[1] = b$ array - // args[2-n] = actual arguments - var outerObj = shiftArray(args, 0, 1); - var finalVars = shiftArray(args, 0, 1); - var haveFinals = (finalVars || outerObj && outerObj.$finals$); - if (!outerObj || !objThis) - return; - var clazz1 = (outerObj.__CLASS_NAME__ || outerObj instanceof String ? getClazz(outerObj) : null); - (!clazz1 || clazz1 == outerObj) && (outerObj = objThis); - - if (haveFinals) { - // f$ is short for the once-chosen "$finals$" - var of$ = outerObj.$finals$; - objThis.$finals$ = (finalVars ? - (of$ ? appendMap(appendMap({}, of$), finalVars) : finalVars) - : of$ ? of$ : null); - } - // BH: For efficiency: Save the b$ array with the OUTER class as $b$, - // as its keys are properties of it and can be used again. - var b = outerObj.$b$; - var isNew = false; - var innerName = getClassName(objThis, true); - if (!b) { - b = outerObj.b$; - // Inner class of an inner class must inherit all outer object references. - // Note that this - // can cause conflicts. For example, b$["java.awt.Component"] could refer to - // the wrong - // object if I did this wrong. - // - if (!b) { - // the outer class is not itself an inner class - start a new map - b = {}; - isNew = true; - } else if (b["$ " + innerName]) { - // this inner class is already in the map pointing to a different - // object. Clone the map. - b = appendMap({},b); - isNew = true; - } - b[getClassName(outerObj, true)] = outerObj; - // add all superclass references for outer object - clazz1 && addB$Keys(clazz1, isNew, b, outerObj, objThis); - } - var clazz2 = (clazz.superclazz == clazz1 ? null : clazz.superclazz || null); - if (clazz2) { - // we have an inner object that subclasses a different object - // clone the map and overwrite with the correct values - b = appendMap({},b); - addB$Keys(clazz2, true, b, objThis, objThis); - } else if (isNew) { - // it is new, save this map with the OUTER object as $b$ - // 12018.12.20 but only if it is clean - outerObj.$b$ = b; - } - - // final objective: save this map for the inner object - // add a flag to disallow any other same-class use of this map. - b["$ " + innerName] = 1; - objThis.b$ = b; - clazz.$this$0 && (objThis.this$0 = b[clazz.$this$0]); - Clazz._initClass(clazz,1,0,objThis); -}; - - -var fixBRefs = function(cl, obj, outerObj) { - // see Clazz.super_ - obj.b$[cl.superclazz.$this$0] = outerObj; -} - -var stripJavaLang = function(s) { - return ( - s.indexOf("java.lang.") != 0 - || s == "java.lang.Object" - || s.length > 10 && !Character.isUpperCase$C(s.charAt(10)) ? - s : - s.substring(10)); -}; - -var addB$Keys = function(clazz, isNew, b, outerObj, objThis) { - var cl = clazz; - do { - var key = getClassName(cl, true); - if (!isNew && b[key]) - break; - setB$key(key, b, outerObj); - if (cl.implementz) { - var impl = cl.implementz; - for (var i = impl.length; --i >= 0;) { - var key = getClassName(impl[i], true); - if (isNew || !b[key]) { - setB$key(key, b, outerObj); - } - } - } - } while ((cl = cl.superclazz)); -}; - -var setB$key = function(key, b, outerObj) { - b[key] = outerObj; - if (key.indexOf("java.lang.") == 0) - b[key.substring(10)] = outerObj; - if (key == "javax.swing.JDialog") - b["java.awt.Dialog"] = outerObj; - if (key == "javax.swing.JFrame") - b["java.awt.Frame"] = outerObj; -}; - -/** - * // arg1 is the package name // arg2 is the full class name in quotes // arg3 - * is the class definition function, C$, which is called in Clazz.new_(). // - * arg4 is the superclass // arg5 is the superinterface(s) // arg6 is the type: - * anonymous(1), local(2), or absent - */ - -Clazz.newInterface = function (prefix, name, f, _null2, interfacez, _0) { - var c = Clazz.newClass(prefix, name, function(){}, null, interfacez, 0); - f && f(c); // allow for j2sNative block - return c; -}; - -var __allowOverwriteClass = true; - -Clazz.newMeth = function (clazzThis, funName, funBody, modifiers) { - - if (!__allowOverwriteClass && clazzThis.prototype[funName]) - return; - - // modifiers: 1: static, 2: native, p3 -- private holder - if (arguments.length == 1) { - return Clazz.newMeth(clazzThis, 'c$', function(){ - clazzThis.$load$ && Clazz.load(clazzThis,2); - Clazz.super_(clazzThis, this); - }, 1); - } - if (funName.constructor == Array) { - // If funName is an array, we are setting aliases for generic calls. - // For example: ['compareTo$S', 'compareTo$TK', 'compareTo$TA'] - // where K and A are generic types that are from a class or class - // assignment. - for (var i = funName.length; --i >= 0;) - Clazz.newMeth(clazzThis, funName[i], funBody, modifiers); - return; - } - - var isStatic = (modifiers == 1 || modifiers == 2); - var isPrivate = (typeof modifiers == "object"); - if (isPrivate) - clazzThis.$P$ = modifiers; - Clazz.saemCount0++; - funBody.exName = funName; // mark it as one of our methods - funBody.exClazz = clazzThis; // make it traceable - funBody.isPrivate = isPrivate; - var f; - if (isStatic || funName == "c$") - clazzThis[funName] = funBody; - if (clazzThis.$isInterface) - clazzThis.$hasJava8Defaults = true; - if (isPrivate && modifiers) - modifiers[funName] = funBody; - else - clazzThis.prototype[funName] = funBody; - return funBody; // allow static calls as though they were not static -}; - -Clazz.newPackage = function (pkgName) { - Clazz._Loader && Clazz._Loader.doTODO(); - if (Clazz.lastPackageName == pkgName || !pkgName) - return Clazz.lastPackage; - var pkgFrags = pkgName.split (/\./); - var pkg = Clazz._allPackage; - for (var i = 0; i < pkgFrags.length; i++) { - var a = pkgFrags[i]; - if (!pkg[a]) { - pkg[a] = { __PKG_NAME__ : (pkg.__PKG_NAME__ ? pkg.__PKG_NAME__ + "." + a : a) } - if (i == 0) { - setWindowValue(a, pkg[a]); - } - } - pkg = pkg[a] - } - Clazz.lastPackageName = pkgName; - return Clazz.lastPackage = pkg; -}; - -Clazz.super_ = function(cl, obj, outerObj) { - if (outerObj) { - // inner class is subclassing an inner class in another class using - // OuterClass.super() - fixBRefs(cl, obj, outerObj); - return; - } - - // implicit super() call - - if (cl.superclazz && cl.superclazz.c$) { - // added [] here to account for the possibility of vararg default - // constructor - cl.superclazz.c$.apply(obj, [[]]); - } - cl.$init$ && cl.$init$.apply(obj); -} - -// /////////////////////////////////////////////////////////////////// - -var aas = "AAA"; - -var arrayClasses = {}; - -var arrayClass = function(baseClass, ndim) { - ndim || (ndim = 1); - var stub = Clazz._getParamCode(baseClass); - var key = stub + ";" + ndim; - var ret = arrayClasses[key]; - if (ret) - return ret; - while (aas.length < ndim) - aas += aas; - var aaa = aas.substring(0, ndim); - var o = {}; - var a = new Array(ndim); - o.arrayType = 1; - o.__BASECLASS = baseClass; - o.__NDIM = ndim; - o.__CLASS_NAME__ = o.__ARRAYTYPE = stub + aaa; - o.__COMPONENTTYPE = (o.__NDIM == 1 ? baseClass : null); - var oclass = Clazz.getClass(o); - oclass.getComponentType$ = function() { - if (!o.__COMPONENTTYPE) - o.__COMPONENTTYPE = arrayClass(baseClass, ndim - 1); - return (o.__COMPONENTTYPE.__PRIMITIVE - || o.__COMPONENTTYPE.$clazz$ ? o.__COMPONENTTYPE - : Clazz.getClass(o.__COMPONENTTYPE)); - }; - oclass.getName$ = function() {return o.__NAME || (o__NAME = (function(stub) { - switch (stub) { - case "O": - stub = "Object"; - break; - case "H": // SwingJS -> Java - stub = "S"; - break; - case "S": - stub = "String"; - break; - default: - if (stub.length > 1) - stub = baseClass.__CLASS_NAME$__ || baseClass.__CLASS_NAME__; - break; - } - if (stub.indexOf(".") >= 0) - stub = "L" + stub + ";"; - else if (stub.length > 1) - stub = "Ljava.lang." + stub + ";"; - return aaa.replace(/A/g,"[") + stub; - })(stub))}; - arrayClasses[key] = oclass; - return oclass; -} - - -// var supportsNativeObject = window["j2s.object.native"]; // true - - -// Clazz.duplicatedMethods = {}; - -// Clazz._preps = {}; // prepareFields functions based on class name - -// BH Clazz.getProfile monitors exactly what is being delegated with SAEM, -// which could be a bottle-neck for function calling. -// This is critical for performance optimization. - -var __signatures = ""; -var profilet0; -var _profileNew = null; -var _jsid0 = 0; - -Clazz.startProfiling = function(doProfile) { - _profileNew = {}; - if (typeof doProfile == "number") { - _jsid0 = _jsid; - setTimeout(function() { var s = "total wall time: " + doProfile + " sec\n" + Clazz.getProfile(); console.log(s); System.out.println(s)}, doProfile * 1000); - } else if (doProfile === false) { - _jsid = 0; - _profileNew = null; - } - return (_profileNew ? "use Clazz.getProfile() to show results" : "profiling stopped and cleared") -} - -var tabN = function(n) { n = ("" + n).split(".")[0]; return "..........".substring(n.length) + n + "\t" }; - -Clazz.getProfile = function() { - var s = "run Clazz.startProfiling() first"; - - if (_profileNew) { - s += "\n\n Total new objects: " + (_jsid - _jsid0) + "\n"; - s += "\ncount \texec(ms)\n"; - s += "--------\t--------\t------------------------------\n"; - totalcount = 0; - totaltime = 0; - var rows = []; - for (var key in _profileNew) { - var count = _profileNew[key][0]; - var tnano = _profileNew[key][1]; - totalcount += count; - totaltime += Math.abs(tnano); - rows.push(tabN(count) + tabN(Math.round(tnano)) + "\t" +key + "\n"); - } - rows.sort(); - rows.reverse(); - s += rows.join(""); - s+= tabN(totalcount)+tabN(Math.round(totaltime)) + "\n"; - } - _profileNew = null; - return s; // + __signatures; -} - -var addProfileNew = function(c, t) { - var s = c.__CLASS_NAME__ || c.__PARAMCODE; - if (t < 0) { - s += "[]"; - t = 0; - } - if (J2S._traceOutput && (s.indexOf(J2S._traceOutput) >= 0 || '"' + s + '"' == J2S._traceOutput)) { - alert(s + "\n\n" + Clazz._getStackTrace()); - doDebugger(); - } - - var p = _profileNew[s]; - p || (p = _profileNew[s] = [0,0]); - p[0]++; - p[1]+=t; -} - -// /////////////////// method creation //////////////////////////////// - -var doDebugger = function() { debugger } - -// /////////////////////// private supporting method creation -// ////////////////////// - - - var copyArrayProps = function(a, b) { - b.__BYTESIZE = a.__BYTESIZE; - b.__ARRAYTYPE = a.__ARRAYTYPE; - b.__BASECLASS = a.__BASECLASS; - b.__NDIM = a.__NDIM; - b.getClass$ = a.getClass$; - b.equals$O = a.equals$O; - b.hashCode$ = a.hashCode$; - return b; - } - - var aHCOffset = 500000000000 - var lHCOffset = 400000000000 - var iHCOffset = 300000000000 - var sHCOffset = 200000000000 - var bHCOffset = 100000000000 - - - var setArray = function(vals, baseClass, paramType, ndims) { - ndims = Math.abs(ndims); - vals.__JSID__ = ++_jsid; - vals.getClass$ = function () { return arrayClass(this.__BASECLASS, this.__NDIM) }; - vals.hashCode$ = function() {return System.identityHashCode$O(this, aHCOffset);} - vals.equals$O = function (a) {return this == a; } - - vals.reallyEquals$O = function (a) { - if (!a || a.__ARRAYTYPE != this.__ARRAYTYPE || a.length != this.length) - return false; - if (a.length == 0) - return true; - if (typeof a[0] == "object") { - for (var i = a.length; --i >= 0;) - if ((a[i] == null) != (this[i] == null) || a[i] != null - && (a[i].equals$O && !a[i].equals$O(this[i]) - || a.equals && !a[i].equals(this[i]) || a[i] !== this[i])) - return false; - } else { - for (var i = a.length; --i >= 0;) - if (a[i] !== this[i]) - return false; - } - return true; - }; - - vals.__ARRAYTYPE = paramType; // referenced in java.lang.Class - vals.__BASECLASS = baseClass; - vals.__NDIM = ndims; - return vals; -} - -/** - * in-place shift of an array by k elements, starting with element i0, resetting - * its length in case it is arguments (which does not have the .shift() method. - * Returns a[i0] - */ -var shiftArray = function(a, i0, k) { - if (a == null || k > a.length) - return null; - k || (k == 1); - i0 || (i0 == 0); - var arg = a[i0]; - for (var i = i0, n = a.length - k; i < n; i++) - a[i] = a[i + k]; - a.length -= k; - return arg; -}; - -var getParamCode = Clazz._getParamCode = function(cl) { - cl.$clazz$ && (cl = cl.$clazz$); - return cl.__PARAMCODE || (cl.__PARAMCODE = stripJavaLang(cl.__CLASS_NAME__).replace(/\./g, '_')); -} - -var newTypedA = function(baseClass, args, nBits, ndims, isClone) { - var dim = args[0]; - if (typeof dim == "string") - dim = dim.charCodeAt(0); // int[] a = new int['\3'] ??? - var last = args.length - 1; - var paramType = args[last]; - var val = args[last - 1]; - if (ndims < -1 || Math.abs(ndims) > 1) { - //array of arrays; -2: when x[30][] - var xargs = new Array(last--); - for (var i = 0; i <= last; i++) - xargs[i] = args[i + 1]; - // SAA -> SA - xargs[last] = paramType.substring(0, paramType.length - 1); - var arr = new Array(dim); - if (args[1] != null) { - // arg[1] is null, we set the array type but do not fill in the array - // otherwise, call recursively - for (var i = 0; i < dim; i++) { - arr[i] = newTypedA(baseClass, xargs, nBits, ndims - (ndims < 0 ? -1 : 1)); - } - } - } else { - // Clazz.newIntA(new int[5][] val = null - // Clazz.newA(5 ,null, "SA") new String[5] val = null - // Clazz.newA(-1, ["A","B"], "SA") new String[] val = {"A", "B"} - // Clazz.newA(3, 5, 0, "IAA") new int[3][5] (second pass, so now args = [5, - // 0, "IA"]) - if (val == null) { - nBits = 0; - } else if (nBits > 0 && dim < 0) { - // make sure this is not a character - for (var i = val.length; --i >= 0;) - val[i].charAt && (val[i] = val[i].$c()); - dim = val; // because we can initialize an array using new - // Int32Array([...]) - } - if (nBits > 0) - ndims = 1; - var atype; - // dim could be a number or an array - switch (nBits) { - case 8: - var arr = new Int8Array(dim); - break; - case 16: - var arr = new Int16Array(dim); - break; - case 32: - var arr = new Int32Array(dim); - break; - case 64: - var arr = (paramType != "JA" ? new Float64Array(dim) : typeof dim == "number" ? new Array(dim).fill(0) : dim); - break; - default: - nBits = 0; - var arr; - if (isClone) { - arr = new Array(dim = val.length); - } else { - arr = (dim < 0 ? val : new Array(dim)); - if (dim > 0 && val != null) - arr.fill(val); - } - break; - } - arr.__BYTESIZE = arr.BYTES_PER_ELEMENT || (nBits >> 3); - } - return setArray(arr, baseClass, paramType, ndims); -} - - -/** - * Return the class name of the given class or object. - * - * @param clazzHost - * given class or object - * @return class name - */ -var getClassName = function(obj, fAsClassName) { - if (obj == null) - return "NullObject"; - if (obj._NULL_) - return obj.clazzName; - switch(typeof obj) { - case "number": - return "n"; - case "boolean": - return "b"; - case "string": - // Always treat the constant string as String object. - // This will be compatiable with Java String instance. - return "String"; - case "function": - if (obj.__CLASS_NAME__) - return (fAsClassName ? obj.__CLASS_NAME__ : "Class"); // user defined - // class name - var s = obj.toString(); - var idx0 = s.indexOf("function"); - if (idx0 < 0) - return (s.charAt(0) == '[' ? extractClassName(s) : s.replace(/[^a-zA-Z0-9]/g, '')); - var idx1 = idx0 + 8; - var idx2 = s.indexOf ("(", idx1); - if (idx2 < 0) - return "Object"; - s = s.substring (idx1, idx2); - if (s.indexOf("Array") >= 0) - return "Array"; - s = s.replace (/^\s+/, "").replace (/\s+$/, ""); - return (s == "anonymous" || s == "" ? "Function" : s); - case "object": - if (obj.__CLASS_NAME__) // user defined class name - return obj.__CLASS_NAME__; - if (!obj.constructor) - return "Object"; // For HTML Element in IE - if (!obj.constructor.__CLASS_NAME__) { - if (obj.__VAL0__) - return "Number"; - if (obj instanceof Boolean) - return "Boolean"; - if (obj instanceof Array || obj.__BYTESIZE) - return "Array"; - if (obj instanceof ReferenceError || obj instanceof TypeError) { - // note that this is not technically the case. - // we use this to ensure that try/catch delivers these as java.lang.Error instances - return "Error"; - } - var s = obj.toString(); - // "[object Int32Array]" - if (s.charAt(0) == '[') - return extractClassName(s); - } - return getClassName(obj.constructor, true); - } - // some new, unidentified class - return "Object"; -}; - -var extractClassName = function(clazzStr) { - // [object Int32Array] - var clazzName = clazzStr.substring (1, clazzStr.length - 1); - return (clazzName.indexOf("Array") >= 0 ? "Array" // BH -- for Float64Array - // and Int32Array - : clazzName.indexOf ("object ") >= 0 ? clazzName.substring (7) // IE - : clazzName); -} - -/** - * Expand the shortened list of class names. For example: JU.Log, $.Display, - * $.Decorations will be expanded to JU.Log, JU.Display, JU.Decorations where - * "$." stands for the previous class name's package. - * - * This method will be used to unwrap the required/optional classes list and the - * ignored classes list. - */ -/* private */ -var unwrapArray = function (arr) { - if (!arr || arr.length == 0) - return []; - var last = null; - for (var i = 0; i < arr.length; i++) { - var ai = arr[i]; - if (typeof ai != "string") - continue; - if (ai.charAt(0) == '$') { - if (ai.charAt(1) == '.') { - if (!last) - continue; - var idx = last.lastIndexOf("."); - if (idx != -1) { - var prefix = last.substring (0, idx); - arr[i] = prefix + ai.substring(1); - } - } else { - arr[i] = "org.eclipse.s" + ai.substring (1); - } - } - last = arr[i]; - } - return arr; -}; - -/** - * Return the JavaScript clazz of the given class or object. - * - * @param clazzHost - * given class or object - * @return class name - */ -var getClazz = function (clazzHost) { - if (!clazzHost) - return Clazz._O; // null/undefined is always treated as Object - if (typeof clazzHost == "function") - return clazzHost; - var clazzName; - if (clazzHost._NULL_) { - clazzName = clazzHost.clazzName; - } else { - switch (typeof clazzHost) { - case "string": - return String; - case "object": - if (!clazzHost.__CLASS_NAME__) - return (clazzHost.constructor || Clazz._O); - clazzName = clazzHost.__CLASS_NAME__; - break; - default: - return clazzHost.constructor; - } - } - return evalType(clazzName, true); -}; - -var appendMap = function(a, b) { - if (b) - for (var s in b) { - a[s] = b[s]; - } - return a; -} - -var hashCode = 0; - -var _jsid = 0; - -// if (supportsNativeObject) { // true - Clazz._O = function () {}; - Clazz._O.__CLASS_NAME__ = "Object"; - Clazz._O.__PARAMCODE = "O"; - Clazz._O.getClass$ = function () { return Clazz._O; }; -// } else { -// Clazz._O = Object; -// } - -/* - * these methods are not part of Java. - * - * var objMethods = { equals : function (o) { return this === o; }, hashCode : - * function () { return this.__CLASS_NAME__.hashCode (); }, toString : function () { - * return "class " + this.__CLASS_NAME__; } }; objMethods.equals$O = - * objMethods.equals; - */ - -// set object methods for Clazz._O and Array - - var addProto = function(proto, name, func) { - func.exClazz = Clazz._O; - func.exName = name; - return proto[name] = func; - }; - -// var minimalObjNames = [ "equals$", "equals$O", "hashCode$" /*"toString",*/ ]; - -;(function(proto) { - - addProto(proto, "equals$O", function (obj) { - return this == obj; - }); - - addProto(proto, "hashCode$", function () { - return this._$hashcode || (this._$hashcode = ++hashCode) - }); - - addProto(proto, "getClass$", function () { return Clazz.getClass(this); }); - - addProto(proto, "clone$", function () { return Clazz.clone(this); }); - -/* - * Methods for thread in Object - */ - addProto(proto, "finalize$", function () {}); - addProto(proto, "notify$", function () {}); - addProto(proto, "notifyAll$", function () {}); - addProto(proto, "wait$", function () {alert("Object.wait was called!" + arguments.callee.caller.toString())}); - addProto(proto, "toString$", Object.prototype.toString); - addProto(proto, "toString", function () { return (this.__CLASS_NAME__ ? "[" + (this.__CLASS_NAME$__ || this.__CLASS_NAME__) + " object]" : this.toString$.apply(this, arguments)); }); - -})(Clazz._O.prototype); - -var extendObjectMethodNames = [ - // all - "equals$O", "getClass$", "clone$", "finalize$", "notify$", "notifyAll$", "wait$", - // not Number, Array - "hashCode$", - // not String - "toString" - ]; - -var EXT_NO_TOSTRING = 1; // length - 1 -var EXT_NO_HASHCODE = 2; // length - 2 - -var extendObject = function(clazz, ext) { - var op =Clazz._O.prototype; - var cp = clazz.prototype; - for (var i = extendObjectMethodNames.length - (ext || 0); --i >= 0;) { - var p = extendObjectMethodNames[i]; - cp[p] = op[p]; - } -} - -// see also -var excludeSuper = function(o) { - return o == "b$" || o == "$this$0" - || o == "$init$" - || o == "$init0$" - || o == "$static$" - || o == "$defaults$" - || o == "$clinit$" - || o == "$classes$" - || o == "$fields$" - || o == "$load$" - || o == "$Class$" - || o == "$getMembers$" - || o == "$getAnn$" - || o == "prototype" - || o == "__PARAMCODE" - || o == "__CLASS_NAME__" - || o == "__CLASS_NAME$__" - || o == "superclazz" - || o == "implementz" - || o.startsWith("c$") -} - -var copyStatics = function(clazzFrom, clazzThis, isInterface) { - for (var o in clazzFrom) { - if (clazzThis[o] == undefined && !excludeSuper(o)) { - clazzThis[o] = clazzFrom[o]; - if (isInterface) - clazzThis.prototype[o] = clazzFrom[o]; - } - } - if (isInterface) { - clazzFrom.$static$ && (initStatics(clazzFrom), clazzFrom.$static$()); - clazzThis.$defaults$ && clazzThis.$defaults$(clazzThis); - for (var o in clazzFrom.prototype) { - if (clazzThis.prototype[o] == undefined && !excludeSuper(o)) { - clazzThis.prototype[o] = clazzFrom.prototype[o]; - } - } - if (clazzFrom.$defaults$) { - __allowOverwriteClass = false; - clazzFrom.$defaults$(clazzThis); - __allowOverwriteClass = true; - } - } -} - - -var finalizeClazz = function(clazz, qname, bname, type, isNumber) { - clazz.$isInterface = (type == 0); - qname && (clazz.__CLASS_NAME__ = clazz.prototype.__CLASS_NAME__ = qname); - bname && (clazz.__CLASS_NAME$__ = clazz.prototype.__CLASS_NAME$__ = bname); // inner - // static - // classes - // use - // $ - // not - // "." - - (type == 1) && (clazz.__ANON = clazz.prototype.__ANON = 1); - (type == 2) && (clazz.__LOCAL = clazz.prototype.__LOCAL = 1); - -// if (!isNumber && type != 0) -// Clazz.newMeth(clazz, '$init0$', function(){var c;if ((c=clazz.superclazz) && -// (c = c.$init0$))c.apply(this);}, 1); - if (isNumber || type != 0) - extendPrototype(clazz); - -}; - -var extendPrototype = function(clazz, isPrimitive, addAll) { - clazz.isInstance = function(o) { return Clazz.instanceOf(o, this) }; - var cp = clazz.prototype; - var op = Clazz._O.prototype; - for (var i = 0; i < extendObjectMethodNames.length; i++) { - var p = extendObjectMethodNames[i]; - if (!cp[p] || cp[p].exClazz == Clazz._O) - addProto(cp, p, op[p]); - } -} - - -Clazz.saemCount0 = 0 // methods defined - -var NullObject = function () {}; - -var evalType = function (typeStr, isQualified) { - if (typeStr == null) - return null; - var cl = (isQualified && Clazz._getDeclared(typeStr)); - if (cl) - return cl; - var idx = typeStr.lastIndexOf("."); - if (idx >= 0) { - var pkgName = typeStr.substring (0, idx); - var pkg = Clazz.newPackage(pkgName); - var clazzName = typeStr.substring (idx + 1); - return pkg[clazzName]; - } - switch (typeStr) { - case "string": - return String; - case "number": - return Number; - case "object": - return Clazz._O; - case "boolean": - return Boolean; - case "function": - return Function; - case "void": - case "undefined": - case "unknown": - return typeStr; - case "NullObject": - return NullObject; - default: - return Clazz._getDeclared(typeStr); - } -}; - -var equalsOrExtendsLevel = function (clazzThis, clazzAncestor) { - while (true) { - if (clazzThis == null) - return false; - if (clazzThis === clazzAncestor) - return true; - if (clazzThis && clazzThis.implementz) { - var impls = clazzThis.implementz; - for (var i = impls.length; --i >= 0;) - if (equalsOrExtendsLevel(impls[i], clazzAncestor)) - return true; - } - clazzThis = clazzThis.superclazz; - } - return false; -}; - -var knownInst = {}; - -var isInstanceOf = function (clazzTarget, clazzBase, isTgtStr, isBaseStr) { - if (clazzTarget === clazzBase) - return true; - if (isTgtStr && ("void" == clazzTarget || "unknown" == clazzTarget)) - return false; - if (isBaseStr && ("void" == clazzBase || "unknown" == clazzBase)) - return false; - Clazz._initClass(clazzBase, 1) - if (clazzTarget === (isTgtStr ? "NullObject" : NullObject)) { - switch (clazzBase) { - case "n": - case "b": - return false; - case Number: - case Boolean: - case NullObject: - break; - default: - return true; - } - } - var t = (isTgtStr ? clazzTarget : clazzTarget.__CLASS_NAME__ || clazzTarget.type); - var b = (isBaseStr ? clazzBase : clazzBase.__CLASS_NAME__ || clazzBase.type); - if (t && t == b) - return true; - var key = t + "|" + b; - var val = knownInst[key]; - if (val) - return (val == 1 ? true : false); - - isTgtStr && (clazzTarget = Clazz._getDeclared(clazzTarget)); - isBaseStr && (clazzBase = Clazz._getDeclared(clazzBase)); - var ret = (clazzBase && clazzTarget && ( - clazzTarget == clazzBase - || clazzBase === Object - || clazzBase === Clazz._O - || equalsOrExtendsLevel(clazzTarget, clazzBase) - )); -if (t && b) - knownInst[key] = (ret ? 1 : -1); - return ret; -}; - - -// ///////////////////////// Exception handling //////////////////////////// - -/* - * Use to mark that the Throwable instance is created or not. - * - * Called from java.lang.Throwable, as defined in JSmolJavaExt.js - * - * The underscore is important - it tells the JSmol ANT task to NOT turn this - * into Clazz_initializingException, because coreBottom2.js does not include - * that call, and so Google Closure Compiler does not minify it. - * - */ -/* public */ -Clazz._initializingException = false; - -/** - * MethodException will be used as a signal to notify that the method is not - * found in the current clazz hierarchy. - */ -/* private */ -var MethodException = function () { - this.toString = function () { - return "j2s MethodException"; - }; -}; - -var _isNPEExceptionPredicate; - -;(function() { - /* - * sgurin: native exception detection mechanism. Only NullPointerException - * detected and wrapped to java excepions - */ - /** - * private utility method for creating a general regexp that can be used - * later for detecting a certain kind of native exceptions. use with error - * messages like "blabla IDENTIFIER blabla" - * - * @param msg - * String - the error message - * @param spliterName - * String, must be contained once in msg spliterRegex String, a - * string with the regexp literal for identifying the spitter in - * exception further error messages. - */ - // reproduce NullPointerException for knowing how to detect them, and create - // detector function Clazz._isNPEExceptionPredicate - var $$o$$ = null; - - try { - $$o$$.hello(); - } catch (e) { - var _ex_reg = function(msg, spliterName, spliterRegex) { - if(!spliterRegex) - spliterRegex="[^\\s]+"; - var idx = msg.indexOf (spliterName), - str = msg.substring (0, idx) + spliterRegex + msg.substring(idx + spliterName.length), - regexp = new RegExp("^"+str+"$"); - return regexp; - }; - if(/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {// opera throws an - // exception with - // fixed messages - // like "Statement - // on line 23: - // Cannot convert - // undefined or null - // to Object - // Backtrace: - // Line....long - // text... " - var idx1 = e.message.indexOf(":"), idx2 = e.message.indexOf(":", idx1+2); - var _NPEMsgFragment = e.message.substr(idx1+1, idx2-idx1-20); - _isNPEExceptionPredicate = function(e) { return e.message.indexOf(_NPEMsgFragment)!=-1; }; - } else if(navigator.userAgent.toLowerCase().indexOf("webkit")!=-1) { // webkit, - // google - // chrome - // prints - // the - // property - // name - // accessed. - var _exceptionNPERegExp = _ex_reg(e.message, "hello"); - _isNPEExceptionPredicate = function(e) { return _exceptionNPERegExp.test(e.message); }; - } else {// ie, firefox and others print the name of the object accessed: - var _exceptionNPERegExp = _ex_reg(e.message, "$$o$$"); - _isNPEExceptionPredicate = function(e) { return _exceptionNPERegExp.test(e.message); }; - } - }; -})(); - -var getArgs = function(c) { - var s = ""; - var args = c.arguments; - for (var j = 0; j < args.length; j++) { - var sa = (args[j] instanceof Object ? args[j].toString() : "" + args[j]); - if (sa.length > 60) - sa = sa.substring(0, 60) + "..."; - s += " args[" + j + "]=" + sa.replace(/\s+/g," ") + "\n"; - } - return s; -} - -var getSig = function(c, withParams) { - var sig = (c.toString ? c.toString().substring(0, c.toString().indexOf("{")) : ""); - sig = " " + (c.exName ? c.exClazz.__CLASS_NAME__ + "." + c.exName + sig.replace(/function /,""): sig) + "\n"; - if (withParams) - sig += getArgs(c); - return sig; -} - -Clazz._showStack = function(n) { - if (!Clazz._stack) - return; - n && n < Clazz._stack.length || (n = Clazz._stack.length); - if (!n) - return; - for (var i = 0; i < n; i++) { - console.log("" + i + ":" + getSig(Clazz._stack[i], true)); - } - return ""; -} - - -Clazz._getStackTrace = function(n) { - Clazz._stack = []; - // need to limit this, as JavaScript call stack may be recursive - var haven = !!n - haven || (n = 25); - var showParams = (n < 0); - if (showParams) - n = -n; - // updateNode and updateParents cause infinite loop here - var estack = []; - try { - Clazz.failnow(); - } catch (e) { - estack = e.stack.split("\n").reverse(); - estack.pop(); - } - var s = "\n"; - try { - var c = arguments.callee; - for (var i = 0; i < n; i++) { - if (!(c = c.caller)) - break; - var sig = getSig(c, false); - if (s.indexOf(sig) >= 0) { - s += "..."; - break; - } else { - Clazz._stack.push(c); - s += "" + i + sig; - s += estack.pop() + "\n\n"; - } - if (c == c.caller) { - s += "\n"; - break; - } - if (showParams) { - s += getArgs(c); - } - } - } catch(e){} - if (!haven) - s += estack.join("\n"); - if (Clazz._stack.length) { - s += "\nsee Clazz._stack"; - console.log("Clazz.stack = \n" + estack.join("\n")); - console.log("Use Clazz._showStack() or Clazz._showStack(n) to show parameters"); - } - return s; -} - -// //////////////////////////////// package loading /////////////////////// - -/* - * all root packages. e.g. java.*, org.*, com.* - */ -Clazz._allPackage = {}; - - -/** - * Will be used to keep value of whether the class is defined or not. - */ -Clazz.allClasses = {}; - -Clazz.lastPackageName = null; -Clazz.lastPackage = null; - -var unloadedClasses = []; - -/** - * used specifically for declaring prototypes using subclass.prototype = new - * superclass(inheritArgs) without running a constructor or doing field - * preparation. - * - */ -var inheritArgs = new (function(){return {"$J2SNOCREATE$":true}})(); - -// var _prepOnly = new (function(){return {"$J2SPREPONLY$":true}})(); - -/** - * Inherit class with "extends" keyword and also copy those static members. - * Example, as in Java, if NAME is a static member of ClassA, and ClassB extends - * ClassA then ClassB.NAME can be accessed in some ways. - * - * @param clazzThis - * child class to be extended - * @param clazzSuper - * super class which is inherited from - */ -var setSuperclass = function(clazzThis, clazzSuper){ - - clazzThis.superclazz = clazzSuper || Clazz._O; - if (clazzSuper) { - copyStatics(clazzSuper, clazzThis, false); - var p = clazzThis.prototype; - if (clazzSuper == Number) { - clazzThis.prototype = new Number(); - } else { - clazzThis.prototype = new clazzSuper(inheritArgs); - if (clazzSuper == Error) { - var pp = Throwable.prototype; - for (o in pp) { - if (!pp.exClazz || pp.exClazz != Clazz._O) - clazzThis.prototype[o] = pp[o]; - } - } - } - for (o in p) { - if (!p[o].exClazz || p[o].exClazz != Clazz._O) - clazzThis.prototype[o] = p[o]; - } - } - clazzThis.prototype.__CLASS_NAME__ = clazzThis.__CLASS_NAME__; -}; - -/** - * Implementation of Java's keyword "implements". As in JavaScript there are on - * "implements" keyword implemented, a property of "implementz" is added to the - * class to record the interfaces the class is implemented. - * - * @param clazzThis - * the class to implement - * @param interfacez - * Array of interfaces - */ -var addInterface = function (clazzThis, interfacez) { - if (interfacez instanceof Array) { - for (var i = 0, n = interfacez.length; i < n; i++) { - var iface = interfacez[i]; - if (iface instanceof Array) { - var cl; - for (var j = 0; j < iface.length; j++) - cl = Clazz.load(iface[j]); - iface = cl; - } - addInterface(clazzThis, iface); - } - return; - } - // not an array... - if (typeof interfacez == "string") { - var str = interfacez; - if (!(interfacez = Clazz.load(interfacez))) { - alert("Missing interface: " + str); - return; - } - } - (clazzThis.implementz || (clazzThis.implementz = [])).push(interfacez); - copyStatics(interfacez, clazzThis, true); -}; - - -// //////////////////////// default package declarations -// //////////////////////// - - -/* - * Check whether given package's classpath is setup or not. Only "java" and - * "org.eclipse.swt" are accepted in argument. - */ -/* private */ -var needPackage = function(pkg) { - // note that false != null and true != null - return (J2S.getGlobal(pkg + ".registered") && !classpathMap["@" + pkg]); -} - - // Make sure that packageClasspath ("java", base, true); - // is called before any _Loader#loadClass is called. - - if (needPackage("java")) - Clazz._Loader.loadPackage("java"); - -Clazz.newPackage("java.io"); -Clazz.newPackage("java.lang.reflect"); -Clazz.newPackage("java.util"); - - -// NOTE: Any changes to this list must also be -// accounted for in net.sf.j2s.core.astvisitors.Java2ScriptVisitor.knownClasses -Clazz.newInterface(java.io,"Externalizable"); -Clazz.newInterface(java.io,"Flushable"); -Clazz.newInterface(java.io,"Serializable"); -Clazz.newInterface(java.lang,"Cloneable"); -Clazz.newInterface(java.lang,"Appendable"); -Clazz.newInterface(java.lang,"Comparable"); -Clazz.newInterface(java.lang,"Runnable"); - - - -;(function(){var P$=java.lang,p$1={},I$=[[0,'java.util.stream.StreamSupport','java.util.Spliterators','java.lang.CharSequence$lambda1','java.lang.CharSequence$lambda2',['java.lang.CharSequence','.LinesSpliterator']]] -,I$0=I$[0],$I$=function(i,n,m){return m?$I$(i)[n].apply(null,m):((i=(I$[i]||(I$[i]=Clazz.load(I$0[i])))),!n&&i.$load$&&Clazz.load(i,2),i)}; - -var C$=Clazz.newInterface(P$, "CharSequence"); - -C$.$classes$=[['LinesSpliterator',25]]; - -Clazz.newMeth(C$, 'lines$S', function (s) { - return $I$(1,"stream$java_util_Spliterator$Z",[Clazz.new_([s.getBytes$()],$I$(5,1).c$$BA), false]); - }, 1); - -;(function(){/*c*/var C$=Clazz.newClass(P$.CharSequence, "LinesSpliterator", function(){ - Clazz.newInstance(this, arguments[0],false,C$); - }, null, 'java.util.Spliterator'); - - C$.$clinit$=2; - - Clazz.newMeth(C$, '$init$', function () { - },1); - - C$.$fields$=[['I',['index','fence'],'O',['value','byte[]']]] - - Clazz.newMeth(C$, 'c$$BA', function (value) { - C$.c$$BA$I$I.apply(this, [value, 0, value.length]); - }, 1); - - Clazz.newMeth(C$, 'c$$BA$I$I', function (value, start, length) { - ;C$.$init$.apply(this); - this.value=value; - this.index=start; - this.fence=start + length; - }, 1); - - Clazz.newMeth(C$, 'indexOfLineSeparator$I', function (start) { - for (var current=start; current < this.fence; current++) { - var ch=this.value[current]; - if (ch == 10 || ch == 13 ) { - return current; - }} - return this.fence; - }, p$1); - - Clazz.newMeth(C$, 'skipLineSeparator$I', function (start) { - if (start < this.fence) { - if (this.value[start] == 13 ) { - var next=start + 1; - if (next < this.fence && this.value[next] == 10 ) { - return next + 1; - }}return start + 1; - }return this.fence; - }, p$1); - - Clazz.newMeth(C$, 'next', function () { - var start=this.index; - var end=p$1.indexOfLineSeparator$I.apply(this, [start]); - this.index=p$1.skipLineSeparator$I.apply(this, [end]); - return String.instantialize(this.value, start, end - start); - }, p$1); - - Clazz.newMeth(C$, 'tryAdvance$java_util_function_Consumer', function (action) { - if (action == null ) { - throw Clazz.new_(Clazz.load('NullPointerException').c$$S,["tryAdvance action missing"]); - }if (this.index != this.fence) { - action.accept$O(p$1.next.apply(this, [])); - return true; - }return false; - }); - - Clazz.newMeth(C$, 'forEachRemaining$java_util_function_Consumer', function (action) { - if (action == null ) { - throw Clazz.new_(Clazz.load('NullPointerException').c$$S,["forEachRemaining action missing"]); - }while (this.index != this.fence){ - action.accept$O(p$1.next.apply(this, [])); - } - }); - - Clazz.newMeth(C$, 'trySplit$', function () { - var half=(this.fence + this.index) >>> 1; - var mid=p$1.skipLineSeparator$I.apply(this, [p$1.indexOfLineSeparator$I.apply(this, [half])]); - if (mid < this.fence) { - var start=this.index; - this.index=mid; - return Clazz.new_(C$.c$$BA$I$I,[this.value, start, mid - start]); - }return null; - }); - - Clazz.newMeth(C$, 'estimateSize$', function () { - return this.fence - this.index + 1; - }); - - Clazz.newMeth(C$, 'characteristics$', function () { - return 1296; - }); - - Clazz.newMeth(C$); - })() - -C$.$defaults$ = function(C$){ - -Clazz.newMeth(C$, 'chars$', function () { -return $I$(1).intStream$java_util_function_Supplier$I$Z(((P$.CharSequence$lambda1|| -(function(){var C$=Clazz.newClass(P$, "CharSequence$lambda1", function(){Clazz.newInstance(this, arguments[0],1,C$);}, null, 'java.util.function.Supplier', 1); - -C$.$clinit$ = 1; - -Clazz.newMeth(C$, '$init$', function () {}, 1); -/* lambda_E */ -Clazz.newMeth(C$, 'get$', function () { return($I$(2).spliterator$java_util_PrimitiveIterator_OfInt$J$I(Clazz.new_(CharSequence$1CharIterator.$init$, [this, null]), this.b$['CharSequence'].length$(), 16));}); -})() -), Clazz.new_($I$(3).$init$, [this, null])), 16464, false); -}); - -Clazz.newMeth(C$, 'codePoints$', function () { -return $I$(1).intStream$java_util_function_Supplier$I$Z(((P$.CharSequence$lambda2|| -(function(){var C$=Clazz.newClass(P$, "CharSequence$lambda2", function(){Clazz.newInstance(this, arguments[0],1,C$);}, null, 'java.util.function.Supplier', 1); - -C$.$clinit$ = 1; - -Clazz.newMeth(C$, '$init$', function () { -}, 1); -/* lambda_E */ -Clazz.newMeth(C$, 'get$', function () { return($I$(2).spliteratorUnknownSize$java_util_PrimitiveIterator_OfInt$I(Clazz.new_(CharSequence$1CodePointIterator.$init$, [this, null]), 16));}); -})() -), Clazz.new_($I$(4).$init$, [this, null])), 16, false); -}); -};; -(function(){var C$=Clazz.newClass(P$, "CharSequence$1CharIterator", function(){ -Clazz.newInstance(this, arguments[0],true,C$); -}, null, [['java.util.PrimitiveIterator','java.util.PrimitiveIterator.OfInt']], 2); - -C$.$clinit$ = 1; - -Clazz.newMeth(C$, '$init0$', function () { -var c;if((c = C$.superclazz) && (c = c.$init0$))c.apply(this); -this.cur = 0; -}, 1); - -Clazz.newMeth(C$, '$init$', function () { -this.cur = 0; -}, 1); - -Clazz.newMeth(C$, 'hasNext$', function () { -return this.cur < this.b$['CharSequence'].length$(); -}); - -Clazz.newMeth(C$, 'nextInt$', function () { -if (this.hasNext$()) { -return this.b$['CharSequence'].charAt$I.apply(this.b$['CharSequence'], [this.cur++]).$c(); -} else { -throw Clazz.new_(Clazz.load('java.util.NoSuchElementException')); -}}); - -Clazz.newMeth(C$, ['forEachRemaining$java_util_function_IntConsumer','forEachRemaining$O'], function (block) { -for (; this.cur < this.b$['CharSequence'].length$(); this.cur++) { -block.accept$I(this.b$['CharSequence'].charAt$I(this.cur).$c()); -} -}); - -Clazz.newMeth(C$); -})() -; -; -(function(){var C$=Clazz.newClass(P$, "CharSequence$1CodePointIterator", function(){ -Clazz.newInstance(this, arguments[0],true,C$); -}, null, [['java.util.PrimitiveIterator','java.util.PrimitiveIterator.OfInt']], 2); - -C$.$clinit$ = 1; - -Clazz.newMeth(C$, '$init0$', function () { -var c;if((c = C$.superclazz) && (c = c.$init0$))c.apply(this); -this.cur = 0; -}, 1); - -Clazz.newMeth(C$, '$init$', function () { -this.cur = 0; -}, 1); - -Clazz.newMeth(C$, ['forEachRemaining$java_util_function_IntConsumer','forEachRemaining$O'], function (block) { -var length = this.b$['CharSequence'].length$(); -var i = this.cur; -try { -while (i < length){ -var c1 = this.b$['CharSequence'].charAt$I(i++); -if (!Character.isHighSurrogate$C(c1) || i >= length ) { -block.accept$I(c1.$c()); -} else { -var c2 = this.b$['CharSequence'].charAt$I(i); -if (Character.isLowSurrogate$C(c2)) { -i++; -block.accept$I(Character.toCodePoint$C$C(c1, c2)); -} else { -block.accept$I(c1.$c()); -}}} -} finally { -this.cur=i; -} -}); - -Clazz.newMeth(C$, 'hasNext$', function () { -return this.cur < this.b$['CharSequence'].length$(); -}); - -Clazz.newMeth(C$, 'nextInt$', function () { -var length = this.b$['CharSequence'].length$(); -if (this.cur >= length) { -throw Clazz.new_(Clazz.load('java.util.NoSuchElementException')); -}var c1 = this.b$['CharSequence'].charAt$I.apply(this.b$['CharSequence'], [this.cur++]); -if (Character.isHighSurrogate$C(c1) && this.cur < length ) { -var c2 = this.b$['CharSequence'].charAt$I.apply(this.b$['CharSequence'], [this.cur]); -if (Character.isLowSurrogate$C(c2)) { -this.cur++; -return Character.toCodePoint$C$C(c1, c2); -}}return c1.$c(); -}); - -Clazz.newMeth(C$); -})() -})(); - -// ////// (int) conversions ////////// - -// deprecated -Clazz.doubleToInt = Clazz.floatToInt = function (x) { - // asm.js-style conversion - return x|0; -}; - - -// /////////////////////////////// Array additions -// ////////////////////////////// -// -// BH: these are necessary for integer processing, especially -// -// - -var arraySlice = function(istart, iend) { - // could be Safari or could be fake - istart || (istart = 0); - iend || (iend = this.length); - var b = new this.constructor(this.buffer.slice(istart * this.__BYTESIZE, iend * this.__BYTESIZE)); - b.__BYTESIZE = a.__BYTESIZE; - b.__ARRAYTYPE = a.__ARRAYTYPE; -}; - -var setAType = function (IntXArray, nBytes, atype) { - if (!IntXArray) - alert("SwingJS will not work in this Browser") - if (!IntXArray.prototype.sort) - IntXArray.prototype.sort = Array.prototype.sort - if (!IntXArray.prototype.slice) - IntXArray.prototype.slice = function() {return arraySlice.apply(this, arguments)}; - IntXArray.prototype.clone$ = function() { - return copyArrayProps(this, this.slice()); - }; -} - -setAType(Int8Array, 1, "BA"); -setAType(Int16Array, 2, "HA"); -setAType(Int32Array, 4, "IA"); -setAType(Float64Array, 8, "DA"); - -java.lang.Object = Clazz._O; - -// ////////////////////////// hotspot and unloading //////////////////// - -// not implemented in SwingJS - -// ////////////////////////// class loader ///////////////////////////// - -/******************************************************************************* - * Copyright (c) 2007 java2script.org and others. All rights reserved. This - * program and the accompanying materials are made available under the terms of - * the Eclipse Public License v1.0 which accompanies this distribution, and is - * available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: Zhou Renjian - initial API and implementation - ******************************************************************************/ -/******************************************************************************* - * @author zhou renjian - * @create July 10, 2006 - ******************************************************************************/ - -Clazz._Loader = function () {}; - -;(function(Clazz, _Loader) { - -// The class loader is always accessed through Class. -// See Class.java for implementations of the methods of java.lang.ClassLoader -// such as getSystemResource and getResource - -java.lang.ClassLoader = _Loader; -// BH windows-level only because it's java.lang -ClassLoader = _Loader; - - -_Loader.__CLASS_NAME__ = "ClassLoader"; - -Clazz.allClasses["java.lang.ClassLoader"] = _Loader; -_Loader.sysLoader = null; - -_Loader.getSystemClassLoader$ = function() { - return (_Loader.sysLoader ? _Loader.sysLoader : (_Loader.sysLoader = new Class().getClassLoader$())); -}; - - -var assertionStatus = {}; - -_Loader.getSystemResource$S = function(name) { - return _Loader.getSystemClassLoader$().getResource$(name); -} - -_Loader.getSystemResources$S = function(name) { - return _Loader.getSystemClassLoader$().getResources$(name); -} - -_Loader.getSystemResourceAsStream$S = function(name) { - return _Loader.getSystemClassLoader$().getResourceAsStream$(name); -} - -_Loader.getClassAssertionStatus$ = function(clazz) { // harmony - var ret; - var clazzName = clazz.__CLASS_NAME__ + "."; - for (var c in assertionStatus) { - if (clazzName.indexOf(c) == 0) { - ret = assertionStatus[c]; - break; - } - } - return (ret === false ? false : ret || Clazz.defaultAssertionStatus); -} - -_Loader.prototype.hashCode$ = function(){return 1}; - - -_Loader.prototype.getPackage$S = function (name) { return Clazz.new_(Clazz.load("java.lang.Package").c$$S$O, [name, Clazz._allPackage[name]]); }; - - -_Loader.prototype.setDefaultAssertionStatus$Z = function(tf) { - Clazz.defaultAssertionStatus = tf; -}; - -_Loader.prototype.clearAssertionStatus$ = function() { - assertionStatus = {}; - Clazz.defaultAssertionStatus = false; -} - -_Loader.prototype.setClassAssertionStatus$S$Z = _Loader.prototype.setPackageAssertionStatus$S$Z = function(clazzName, tf) { - Clazz.allClasses[clazzName] && (Clazz.allClasses[clazzName].$_ASSERT_ENABLED_ = tf); - assertionStatus[clazzName + "."] = tf; -}; - -_Loader.prototype.loadClass$S = function(clazzName) { - return Clazz.forName(clazzName); -} - - -_Loader._checkLoad = J2S._checkLoad; - -_Loader._TODO = []; - -_Loader.doTODO = function() { - while (_Loader._TODO.length) { - var f = _Loader._TODO.shift(); - f(); - } -} - -var loaders = []; - -/* public */ -_Loader.requireLoaderByBase = function (base) { - for (var i = 0; i < loaders.length; i++) { - if (loaders[i].$_$base == base) { - return loaders[i]; - } - } - var loader = new _Loader (); - loader.$_$base = base; - loaders.push(loader); - return loader; -}; - -/** - * - * Try to be compatible with Clazz system. In original design _Loader and Clazz - * are independent! -- zhourenjian @ December 23, 2006 - */ -var isClassdefined; -var definedClasses; - -if (self.Clazz && Clazz._isClassDefined) { - isClassDefined = Clazz._isClassDefined; -} else { - definedClasses = {}; - isClassDefined = function (clazzName) { - return definedClasses[clazzName] == true; - }; -} - -/* private */ -var classpathMap = Clazz.classpathMap = {}; - -/* public */ -_Loader.loadPackageClasspath = function (pkg, base, isIndex, fSuccess, mode, pt) { - var map = classpathMap; - mode || (mode = 0); - fSuccess || (fSuccess = null); - pt || (pt = 0); - - /* - * In some situation, maybe, _Loader.packageClasspath ("java", ..., true); - * is called after other _Loader#packageClasspath, e.g. - * _Loader.packageClasspath ("org.eclipse.swt", "...", true); - * _Loader.packageClasspath ("java", "...", true); which is not - * recommended. But _Loader should try to adjust orders which requires - * "java" to be declared before normal _Loader #packageClasspath call before - * that line! And later that line should never initialize "java/package.js" - * again! - */ - var isPkgDeclared = (isIndex && map["@" + pkg]); - if (mode == 0 && isIndex && !map["@java"] && pkg.indexOf ("java") != 0 && needPackage("java")) { - _Loader.loadPackage("java", fSuccess ? function(_package){_Loader.loadPackageClasspath(pkg, base, isIndex, fSuccess, 1)} : null); - if (fSuccess) - return; - } - if (pkg instanceof Array) { - unwrapArray(pkg); - if (fSuccess) { - if (pt < pkg.length) - _Loader.loadPackageClasspath(pkg[pt], base, isIndex, function(_loadPackageClassPath){_Loader.loadPackageClasspath(pkg, base, isIndex, fSuccess, 1, pt + 1)}, 1); - else - fSuccess(); - } else { - for (var i = 0; i < pkg.length; i++) - _Loader.loadPackageClasspath(pkg[i], base, isIndex, null); - } - return; - } - switch (pkg) { - case "java.*": - pkg = "java"; - // fall through - case "java": - if (base) { - // support ajax for default - var key = "@net.sf.j2s.ajax"; - if (!map[key]) - map[key] = base; - key = "@net.sf.j2s"; - if (!map[key]) - map[key] = base; - } - break; - case "swt": - pkg = "org.eclipse.swt"; - break; - case "ajax": - pkg = "net.sf.j2s.ajax"; - break; - case "j2s": - pkg = "net.sf.j2s"; - break; - default: - if (pkg.lastIndexOf(".*") == pkg.length - 2) - pkg = pkg.substring(0, pkg.length - 2); - break; - } - if (base) // critical for multiple applets - map["@" + pkg] = base; - if (isIndex && !isPkgDeclared && !J2S.getGlobal(pkg + ".registered")) { - // the package idea has been deprecated - // the only package is core/package.js - if (pkg == "java") - pkg = "core" // JSmol -- moves java/package.js to core/package.js - // not really asynchronous - _Loader.loadClass(pkg + ".package", null, true, true, 1); - } - fSuccess && fSuccess(); -}; - - - -/** - * BH: allows user/developer to load classes even though wrapping and Google - * Closure Compiler has not been run on the class. - * - * Does initialize fully. - * - * - * - */ -Clazz.loadClass = function (name, onLoaded, async) { - if (!self.Class) { - Class = Clazz; - Class.forName = Clazz.forName; - // maybe more here - } - if (!name) - return null; - if (!async) - return Clazz._4Name(name, null, null, true, true); - - _Loader.loadClass(name, function() { - var cl = Clazz._getDeclared(name); - onLoaded(cl && Clazz._initClass(cl, 1, 1)); - }, true, async, 1); - return true; - -} - -/** - * Load the given class ant its related classes. - */ -/* public */ -_Loader.loadClass = _Loader.prototype.loadClass = function (name, onLoaded, forced, async, mode) { - - mode || (mode = 0); // BH: not implemented - (async == null) && (async = false); - - if (typeof onLoaded == "boolean") - return evalType(name); - - // System.out.println("loadClass " + name) - var path = _Loader.getClasspathFor(name); - lastLoaded = name; - Clazz.loadScript(path, name); - } - -/* private */ -_Loader.loadPackage = function(pkg, fSuccess) { - fSuccess || (fSuccess = null); - J2S.setGlobal(pkg + ".registered", false); - _Loader.loadPackageClasspath(pkg, - (_Loader.J2SLibBase || (_Loader.J2SLibBase = (_Loader.getJ2SLibBase() || "j2s/"))), - true, fSuccess); -}; - -/** - * Register classes to a given *.z.js path, so only a single *.z.js is loaded - * for all those classes. - */ -/* public */ -_Loader.jarClasspath = function (jar, clazzes) { - if (!(clazzes instanceof Array)) - clazzes = [clazzes]; - unwrapArray(clazzes); - if (J2S._debugCore) - jar = jar.replace(/\.z\./, ".") - for (var i = clazzes.length; --i >= 0;) { - clazzes[i] = clazzes[i].replace(/\//g,".").replace(/\.js$/g,"") - classpathMap["#" + clazzes[i]] = jar; - } - classpathMap["$" + jar] = clazzes; -}; - -_Loader.setClasspathFor = function(clazzes) { -// Clazz._Loader.setClasspathFor("edu/colorado/phet/idealgas/model/PressureSensingBox.ChangeListener"); - if (!(clazzes instanceof Array)) - clazzes = [clazzes]; - for (var i = clazzes.length; --i >= 0;) { - var path = clazzes[i]; - var jar = _Loader.getJ2SLibBase() + path.split(".")[0]+".js"; - path = path.replace(/\//g,"."); - classpathMap["#" + path] = jar; - var a = classpathMap["$" + jar] || (classpathMap["$" + jar] = []); - a.push(path); - } -} - - -/** - * Usually be used in .../package.js. All given packages will be registered to - * the same classpath of given prefix package. - */ -/* public */ -_Loader.registerPackages = function (prefix, pkgs) { - // _Loader.checkInteractive (); - var base = _Loader.getClasspathFor(prefix + ".*", true); - for (var i = 0; i < pkgs.length; i++) { - Clazz.newPackage(prefix + "." + pkgs[i]); - _Loader.loadPackageClasspath(prefix + "." + pkgs[i], base); - } - -}; - -/** - * Return the *.js path of the given class. Maybe the class is contained in a - * *.z.js jar file. - * - * @param clazz - * Given class that the path is to be calculated for. May be - * java.package, or java.lang.String - * @param forRoot - * Optional argument, if true, the return path will be root of the - * given classs' package root path. - * @param ext - * Optional argument, if given, it will replace the default ".js" - * extension. - */ -/* public */ -_Loader.getClasspathFor = function (clazz, forRoot, ext) { - var path = classpathMap["#" + clazz]; - if (!path || forRoot || ext) { - var base; - var idx; - if (path) { - clazz = clazz.replace(/\./g, "/"); - if ((idx = path.lastIndexOf(clazz)) >= 0 - || (idx = clazz.lastIndexOf("/")) >= 0 - && (idx = path.lastIndexOf(clazz.substring(0, idx))) >= 0) - base = path.substring(0, idx); - } else { - idx = clazz.length + 2; - while ((idx = clazz.lastIndexOf(".", idx - 2)) >= 0) - if ((base = classpathMap["@" + clazz.substring(0, idx)])) - break; - if (!forRoot) - clazz = clazz.replace (/\./g, "/"); - } - if (base == null) { - var bins = "binaryFolders"; - base = (Clazz[bins] && Clazz[bins].length ? Clazz[bins][0] - : _Loader[bins] && _Loader[bins].length ? _Loader[bins][0] - : "j2s"); - } - path = (base.lastIndexOf("/") == base.length - 1 ? base : base + "/") + (forRoot ? "" - : clazz.lastIndexOf("/*") == clazz.length - 2 ? clazz.substring(0, idx + 1) - : clazz + (!ext ? ".js" : ext.charAt(0) != '.' ? "." + ext : ext)); - } - return path;// _Loader.multipleSites(path); -}; - -/** - * page-customizable callbacks - * - */ -/* public */ -_Loader.onScriptLoading = function (file){J2S._verbose && System.out.println("Classloader.onscriptloading " + file);}; - -/* public */ -_Loader.onScriptLoaded = function (file, isError, data){}; - -/* public */ -_Loader.onScriptInitialized = function (file){}; // not implemented - -/* public */ -_Loader.onScriptCompleted = function (file){}; // not implemented - -/* public */ -_Loader.onClassUnloaded = function (clazz){}; // not implemented - -/* private */ -var isClassExcluded = function (clazz) { - return excludeClassMap["@" + clazz]; -}; - -/* Used to keep ignored classes */ -/* private */ -var excludeClassMap = {}; - -Clazz._lastEvalError = null; - -/* private */ -var evaluate = function(file, js) { - try { - if (J2S._useEval) - eval(js + ";//# sourceURL="+file) - else - new Function((J2S._strict ? '"use strict";':'')+js + ";//# sourceURL="+file)(); - } catch (e) { - var s = "[Java2Script] The required class file \n\n" + file + (js.indexOf("data: no") ? - "\nwas not found.\n" - : "\ncould not be loaded. Script error: " + e.message + " \n\ndata:\n\n" + js) + "\n\n" - + (e.stack ? e.stack : Clazz._getStackTrace()); - Clazz._lastEvalError = s; - if (Clazz._isQuietLoad) - return; - Clazz.alert(s); - throw e; - } -} - -Clazz._initClass = function(c,clinit,statics,objThis) { - var f; - return clinit && (f=c.$clinit$) && (f === 1 || f === 2 ? Clazz.load(c,1) : f && typeof f == "function"? f() : 0), - statics && c.$load$ && Clazz.load(c, 2), - objThis && (f=c.$init0$) && f.apply(objThis), - c; -} - -Clazz._getClassCount = function() { - var n = 0; - for (var c in Clazz.allClasses){n++}; - return n; -} - -Clazz._4Name = function(clazzName, applet, state, asClazz, initialize, isQuiet) { - // applet and state always null in SwingJS - var cl; - if (clazzName.indexOf("[") == 0) { - cl = getArrayClass(clazzName); - return (asClazz ? cl.$clazz$ : cl); - } - if (clazzName.indexOf(".") < 0) - clazzName = "java.lang." + clazzName; - var isok = Clazz._isClassDefined(clazzName); - if (isok && asClazz) { - return Clazz._initClass(Clazz.allClasses[clazzName],1,1); - } - if (!isok) { - var name2 = null; - var pt = clazzName.lastIndexOf("$"); - if (pt >= 0) { - // BH we allow Java's java.swing.JTable.$BooleanRenderer as a stand-in - // for java.swing.JTable.BooleanRenderer - // when the static nested class is created using declareType - name2 = clazzName.replace(/\$/g,"."); - if (Clazz._isClassDefined(name2)) { - clazzName = name2; - } else { - cl = Clazz._4Name(clazzName.substring(0, pt), applet, state, true, initialize, isQuiet); - cl && (clazzName = name2); - name2 = null; - } - } - if (name2 == null) { - var f = (J2S._isAsync && applet ? applet._restoreState(clazzName, state) : null); - if (f == 1) - return null; // must be already being created - if (_Loader.setLoadingMode(f ? _Loader.MODE_SCRIPT : "xhr.sync")) { - _Loader.loadClass(clazzName, f, false, true, 1); - return null; // this will surely throw an error, but that is OK - } - // alert ("Using Java reflection: " + clazzName + " for " + applet._id + - // " \n"+ Clazz._getStackTrace()); - _Loader.loadClass(clazzName); - } - } - cl = evalType(clazzName); - if (!cl){ - if (isQuiet || Clazz._isQuietLoad) - return null; - alert(clazzName + " could not be loaded"); - doDebugger(); - } - Clazz._setDeclared(clazzName, cl); - // note triple== here - Clazz._initClass(cl, initialize !== false, initialize === true); - return (asClazz ? cl : Clazz.getClass(cl)); -}; - -// BH: possibly useful for debugging -Clazz.currentPath= ""; - - -Clazz.loadScript = function(file, nameForList) { - - Clazz.currentPath = file; - // loadedScripts[file] = true; - // also remove from queue - // removeArrayItem(classQueue, file); - - var file0 = file; - if (J2S._nozcore) { - file = file.replace(/\.z\.js/,".js"); - } - var data = ""; - try{ - _Loader.onScriptLoading(file); - data = J2S.getFileData(file); - evaluate(file, data); - if (nameForList) - Clazz.ClassFilesLoaded.push(nameForList.replace(/\./g,"/") + ".js"); - _Loader.onScriptLoaded(file, null, data); - }catch(e) { - Clazz.ClassFilesLoaded.pop(); - _Loader.onScriptLoaded(file, e, data); - var s = ""+e; - if (data.indexOf("Error") >= 0) - s = data; - if (s.indexOf("missing ] after element list")>= 0) - s = "File not found"; - if (file.indexOf("/j2s/core/") >= 0) { - System.out.println(s + " loading " + file); - } else { - alert(s + " loading file " + file + "\n\n" + e.stack); - doDebugger() - - } - } -} - -/** - * Used in package /* public - */ -var runtimeKeyClass = _Loader.runtimeKeyClass = "java.lang.String"; - -/* private */ -var J2sLibBase; - -/** - * Return J2SLib base path from existed SCRIPT src attribute. - */ -/* public */ -_Loader.getJ2SLibBase = function () { - var o = J2S.getGlobal("j2s.lib"); - return (o ? o.base + (o.alias == "." ? "" : (o.alias ? o.alias : (o.version ? o.version : "1.0.0")) + "/") : null); -}; - -/** - * Indicate whether _Loader is loading script synchronously or asynchronously. - */ -/* private */ -var isAsynchronousLoading = true; - -/* private */ -var isUsingXMLHttpRequest = false; - -/* private */ -var loadingTimeLag = -1; - -_Loader.MODE_SCRIPT = 4; -_Loader.MODE_XHR = 2; -_Loader.MODE_SYNC = 1; - -// Integer mode: Script 4; XHR 2; SYNC bit 1; -// async is currently ignored - -/* public */ -_Loader.setLoadingMode = function (mode, timeLag) { - var async = true; - var ajax = true; - if (typeof mode == "string") { - mode = mode.toLowerCase(); - if (mode.indexOf("script") >= 0) - ajax = false; - else - async = (mode.indexOf("async") >=0); - async = false; // BH - } else { - if (mode & _Loader.MODE_SCRIPT) - ajax = false; - else - async = !(mode & _Loader.MODE_SYNC); - } - isUsingXMLHttpRequest = ajax; // ignored - isAsynchronousLoading = async; // ignored - loadingTimeLag = (async && timeLag >= 0 ? timeLag: -1); // ignored - return async; // will be false -}; - -/* - * Load those key *.z.js. This *.z.js will be surely loaded before other queued - * *.js. - */ -/* public */ -_Loader.loadZJar = function (zjarPath, keyClass) { -// used only by package.js for core.z.js - var f = null; - var isArr = (keyClass instanceof Array); - if (isArr) - keyClass = keyClass[keyClass.length - 1]; -// else - // f = (keyClass == runtimeKeyClass ? runtimeLoaded : null); - _Loader.jarClasspath(zjarPath, isArr ? keyClass : [keyClass]); - // BH note: runtimeKeyClass is java.lang.String - _Loader.loadClass(keyClass, null, true); -}; - -Clazz.binaryFolders = _Loader.binaryFolders = [ _Loader.getJ2SLibBase() ]; - -})(Clazz, Clazz._Loader); - -// } -/******************************************************************************* - * Copyright (c) 2007 java2script.org and others. All rights reserved. This - * program and the accompanying materials are made available under the terms of - * the Eclipse Public License v1.0 which accompanies this distribution, and is - * available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: Zhou Renjian - initial API and implementation - ******************************************************************************/ -/******************************************************************************* - * @author zhou renjian - * @create Jan 11, 2007 - ******************************************************************************/ - -Clazz._LoaderProgressMonitor = {}; - -;(function(CLPM, J2S) { - -var fadeOutTimer = null; -var fadeAlpha = 0; -var monitorEl = null; -var lastScrollTop = 0; -var bindingParent = null; - -CLPM.DEFAULT_OPACITY = (J2S && J2S._j2sLoadMonitorOpacity ? J2S._j2sLoadMonitorOpacity : 55); - -/* public */ -CLPM.hideMonitor = function () { - monitorEl.style.display = "none"; -} - -/* public */ -CLPM.showStatus = function (msg, fading) { - if (!monitorEl) { - createHandle (); - if (!attached) { - attached = true; - // Clazz.addEvent (window, "unload", cleanup); - // window.attachEvent ("onunload", cleanup); - } - } - clearChildren(monitorEl); - if (msg == null) { - if (fading) { - fadeOut(); - } else { - CLPM.hideMonitor(); - } - return; - } - - monitorEl.appendChild(document.createTextNode ("" + msg)); - if (monitorEl.style.display == "none") { - monitorEl.style.display = ""; - } - setAlpha(CLPM.DEFAULT_OPACITY); - var offTop = getFixedOffsetTop(); - if (lastScrollTop != offTop) { - lastScrollTop = offTop; - monitorEl.style.bottom = (lastScrollTop + 4) + "px"; - } - if (fading) { - fadeOut(); - } -}; - -/* private static */ -var clearChildren = function (el) { - if (!el) - return; - for (var i = el.childNodes.length; --i >= 0;) { - var child = el.childNodes[i]; - if (!child) - continue; - if (child.childNodes && child.childNodes.length) - clearChildren (child); - try { - el.removeChild (child); - } catch (e) {}; - } -}; -/* private */ -var setAlpha = function (alpha) { - if (fadeOutTimer && alpha == CLPM.DEFAULT_OPACITY) { - window.clearTimeout (fadeOutTimer); - fadeOutTimer = null; - } - fadeAlpha = alpha; - // monitorEl.style.filter = "Alpha(Opacity=" + alpha + ")"; - monitorEl.style.opacity = alpha / 100.0; -}; -/* private */ -var hidingOnMouseOver = function () { - CLPM.hideMonitor(); -}; - -/* private */ -var attached = false; -/* private */ -var cleanup = function () { - // if (monitorEl) { - // monitorEl.onmouseover = null; - // } - monitorEl = null; - bindingParent = null; - // Clazz.removeEvent (window, "unload", cleanup); - // window.detachEvent ("onunload", cleanup); - attached = false; -}; -/* private */ -var createHandle = function () { - var div = document.createElement ("DIV"); - div.id = "_Loader-status"; - div.style.cssText = "position:absolute;bottom:4px;left:4px;padding:2px 8px;" - + "z-index:" + (J2S.getGlobal("j2s.lib").monitorZIndex || 10000) + ";background-color:#8e0000;color:yellow;" - + "font-family:Arial, sans-serif;font-size:10pt;white-space:nowrap;"; - div.onmouseover = hidingOnMouseOver; - monitorEl = div; - if (bindingParent) { - bindingParent.appendChild(div); - } else { - document.body.appendChild(div); - } - return div; -}; -/* private */ - -var fadeOut = function () { - if (monitorEl.style.display == "none") return; - if (fadeAlpha == CLPM.DEFAULT_OPACITY) { - fadeOutTimer = window.setTimeout(function () { - fadeOut(); - }, 750); - fadeAlpha -= 5; - } else if (fadeAlpha - 10 >= 0) { - setAlpha(fadeAlpha - 10); - fadeOutTimer = window.setTimeout(function () { - fadeOut(); - }, 40); - } else { - monitorEl.style.display = "none"; - } -}; -/* private */ -var getFixedOffsetTop = function (){ - if (bindingParent) { - var b = bindingParent; - return b.scrollTop; - } - var dua = navigator.userAgent; - var b = document.body; - var p = b.parentNode; - var pcHeight = p.clientHeight; - var bcScrollTop = b.scrollTop + b.offsetTop; - var pcScrollTop = p.scrollTop + p.offsetTop; - return (dua.indexOf("Opera") < 0 && document.all ? (pcHeight == 0 ? bcScrollTop : pcScrollTop) - : dua.indexOf("Gecko") < 0 ? (pcHeight == p.offsetHeight - && pcHeight == p.scrollHeight ? bcScrollTop : pcScrollTop) : bcScrollTop); -}; - -// if (window["ClazzLoader"]) { -// _Loader.onScriptLoading = function(file) { -// CLPM.showStatus("Loading " + file + "..."); -// }; -// _Loader.onScriptLoaded = function(file, isError) { -// CLPM.showStatus(file + (isError ? " loading failed." : " loaded."), true); -// }; -// _Loader.onGlobalLoaded = function(file) { -// CLPM.showStatus("Application loaded.", true); -// }; -// _Loader.onClassUnloaded = function(clazz) { -// CLPM.showStatus("Class " + clazz + " is unloaded.", true); -// }; -// } - -})(Clazz._LoaderProgressMonitor, J2S); - -/******************************************************************************* - * Copyright (c) 2007 java2script.org and others. All rights reserved. This - * program and the accompanying materials are made available under the terms of - * the Eclipse Public License v1.0 which accompanies this distribution, and is - * available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: Zhou Renjian - initial API and implementation - ******************************************************************************/ -/******************************************************************************* - * @author zhou renjian - * @create Nov 5, 2005 - ******************************************************************************/ - -Clazz.Console = {}; - -;(function(Con) { -/** - * Setting maxTotalLines to -1 will not limit the console result - */ -Con.maxTotalLines = 10000; - -Con.setMaxTotalLines = function (lines) { - Con.maxTotalLines = (lines > 0 ? lines : 999999); -} - -Con.maxLatency = 40; - -Con.setMaxLatency = function (latency) { - Con.maxLatency = (latency > 0 ? latency : 40); -}; - -Con.pinning = false; - -Con.enablePinning = function (enabled) { - Con.pinning = enabled; -}; - -Con.linesCount = 0; - -Con.metLineBreak = false; - - -/* - * Give an extension point so external script can create and bind the console - * themself. - * - */ -Con.createConsoleWindow = function (parentEl) { - var console = document.createElement ("DIV"); - console.style.cssText = "font-family:monospace, Arial, sans-serif;"; - document.body.appendChild (console); - return console; -}; - -var c160 = String.fromCharCode(160); // nbsp; -c160 += c160+c160+c160; - -Con.consoleOutput = function (s, color) { - var con = consoleDiv; - if (con && typeof con == "string") - con = consoleDiv = document.getElementById(con) - if (!con) { - return false; // BH this just means we have turned off all console action - } - if (con == window.console) { - if (color == "red") - con.error(s); - else - con.log(s); - return; - } - - if (s == '\0') { - con.innerHTML = ""; - con.lineCount = 0; - return; - } - - if (Con.linesCount > Con.maxTotalLines) { - for (var i = 0; i < 1000; i++) { - if (con && con.childNodes.length > 0) { - con.removeChild(con.childNodes[0]); - } - } - Con.linesCount = Con.maxTotalLines - 1000; - } - - var willMeetLineBreak = false; - s = (typeof s == "undefined" ? "" : s == null ? "null" : "" + s); - s = s.replace (/\t/g, c160); - if (s.length > 0) - switch (s.charAt(s.length - 1)) { - case '\n': - case '\r': - s = (s.length > 1 ? s.substring (0, s.length - (s.charAt(s.length - 2) == '\r' ? 2 : 1)) : ""); - willMeetLineBreak = true; - break; - } - - var lines = null; - s = s.replace (/\t/g, c160); - lines = s.split(/\r\n|\r|\n/g); - for (var i = 0, last = lines.length - 1; i <= last; i++) { - var lastLineEl = null; - if (Con.metLineBreak || Con.linesCount == 0 - || con.childNodes.length < 1) { - lastLineEl = document.createElement ("DIV"); - con.appendChild (lastLineEl); - lastLineEl.style.whiteSpace = "nowrap"; - Con.linesCount++; - } else { - try { - lastLineEl = con.childNodes[con.childNodes.length - 1]; - } catch (e) { - lastLineEl = document.createElement ("DIV"); - con.appendChild (lastLineEl); - lastLineEl.style.whiteSpace = "nowrap"; - Con.linesCount++; - } - } - var el = document.createElement ("SPAN"); - lastLineEl.appendChild (el); - el.style.whiteSpace = "nowrap"; - if (color) - el.style.color = color; - var l = lines[i] - if (l.length == 0) - l = c160; - el.appendChild(document.createTextNode(l)); - if (!Con.pinning) - con.scrollTop += 100; - Con.metLineBreak = (i != last || willMeetLineBreak); - } - - var cssClazzName = con.parentNode.className; - if (!Con.pinning && cssClazzName - && cssClazzName.indexOf ("composite") != -1) { - con.parentNode.scrollTop = con.parentNode.scrollHeight; - } - Con.lastOutputTime = new Date ().getTime (); -}; - -/* - * Clear all contents inside the console. - */ -/* public */ -Con.clear = function () { - try { - Con.metLineBreak = true; - var console = consoleDiv; - if (console == window.console || !console || typeof console == "string" && !(console = document.getElementById (console))) - return; - console.innerHTML = ""; - Con.linesCount = 0; - } catch(e){}; -}; - -/* public */ -Clazz.alert = function (s) { - Con.consoleOutput (s + "\r\n"); -}; - -})(Clazz.Console); - -var getURIField = function(name, def) { - try { - var ref = document.location.href.toLowerCase(); - var i = ref.indexOf(name.toLowerCase() + "="); - if (i >= 0) - def = (document.location.href + "&").substring( - i + name.length + 1).split("&")[0]; - } catch (e) { - } finally { - return def; - } -} - -Clazz._setDeclared("java.lang.System", java.lang.System = System = {}); -;(function(C$){ - -C$.lineSeparator = "\n"; -C$.props = null; - -C$.setIn$java_io_InputStream=function ($in) { - C$.$in=$in; -} - -C$.setOut$java_io_PrintStream=function (out) { - C$.out=out; - out.println = out.println$S; - out.print = out.print$S; -} - -C$.setErr$java_io_PrintStream=function (err) { - C$.err=err; - err.println = err.println$S; - err.print = err.print$S; -} - -C$.console$=function () { - return null; -} - -C$.inheritedChannel$=function () { - return null; -} - -C$.setSecurityManager$SecurityManager=function (s) { -} - -C$.getSecurityManager$=function () { - return null; -} - -C$.currentTimeMillis$=function () { - { - return new Date().getTime(); -} -} - -C$.nanoTime$=function () { - { - return Math.round(window.performance.now() * 1e6); -} -} - -C$.arraycopy$O$I$O$I$I=function (src, srcPos, dest, destPos, length) { - - if (src !== dest || srcPos > destPos) { for (var i = length; --i >= 0;) dest[destPos++] = src[srcPos++]; } else { destPos += length; srcPos += length; for (var i = length; --i >= 0;) src[--destPos] = src[--srcPos]; } -} - -C$.identityHashCode$O=function (x, offset) { - return x==null ? 0 : x._$hashcode || (typeof x == "string" ? x.hashCode$() : (x._$hashcode = ++hashCode + (offset || 0))); -} - -C$.getProperties$=function () { - if (C$.props == null ) - C$.props=Clazz.new_("java.util.Properties"); - for (a in sysprops) - C$.props.put$O$O(a, sysprops[a]); - return C$.props; -} - -C$.lineSeparator$=function () { - return C$.lineSeparator; -} - -C$.setProperties$java_util_Properties=function (props) { - C$.props = props; -} - -C$.getProperty$S=function (key) { - if (key == "java.awt.headless") - return Clazz._isHeadless; - C$.checkKey$S(key); - var p = (C$.props == null ? sysprops[key] : C$.props.getProperty$S(key)) - return (p == null ? null : p); -} - -C$.getProperty$S$S=function (key, def) { - C$.checkKey$S(key); - if (C$.props == null) { - var prop = sysprops[key]; - return (prop == null ? def : prop); - } - return C$.props.getProperty$S$S(key, def); -} - -C$.setProperty$S$S=function (key, value) { - C$.checkKey$S(key); - var ret; - if (C$.props == null) { - ret = sysprops[key]; - sysprops[key] = value; - return ret || null; - } - return C$.props.setProperty$S$S(key, value); -} - -C$.clearProperty$S=function (key) { - C$.checkKey$S(key); - return (C$.props == null ? null : C$.props.remove$O(key)); -} - -C$.checkKey$S=function (key) { - if (key == null ) { - throw Clazz.new_(Clazz.load('NullPointerException').c$$S,["key can\'t be null"]); - }if (key.equals$O("")) { - throw Clazz.new_(Clazz.load('IllegalArgumentException').c$$S,["key can\'t be empty"]); - } -} - -C$.getenv$S=function (name) { - var s = J2S.getGlobal(name) || getURIField(name, null); - return s || null; -} - -var env = null; - -C$.getenv$=function () { - return env || (env = Clazz.load("java.util.Properties")); -} - - - -C$.exit$I=function (status) { - Clazz.loadClass("java.lang.Runtime").getRuntime$().exit$I(status | 0); -} - -C$.gc$=C$.runFinalization$=C$.runFinalizersOnExit$Z=C$.load$S=C$.loadLibrary$S=C$.mapLibraryName$S= - function (libname) {return null;} - -var fixAgent = function(agent) {return "" + ((agent = agent.split(";")[0]), - (agent + (agent.indexOf("(") >= 0 && agent.indexOf(")") < 0 ? ")" : ""))) } - - var agent = navigator.userA; - var sysprops = { - "file.separator" : "/", - "line.separator" : "\n", - "java.awt.printerjob" : "swingjs.JSPrinterJob", - "java.class.path" : "/", - "java.class.version" : "80", - "java.home" : "https://.", - "java.vendor" : "java2script/SwingJS/OpenJDK", - "java.vendor.url" : "https://github.com/BobHanson/java2script", - "java.version" : "1.8", - "java.vm.name":"Java SwingJS", - "java.vm.version" : "1.8", - "java.specification.version" : "1.8", - "java.io.tmpdir" : J2S.getGlobal("j2s.tmpdir"), - "os.arch" : navigator.userAgent, - "os.name" : fixAgent(navigator.userAgent).split("(")[0], - "os.version": fixAgent(navigator.appVersion).replace(fixAgent(navigator.userAgent), ""), - "path.separator" : ":", - "user.dir" : "/TEMP/swingjs", - "user.home" : "/TEMP/swingjs", - "user.name" : "swingjs", - "javax.xml.datatype.DatatypeFactory" : "swingjs.xml.JSJAXBDatatypeFactory", - "javax.xml.bind.JAXBContextFactory" : "swingjs.xml.JSJAXBContextFactory" - } - - -})(System); - -;(function(Con, Sys) { - -Sys.exit$ = Sys.exit$I; - -Sys.out = new Clazz._O (); -Sys.out.__CLASS_NAME__ = "java.io.PrintStream"; -Sys.err = new Clazz._O (); -Sys.err.__CLASS_NAME__ = "java.io.PrintStream"; - -var checkTrace = function(s) { - if (J2S._nooutput || !J2S._traceFilter && !J2S._traceOutput) return; - if (J2S._traceFilter) { - if ((s= "" + s).indexOf(J2S._traceFilter) < 0) - return; - } else if (!(s = "" + s) || s.indexOf(J2S._traceOutput) < 0 && '"' + s + '"' != J2S._traceOutput) { - return; - } - alert(s + "\n\n" + Clazz._getStackTrace()); - doDebugger(); -} - -var setps = function(ps, f) { - -ps.flush$ = function() {} - -ps.print = ps.print$ = ps.print$O = ps.print$Z = ps.print$I = ps.print$S = ps.print$C = function (s) { - checkTrace(s); - f("" + s); -}; - -ps.print$J = function(l) {ps.print(Long.$s(l))} -ps.print$F = ps.print$D = function(f) { - var s = "" + f; - ps.println(s.indexOf(".") < 0 && s.indexOf("Inf") < 0 ? s + ".0" : s); -} - -ps.printf = ps.printf$S$OA = ps.format = ps.format$S$OA = function (f, args) { - ps.print(String.format$S$OA.apply(null, arguments)); -} - -ps.println = ps.println$ = ps.println$Z = ps.println$I = ps.println$S = ps.println$C = ps.println$O = function(s) { - checkTrace(s); - f((s && s.toString ? s.toString() : "" + s) + "\r\n"); -}; - -ps.println$J = function(l) {ps.println(Long.$s(l))} -ps.println$F = ps.println$D = function(f) { - var s = "" + f; - ps.println(s.indexOf(".") < 0 && s.indexOf("Inf") < 0 ? s + ".0" : s); -} - -ps.write$I = function(ch) { - ps.print(String.fromCharCode(ch)); -} - -ps.write$BA = function (buf) { - ps.write$BA$I$I(buf, 0, buf.length); -}; - -ps.write$BA$I$I = function (buf, offset, len) { - ps.print(String.instantialize(buf, offset, len)); -}; - -} - -setps(Sys.out, function(s) {Con.consoleOutput(s)}); -setps(Sys.err, function(s) {Con.consoleOutput(s, "red")}); - -})(Clazz.Console, System); - - -Clazz._Loader.registerPackages("java", [ "io", "lang", "lang.reflect", "util" ]); - - -// old J2S.setGlobal("java.registered", true); - -// /////////////// special definitions of standard Java class methods -// /////////// - -var C$, m$ = Clazz.newMeth; - -Clazz._setDeclared("java.lang.Math", java.lang.Math = Math); - -Math.rint || (Math.rint = function(a) { - var b; - return Math.round(a) + ((b = a % 1) != 0.5 && b != -0.5 ? 0 : (b = Math.round(a % 2)) > 0 ? b - 2 : b); -}); - -// Java 1.8 - -Math.abs$J = function(x) { return Long.$sign(x) < 0 ? Long.$neg(x) : Long.$dup(x); } - -Math.max$J$J = function(x,y) { return Long.max$J$J(x,y); } - -Math.min$J$J = function(x,y) { return Long.min$J$J(x,y); } - -Math.round$D = function(x) { return Clazz.toLong(Math.round(x)); } - -var arex = function(s) { - throw Clazz.new_(Clazz.load('ArithmeticException').c$$S,[s||"integer overflow"]); -} - -Math.addExact$J$J = function(x, y) { - var r = Long.$add(x,y); - (Long.$sign(r) != 0 && Long.$sign(x) == Long.$sign(y) && Long.$sign(x) != Long.$sign(r)) && arex(); - return r; -} - -Math.subtractExact$J$J = function(x, y) { - var r = Long.$sub(x,y); - (Long.$sign(r) != 0 && Long.$sign(x) == Long.$sign(y) && Long.$sign(x) != Long.$sign(r)) && arex(); - return r; -} - -Math.floorDiv$J$J = function(x,y) { - var r = Long.$div(x,y); - return (r < 0 && Long.$ne(Long.$mul(r,y), x) ? Long.$inc(r, -1) : r); -} - -Math.floorMod$J$J = function(x,y) { return Long.$sub(x, Long.$mul(Math.floorDiv(x, y), y)); } - -Math.incrementExact$J = function(a) { - (Long.$eq(a, Long_MAX_VALUE)) && arex(); - return Long.$inc(a,1); -} - -Math.decrementExact$J = function(a) { - (Long.$eq(a, Long_MIN_VALUE)) && arex(); - return Long.$inc(a,-1); -} - -Math.multiplyExact$J$J = function(x, y) { - var r = Long.$mul(x,y); - if (Long.$sign(r) != Long.$sign(x) * Long.$sign(y)) { - arex(); - } - return r; -} - -Math.negateExact$J = function(a) {return Long.$neg(a);} - -Math.toIntExact$J = function(value) { - if (!Long.$eq(Long.$ival(value), value)) { - arex(); - } - return value; -} - -Math.addExact = function(x, y) { - var r = x + y; - // HD 2-12 Overflow iff both arguments have the opposite sign of the result - if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE) { - arex(); - } - return r; -} - - -Math.subtractExact = function(x, y) { - var r = x - y; - // HD 2-12 Overflow iff the arguments have different signs and - // the sign of the result is different than the sign of x - if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE) { - arex(); - } - return r; -} - -Math.multiplyExact = function(x, y) { - var r = x * y; - if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE) { - arex(); - } - return r; -} -Math.incrementExact = function(a) { - if (a == Integer.MAX_VALUE) { - arex(); - } - return a + 1; -} - -Math.decrementExact = function(a) { - if (a == Integer.MIN_VALUE) { - arex(); - } - return a - 1; -} - -Math.negateExact = function(a) {return -a} - -Math.floorDiv || (Math.floorDiv = function(x,y) { - var r = (x / y) | 0; - if ((x ^ y) < 0 && (r * y != x)) { - r--; - } - return r; -}) - -Math.floorMod || (Math.floorMod = function(x,y) { return x - Math.floorDiv(x, y) * y; }) - -// -Math.log10||(Math.log10=function(a){return Math.log(a)/Math.E}); - -Math.hypot||(Math.hypot=function(x,y){return Math.sqrt(Math.pow(x,2)+Math.pow(y,2))}); - -Math.toDegrees||(Math.toDegrees=function(angrad){return angrad*180.0/Math.PI;}); - -Math.toRadians||(Math.toRadians=function(angdeg){return angdeg/180.0*Math.PI}); - -Math.copySign||(Math.copySign=function(mag,sign){return((sign>0?1:-1)*Math.abs(mag))}); - -// could use Math.sign(), but this was used to preserve cross-brower -// compatability (not in Internet Explorer) -Math.signum||(Math.signum=function(d){return(d==0.0||isNaN(d))?d:d < 0 ? -1 : 1}); - -Math.scalb||(Math.scalb=function(d,scaleFactor){return d*Math.pow(2,scaleFactor)}); - -Math.nextAfter|| -(Math.nextAfter=function(start,direction){ - if (isNaN(start) || isNaN(direction)) - return NaN; - if (direction == start) - return start; - if (start == Double.MAX_VALUE && direction == Double.POSITIVE_INFINITY) - return Double.POSITIVE_INFINITY; - if (start == -Double.MAX_VALUE && direction == Double.NEGATIVE_INFINITY) - return Double.NEGATIVE_INFINITY; - if (start == Double.POSITIVE_INFINITY && direction == Double.NEGATIVE_INFINITY) - return Double.MAX_VALUE; - if (start == Double.NEGATIVE_INFINITY && direction == Double.POSITIVE_INFINITY) - return -Double.MAX_VALUE; - if (start == 0) - return (direction > 0 ? Double.MIN_VALUE : -Double.MIN_VALUE); - - geta64()[0] = start; - var i0 = i64[0]; - var i1 = i64[1]; - var carry; - if ((direction > start) == (start >= 0)) { - i64[0]++; - carry = (i64[0] == 0 ? 1 : 0); - } else { - i64[0]--; - carry = (i64[0] == 4294967295 ? -1 : 0); - } - if (carry) - i64[1]+=carry; - return a64[0]; -}); - -Math.nextAfter$D$D = Math.nextAfter; - -Math.nextAfter$F$D =function(start,direction){ - if (isNaN(start) || isNaN(direction)) - return NaN; - if (direction == start) - return start; - if (start == Float.MAX_VALUE && direction == Float.POSITIVE_INFINITY) - return Float.POSITIVE_INFINITY; - if (start == -Float.MAX_VALUE && direction == Float.NEGATIVE_INFINITY) - return Float.NEGATIVE_INFINITY; - if (start == Float.POSITIVE_INFINITY && direction == Float.NEGATIVE_INFINITY) - return Float.MAX_VALUE; - if (start == Float.NEGATIVE_INFINITY && direction == Float.POSITIVE_INFINITY) - return -Float.MAX_VALUE; - if (start == 0 && direction < 0) - return -Float.MIN_VALUE; - if (start == 0) - return (direction > 0 ? Float.MIN_VALUE : -Float.MIN_VALUE); - - geta32()[0] = start; - i32[0] += ((direction > start) == (start >= 0) ? 1 : -1); - return a32[0]; -}; - - -Math.nextUp||(Math.nextUp=function(d){ return Math.nextAfter(d, Double.POSITIVE_INFINITY); }); - -Math.nextUP$D=Math.nextUp; - -Math.nextUp$F = function(f){ return Math.nextAfter$F$D(f, Double.NEGATIVE_INFINITY); }; - - -Math.nextDown||(Math.nextDown=function(d){ return Math.nextAfter(d, Double.NEGATIVE_INFINITY); }); - -Math.nextDown$D=Math.nextDown; - -Math.nextDown$F = function(f){ return Math.nextAfter$F$D(f, Double.NEGATIVE_INFINITY); }; - - -Math.ulp||(Math.ulp=function(d){ - if (isNaN(d)) { - return Double.NaN; - } - if (isInfinite(d)) { - return Double.POSITIVE_INFINITY; - } - if (d == Double.MAX_VALUE || d == -Double.MAX_VALUE) { - return Math.pow(2, 971); - } - return Math.nextUp(Math.abs(d)); -}); - -Math.ulp$D = Math.ulp; - -Math.ulp$F = function(f){ - if (isNaN(f)) { - return Float.NaN; - } - if (isInfinite(f)) { - return Float.POSITIVE_INFINITY; - } - if (f == Float.MAX_VALUE || f == -Float.MAX_VALUE) { - return Math.pow(2, 104); - } - return Math.nextUp$F(Math.abs(f)); -}; - -Math.getExponent = Math.getExponent$D = function(d) { - geta64()[0] = d; - return ((i64[1] & 0x7ff00000) >> 20) - 1023; -}; - -Math.getExponent$F=function(f){ - return ((Float.floatToRawIntBits$F(f) & 0x7f800000) >> 23) - 127; -} - -Math.IEEEremainder||(Math.IEEEremainder=function (x, y) { - if (Double.isNaN$D(x) || Double.isNaN$D(y) || Double.isInfinite$D(x) || y == 0) - return NaN; - if (!Double.isInfinite$D(x) && Double.isInfinite$D(y)) - return x; - var modxy = x % y; - if (modxy == 0) return modxy; - var rem = modxy - Math.abs(y) * Math.signum(x); - if (Math.abs(rem) == Math.abs(modxy)) { - var div = x / y; - return (Math.abs(Math.round(div)) > Math.abs(div) ? rem : modxy); - } - return (Math.abs(rem) < Math.abs(modxy) ? rem : modxy); -}); - - -Clazz._setDeclared("java.lang.Number", java.lang.Number=Number); -Number.prototype._numberToString=Number.prototype.toString; - extendObject(Array, EXT_NO_HASHCODE); - extendObject(Number, EXT_NO_HASHCODE); -Number.__CLASS_NAME__="Number"; -addInterface(Number,java.io.Serializable); -// extendPrototype(Number, true, false); -Number.prototype.compareTo$ = Number.prototype.compareTo$Number = - Number.prototype.compareTo$O = Number.prototype.compareTo$Byte = Number.prototype.compareTo$Integer = - Number.prototype.compareTo$Short = Number.prototype.compareTo$Float = Number.prototype.compareTo$Double = - function(x) { var a = this.valueOf(), b = x.valueOf(); return (a < b ? -1 : a == b ? 0 : 1) }; - -var $b$ = new Int8Array(1); -var $s$ = new Int16Array(1); -var $i$ = new Int32Array(1); - -// short forms, for the actual numbers in JavaScript -m$(Number,["byteValue"],function(){return ($b$[0] = this, $b$[0]);}); -m$(Number,["shortValue"],function(){return ($s$[0] = this, $s$[0]);}); -m$(Number,["intValue"],function(){return ($i$[0] = this, $i$[0]);}); -m$(Number,["longValue"],function(){return Clazz.toLong(this);}); - -// Object values -m$(Number,["byteValue$"],function(){return this.valueOf().byteValue();}); -m$(Number,["shortValue$"],function(){return this.valueOf().shortValue();}); -m$(Number,["intValue$"],function(){return this.valueOf().intValue();}); -m$(Number,["longValue$"],function(){return this.valueOf().longValue();}); -m$(Number,["floatValue$", "doubleValue$"],function(){return this.valueOf();}); -m$(Number,["longValue$"],function(){return this.valueOf().longValue();}); -m$(Number,["$incr$"],function(n){return this.$box$(this.valueOf() + n);}); -m$(Number,["$mul$"],function(v){return this.$box$(this.valueOf() * v);}); -m$(Number,["$neg$"],function(v){return this.$box$(-this.valueOf());}); -m$(Number,["$inv$"],function(v){return this.$box$(~this.valueOf());}); -m$(Number,["$c"],function(v){return this.valueOf();}); - -Clazz.incrAN = function(A,i,n,isPost) { - var v = A[i]; - A[i] = (v.TYPE ? v.$incr$(n) : Long.$inc(v,n)); - return (isPost ? v : A[i]); -} - -Clazz._setDeclared("java.lang.Integer", java.lang.Integer=Integer=function(){ -if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); -}); - -var primTypes = {}; - -var FALSE = function() { return false }; -var EMPTY_CLASSES = function() {return Clazz.array(Class, [0])}; -var NULL_FUNC = function() {return null}; - -var setJ2STypeclass = function(cl, type, paramCode) { -// TODO -- should be a proper Java.lang.Class - primTypes[paramCode] = cl; - cl.TYPE = { - isPrimitive$: function() { return true }, - type:type, - __PARAMCODE:paramCode, - __PRIMITIVE:1 // referenced in java.lang.Class - }; - cl.TYPE.isArray$ = cl.TYPE.isEnum$ = cl.TYPE.isAnnotation$ = FALSE; - cl.TYPE.toString = cl.TYPE.getName$ = cl.TYPE.getTypeName$ - = cl.TYPE.getCanonicalName$ = cl.TYPE.getSimpleName$ = function() {return type}; - cl.TYPE.isAssignableFrom$Class = (function(t) {return function(c) {return c == t}})(cl.TYPE); - cl.TYPE.getSuperclass$ = cl.TYPE.getComponentType$ = NULL_FUNC; - cl.TYPE.getInterfaces$ = EMPTY_CLASSES; -} - -var decorateAsNumber = function (clazz, qClazzName, type, PARAMCODE, hcOffset) { - clazz.prototype.valueOf=function(){return 0;}; - clazz.prototype.__VAL0__ = 1; - if (hcOffset) - clazz.prototype.hashCode$ = function() {return this.valueOf() + hcOffset}; - finalizeClazz(clazz, qClazzName, null, 0, true); - extendPrototype(clazz, true, true); - setSuperclass(clazz, Number); - addInterface(clazz, Comparable); - setJ2STypeclass(clazz, type, PARAMCODE); - return clazz; -}; - -Clazz.toLong = function(v) { - if (typeof v == "string") { - v = parseInt(v); - if (isNaN(v)) - return 0; - } - return (v.length ? v : v >= minLong && v <= maxLong ? v - v%1 : v == Infinity ? LONG_MAX_VALUE : v == -Infinity ? LONG_MIN_VALUE : isNaN(v) ? 0 : toLongRMS(v - v%1)); -} - -var parseIntLimit = function(s,radix, min, max) { - var v = (s == null || s.indexOf(".") >= 0 || s.startsWith("0x") ? NaN : radix === false ? parseInt(s) : parseInt(s, radix)); - if (!isNaN(v)) { - // check for trailing garbage - var v1 = parseInt(s + "1", radix); - if (v1 == v) - v = NaN; - } - if (isNaN(v) || v < min || v > max){ - throw Clazz.new_(NumberFormatException.c$$S, ["parsing " + s + " radix " + radix]); - } - return v; -} - -decorateAsNumber(Integer, "Integer", "int", "I", iHCOffset); - -Integer.toString=Integer.toString$I=Integer.toString$I$I=Integer.prototype.toString=function(i,radix){ - switch(arguments.length) { - case 2: - return i.toString(radix); - case 1: - return "" +i; - case 0: - return (this===Integer ? "class java.lang.Integer" : ""+this.valueOf()); - } -}; - -var minInt = Integer.MIN_VALUE=Integer.prototype.MIN_VALUE=-0x80000000; -var maxInt = Integer.MAX_VALUE=Integer.prototype.MAX_VALUE=0x7fffffff; -Integer.SIZE=Integer.prototype.SIZE=32; - - - -var ints = []; -var longs = []; -var shorts = []; -var chars = {}; - -var minValueOf = -128; -var maxValueOf = 127; - -var getCachedNumber = function(i, a, cl, c$) { - if (a == chars) { - return a[i] ? a[i] : (a[i] = Clazz.new_(cl[c$], [i])); - } - if (i >= minValueOf && i <= maxValueOf) { - var v = a[i - minValueOf]; - return (v ? v : a[i - minValueOf] = Clazz.new_(cl[c$], [i])); - } -} - -m$(Integer,"c$", function(v){ // SwingJS only -- for new Integer(3) - v || v == null || (v = 0); - if (typeof v != "number") - v = Integer.parseInt$S$I(v, 10); - v = v.intValue(); - this.valueOf=function(){return v;}; - }, 1); - -m$(Integer, "c$$S", function(v){ - v = Integer.parseInt$S$I(v, 10); - this.valueOf=function(){return v;}; - }, 1); - -m$(Integer, "c$$I", function(v){ - this.valueOf=function(){return v;}; -}, 1); - -m$(Integer,"valueOf$S", -function(s){ - return Integer.valueOf$S$I(s, 10); -}, 1); - -m$(Integer,"valueOf$S$I", -function(s, radix){ - return Integer.valueOf$I(Integer.parseInt$S$I(s, radix)); -}, 1); - -m$(Integer,"valueOf$I", -function(i){ - v |= 0; - var v = getCachedNumber(i, ints, Integer, "c$$I"); - return (v ? v : Clazz.new_(Integer.c$$I, [i])); -}, 1); - -m$(Integer,"parseInt$S", -function(s){ - return parseIntLimit(s, false, minInt, maxInt); -}, 1); - -m$(Integer,"parseInt$S$I", -function(s,radix){ - return parseIntLimit(s, radix, minInt, maxInt); -}, 1); - -m$(Integer,"highestOneBit$I", - function(i) { - i |= (i >> 1); - i |= (i >> 2); - i |= (i >> 4); - i |= (i >> 8); - i |= (i >> 16); - return i - (i >>> 1); - }, 1); - -m$(Integer,"lowestOneBit$I", - function(i) { return i & -i;}, 1); - -m$(Integer,"rotateLeft$I$I", - function(i, distance) { return (i << distance) | (i >>> -distance); }, 1); - -m$(Integer,"rotateRight$I$I", - function(i, distance) { return (i >>> distance) | (i << -distance); }, 1); - -m$(Integer,"reverse$I", - function(i) { - i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555; - i = (i & 0x33333333) << 2 | (i >>> 2) & 0x33333333; - i = (i & 0x0f0f0f0f) << 4 | (i >>> 4) & 0x0f0f0f0f; - i = (i << 24) | ((i & 0xff00) << 8) | - ((i >>> 8) & 0xff00) | (i >>> 24); - return i;}, 1); - -m$(Integer,"reverseBytes$I", - function(i) { - return ((i >>> 24) ) | - ((i >> 8) & 0xFF00) | - ((i << 8) & 0xFF0000) | - ((i << 24)); - }, 1); - -m$(Integer,"signum$I", function(i){ return i < 0 ? -1 : i > 0 ? 1 : 0; }, 1); - -m$(Integer,"bitCount$I", - function(i) { - i = i - ((i >>> 1) & 0x55555555); - i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); - i = (i + (i >>> 4)) & 0x0f0f0f0f; - i = i + (i >>> 8); - i = i + (i >>> 16); - return i & 0x3f; - }, 1); - -m$(Integer,"numberOfLeadingZeros$I", - function(i) { - if (i == 0) return 32; - var n = 1; - if (i >>> 16 == 0) { n += 16; i <<= 16; } - if (i >>> 24 == 0) { n += 8; i <<= 8; } - if (i >>> 28 == 0) { n += 4; i <<= 4; } - if (i >>> 30 == 0) { n += 2; i <<= 2; } - n -= i >>> 31; - return n; - }, 1); - -m$(Integer,"numberOfTrailingZeros$I", - function(i) { - if (i == 0) return 32; - var n = 31; - var y = i <<16; if (y != 0) { n = n - 16; i = y; } - y = i << 8; if (y != 0) { n = n - 8; i = y; } - y = i << 4; if (y != 0) { n = n - 4; i = y; } - y = i << 2; if (y != 0) { n = n - 2; i = y; } - return n - ((i << 1) >>> 31); - }, 1); - -m$(Integer,"equals$O", -function(s){ -return (s instanceof Integer) && s.valueOf()==this.valueOf(); -}); - -m$(Integer, "$box$", function(v) { - return Integer.valueOf$I(v); -}); - -Integer.toHexString$I=function(d){ -if (d < 0) { -var b = d & 0xFFFFFF; -var c = ((d>>24)&0xFF); -return c._numberToString(16) + (b = "000000" + b._numberToString(16)).substring(b.length - 6); -} -return d._numberToString(16); -}; -Integer.toOctalString$I=function(d){return d._numberToString(8);}; -Integer.toBinaryString$I=function(d){return d._numberToString(2);}; - -Integer.toUnsignedLong$I=function(x){return (x > 0 ? x : x + 0x100000000);}; -Integer.toUnsignedString$I=function(x){return "" + Integer.toUnsignedLong$I(x);}; -Integer.toUnsignedString$I$I=function(x,r){return Long.toString$J(Integer.toUnsignedLong$I(x),r);}; - -m$(Integer,"decodeRaw$S", function(n){ -if (n.indexOf(".") >= 0)n = ""; -var i = (n.startsWith("-") ? 1 : 0); -n = n.replace(/\#/, "0x").toLowerCase(); -var radix=(n.startsWith("0x", i) ? 16 : n.startsWith("0", i) ? 8 : 10); -// The general problem with parseInt is that is not strict -- -// ParseInt("10whatever") == 10. -// Number is strict, but Number("055") does not work, though ParseInt("055", 8) -// does. -// need to make sure negative numbers are negative -if (n == "" || radix == 10 && isNaN(+n)) - return NaN -n = (+n) & 0xFFFFFFFF; -return (radix == 8 ? parseInt(n, 8) : n); -}, 1); - -m$(Integer,"decode$S", function(n){ - if (isNaN(n = Integer.decodeRaw$S(n)) || n < Integer.MIN_VALUE|| n > Integer.MAX_VALUE) - throw Clazz.new_(NumberFormatException.c$$S,["Invalid Integer"]); - return Clazz.new_(Integer.c$$I, [n]); -}, 1); - - - -// Note that Long is problematic in JavaScript - -Clazz._setDeclared("java.lang.Long", java.lang.Long=Long=function(){ - this.c$(arguments[0]); -}); - -decorateAsNumber(Long, "Long", "long", "J", lHCOffset); - -Long.toString=Long.toString$J=Long.toString$J$I = Long.prototype.toString=function(i, radix){ - switch(arguments.length) { - case 2: - return (i.length ? Long.$s(i,radix) : i.toString(radix)); - case 0: - if (this===Long) - return "class java.lang.Long"; - i = this.valueOf(); - break; - } - return (i.length ? Long.$s(i) : "" + i); -}; - - -// 64-bit long methods -// RMS [R 16 bits, M 47+1 bits, S (1/0/-1)] (for storage) -// RLH [R 16 bits, ML 24 bits, MH 24+1 bits] (for bit, * / % ops) - -var JSSAFE = 9007199254740991; // can +/-1 -var RBITS = 24; -var LBITS = RBITS; -var HBITS = (64 - LBITS - RBITS); // 16 -var MAXR = 1 << RBITS; -var RMASK = MAXR - 1; -var MAXL = 1 << LBITS; -var LMASK = MAXL - 1; -var MAXH = 1 << HBITS; -var HMASK = MAXH - 1; -var HSIGNB = MAXH >> 1; // 0x8000; -var MAXM = MAXL*MAXH; -var T15 = 10**15; -var T8 = 10**8; -var T15RD = T15/MAXR; // 5.9604644775390625 -var T15RN = T15RD|0; -var T15RF = T15RD - T15RN; -var MSIGNB = 0x8000000000; // Java long min >>>24;549755813888 -var MMINMAX = 0x10000000000; // Java overflow >>>24; -var LONG_MAX_VALUE = [16777215,549755813887,1]; -var LONG_MIN_VALUE = [0,549755813888,-1]; - -var parseLong = function(s, radix, v) { - if (v >= -JSSAFE && v <= JSSAFE) - return v; - var isNeg = (s.charAt(0) == '-'); - if (isNeg || s.charAt(0) == '+') - s = s.substring(1); - var n = s.length; - var m = 0,r = 0; - switch (radix) { - case 10: - return toLongRMS((isNeg ? "-" : "") + s,1); - case 2: - if (n > 64) - return null; - m = parseInt(s.substring(0, n - RBITS), 2); - r = parseInt(s.substring(n - RBITS), 2); - break; - case 8: - if (n > 33) - return null; - // mmmmmmmmmmmmmmmmm rrrrrrrr - m = parseInt(s.substring(0, n - RBITS/3), 8); - r = parseInt(s.substring(n - RBITS/3), 8); - break; - case 16: - if (n > 16) - return null; - // mmmmmmmmmmmm rrrrrr - m = parseInt(s.substring(0, n - RBITS/4), 16); - r = parseInt(s.substring(n - RBITS/4), 16); - break; - case 16: - if (n > 8) - return null; - // mmmmmmmmmmmm rrrrrr - m = parseInt(s.substring(0, n - RBITS/8), 32); - r = parseInt(s.substring(n - RBITS/8), 32); - break; - default: - return null; - } - if (m >= 0) { - if (m >= MSIGNB) { - if (m > MSIGNB || r != 0) { - return null; - } - isNeg = true; - } - return [r, m, isNeg ? -1 : r == 0 && m == 0 ? 0 : 1]; - } - return v; -} - -var toLongI2 = function(i0, i1) { - var r = i0&0xFFFFFF; // 24 - var l = (i0>>>24) + ((i1&0xFFFF)<<8); // 24 - var h = i1>>>16; // 16 - return fromLongRLH([r,l,h]); -} - -var toLongRMS = function(s0, noOver) { - if (typeof s0 == "number") { - if (s0 + 1 > s0 && s0 -1 < s0) - return checkLong([Math.abs(s0), 0, s0 < 0 ? -1 : s0 > 0 ? 1 : 0]); - - s0 -= s0%1; - s0 = "" + s0; - } else if (Array.isArray(s0)) { - return s0; - } - var isNeg = (s0.indexOf("-") == 0); - var s = (isNeg ? s0.substring(1) : s0); - - // 1) Split the string into two reasonably-sized numbers - // give l (low) the last 8 digits; h (high) can have the first 11. - // max l will be 27 bits; max h will be 37 bits. - // later we will add in up to 11 more bits into h. - - var pt = s.length - 15; - var h = Number(pt <= 0 ? 0 : s.substring(0, pt)); - var l = Number(pt <= 0 ? s : s.substring(pt)); - - - // The task is to partition the number based on binary digits, not decimal. - // Starting with [l,h] we want [r,m]. - - // L = h * T15 + l == m*MAXR + r - - // 2) Split the low-digit part into an m part and an r part - // using integerization |0 and modulus %. - // l = lm*MAXR + lr - - var lm = l/MAXR|0; - var r = l&RMASK; - - // That was the easy part. - - // For the high digits, consider that we must satisfy: - // h*T15 = hm*MAXR + hr - // or - // h*(T15/MAXR) = hm + hr/MAXR - // notice that T15/MAXR is a decimal with an - // integer part (ti) and a fractional part (tf): - // h*(ti + tf) - // so h*ti = hm and h*tf*MAXR = hr - // except hr will overflow, so we need to add its high part to hm - - // to avoid integer overflow, we divide both sides by MAXR. - // bringing in the fractional part of the high number along - // with the low part of the remainder digits. - - var r0 = h * T15RF; // 0.9604644775390625 - - // This is our remainder, except it has almost certainly overflowed. - // So we need to move its high part from r to m. We cannot - // use |0 here because this one could be over 31 bits now after - // adding in h * tf. - - var rh = Math.floor(r0) - r += Math.floor((r0 - rh)*MAXR); - - lm += r/MAXR|0; - r &= RMASK; - - // combining the integer high part h * ti with the overflow of the - // lower numbers (rh and lm): - - var m = h * T15RN + rh + lm; - - // That's i;, we have m, r and s. - - if (!r&&!m &&(h||l) || (isNeg ? m >= MSIGNB && r > 0 : m >= MSIGNB)) { - return (noOver ? null : isNeg ? LONG_MIN_VALUE : LONG_MAX_VALUE); - } - return [r, m, !r&&!m ? 0 : isNeg ? -1 : 1]; -} - -var checkLong = function(rms, limit) { - // returns rms without cloning - var r = rms[0]; - if (limit > 0 && (r >= -limit && r < limit)) - return rms; - var m = rms[1]; - if (!rms[2]) { - if (!r && !m) - return rms; - rms[2] = 1; - } - if (r < 0) { - if (m == 0) { - rms[0] = -r; - rms[2] = -rms[2]; - } else { - var rl = r%MAXR; - var rh = (r - rl) / MAXR; - var n = m + rh; - if (n < 1) { - rms[0] = -rl; - rms[1] = -n; - rms[2] = -rms[2]; - } else { - rms[0] = MAXR + rl - rms[1] = n - 1; - } - } - } else if (r >= MAXR) { - var rl = r%MAXR; - var rh = (r - rl) / MAXR; - rms[0] = rl - rms[1] += rh; - } - if (rms[1] >= MSIGNB) { - if (limit >= 0) { - return (rms[2] > 0 ? LONG_MAX_VALUE : LONG_MIN_VALUE); - } - while (rms[1] > 0) { - rms[1] -= MMINMAX; - } - if (rms[0] > 0) { - rms[1]++; - rms[0] = MAXR - rms[0]; - } - rms[1] = -rms[1]; - rms[2] = (rms[1] == MSIGNB ? -1 : -rms[2]); - } else if (rms[1] <= -MSIGNB) { - return LONG_MIN_VALUE; - } - return rms; -} - -Long.$sign = function(a) { - return (a.length ? a[2] : Math.signum(a)); -} - -Long.$n = function(a) { - return BigInt(Long.$s(a)); -} - -Long.$s = function(a, radix, unsigned) { - // todo radix - radix || (radix = 10); - if (!a.length) { - if (radix == 10 && !unsigned) - return "" + a; - a = toLongRMS(a); - } - if (a[1] == 0 && !unsigned) { - return (a[2]*a[0]).toString(radix); - } - var isNeg = (a[2] == -1); - checkLong(a); - var m = a[1]; - var r = a[0]; - var s = ""; - if (unsigned && isNeg && m < MSIGNB) { - a = toLongRLH(a); - r = a[0]; - m =a[1]+a[2]*MAXL; - } - var zeros = null; - switch (radix) { - case 2: // 24 - zeros = "000000000000000000000000"; - break; - case 4: // 12 - zeros = "000000000000"; - break; - case 8: - zeros = "00000000" - break; - case 16: - zeros = "000000" - break; - case 32: - isNeg = false; - m && (s = (m/0x3F).toString(32)); - var s1 = (r + ((m&0x40)<<24)).toString(32); - s += (s.length == 0 ? s1 : longFill(s1, "00000")); - break; - case 10: - var ml = m % T8; - var mh = (m - ml)/T8; - var ll = r + ml * MAXR; - var l = ll % T8; - var lh = (ll - l)/T8; - var h = mh * MAXR + lh; - var fl = (h == 0 ? "" : "00000000") + ll; - s = (h != 0 ? h + fl.substring(fl.length - 8) : ll); - break; - } - if (zeros) { - isNeg = false; - m && (s = m.toString(radix)); - var s1 = r.toString(radix); - s += (s.length == 0 ? s1 : longFill(s1, zeros)); - } - return (!unsigned && isNeg ? "-" : "") + s; -} - -var longFill = function(s, zeros) { - var i,n - if ((i = s.length) == (n = zeros.length)) - return s; - s = zeros + s; - return s.substring(i - n, i); -} - -Long.$dup=function(a,b){ - if (!a.length) { - return a; - } - if (a[1] == 0) { - return a[2] * a[0]; - } - return [a[0],a[1],a[2]]; -} - -Long.$inc = function(x,n) { - // n +/-1 only; - var ret; - if (!x.length) { - ret = x + n; - if (ret != x) { - return ret; - } - x = toLongRMS(x); - } - return checkLong([x[2] == -1 ? x[0] - n : x[0] + n, x[1], x[2]], -1); -} - -Long.$neg=function(a){ return (a.length ? checkLong([a[0],a[1],-a[2]]) : -a); } - - -Long.$ival=function(a){ return Long.$lval(a)|0; } - -Long.$lval=function(a){ return (a.length ? a[2] * (a[0] + (a[1]%MAXR)*MAXR) : a); } - -Long.$fval=function(a){ - geta32()[0] = (a.length ? a[2] * (a[0] + a[1]*MAXR) : a); - return a32[0]; -} - -Long.$dval=function(a){ - geta64()[0] = (a.length ? a[2] * (a[0] + a[1]*MAXR) : a); - return a64[0]; -} - -var longTest = function(a,b) { - var isna = (!a.length); - var isnb = (!b.length); - return (isna && isnb ? 0 : isna ? -1 : isnb ? 1 : 2); -} - -var ab = [0,0]; - -var fixLongAB = function(a,b) { - switch (longTest(a,b)) { - case 0: - return true; - case 2: - checkLong(a); - checkLong(b); - break; - case 1: - checkLong(a); - b = toLongRMS(b); - break; - case -1: - a = toLongRMS(a); - checkLong(b); - break; - } - ab[0] = a; - ab[1] = b; -} - - -Long.$eq=function(a,b){ - if (fixLongAB(a,b)) { - return a == b; - } - a = ab[0];b = ab[1]; - return (a[0] == b[0] && a[1] == b[1] && a[2]== b[2]); -} - -Long.$ne=function(a,b){ - if (fixLongAB(a,b)) { - return a != b; - } - a = ab[0];b = ab[1]; - return (a[0] != b[0] || a[1] != b[1] || a[2]!= b[2]); -} - -Long.$gt=function(a,b){ - if (fixLongAB(a,b)) { - return a > b; - } - a = ab[0];b = ab[1]; - return (a[2] > b[2] || a[2] == b[2] && (a[1] > b[1] || a[1] == b[1] && a[0] > b[0])); -} - -Long.$cmp=function(a,b, unsigned){ - if (fixLongAB(a,b)) { - return (a < b ? -1 : a > b ? 1 : 0); - } - a = ab[0];b = ab[1]; - if (unsigned) { - a = toLongRLH(a); - b = toLongRLH(b); - } - return (a[2] < b[2] ? -1 : a[2] > b[2] ? 1 - : a[2] == 0 ? 0 : a[1] < b[1] ? -1 : a[1] > b[1] ? 1 - : a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0); -} - -Long.$ge=function(a,b){ - if (fixLongAB(a,b)) { - return a >= b; - } - a = ab[0];b = ab[1]; - return (a[2] > b[2] || a[2] == b[2] && (a[1] > b[1] || a[1] == b[1] && a[0] >= b[0])); -} - -Long.$le=function(a,b){ - if (fixLongAB(a,b)) { - return a <= b; - } - a = ab[0];b = ab[1]; - return (a[2] < b[2] || a[2] == b[2] && (a[1] < b[1] || a[1] == b[1] && a[0] <= b[0])); -} - -Long.$lt=function(a,b){ - if (fixLongAB(a,b)) { - return a < b; - } - a = ab[0];b = ab[1]; - return (a[2] < b[2] || a[2] == b[2] && (a[1] < b[1] || a[1] == b[1] && a[0] < b[0])); -} - - -Long.$not=function(a){ - return (a.length ? checkLong([a[0]+a[2],a[1],-a[2]]) : -a - 1); -} - -var m2 = [0,1,3,7 - ,0xF,0x1F,0x3F,0x7F - ,0xFF,0x1FF,0x3FF,0x7FF - ,0xFFF,0x1FFF,0x3FFF,0x7FFF - ,0xFFFF,0x1FFFF,0x3FFFF,0x7FFFF - ,0xFFFFF,0x1FFFFF,0x3FFFFF,0x7FFFFF - ,0xFFFFFF - ]; - -Long.$sr=function(a,n){ - if (arguments.length > 2) - return doLong(Long.$sr,arguments); - return shiftLong(a, n, 0); -} - -Long.$usr=function(a,n){ - if (arguments.length > 2) - return doLong(Long.$usr,arguments); - return shiftLong(a, n, 1); -} - -var shiftLong = function(a, n, unsigned) { - if (fixLongAB(a,n)) { - if (a >= 0 && a == (a|0)) - return (n > 31 ? 0 : a>>n); - if (n >= 64) - return (a > 0 || unsigned ? 0 : -1); - if (n == 0) - return a; - a = toLongRMS(a); - } else { - a = ab[0]; - n = (ab[1][1] > 0 ? 64 : ab[1][0]); - } - if (n >= 64 || a[2] == 0) { - return (a[2] >= 0 || unsigned ? 0 : -1); - } else if (n == 0) { - return Long.$dup(a); - } - var isNeg = (a[2] < 0); - var a = toLongRLH(a); - var c2,c1; - if (isNeg && !unsigned) - a[2] = -1&~HMASK|a[2]; - if (n >= 48) { - a[0] = a[1] = 0; - a[2] && (a[0] = a[2]>>(n-48),a[2] = 0); - isNeg && !unsigned && a[0] && (a[1]=-1,a[2] = -1); - return fromLongRLH(a); - } - if (n >= 24) { - a[0] = a[1]; - a[1] = a[2]; - a[2] = 0; - n -= 24; - } - - a[2] && (c2=(a[2]&m2[n])<<(24-n),a[2]>>=n); - a[1] && (c1=(a[1]&m2[n])<<(24-n),a[1]>>=n); - c2 && (a[1] += c2); - a[0] && (a[0]>>=n); - c1 && (a[0] += c1); - return fromLongRLH(a); -} - -Long.$sl = function(a, n){ - if (arguments.length > 2) - return doLong(Long.$sl,arguments); - if (fixLongAB(a,n)) { - var c; - if (a == 0 || n == 0) - return a; - if (n < 32 && (a < 0 ? (c = a< a)) - return c; - if (n >= 64) - return 0; - a = toLongRMS(a); - } else { - a = ab[0]; - n = (ab[1][1] > 0 ? 64 : ab[1][0]); - } - if (n >= 64 || a[2] == 0) { - return 0; - } - if (n == 0) { - return Long.$dup(a); - } - var a = toLongRLH(a); - var c2,c1; - if (n < 24) { - a[2] && (a[2]<<=n); - a[1] && (a[2]|=a[1]>>(24-n),a[1]<<=n); - a[0] && (a[1]|=a[0]>>(24-n),a[0]<<=n,a[0]&=RMASK); - } else if (n < 48) { - a[2] = (a[0]?a[0]>>(48-n):0); - a[1] && (a[2]|=a[1]<<(n-24)); - a[0] && (a[1]=a[0]<<(n-24),a[0]=0); - } else { - a[1] = 0; - a[2] = (a[0]?a[0]<<(n-48):0); - a[0] = 0; - } - a[1] && (a[1]&=LMASK); - a[2] && (a[2]&=HMASK); - return fromLongRLH(a); -} - -var addAB = function(a,b, s) { - if (fixLongAB(a,b)) { - var r = a + s * b; - if (r + 1 > r && r - 1 < r) - return r; - ab[0] = toLongRMS(a); - ab[1] = toLongRMS(b); - } - a = ab[0];b = ab[1]; - var r,m; - if (a[2] < 0) - s = -s; - r = a[0] + s * b[0] * b[2]; - m = a[1] + s * b[1] * b[2]; - if (m == 0) - return (r == 0 ? 0 : r * (a[2] || 1)); - return checkLong([r,m,a[2]], -1); -} - -Long.$add = function(a,b) { - if (arguments.length > 2) - return doLong(Long.$add,arguments); - return addAB(a,b, 1); -} - -Long.$sub = function(a,b) { - if (arguments.length > 2) - return doLong(Long.$sub,arguments); - return addAB(a,b, -1); -} - -Long.$and=function(a,b){ - if (arguments.length > 2) - return doLong(Long.$and,arguments); - if (fixLongAB(a,b)) { - if (a == 0 || b == 0) - return 0; - if ((a|0) == a && (b|0) == b) - return a&b; - ab[0] = toLongRMS(a); - ab[1] = toLongRMS(b); - } - a = toLongRLH(ab[0]);b = toLongRLH(ab[1]); - a[0] = a[0]&b[0]; - a[1] = a[1]&b[1]; - a[2] = a[2]&b[2]; - return fromLongRLH(a); -} - -Long.$or=function(a,b){ - if (arguments.length > 2) - return doLong(Long.$or,arguments); - if (fixLongAB(a,b)) { - if (a == 0 && b == 0) - return 0; - if ((a|0) == a && (b|0) == b) - return a|b; - ab[0] = toLongRMS(a); - ab[1] = toLongRMS(b); - } - a = toLongRLH(ab[0]);b = toLongRLH(ab[1]); - a[0] = a[0]|b[0]; - a[1] = a[1]|b[1]; - a[2] = a[2]|b[2]; - return fromLongRLH(a); -} - -Long.$xor=function(a,b){ - if (arguments.length > 2) - return doLong(Long.$xor,arguments); - if (fixLongAB(a,b)) { - if (a == 0 && b == 0) - return 0; - if ((a|0) == a && (b|0) == b) - return a^b; - ab[0] = toLongRMS(a); - ab[1] = toLongRMS(b); - } - a = toLongRLH(ab[0]);b = toLongRLH(ab[1]); - a[0] = a[0]^b[0]; - a[1] = a[1]^b[1]; - a[2] = a[2]^b[2]; - return fromLongRLH(a); -} - -Long.$mul = function(a,b){ - if (arguments.length > 2) - return doLong(Long.$mul,arguments); - if (fixLongAB(a,b)) { - var r = a*b; - if (r + 1 > r && r - 1 < r) - return r; - ab[0] = toLongRMS(a); - ab[1] = toLongRMS(b); - } - var a = ab[0]; - var b = ab[1]; - if (a[2] == 0 || b[2] == 0) - return 0; - var isNeg = (a[2]*b[2] < 0); - if (a[2] < 0) - a = [a[0], a[1], 1]; - if (b[2] < 0) - b = [b[0], b[1], 1]; - a = toLongRLH(a); - b = toLongRLH(b); - var r = a[0]*b[0]; - var c = (r-r%MAXR)/MAXR; - var l = a[0]*b[1]+a[1]*b[0]+c; - c = (l-l%MAXL)/MAXL; - var h = a[0]*b[2]+a[2]*b[0]+a[1]*b[1]+c; - a = fromLongRLH([r,l,h]); - return (isNeg ? Long.$neg(a) : a); -} - -Long.$div=function(a,b){ - if (arguments.length > 2) - return doLong(Long.$div,arguments); - if (fixLongAB(a,b)) { - if (b == 0) - arex("/ by zero"); - return (a/b) - (a/b)%1; - } - var a = ab[0]; - var b = ab[1]; - if (b[2] == 0) - arex("/ by zero"); - if (a[2] == 0 || b[1] > a[1] || b[1] == a[1] && b[0] > a[0]) - return 0; - var isNeg = (a[2]*b[2] < 0); - if (a[2] < 0) - a = [a[0], a[1], 1]; - if (b[2] < 0) - b = [b[0], b[1], 1]; - if (b[1] == a[1]) { - // the result will only depend upon r, not m - return (isNeg ? -1 : 1)*(a[0]/b[0])|0; - } - var d = NaN; - if (b[1] == 0) { - d = b[0]; - } else { - d = b[0] + b[1] * MAXR; - if (d + 1 == d || d - 1 == d) { - d = NaN; - } - } - if (isNaN(d)) { - // only from very large numbers divided by very large numbers. - // never in BigInteger, as that is all long/int - var bi = self.BigInt; - var f = (bi || Long.toUnsignedBigInteger$J); - var m = f(MAXR); - var aBr = f(a[0]); - var aBm = f(a[1]); - var bBr = f(b[0]); - var bBm = f(b[1]); - if (bi) { - ret = Number((aBr + m * aBm)/(bBr + m * bBm)); - } else { - // SwingJS aliases in BigInteger - ret = aBr.add(m.mul(aBm)).div(bBr.add(m.mul(bBm))); - } - return Clazz.toLong((isNeg ? -1 : 1) * ret); - } - var m = a[1]/d; - var mf = m%1; - var r = a[0]/d + mf*MAXR; - var rf = r%1; - m -= mf; - r -= rf; - // rounding could be no more than +/-1 off - switch (Long.$cmp(a,Long.$mul([r, m, 1],d))) { - case 0: - break; - case -1:// a < b*d -- too high - r -= 1; - break; - case 1: - if (Long.$cmp(a,Long.$mul([r+1, m, 1],d)) >= 0) { - r += 1; - } - break; - } - return checkLong([r, m, isNeg ? -1 : 1]); -} - -Long.$mod=function(a,n){ - if (arguments.length > 2) - return doLong(Long.$mod,arguments); - if (fixLongAB(a,n)) { - return a%n; - } - // a mod n = a - (a/n)*n - return Long.sub(a,Long.mul(Long.div(a,n),n)); -} - -var doLong = function(f,args) { - var a = args[0]; - for (var i = 1; i < args.length; i++) { - a = f(a, args[i]); - } - return a; -} - -var toLongRLH = function(rms) { - // to [16][24][24] - // h l r - var r = rms[0]; - var m = rms[1]; - if (m == 0 && r == 0) { - return [0,0,0]; - } - var isNeg = (rms[2] == -1); - var ml = m&LMASK; - m = (m - ml)/MAXL; - if (isNeg) { - r = (~r&RMASK) + 1; - ml = (~ml&LMASK) + (r == MAXR ? 1 : 0); - m = (~m&HMASK) + (ml == MAXL ? 1 : 0); - r &= RMASK; - ml &= LMASK; - m &= HMASK; - } - return [r,ml,m]; -} - -var fromLongRLH = function(rlh) { - var isNeg = (rlh[1] < 0); - (isNeg ? (rlh[2] = -1) : (isNeg = rlh[2] < 0 || rlh[2] >= HSIGNB)); - r = rlh[0]&RMASK; - m = ((rlh[2]&HMASK)*MAXL)+(rlh[1]&LMASK); - if (m == 0 && r == 0) { - return 0; - } - if (isNeg) { - r = (~r&RMASK) + 1; - m = MAXM - m - (r == MAXR ? 0 : 1); - r &= RMASK; - } - return checkLong([r,m, !r&&!m ? 0 : isNeg ? -1 : 1]); -} - -// Long.TYPE=Long.prototype.TYPE=Long; -// Note that the largest usable "Long" in JavaScript is 53 digits: - -Long.MIN_VALUE=Long.prototype.MIN_VALUE=LONG_MIN_VALUE; -Long.MAX_VALUE=Long.prototype.MAX_VALUE=LONG_MAX_VALUE; - -var maxLong = 0x1000000000000000000000; // ignored -var minLong = -maxLong; -Long.SIZE=Long.prototype.SIZE=64;// REALLY 53 - - -m$(Long,["intValue","intValue$"],function(){return Long.$ival(this.valueOf());}); - -m$(Long,["longValue","longValue$"],function(){return this.valueOf();}); - -m$(Long,"c$", -function(v) { - if (typeof v != "number" && typeof v != "object") - v = Long.parseLong$S$I(v, 10); - this.valueOf=function(){return v;}; -}, 1); - -m$(Long, "c$$J", function(v){ - this.valueOf=function(){return v;}; -}, 1); - -m$(Long,"c$$S", -function(v){ - var v = Long.parseLong$S$I(v, 10); - this.valueOf=function(){return v;}; -}, 1); - -Long.compare$J$J = function(a,b) { return Long.$cmp(a,b); } - -m$(Long,"compareTo$Long", function(l){return Long.$cmp(this.valueOf(), l.valueOf());}); - -m$(Long,"valueOf$S", -function(s){ - return Long.valueOf$S$I(s, 10); -}, 1); - -m$(Long,"valueOf$S$I", -function(s, radix){ - return Long.valueOf$J(Long.parseLong$S$I(s, radix)); -}, 1); - -m$(Long,"valueOf$J", -function(i){ - i = Clazz.toLong(i); - var v = (!i.length || (v = Long.$ival(i)) == Long.$lval(i) && (i = v) == i ? getCachedNumber(i, longs, Long, "c$$J") : 0); - return (v ? v : Clazz.new_(Long.c$$J, [i])); -}, 1); - -m$(Long,"hashCode$",function(){return Long.$ival(this.valueOf());}); -m$(Long,"doubleValue$",function(){return Long.$dval(this.valueOf());}); -m$(Long,"floatValue$",function(){return Long.$fval(this.valueOf());}); - - -m$(Long,"parseLong$S", -function(s){ - return Long.parseLong$S$I(s,10); -}, 1); - -m$(Long,"parseLong$S$I", -function(s,radix){ - var v,v0; - if (s.indexOf("x") == 1 || isNaN(v0 = parseInt(s, radix)) || (v = parseLong(s, radix, v)) == null) - throw Clazz.new_(NumberFormatException.c$$S, ["parsing " + s + " radix " + radix]); - return v; -}, 1); - -m$(Long,"decode$S", -function(n){ - if (n.length() == 0) - throw new NumberFormatException("Zero length string"); - - if (n.indexOf(".") >= 0)n = ""; - var isNeg = (n.startsWith(i)); - var i = (isNeg ? 1 : 0); - n = n.replace(/\#/, "0x").toLowerCase(); - var radix = 10; - if (n.startsWith("0x", i)) { - radix = 16; - i += 2; - } else if (n.startsWith("0", i)) { - i += 1; - radix = 8; - } - var result; - try { - result = Long.valueOf$S$I(n.substring$I(i), radix); - result = (isNeg ? Long.valueOf$J(-result.longValue$()) : result); - } catch (e) { - var constant = (isNeg ? "-" + n.substring(i) : n.substring$I(i)); - result = Long.valueOf$S$I(constant, radix); - } - return result; -}, 1); - -m$(Long,"equals$O", - function(s){ - return (s instanceof Long) && Long.$eq(s.valueOf(),this.valueOf()); -}); - -m$(Long, "$box$", function(v) { - return Long.valueOf$J(v.longValue$()); -}); - -;(function(C$) { - -m$(C$, 'compareUnsigned$J$J', function (x, y) { -return C$.compare$J$J(Long.$add(x,LONG_MIN_VALUE), Long.$add(y,LONG_MIN_VALUE)); -}, 1); - -// Long.compareUnsigned$J$J = function(a,b) { return Long.$cmp(a,b,1); } - -m$(C$, 'divideUnsigned$J$J', function (dividend, divisor) { -if (Long.$lt(divisor,0 )) { -return (C$.compareUnsigned$J$J(dividend, divisor)) < 0 ? 0 : 1; -}if (Long.$gt(dividend,0 )) return Long.$div(dividend,divisor); - else { -return C$.toUnsignedBigInteger$J(dividend).divide$java_math_BigInteger(C$.toUnsignedBigInteger$J(divisor)).longValue$(); -}}, 1); - -m$(C$, 'remainderUnsigned$J$J', function (dividend, divisor) { -if (Long.$gt(dividend,0 ) && Long.$gt(divisor,0 ) ) { -return Long.$mod(dividend,divisor); -} else { -if (C$.compareUnsigned$J$J(dividend, divisor) < 0) return dividend; - else return C$.toUnsignedBigInteger$J(dividend).remainder$java_math_BigInteger(C$.toUnsignedBigInteger$J(divisor)).longValue$(); -}}, 1); - -m$(C$, 'highestOneBit$J', function (i) { -(i=Long.$or(i,((Long.$sr(i,1))))); -(i=Long.$or(i,((Long.$sr(i,2))))); -(i=Long.$or(i,((Long.$sr(i,4))))); -(i=Long.$or(i,((Long.$sr(i,8))))); -(i=Long.$or(i,((Long.$sr(i,16))))); -(i=Long.$or(i,((Long.$sr(i,32))))); -return Long.$sub(i,(Long.$usr(i,1))); -}, 1); - -m$(C$, 'lowestOneBit$J', function (i) { -return Long.$and(i,(Long.$neg(i))); -}, 1); - -m$(C$, 'numberOfLeadingZeros$J', function (i) { -if (Long.$eq(i,0 )) return 64; -var n=1; -var x=Long.$ival((Long.$usr(i,32))); -if (x == 0) { -n+=32; -x=Long.$ival(i); -}if (x >>> 16 == 0) { -n+=16; -x<<=16; -}if (x >>> 24 == 0) { -n+=8; -x<<=8; -}if (x >>> 28 == 0) { -n+=4; -x<<=4; -}if (x >>> 30 == 0) { -n+=2; -x<<=2; -}n-=x >>> 31; -return n; -}, 1); - -m$(C$, 'numberOfTrailingZeros$J', function (i) { -var x; -var y; -if (Long.$eq(i,0 )) return 64; -var n=63; -y=Long.$ival(i); -if (y != 0) { -n=n - 32; -x=y; -} else x=Long.$ival((Long.$usr(i,32))); -y=x << 16; -if (y != 0) { -n=n - 16; -x=y; -}y=x << 8; -if (y != 0) { -n=n - 8; -x=y; -}y=x << 4; -if (y != 0) { -n=n - 4; -x=y; -}y=x << 2; -if (y != 0) { -n=n - 2; -x=y; -}return n - ((x << 1) >>> 31); -}, 1); - -m$(C$, 'bitCount$J', function (i) { -i=Long.$sub(i,(Long.$and((Long.$usr(i,1)),[5592405,366503875925,1]))); -i=Long.$add((Long.$and(i,[3355443,219902325555,1])),(Long.$and((Long.$usr(i,2)),[3355443,219902325555,1]))); -i=Long.$and((Long.$add(i,(Long.$usr(i,4)))),[986895,64677154575,1]); -i=Long.$add(i,(Long.$usr(i,8))); -i=Long.$add(i,(Long.$usr(i,16))); -i=Long.$add(i,(Long.$usr(i,32))); -return Long.$ival(i) & 127; -}, 1); - -m$(C$, 'rotateLeft$J$I', function (i, distance) { -return Long.$or((Long.$sl(i,distance)),(Long.$usr(i,-distance))); -}, 1); - -m$(C$, 'rotateRight$J$I', function (i, distance) { -return Long.$or((Long.$usr(i,distance)),(Long.$sl(i,-distance))); -}, 1); - -m$(C$, 'reverse$J', function (i) { -i=Long.$or(Long.$sl((Long.$and(i,[5592405,366503875925,1])),1),Long.$and((Long.$usr(i,1)),[5592405,366503875925,1])); -i=Long.$or(Long.$sl((Long.$and(i,[3355443,219902325555,1])),2),Long.$and((Long.$usr(i,2)),[3355443,219902325555,1])); -i=Long.$or(Long.$sl((Long.$and(i,[986895,64677154575,1])),4),Long.$and((Long.$usr(i,4)),[986895,64677154575,1])); -i=Long.$or(Long.$sl((Long.$and(i,[16711935,4278255360,1])),8),Long.$and((Long.$usr(i,8)),[16711935,4278255360,1])); -i=Long.$or((Long.$sl(i,48)),(Long.$sl((Long.$and(i,4294901760)),16)) , (Long.$and((Long.$usr(i,16)),4294901760)) , (Long.$usr(i,48)) ); -return i; -}, 1); - -m$(C$, 'signum$J', function (i) { -return Long.$ival((Long.$or((Long.$sr(i,63)),(Long.$usr((Long.$neg(i)),63))))); -}, 1); - -m$(C$, 'reverseBytes$J', function (i) { -i=Long.$or(Long.$sl((Long.$and(i,[16711935,4278255360,1])),8),Long.$and((Long.$usr(i,8)),[16711935,4278255360,1])); -return Long.$or((Long.$sl(i,48)),(Long.$sl((Long.$and(i,4294901760)),16)) , (Long.$and((Long.$usr(i,16)),4294901760)) , (Long.$usr(i,48)) ); -}, 1); - -m$(C$, 'sum$J$J', function (a, b) { -return Long.$add(a,b); -}, 1); - -m$(C$, 'max$J$J', function (a, b) { -return (Long.$ge(a,b) ? a : b); -}, 1); - -m$(C$, 'min$J$J', function (a, b) { -return (Long.$le(a,b) ? a : b); -}, 1); - -Clazz.newMeth(C$, 'getLong$S', function (nm) { - return C$.getLong$S$Long(nm, null); -}, 1); - -Clazz.newMeth(C$, 'getLong$S$J', function (nm, val) { - var result=C$.getLong$S$Long(nm, null); - return (Long.$eq(result,null )) ? C$.valueOf$J(val) : result; -}, 1); - -Clazz.newMeth(C$, 'getLong$S$Long', function (nm, val) { - var v=null; - try { - v=System.getProperty$S(nm); - } catch (e) { - if (Clazz.exceptionOf(e,"IllegalArgumentException") || Clazz.exceptionOf(e,"NullPointerException")){ - } else { - throw e; - } - } - if (v != null ) { - try { - return C$.decode$S(v); - } catch (e) { - if (Clazz.exceptionOf(e,"NumberFormatException")){ - } else { - throw e; - } - } - }return val; -}, 1); - -Clazz.newMeth(C$, 'parseUnsignedLong$S', function (s) { - return C$.parseUnsignedLong$S$I(s, 10); -}, 1); - -Clazz.newMeth(C$, 'parseUnsignedLong$S$I', function (s, radix) { - if (s == null ) { - throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,["null"]); - }var len=s.length$(); - if (len > 0) { - var firstChar=s.charAt$I(0); - if (firstChar == "-") { - throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,[String.format$S$OA("Illegal leading minus sign on unsigned string %s.", Clazz.array(java.lang.Object, -1, [s]))]); - } else { - if (len <= 12 || (radix == 10 && len <= 18 ) ) { - return C$.parseLong$S$I(s, radix); - }var first=C$.parseLong$S$I(s.substring$I$I(0, len - 1), radix); - var second=Character.digit$C$I(s.charAt$I(len - 1), radix); - if (second < 0) { - throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,["Bad digit at end of " + s]); - }var result=Long.$add(Long.$mul(first,radix),second); - if (C$.compareUnsigned$J$J(result, first) < 0) { - throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,[String.format$S$OA("String value %s exceeds range of unsigned long.", Clazz.array(java.lang.Object, -1, [s]))]); - }return result; - }} else { - throw Clazz.load('NumberFormatException').forInputString$S(s); -}}, 1); - - -})(Long); - -Long.toUnsignedString$J=Long.toUnsignedString$J$I = function(i,r) { - if (i >= 0) - return Long.toString$J$I(i,r || 10); - switch (r || 10) { - case 2: - return Long.toBinaryString$J(i); - case 4: - return Long.$s(j,4,1) - case 8: - return Long.toOctalString$J(i); - case 16: - return Long.toHexString$J(i); - case 32: - default: - return Long.$s(i,r,1); - } -}; -Long.sum$J$J = Long.$add; -Long.toHexString$J=function(j) { return Long.$s(j,16,1)}; -Long.toOctalString$J=function(j) { return Long.$s(j,8,1)}; -Long.toBinaryString$J=function(j) { return Long.$s(j,2,1)}; - -var bi; -Long.toUnsignedBigInteger$J = function(i) { - bi || (bi=(Clazz.load("java.math.BigInteger"), Clazz.new_(java.math.BigInteger.c$$S,["18446744073709551616"]))); - return (i >= 0 ? bi.valueOf$J(i) : bi.valueOf$J(i).add$java_math_BigInteger(bi)); -} - - -m$(Long,"signum$J", function(i){ return i < 0 ? -1 : i > 0 ? 1 : 0; }, 1); - -Clazz._setDeclared("java.lang.Short", java.lang.Short = Short = function(){ -if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); -}); -decorateAsNumber(Short, "Short", "short", "H", sHCOffset); - - -var minShort = Short.MIN_VALUE = Short.prototype.MIN_VALUE = -32768; -var maxShort = Short.MAX_VALUE = Short.prototype.MAX_VALUE = 32767; -Short.SIZE=Short.prototype.SIZE=16; - -m$(Short,"c$", function(v){ // SwingJS only -- for new Integer(3) - v || v == null || (v = 0); - if (typeof v != "number") - v = Short.parseShort$S$I(v, 10); - this.valueOf=function(){return v;}; - }, 1); - - -m$(Short, "c$$H", function(v){ - this.valueOf=function(){return v;}; -}, 1); - - -m$(Short,"c$$S", -function(v){ - var v = Short.parseShort$S$I(v, 10); - this.valueOf=function(){return v;}; -}, 1); - - -m$(Short,"valueOf$S", -function(s){ - return Short.valueOf$S$I(s, 10); -}, 1); - -m$(Short,"valueOf$S$I", -function(s, radix){ - return Short.valueOf$H(Short.parseShort$S$I(s, radix)); -}, 1); - -m$(Short,"valueOf$H", -function(i){ - var v = getCachedNumber(i, shorts, Short, "c$$H"); - return (v ? v : Clazz.new_(Short.c$$H, [i])); -}, 1); - - -m$(Short,"parseShort$S", -function(s){ - return parseIntLimit(s, false, minShort, maxShort); -}, 1); - -m$(Short,"parseShort$S$I", -function(s,radix){ - return parseIntLimit(s, radix, minShort, maxShort); -}, 1); - - -Short.toString = Short.toString$H = Short.toString$H$I = Short.prototype.toString = function (i,radix) { - switch(arguments.length) { - case 2: - return i.toString(radix); - case 1: - return "" +i; - case 0: - return (this===Short ? "class java.lang.Short" : ""+this.valueOf()); - } -}; - - -Short.toUnsignedInt$H = Short.toUnsignedLong$H = function (i) { - return (i < 0 ? i + 0x10000 : i); -}; - -m$(Short, "decode$S", -function(n){ - if (isNaN(n = Integer.decodeRaw$S(n)) || n < -32768|| n > 32767) - throw Clazz.new_(NumberFormatException.c$$S, ["Invalid Short"]); - return Clazz.new_(Short.c$$H, [n]); -}, 1); - - -m$(Short, "equals$O", function(s){ - return (s instanceof Short) && s.valueOf()==this.valueOf(); -}); - -m$(Short, "$box$", function(v) { - return Short.valueOf$H(v.shortValue$()); -}); - - -Clazz._setDeclared("Byte", java.lang.Byte=Byte=function(){ -if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); -}); -decorateAsNumber(Byte,"Byte", "byte", "B", bHCOffset); - -// Byte.serialVersionUID=Byte.prototype.serialVersionUID=-7183698231559129828; -var minByte = Byte.MIN_VALUE=Byte.prototype.MIN_VALUE=-128; -var maxByte = Byte.MAX_VALUE=Byte.prototype.MAX_VALUE=127; -Byte.SIZE=Byte.prototype.SIZE=8; - -m$(Byte,"c$", function(v){ // SwingJS only -- for new Integer(3) - v || v == null || (v = 0); - if (typeof v != "number") - v = Byte.parseByte$S$I(v, 10); - this.valueOf=function(){return v;}; - }, 1); - - -m$(Byte, "c$$B", function(v){ - this.valueOf=function(){return v;}; -}, 1); - -m$(Byte,"c$$S", -function(v){ - var v = Byte.parseByte$S$I(v, 10); - this.valueOf=function(){return v;}; -}, 1); - - -m$(Byte,"valueOf$S", -function(s){ - return Byte.valueOf$S$I(s, 10); -}, 1); - -m$(Byte,"valueOf$S$I", -function(s, radix){ - return Byte.valueOf$B(Byte.parseByte$S$I(s, radix)); -}, 1); - -m$(Byte,"valueOf$B", -function(i){ - var v = getCachedNumber(i, bytes, Byte, "c$$B"); - return v; -}, 1); - - -Byte.toString=Byte.toString$B=Byte.toString$B$I=Byte.prototype.toString=function(i,radix){ - switch(arguments.length) { - case 2: - return i.toString(radix); - case 1: - return "" +i; - case 0: - return (this===Byte ? "class java.lang.Byte" : ""+this.valueOf()); - } -}; - -m$(Byte,"parseByte$S", - function(s){ - return parseIntLimit(s, false, minByte, maxByte); - }, 1); - -m$(Byte,"parseByte$S$I", - function(s,radix){ - return parseIntLimit(s, radix, minByte, maxByte); - }, 1); - -Byte.toString=Byte.toString$B=Byte.toString$B$I=Byte.prototype.toString=function(i,radix){ - switch(arguments.length) { - case 2: - return i.toString(radix); - case 1: - return "" +i; - case 0: - return (this===Byte ? "class java.lang.Byte" : ""+this.valueOf()); - } -}; - - -m$(Byte, ["valueOf$S","valueOf$B","valueOf$S$I"], -function (s,radix) { - return Clazz.new_(Byte.c$, [s, radix||10]); -}, 1); - -m$(Byte,"equals$O", -function(s){ -return (s instanceof Byte) && s.valueOf()==this.valueOf(); -}); - -m$(Byte, "$box$", function(v) { - return Byte.valueOf$B(v.byteValue$()); -}); - -Byte.toUnsignedInt$B = Byte.toUnsignedLong$B = function (i) { - return (i < 0 ? i + 0x100 : i); -}; - -m$(Byte,"decode$S", -function(n){ - if (isNaN(n = Integer.decodeRaw$S(n)) || n < -128|| n > 127) - throw Clazz.new_(NumberFormatException.c$$S, ["Invalid Byte"]); - return Clazz.new_(Byte.c$$B, [n]); -}, 1); - -Clazz._floatToString = function(f) { - if (f === 0) { - return (1/f == -Infinity ? "-0.0" : "0.0"); - } - var check57 = (Math.abs(f) >= 1e-6 && Math.abs(f) < 1e-3); - if (check57) - f/=1e7; - var s = (""+f).replace('e','E'); - if (s.indexOf(".") < 0 && s.indexOf("Inf") < 0 && s.indexOf("NaN") < 0) { - if(s.indexOf('E') < 0) - s += ".0"; - else { - s = s.replace('E', '.0E'); - } - } - if (check57) { - s = s.substring(0, s.length - 2) + (parseInt(s.substring(s.length - 2)) - 7); - s = s.replace(".0000000000000001",".0"); - } - return s; -} - -Clazz._setDeclared("Float", java.lang.Float=Float=function(){ -if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); -}); -decorateAsNumber(Float,"Float", "float", "F"); - -var maxFloat = 3.4028235E38; -var minFloat = -3.4028235E38; - -m$(Float,"c$", function(v){ - v || v == null || v != v || (v == 0) || (v = 0); - if (typeof v != "number") - v = Float.parseFloat$S(v); - this.valueOf=function(){return v;} - }, 1); - -m$(Float, "c$$F", function(v){ - this.valueOf=function(){return v;}; -}, 1); - -m$(Float, "c$$S", function(v){ - v = Float.parseFloat$S(v); - this.valueOf=function(){return v;} -}, 1); - -m$(Float, "c$$D", function(v){ - v || v != v || (v == 0) || (v = 0); - v = (v < minFloat ? -Infinity : v > maxFloat ? Infinity : v); - this.valueOf=function(){return v;} -}, 1); - -Float.toString=Float.toString$F=Float.prototype.toString=function(){ -if(arguments.length!=0){ -return Clazz._floatToString(arguments[0]); -}else if(this===Float){ -return"class java.lang.Float"; -} -return Clazz._floatToString(this.valueOf()); -}; - -var a32, i32, a64, i64; - -var geti32 = function() { - return i32 || (a32 = new Float32Array(1), i32 = new Int32Array(a32.buffer)); -} -var geta32 = function() { - geti32(); - return a32; -} - -geti64 = function() { - return i64 || (a64 = new Float64Array(1), i64 = new Uint32Array(a64.buffer)); -} -geta64 = function() { - geti64(); - return a64; -} - -Float.floatToIntBits$F = function(f) { - return Float.floatToRawIntBits$F(f); -} - -Float.floatToRawIntBits$F = function(f) { - geta32()[0] = f; - return i32[0]; -} - -Float.intBitsToFloat$I = function(i) { - geti32()[0] = i; - return a32[0]; -} - -Float.serialVersionUID=Float.prototype.serialVersionUID=-2671257302660747028; -Float.MIN_VALUE=Float.prototype.MIN_VALUE=1.4e-45; -Float.MAX_VALUE=Float.prototype.MAX_VALUE=3.4028235e+38; -Float.NEGATIVE_INFINITY=Float.prototype.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY; -Float.POSITIVE_INFINITY=Float.prototype.POSITIVE_INFINITY = Number.POSITIVE_INFINITY; -Float.NaN=Number.NaN; - -m$(Float,"parseFloat$S", -function(s){ - var v = Double.parseDouble$S(s); - return (v < minFloat ? -Infinity : v > maxFloat ? Infinity : v); -}, 1); - -m$(Float,"valueOf$S", -function(s){ -return Clazz.new_(Float.c$$S, [s]); -}, 1); - - -m$(Float,["longValue$","longValue"],function(){return Math.floor(this.valueOf());}); - -m$(Float,"valueOf$D", -function(i){ -return Clazz.new_(Float.c$$F, [i < minFloat ? -Infinity : i > maxFloat ? Infinity : i]); -}, 1); - -m$(Float,"valueOf$F", -function(i){ -return Clazz.new_(Float.c$$F, [i]); -}, 1); - -m$(Float,"isNaN$F", -function(num){ -return isNaN(num); -}, 1); - -m$(Float,"isNaN$", -function(){ -return isNaN(this.valueOf()); -}); - -m$(Float,"isInfinite$F", -function(num){ -return num == num && !Number.isFinite(num); -}, 1); - -m$(Float,"isInfinite$", -function(){ - var v = this.valueOf(); -return v == v && !Number.isFinite(this.valueOf()); -}); - -m$(Float,"equals$O", -function(s){ -return (s instanceof Float) && s.valueOf()==this.valueOf(); -}); - -m$(Float, "$box$", function(v) { - return Float.valueOf$F(v.floatValue$()); -}); - -Clazz._setDeclared("Double", java.lang.Double=Double=function(){ - if (typeof arguments[0] == "number") { - this.c$$D(arguments[0]); - } else if (arguments[0] === null || typeof arguments[0] != "object") { - this.c$(arguments[0]); - } -}); -decorateAsNumber(Double,"Double", "double", "D"); - -Double.serialVersionUID=Double.prototype.serialVersionUID=-9172774392245257468; -Double.MIN_VALUE=Double.prototype.MIN_VALUE=4.9e-324; -Double.MAX_VALUE=Double.prototype.MAX_VALUE=1.7976931348623157e+308; -Double.NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY; -Double.POSITIVE_INFINITY=Number.POSITIVE_INFINITY; -Double.NaN=Number.NaN; -// Double.TYPE=Double.prototype.TYPE=Double; - -Double.toString=Double.toString$D=Double.prototype.toString=function(){ -if(arguments.length!=0){ -return Clazz._floatToString(arguments[0]); -}else if(this===Double){ -return"class java.lang.Double"; -} -return Clazz._floatToString(this.valueOf()); -}; - -m$(Double, "c$$D", function(v){ - v || v != v || (v == 0) || (v = 0); - this.valueOf=function(){return v;}; -}, 1); - -m$(Double,"c$", function(v){ - // -0 here becomes 0, from Double.valueOf(d) - v || v == null || v != v || (v = 0); - if (typeof v != "number") - v = Double.parseDouble$S(v); - this.valueOf=function(){return v;} -}, 1); - -m$(Double, ["c$$S"], function(v){ -v || v == null || (v == 0) || (v = 0); -if (typeof v != "number") - v = Double.parseDouble$S(v); -this.valueOf=function(){return v;}; -}, 1); - -Double.prototype.isNaN$ = Float.prototype.isNaN$; -Double.isNaN$D = Double.prototype.isNaN$D = Float.isNaN$F; - -Float.prototype.hashCode$ = function() {this._hashcode || (this._hashcode = new String("F\u79d8" + this.valueOf()).hashCode$())} -Double.prototype.hashCode$ = function() {this._hashcode || (this._hashcode = new String("D\u79d8" + this.valueOf()).hashCode$())} -Double.isInfinite$D = Double.prototype.isInfinite$D = Float.isInfinite$F; -Double.prototype.isInfinite$ = Float.prototype.isInfinite$; - -m$(Double,"parseDouble$S", -function(s){ -if(s == null) { - throw Clazz.new_(NumberFormatException.c$$S, ["null"]); -} -if(s.length == 0) { - throw Clazz.new_(NumberFormatException.c$$S, ["empty String"]); -} -if (s.indexOf("NaN") >= 0) - return NaN; -var v=Number(s); -if(isNaN(v)){ -throw Clazz.new_(NumberFormatException.c$$S, ["Not a Number : "+s]); -} -return v; -}, 1); - -m$(Double,["doubleToRawLongBits$D", "doubleToLongBits$D"], -function(d){ - geta64()[0] = d; - return toLongI2(i64[0], i64[1]); -}, 1); - -m$(Double,"valueOf$S", -function(v){ -return Clazz.new_(Double.c$$S, [v]); -}, 1); - -m$(Double,"valueOf$D", -function(v){ -return Clazz.new_(Double.c$, [v]); -}, 1); - -// Double.prototype.equals = -m$(Double,"equals$O", -function(s){ -return (s instanceof Double) && s.valueOf()==this.valueOf(); -}); - -m$(Double, "$box$", function(v) { - return Double.valueOf$D(v.doubleValue$()); -}); - - -Clazz._setDeclared("Boolean", -Boolean = java.lang.Boolean = Boolean || function(){ -if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); -}); - -extendObject(Boolean); - -Boolean.__CLASS_NAME__="Boolean"; -addInterface(Boolean,[java.io.Serializable,java.lang.Comparable]); -setJ2STypeclass(Boolean, "boolean", "Z"); -// extendPrototype(Boolean, true, false); -Boolean.serialVersionUID=Boolean.prototype.serialVersionUID=-3665804199014368530; - -m$(Boolean, ["c$", "c$$S"], -function(s){ - var b = ((typeof s == "string" ? Boolean.toBoolean(s) : s) ? true : false); - this.valueOf=function(){return b;}; -}, 1); - -m$(Boolean, "c$$Z", function(v){ - this.valueOf=function(){return v;}; - }, 1); - - -Boolean.TRUE=Boolean.prototype.TRUE=Clazz.new_(Boolean.c$$Z, [true]); -Boolean.FALSE=Boolean.prototype.FALSE=Clazz.new_(Boolean.c$$Z, [false]); -m$(Boolean,"valueOf$S",function(s){ return("true".equalsIgnoreCase$S(s)?Boolean.TRUE:Boolean.FALSE);}, 1); - -// the need is to have new Boolean(string), but that won't work with native -// Boolean -// so instead we have to do a lexical switch from "new Boolean" to -// "Boolean.from" -// note no $ here - -m$(Boolean,"valueOf$Z",function(b){ return(b?Boolean.TRUE:Boolean.FALSE);}, 1); - - -// encoded by the transpiler for new Boolean(boolean); NOT equivalent to -// Boolean.TRUE or Boolean.FALSE -m$(Boolean,"from", -function(name){ -return Clazz.new_(Boolean.c$$Z, [Boolean.toBoolean(name)]); -}, 1); - -m$(Boolean,"getBoolean$S", -function(name){ -var result=false; -try{ -result=Boolean.toBoolean(System.getProperty$S(name)); -}catch(e){ -if(Clazz.instanceOf(e,IllegalArgumentException)){ -}else if(Clazz.instanceOf(e,NullPointerException)){ -}else{ -throw e; -} -} -return result; -}, 1); - -m$(Boolean,"parseBoolean$S", function(s){return Boolean.toBoolean(s);}, 1); - -m$(Boolean,"toBoolean", -function(name){ -return(typeof name == "string" ? name.equalsIgnoreCase$S("true") : !!name); -}, 1); - - -m$(Boolean,["$c","booleanValue","booleanValue$"], function(){ return this.valueOf(); }); - -m$(Boolean,"compare$Z$Z", function(a,b){return(a == b ? 0 : a ? 1 : -1);}, 1); - -m$(Boolean,["compareTo$Boolean","compareTo$O"], - function(b){ - return(b.valueOf() == this.valueOf() ? 0 : this.valueOf() ? 1 : -1); - }); - -// Boolean.prototype.equals = - m$(Boolean,"equals$O", - function(obj){ - return obj instanceof Boolean && this.booleanValue()==obj.booleanValue(); - }); - -m$(Boolean,"hashCode$", function(){ return this.valueOf()?1231:1237;}); -m$(Boolean,"hashCode$Z", function(b){ return b?1231:1237;}, 1); - -m$(Boolean,"logicalAnd$Z$Z", function(a,b){return(a && b);}, 1); -m$(Boolean,"logicalOr$Z$Z", function(a,b){return(a || b);}, 1); -m$(Boolean,"logicalXor$Z$Z", function(a,b){return !!(a ^ b);}, 1); - - -m$(Boolean,"toString",function(){return this.valueOf()?"true":"false";}); -m$(Boolean,"toString$Z",function(b){return "" + b;}, 1); - - -Clazz._Encoding={ - UTF8:"utf-8", // EF BB BF - UTF16:"utf-16", // FF FE (LE) - ASCII:"ascii" -}; - -(function(E) { - - var textDecoder = (self.TextDecoder && new TextDecoder() || null); - -E.guessEncoding=function(str){ -return ((str.charCodeAt(0)&0xFF)==0xEF&&(str.charCodeAt(1)&0xFF)==0xBB&&(str.charCodeAt(2)&0xFF)==0xBF ? E.UTF8 - : (str.charCodeAt(0)&0xFF)==0xFF&&(str.charCodeAt(1)&0xFF)==0xFE ? E.UTF16 // LE - : E.ASCII); -}; - -E.guessEncodingArray=function(a, offset){ -return ((a[offset]&0xFF)==0xEF&&(a[offset + 1]&0xFF)==0xBB&&(a[offset + 2]&0xFF)==0xBF ? E.UTF8 - : (a[offset + 0]&0xFF)==0xFF&&(a[offset + 1]&0xFF)==0xFE ? E.UTF16 : E.ASCII); -}; - -E.readUTF8Array=function(a, offset, length){ - // a will be an Int8Array, UTF8 only - // TextDecoder will accept a BOM or not. Java doesn't - var encoding=E.guessEncodingArray(a, offset); - var startIdx=0; - if(encoding==E.UTF8){ - startIdx=3; - }else if(encoding==E.UTF16){ - startIdx=2; - } - if (textDecoder) { - offset += startIdx; - length -= startIdx; - if (offset == 0 && length == a.length) - return textDecoder.decode(a); - var arr=new Uint8Array(length); - for(var i = 0; i < length; i++){ - arr[i] = a[offset + i]; - } - // Java needs to see the 0xFEFF byte mark - var s = textDecoder.decode(arr); - return (startIdx ? '\ufeff' + s : s); - } -// IE only. I don't know where this comes from. Is it Java? -var arrs=new Array(); -for(var i=offset + startIdx, endIdx = offset + length; i < endIdx; i++){ -var charCode=a[i]; -if(charCode<0x80){ -arrs[arrs.length]=String.fromCharCode(charCode); -}else if(charCode>0xc0&&charCode<0xe0){ -var c1=charCode&0x1f; -var c2=a[++i]&0x3f; -var c=(c1<<6)+c2; -arrs[arrs.length]=String.fromCharCode(c); -}else if(charCode>=0xe0){ -var c1=charCode&0x0f; -var c2=a[++i]&0x3f; -var c3=a[++i]&0x3f; -var c=(c1<<12)+(c2<<6)+c3; -arrs[arrs.length]=String.fromCharCode(c); -} -} -return arrs.join(''); -}; - - -E.convert2UTF8=function(str){ -var encoding=this.guessEncoding(str); -var startIdx=0; -if(encoding==E.UTF8){ -return str; -}else if(encoding==E.UTF16){ -startIdx=2; -} - -var offset=0; -var arrs=new Array(offset+str.length-startIdx); - -for(var i=startIdx;i>6); -var c2=0x80+(charCode&0x003f); -arrs[offset+i-startIdx]=String.fromCharCode(c1)+String.fromCharCode(c2); -}else{ -var c1=0xe0+((charCode&0xf000)>>12); -var c2=0x80+((charCode&0x0fc0)>>6); -var c3=0x80+(charCode&0x003f); -arrs[offset+i-startIdx]=String.fromCharCode(c1)+String.fromCharCode(c2)+String.fromCharCode(c3); -} -} -return arrs.join(''); -}; -if(!String.__PARAMCODE){ - -String.__PARAMCODE = "S"; - -Clazz._setDeclared("String", java.lang.String=String); - -extendObject(String, EXT_NO_TOSTRING); - -addInterface(String,[java.io.Serializable,CharSequence,Comparable]); - -String.serialVersionUID=String.prototype.serialVersionUID=-6849794470754667710; - -var formatterClass; - -String.format$S$OA = function(format, args) { - if (!formatterClass) - formatterClass = Clazz._4Name("java.util.Formatter", null, null, true); - var f = new formatterClass(); - return f.format$S$OA.apply(f,arguments).toString(); - }; - - // Java8 - String.lastIndexOf$CA$I$I$S$I = function(source, sourceOffset, sourceCount, target, fromIndex) { - return C$.lastIndexOf$CA$I$I$CA$I$I$I(source, sourceOffset, sourceCount, target.value, 0, target.value.length, fromIndex); - }; - - // Java8 - String.lastIndexOf$CA$I$I$CA$I$I$I = function(source, sourceOffset, sourceCount, target, targetOffset, targetCount, fromIndex) { - var rightIndex=sourceCount - targetCount; - if (fromIndex < 0) { - return -1; - }if (fromIndex > rightIndex) { - fromIndex=rightIndex; - }if (targetCount == 0) { - return fromIndex; - }var strLastIndex=targetOffset + targetCount - 1; - var strLastChar=target[strLastIndex]; - var min=sourceOffset + targetCount - 1; - var i=min + fromIndex; - searching : while (true){ - while (i >= min && source[i] != strLastChar ){ - i--; - } - if (i < min) { - return -1; - }var j=i - 1; - var start=j - (targetCount - 1); - var k=strLastIndex - 1; - while (j > start){ - if (source[j--] != target[k--]) { - i--; - continue searching; - }} - return start - sourceOffset + 1; - } - }; - - - String.CASE_INSENSITIVE_ORDER = { - compare$O$O: function(s1, s2){ - if(s1==null || s2 == null) - throw new NullPointerException(); - if(s1==s2) return 0; - var s1=s1.toUpperCase(); - var s2=s2.toUpperCase(); - if(s1==s2) return 0; - var s1=s1.toLowerCase(); - var s2=s2.toLowerCase(); - return (s1==s2 ? 0 : s1 > s2 ? 1 : -1); - } - } - -String.CASE_INSENSITIVE_ORDER.compare$S$S = String.CASE_INSENSITIVE_ORDER.compare$O$O; - -CharSequence.$defaults$(String); - -;(function(sp) { - - // Java-11 - -sp.isBlank$ = function() { - return this.indexOfNonWhitespace$() == this.length$(); -} - -sp.lines$ = function() { - return CharSequence.lines$S(this); -} - -sp.indexOfNonWhitespace$ = function() { - return this.length - this.stripLeading$().length; -} - -//sp.chars$ is implemented as CharSequence.prototype.chars$ -//sp.codePoints$ is implemented as = CharSequence.prototype.codePoints$ - -sp.repeat$I = function(count) { - if (count < 0) { - throw new IllegalArgumentException("count is negative: " + count); - } - if (count == 1) { - return this; - } - var len = this.length; - if (len == 0 || count == 0) { - return ""; - } - var s = this; - for (var i = 1; i < count; i++) { - s += this; - } - return s; -} - -sp.strip$ = function() { return this.trim(); } - -sp.stripLeading$ = function() { return this.trimStart ? this.trimStart() : this.trimLeft(); } - -sp.stripTrailing$ = function() { return this.trimEnd ? this.trimEnd() : this.trimRight(); } - - // -sp.compareToIgnoreCase$S = function(str) { return String.CASE_INSENSITIVE_ORDER.compare$S$S(this, str);} - -sp.replace$ = function(c1,c2){ - if (c1 == c2 || this.indexOf(c1) < 0) return "" + this; - if (c1.length == 1) { - if ("\\$.*+|?^{}()[]".indexOf(c1) >= 0) - c1 = "\\" + c1; - } else { - c1=c1.replace(/([\\\$\.\*\+\|\?\^\{\}\(\)\[\]])/g,function($0,$1){return "\\"+$1;}); - } - return this.replace(new RegExp(c1,"gm"),c2); -}; - -// fastest: -sp.replaceAll$=sp.replaceAll$S$S=sp.replaceAll$CharSequence$CharSequence=function(exp,str){ -return this.replace(newRegExp(exp,"gm"),str); -}; -sp.replaceFirst$S$S=function(exp,str){ -return this.replace(newRegExp(exp,"m"),str); -}; -sp.matches$S=function(exp){ -if(exp!=null){ -exp="^("+exp+")$"; -} -var regExp=newRegExp(exp,"gm"); -var m=this.match(regExp); -return m!=null&&m.length!=0; -}; - -sp.regionMatches$I$S$I$I=function(toffset,other,ooffset,len){ - return this.regionMatches$Z$I$S$I$I(false,toffset,other,ooffset,len); -} - -sp.regionMatches$Z$I$S$I$I=function(ignoreCase,toffset,other,ooffset,len){ -var to=toffset; -var po=ooffset; - -if((ooffset<0)||(toffset<0)||(toffset>this.length-len)|| -(ooffset>other.length-len)){ -return false; -} -var s1=this.substring(toffset,toffset+len); -var s2=other.substring(ooffset,ooffset+len); -if(ignoreCase){ -s1=s1.toLowerCase(); -s2=s2.toLowerCase(); -} -return s1==s2; -}; - -var newRegExp = function(regex, flags) { - if (regex.indexOf("\\Q") >= 0 || regex.indexOf("(?") == 0) - return Clazz.loadClass("java.util.regex.Pattern").getJSRegex$S$S(regex, flags); - return new RegExp(regex, flags); -} -sp.split$S=sp.split$S$I=function(regex,limit){ -var arr; -if (!limit && regex == " ") { - arr = this.split(" "); -} else if(limit && limit > 0){ - if(limit == 1){ - arr = [this]; - } else { - var regExp=newRegExp("("+regex+")","gm"); - var count=1; - var s=this.replace(regExp,function($0,$1){ - count++; - if(count==limit){ - return"@@_@@"; - } - else if(count>limit){ - return $0; - }else{ - return $0; - } - }); - regExp=new RegExp(regex,"gm"); - arr=this.split(regExp); - if(arr.length>limit){ - arr[limit-1]=s.substring(s.indexOf("@@_@@")+5); - arr.length=limit; - } - } -}else{ - arr = this.split(newRegExp(regex,"gm")); -} -while (arr[arr.length - 1] === "") - arr.pop(); -return Clazz.array(String, -1, arr); -}; - -var sn=function(s, prefix,toffset){ - var to=toffset; - var po=0; - var pc=prefix.length; - - if((toffset<0)||(toffset>s.length-pc)){ - return false; - } - while(--pc>=0){ - if(s.charAt(to++)!=prefix.charAt(po++)){ - return false; - } - } - return true; -}; - -sp.startsWith$S=sp.startsWith$S$I=function(prefix){ -if(arguments.length==1){ -return sn(this,arguments[0],0); -}else if(arguments.length==2){ -return sn(this,arguments[0],arguments[1]); -}else{ -return false; -} -}; - -sp.endsWith$S=function(suffix){ -return sn(this, suffix,this.length-suffix.length); -}; - -sp.equals$O = function(anObject){ -return this.valueOf()==anObject; -}; - -sp.equalsIgnoreCase$S=function(anotherString){ -return(anotherString==null)?false:(this==anotherString -||this.toLowerCase()==anotherString.toLowerCase()); -}; - - -sp.hash=0; - -sp.hashCode$=function(){ -var h=this.hash; -if(h==0){ -var off=0; -var len=this.length; -for(var i=0;is.length){ - throw new StringIndexOutOfBoundsException(srcEnd); - } - if(srcBegin>srcEnd){ - throw new StringIndexOutOfBoundsException(srcEnd-srcBegin); - } - if(dst==null){ - throw new NullPointerException(); - } - for(var i=0;i255){ -arrs[ii]=0x1a; -arrs[ii+1]=c&0xff; -arrs[ii+2]=(c&0xff00)>>8; -ii+=2; -}else{ -arrs[ii]=c; -} -ii++; -} -return Clazz.array(Byte.TYPE, -1, arrs); -}; - -sp.contains$S = function(a) {return this.indexOf(a) >= 0} // bh added -sp.compareTo$ = sp.compareTo$S = sp.compareTo$O = function(a){return this > a ? 1 : this < a ? -1 : 0} // bh - // added - -sp.toCharArray$=function(){ - var result = this.split(""); - return setArray(result, Character.TYPE, "CA", -1); -}; - -String.valueOf$ = String.valueOf$Z = String.valueOf$C = String.valueOf$CA - = String.valueOf$CA$I$I = String.valueOf$D = String.valueOf$F - = String.valueOf$I = String.valueOf$J = String.valueOf$O = -function(o){ -if(o=="undefined"){ -return String.valueOf(); -} -if(o instanceof Array){ -if(arguments.length==1){ -return o.join(''); -}else{ -var off=arguments[1]; -var len=arguments[2]; -var oo=new Array(len); -for(var i=0;i cs.length$() && this.indexOf(cs.toString()) > -1); -}; - -sp.contentEquals$CharSequence=function(cs){ -if(cs==null) - throw new NullPointerException(); -if(this == cs) - return true; -if(this.length!=cs.length$()) - return false; -var v=cs.getValue(); -var n=this.length; -while(n-- >= 0){ - if(this.charCodeAt(n)!=v[n]){ - return false; - } -} -return true; -}; - -sp.concat$S = function(s){ -if(s==null){ -throw new NullPointerException(); -} -return this.concat(s); -}; - -sp.isEmpty$ = function() { - return this.valueOf().length == 0; -} - -sp.indexOf$S = sp.indexOf$S$I = sp.indexOf; -sp.lastIndexOf$S = sp.lastIndexOf; - -sp.indexOf$I = function(c){ - return this.indexOf(typeof c == "string" ? c : String.fromCodePoint(c)); -}; - -sp.indexOf$I$I = function(c, first) { - return this.indexOf(typeof c == "string" ? c : String.fromCodePoint(c), first); -} - -sp.lastIndexOf$S = sp.lastIndexOf$S$I = sp.lastIndexOf; - -sp.lastIndexOf$I = function(c){ - return this.lastIndexOf(typeof c == "string" ? c : String.fromCodePoint(c)); -}; - -sp.lastIndexOf$I$I = function(c, last) { - return this.lastIndexOf(typeof c == "string" ? c : String.fromCodePoint(c), last); -} - -sp.intern$=function(){ -return this.valueOf(); -}; - -String.copyValueOf$S=String.copyValueOf$S$I$I=sp.copyValueOf=function(){ - if(arguments.length==1){ - return String.instantialize(arguments[0]); - }else{ - return String.instantialize(arguments[0],arguments[1],arguments[2]); - } -}; - -sp.$c = function(){return this.charCodeAt(0)}; - -// covers for same functions in JavaScript -sp.codePointAt$I = (sp.codePointAt || sp.charCodeAt); // MSIE only -sp.charCodeAt$I = sp.charCodeAt; -sp.charAt$I = sp.charAt; -sp.substring$I = sp.substring$I$I = sp.subSequence$I$I = sp.substring; -sp.replace$C$C = sp.replace$CharSequence$CharSequence = sp.replace$; -sp.toUpperCase$ = sp.toUpperCase; -sp.toLowerCase$ = sp.toLowerCase; -sp.toLowerCase$java_util_Locale = sp.toLocaleLowerCase ? function(loc) {loc = loc.toString(); var s = this.valueOf(); return (loc ? s.toLocaleLowerCase(loc.replace(/_/g,'-')) : s.toLocaleLowerCase()) } : sp.toLowerCase; -sp.toUpperCase$java_util_Locale = sp.toLocaleUpperCase ? function(loc) {loc = loc.toString(); var s = this.valueOf(); return (loc ? s.toLocaleUpperCase(loc.replace(/_/g,'-')) : s.toLocaleUpperCase()) } : sp.toUpperCase; -sp.length$ = function() {return this.length}; -sp.trim$ = function() { - var s = this.trim(); - var j; - if (s == "" || s.charCodeAt(j = s.length - 1) > 32 && s.charCodeAt(0) > 32) return s; - var i = 0; - while (i <= j && s.charCodeAt(i) <= 32)i++; - while (j > i && s.charCodeAt(j) <= 32)j--; - return s.substring(i, ++j); -}; - - -// toString is always unqualified, and it is unnecessary for String - - -})(String.prototype); - -// Note that of all these constructors, only new String("xxx") and new -// String(new String()) -// return actual JavaScript String objects (as of 3.2.9.v1) - -String.instantialize=function(){ -var x=arguments[0]; -switch (arguments.length) { -case 0: - return new String(); -case 1: - // String(byte[] bytes) - // String(char[] value) - // String(StringBuffer buffer) - // String(StringBuilder builder) - // String(String original) - if (x.__BYTESIZE){ - return x.length == 0 ? "" : E.readUTF8Array(x, 0, x.length).toString(); - } - if (x instanceof Array){ - return x.length == 0 ? "" : typeof x[0]=="number" ? E.readUTF8Array(new Uint8Array(x), 0, x.length).toString() : x.join(''); - } - // raw JavaScript string unless new String(string) - return (typeof x == "string" || x instanceof String ? new String(x) : x.toString()); -case 2: - // String(byte[] ascii, int hibyte) - // String(char[] value, boolean share) ??? - // String(byte[] bytes, Charset charset) - // String(byte[] bytes, String charsetName) - - var a1=arguments[1]; - return (typeof a1=="number" ? String.instantialize(x,a1,0,x.length) - : typeof a1 == "boolean" ? x.join('') - : String.instantialize(x,0,x.length,a1.toString())); -case 3: - // String(byte[] bytes, int offset, int length) - // String(char[] value, int offset, int count) - // String(int[] codePoints, int offset, int count) - - var bytes=x; - var offset=arguments[1]; - var length=arguments[2]; - if(offset<0||length+offset>bytes.length){ - throw new IndexOutOfBoundsException(); - } - if (length == 0) - return ""; - var arr=new Array(length); - var isChar=!!bytes[offset].length; - if(isChar){ - for(var i=0;i= 0) - return E.readUTF8Array(bytes,offset,length).toString(); - cs = Clazz.loadClass("java.nio.charset.Charset").forName$S(cs); - if (!cs) - throw new java.io.UnsupportedEncodingException(); - } - return cs.decode$BA$I$I(bytes, offset, length).toString(); - } - var count=arguments[3]; - var offset=arguments[2]; - var hibyte=arguments[1]; - var value=new Array(count); - if(hibyte==0){ - for(var i=count;i-->0;){ - value[i]=String.fromCharCode(bytes[i+offset]&0xff); - } - }else{ - hibyte<<=8; - for(var i=count;i-->0;){ - value[i]=String.fromCharCode(hibyte|(bytes[i+offset]&0xff)); - } - } - return value.join(''); -default: - // ???? - var s=""; - for(var i=0;i= 0x1c && c <= 0x20 || c >= 0x9 && c <= 0xd || c == 0x1680 - || c >= 0x2000 && c != 0x2007 && (c <= 0x200b || c == 0x2028 || c == 0x2029 || c == 0x3000)); -}, 1); -m$(C$,"isSurrogate$C", function(c) { - c = c.charCodeAt(0); - return c >= 0xd800 && c < 0xe000; - -}, 1); -m$(C$,"isHighSurrogate$C", function(c) { - c = c.charCodeAt(0); - return c >= 0xd800 && c < 0xdc00; - -}, 1); -m$(C$,"isLowSurrogate$C", function(c) { - c = c.charCodeAt(0); - return c >= 0xdc00 && c < 0xe000; - -}, 1); - -m$(C$,["digit$C$I","digit$I$I"], -function(c,radix){ -var i = (typeof c == "string" ? c.charCodeAt(0) : c); -if(radix >= 2 && radix <= 36){ - if(i < 128){ - var result = -1; - if(48 <= i && i <= 57){ - result = i - 48; - }else if(97 <= i && i <= 122){ - result = i - 87; - }else if(65 <= i && i <= 90){ - result=i-(55); - } - return (result < radix ? result : -1); - } -} -return -1; -}, 1); - -m$(C$,"toString$C", function(c) { - return c; -}, 1); - -m$(C$,"toString", -function(c){ -if (arguments.length == 0) { - if(this===Character){ - return"class java.lang.Character"; - } - var buf=[this.value]; - return String.valueOf$(buf); -} -return String.valueOf$(c); -}, 1); -m$(C$,"charCount$I", function(codePoint){ - return codePoint >= 0x010000 ? 2 : 1; -}, 1); - - -Integer.compare$I$I = -Byte.compare$B$B = -Short.compare$H$H = -Float.compare$F$F = -Double.compare$D$D = function(a,b) { return (a < b ? -1 : a == b ? 0 : 1) }; - -Integer.prototype.objectValue$ = -Byte.prototype.objectValue$ = -Short.prototype.objectValue$ = -Long.prototype.objectValue$ = -Float.prototype.objectValue$ = -Boolean.prototype.objectValue$ = -Double.prototype.objectValue$ = function() {return this.valueOf()}; - -Character.prototype.objectValue$ = function() { return this.value }; - -Character.prototype.intValue$ = function() { return this.value.codePointAt(0) }; - -Integer.min$I$I = Long.min$J$J = Float.min$F$F = Double.min$D$D = function(a,b) { return Math.min(a,b); }; - -Integer.max$I$I = Long.max$J$J = Float.max$F$F = Double.max$D$D = function(a,b) { return Math.max(a,b); }; - -Integer.sum$I$I = Long.sum$J$J = Float.sum$F$F = Double.sum$D$D = function(a,b) { return a + b; }; - - -// TODO: Only asking for problems declaring Date. This is not necessary - -// NOTE THAT java.util.Date, like java.lang.Math, is unqualified by the -// transpiler -- this is NOT necessary - -;(function() { - -Clazz._setDeclared("java.util.Date", java.util.Date=Date); -// Date.TYPE="java.util.Date"; -Date.__CLASS_NAME__="Date"; -addInterface(Date,[java.io.Serializable,java.lang.Comparable]); - -Date.parse$S = Date.parse; - -m$(java.util.Date, ["c$", "c$$S", "c$$J"], function(t) { - this.setTime$J(typeof t == "string" ? Date.parse(t) : t ? t : System.currentTimeMillis$()) -}, 1); - -m$(java.util.Date, ["getClass$", "getClass"], function () { return Clazz.getClass(this); }, 1); - -m$(java.util.Date,["clone$","clone"], -function(){ -return new Date(this.getTime()); -}); - -m$(java.util.Date,["before", "before$java_util_Date"], -function(when){ -return this.getTime()when.getTime(); -}); - -m$(java.util.Date,["equals","equals$O"], -function(obj){ -return Clazz.instanceOf(obj,java.util.Date)&&this.getTime()==(obj).getTime(); -}); -m$(java.util.Date,["compareTo","compareTo$java_util_Date","compareTo$","compareTo$O","compareTo$O"], -function(anotherDate){ -var thisTime=this.getTime(); -var anotherTime=anotherDate.getTime(); -return(thisTime>32)); -}); - -Date.prototype.toString$ = Date.prototype.toString$$ = Date.prototype.toString; -m$(java.util.Date,"toString", -function(){ -var a = this.toString$().split(" "); -// Sun Mar 10 1996 17:05:00 GMT-0600 (Central Daylight Time) -> Sun Mar 10 -// 16:05:00 CST 1996 -return a[0] + " " + a[1] + " " + a[2] + " " + a[4] + " " + a[5] + " " + a[3]; -// return this.toString$().split("(")[0].trim(); -}); -})(); - -var notImplemented = function(why) {return function() {System.err.println(why + " has not been implemented.")}}; - -;(function(dp){ -dp.from$java_time_Instant = notImplemented("Date.from(java.time.Instant)"); -dp.setInstant$ = notImplemented("Date.toInstant()"); - -dp.getDate$ = dp.getDate; -dp.getDay$ = dp.getDay; -dp.getHours$ = dp.getHours; -dp.getMinutes$ = dp.getMinutes; -dp.getMonth$ = dp.getMonth; -dp.getSeconds$ = dp.getSeconds; -dp.getTime$ = dp.getTime; -dp.getTimeZoneOffset$ = dp.getTimeZoneOffset; -dp.getYear$ = dp.getYear; -dp.parse$S = dp.parse; -dp.setDate$I = dp.setDate; -dp.setHours$I = dp.setHours; -dp.setMinutes$I = dp.setMinutes; -dp.setMonth$I = dp.setMonth; -dp.setSeconds$I = dp.setSeconds; -dp.setTime$J = dp.setTime; -dp.setYear$I = dp.setYear; -dp.toGMTString$ = dp.toUTCString || dp.toGMTString; -dp.toLocaleString$ = dp.toLocaleString = dp.toLocaleDateString; -dp.UTC$ = dp.UTC; - - - -})(Date.prototype); - -var printStackTrace = function(e, ps) { - ps.println$O("" + e); - if (e.stackTrace){ - for (var i = 0; i < e.stackTrace.length; i++) { - var t = e.stackTrace[i]; - if (t.nativeClazz == null || !isInstanceOf(t.nativeClazz, Throwable)) { - ps.println$O(t); - } - } - } - if (e.stack) { - var S = e.stack.split("\n"); - for (var i = 0; i < S.length; i++) { - if (S[i].indexOf("__startAppletJS") >= 0) - break; - ps.println$O(S[i]); - } - } -} - -var C$ = Clazz.newClass(java.lang, "Throwable", function () { -Clazz.newInstance(this, arguments); -}, null, java.io.Serializable); - -m$(C$, 'c$', function () { -this.fillInStackTrace$(); -this.detailMessage = this.stack; -this.cause = this; -}, 1); - -m$(C$, 'c$$S', function (message) { -this.fillInStackTrace$(); -this.cause = this; -this.detailMessage = message; -}, 1); - -m$(C$, 'c$$S$Throwable', function (message, cause) { -this.fillInStackTrace$(); -this.detailMessage = message; -this.cause = cause; -}, 1); - -m$(C$, 'c$$Throwable', function (cause) { -this.fillInStackTrace$(); -this.detailMessage = (cause == null ? this.stack : cause.toString ()); -this.cause = cause; -}, 1); - -m$(C$, 'getMessage$', function () {return this.message || this.detailMessage || null}); - -m$(C$, 'getLocalizedMessage$', function () { -return this.getMessage$(); -}); - -m$(C$, 'getCause$', function () { -return (this.cause === this ? null : this.cause); -}); - -m$(C$, 'initCause$Throwable', function (cause) { -if (this.cause !== this) throw Clazz.new_(IllegalStateException.c$$S,["Can't overwrite cause"]); -if (cause === this) throw Clazz.new_(IllegalArgumentException.c$$S,["Self-causation not permitted"]); -this.cause = cause; -return this; -}); - -m$(C$, 'toString', function () { -var s = this.getClass$().getName$(); -var message = this.getLocalizedMessage$(); -return (message != null) ? (s + ": " + message) : s; -}); - -m$(C$, 'getStackTrace$', function () { -return this.stackTrace; -}); - -m$(C$, 'printStackTrace$', function () { - printStackTrace(this, System.err); -}); - -m$(C$, 'printStackTrace$java_io_PrintWriter', function (writer) { - printStackTrace(this, writer); -}); - -m$(C$, ['printStackTrace$java_io_PrintStream','printStackTrace$java_io_PrintWriter'], function (stream) { - printStackTrace(this, stream); -}); - -Clazz.newMeth(C$, 'fillInStackTrace$', function () { -this.stackTrace = Clazz.array(StackTraceElement); -try { -var caller = arguments.callee.caller; -var i = 0; -while (caller.caller && caller.caller.name != "__loadClazz") { - caller = caller.caller; - if (++i > 2 && caller.exClazz || caller == Clazz.load) - break; -} -var superCaller = null; -var callerList = []; -var index = 0; -while (index < 20 && caller != null) { - index++; - var clazzName = null; - var nativeClazz = null; - superCaller = caller; - if (superCaller.exClazz == null) { - if (superCaller.j2sname == "__START_APPLET__") - break; - } else { - nativeClazz = superCaller.exClazz; - } - var st =Clazz.new_(StackTraceElement.c$, [ - ((nativeClazz != null && nativeClazz.__CLASS_NAME__.length != 0) ? - nativeClazz.__CLASS_NAME__ : "anonymous"), - ((superCaller.exName == null) ? "anonymous" : superCaller.exName), - null, -1]); - st.nativeClazz = nativeClazz; - this.stackTrace.push(st); - for (var i = 0; i < callerList.length; i++) { - if (callerList[i] == superCaller) { - // ... stack Information lost as recursive invocation existed ... - var st =Clazz.new_(StackTraceElement.c$, ["lost", "missing", null, -3]); - st.nativeClazz = null; - this.stackTrace.push(st); - index = 100; - break; - } - } - if (superCaller != null) { - callerList.push(superCaller); - } - caller = (superCaller && superCaller.arguments && superCaller.arguments.callee) ? superCaller.arguments.callee.caller : null; -} -} catch (e) {}; - -Clazz.initializingException = false; -return this; -}); - -Clazz.newMeth(C$, 'setStackTrace$StackTraceElementA', function (stackTrace) { -var defensiveCopy = stackTrace.clone$(); -for (var i = 0; i < defensiveCopy.length; i++) if (defensiveCopy[i] == null) throw Clazz.new_(NullPointerException.c$$S,["stackTrace[" + i + "]"]); - -this.stackTrace = defensiveCopy; -}); - -C$=Clazz.newClass(java.lang,"StackTraceElement",function(){ -this.declaringClass=null; -this.methodName=null; -this.fileName=null; -this.lineNumber=0; -},null,java.io.Serializable); - -m$(C$, "c$",function(cls,method,file,line){ -if(cls==null||method==null){ -throw new NullPointerException(); -}this.declaringClass=cls; -this.methodName=method; -this.fileName=file; -this.lineNumber=line; -},1); - -m$(C$,"equals$O", -function(obj){ -if(!(Clazz.instanceOf(obj,StackTraceElement))){ -return false; -}var castObj=obj; -if((this.methodName==null)||(castObj.methodName==null)){ -return false; -}if(!this.getMethodName$().equals(castObj.getMethodName$())){ -return false; -}if(!this.getClassName$().equals(castObj.getClassName$())){ -return false; -}var localFileName=this.getFileName$(); -if(localFileName==null){ -if(castObj.getFileName$()!=null){ -return false; -}}else{ -if(!localFileName.equals(castObj.getFileName$())){ -return false; -}}if(this.getLineNumber$()!=castObj.getLineNumber$()){ -return false; -}return true; -}); -m$(C$,"getClassName$", -function(){ -return(this.declaringClass==null)?"":this.declaringClass; -}); -m$(C$,"getFileName$", -function(){ -return this.fileName; -}); -m$(C$,"getLineNumber$", -function(){ -return this.lineNumber; -}); -m$(C$,"getMethodName$", -function(){ -return(this.methodName==null)?"":this.methodName; -}); -m$(C$,"hashCode$", -function(){ -if(this.methodName==null){ -return 0; -}return this.methodName.hashCode$()^this.declaringClass.hashCode(); -}); -m$(C$,"isNativeMethod$", -function(){ -return this.lineNumber==-2; -}); -m$(C$,"toString", -function(){ -var s = this.getClassName$() + "." + this.getMethodName$(); -if(this.isNativeMethod$()){ - s += "(Native Method)"; -}else{ -var fName=this.getFileName$(); -if(fName==null){ - //s += "(Unknown Source)"; -}else{ -var lineNum=this.getLineNumber$(); -s += '(' + fName; -if(lineNum>=0){ - s += ':' + lineNum; -} - s += ')'; -}}return s; -}); - - -TypeError.prototype.getMessage$ || ( - - ReferenceError.prototype.getMessage$ = TypeError.prototype.getMessage$ - = ReferenceError.prototype.getMessage$ = TypeError.prototype.getLocalizedMessage$ - = function(){ return (this.stack ? this.stack : this.message || this.toString()) + (this.getStackTrace ? this.getStackTrace$() : Clazz._getStackTrace())}); - -TypeError.prototype.getStackTrace$ = ReferenceError.prototype.getStackTrace$ = function() { return Clazz._getStackTrace() } -TypeError.prototype.printStackTrace$ = ReferenceError.prototype.printStackTrace$ = function() { printStackTrace(this,System.err) } -ReferenceError.prototype.printStackTrace$java_io_PrintStream = TypeError.prototype.printStackTrace$java_io_PrintStream = function(stream){stream.println$S(this + "\n" + this.stack);}; -ReferenceError.prototype.printStackTrace$java_io_PrintWriter = TypeError.prototype.printStackTrace$java_io_PrintWriter = function(printer){printer.println$S(this + "\n" + this.stack);}; - -Clazz.Error = Error; - -var declareType = function(prefix, name, clazzSuper, interfacez) { - var cl = Clazz.newClass(prefix, name, null, clazzSuper, interfacez); - if (clazzSuper) - setSuperclass(cl, clazzSuper); - return cl; -}; - -// at least allow Error() by itself to work as before -Clazz._Error || (Clazz._Error = Error); -// setSuperclass(Clazz._Error, Throwable); - -var setEx = function(C$) { - C$.$clinit$ = 1; - m$(C$, "c$", function() { C$.superclazz.c$.apply(this, []);}, 1); - m$(C$, "c$$S", function(detailMessage){C$.superclazz.c$$S.apply(this,[detailMessage]);},1); - m$(C$, "c$$Throwable", function(exception){C$.superclazz.c$$Throwable.apply(this, arguments);}, 1); - m$(C$, "c$$S$Throwable", function(detailMessage,exception){C$.superclazz.c$$S$Throwable.apply(this, arguments); -}, 1); - - return C$; -} - -/* -;(function() { -var C$ = Clazz.newClass(java.lang, "Error", function (){ -return Clazz._Error(); -}, Throwable); -setEx(C$); -})(); -*/ -var newEx = function(prefix, name, clazzSuper) { - return setEx(declareType(prefix, name, clazzSuper)); -} - -newEx(java.lang,"Exception",Throwable); -newEx(java.lang,"Error",Throwable); - -newEx(java.lang,"RuntimeException",Exception); -newEx(java.lang,"IllegalArgumentException",RuntimeException); -newEx(java.lang,"LinkageError",Error); -newEx(java.lang,"VirtualMachineError",Error); -newEx(java.lang,"IncompatibleClassChangeError",LinkageError); - -newEx(java.lang,"AbstractMethodError",IncompatibleClassChangeError); -newEx(java.lang,"ArithmeticException",RuntimeException); -newEx(java.lang,"ArrayStoreException",RuntimeException); -newEx(java.lang,"ClassCircularityError",LinkageError); -newEx(java.lang,"ClassFormatError",LinkageError); -newEx(java.lang,"CloneNotSupportedException",Exception); -newEx(java.lang,"ReflectiveOperationException",Exception); -newEx(java.lang,"IllegalAccessError",IncompatibleClassChangeError); -newEx(java.lang,"IllegalAccessException",ReflectiveOperationException); -newEx(java.lang,"IllegalMonitorStateException",RuntimeException); -newEx(java.lang,"IllegalStateException",RuntimeException); -newEx(java.lang,"IllegalThreadStateException",IllegalArgumentException); -newEx(java.lang,"IndexOutOfBoundsException",RuntimeException); -newEx(java.lang,"InstantiationError",IncompatibleClassChangeError); -newEx(java.lang,"InstantiationException",ReflectiveOperationException); -newEx(java.lang,"InternalError",VirtualMachineError); -newEx(java.lang,"InterruptedException",Exception); -newEx(java.lang,"NegativeArraySizeException",RuntimeException); -newEx(java.lang,"NoClassDefFoundError",LinkageError); -newEx(java.lang,"NoSuchFieldError",IncompatibleClassChangeError); -newEx(java.lang,"NoSuchFieldException",ReflectiveOperationException); -newEx(java.lang,"NoSuchMethodException",ReflectiveOperationException); -newEx(java.lang,"NoSuchMethodError",IncompatibleClassChangeError); -newEx(java.lang,"NullPointerException",RuntimeException); - -;(function(){ - -var C$=Clazz.newClass(java.lang, "NumberFormatException", null, 'IllegalArgumentException'); - -C$.$clinit$=2; - -Clazz.newMeth(C$, '$init$', function () { -},1); - -Clazz.newMeth(C$, 'c$', function () { -;C$.superclazz.c$.apply(this,[]);C$.$init$.apply(this); -}, 1); - -Clazz.newMeth(C$, 'c$$S', function (s) { -;C$.superclazz.c$$S.apply(this,[s]);C$.$init$.apply(this); -}, 1); - -Clazz.newMeth(C$, 'forInputString$S', function (s) { -return Clazz.new_(C$.c$$S,["For input string: \"" + s + "\"" ]); -}, 1); -})(); - -newEx(java.lang,"OutOfMemoryError",VirtualMachineError); -newEx(java.lang,"SecurityException",RuntimeException); -newEx(java.lang,"StackOverflowError",VirtualMachineError); -newEx(java.lang,"ThreadDeath",Error); -newEx(java.lang,"UnknownError",VirtualMachineError); -newEx(java.lang,"UnsatisfiedLinkError",LinkageError); -newEx(java.lang,"UnsupportedClassVersionError",ClassFormatError); -newEx(java.lang,"UnsupportedOperationException",RuntimeException); -newEx(java.lang,"VerifyError",LinkageError); - -newEx(java.lang,"ClassCastException",RuntimeException); - -;(function() { -var C$=Clazz.newClass(java.lang,"ClassNotFoundException",function(){this.ex=null;},Exception); -m$(C$, "c$$S$Throwable", function(detailMessage,exception){ -C$.superclazz.c$$S$Throwable.apply(this, arguments); -this.ex=exception; -}, 1); -m$(C$,"getException$", -function(){ -return this.ex; -}); -m$(C$,"getCause$", -function(){ -return this.ex; -}); -})(); - -;(function() { -var C$=newEx(java.lang,"StringIndexOutOfBoundsException",IndexOutOfBoundsException); -m$(C$, "c$$I", function(index){ -C$.superclazz.c$$S.apply(this,["String index out of range: "+index]); -}, 1); -})(); - -;(function() { -var C$=Clazz.newClass(java.lang.reflect,"InvocationTargetException",function(){this.target=null;},ReflectiveOperationException); -C$.$clinit$ = 2; -m$(C$, "c$$Throwable", function(exception){ -C$.superclazz.c$$Throwable.apply(this, arguments); -this.target=exception; -}, 1); -m$(C$, "c$$Throwable$S", function(exception,detailMessage){ -C$.superclazz.c$$S$Throwable.apply(this,[detailMessage,exception]); -this.target=exception; -}, 1); -m$(C$,"getTargetException$", -function(){ -return this.target; -}); -m$(C$,"getCause$", -function(){ -return this.target; -}); -})() - -;(function(){ -var C$=Clazz.newClass(java.lang.reflect,"UndeclaredThrowableException",function(){this.undeclaredThrowable=null;},RuntimeException); -C$.$clinit$ = 2; -m$(C$, "c$$Throwable", function(exception){ -Clazz.super_(C$, this); -C$.superclazz.c$$Throwable.apply(this, arguments); -this.undeclaredThrowable=exception; -this.initCause(exception); -},1); -m$(C$, "c$$Throwable$S", function(exception,detailMessage){ -C$.superclazz.c$$S.apply(this,[detailMessage]); -this.undeclaredThrowable=exception; -this.initCause(exception); -},1); -m$(C$,"getUndeclaredThrowable$", -function(){ -return this.undeclaredThrowable; -}); -m$(C$,"getCause$", -function(){ -return this.undeclaredThrowable; -}); -})(); - -newEx(java.io,"IOException",Exception); -newEx(java.io,"CharConversionException",java.io.IOException); -newEx(java.io,"EOFException",java.io.IOException); -newEx(java.io,"FileNotFoundException",java.io.IOException); -newEx(java.io,"ObjectStreamException",java.io.IOException); -newEx(java.io,"SyncFailedException",java.io.IOException); -newEx(java.io,"UnsupportedEncodingException",java.io.IOException); -newEx(java.io,"UTFDataFormatException",java.io.IOException); - -newEx(java.io,"InvalidObjectException",java.io.ObjectStreamException); -newEx(java.io,"NotActiveException",java.io.ObjectStreamException); -newEx(java.io,"NotSerializableException",java.io.ObjectStreamException); -newEx(java.io,"StreamCorruptedException",java.io.ObjectStreamException); - -;(function() { -var C$=Clazz.newClass(java.io,"InterruptedIOException",function(){ -this.bytesTransferred=0; -},java.io.IOException); -})(); - - -;(function() { -var C$=Clazz.newClass(java.io,"InvalidClassException",function(){ -this.classname=null; -},java.io.ObjectStreamException); - -m$(C$, "c$$S$S", function(className,detailMessage){ -C$.superclazz.c$$S.apply(this,[detailMessage]); -this.classname=className; -},1); - -m$(C$,"getMessage$", -function(){ -var msg=C$.superclazz.getMessage$.apply(this, []); -if(this.classname!=null){ -msg=this.classname+';' + ' '+msg; -}return msg; -}); -})(); - - -;(function(){ -var C$=Clazz.newClass(java.io,"OptionalDataException",function(){ -this.eof=false; -this.length=0; -},java.io.ObjectStreamException); -})(); - -;(function() { -var C$=Clazz.newClass(java.io,"WriteAbortedException",function(){ -this.detail=null; -},java.io.ObjectStreamException); - -m$(C$, "c$$S$Throwable", function(detailMessage, rootCause){ -C$.superclazz.c$$S.apply(this,[detailMessage]); -this.detail=rootCause; -this.initCause(rootCause); -}, 1); - -m$(C$,"getMessage$", -function(){ -var msg=C$.superclazz.getMessage.apply(this); -return (this.detail ? msg + "; "+this.detail.toString() : msg); -}); -m$(C$,"getCause$", -function(){ -return this.detail; -}); -})(); - -newEx(java.util,"EmptyStackException",RuntimeException); -newEx(java.util,"NoSuchElementException",RuntimeException); -newEx(java.util,"TooManyListenersException",Exception); - - -;(function(){ -var C$=newEx(java.util,"ConcurrentModificationException",RuntimeException); -m$(C$, "c$", function(detailMessage, rootCause){ -Clazz.super_(C$, this); -}, 1); -})(); - -;(function(){ -var C$=Clazz.newClass(java.util,"MissingResourceException",function(){ -this.className=null; -this.key=null; -},RuntimeException); -C$.$clinit$ = 1; -m$(C$, "c$$S$S$S", function(detailMessage,className,resourceName){ -Clazz.super_(C$, this); -C$.superclazz.c$$S.apply(this,[detailMessage]); -this.className=className; -this.key=resourceName; -}, 1); -m$(C$,"getClassName$", -function(){ -return this.className; -}); -m$(C$,"getKey$", -function(){ -return this.key; -}); -})(); - -declareType(java.lang,"Void"); -setJ2STypeclass(java.lang.Void, "void", "V"); -// java.lang.Void.TYPE=java.lang.Void; -// java.lang.V - -Clazz.newInterface(java.lang.reflect,"GenericDeclaration"); - -Clazz.newInterface(java.lang.reflect,"InvocationHandler"); - -C$=Clazz.newInterface(java.lang.reflect,"Member"); - -C$=declareType(java.lang.reflect,"Modifier"); -m$(C$, "c$", function(){}, 1); - -m$(C$,"isAbstract$I", -function(modifiers){ -return((modifiers&1024)!=0); -}, 1); -m$(C$,"isFinal$I", -function(modifiers){ -return((modifiers&16)!=0); -}, 1); -m$(C$,"isInterface$I", -function(modifiers){ -return((modifiers&512)!=0); -}, 1); -m$(C$,"isNative$I", -function(modifiers){ -return((modifiers&256)!=0); -}, 1); -m$(C$,"isPrivate$I", -function(modifiers){ -return((modifiers&2)!=0); -}, 1); -m$(C$,"isProtected$I", -function(modifiers){ -return((modifiers&4)!=0); -}, 1); -m$(C$,"isPublic$I", -function(modifiers){ -return((modifiers&1)!=0); -}, 1); -m$(C$,"isStatic$I", -function(modifiers){ -return((modifiers&8)!=0); -}, 1); -m$(C$,"isStrict$I", -function(modifiers){ -return((modifiers&2048)!=0); -}, 1); -m$(C$,"isSynchronized$I", -function(modifiers){ -return((modifiers&32)!=0); -}, 1); -m$(C$,"isTransient$I", -function(modifiers){ -return((modifiers&128)!=0); -}, 1); -m$(C$,"isVolatile$I", -function(modifiers){ -return((modifiers&64)!=0); -}, 1); -m$(C$,"toString", -function(modifiers){ -var sb=new Array(0); -if(java.lang.reflect.Modifier.isPublic(modifiers))sb[sb.length]="public"; -if(java.lang.reflect.Modifier.isProtected(modifiers))sb[sb.length]="protected"; -if(java.lang.reflect.Modifier.isPrivate(modifiers))sb[sb.length]="private"; -if(java.lang.reflect.Modifier.isAbstract(modifiers))sb[sb.length]="abstract"; -if(java.lang.reflect.Modifier.isStatic(modifiers))sb[sb.length]="static"; -if(java.lang.reflect.Modifier.isFinal(modifiers))sb[sb.length]="final"; -if(java.lang.reflect.Modifier.isTransient(modifiers))sb[sb.length]="transient"; -if(java.lang.reflect.Modifier.isVolatile(modifiers))sb[sb.length]="volatile"; -if(java.lang.reflect.Modifier.isSynchronized(modifiers))sb[sb.length]="synchronized"; -if(java.lang.reflect.Modifier.isNative(modifiers))sb[sb.length]="native"; -if(java.lang.reflect.Modifier.isStrict(modifiers))sb[sb.length]="strictfp"; -if(java.lang.reflect.Modifier.isInterface(modifiers))sb[sb.length]="interface"; -if(sb.length>0){ -return sb.join(" "); -}return""; -}, 1); - -var newMethodNotFoundException = function (clazz, method) { - var message = "Method " + getClassName(clazz, true) + (method ? "." - + method : "") + " was not found"; - System.out.println(message); - console.log(message); - throw Clazz.new_(java.lang.NoSuchMethodException.c$$S, [message]); -}; - -// if (needPackage("core")) - // _Loader.loadPackage("core"); - - -// Clazz._Loader.loadZJar(Clazz._Loader.getJ2SLibBase() + -// "core/coreswingjs.z.js", "swingjs.JSUtil"); - - // if (!J2S._isAsync) { -if (!J2S._loadcore || J2S._coreFiles.length == 0) { - if (J2S._verbose)System.out.println("Clazz: No core files to load -- check Info.core"); -} else { - J2S.onClazzLoaded && J2S.onClazzLoaded(1, "Clazz loaded; loading J2S._coreFiles " + J2S._coreFiles.length); - for (var i = 0; i < J2S._coreFiles.length; i++) { - Clazz.loadScript(J2S._coreFiles[i]); - } - J2S.onClazzLoaded && J2S.onClazzLoaded(2, "Clazz loaded; core files loaded"); -} - -} // LoadClazz -})(J2S, window, document); -// SwingJSApplet.js - -// BH 8/1/2018 $-qualified Java methods -// generic SwingJS Applet -// BH 3/14/2018 8:42:33 PM adds applet._window for JSObject -// BH 12/18/2016 8:09:56 AM added SwingJS.Loaded and SwingJS.isLoaded -// BH 7/24/2015 9:09:39 AM allows setting Info.resourcePath -// BH 4/28/2015 10:15:32 PM adds getAppletHtml -// BH 4/2/2015 5:17:44 PM adds SwingJS.getJavaResource(path) - -// BH 3/27/2015 6:34:49 AM just a shell - -if(typeof(jQuery)=="undefined") alert ("Note -- jQuery is required for SwingJS, but it's not defined.") - -if (typeof(SwingJS) == "undefined") { - - SwingJS = {eventID:0}; - -(function (SwingJS, $, J2S) { - - SwingJS.getApplet = function(id, Info, checkOnly) { - if (arguments.length == 1 && typeof id == "object") { - // allow for getApplet(Info) - Info = id; - id = null; - } - return SwingJS._Applet._get(id, Info, checkOnly); - } - - // optional Info here - SwingJS.getAppletHtml = function(applet, Info) { - if (arguments.length == 1 && typeof applet == "object" && !applet._code) { - // allow for getApplet(Info) - Info = applet; - applet = null; - } - if (Info) { - var d = SwingJS._document; - SwingJS._document = null; - applet = SwingJS.getApplet(applet, Info); - SwingJS._document = d; - } - return applet._code; - } - - SwingJS._Applet = function(id, Info, checkOnly){ - window[id] = this; - this._appletType = "SwingJS._Applet" + (Info.isSigned ? " (signed)" : ""); - this._isJava = true; - this._availableParams = null; // all allowed - this._window = window; - if (checkOnly) - return this; - this._isSigned = Info.isSigned; - this._readyFunction = Info.readyFunction; - this._ready = false; - this._isJava = true; - this._isInfoVisible = false; - this._applet = null; - this._memoryLimit = Info.memoryLimit || 512; - this._canScript = function(script) {return true;}; - this._savedOrientations = []; - this._initialize = function(jarPath, jarFile) { - var doReport = false; - SwingJS._jarFile && (jarFile = SwingJS._jarFile); - if(this._jarFile) { - var f = this._jarFile; - if(f.indexOf("/") >= 0) { - alert ("This web page URL is requesting that the applet used be " + f + ". This is a possible security risk, particularly if the applet is signed, because signed applets can read and write files on your local machine or network."); - var ok = prompt("Do you want to use applet " + f + "? ", "yes or no") - if(ok == "yes") { - jarPath = f.substring(0, f.lastIndexOf("/")); - jarFile = f.substring(f.lastIndexOf("/") + 1); - } else { - doReport = true; - } - } else { - jarFile = f; - } - this_isSigned = Info.isSigned = (jarFile.indexOf("Signed") >= 0); - } - this._jarPath = Info.jarPath = jarPath || "."; - this._jarFile = Info.jarFile = jarFile; - if (doReport) - alert ("The web page URL was ignored. Continuing using " + this._jarFile + ' in directory "' + this._jarPath + '"'); - // could do something like this: J2S.controls == undefined || J2S.controls._onloadResetForms(); - } - this._create(id, Info); - return this; - } - - ;(function(Applet, proto) { - - Applet._get = function(id, Info, checkOnly) { - - checkOnly || (checkOnly = false); - Info || (Info = {}); - var DefaultInfo = { - code: null,//"swingjs.test.TanSugd3S", - uncompressed: true, - //color: "#FFFFFF", // applet object background color - width: 300, - height: 300, - serverURL: "http://your.server.here/jsmol.php", - console: null, // div for where the JavaScript console will be. - readyFunction: null, - use: "HTML5",//other options include JAVA - jarPath: "java", - jarFile: "[code].jar", - j2sPath: "j2s", - spinnerImage: "core/Spinner.gif", - disableJ2SLoadMonitor: false, - disableInitialConsole: false, - debug: false - }; - id || (id = Info.name) || (id = "j2sApplet" + J2S._defaultID++); - - J2S._addDefaultInfo(Info, DefaultInfo); - - - Info.jarFile && Info.code && Info.jarFile.replace(/\[code\]/,Info.code); - J2S._debugAlert = Info.debug; - Info.serverURL && (J2S._serverUrl = Info.serverURL); - - var javaAllowed = false; - var applet = null; - var List = Info.use.toUpperCase().split("#")[0].split(" "); - for (var i = 0; i < List.length; i++) { - switch (List[i]) { - case "JAVA": - javaAllowed = true; - if (J2S.featureDetection.supportsJava()) - applet = new Applet(id, Info, checkOnly); - break; - case "HTML5": - if (J2S.featureDetection.allowHTML5){ - applet = Applet._getCanvas(id, Info, checkOnly); - } else { - List.push("JAVA"); - } - break; - } - if (applet != null) - break; - } - if (applet == null) { - if (checkOnly || !javaAllowed) - applet = {_appletType : "none" }; - else if (javaAllowed) - applet = new Applet(id, Info); - } - - // keyed to both its string id and itself - return (checkOnly ? applet : J2S._registerApplet(id, applet)); - } - - Applet._getCanvas = function(id, Info, checkOnly) { - Info._isLayered = true; - Info._isSwing = true; - Info._platform = ""; - J2S._Canvas2D.prototype = J2S._jsSetPrototype(new Applet(id, Info, true)); - return new J2S._Canvas2D(id, Info, Info.code, checkOnly); - }; - - /* AngelH, mar2007: - By (re)setting these variables in the webpage before calling J2S.getApplet(), - a custom message can be provided (e.g. localized for user's language) when no Java is installed. - */ - Applet._noJavaMsg = - "Either you do not have Java applets enabled in your web
browser or your browser is blocking this applet.
\ - Check the warning message from your browser and/or enable Java applets in
\ - your web browser preferences, or install the Java Runtime Environment from
www.java.com"; - - Applet._setCommonMethods = function(p) { - p._showInfo = proto._showInfo; -/// p._search = proto._search; - p._getName = proto._getName; - p.readyCallback = proto.readyCallback; - } - - Applet._createApplet = function(applet, Info, params) { - applet._initialize(Info.jarPath, Info.jarFile); - var jarFile = applet._jarFile; - var jnlp = "" - if (J2S._isFile) { - jarFile = jarFile.replace(/0\.jar/,".jar"); - } - // size is set to 100% of containers' size, but only if resizable. - // Note that resizability in MSIE requires: - // - var w = (applet._containerWidth.indexOf("px") >= 0 ? applet._containerWidth : "100%"); - var h = (applet._containerHeight.indexOf("px") >= 0 ? applet._containerHeight : "100%"); - var widthAndHeight = " style=\"width:" + w + ";height:" + h + "\" "; - var attributes = "name='" + applet._id + "_object' id='" + applet._id + "_object' " + "\n" - + widthAndHeight + jnlp + "\n" - params.codebase = applet._jarPath; - params.codePath = params.codebase + "/"; - if (params.codePath.indexOf("://") < 0) { - var base = document.location.href.split("#")[0].split("?")[0].split("/"); - base[base.length - 1] = params.codePath; - params.codePath = base.join("/"); - } - params.archive = jarFile; - params.mayscript = 'true'; - params.java_arguments = "-Xmx" + Math.round(Info.memoryLimit || applet._memoryLimit) + "m"; - params.permissions = (applet._isSigned ? "all-permissions" : "sandbox"); - params.documentLocation = document.location.href; - params.documentBase = document.location.href.split("#")[0].split("?")[0]; - - params.jarPath = Info.jarPath; - J2S._syncedApplets.length && (params.synccallback = "J2S._mySyncCallback"); - applet._startupScript && (params.script = applet._startupScript); - var t = "\n"; - for (var i in params) - if(params[i]) - t += " \n"; - if (J2S.featureDetection.useIEObject || J2S.featureDetection.useHtml4Object) { - t = "" - : " type='application/x-java-applet'>") - + t + "

\n" + Applet._noJavaMsg + "

\n"; - } else { // use applet tag - t = "\n" - + t + "
\n" - + Applet._noJavaMsg + "
\n"; - } - if (applet._deferApplet) - applet._javaCode = t, t=""; - t = J2S._getWrapper(applet, true) + t + J2S._getWrapper(applet, false) - + (Info.addSelectionOptions ? J2S._getGrabberOptions(applet) : ""); - if (J2S._debugAlert) - alert (t); - applet._code = J2S._documentWrite(t); - } - - proto._newApplet = function(viewerOptions) { - this._viewerOptions = viewerOptions; - // for now assigning this._applet here instead of in readyCallback - Clazz.loadClass("swingjs.JSAppletViewer"); - this._appletPanel = Clazz.new_(swingjs.JSAppletViewer.c$$java_util_Hashtable, [viewerOptions]); - this._appletPanel.start$(); - } - - proto._addCoreFiles = function() { - if (this.__Info.core != "NONE" && this.__Info.core != "none" && !J2S._debugCode) - J2S._addCoreFile((this.__Info.core || "swingjs"), this._j2sPath, this.__Info.preloadCore); -// if (J2S._debugCode) { -// // no min package for that -// J2S._addExec([this, null, "swingjs.JSAppletViewer", "load " + this.__Info.code]); -// -// } - } - - proto._create = function(id, Info){ - J2S._setObject(this, id, Info); - var params = { - syncId: J2S._syncId, - progressbar: "true", - progresscolor: "blue", - boxbgcolor: this._color || "black", - boxfgcolor: "white", - boxmessage: "Downloading Applet ...", - //script: (this._color ? "background \"" + this._color +"\"": ""), - code: Info.appletClass + ".class" - }; - - J2S._setAppletParams(this._availableParams, params, Info); - function sterilizeInline(model) { - model = model.replace(/\r|\n|\r\n/g, (model.indexOf("|") >= 0 ? "\\/n" : "|")).replace(/'/g, "'"); - if(J2S._debugAlert) - alert ("inline model:\n" + model); - return model; - } - - params.loadInline = (Info.inlineModel ? sterilizeInline(Info.inlineModel) : ""); - params.appletReadyCallback = "J2S.readyCallback"; - if (J2S._syncedApplets.length) - params.synccallback = "J2S._mySyncCallback"; - params.java_arguments = "-Xmx" + Math.round(Info.memoryLimit || this._memoryLimit) + "m"; - - this._initialize(Info.jarPath, Info.jarFile); - Applet._createApplet(this, Info, params); - } - - - proto._restoreState = function(clazzName, state) { - // applet-dependent - } - - proto.readyCallback = function(id, fullid, isReady) { - if (!isReady) - return; // ignore -- page is closing - J2S._setDestroy(this); - this._ready = true; - this._showInfo(true); - this._showInfo(false); - J2S.Cache.setDragDrop(this); - this._readyFunction && this._readyFunction(this); - J2S._setReady(this); - var app = this._2dapplet; - if (app && app._isEmbedded && app._ready && app.__Info.visible) - this._show2d(true); - } - - proto._showInfo = function(tf) { - if(this._isJNLP)return; - if(tf && this._2dapplet) - this._2dapplet._show(false); - J2S.$html(J2S.$(this, "infoheaderspan"), this._infoHeader); - if (this._info) - J2S.$html(J2S.$(this, "infodiv"), this._info); - if ((!this._isInfoVisible) == (!tf)) - return; - this._isInfoVisible = tf; - // 1px does not work for MSIE - if (this._isJava) { - var x = (tf ? 2 : "100%"); - J2S.$setSize(J2S.$(this, "appletdiv"), x, x); - } - J2S.$setVisible(J2S.$(this, "infotablediv"), tf); - J2S.$setVisible(J2S.$(this, "infoheaderdiv"), tf); - this._show(!tf); - } - - proto._show = function(tf) { - var x = (!tf ? 2 : "100%"); - J2S.$setSize(J2S.$(this, "object"), x, x); - if (!this._isJava) - J2S.$setVisible(J2S.$(this, "appletdiv"), tf); - } - - proto._clearConsole = function () { - if (this._console == this._id + "_infodiv") - this.info = ""; - if (!self.Clazz)return; - J2S._setConsoleDiv(this._console); - Clazz.Console.clear(); - } - - proto._resizeApplet = function(size) { - // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()] - // Special case: an empty value for width or height is accepted, meaning no change in that dimension. - - /* - * private functions - */ - function _getAppletSize(size, units) { - /* Accepts single number, 2-value array, or object with width and height as mroperties, each one can be one of: - percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.) - [width, height] array of strings is returned, with units added if specified. - Percent is relative to container div or element (which should have explicitly set size). - */ - var width, height; - if(( typeof size) == "object" && size != null) { - width = size[0]||size.width; - height = size[1]||size.height; - } else { - width = height = size; - } - return [J2S.fixDim(width, units), J2S.fixDim(height, units)]; - } - var sz = _getAppletSize(size, "px"); - var d = J2S._getElement(this, "appletinfotablediv"); - d.style.width = sz[0]; - d.style.height = sz[1]; - this._containerWidth = sz[0]; - this._containerHeight = sz[1]; - if (this._is2D) - J2S.repaint(this, true); - } - - proto._cover = function (doCover) { - // from using getAppletHtml() - this._newCanvas(false); - this._showInfo(false); - this._init(); - }; - - - -})(SwingJS._Applet, SwingJS._Applet.prototype); - -})(SwingJS, jQuery, J2S); - -} // SwingJS undefined +/*! + + // BH 2022.01.12 adds pointer option see BHTEST + + * jQuery JavaScript Library v1.11.0 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-01-23T21:02Z + */ + +// modified by Bob Hanson for local MSIE 11 reading remote files and skipping Opera test unless Opera +// 2022.01.08 BHTEST adds pointer| to rmouseEvent + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper window is present, + // execute the factory and get jQuery + // For environments that do not inherently posses a window with a document + // (such as Node.js), expose a jQuery-making factory as module.exports + // This accentuates the need for the creation of a real window + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var deletedIds = []; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var trim = "".trim; + +var support = {}; + + + +var + version = "1.11.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return a 'clean' array + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return just the object + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + return obj - parseFloat( obj ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: trim && !trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v1.10.16 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-01-13 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + compile, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +var j2sInvalidSelectors = ""; + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + // SwingJS addition + var mode = (newSelector.indexOf(":has(") >= 0 ? ":has(" + : newSelector.indexOf("!=") >= 0 ? "!=" + : newSelector.indexOf(":") >= 0 ? ":" + : 0 + ); + if (mode && j2sInvalidSelectors.indexOf(mode) < 0) { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } + } catch(qsaError) { + if (mode) + j2sInvalidSelectors += mode; + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // Support: IE8, Opera 10-12 + // Nothing should be selected when empty strings follow ^= or $= or *= + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + // BH 2018 + if (navigator.userAgent && navigator.userAgent.indexOf("Opera") >= 0) { + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + } + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + } + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +} + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +jQuery(function() { + // We need to execute this one support test ASAP because we need to know + // if body.style.zoom needs to be set. + + var container, div, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + container = document.createElement( "div" ); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + div = document.createElement( "div" ); + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1"; + + if ( (support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 )) ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = null; +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + name = attrs[i].name; + + if ( name.indexOf("data-") === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + var fragment = document.createDocumentFragment(), + div = document.createElement("div"), + input = document.createElement("input"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + fragment = div = input = null; +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, // BHTEST + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && ( + // Support: IE < 9 + src.returnValue === false || + // Support: Android < 4.0 + src.getPreventDefault && src.getPreventDefault() ) ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + pointerenter: "pointerover", // BHTEST + pointerleave: "pointerout", // BHTEST + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + window.getDefaultComputedStyle( elem[ 0 ] ).display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "' + J2S.$after("body", s); + } catch (e) { + // ignore + } + delete J2S._tracker; + } + return applet; + } + + var __profiling; + + J2S.getClassList = function(name){ + name || (name = '_j2sclasslist.txt'); + J2S._saveFile(name, Clazz.ClassFilesLoaded.sort().join('\n')); + } + + J2S.getProfile = function(doProfile) { + if (__profiling || arguments.length == 1 && !doProfile) { + var s = Clazz.getProfile(); + System.out.println(s); + alert(s); + return; + } + var seconds = (arguments[0] === true ? 0 : +(arguments.length == 0 ? prompt("How many seconds?", "0 (until I click again)") : arguments[0])); + if (isNaN(seconds)) + seconds = 0; + + Clazz.startProfiling(__profiling = (seconds || arguments.length == 0 || doProfile)); + } + + J2S._getAttr = function(s, a) { + var pt = s.indexOf(a + "="); + return (pt >= 0 && (pt = s.indexOf('"', pt)) >= 0 ? s.substring(pt + 1, + s.indexOf('"', pt + 1)) : null); + } + + J2S.Cache = { + fileCache : {} + }; + + J2S.Cache.get = function(filename) { + return J2S.Cache.fileCache[filename]; + } + + J2S.Cache.put = function(filename, data) { + J2S.Cache.fileCache[filename] = data; + } + // dnd _setDragDrop for swingjs.api.J2S called JSComponentUI + J2S.setDragDropTarget = J2S.Cache.setDragDrop = function(me, node, adding) { + if (adding === false) { + node["data-dropComponent"] = null; + J2S.$appEvent(node, null, "dragover", null); + J2S.$appEvent(node, null, "drop", null); + return; + } + if (adding === true) { + node["data-dropComponent"] = me; + me = node; + node = null; + } + // me can be the node if node is null + node || (node = null); + + + J2S.$appEvent(me, node, "dragover", function(e) { + e = e.originalEvent; + e.stopPropagation(); + e.preventDefault(); + if (e.target == J2S._mouseOwner) { + return; // for now + e.dataTransfer.dropEffect = 'move'; + } else { + e.dataTransfer.dropEffect = 'copy'; + } + }); + J2S.$appEvent(me, node, "drop", function(e) { + J2S._mouseOwner && (J2S._mouseOwner.isDragging = false); + var oe = e.originalEvent; + if (e.target == J2S._mouseOwner) { + oe.preventDefault(); + oe.stopPropagation(); + return; // for now + } + if (!oe.dataTransfer) + return; + try { + var kind = oe.dataTransfer.items[0].kind; + var type = oe.dataTransfer.items[0].type; + var file = oe.dataTransfer.files[0]; + var files = oe.dataTransfer.files; + } catch (e) { + return; + } finally { + oe.preventDefault(); + var doStop = (e.target != J2S._mouseOwner) + if (doStop) { + oe.stopPropagation(); + } + } + var target = oe.target; + var c = target; + var comp; + while (c && !(comp = c["data-dropComponent"])) + c = c.parentElement; + if (!comp) + return; + var d = comp.getLocationOnScreen$(); + var x = oe.pageX - d.x; + var y = oe.pageY - d.y; + if (file == null) { + // FF and Chrome will drop an image here + // but it will be only a URL, not an actual file. + + + Clazz.loadClass("swingjs.JSDnD") + .drop$javax_swing_JComponent$O$S$BA$I$I(comp, + oe.dataTransfer, null, null, x, y); + return; + } + // MSIE will drop an image this way, though, and load it! + var nfiles = files.length; + var arr = []; + for (var i = 0; i < nfiles; i++) { + var file = files[i]; + var reader = new FileReader(); + reader.onloadend = function(evt) { + if (evt.target.readyState == FileReader.DONE) { + var target = oe.target; + var name = evt.target._filename; + var bytes = J2S._toBytes(evt.target.result); + arr.push([name, bytes]); + System.out.println("j2sApplet DnD kind=" + kind + " type=" + type + " name=" + name + " size="+ bytes.length); + if (--nfiles == 0) { + Clazz.loadClass("swingjs.JSDnD") + .drop$javax_swing_JComponent$O$OAA$I$I(comp, oe.dataTransfer, arr, x, y); + } + } + }; + reader._filename = file.name + reader.readAsArrayBuffer(file); + } + }); + } + + J2S._isAsync = false; // testing only + J2S._asyncCallbacks = {}; + + J2S._coreFiles = []; // required for package.js + + // ///////////////// + // This section provides an asynchronous loading sequence + // + + // methods and fields starting with double underscore are private to this + // .js file + + var __clazzLoaded = false; + var __execLog = []; + var __execStack = []; + var __execTimer = 0; + var __coreSet = []; + var __coreMore = []; + var __execDelayMS = 100; // must be > 55 ms for FF + + var __nextExecution = function(trigger) { + arguments.length || (trigger = true); + delete __execTimer; + var es = __execStack; + var e; + while (es.length > 0 && (e = es[0])[4] == "done") + es.shift(); + if (es.length == 0) + return; + if (!J2S._isAsync && !trigger) { + setTimeout(__nextExecution, 10) + return; + } + e.push("done"); + var s = "j2sApplet exec " + e[0]._id + " " + e[3] + " " + e[2]; + if (self.System) + System.out.println(s); + // alert(s) + if (window.console) + window.console.log(s + " -- OK") + __execLog.push(s); + e[1](e[0], e[2]); + }; + + var __loadClazz = function(applet) { + if (!__clazzLoaded) { + __clazzLoaded = true; + // create the Clazz object + J2S.LoadClazz(Clazz); + if (J2S._strict) + System.err.println("j2sApplet j2sstrict - 'use strict' will be used - this is experimental"); + if (J2S._startProfiling) + J2S.getProfile(); + if (applet._noMonitor) + Clazz._LoaderProgressMonitor.showStatus = function() { + } + J2S.LoadClazz = null; + if (applet.__Info.uncompressed) + Clazz.loadClass(); // for now; allows for no compression + Clazz._Loader.onGlobalLoaded = function(file) { + // not really.... just nothing more yet to do yet + Clazz._LoaderProgressMonitor.showStatus("Application loaded.", + true); + if (!J2S._debugCode || !J2S.haveCore) { + J2S.haveCore = true; + __nextExecution(); + } + }; + // load package.js and j2s/core/core.z.js + Clazz._Loader.loadPackageClasspath("java", null, true, + __nextExecution); + return; + } + __nextExecution(); + }; + + J2S.showStatus = function(msg, doFadeout) { + Clazz._LoaderProgressMonitor.showStatus(msg, doFadeout); + } + + J2S.debugClip = function() { return J2S._debugClip }; + + var __loadClass = function(applet, javaClass) { + Clazz._Loader.loadClass(javaClass, function() { + __nextExecution() + }); + }; + + J2S.showExecLog = function() { + return __execLog.join("\n") + }; + + J2S._addExec = function(e) { + e[1] || (e[1] = __loadClass); + var s = "J2SApplet load " + e[0]._id + " " + e[3]; + if (self.console) + console.log(s + "...") + __execLog.push(s); + __execStack.push(e); + } + + J2S._addCoreFile = function(type, path, more) { + + // BH 3/15: idea here is that when both Jmol and JSV are present, + // we want to load a common core file -- jmoljsv.z.js -- + // instead of just one. Otherwise we do a lot of duplication. + // It is not clear how this would play with other concurrent + // apps. So this will take some thinking. But the basic idea is that + // core file to load is + + if (Array.isArray(type)) { + more = type; + type = null; + } + + var thisPath, isFullName; + if (type) { + var key = type.toLowerCase().substring(type.lastIndexOf("/") + 1); + key = key.toLowerCase().split(".")[0]; // package name only + + // return if type is already part of the set. + if (__coreSet.join("").indexOf(key) >= 0) + return; + + __coreSet.push(key); + __coreSet.sort(); + + // create a concatenated lower-case name for a core file that + // includes + // all Java applets on the page + // only if this is not a full name + + // 2025.04.17 adds option to give full (local) path to core file + isFullName = (type.indexOf("/") >= 0); + if (isFullName){ + // bypass core/package.js + J2S.Globals["core.registered"] = true; + } + thisPath = (isFullName ? type : path + "/core/core" + __coreSet.join("") + ".z.js"); + J2S._coreFiles = [ thisPath ]; + } + if (more && (Array.isArray(more) || (more = more.split(" ")))) + for (var i = 0; i < more.length; i++) + if (more[i] && __coreMore.join("").indexOf(more[i]) < 0) { + isFullName = (more[i].indexOf("/") >= 0); + thisPath = (isFullName ? type : path + "/core/core" + more[i] + ".z.js"); + __coreMore.push(thisPath); + } + for (var i = 0; i < __coreMore.length; i++) + J2S._coreFiles.push(__coreMore[i]); + } + + J2S._Canvas2D = function(id, Info, type, checkOnly) { + // type: Jmol or JSV or SwingJS + this._uniqueId = ("" + Math.random()).substring(3); + this._id = id; + this._is2D = true; + this._isJava = false; + this._isJNLP = !!Info.main; + if (typeof Info.isResizable == "undefined") + Info.isResizable = (("" + Info.width).indexOf("px")< 0); + this._jmolType = "J2S._Canvas2D (" + type + ")"; + this._isLayered = Info._isLayered || false; // JSV or SwingJS are + // layered + this._isSwing = Info._isSwing || false; + this._isApp = !!Info._main; + this._isJSV = Info._isJSV || false; + this._isAstex = Info._isAstex || false; + this._platform = Info._platform || ""; + this._spinnerImage = (!Info.spinnerImage || Info.spinnerImage == "NONE" || Info.spinnerImage == "none" ? null + : Info.spinnerImage.indexOf("//") < 0 && Info.spinnerImage.indexOf("/") != 0 ? Info.j2sPath + "/" + Info.spinnerImage + : Info.spinnerImage); + if (checkOnly) + return this; + J2S.setWindowVar(id, this); + if (!this._isApp) + this._createCanvas(id, Info); + if (!this._isJNLP && (!J2S._document || this._deferApplet)) + return this; + this._init(); + return this; + }; + + J2S._setAppletParams = function(availableParams, params, Info, isHashtable) { + for (var i in Info) { + var lci = i.toLowerCase(); + if (!availableParams + || availableParams.indexOf(";" + lci + ";") >= 0) { + if (Info[i] == null || lci == "language" + && !J2S.featureDetection.supportsLocalization()) + continue; + if (isHashtable) + params.put$O$O(i, (Info[i] === true ? Boolean.TRUE + : Info[i] === false ? Boolean.FALSE : Info[i])) + else + params[i] = Info[i]; + } + } + } + + // The original Jmol "applet" was created as an + // extension to a canvas. We still do that even + // though it doesn't make a lot of sense. Nonetheless, + // this canvas is used for the main canvas for + // a SwingJS applet. + J2S._jsSetPrototype = function(proto) { + proto._init = function() { + this._setupJS(); + this._showInfo(!this.__Info.console); + if (this._disableInitialConsole) + this._showInfo(false); + }; + + proto._createCanvas = function(id, Info) { + J2S._setObject(this, id, Info); + if (Info.main) // a Java application, not an applet -- let + // AppletViewer take care of this + return; + var t = J2S._getWrapper(this, true); + if (this._deferApplet) { + } else if (J2S._document) { + J2S._documentWrite(t); + this._newCanvas(false); + t = ""; + } else { + this._deferApplet = true; + t += ''; + } + t += J2S._getWrapper(this, false); + if (Info.addSelectionOptions) + t += J2S._getGrabberOptions(this); + if (J2S._debugAlert && !J2S._document) + alert(t); + this._code = J2S._documentWrite(t); + }; + + proto._newCanvas = function(doReplace) { + if (this._is2D) + this._createCanvas2d(doReplace); + else + this._GLmol.create(); + }; + + // ////// swingjs.api.HTML5Applet interface + proto._getHtml5Canvas = function() { + return this._canvas + }; + + proto._setAppClass = function(app) { this.getApp = function() {this._setThread();return app}}; + + proto._getWidth = function() { + return (this._canvas ? this._canvas.width : 0) + }; + proto._getHeight = function() { + return (this._canvas ? this._canvas.height : 0) + }; + proto._getContentLayer = function() { + return J2S.$(this, "contentLayer")[0] + }; + proto.repaintNow = function() { + J2S.repaint(this, false) + }; + // ////// + + proto._setThread = function() { swingjs.JSToolkit.getCurrentThread$javajs_util_JSThread(this._appletPanel.appletViewer.myThread)} + proto._createCanvas2d = function(doReplace) { + var container = J2S.$(this, "appletdiv"); + // if (doReplace) { + + if (this._canvas) { + try { + container[0].removeChild(this._canvas); + if (this._canvas.frontLayer) + container[0].removeChild(this._canvas.frontLayer); + if (this._canvas.rearLayer) + container[0].removeChild(this._canvas.rearLayer); + if (this._canvas.contentLayer) + container[0].removeChild(this._canvas.contentLayer); + J2S.unsetMouse(this._mouseInterface); + } catch (e) { + } + } + var w = Math.round(container.width()); + var h = Math.round(container.height()); + var canvas = document.createElement('canvas'); + canvas.applet = this; + this._canvas = canvas; + canvas.style.width = "100%"; + canvas.style.height = "100%"; + canvas.width = w; + canvas.height = h; // w and h used in setScreenDimension + canvas.id = this._id + "_canvas2d"; + container.append(canvas); + J2S._$(canvas.id).css({ + "z-index" : J2S.getZ(this, "main") + }); + if (this._isLayered) { + var content = document.createElement("div"); + canvas.contentLayer = content; + content.id = this._id + "_contentLayer"; + container.append(content); + J2S._$(content.id).css({ + zIndex : J2S.getZ(this, "content"), + position : "absolute", + left : "0px", + top : "0px", + width : (this._isSwing ? w : 0) + "px", + height : (this._isSwing ? h : 0) + "px", + overflow : "hidden" + }); + if (this._isSwing) { + this._mouseInterface = content; + content.applet = this; + } else { + this._mouseInterface = this._getLayer("front", container, + w, h, false); + } + } else { + this._mouseInterface = canvas; + } + J2S.setMouse(this._mouseInterface, this._isSwing); + } + + proto._getLayer = function(name, container, w, h, isOpaque) { + var c = document.createElement("canvas"); + this._canvas[name + "Layer"] = c; + c.style.width = "100%"; + c.style.height = "100%"; + c.id = this._id + "_" + name + "Layer"; + c.width = w; + c.height = h; // w and h used in setScreenDimension + container.append(c); + c.applet = this; + J2S._$(c.id).css({ + background : (isOpaque ? "rgb(0,0,0,1)" : "rgb(0,0,0,0.001)"), + "z-index" : J2S.getZ(this, name), + position : "absolute", + left : "0px", + top : "0px", + overflow : "hidden" + }); + return c; + } + + proto._setupJS = function() { + J2S.setGlobal("j2s.lib", { + base : this._j2sPath + "/", + alias : ".", + console : this._console, + monitorZIndex : J2S.getZ(this, "monitorZIndex") + }); + J2S.setGlobal("j2s.tmpdir", "/TEMP/"); + var isFirst = (__execStack.length == 0); + if (isFirst) + J2S._addExec([ this, __loadClazz, null, "loadClazz" ]); + this._addCoreFiles(); + J2S._addExec([ this, this.__startAppletJS, null, "start applet" ]) + this._isSigned = true; // access all files via URL hook + this._ready = false; + this._applet = null; + this._canScript = function(script) { + return true; + }; + this._savedOrientations = []; + __execTimer && clearTimeout(__execTimer); + __execTimer = setTimeout(__nextExecution, __execDelayMS); + }; + + proto.__startAppletJS = function(applet) { + if (J2S._version.indexOf("$Date: ") == 0) + J2S._version = (J2S._version.substring(7) + " -").split(" -")[0] + + " (J2S)"; + if (!Clazz._4Name("java.lang.Class", null, null, true, false, true)) { + if (J2S._isFile) { + J2S.cantLoadLocalFiles(); + return; + } + alert("There was an unknown problem loading java.lang.Class."); + } + J2S._registerApplet(applet._id, applet); + if (J2S._appArgs || applet.__Info.args == "?") { + applet.__Info.args = (J2S._appArgs ? decodeURIComponent(J2S._appArgs).split("|") : []); + } + J2S._lang && (applet.__Info.language = J2S._lang); + var isApp = applet._isApp = !!applet.__Info.main; + try { + var codePath = applet._j2sPath + "/"; + if (codePath.indexOf("://") < 0) { + var base = document.location.href.split("#")[0] + .split("?")[0].split("/"); + if (codePath.indexOf("/") == 0) { + base = [ base[0], codePath.substring(1) ]; + } else { + while (codePath.indexOf("../") == 0) { + base = base.slice(0, base.length - 1); + codePath = codePath.substring(3); + } + base[base.length - 1] = codePath; + } + codePath = base.join("/"); + } + applet._j2sFullPath = codePath.substring(0, codePath.length - 1); + var clazz = (applet.__Info.main || applet.__Info.code); + try { + if (clazz.indexOf(".") < 0) { + clazz = "_." + clazz; + if (isApp) + applet.__Info.main = clazz; + else + applet.__Info.code = clazz; + } + + var cl = Clazz.loadClass(clazz); + //cl.$static$ && cl.$static$(); + if (clazz.indexOf("_.") == 0) + J2S.setWindowVar(clazz.substring(2), cl); + applet.__Info.headless = (J2S._headless || isApp && (cl.$j2sHeadless || cl.j2sHeadless + || cl.superclazz && cl.superclazz.j2sHeadless)); + if (applet.__Info.headless) { + Clazz._isHeadless = "true"; + System.out.println("j2sApplet running headlessly"); + } + } catch (e) { + alert("Java class " + clazz + " was not found."); + return; + } + var assets = applet.__Info.coreAssets; + if (assets) { + loadAssets(assets); + } + if (applet.__Info.code) + codePath += applet.__Info.code.replace(/\./g, "/"); + codePath = codePath.substring(0, + codePath.lastIndexOf("/") + 1); + if (isApp && applet.__Info.headless) { + applet._codePath = codePath; + Clazz.loadClass("java.lang.Thread").currentThread$().group.html5Applet = applet; + cl.main$SA(applet.__Info.args || []); + if (applet.__Info.readyFunction) { + J2S._addExec([ this, function(){applet.__Info.readyFunction(applet);}, null, "Info.readyFunction" ]); + } else { + System.exit$(0); + } + } else { + + var viewerOptions = Clazz.new_("java.util.Hashtable"); + viewerOptions.put = viewerOptions.put$O$O; + J2S._setAppletParams(applet._availableParams, + viewerOptions, applet.__Info, true); + viewerOptions.put("name", applet._id);// + "_object"); + viewerOptions.put("syncId", J2S._syncId); + viewerOptions.put("fullName", applet._id + "__" + J2S._syncId + "__"); + if (J2S._isAsync) + viewerOptions.put("async", true); + if (applet._startupScript) + viewerOptions.put("script", applet._startupScript) + viewerOptions.put("platform", applet._platform); + viewerOptions.put("documentBase", document.location.href); + viewerOptions.put("codePath", codePath); + viewerOptions.put("appletReadyCallback", + "J2S.readyCallback"); + viewerOptions.put("applet", true); + if (applet._color) + viewerOptions.put("bgcolor", applet._color); + if (J2S._syncedApplets.length) + viewerOptions + .put("synccallback", "J2S._mySyncCallback"); + viewerOptions.put("signedApplet", "true"); + if (applet._is2D && !isApp) + viewerOptions.put("display", applet._id + "_canvas2d"); + var w = applet.__Info.width; + var h = applet.__Info.height; + if (w > 0 && h > 0 && (!applet._canvas || w != applet._canvas.width + || h != applet._canvas.height)) { + // developer has used static { J2S.thisApplet.__Info.width=...} + J2S.$(applet, "appletinfotablediv").width(w).height(h); + applet._newCanvas(true); + } + applet._newApplet(viewerOptions); + } + } catch (e) { + System.out.println((J2S._isAsync ? "normal async abort from " + : "") + + e + (e.stack ? "\n" + e.stack : "")); + return; + } + + //applet._jsSetScreenDimensions(); + __nextExecution(); + }; + + proto.__startAppletJS.j2sname = "__START_APPLET__"; + + if (!proto._restoreState) + proto._restoreState = function(clazzName, state) { + // applet-dependent + } + + proto._jsSetScreenDimensions = function() { + if (!this._appletPanel) + return + // strangely, if CTRL+/CTRL- are used repeatedly, then the + // applet div can be not the same size as the canvas if there + // is a border in place. + var d = J2S._getElement(this, (this._is2D ? "canvas2d" : "canvas")); + this._appletPanel.setScreenDimension$I$I(d.width, d.height); + }; + + proto._show = function(tf) { + J2S.$setVisible(J2S.$(this, "appletdiv"), tf); + if (tf && !this._isSwing) // SwingJS applets will handle their own + // repainting + J2S.repaint(this, true); + }; + + proto._canScript = function(script) { + return true + }; + + proto._processGesture = function(touches, frameViewer) { + (frameViewer || this._appletPanel) + .processTwoPointGesture$FAAA(touches); + } + + proto._processEvent = function(type, xym, ev, frameViewer) { + // xym is [x,y,modifiers,wheelScroll] + // also processes key events + (frameViewer || this._appletPanel).processMouseEvent$I$I$I$I$J$O$I( + type, xym[0], xym[1], xym[2], System.currentTimeMillis$(), + ev, xym[3]); + } + + proto._resize = function() { + var s = "__resizeTimeout_" + this._id; + // only at end + if (J2S[s]) + clearTimeout(J2S[s]); + var me = this; + J2S[s] = setTimeout(function() { + J2S.repaint(me, true); + J2S[s] = null + }, 100); + } + + return proto; + }; + + var loadAssets = function(assets) { + if (!assets) return; + if (typeof assets != "string") { + // assume array + for (var i = 0; i < assets.length; i++) { + loadAssets(assets[i]); + } + return; + } + try { + var bytes = J2S.getFileData(assets,null, true, true); + var bis = Clazz.loadClass("javajs.util.Rdr").getBIS$BA(bytes); + var cache = J2S.getSetJavaFileCache(); + var len0 = cache.size$(); + Clazz.loadClass("javajs.util.ZipTools").readFileAsMap$java_io_BufferedInputStream$java_util_Map$S(bis, cache); + System.out.println((cache.size$() - len0) + " items cached from " + assets); + } catch(e) { + System.out.println("error reading " + assets); + } + } + + J2S.repaint = function(applet, asNewThread) { + // JmolObjectInterface + // asNewThread: true is from RepaintManager.repaintNow() + // false is from Repaintmanager.requestRepaintAndWait() + // called from apiPlatform Display.repaint() + + // alert("repaint " + Clazz._getStackTrace()) + if (!applet || !applet._appletPanel) + return; + + // asNewThread = false; + var container = J2S.$(applet, "appletdiv"); + var w = Math.round(container.width()); + var h = Math.round(container.height()); + if (applet._is2D && !applet._isApp + && (applet._canvas.width != w || applet._canvas.height != h)) { + applet._newCanvas(true); + applet._appletPanel + .setDisplay$swingjs_api_js_HTML5Canvas(applet._canvas); + } + applet._appletPanel.setScreenDimension$I$I(w, h); + var f = function() { +// if (applet._appletPanel.top) { +// System.out.println("j2sApplet invalidate"); +// applet._appletPanel.top.invalidate$(); +// System.out.println("j2sApplet repaint"); +// applet._appletPanel.top.repaint$(); +// } + }; + //if (asNewThread) { + //self.setTimeout(f,20); // requestAnimationFrame + //} else { + f(); + //} + } + + /** + * loadImage is called for asynchronous image loading. If bytes are not + * null, they are from a ZIP file. They are processed sychronously here + * using an image data URI. Can all browsers handle MB of data in data URI? + * + */ + J2S.loadImage = function(platform, echoName, path, bytes, fOnload, image) { + // JmolObjectInterface + var id = "echo_" + echoName + path + (bytes ? "_" + bytes.length : ""); + var canvas = J2S.getHiddenCanvas(platform.vwr.html5Applet, id, 0, 0, + false, true); + if (canvas == null) { + if (image == null) { + image = new Image(); + if (bytes == null) { + image.onload = function() { + J2S.loadImage(platform, echoName, path, null, fOnload, + image) + }; + image.src = path; + return null; + } else { + System.out + .println("j2sApplet J2S.loadImage using data URI for " + + id) + } + image.src = (typeof bytes == "string" ? bytes : "data:" + + Clazz.loadClass("javajs.util.Rdr") + .guessMimeTypeForBytes$BA(bytes) + ";base64," + + Clazz.loadClass("javajs.util.Base64").getBase64$BA(bytes)); + } + var width = image.width; + var height = image.height; + if (echoName == "webgl") { + // will be antialiased + width /= 2; + height /= 2; + } + canvas = J2S.getHiddenCanvas(platform.vwr.html5Applet, id, width, + height, true, false); + canvas.imageWidth = width; + canvas.imageHeight = height; + canvas.id = id; + canvas.image = image; + J2S.setCanvasImage(canvas, width, height); + // return a null canvas and the error in path if there is a problem + } else { + System.out.println("j2sApplet J2S.loadImage reading cached image for " + id) + } + return (bytes == null ? fOnload(canvas, path) : canvas); + }; + + J2S._canvasCache = {}; + + J2S.getHiddenCanvas = function(applet, id, width, height, forceNew, + checkOnly) { + id = applet._id + "_" + id; + var d = J2S._canvasCache[id]; + if (checkOnly) + return d; + if (forceNew || !d || d.width != width || d.height != height) { + d = document.createElement('canvas'); + // for some reason both these need to be set, or maybe just d.width? + d.width = d.style.width = width; + d.height = d.style.height = height; + d.id = id; + J2S._canvasCache[id] = d; + } + + return d; + } + + J2S.setCanvasImage = function(canvas, width, height) { + // called from org.J2S.awtjs2d.Platform + canvas.buf32 = null; + canvas.width = width; + canvas.height = height; + canvas.getContext("2d").drawImage(canvas.image, 0, 0, + canvas.image.width, canvas.image.height, 0, 0, width, height); + }; + + J2S.applyFunc = function(f, a) { + // J2SObjectInterface + return f(a); + } + + J2S.setDraggable = function(tag, targetOrArray) { + + // draggable tag object; target is itself + + // J2S.setDraggable(tag) + // J2S.setDraggable(tag, true) + + // draggable tag object that controls another target, + // either given as a DOM element or jQuery selector or function + // returning such + + // J2S.setDraggable(tag, target) + // J2S.setDraggable(tag, fTarget) + + // draggable tag object simply loade=s/reports mouse position as + // fDown({x:x,y:y,dx:dx,dy:dy,ev:ev}) should fill x and y with starting + // points + // fDrag(xy) and fUp(xy) will get {x:x,y:y,dx:dx,dy:dy,ev:ev} to use as + // desired + + // J2S.setDraggable(tag, [fAll]) + // J2S.setDraggable(tag, [fDown, fDrag, fUp]) + + // unbind tag + + // J2S.setDraggable(tag, false) + + // draggable frames by their titles. + // activation of dragging with a mouse down action + // deactivates all other mouse operation in SwingJS + // until the mouse is released. + // uses jQuery outside events - v1.1 - 3/16/2010 (see j2sJQueryExt.js) + + // J2S.setDraggable(titlebar, fGetFrameParent), for example, is issued + // in swingjs.plaf.JSFrameUI.js + + var drag, up; + + var dragBind = function(isBind) { + + $tag.unbind('mousemoveoutjsmol'); + $tag.unbind('touchmoveoutjsmol'); + $tag.unbind('mouseupoutjsmol'); + $tag.unbind('touchendoutjsmol'); + $tag.unbind('pointeroutjsmol'); + J2S._dmouseOwner = null; + tag.isDragging = false; + tag._isDragger = false; + if (isBind) { + $tag.bind('mousemoveoutjsmol pointeroutjsmol touchmoveoutjsmol', function(ev) { + drag && drag(ev); + }); + $tag.bind('mouseupoutjsmol pointeroutjsmol touchendoutjsmol', function(ev) { + up && up(ev); + }); + } + }; + + var $tag = $(tag); + tag = $tag[0]; + if (!tag || tag._isDragger) + return; + + var target, fDown, fDrag, fUp; + if (targetOrArray === false) { + dragBind(tag, false); + return; + } + if (targetOrArray instanceof Array) { + // J2S.setDraggable(tag, [fAll]) + // J2S.setDraggable(tag, [fDown, fDrag, fUp]) + fDown = targetOrArray[0]; + fDrag = targetOrArray[1] || fDown; + fUp = targetOrArray[2] || fDown; + } else { + // J2S.setDraggable(tag) + // J2S.setDraggable(tag, true) + // J2S.setDraggable(tag, target) + // J2S.setDraggable(tag, fTarget) + target = (targetOrArray !== true && targetOrArray || tag); + // allow for a function to return the target + // this allows the target to be created after the call to + // J2S.setDraggable() + if (!(typeof target == "function")) { + var t = target; + target = function() { + return $(t).parent() + } + } + } + + tag._isDragger = true; + + var x, y, dx, dy, pageX0, pageY0, pageX, pageY; + + var down = function(ev) { + J2S._dmouseOwner = tag; + J2S._dmouseDrag = drag; + J2S._dmouseUp = up; + + tag.isDragging = true; // used by J2S mouse event business + pageX = Math.round(ev.pageX); + pageY = Math.round(ev.pageY); + var xy = { + x : 0, + y : 0, + dx : 0, + dy : 0, + ev : ev + }; + if (fDown) { + fDown(xy, 501); + } else if (target) { + var o = $(target(501)).position(); + if (!o) return false; + xy = { + x : Math.round(o.left), + y : Math.round(o.top) + }; + } + pageX0 = xy.x; + pageY0 = xy.y; + return false; + }, drag = function(ev) { + // we will move the frame's parent node and take the frame along + // with it + var ev0 = ev.ev0 || ev; + if (ev0.buttons == 0 && ev0.button == 0) + tag.isDragging = false; + var mode = (tag.isDragging ? 506 : 503); + if (!J2S._dmouseOwner || tag.isDragging && J2S._dmouseOwner == tag) { + x = pageX0 + (dx = Math.round(ev.pageX) - pageX); + y = pageY0 + (dy = Math.round(ev.pageY) - pageY); + if (isNaN(x))return; + if (fDrag) { + fDrag({ + x : x, + y : y, + dx : dx, + dy : dy, + ev : ev + }, mode); + } else if (target) { + var frame = target(mode, x, y); + if (frame) + $(frame).css({ top : y + 'px', left : x + 'px'}) + } + } + }, up = function(ev) { + J2S._dmouseDrag = null; + J2S._dmouseUp = null; + if (J2S._dmouseOwner == tag) { + tag.isDragging = false; + J2S._dmouseOwner = null + if (isNaN(x))return; + fUp && fUp({ + x : x, + y : y, + dx : dx, + dy : dy, + ev : ev + }, 502); + return false; + } else { +// if (ev.ev0) +// setTimeout(function(){document.body.dispatchEvent(ev.ev0.originalEvent)},50) + } + }; + + var fixTouch = function(ev) { + if (ev.originalEvent.targetTouches) { + ev.pageX = Math.round(ev.originalEvent.targetTouches[0].pageX); + ev.pageY = Math.round(ev.originalEvent.targetTouches[0].pageY); + } + return ev; + } + + $tag.bind('pointerdown mousedown touchstart', function(ev) { + return down && down(fixTouch(ev)); + }); + + $tag.bind('pointermove mousemove touchmove', function(ev) { + return drag && drag(fixTouch(ev)); + }); + + $tag.bind('pointerup mouseup touchend', function(ev) { + // touchend does not express a position, and we don't use it anyway + return up && up(ev); + }); + + dragBind(true); + + } + + J2S.setWindowZIndex = function(node, z) { + // on frame show or mouse-down, create a stack of frames and sort by + // z-order + if (!node || !node.ui || node.ui.embeddedNode) + return + var app = node.ui.jc.appContext.threadGroup.name + "_"; + var a = []; + var zmin = 1e10 + var zmax = -1e10 + var $windows = $("body > div > .swingjs-window").not("body > .swingjs-tooltip :first-child"); + var found = false; + $windows.each(function(c, b) { + if (b == node) + found = true; + if (b.id.indexOf(app) == 0) + a.push([ (b == node ? z : +b.style.zIndex), b ]); + }); + a.sort(function(a, b) { + return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0 + }) + var zbase = z = J2S._z.rear + 2000; + var modalZ = 1e10; + for (var i = 0, i1 = a.length; i < i1; i++) { + var n = a[i][1]; + if (n == node) + z = zbase; + if (!n.ui || !n.ui.embeddingNode) { + n.style.zIndex = zbase; + if (n.ui && n.ui.outerNode && !n.ui.embeddingNode) { + n.ui.outerNode.style.zIndex = zbase; + if (n.ui.jc.isVisible$() && n.ui.modalNode) { + if (zbase < modalZ) + modalZ = zbase; + n.ui.modalNode.style.zIndex = zbase - 1; + } + } + } + zbase += 1000; + } + if (!found) + z += 1000; + node.style.position = "absolute"; + if (!node.ui.jc.modal && modalZ < 1e10 && z > modalZ) { + z = modalZ - 500; + } + node.ui.outerNode && (node.ui.outerNode.style.zIndex = z); + return z; + } + + J2S.say = function(msg) { + alert(msg); + } + + J2S.Swing = { + // a static class for menus and other resources + count : 0, + menuInitialized : 0, + menuCounter : 0 + }; + + J2S.getSwing = function() { + return J2S.Swing + } + + J2S.showInfo = function(applet, tf) { + applet._showInfo(tf); + } + + J2S.Loaded = {}; + + J2S.isResourceLoaded = function(resource, done) { + path = J2S.getResourcePath(resource, true); + var r = J2S.Loaded[resource]; + if (done) + J2S.Loaded[resource] = 1; + return r; + } + + J2S.getResourcePath = function(path, isJavaPath) { + if (!path || path.indexOf("https:/") != 0 + && path.indexOf("https:/") != 0 && path.indexOf("file:/") != 0) { + Clazz.loadClass("swingjs.JSUtil"); + var applet = swingjs.JSUtil.getApplet$(); + path = (!isJavaPath && applet.__Info.resourcePath || applet.__Info.j2sPath) + + "/" + (path || ""); + } + return path; + } + + J2S._newGrayScaleImage = function(context, image, width, height, grayBuffer) { + var c; + image || (image = Jmol.$(context.canvas.applet, "image")[0]); + if (image == null) { + var appId = context.canvas.applet._id; + var id = appId + "_imagediv"; + c = document.createElement("canvas"); + c.id = id; + c.style.width = width + "px"; + c.style.height = height + "px"; + c.width = width; + c.height = height; + + var layer = document.getElementById(appId + "_contentLayer"); + image = new Image(); + image.canvas = c; + image.appId = appId; + image.id = appId + "_image"; + image.layer = layer; + image.w = width; + image.h = height; + image.onload = function(e) { + try { + URL.revokeObjectURL(image.src); + } catch (e) {} + }; + var div = document.createElement("div"); + image.div = div; + div.style.position="absolute"; + layer.appendChild(div); + div.appendChild(image); + } + c = image.canvas.getContext("2d"); + var imageData = c.getImageData(0, 0, width, height); + var buf = imageData.data; + var ng = grayBuffer.length; + var pt = 0; + for (var i = 0; i < ng; i++) { + buf[pt++] = buf[pt++] = buf[pt++] = grayBuffer[i]; + buf[pt++] = 0xFF; + } + c.putImageData(imageData, 0, 0); + image.canvas.toBlob(function(blob){image.src = URL.createObjectURL(blob)}); + return image; + } + + J2S.getCaller = function() { return arguments.callee.caller.caller} + +})(self.J2S, self.jQuery, window, document); +// j2sClazz.js +// NOTE: updates to this file should be copied to j2sjmol.js + +// latest author: Bob Hanson, St. Olaf College, hansonr@stolaf.edu + +// NOTES by Bob Hanson + +// Google closure compiler cannot handle Clazz.new or Clazz.super + +// BH 2026.06.16 fixing x.replace(y,"...$...") not working properly +// BH 2025.10.16 minimizing missing package.js message +// BH 2025.04.17 adds option for explicit directory for core files different from j2sPath/core +// BH 2025.03.12 adds support for writable byte[] parameters in WASM +// BH 2025.03.06 adds support for JNA+WASM, automated loading of Java native classes if WASM is available +// BH 2025.02.22 add hashCode$() for Java Integer.TYPE and related types +// BH 2025.01.31 added checks for JavaScript SyntaxError similar to other Error types +// BH 2024.11.23 implementing java.awt.Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval") +// BH 2024.06.22 adds Integer.getIngeger(String, int) (returning null) +// BH 2024.03.03 removes unnecessary loadClass("xxxx") on exceptionOf(e,"xxxx") call +// BH 2024.02.23 fixes missing Long.signum +// BH 2023.04.30 fixes issues when Info.console == window.console +// BH 2023.03.01 upgrade for Java11 String, including String.isBlank() and CharSequence.lines(String) (in Java11 this is StringRoman1.lines(byte[]) +// BH 2023.02.12 upgrade for (asynchronous?) packaging +// BH 2023.01.22 fix for Double.doubleToRawLongBits missing and Float.floatToIntBits failing on NaN +// BH 2023.01.15 fix for int[2][3][] not initializing properly +// BH 2022.12.03 fix for Double.isInfinite should not be true for NaN +// BH 2022.12.03 fix for Double.parseDouble("") and new Double(NaN) should be NaN, not 0 +// BH 2022.09.20 fix for Class.forName not loading static inner classes directly +// BH 2022.09.20 fix for default toString for classes using "." name not "$" name for inner classes +// BH 2022.09.15 fix for new Error() failing; just letting java.lang.Error subclass Throwable +// BH 2022.09.08 Fix new Test_Inner().getClass().getMethod("testDollar", new Class[] {Test_Abstract_a.class}).getName() +// BH 2022.04.19 TypeError and ResourceError gain printStackTrace$() methods +// BH 2022.03.19 String.valueOf(Double) does not add ".0" +// BH 2022.01.17 fixes interface default method referencing own static fields +// BH 2021.12.19 adds Double -0; fixes println(Double) +// BH 2021.12.15 default encoding for String.getBytes() should be utf-8. +// BH 2021.08.16 fix for Interface initializing its subclass with static initialization +// BH 2021.07.28 String.instantialize upgraded to use TextDecoder() if possible (not in MSIE) +// BH 2021.07.20 Date.toString() format yyyy moved to end, as in Java +// BH 2021.06.11 Number.compareTo(....) missing +// BH 2021.02.12 implements better(?) interface defaults resolution -- in order of presentation + +// see earlier notes at net.sf.j2s.java.core.srcjs/js/devnotes.txt + +//window["j2s.object.native"] = true; // this is not an option + +/****************************************************************************** + * Copyright (c) 2007 java2script.org and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Zhou Renjian - initial API and implementation + *****************************************************************************/ +/******************************************************************************* + * @author zhou renjian + * @create Nov 5, 2005 + ******************************************************************************/ + + +// encapsulating function + +;(function(J2S, window, document) { + + if (J2S.clazzLoaded) return; + J2S.clazzLoaded = true; + + // at least for now: + + var setWindowValue = function(a, v) { window[a] = v; } + +J2S.LoadClazz = function(Clazz) { + +Clazz.setTVer = function(ver) { // from class loading + if (Clazz._VERSION_T.split('-')[0] != ver.split('-')[0]) + System.err.println("transpiler was " + Clazz._VERSION_T + " now " + ver + " for " + lastLoaded); + Clazz._VERSION_T = ver; +} + +var lastLoaded; +var consoleDiv = J2S.getGlobal("j2s.lib").console; + +Clazz.setConsoleDiv = function(d) { + J2S.getGlobal("j2s.lib").console = consoleDiv = d; + }; + +Clazz.ClassFilesLoaded = []; + +Clazz.popup = Clazz.log = Clazz.error = window.alert; + +/* can be set by page JavaScript */ +Clazz.defaultAssertionStatus = false; + +/* can be set by page JavaScript */ +Clazz._assertFunction = null; + + +// ////// 16 methods called from code created by the transpiler //////// + +var getArrayClass = function(name){ + // "[C" "[[C" + var n = 0; + while (name.charAt(n) == "[") n++; + var type = name.substring(n); + if (type == "S") + type = "H"; // [S is short[] in Java + var clazz = (type.length == 1 ? primTypes[type].TYPE : Clazz._4Name(type.split(";")[0].substring(1),null,null,true)); + return Clazz.array(clazz,-n); +} + +Clazz.array = function(baseClass, paramType, ndims, params, isClone) { + + if (arguments.length == 2 && paramType < 0) + return arrayClass(baseClass, -paramType); + + var t0 = (_profileNew ? window.performance.now() : 0); + + var ret = _array.apply(null, arguments); + + _profileNew && addProfileNew(baseClass == -1 ? paramType.__BASECLASS : baseClass, -1); + + return ret; +} + +var _array = function(baseClass, paramType, ndims, params, isClone) { + + // Object x = Array.newInstance(componentClass, nElements); + // var x=Clazz.array((Clazz.array(componentClass, 3); + + + // int[][].class Clazz.array(Integer.TYPE, -2) + // new int[] {3, 4, 5} Clazz.array(Integer.TYPE, -1, [3, 4, 5]) + // new int[][]{new int[] {3, 4, 5}, {new int[] {3, 4, 5}} + // Clazz.array(Integer.TYPE, -2, Clazz.array(Integer.TYPE, -1, [3, 4, 5]), + // Clazz.array(Integer.TYPE, -1, [3, 4, 5]) ) + // new int[3] Clazz.array(Integer.TYPE, [3]) + // new int[3][3] Clazz.array(Integer.TYPE, [3, 3]) + // new int[3][] Clazz.array(Integer.TYPE, [3, null]) + // new char[3] Clazz.array(Character.TYPE, [3]) + // new String[3] Clazz.array(java.lang.String, [3]) + + if (arguments[0] === -1) { + // four-parameter option from JU.AU.arrayCopyObject; + // truncate array using slice + // Clazz.array(-1, array, ifirst, ilast+1) + var a = arguments[1]; + var b = a.slice(arguments[2], arguments[3]); + return copyArrayProps(a, b); + } + if (arguments.length == 2 && baseClass.BYTES_PER_ELEMENT) { + // Clazz.array(rawInt8Array, int[] array) + // direct transfer of __* metadata (see java.nio.ByteBuffer) + return copyArrayProps(paramType, baseClass); + } + var prim = Clazz._getParamCode(baseClass); + var dofill = true; + if (arguments.length < 4) { + // one-parameter option just for convenience, same as array(String, 0) + // two-parameter options for standard new foo[n], + // Array.newInstance(class, length), and + // Array.newInstance(class, [dim1, dim2, dim3....]) + // three-parameter option for (Integer.TYPE, -1, [3, 4, 5]) + var cl = arguments[0]; + var baseClass = cl.__BASECLASS || cl; + var haveDims = (typeof arguments[1] == "number"); + var vals = arguments[haveDims ? 2 : 1]; + var ndims = (arguments.length == 1 ? 0 : !haveDims ? vals.length : arguments[1] || 0); + if (ndims < 0 && arguments.length == 2) { + return arrayClass(baseClass, -ndims); + } + if (ndims == 0) { + ndims = -1; + vals = []; + } + if (haveDims && ndims >= -1) { + if (ndims == -1) { + // new int[] {3, 4, 5}; + return _array(baseClass, prim + "A", -1, vals); + } + // Array.newInstance(int[][].class, 3); + + + var nElem = ndims; + cl = baseClass; + + ndims = 0; + while ((cl = cl.getComponentType$()) != null) { + baseClass = cl; + ndims++; + } + if (ndims > 0) { + a = new Array(nElem); + setArray(a, baseClass, prim + "A", ndims + 1); + for (var i = nElem; --i >= 0;) + a[i] = null; + } else { + a = _array(baseClass, prim + "A", ndims + 1, [nElem]); + } + return a; + } + params = vals; + paramType = prim; + + for (var i = Math.abs(ndims); --i >= 0;) { + paramType += "A"; + if (!haveDims && params[i] === null) { + params.length--; + dofill = false; + } + } + if (haveDims) { + // new int[][] { {0, 1, 2}, {3, 4, 5} , {3, 4, 5} , {3, 4, 5} }; + return setArray(vals, baseClass, paramType, -ndims); + } + } + if (ndims < 0) { + params = [-1, params]; + } else { + var initValue = null; + if (ndims >= 1 && dofill) { + initValue = _initVal(prim); + } + var p = params; // an Int32Array + var n = p.length; + params = new Array(n + 1); + for (var i = 0; i < n; i++) + params[i] = p[i]; + params[n] = initValue; + } + params.push(paramType); + var nbits = 0; + if (ndims != 0 && !(isClone && Array.isArray(params[1]))) { + switch (prim) { + case "B": + nbits = 8; + break; + case "H": + nbits = 16; + break; + case "I": + nbits = 32; + break; + case "F": + case "D": + case "J": + nbits = 64; + break; + } + } + return newTypedA(baseClass, params, nbits, (dofill ? ndims : -ndims), isClone); +} + +var _initVal = function(p) { + switch (p) { + case "J": + case "B": + case "H": // short + case "I": + case "F": + case "D": + return 0; + case "C": + return '\0'; + case "Z": + return false; + default: + return null; + } +} + +Clazz.assert = function(clazz, obj, tf, msg) { + if (!clazz.$_ASSERT_ENABLED_)return; + var ok = true; + try { + ok = tf.apply(obj) + if (!ok) + msg && (msg = msg.apply(obj)); + } catch (e) { + ok = false; + } + if (!ok) { + doDebugger(); + if (Clazz._assertFunction) { + return Clazz._assertFunction(clazz, obj, msg || Clazz._getStackTrace()); + } + Clazz.load("AssertionError"); + if (msg == null) + throw Clazz.new_(AssertionError.c$); + else + throw Clazz.new_(AssertionError.c$$S, [msg]); + } +} + +Clazz.clone = function(me) { + // BH allows @j2sNative access without super constructor +if (me.__ARRAYTYPE) { + return appendMap(Clazz.array(me.__BASECLASS, me.__ARRAYTYPE, -1, me, true), me); +} + me = appendMap(new me.constructor(inheritArgs), me); + me.__JSID__ = ++_jsid; + return me; +} + +Clazz.forName = function(name, initialize, loader, isQuiet) { + // we need to consider loading a class from the path of the calling class. + var cl = null; + (typeof initialize == "undefined") && (initialize = true); + if (loader) { + try { + isQuiet = true; + var className = loader.baseClass.getName$(); // set in + // java.lang.Class.getClassLoader$() + var i = className.lastIndexOf("."); + var name1 = className.substring(0, i + 1); + name1 = (name.indexOf(name1) == 0 ? name : name1 + name); + cl = Clazz._4Name(name1, null, null, false, initialize, true); + } catch (e) {} + } + return cl || Clazz._4Name(name, null, null, false, initialize, isQuiet); +} + +Clazz._setDeclared = function(name, func) { + (name.indexOf(".") < 0) && (name = "java.lang." + name); + Clazz.allClasses[name] = func; +} + +Clazz._getDeclared = function(name) { + (name.indexOf(".") < 0) && (name = "java.lang." + name); + return Clazz.allClasses[name] +} + +Clazz._isClassDefined = function(clazzName) { + if (!clazzName) + return false; /* consider null or empty name as non-defined class */ + if (Clazz.allClasses[clazzName]) + return true; + var pkgFrags = clazzName.split (/\./); + var pkg = null; + for (var i = 0; i < pkgFrags.length; i++) + if (!(pkg = (pkg ? pkg[pkgFrags[i]] : Clazz._allPackage[pkgFrags[0]]))) { + return false; + } + return (pkg && (Clazz.allClasses[clazzName] = pkg)); +}; + + +Clazz.getClass = function(cl, methodList) { + // $Class$ is the java.lang.Class object wrapper + // $clazz$ is the unwrapped JavaScript object + cl = getClazz(cl) || cl; + if (cl.$Class$) + return cl.$Class$; + java.lang.Class || Clazz.load("java.lang.Class"); + var Class_ = cl.$Class$ = new java.lang.Class(); + Class_.$clazz$ = cl; // for arrays - a bit of a hack + Class_.$methodList$ = methodList; + return Class_; +} + + +/** + * Implements Java's keyword "instanceof" in JavaScript's way. Also alows for + * obj to be a class itself + * + * @param obj + * the object to be tested + * @param clazz + * the class to be checked + * @return whether the object is an instance of the class + */ +/* public */ +Clazz.instanceOf = function (obj, clazz) { + if (obj == null) + return false; + // allows obj to be a class already, from arrayX.getClass().isInstance(y) + // unwrap java.lang.Class to JavaScript clazz using $clazz$ + if (typeof clazz == "string") { + clazz = Clazz._getDeclared(clazz); + } + if (!clazz) + return false; + if (obj == clazz) + return true; + // check for object being a java.lang.Class and the other not + if (obj.$clazz$ && !clazz.$clazz$) return (clazz == java.lang.Class); + obj.$clazz$ && (obj = obj.$clazz$); + if (clazz == String) + return typeof obj == "string"; + clazz.$clazz$ && (clazz = clazz.$clazz$); + if (obj == clazz) + return true; + if (obj.__ARRAYTYPE || clazz.__ARRAYTYPE) { + if (obj.__ARRAYTYPE == clazz.__ARRAYTYPE) + return true; + if (clazz.__BASECLASS == Clazz._O) { + return (!obj.__ARRAYTYPE ? Array.isArray(obj) && clazz.__NDIM == 1 + : obj.__NDIM >= clazz.__NDIM && !obj.__BASECLASS.__PRIMITIVE); + } + return obj.__ARRAYTYPE && clazz.__ARRAYTYPE && obj.__NDIM == clazz.__NDIM + && isInstanceOf(obj.__BASECLASS, clazz.__BASECLASS); + } + return (obj instanceof clazz || isInstanceOf(getClassName(obj, true), clazz, true)); +}; + +/** + * sgurin Implements Java's keyword "instanceof" in JavaScript's way **for + * exception objects**. + * + * calls Clazz.instanceOf if e is a Java exception. If not, try to detect known + * native exceptions, like native NullPointerExceptions and wrap it into a Java + * exception and call Clazz.instanceOf again. if the native exception can't be + * wrapped, false is returned. + * + * @param obj + * the object to be tested + * @param clazz + * the class to be checked + * @return whether the object is an instance of the class + * @author: sgurin + */ +Clazz.exceptionOf = function(e, clazz) { + if(e.__CLASS_NAME__) { + if (typeof clazz == "string") { + var c = Clazz._getDeclared(clazz); + if (!c) return false; + clazz = c; + } + return Clazz.instanceOf(e, clazz); + } + if (!e.getMessage) { + e.getMessage = function() {return "" + e}; + } + if (!e.printStackTrace$) { + e.printStackTrace$ = function(){System.err.println$S(e + "\n" + this.stack)}; + e.printStackTrace$java_io_PrintStream = function(stream){ + stream.println$S(e + "\n" + e.stack); + }; + // alert(e + " try/catch path:" + Clazz._getStackTrace(-10)); + } + if(clazz == Error) { + if (("" + e).indexOf("Error") < 0) + return false; + System.err.println$O(Clazz._getStackTrace()); + return true; + // everything here is a Java Exception, not a Java Error + } + return (clazz == Exception || clazz == Throwable + || clazz == NullPointerException && _isNPEExceptionPredicate(e)); +}; + +var initStatic = function(cl, impls) { + if (impls) { + for (var i = 0; i < impls.length; i++) { + initStatic(impls[i], impls[i].implementz); + } + } else if (cl.superclazz) { + initStatic(cl.superclazz); + } + cl.$static$ && (initStatics(cl), cl.$static$()); +} + +/** + * Load a class by name or an array representing a nested list of inner classes. + * Just finalize this class if from $clinit$. + */ +Clazz.load = function(cName, from$clinit$) { + if (!cName) + return null; + var cl = cName; + switch (from$clinit$ || 0) { + case 1: + // C$.$clinit$ call to finalize all dependencies + cl.$clinit$ = 0-cl.$clinit$; + // -2 means v 3.2.6 + // -1 means v 3.2.5 + // NaN means original 3.2.4 function() {Clazz.load(C$, 1)}; + var ld = cl.$load$; + setSuperclass(cl, (ld && ld[0] ? Clazz.load(ld[0]) : null)); + ld[1] && addInterface(cl, ld[1]); + switch (cl.$clinit$) { + case -1: + // done + break; + case -2: + initClass0(cl); + break; + } + return; + case 2: + // C$.$static$ to do static initialization + if (cl.$load$) { + if (cl.$load$[0] && !cl.superclazz) { + // can happen with Clazz.new_($I(n,1)....) + setSuperclass(cl, Clazz.load(cl.$load$[0])); + } + cl.$load$ = 0; + initStatic(cl, cl.$isInterface ? cl.implementz : 0); + } + return; + } + // allow for nested calling: ["foo",".foo_inner1",".foo_inner2"] + if (cName instanceof Array) { + var cl1 = null; + var name; + for (var i = 0; i < cName.length; i++) { + var cn = cName[i]; + cl1 = Clazz.load(name = (cn.indexOf(".") == 0 ? name + cn : cn)); + } + return cl1; + } + // allow for a clazz itself + if (cl.__CLASS_NAME__) + return Clazz._initClass(cl,1,1,0); + // standard load of class by name + if (cName.indexOf("Thread.") == 0) + Clazz._4Name("java.lang.Thread", null, null, true) + if (cName.indexOf("Thread") == 0) + cName = "java.lang." + cName; + return Clazz._4Name(cName, null, null, true); +} + +// create and $init0$ +var initClass0 = function(c) { + var fields = c.$fields$; + var objects = fields && fields[0]; + createDefaults(c, objects, false); + fields && initStatics(c); +} + +var initStatics = function(c) { + var statics = c.$fields$ && c.$fields$[1]; + if (statics && statics.length) + createDefaults(c, statics, true); +} + +// C$.$fields$=[ +// ['I',['test3','itype'],'S',['test1'],'O',['test2','java.util.List[]','test4','test.Test_','+test5']], +// ['D',['d'],'F',['f'],'I',['itest1','itest2'],'S',['stest1']] +// ] +var createDefaults = function(c, data, isStatic) { + var a = getFields(c, data, true); + if (isStatic) { + for (var i = a.length; --i >= 0;) { + var j = a[i][0]; + if (c[j] != undefined) + return; + c[j] = a[i][1]; + } + return; + } + c.$init0$ = function(){ + var cs = c.superclazz; + cs && cs.$init0$ && cs.$init0$.apply(this); + for (var i = a.length; --i >= 0;){ + this[a[i][0]] = a[i][1]; + } + }; + +} + +Clazz._getFieldNames = function(c, isStatic) { + return (c.$fields$ ? getFields(c, c.$fields$[isStatic ? 1 : 0], 0) : []); +} + +Clazz._getFieldTypes = function(c, isStatic) { + return (c.$fields$ ? getFields(c, c.$fields$[isStatic ? 1 : 0], "types") : []); +} + +var fieldTypes = "Integer;Float;Double;Character;Long;Byte;" +/** + * Get correct default (0, '\0', null) or just return a list of names. + */ +var getFields = function(c, data, andDefaults) { + var a = []; + if (!data) + return a; + if (andDefaults == "types") { + for (var i = 0, n = data.length; i < n; i++) { + var type = data[i++]; + var anames = data[i]; + if (type != "O") { + for (var j = anames.length; --j >= 0;) + a.push(type); + continue; + } + type = "String"; + for (var j = 0, na = anames.length; j < na; j++) { + if (anames[j].indexOf("+") != 0) { + type = anames[++j]; + } + a.push(type); + } + continue; + } + return a; + } + if (andDefaults) { + for (var i = 0, n = data.length; i < n; i++) { + var type = data[i++]; + var anames = data[i]; + var defval; + switch (type) { + case 'S': + defval = null; + break; + case 'O': + for (var j = 0, na = anames.length; j < na; j++) { + var name = anames[j]; + if (name.indexOf("+") == 0) + name = name.substring(1); + else + j++; + a.push([name, null]); + } + continue; + case 'C': + defval = '\0'; + break; + case 'Z': + defval = false; + break; + default: + defval = 0; + break; + } + for (var j = 0, na = anames.length; j < na; j++) { + a.push([anames[j], defval]); + } + } + return a; + } + for (var i = 0, n = data.length; i < n; i++) { + var type = data[i++]; + var anames = data[i]; + if (type == 'O') { + for (var j = 0, na = anames.length; j < na; j++) { + var name = anames[j]; + if (name.indexOf("+") == 0) + name = name.substring(1); + else + j++; + a.push(name); + } + } else { + for (var j = 0, na = anames.length; j < na; j++) { + a.push(anames[j]); + } + } + } + return a; +} +Clazz._newCount = 0; + +/** + * Create a new instance of a class. Accepts: a string + * Clazz.new_("java.util.Hashtable") a clazz (has .__CLASS_NAME__ and a default + * contructor) a specific class constructor such as c$$S a constructor from a + * one class (c, anonymous constructor) and a class to create, cl + * + */ + +Clazz.new_ = function(c, args, cl) { + if (!c) + return new Clazz._O(); + + var a = arguments; + if (Array.isArray(c)) { + a = [args, c]; + if (arguments.length == 3) + a.push(cl); + var _ = args;args = c;c = _; + } + var generics; + if (c === 1) { // new for 3.2.6 {K:"java.lang.String",...} + generics = arguments[1]; + a = []; + c = a[0] = arguments[2]; + args = a[1] = arguments[3]; + cl = a[2] = arguments[4]; + a = a.slice(0, arguments.length - 2); + } + var haveArgs = !!args; + args || (args = [[]]); + + Clazz._newCount++; + + var t0 = (_profileNew ? window.performance.now() : 0); + + if (c.__CLASS_NAME__ && c.c$) + c = c.c$; + else if (typeof c == "string") { + // Clazz.new_("path.className") + // Clazz.new_("path.className","$I$O...",[3,"test"]); + switch(arguments.length) { + case 1: + return Clazz.new_(Clazz.load(c)); + case 3: + return Clazz.new_(Clazz.load(c)["c$" + args], cl) + } + } + + // an inner class will attach arguments to the arguments returned + // Integer will be passed as is here, without c.exClazz, or cl + var clInner = cl; + cl = cl || c.exClazz || c; + Clazz._initClass(cl,1,0,0); + // BH note: Critical here that the above is not 1,1,0; + // static init is the responsibility of newInstance + // or a static field or method call (which is handled + // by the $I$(n) handler in the function initializer in + // the newClass() call. + var obj = new (Function.prototype.bind.apply(cl, a)); + if (args[2] != inheritArgs) { + haveArgs && c.apply(obj, args); + clInner && clInner.$init$.apply(obj); + } + + _profileNew && addProfileNew(cl, window.performance.now() - t0); + + if (generics) { + obj.$init$.generics = generics; + } + return obj; +} + +Clazz._Pointer = null; + +Clazz._loadWasm = function(cls, lib){ + if (cls.wasmLoaded) + return; + cls.wasmLoaded = true; + var libName = lib.getName$(); // "jnainchi" var wasmName = libName + ".wasm"; + if (J2S.wasm && J2S.wasm[libname]) + return; + var className = cls.getName$(); + var classPath = className.substring(0, className.lastIndexOf(".") + 1).replaceAll(".", "/"); + var j2sdir = Thread.秘thisThread.getContextClassLoader$().$_$base; + var libPath = j2sdir + classPath; + var jsClass = cls.$clazz$; + var m; + Clazz._isQuietLoad = true; + var aMethods = cls.getMethods$(); + var nameMap = {}; + var funcs = []; + J2S.wasm || (J2S.wasm = {}); + J2S.wasm[libName] || (J2S.wasm[libName] = {}); + var getFunc = function(cls, newName, sig, ptypes, retType, fargs, fret) { + System.out.println("Clazz.loadWasm creating J2S.wasm." + libName + "." + newName); + return function(module) { + var f = []; + f[0] = module.cwrap(newName, retType, ptypes); + //System.out.println(newName + " " + retType + " " + ptypes); + J2S.wasm[libName][newName] = jsClass[newName] = jsClass[sig] = function() { + var rgs = []; + var ba = []; + var pa = []; + var getNewFunc = false; + for (var i = arguments.length; --i >= 0;) { + var a = arguments[i]; + if (a && a.__NDIM) { + // we have a signature "BA" (byte[]), and the + // developer has passed byte[] rather than the assumed + // String value. So we need to allocate memory for + // the array, fill it, change the wrapping to "number" (for a pointer) + // execute the function, and then retrieve the value. + // Emscripten missed this for some reason, and only reads the array + // but does not re-fill it. I think this is a bug. + ba[i] = a; + pa[i] = module._malloc(a.length); + module.writeArrayToMemory(ba[i], pa[i]); + a = pa[i]; + if (ptypes[i] == "string") { + // now we know that a byte[] is being used at runtime instead of a String, + // we need to recreate the wrapped function. + // this will only happen once. + ptypes[i] = "number"; + getNewFunc = true; + } + } + rgs[i] = (fargs[i] ? fargs[i](a) : a); + } + if (getNewFunc) { + f[0] = module.cwrap(newName, retType, ptypes); + } + var val = f[0].apply(null, rgs); + if (ba.length) { + for (var i = pa.length; --i >= 0;) { + if (pa[i]) { + // fill original array from pointer + for (var pt = pa[i], a = ba[i], n = a.length, j = 0; j < n; j++) { + a[j] = module.getValue(pt++); + } + module._free(pa[i]); + } + } + + } + return (fret ? fret(val, module) : val); + } + } + } + + var argPtr = function(p) { return (p ? p.peer : 0); }; + var retPtr = function(i) { return Clazz.new_(com.sun.jna.Pointer.c$$I, [i]);}; + var retStr = function(p) { if (p < 0) return null;var ret = module.UTF8ToString(p); module._free(p);return ret;}; + var retNull = function() { return null; }; + + for (var i = 0, n = aMethods.length; i < n; i++) { + try { + m = aMethods[i]; + var jsm = m.$meth$; + if (!jsm.isNative) + continue; + var name = m.getName$(); + var newName = name; + var ext = nameMap[name] || 0; + if (ext) { + newName += ext; + } else { + ext++; + } + nameMap[name] = ++ext; + var sig = m.getSignature$(); + var aParams = sig.split("$"); + var ptypes = []; + var fargs = []; + for (var p = 1, np = aParams.length; sig != null && p = 0;) { +// var name = minimalObjNames[i]; +// clazz[name] = objMethods[name]; +// } + Clazz._setDeclared(qName, clazz); + return clazz; + +}; + +Clazz.newEnumConst = function(vals, c, enumName, enumOrdinal, args, cl) { + var clazzEnum = c.exClazz; + var e = clazzEnum.$init$$ || (clazzEnum.$init$$ = clazzEnum.$init$); + clazzEnum.$init$ = function() {e.apply(this); this.name = this.$name = enumName; this.ordinal = enumOrdinal;this.$isEnumConst = true;} + vals.push(clazzEnum[enumName] = clazzEnum.prototype[enumName] = Clazz.new_(c, args, cl)); + } + +Clazz.newInstance = function (objThis, args, isInner, clazz) { + if (args && ( + args[0] == inheritArgs + || args[1] == inheritArgs + || args[2] == inheritArgs + )) { + // Just declaring a class, not creating an instance or doing field + // preparation. + // That is, we are just generating the prototypes for this method using new + // superClass() + return; + } + + if (objThis.__VAL0__) { + // Integer, Long, Byte, Float, Double + // .instantialize(val) + objThis.valueOf = function () { + return this; + }; + } + + objThis.__JSID__ = ++_jsid; + + if (!isInner) { +// if (args) + clazz && Clazz._initClass(clazz,1,1,objThis); + if ((!args || args.length == 0) && objThis.c$) { + // allow for direct default call "new foo()" to run with its default + // constructor + objThis.c$.apply(objThis); + args && (args[2] = inheritArgs) + } + return; + } + + // inner class + + // args[0] = outerObject + // args[1] = b$ array + // args[2-n] = actual arguments + var outerObj = shiftArray(args, 0, 1); + var finalVars = shiftArray(args, 0, 1); + var haveFinals = (finalVars || outerObj && outerObj.$finals$); + if (!outerObj || !objThis) + return; + var clazz1 = (outerObj.__CLASS_NAME__ || outerObj instanceof String ? getClazz(outerObj) : null); + (!clazz1 || clazz1 == outerObj) && (outerObj = objThis); + + if (haveFinals) { + // f$ is short for the once-chosen "$finals$" + var of$ = outerObj.$finals$; + objThis.$finals$ = (finalVars ? + (of$ ? appendMap(appendMap({}, of$), finalVars) : finalVars) + : of$ ? of$ : null); + } + // BH: For efficiency: Save the b$ array with the OUTER class as $b$, + // as its keys are properties of it and can be used again. + var b = outerObj.$b$; + var isNew = false; + var innerName = getClassName(objThis, true); + if (!b) { + b = outerObj.b$; + // Inner class of an inner class must inherit all outer object references. + // Note that this + // can cause conflicts. For example, b$["java.awt.Component"] could refer to + // the wrong + // object if I did this wrong. + // + if (!b) { + // the outer class is not itself an inner class - start a new map + b = {}; + isNew = true; + } else if (b["$ " + innerName]) { + // this inner class is already in the map pointing to a different + // object. Clone the map. + b = appendMap({},b); + isNew = true; + } + b[getClassName(outerObj, true)] = outerObj; + // add all superclass references for outer object + clazz1 && addB$Keys(clazz1, isNew, b, outerObj, objThis); + } + var clazz2 = (clazz.superclazz == clazz1 ? null : clazz.superclazz || null); + if (clazz2) { + // we have an inner object that subclasses a different object + // clone the map and overwrite with the correct values + b = appendMap({},b); + addB$Keys(clazz2, true, b, objThis, objThis); + } else if (isNew) { + // it is new, save this map with the OUTER object as $b$ + // 12018.12.20 but only if it is clean + outerObj.$b$ = b; + } + + // final objective: save this map for the inner object + // add a flag to disallow any other same-class use of this map. + b["$ " + innerName] = 1; + objThis.b$ = b; + clazz.$this$0 && (objThis.this$0 = b[clazz.$this$0]); + Clazz._initClass(clazz,1,0,objThis); +}; + + +var fixBRefs = function(cl, obj, outerObj) { + // see Clazz.super_ + obj.b$[cl.superclazz.$this$0] = outerObj; +} + +var stripJavaLang = function(s) { + return ( + s.indexOf("java.lang.") != 0 + || s == "java.lang.Object" + || s.length > 10 && !Character.isUpperCase$C(s.charAt(10)) ? + s : + s.substring(10)); +}; + +var addB$Keys = function(clazz, isNew, b, outerObj, objThis) { + var cl = clazz; + do { + var key = getClassName(cl, true); + if (!isNew && b[key]) + break; + setB$key(key, b, outerObj); + if (cl.implementz) { + var impl = cl.implementz; + for (var i = impl.length; --i >= 0;) { + var key = getClassName(impl[i], true); + if (isNew || !b[key]) { + setB$key(key, b, outerObj); + } + } + } + } while ((cl = cl.superclazz)); +}; + +var setB$key = function(key, b, outerObj) { + b[key] = outerObj; + if (key.indexOf("java.lang.") == 0) + b[key.substring(10)] = outerObj; + if (key == "javax.swing.JDialog") + b["java.awt.Dialog"] = outerObj; + if (key == "javax.swing.JFrame") + b["java.awt.Frame"] = outerObj; +}; + +/** + * // arg1 is the package name // arg2 is the full class name in quotes // arg3 + * is the class definition function, C$, which is called in Clazz.new_(). // + * arg4 is the superclass // arg5 is the superinterface(s) // arg6 is the type: + * anonymous(1), local(2), or absent + */ + +Clazz.newInterface = function (prefix, name, f, _null2, interfacez, _0) { + var c = Clazz.newClass(prefix, name, function(){}, null, interfacez, 0); + f && f(c); // allow for j2sNative block + return c; +}; + +var __allowOverwriteClass = true; + +Clazz.newMeth = function (clazzThis, funName, funBody, modifiers, nativeReturn) { + + if (!__allowOverwriteClass && clazzThis.prototype[funName]) + return; + + // modifiers: 1: static, 2: native, p3 -- private holder + if (arguments.length == 1) { + return Clazz.newMeth(clazzThis, 'c$', function(){ + clazzThis.$load$ && Clazz.load(clazzThis,2); + Clazz.super_(clazzThis, this); + }, 1); + } + if (funName.constructor == Array) { + // If funName is an array, we are setting aliases for generic calls. + // For example: ['compareTo$S', 'compareTo$TK', 'compareTo$TA'] + // where K and A are generic types that are from a class or class + // assignment. + for (var i = funName.length; --i >= 0;) + Clazz.newMeth(clazzThis, funName[i], funBody, modifiers); + return; + } + + var isNative = (modifiers == 2); + var isStatic = (modifiers == 1 || modifiers == 2); + var isPrivate = (typeof modifiers == "object"); + if (isPrivate) + clazzThis.$P$ = modifiers; + Clazz.saemCount0++; + funBody.exName = funName; // mark it as one of our methods + funBody.exClazz = clazzThis; // make it traceable + funBody.isPrivate = isPrivate; + if (isNative) { + funBody.isNative = true; + funBody.nativeReturn = nativeReturn; + } + + var f; + if (isStatic || funName == "c$") + clazzThis[funName] = funBody; + if (clazzThis.$isInterface) + clazzThis.$hasJava8Defaults = true; + if (isPrivate && modifiers) + modifiers[funName] = funBody; + else + clazzThis.prototype[funName] = funBody; + return funBody; // allow static calls as though they were not static +}; + +Clazz.newPackage = function (pkgName) { + Clazz._Loader && Clazz._Loader.doTODO(); + if (Clazz.lastPackageName == pkgName || !pkgName) + return Clazz.lastPackage; + var pkgFrags = pkgName.split (/\./); + var pkg = Clazz._allPackage; + for (var i = 0; i < pkgFrags.length; i++) { + var a = pkgFrags[i]; + if (!pkg[a]) { + pkg[a] = { __PKG_NAME__ : (pkg.__PKG_NAME__ ? pkg.__PKG_NAME__ + "." + a : a) } + if (i == 0) { + setWindowValue(a, pkg[a]); + } + } + pkg = pkg[a] + } + Clazz.lastPackageName = pkgName; + return Clazz.lastPackage = pkg; +}; + +Clazz.super_ = function(cl, obj, outerObj) { + if (outerObj) { + // inner class is subclassing an inner class in another class using + // OuterClass.super() + fixBRefs(cl, obj, outerObj); + return; + } + + // implicit super() call + + if (cl.superclazz && cl.superclazz.c$) { + // added [] here to account for the possibility of vararg default + // constructor + cl.superclazz.c$.apply(obj, [[]]); + } + cl.$init$ && cl.$init$.apply(obj); +} + +// /////////////////////////////////////////////////////////////////// + +var aas = "AAA"; + +var arrayClasses = {}; + +var arrayClass = function(baseClass, ndim) { + ndim || (ndim = 1); + var stub = Clazz._getParamCode(baseClass); + var key = stub + ";" + ndim; + var ret = arrayClasses[key]; + if (ret) + return ret; + while (aas.length < ndim) + aas += aas; + var aaa = aas.substring(0, ndim); + var o = {}; + var a = new Array(ndim); + o.arrayType = 1; + o.__BASECLASS = baseClass; + o.__NDIM = ndim; + o.__CLASS_NAME__ = o.__ARRAYTYPE = stub + aaa; + o.__COMPONENTTYPE = (o.__NDIM == 1 ? baseClass : null); + var oclass = Clazz.getClass(o); + oclass.getComponentType$ = function() { + if (!o.__COMPONENTTYPE) + o.__COMPONENTTYPE = arrayClass(baseClass, ndim - 1); + return (o.__COMPONENTTYPE.__PRIMITIVE + || o.__COMPONENTTYPE.$clazz$ ? o.__COMPONENTTYPE + : Clazz.getClass(o.__COMPONENTTYPE)); + }; + oclass.getName$ = function() {return o.__NAME || (o__NAME = (function(stub) { + switch (stub) { + case "O": + stub = "Object"; + break; + case "H": // SwingJS -> Java + stub = "S"; + break; + case "S": + stub = "String"; + break; + default: + if (stub.length > 1) + stub = baseClass.__CLASS_NAME$__ || baseClass.__CLASS_NAME__; + break; + } + if (stub.indexOf(".") >= 0) + stub = "L" + stub + ";"; + else if (stub.length > 1) + stub = "Ljava.lang." + stub + ";"; + return aaa.replace(/A/g,"[") + stub; + })(stub))}; + arrayClasses[key] = oclass; + return oclass; +} + + +// var supportsNativeObject = window["j2s.object.native"]; // true + + +// Clazz.duplicatedMethods = {}; + +// Clazz._preps = {}; // prepareFields functions based on class name + +// BH Clazz.getProfile monitors exactly what is being delegated with SAEM, +// which could be a bottle-neck for function calling. +// This is critical for performance optimization. + +var __signatures = ""; +var profilet0; +var _profileNew = null; +var _jsid0 = 0; + +Clazz.startProfiling = function(doProfile) { + _profileNew = {}; + if (typeof doProfile == "number") { + _jsid0 = _jsid; + setTimeout(function() { var s = "total wall time: " + doProfile + " sec\n" + Clazz.getProfile(); console.log(s); System.out.println(s)}, doProfile * 1000); + } else if (doProfile === false) { + _jsid = 0; + _profileNew = null; + } + return (_profileNew ? "use Clazz.getProfile() to show results" : "profiling stopped and cleared") +} + +var tabN = function(n) { n = ("" + n).split(".")[0]; return "..........".substring(n.length) + n + "\t" }; + +Clazz.getProfile = function() { + var s = "run Clazz.startProfiling() first"; + + if (_profileNew) { + s += "\n\n Total new objects: " + (_jsid - _jsid0) + "\n"; + s += "\ncount \texec(ms)\n"; + s += "--------\t--------\t------------------------------\n"; + totalcount = 0; + totaltime = 0; + var rows = []; + for (var key in _profileNew) { + var count = _profileNew[key][0]; + var tnano = _profileNew[key][1]; + totalcount += count; + totaltime += Math.abs(tnano); + rows.push(tabN(count) + tabN(Math.round(tnano)) + "\t" +key + "\n"); + } + rows.sort(); + rows.reverse(); + s += rows.join(""); + s+= tabN(totalcount)+tabN(Math.round(totaltime)) + "\n"; + } + _profileNew = null; + return s; // + __signatures; +} + +var addProfileNew = function(c, t) { + var s = c.__CLASS_NAME__ || c.__PARAMCODE; + if (t < 0) { + s += "[]"; + t = 0; + } + if (J2S._traceOutput && (s.indexOf(J2S._traceOutput) >= 0 || '"' + s + '"' == J2S._traceOutput)) { + alert(s + "\n\n" + Clazz._getStackTrace()); + doDebugger(); + } + + var p = _profileNew[s]; + p || (p = _profileNew[s] = [0,0]); + p[0]++; + p[1]+=t; +} + +// /////////////////// method creation //////////////////////////////// + +var doDebugger = function() { debugger } + +// /////////////////////// private supporting method creation +// ////////////////////// + + + var copyArrayProps = function(a, b) { + b.__BYTESIZE = a.__BYTESIZE; + b.__ARRAYTYPE = a.__ARRAYTYPE; + b.__BASECLASS = a.__BASECLASS; + b.__NDIM = a.__NDIM; + b.getClass$ = a.getClass$; + b.equals$O = a.equals$O; + b.hashCode$ = a.hashCode$; + return b; + } + + var aHCOffset = 500000000000 + var lHCOffset = 400000000000 + var iHCOffset = 300000000000 + var sHCOffset = 200000000000 + var bHCOffset = 100000000000 + + + var setArray = function(vals, baseClass, paramType, ndims) { + ndims = Math.abs(ndims); + vals.__JSID__ = ++_jsid; + vals.getClass$ = function () { return arrayClass(this.__BASECLASS, this.__NDIM) }; + vals.hashCode$ = function() {return System.identityHashCode$O(this, aHCOffset);} + vals.equals$O = function (a) {return this == a; } + + vals.reallyEquals$O = function (a) { + if (!a || a.__ARRAYTYPE != this.__ARRAYTYPE || a.length != this.length) + return false; + if (a.length == 0) + return true; + if (typeof a[0] == "object") { + for (var i = a.length; --i >= 0;) + if ((a[i] == null) != (this[i] == null) || a[i] != null + && (a[i].equals$O && !a[i].equals$O(this[i]) + || a.equals && !a[i].equals(this[i]) || a[i] !== this[i])) + return false; + } else { + for (var i = a.length; --i >= 0;) + if (a[i] !== this[i]) + return false; + } + return true; + }; + + vals.__ARRAYTYPE = paramType; // referenced in java.lang.Class + vals.__BASECLASS = baseClass; + vals.__NDIM = ndims; + return vals; +} + +/** + * in-place shift of an array by k elements, starting with element i0, resetting + * its length in case it is arguments (which does not have the .shift() method. + * Returns a[i0] + */ +var shiftArray = function(a, i0, k) { + if (a == null || k > a.length) + return null; + k || (k == 1); + i0 || (i0 == 0); + var arg = a[i0]; + for (var i = i0, n = a.length - k; i < n; i++) + a[i] = a[i + k]; + a.length -= k; + return arg; +}; + +var getParamCode = Clazz._getParamCode = function(cl) { + cl.$clazz$ && (cl = cl.$clazz$); + return cl.__PARAMCODE || (cl.__PARAMCODE = stripJavaLang(cl.__CLASS_NAME__).replace(/\./g, '_')); +} + +var newTypedA = function(baseClass, args, nBits, ndims, isClone) { + var dim = args[0]; + if (typeof dim == "string") + dim = dim.charCodeAt(0); // int[] a = new int['\3'] ??? + var last = args.length - 1; + var paramType = args[last]; + var val = args[last - 1]; + if (ndims < -1 || Math.abs(ndims) > 1) { + //array of arrays; -2: when x[30][] + var xargs = new Array(last--); + for (var i = 0; i <= last; i++) + xargs[i] = args[i + 1]; + // SAA -> SA + xargs[last] = paramType.substring(0, paramType.length - 1); + var arr = new Array(dim); + if (args[1] != null) { + // arg[1] is null, we set the array type but do not fill in the array + // otherwise, call recursively + for (var i = 0; i < dim; i++) { + arr[i] = newTypedA(baseClass, xargs, nBits, ndims - (ndims < 0 ? -1 : 1)); + } + } + } else { + // Clazz.newIntA(new int[5][] val = null + // Clazz.newA(5 ,null, "SA") new String[5] val = null + // Clazz.newA(-1, ["A","B"], "SA") new String[] val = {"A", "B"} + // Clazz.newA(3, 5, 0, "IAA") new int[3][5] (second pass, so now args = [5, + // 0, "IA"]) + if (val == null) { + nBits = 0; + } else if (nBits > 0 && dim < 0) { + // make sure this is not a character + for (var i = val.length; --i >= 0;) + val[i].charAt && (val[i] = val[i].$c()); + dim = val; // because we can initialize an array using new + // Int32Array([...]) + } + if (nBits > 0) + ndims = 1; + var atype; + // dim could be a number or an array + switch (nBits) { + case 8: + var arr = new Int8Array(dim); + break; + case 16: + var arr = new Int16Array(dim); + break; + case 32: + var arr = new Int32Array(dim); + break; + case 64: + var arr = (paramType != "JA" ? new Float64Array(dim) : typeof dim == "number" ? new Array(dim).fill(0) : dim); + break; + default: + nBits = 0; + var arr; + if (isClone) { + arr = new Array(dim = val.length); + } else { + arr = (dim < 0 ? val : new Array(dim)); + if (dim > 0 && val != null) + arr.fill(val); + } + break; + } + arr.__BYTESIZE = arr.BYTES_PER_ELEMENT || (nBits >> 3); + } + return setArray(arr, baseClass, paramType, ndims); +} + + +/** + * Return the class name of the given class or object. + * + * @param clazzHost + * given class or object + * @return class name + */ +var getClassName = function(obj, fAsClassName) { + if (obj == null) + return "NullObject"; + if (obj._NULL_) + return obj.clazzName; + switch(typeof obj) { + case "number": + return "n"; + case "boolean": + return "b"; + case "string": + // Always treat the constant string as String object. + // This will be compatiable with Java String instance. + return "String"; + case "function": + if (obj.__CLASS_NAME__) + return (fAsClassName ? obj.__CLASS_NAME__ : "Class"); // user defined + // class name + var s = obj.toString(); + var idx0 = s.indexOf("function"); + if (idx0 < 0) + return (s.charAt(0) == '[' ? extractClassName(s) : s.replace(/[^a-zA-Z0-9]/g, '')); + var idx1 = idx0 + 8; + var idx2 = s.indexOf ("(", idx1); + if (idx2 < 0) + return "Object"; + s = s.substring (idx1, idx2); + if (s.indexOf("Array") >= 0) + return "Array"; + s = s.replace (/^\s+/, "").replace (/\s+$/, ""); + return (s == "anonymous" || s == "" ? "Function" : s); + case "object": + if (obj.__CLASS_NAME__) // user defined class name + return obj.__CLASS_NAME__; + if (!obj.constructor) + return "Object"; // For HTML Element in IE + if (!obj.constructor.__CLASS_NAME__) { + if (obj.__VAL0__) + return "Number"; + if (obj instanceof Boolean) + return "Boolean"; + if (obj instanceof Array || obj.__BYTESIZE) + return "Array"; + if (obj instanceof ReferenceError || obj instanceof TypeError || obj instanceof SyntaxError) { + // note that this is not technically the case. + // we use this to ensure that try/catch delivers these as java.lang.Error instances + return "Error"; + } + var s = obj.toString(); + // "[object Int32Array]" + if (s.charAt(0) == '[') + return extractClassName(s); + } + return getClassName(obj.constructor, true); + } + // some new, unidentified class + return "Object"; +}; + +var extractClassName = function(clazzStr) { + // [object Int32Array] + var clazzName = clazzStr.substring (1, clazzStr.length - 1); + return (clazzName.indexOf("Array") >= 0 ? "Array" // BH -- for Float64Array + // and Int32Array + : clazzName.indexOf ("object ") >= 0 ? clazzName.substring (7) // IE + : clazzName); +} + +/** + * Expand the shortened list of class names. For example: JU.Log, $.Display, + * $.Decorations will be expanded to JU.Log, JU.Display, JU.Decorations where + * "$." stands for the previous class name's package. + * + * This method will be used to unwrap the required/optional classes list and the + * ignored classes list. + */ +/* private */ +var unwrapArray = function (arr) { + if (!arr || arr.length == 0) + return []; + var last = null; + for (var i = 0; i < arr.length; i++) { + var ai = arr[i]; + if (typeof ai != "string") + continue; + if (ai.charAt(0) == '$') { + if (ai.charAt(1) == '.') { + if (!last) + continue; + var idx = last.lastIndexOf("."); + if (idx != -1) { + var prefix = last.substring (0, idx); + arr[i] = prefix + ai.substring(1); + } + } else { + arr[i] = "org.eclipse.s" + ai.substring (1); + } + } + last = arr[i]; + } + return arr; +}; + +/** + * Return the JavaScript clazz of the given class or object. + * + * @param clazzHost + * given class or object + * @return class name + */ +var getClazz = function (clazzHost) { + if (!clazzHost) + return Clazz._O; // null/undefined is always treated as Object + if (typeof clazzHost == "function") + return clazzHost; + var clazzName; + if (clazzHost._NULL_) { + clazzName = clazzHost.clazzName; + } else { + switch (typeof clazzHost) { + case "string": + return String; + case "object": + if (!clazzHost.__CLASS_NAME__) + return (clazzHost.constructor || Clazz._O); + clazzName = clazzHost.__CLASS_NAME__; + break; + default: + return clazzHost.constructor; + } + } + return evalType(clazzName, true); +}; + +var appendMap = function(a, b) { + if (b) + for (var s in b) { + a[s] = b[s]; + } + return a; +} + +var hashCode = 0; + +var _jsid = 0; + +// if (supportsNativeObject) { // true + Clazz._O = function () {}; + Clazz._O.__CLASS_NAME__ = "Object"; + Clazz._O.__PARAMCODE = "O"; + Clazz._O.getClass$ = function () { return Clazz._O; }; +// } else { +// Clazz._O = Object; +// } + +/* + * these methods are not part of Java. + * + * var objMethods = { equals : function (o) { return this === o; }, hashCode : + * function () { return this.__CLASS_NAME__.hashCode (); }, toString : function () { + * return "class " + this.__CLASS_NAME__; } }; objMethods.equals$O = + * objMethods.equals; + */ + +// set object methods for Clazz._O and Array + + var addProto = function(proto, name, func) { + func.exClazz = Clazz._O; + func.exName = name; + return proto[name] = func; + }; + +// var minimalObjNames = [ "equals$", "equals$O", "hashCode$" /*"toString",*/ ]; + +;(function(proto) { + + addProto(proto, "equals$O", function (obj) { + return this == obj; + }); + + addProto(proto, "hashCode$", function () { + return this._$hashcode || (this._$hashcode = ++hashCode) + }); + + addProto(proto, "getClass$", function () { return Clazz.getClass(this); }); + + addProto(proto, "clone$", function () { return Clazz.clone(this); }); + +/* + * Methods for thread in Object + */ + addProto(proto, "finalize$", function () {}); + addProto(proto, "notify$", function () {}); + addProto(proto, "notifyAll$", function () {}); + addProto(proto, "wait$", function () {alert("Object.wait was called!" + arguments.callee.caller.toString())}); + addProto(proto, "toString$", Object.prototype.toString); + addProto(proto, "toString", function () { return (this.__CLASS_NAME__ ? "[" + (this.__CLASS_NAME$__ || this.__CLASS_NAME__) + " object]" : this.toString$.apply(this, arguments)); }); + +})(Clazz._O.prototype); + +var extendObjectMethodNames = [ + // all + "equals$O", "getClass$", "clone$", "finalize$", "notify$", "notifyAll$", "wait$", + // not Number, Array + "hashCode$", + // not String + "toString" + ]; + +var EXT_NO_TOSTRING = 1; // length - 1 +var EXT_NO_HASHCODE = 2; // length - 2 + +var extendObject = function(clazz, ext) { + var op =Clazz._O.prototype; + var cp = clazz.prototype; + for (var i = extendObjectMethodNames.length - (ext || 0); --i >= 0;) { + var p = extendObjectMethodNames[i]; + cp[p] = op[p]; + } +} + +// see also +var excludeSuper = function(o) { + return o == "b$" || o == "$this$0" + || o == "$init$" + || o == "$init0$" + || o == "$static$" + || o == "$defaults$" + || o == "$clinit$" + || o == "$classes$" + || o == "$fields$" + || o == "$load$" + || o == "$Class$" + || o == "$getMembers$" + || o == "$getAnn$" + || o == "prototype" + || o == "__PARAMCODE" + || o == "__CLASS_NAME__" + || o == "__CLASS_NAME$__" + || o == "superclazz" + || o == "implementz" + || o.startsWith("c$") +} + +var copyStatics = function(clazzFrom, clazzThis, isInterface) { + for (var o in clazzFrom) { + if (clazzThis[o] == undefined && !excludeSuper(o)) { + clazzThis[o] = clazzFrom[o]; + if (isInterface) + clazzThis.prototype[o] = clazzFrom[o]; + } + } + if (isInterface) { + clazzFrom.$static$ && (initStatics(clazzFrom), clazzFrom.$static$()); + clazzThis.$defaults$ && clazzThis.$defaults$(clazzThis); + for (var o in clazzFrom.prototype) { + if (clazzThis.prototype[o] == undefined && !excludeSuper(o)) { + clazzThis.prototype[o] = clazzFrom.prototype[o]; + } + } + if (clazzFrom.$defaults$) { + __allowOverwriteClass = false; + clazzFrom.$defaults$(clazzThis); + __allowOverwriteClass = true; + } + } +} + + +var finalizeClazz = function(clazz, qname, bname, type, isNumber) { + clazz.$isInterface = (type == 0); + qname && (clazz.__CLASS_NAME__ = clazz.prototype.__CLASS_NAME__ = qname); + bname && (clazz.__CLASS_NAME$__ = clazz.prototype.__CLASS_NAME$__ = bname); // inner + // static + // classes + // use + // $ + // not + // "." + + (type == 1) && (clazz.__ANON = clazz.prototype.__ANON = 1); + (type == 2) && (clazz.__LOCAL = clazz.prototype.__LOCAL = 1); + +// if (!isNumber && type != 0) +// Clazz.newMeth(clazz, '$init0$', function(){var c;if ((c=clazz.superclazz) && +// (c = c.$init0$))c.apply(this);}, 1); + if (isNumber || type != 0) + extendPrototype(clazz); + +}; + +var extendPrototype = function(clazz, isPrimitive, addAll) { + clazz.isInstance = function(o) { return Clazz.instanceOf(o, this) }; + var cp = clazz.prototype; + var op = Clazz._O.prototype; + for (var i = 0; i < extendObjectMethodNames.length; i++) { + var p = extendObjectMethodNames[i]; + if (!cp[p] || cp[p].exClazz == Clazz._O) + addProto(cp, p, op[p]); + } +} + + +Clazz.saemCount0 = 0 // methods defined + +var NullObject = function () {}; + +var evalType = function (typeStr, isQualified) { + if (typeStr == null) + return null; + var cl = (isQualified && Clazz._getDeclared(typeStr)); + if (cl) + return cl; + var idx = typeStr.lastIndexOf("."); + if (idx >= 0) { + var pkgName = typeStr.substring (0, idx); + var pkg = Clazz.newPackage(pkgName); + var clazzName = typeStr.substring (idx + 1); + return pkg[clazzName]; + } + switch (typeStr) { + case "string": + return String; + case "number": + return Number; + case "object": + return Clazz._O; + case "boolean": + return Boolean; + case "function": + return Function; + case "void": + case "undefined": + case "unknown": + return typeStr; + case "NullObject": + return NullObject; + default: + return Clazz._getDeclared(typeStr); + } +}; + +var equalsOrExtendsLevel = function (clazzThis, clazzAncestor) { + while (true) { + if (clazzThis == null) + return false; + if (clazzThis === clazzAncestor) + return true; + if (clazzThis && clazzThis.implementz) { + var impls = clazzThis.implementz; + for (var i = impls.length; --i >= 0;) + if (equalsOrExtendsLevel(impls[i], clazzAncestor)) + return true; + } + clazzThis = clazzThis.superclazz; + } + return false; +}; + +var knownInst = {}; + +var isInstanceOf = function (clazzTarget, clazzBase, isTgtStr, isBaseStr) { + if (clazzTarget === clazzBase) + return true; + if (isTgtStr && ("void" == clazzTarget || "unknown" == clazzTarget)) + return false; + if (isBaseStr && ("void" == clazzBase || "unknown" == clazzBase)) + return false; + Clazz._initClass(clazzBase, 1) + if (clazzTarget === (isTgtStr ? "NullObject" : NullObject)) { + switch (clazzBase) { + case "n": + case "b": + return false; + case Number: + case Boolean: + case NullObject: + break; + default: + return true; + } + } + var t = (isTgtStr ? clazzTarget : clazzTarget.__CLASS_NAME__ || clazzTarget.type); + var b = (isBaseStr ? clazzBase : clazzBase.__CLASS_NAME__ || clazzBase.type); + if (t && t == b) + return true; + var key = t + "|" + b; + var val = knownInst[key]; + if (val) + return (val == 1 ? true : false); + + isTgtStr && (clazzTarget = Clazz._getDeclared(clazzTarget)); + isBaseStr && (clazzBase = Clazz._getDeclared(clazzBase)); + var ret = (clazzBase && clazzTarget && ( + clazzTarget == clazzBase + || clazzBase === Object + || clazzBase === Clazz._O + || equalsOrExtendsLevel(clazzTarget, clazzBase) + )); +if (t && b) + knownInst[key] = (ret ? 1 : -1); + return ret; +}; + + +// ///////////////////////// Exception handling //////////////////////////// + +/* + * Use to mark that the Throwable instance is created or not. + * + * Called from java.lang.Throwable, as defined in JSmolJavaExt.js + * + * The underscore is important - it tells the JSmol ANT task to NOT turn this + * into Clazz_initializingException, because coreBottom2.js does not include + * that call, and so Google Closure Compiler does not minify it. + * + */ +/* public */ +Clazz._initializingException = false; + +/** + * MethodException will be used as a signal to notify that the method is not + * found in the current clazz hierarchy. + */ +/* private */ +var MethodException = function () { + this.toString = function () { + return "j2s MethodException"; + }; +}; + +var _isNPEExceptionPredicate; + +;(function() { + /* + * sgurin: native exception detection mechanism. Only NullPointerException + * detected and wrapped to java excepions + */ + /** + * private utility method for creating a general regexp that can be used + * later for detecting a certain kind of native exceptions. use with error + * messages like "blabla IDENTIFIER blabla" + * + * @param msg + * String - the error message + * @param spliterName + * String, must be contained once in msg spliterRegex String, a + * string with the regexp literal for identifying the spitter in + * exception further error messages. + */ + // reproduce NullPointerException for knowing how to detect them, and create + // detector function Clazz._isNPEExceptionPredicate + var $$o$$ = null; + + try { + $$o$$.hello(); + } catch (e) { + var _ex_reg = function(msg, spliterName, spliterRegex) { + if(!spliterRegex) + spliterRegex="[^\\s]+"; + var idx = msg.indexOf (spliterName), + str = msg.substring (0, idx) + spliterRegex + msg.substring(idx + spliterName.length), + regexp = new RegExp("^"+str+"$"); + return regexp; + }; + if(/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {// opera throws an + // exception with + // fixed messages + // like "Statement + // on line 23: + // Cannot convert + // undefined or null + // to Object + // Backtrace: + // Line....long + // text... " + var idx1 = e.message.indexOf(":"), idx2 = e.message.indexOf(":", idx1+2); + var _NPEMsgFragment = e.message.substr(idx1+1, idx2-idx1-20); + _isNPEExceptionPredicate = function(e) { return e.message.indexOf(_NPEMsgFragment)!=-1; }; + } else if(navigator.userAgent.toLowerCase().indexOf("webkit")!=-1) { // webkit, + // google + // chrome + // prints + // the + // property + // name + // accessed. + var _exceptionNPERegExp = _ex_reg(e.message, "hello"); + _isNPEExceptionPredicate = function(e) { return _exceptionNPERegExp.test(e.message); }; + } else {// ie, firefox and others print the name of the object accessed: + var _exceptionNPERegExp = _ex_reg(e.message, "$$o$$"); + _isNPEExceptionPredicate = function(e) { return _exceptionNPERegExp.test(e.message); }; + } + }; +})(); + +var getArgs = function(c) { + var s = ""; + var args = c.arguments; + for (var j = 0; j < args.length; j++) { + var sa = (args[j] instanceof Object ? args[j].toString() : "" + args[j]); + if (sa.length > 60) + sa = sa.substring(0, 60) + "..."; + s += " args[" + j + "]=" + sa.replace(/\s+/g," ") + "\n"; + } + return s; +} + +var getSig = function(c, withParams) { + var sig = (c.toString ? c.toString().substring(0, c.toString().indexOf("{")) : ""); + sig = " " + (c.exName ? c.exClazz.__CLASS_NAME__ + "." + c.exName + sig.replace(/function /,""): sig) + "\n"; + if (withParams) + sig += getArgs(c); + return sig; +} + +Clazz._showStack = function(n) { + if (!Clazz._stack) + return; + n && n < Clazz._stack.length || (n = Clazz._stack.length); + if (!n) + return; + for (var i = 0; i < n; i++) { + console.log("" + i + ":" + getSig(Clazz._stack[i], true)); + } + return ""; +} + + +Clazz._getStackTrace = function(n) { + Clazz._stack = []; + // need to limit this, as JavaScript call stack may be recursive + var haven = !!n + haven || (n = 25); + var showParams = (n < 0); + if (showParams) + n = -n; + // updateNode and updateParents cause infinite loop here + var estack = []; + try { + Clazz.failnow(); + } catch (e) { + estack = e.stack.split("\n").reverse(); + estack.pop(); + } + var s = "\n"; + try { + var c = arguments.callee; + for (var i = 0; i < n; i++) { + if (!(c = c.caller)) + break; + var sig = getSig(c, false); + if (s.indexOf(sig) >= 0) { + s += "..."; + break; + } else { + Clazz._stack.push(c); + s += "" + i + sig; + s += estack.pop() + "\n\n"; + } + if (c == c.caller) { + s += "\n"; + break; + } + if (showParams) { + s += getArgs(c); + } + } + } catch(e){} + if (!haven) + s += estack.join("\n"); + if (Clazz._stack.length) { + s += "\nsee Clazz._stack"; + console.log("Clazz.stack = \n" + estack.join("\n")); + console.log("Use Clazz._showStack() or Clazz._showStack(n) to show parameters"); + } + return s; +} + +// //////////////////////////////// package loading /////////////////////// + +/* + * all root packages. e.g. java.*, org.*, com.* + */ +Clazz._allPackage = {}; + + +/** + * Will be used to keep value of whether the class is defined or not. + */ +Clazz.allClasses = {}; + +Clazz.lastPackageName = null; +Clazz.lastPackage = null; + +var unloadedClasses = []; + +/** + * used specifically for declaring prototypes using subclass.prototype = new + * superclass(inheritArgs) without running a constructor or doing field + * preparation. + * + */ +var inheritArgs = new (function(){return {"$J2SNOCREATE$":true}})(); + +// var _prepOnly = new (function(){return {"$J2SPREPONLY$":true}})(); + +/** + * Inherit class with "extends" keyword and also copy those static members. + * Example, as in Java, if NAME is a static member of ClassA, and ClassB extends + * ClassA then ClassB.NAME can be accessed in some ways. + * + * @param clazzThis + * child class to be extended + * @param clazzSuper + * super class which is inherited from + */ +var setSuperclass = function(clazzThis, clazzSuper){ + + clazzThis.superclazz = clazzSuper || Clazz._O; + if (clazzSuper) { + copyStatics(clazzSuper, clazzThis, false); + var p = clazzThis.prototype; + if (clazzSuper == Number) { + clazzThis.prototype = new Number(); + } else { + clazzThis.prototype = new clazzSuper(inheritArgs); + if (clazzSuper == Error) { + var pp = Throwable.prototype; + for (var o in pp) { + if (!pp.exClazz || pp.exClazz != Clazz._O) + clazzThis.prototype[o] = pp[o]; + } + } + } + for (var o in p) { + if (!p[o].exClazz || p[o].exClazz != Clazz._O) + clazzThis.prototype[o] = p[o]; + } + } + clazzThis.prototype.__CLASS_NAME__ = clazzThis.__CLASS_NAME__; +}; + +/** + * Implementation of Java's keyword "implements". As in JavaScript there are on + * "implements" keyword implemented, a property of "implementz" is added to the + * class to record the interfaces the class is implemented. + * + * @param clazzThis + * the class to implement + * @param interfacez + * Array of interfaces + */ +var addInterface = function (clazzThis, interfacez) { + if (interfacez instanceof Array) { + for (var i = 0, n = interfacez.length; i < n; i++) { + var iface = interfacez[i]; + if (iface instanceof Array) { + var cl; + for (var j = 0; j < iface.length; j++) + cl = Clazz.load(iface[j]); + iface = cl; + } + addInterface(clazzThis, iface); + } + return; + } + // not an array... + if (typeof interfacez == "string") { + var str = interfacez; + if (!(interfacez = Clazz.load(interfacez))) { + alert("Missing interface: " + str); + return; + } + } + (clazzThis.implementz || (clazzThis.implementz = [])).push(interfacez); + copyStatics(interfacez, clazzThis, true); +}; + + +// //////////////////////// default package declarations +// //////////////////////// + + +/* + * Check whether given package's classpath is setup or not. Only "java" and + * "org.eclipse.swt" are accepted in argument. + */ +/* private */ +var needPackage = function(pkg) { + // note that false != null and true != null + return (J2S.getGlobal(pkg + ".registered") && !classpathMap["@" + pkg]); +} + + // Make sure that packageClasspath ("java", base, true); + // is called before any _Loader#loadClass is called. + + if (needPackage("java")) + Clazz._Loader.loadPackage("java"); + +Clazz.newPackage("java.io"); +Clazz.newPackage("java.lang.reflect"); +Clazz.newPackage("java.util"); + + +// NOTE: Any changes to this list must also be +// accounted for in net.sf.j2s.core.astvisitors.Java2ScriptVisitor.knownClasses +Clazz.newInterface(java.io,"Externalizable"); +Clazz.newInterface(java.io,"Flushable"); +Clazz.newInterface(java.io,"Serializable"); +Clazz.newInterface(java.lang,"Cloneable"); +Clazz.newInterface(java.lang,"Appendable"); +Clazz.newInterface(java.lang,"Comparable"); +Clazz.newInterface(java.lang,"Runnable"); + + + +;(function(){var P$=java.lang,p$1={},I$=[[0,'java.util.stream.StreamSupport','java.util.Spliterators','java.lang.CharSequence$lambda1','java.lang.CharSequence$lambda2',['java.lang.CharSequence','.LinesSpliterator']]] +,I$0=I$[0],$I$=function(i,n,m){return m?$I$(i)[n].apply(null,m):((i=(I$[i]||(I$[i]=Clazz.load(I$0[i])))),!n&&i.$load$&&Clazz.load(i,2),i)}; + +var C$=Clazz.newInterface(P$, "CharSequence"); + +C$.$classes$=[['LinesSpliterator',25]]; + +Clazz.newMeth(C$, 'lines$S', function (s) { + return $I$(1,"stream$java_util_Spliterator$Z",[Clazz.new_([s.getBytes$()],$I$(5,1).c$$BA), false]); + }, 1); + +;(function(){/*c*/var C$=Clazz.newClass(P$.CharSequence, "LinesSpliterator", function(){ + Clazz.newInstance(this, arguments[0],false,C$); + }, null, 'java.util.Spliterator'); + + C$.$clinit$=2; + + Clazz.newMeth(C$, '$init$', function () { + },1); + + C$.$fields$=[['I',['index','fence'],'O',['value','byte[]']]] + + Clazz.newMeth(C$, 'c$$BA', function (value) { + C$.c$$BA$I$I.apply(this, [value, 0, value.length]); + }, 1); + + Clazz.newMeth(C$, 'c$$BA$I$I', function (value, start, length) { + ;C$.$init$.apply(this); + this.value=value; + this.index=start; + this.fence=start + length; + }, 1); + + Clazz.newMeth(C$, 'indexOfLineSeparator$I', function (start) { + for (var current=start; current < this.fence; current++) { + var ch=this.value[current]; + if (ch == 10 || ch == 13 ) { + return current; + }} + return this.fence; + }, p$1); + + Clazz.newMeth(C$, 'skipLineSeparator$I', function (start) { + if (start < this.fence) { + if (this.value[start] == 13 ) { + var next=start + 1; + if (next < this.fence && this.value[next] == 10 ) { + return next + 1; + }}return start + 1; + }return this.fence; + }, p$1); + + Clazz.newMeth(C$, 'next', function () { + var start=this.index; + var end=p$1.indexOfLineSeparator$I.apply(this, [start]); + this.index=p$1.skipLineSeparator$I.apply(this, [end]); + return String.instantialize(this.value, start, end - start); + }, p$1); + + Clazz.newMeth(C$, 'tryAdvance$java_util_function_Consumer', function (action) { + if (action == null ) { + throw Clazz.new_(Clazz.load('NullPointerException').c$$S,["tryAdvance action missing"]); + }if (this.index != this.fence) { + action.accept$O(p$1.next.apply(this, [])); + return true; + }return false; + }); + + Clazz.newMeth(C$, 'forEachRemaining$java_util_function_Consumer', function (action) { + if (action == null ) { + throw Clazz.new_(Clazz.load('NullPointerException').c$$S,["forEachRemaining action missing"]); + }while (this.index != this.fence){ + action.accept$O(p$1.next.apply(this, [])); + } + }); + + Clazz.newMeth(C$, 'trySplit$', function () { + var half=(this.fence + this.index) >>> 1; + var mid=p$1.skipLineSeparator$I.apply(this, [p$1.indexOfLineSeparator$I.apply(this, [half])]); + if (mid < this.fence) { + var start=this.index; + this.index=mid; + return Clazz.new_(C$.c$$BA$I$I,[this.value, start, mid - start]); + }return null; + }); + + Clazz.newMeth(C$, 'estimateSize$', function () { + return this.fence - this.index + 1; + }); + + Clazz.newMeth(C$, 'characteristics$', function () { + return 1296; + }); + + Clazz.newMeth(C$); + })() + +C$.$defaults$ = function(C$){ + +Clazz.newMeth(C$, 'chars$', function () { +return $I$(1).intStream$java_util_function_Supplier$I$Z(((P$.CharSequence$lambda1|| +(function(){var C$=Clazz.newClass(P$, "CharSequence$lambda1", function(){Clazz.newInstance(this, arguments[0],1,C$);}, null, 'java.util.function.Supplier', 1); + +C$.$clinit$ = 1; + +Clazz.newMeth(C$, '$init$', function () {}, 1); +/* lambda_E */ +Clazz.newMeth(C$, 'get$', function () { return($I$(2).spliterator$java_util_PrimitiveIterator_OfInt$J$I(Clazz.new_(CharSequence$1CharIterator.$init$, [this, null]), this.b$['CharSequence'].length$(), 16));}); +})() +), Clazz.new_($I$(3).$init$, [this, null])), 16464, false); +}); + +Clazz.newMeth(C$, 'codePoints$', function () { +return $I$(1).intStream$java_util_function_Supplier$I$Z(((P$.CharSequence$lambda2|| +(function(){var C$=Clazz.newClass(P$, "CharSequence$lambda2", function(){Clazz.newInstance(this, arguments[0],1,C$);}, null, 'java.util.function.Supplier', 1); + +C$.$clinit$ = 1; + +Clazz.newMeth(C$, '$init$', function () { +}, 1); +/* lambda_E */ +Clazz.newMeth(C$, 'get$', function () { return($I$(2).spliteratorUnknownSize$java_util_PrimitiveIterator_OfInt$I(Clazz.new_(CharSequence$1CodePointIterator.$init$, [this, null]), 16));}); +})() +), Clazz.new_($I$(4).$init$, [this, null])), 16, false); +}); +};; +(function(){var C$=Clazz.newClass(P$, "CharSequence$1CharIterator", function(){ +Clazz.newInstance(this, arguments[0],true,C$); +}, null, [['java.util.PrimitiveIterator','java.util.PrimitiveIterator.OfInt']], 2); + +C$.$clinit$ = 1; + +Clazz.newMeth(C$, '$init0$', function () { +var c;if((c = C$.superclazz) && (c = c.$init0$))c.apply(this); +this.cur = 0; +}, 1); + +Clazz.newMeth(C$, '$init$', function () { +this.cur = 0; +}, 1); + +Clazz.newMeth(C$, 'hasNext$', function () { +return this.cur < this.b$['CharSequence'].length$(); +}); + +Clazz.newMeth(C$, 'nextInt$', function () { +if (this.hasNext$()) { +return this.b$['CharSequence'].charAt$I.apply(this.b$['CharSequence'], [this.cur++]).$c(); +} else { +throw Clazz.new_(Clazz.load('java.util.NoSuchElementException')); +}}); + +Clazz.newMeth(C$, ['forEachRemaining$java_util_function_IntConsumer','forEachRemaining$O'], function (block) { +for (; this.cur < this.b$['CharSequence'].length$(); this.cur++) { +block.accept$I(this.b$['CharSequence'].charAt$I(this.cur).$c()); +} +}); + +Clazz.newMeth(C$); +})() +; +; +(function(){var C$=Clazz.newClass(P$, "CharSequence$1CodePointIterator", function(){ +Clazz.newInstance(this, arguments[0],true,C$); +}, null, [['java.util.PrimitiveIterator','java.util.PrimitiveIterator.OfInt']], 2); + +C$.$clinit$ = 1; + +Clazz.newMeth(C$, '$init0$', function () { +var c;if((c = C$.superclazz) && (c = c.$init0$))c.apply(this); +this.cur = 0; +}, 1); + +Clazz.newMeth(C$, '$init$', function () { +this.cur = 0; +}, 1); + +Clazz.newMeth(C$, ['forEachRemaining$java_util_function_IntConsumer','forEachRemaining$O'], function (block) { +var length = this.b$['CharSequence'].length$(); +var i = this.cur; +try { +while (i < length){ +var c1 = this.b$['CharSequence'].charAt$I(i++); +if (!Character.isHighSurrogate$C(c1) || i >= length ) { +block.accept$I(c1.$c()); +} else { +var c2 = this.b$['CharSequence'].charAt$I(i); +if (Character.isLowSurrogate$C(c2)) { +i++; +block.accept$I(Character.toCodePoint$C$C(c1, c2)); +} else { +block.accept$I(c1.$c()); +}}} +} finally { +this.cur=i; +} +}); + +Clazz.newMeth(C$, 'hasNext$', function () { +return this.cur < this.b$['CharSequence'].length$(); +}); + +Clazz.newMeth(C$, 'nextInt$', function () { +var length = this.b$['CharSequence'].length$(); +if (this.cur >= length) { +throw Clazz.new_(Clazz.load('java.util.NoSuchElementException')); +}var c1 = this.b$['CharSequence'].charAt$I.apply(this.b$['CharSequence'], [this.cur++]); +if (Character.isHighSurrogate$C(c1) && this.cur < length ) { +var c2 = this.b$['CharSequence'].charAt$I.apply(this.b$['CharSequence'], [this.cur]); +if (Character.isLowSurrogate$C(c2)) { +this.cur++; +return Character.toCodePoint$C$C(c1, c2); +}}return c1.$c(); +}); + +Clazz.newMeth(C$); +})() +})(); + +// ////// (int) conversions ////////// + +// deprecated +Clazz.doubleToInt = Clazz.floatToInt = function (x) { + // asm.js-style conversion + return x|0; +}; + + +// /////////////////////////////// Array additions +// ////////////////////////////// +// +// BH: these are necessary for integer processing, especially +// +// + +var arraySlice = function(istart, iend) { + // could be Safari or could be fake + istart || (istart = 0); + iend || (iend = this.length); + var b = new this.constructor(this.buffer.slice(istart * this.__BYTESIZE, iend * this.__BYTESIZE)); + b.__BYTESIZE = a.__BYTESIZE; + b.__ARRAYTYPE = a.__ARRAYTYPE; +}; + +var setAType = function (IntXArray, nBytes, atype) { + if (!IntXArray) + alert("SwingJS will not work in this Browser") + if (!IntXArray.prototype.sort) + IntXArray.prototype.sort = Array.prototype.sort + if (!IntXArray.prototype.slice) + IntXArray.prototype.slice = function() {return arraySlice.apply(this, arguments)}; + IntXArray.prototype.clone$ = function() { + return copyArrayProps(this, this.slice()); + }; +} + +setAType(Int8Array, 1, "BA"); +setAType(Int16Array, 2, "HA"); +setAType(Int32Array, 4, "IA"); +setAType(Float64Array, 8, "DA"); + +java.lang.Object = Clazz._O; + +// ////////////////////////// hotspot and unloading //////////////////// + +// not implemented in SwingJS + +// ////////////////////////// class loader ///////////////////////////// + +/******************************************************************************* + * Copyright (c) 2007 java2script.org and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: Zhou Renjian - initial API and implementation + ******************************************************************************/ +/******************************************************************************* + * @author zhou renjian + * @create July 10, 2006 + ******************************************************************************/ + +Clazz._Loader = function () {}; + +;(function(Clazz, _Loader) { + +// The class loader is always accessed through Class. +// See Class.java for implementations of the methods of java.lang.ClassLoader +// such as getSystemResource and getResource + +java.lang.ClassLoader = _Loader; +// BH windows-level only because it's java.lang +ClassLoader = _Loader; + + +_Loader.__CLASS_NAME__ = "ClassLoader"; + +Clazz.allClasses["java.lang.ClassLoader"] = _Loader; +_Loader.sysLoader = null; + +_Loader.getSystemClassLoader$ = function() { + return (_Loader.sysLoader ? _Loader.sysLoader : (_Loader.sysLoader = new Class().getClassLoader$())); +}; + + +var assertionStatus = {}; + +_Loader.getSystemResource$S = function(name) { + return _Loader.getSystemClassLoader$().getResource$(name); +} + +_Loader.getSystemResources$S = function(name) { + return _Loader.getSystemClassLoader$().getResources$(name); +} + +_Loader.getSystemResourceAsStream$S = function(name) { + return _Loader.getSystemClassLoader$().getResourceAsStream$(name); +} + +_Loader.getClassAssertionStatus$ = function(clazz) { // harmony + var ret; + var clazzName = clazz.__CLASS_NAME__ + "."; + for (var c in assertionStatus) { + if (clazzName.indexOf(c) == 0) { + ret = assertionStatus[c]; + break; + } + } + return (ret === false ? false : ret || Clazz.defaultAssertionStatus); +} + +_Loader.prototype.hashCode$ = function(){return 1}; + + +_Loader.prototype.getPackage$S = function (name) { return Clazz.new_(Clazz.load("java.lang.Package").c$$S$O, [name, Clazz._allPackage[name]]); }; + + +_Loader.prototype.setDefaultAssertionStatus$Z = function(tf) { + Clazz.defaultAssertionStatus = tf; +}; + +_Loader.prototype.clearAssertionStatus$ = function() { + assertionStatus = {}; + Clazz.defaultAssertionStatus = false; +} + +_Loader.prototype.setClassAssertionStatus$S$Z = _Loader.prototype.setPackageAssertionStatus$S$Z = function(clazzName, tf) { + Clazz.allClasses[clazzName] && (Clazz.allClasses[clazzName].$_ASSERT_ENABLED_ = tf); + assertionStatus[clazzName + "."] = tf; +}; + +_Loader.prototype.loadClass$S = function(clazzName) { + return Clazz.forName(clazzName); +} + + +_Loader._checkLoad = J2S._checkLoad; + +_Loader._TODO = []; + +_Loader.doTODO = function() { + while (_Loader._TODO.length) { + var f = _Loader._TODO.shift(); + f(); + } +} + +var loaders = []; + +/* public */ +_Loader.requireLoaderByBase = function (base) { + for (var i = 0; i < loaders.length; i++) { + if (loaders[i].$_$base == base) { + return loaders[i]; + } + } + var loader = new _Loader (); + loader.$_$base = base; + loaders.push(loader); + return loader; +}; + +/** + * + * Try to be compatible with Clazz system. In original design _Loader and Clazz + * are independent! -- zhourenjian @ December 23, 2006 + */ +var isClassdefined; +var definedClasses; + +if (self.Clazz && Clazz._isClassDefined) { + isClassDefined = Clazz._isClassDefined; +} else { + definedClasses = {}; + isClassDefined = function (clazzName) { + return definedClasses[clazzName] == true; + }; +} + +/* private */ +var classpathMap = Clazz.classpathMap = {}; + +/* public */ +_Loader.loadPackageClasspath = function (pkg, base, isIndex, fSuccess, mode, pt) { + var map = classpathMap; + mode || (mode = 0); + fSuccess || (fSuccess = null); + pt || (pt = 0); + + /* + * In some situation, maybe, _Loader.packageClasspath ("java", ..., true); + * is called after other _Loader#packageClasspath, e.g. + * _Loader.packageClasspath ("org.eclipse.swt", "...", true); + * _Loader.packageClasspath ("java", "...", true); which is not + * recommended. But _Loader should try to adjust orders which requires + * "java" to be declared before normal _Loader #packageClasspath call before + * that line! And later that line should never initialize "java/package.js" + * again! + */ + var isPkgDeclared = (isIndex && map["@" + pkg]); + if (mode == 0 && isIndex && !map["@java"] && pkg.indexOf ("java") != 0 && needPackage("java")) { + _Loader.loadPackage("java", fSuccess ? function(_package){_Loader.loadPackageClasspath(pkg, base, isIndex, fSuccess, 1)} : null); + if (fSuccess) + return; + } + if (pkg instanceof Array) { + unwrapArray(pkg); + if (fSuccess) { + if (pt < pkg.length) + _Loader.loadPackageClasspath(pkg[pt], base, isIndex, function(_loadPackageClassPath){_Loader.loadPackageClasspath(pkg, base, isIndex, fSuccess, 1, pt + 1)}, 1); + else + fSuccess(); + } else { + for (var i = 0; i < pkg.length; i++) + _Loader.loadPackageClasspath(pkg[i], base, isIndex, null); + } + return; + } + switch (pkg) { + case "java.*": + pkg = "java"; + // fall through + case "java": + if (base) { + // support ajax for default + var key = "@net.sf.j2s.ajax"; + if (!map[key]) + map[key] = base; + key = "@net.sf.j2s"; + if (!map[key]) + map[key] = base; + } + break; + case "swt": + pkg = "org.eclipse.swt"; + break; + case "ajax": + pkg = "net.sf.j2s.ajax"; + break; + case "j2s": + pkg = "net.sf.j2s"; + break; + default: + if (pkg.lastIndexOf(".*") == pkg.length - 2) + pkg = pkg.substring(0, pkg.length - 2); + break; + } + if (base) // critical for multiple applets + map["@" + pkg] = base; + if (isIndex && !isPkgDeclared && !J2S.getGlobal(pkg + ".registered")) { + // the package idea has been deprecated + // the only package is core/package.js + if (pkg == "java") + pkg = (J2S.Globals["core.registered"] ? null : "core") // JSmol -- moves java/package.js to core/package.js + // not really asynchronous + if (pkg) + _Loader.loadClass(pkg + ".package", null, true, true, 1); + } + fSuccess && fSuccess(); +}; + + + +/** + * BH: allows user/developer to load classes even though wrapping and Google + * Closure Compiler has not been run on the class. + * + * Does initialize fully. + * + * + * + */ +Clazz.loadClass = function (name, onLoaded, async) { + if (!self.Class) { + Class = Clazz; + Class.forName = Clazz.forName; + // maybe more here + } + if (!name) + return null; + if (!async) + return Clazz._4Name(name, null, null, true, true); + + _Loader.loadClass(name, function() { + var cl = Clazz._getDeclared(name); + onLoaded(cl && Clazz._initClass(cl, 1, 1)); + }, true, async, 1); + return true; + +} + +/** + * Load the given class ant its related classes. + */ +/* public */ +_Loader.loadClass = _Loader.prototype.loadClass = function (name, onLoaded, forced, async, mode) { + + mode || (mode = 0); // BH: not implemented + (async == null) && (async = false); + + if (typeof onLoaded == "boolean") + return evalType(name); + + // System.out.println("loadClass " + name) + var path = _Loader.getClasspathFor(name); + lastLoaded = name; + Clazz.loadScript(path, name); + } + +/* private */ +_Loader.loadPackage = function(pkg, fSuccess) { + fSuccess || (fSuccess = null); + J2S.setGlobal(pkg + ".registered", false); + _Loader.loadPackageClasspath(pkg, + (_Loader.J2SLibBase || (_Loader.J2SLibBase = (_Loader.getJ2SLibBase() || "j2s/"))), + true, fSuccess); +}; + +/** + * Register classes to a given *.z.js path, so only a single *.z.js is loaded + * for all those classes. + */ +/* public */ +_Loader.jarClasspath = function (jar, clazzes) { + if (!(clazzes instanceof Array)) + clazzes = [clazzes]; + unwrapArray(clazzes); + if (J2S._debugCore) + jar = jar.replace(/\.z\./, ".") + for (var i = clazzes.length; --i >= 0;) { + clazzes[i] = clazzes[i].replace(/\//g,".").replace(/\.js$/g,"") + classpathMap["#" + clazzes[i]] = jar; + } + classpathMap["$" + jar] = clazzes; +}; + +_Loader.setClasspathFor = function(clazzes) { +// Clazz._Loader.setClasspathFor("edu/colorado/phet/idealgas/model/PressureSensingBox.ChangeListener"); + if (!(clazzes instanceof Array)) + clazzes = [clazzes]; + for (var i = clazzes.length; --i >= 0;) { + var path = clazzes[i]; + var jar = _Loader.getJ2SLibBase() + path.split(".")[0]+".js"; + path = path.replace(/\//g,"."); + classpathMap["#" + path] = jar; + var a = classpathMap["$" + jar] || (classpathMap["$" + jar] = []); + a.push(path); + } +} + + +/** + * Usually be used in .../package.js. All given packages will be registered to + * the same classpath of given prefix package. + */ +/* public */ +_Loader.registerPackages = function (prefix, pkgs) { + // _Loader.checkInteractive (); + var base = _Loader.getClasspathFor(prefix + ".*", true); + for (var i = 0; i < pkgs.length; i++) { + Clazz.newPackage(prefix + "." + pkgs[i]); + _Loader.loadPackageClasspath(prefix + "." + pkgs[i], base); + } + +}; + +/** + * Return the *.js path of the given class. Maybe the class is contained in a + * *.z.js jar file. + * + * @param clazz + * Given class that the path is to be calculated for. May be + * java.package, or java.lang.String + * @param forRoot + * Optional argument, if true, the return path will be root of the + * given classs' package root path. + * @param ext + * Optional argument, if given, it will replace the default ".js" + * extension. + */ +/* public */ +_Loader.getClasspathFor = function (clazz, forRoot, ext) { + var path = classpathMap["#" + clazz]; + if (!path || forRoot || ext) { + var base; + var idx; + if (path) { + clazz = clazz.replace(/\./g, "/"); + if ((idx = path.lastIndexOf(clazz)) >= 0 + || (idx = clazz.lastIndexOf("/")) >= 0 + && (idx = path.lastIndexOf(clazz.substring(0, idx))) >= 0) + base = path.substring(0, idx); + } else { + idx = clazz.length + 2; + while ((idx = clazz.lastIndexOf(".", idx - 2)) >= 0) + if ((base = classpathMap["@" + clazz.substring(0, idx)])) + break; + if (!forRoot) + clazz = clazz.replace (/\./g, "/"); + } + if (base == null) { + var bins = "binaryFolders"; + base = (Clazz[bins] && Clazz[bins].length ? Clazz[bins][0] + : _Loader[bins] && _Loader[bins].length ? _Loader[bins][0] + : "j2s"); + } + path = (base.lastIndexOf("/") == base.length - 1 ? base : base + "/") + (forRoot ? "" + : clazz.lastIndexOf("/*") == clazz.length - 2 ? clazz.substring(0, idx + 1) + : clazz + (!ext ? ".js" : ext.charAt(0) != '.' ? "." + ext : ext)); + } + return path;// _Loader.multipleSites(path); +}; + +/** + * page-customizable callbacks + * + */ +/* public */ +_Loader.onScriptLoading = function (file){J2S._verbose && System.out.println("Classloader.onscriptloading " + file);}; + +/* public */ +_Loader.onScriptLoaded = function (file, isError, data){}; + +/* public */ +_Loader.onScriptInitialized = function (file){}; // not implemented + +/* public */ +_Loader.onScriptCompleted = function (file){}; // not implemented + +/* public */ +_Loader.onClassUnloaded = function (clazz){}; // not implemented + +/* private */ +var isClassExcluded = function (clazz) { + return excludeClassMap["@" + clazz]; +}; + +/* Used to keep ignored classes */ +/* private */ +var excludeClassMap = {}; + +Clazz._lastEvalError = null; + +/* private */ +var evaluate = function(file, js) { + try { + if (J2S._useEval) + eval(js + ";//# sourceURL="+file) + else + new Function((J2S._strict ? '"use strict";':'')+js + ";//# sourceURL="+file)(); + } catch (e) { + var s = "[Java2Script] " + ( + file.indexOf("/core/package.js") >= 0 + ? file + " not found (ignored)" + : "The required class file \n\n" + file + (js.indexOf("data: no") ? + "\nwas not found.\n" + : "\ncould not be loaded. Script error: " + e.message + " \n\ndata:\n\n" + js) + "\n\n" + + (e.stack ? e.stack : Clazz._getStackTrace())); + Clazz._lastEvalError = s; + if (Clazz._isQuietLoad) + return; + Clazz.alert(s); + throw e; + } +} + +Clazz._initClass = function(c,clinit,statics,objThis) { + var f; + return clinit && (f=c.$clinit$) && (f === 1 || f === 2 ? Clazz.load(c,1) : f && typeof f == "function"? f() : 0), + statics && c.$load$ && Clazz.load(c, 2), + objThis && (f=c.$init0$) && f.apply(objThis), + c; +} + +Clazz._getClassCount = function() { + var n = 0; + for (var c in Clazz.allClasses){n++}; + return n; +} + +Clazz._4Name = function(clazzName, applet, state, asClazz, initialize, isQuiet) { + // applet and state always null in SwingJS + var cl; + if (clazzName.indexOf("[") == 0) { + cl = getArrayClass(clazzName); + return (asClazz ? cl.$clazz$ : cl); + } + if (clazzName.indexOf(".") < 0) + clazzName = "java.lang." + clazzName; + var isok = Clazz._isClassDefined(clazzName); + if (isok && asClazz) { + return Clazz._initClass(Clazz.allClasses[clazzName],1,1); + } + if (!isok) { + var name2 = null; + var pt = clazzName.lastIndexOf("$"); + if (pt >= 0) { + // BH we allow Java's java.swing.JTable.$BooleanRenderer as a stand-in + // for java.swing.JTable.BooleanRenderer + // when the static nested class is created using declareType + name2 = clazzName.replace(/\$/g,"."); + if (Clazz._isClassDefined(name2)) { + clazzName = name2; + } else { + cl = Clazz._4Name(clazzName.substring(0, pt), applet, state, true, initialize, isQuiet); + cl && (clazzName = name2); + name2 = null; + } + } + if (name2 == null) { + var f = (J2S._isAsync && applet ? applet._restoreState(clazzName, state) : null); + if (f == 1) + return null; // must be already being created + if (_Loader.setLoadingMode(f ? _Loader.MODE_SCRIPT : "xhr.sync")) { + _Loader.loadClass(clazzName, f, false, true, 1); + return null; // this will surely throw an error, but that is OK + } + // alert ("Using Java reflection: " + clazzName + " for " + applet._id + + // " \n"+ Clazz._getStackTrace()); + _Loader.loadClass(clazzName); + } + } + cl = evalType(clazzName); + if (!cl){ + if (isQuiet || Clazz._isQuietLoad) + return null; + alert(clazzName + " could not be loaded"); + doDebugger(); + } + Clazz._setDeclared(clazzName, cl); + // note triple== here + Clazz._initClass(cl, initialize !== false, initialize === true); + return (asClazz ? cl : Clazz.getClass(cl)); +}; + +// BH: possibly useful for debugging +Clazz.currentPath= ""; + + +Clazz.loadScript = function(file, nameForList) { + + Clazz.currentPath = file; + // loadedScripts[file] = true; + // also remove from queue + // removeArrayItem(classQueue, file); + + var file0 = file; + if (J2S._nozcore) { + file = file.replace(/\.z\.js/,".js"); + } + var data = ""; + try{ + _Loader.onScriptLoading(file); + data = J2S.getFileData(file); + evaluate(file, data); + if (nameForList) + Clazz.ClassFilesLoaded.push(nameForList.replace(/\./g,"/") + ".js"); + _Loader.onScriptLoaded(file, null, data); + }catch(e) { + Clazz.ClassFilesLoaded.pop(); + _Loader.onScriptLoaded(file, e, data); + var s = ""+e; + if (data && data.indexOf("Error") >= 0) + s = data; + if (s.indexOf("missing ] after element list")>= 0) + s = "File not found"; + if (file.indexOf("/j2s/core/") >= 0) { + System.out.println(s + " loading " + file); + } else { + alert(s + " loading file " + file + "\n\n" + e.stack); + doDebugger() + + } + } +} + +/** + * Used in package /* public + */ +var runtimeKeyClass = _Loader.runtimeKeyClass = "java.lang.String"; + +/* private */ +var J2sLibBase; + +/** + * Return J2SLib base path from existed SCRIPT src attribute. + */ +/* public */ +_Loader.getJ2SLibBase = function () { + var o = J2S.getGlobal("j2s.lib"); + return (o ? o.base + (o.alias == "." ? "" : (o.alias ? o.alias : (o.version ? o.version : "1.0.0")) + "/") : null); +}; + +/** + * Indicate whether _Loader is loading script synchronously or asynchronously. + */ +/* private */ +var isAsynchronousLoading = true; + +/* private */ +var isUsingXMLHttpRequest = false; + +/* private */ +var loadingTimeLag = -1; + +_Loader.MODE_SCRIPT = 4; +_Loader.MODE_XHR = 2; +_Loader.MODE_SYNC = 1; + +// Integer mode: Script 4; XHR 2; SYNC bit 1; +// async is currently ignored + +/* public */ +_Loader.setLoadingMode = function (mode, timeLag) { + var async = true; + var ajax = true; + if (typeof mode == "string") { + mode = mode.toLowerCase(); + if (mode.indexOf("script") >= 0) + ajax = false; + else + async = (mode.indexOf("async") >=0); + async = false; // BH + } else { + if (mode & _Loader.MODE_SCRIPT) + ajax = false; + else + async = !(mode & _Loader.MODE_SYNC); + } + isUsingXMLHttpRequest = ajax; // ignored + isAsynchronousLoading = async; // ignored + loadingTimeLag = (async && timeLag >= 0 ? timeLag: -1); // ignored + return async; // will be false +}; + +/* + * Load those key *.z.js. This *.z.js will be surely loaded before other queued + * *.js. + */ +/* public */ +_Loader.loadZJar = function (zjarPath, keyClass) { +// used only by package.js for core.z.js + var f = null; + var isArr = (keyClass instanceof Array); + if (isArr) + keyClass = keyClass[keyClass.length - 1]; +// else + // f = (keyClass == runtimeKeyClass ? runtimeLoaded : null); + _Loader.jarClasspath(zjarPath, isArr ? keyClass : [keyClass]); + // BH note: runtimeKeyClass is java.lang.String + _Loader.loadClass(keyClass, null, true); +}; + +Clazz.binaryFolders = _Loader.binaryFolders = [ _Loader.getJ2SLibBase() ]; + +})(Clazz, Clazz._Loader); + +// } +/******************************************************************************* + * Copyright (c) 2007 java2script.org and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: Zhou Renjian - initial API and implementation + ******************************************************************************/ +/******************************************************************************* + * @author zhou renjian + * @create Jan 11, 2007 + ******************************************************************************/ + +Clazz._LoaderProgressMonitor = {}; + +;(function(CLPM, J2S) { + +var fadeOutTimer = null; +var fadeAlpha = 0; +var monitorEl = null; +var lastScrollTop = 0; +var bindingParent = null; + +CLPM.DEFAULT_OPACITY = (J2S && J2S._j2sLoadMonitorOpacity ? J2S._j2sLoadMonitorOpacity : 55); + +/* public */ +CLPM.hideMonitor = function () { + monitorEl.style.display = "none"; +} + +/* public */ +CLPM.showStatus = function (msg, fading) { + if (!monitorEl) { + createHandle (); + if (!attached) { + attached = true; + // Clazz.addEvent (window, "unload", cleanup); + // window.attachEvent ("onunload", cleanup); + } + } + clearChildren(monitorEl); + if (msg == null) { + if (fading) { + fadeOut(); + } else { + CLPM.hideMonitor(); + } + return; + } + + monitorEl.appendChild(document.createTextNode ("" + msg)); + if (monitorEl.style.display == "none") { + monitorEl.style.display = ""; + } + setAlpha(CLPM.DEFAULT_OPACITY); + var offTop = getFixedOffsetTop(); + if (lastScrollTop != offTop) { + lastScrollTop = offTop; + monitorEl.style.bottom = (lastScrollTop + 4) + "px"; + } + if (fading) { + fadeOut(); + } +}; + +/* private static */ +var clearChildren = function (el) { + if (!el) + return; + for (var i = el.childNodes.length; --i >= 0;) { + var child = el.childNodes[i]; + if (!child) + continue; + if (child.childNodes && child.childNodes.length) + clearChildren (child); + try { + el.removeChild (child); + } catch (e) {}; + } +}; +/* private */ +var setAlpha = function (alpha) { + if (fadeOutTimer && alpha == CLPM.DEFAULT_OPACITY) { + window.clearTimeout (fadeOutTimer); + fadeOutTimer = null; + } + fadeAlpha = alpha; + // monitorEl.style.filter = "Alpha(Opacity=" + alpha + ")"; + monitorEl.style.opacity = alpha / 100.0; +}; +/* private */ +var hidingOnMouseOver = function () { + CLPM.hideMonitor(); +}; + +/* private */ +var attached = false; +/* private */ +var cleanup = function () { + // if (monitorEl) { + // monitorEl.onmouseover = null; + // } + monitorEl = null; + bindingParent = null; + // Clazz.removeEvent (window, "unload", cleanup); + // window.detachEvent ("onunload", cleanup); + attached = false; +}; +/* private */ +var createHandle = function () { + var div = document.createElement ("DIV"); + div.id = "_Loader-status"; + div.style.cssText = "position:absolute;bottom:4px;left:4px;padding:2px 8px;" + + "z-index:" + (J2S.getGlobal("j2s.lib").monitorZIndex || 10000) + ";background-color:#8e0000;color:yellow;" + + "font-family:Arial, sans-serif;font-size:10pt;white-space:nowrap;"; + div.onmouseover = hidingOnMouseOver; + monitorEl = div; + if (bindingParent) { + bindingParent.appendChild(div); + } else { + document.body.appendChild(div); + } + return div; +}; +/* private */ + +var fadeOut = function () { + if (monitorEl.style.display == "none") return; + if (fadeAlpha == CLPM.DEFAULT_OPACITY) { + fadeOutTimer = window.setTimeout(function () { + fadeOut(); + }, 750); + fadeAlpha -= 5; + } else if (fadeAlpha - 10 >= 0) { + setAlpha(fadeAlpha - 10); + fadeOutTimer = window.setTimeout(function () { + fadeOut(); + }, 40); + } else { + monitorEl.style.display = "none"; + } +}; +/* private */ +var getFixedOffsetTop = function (){ + if (bindingParent) { + var b = bindingParent; + return b.scrollTop; + } + var dua = navigator.userAgent; + var b = document.body; + var p = b.parentNode; + var pcHeight = p.clientHeight; + var bcScrollTop = b.scrollTop + b.offsetTop; + var pcScrollTop = p.scrollTop + p.offsetTop; + return (dua.indexOf("Opera") < 0 && document.all ? (pcHeight == 0 ? bcScrollTop : pcScrollTop) + : dua.indexOf("Gecko") < 0 ? (pcHeight == p.offsetHeight + && pcHeight == p.scrollHeight ? bcScrollTop : pcScrollTop) : bcScrollTop); +}; + +// if (window["ClazzLoader"]) { +// _Loader.onScriptLoading = function(file) { +// CLPM.showStatus("Loading " + file + "..."); +// }; +// _Loader.onScriptLoaded = function(file, isError) { +// CLPM.showStatus(file + (isError ? " loading failed." : " loaded."), true); +// }; +// _Loader.onGlobalLoaded = function(file) { +// CLPM.showStatus("Application loaded.", true); +// }; +// _Loader.onClassUnloaded = function(clazz) { +// CLPM.showStatus("Class " + clazz + " is unloaded.", true); +// }; +// } + +})(Clazz._LoaderProgressMonitor, J2S); + +/******************************************************************************* + * Copyright (c) 2007 java2script.org and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: Zhou Renjian - initial API and implementation + ******************************************************************************/ +/******************************************************************************* + * @author zhou renjian + * @create Nov 5, 2005 + ******************************************************************************/ + +Clazz.Console = {}; + +;(function(Con) { +/** + * Setting maxTotalLines to -1 will not limit the console result + */ +Con.maxTotalLines = 10000; + +Con.setMaxTotalLines = function (lines) { + Con.maxTotalLines = (lines > 0 ? lines : 999999); +} + +Con.maxLatency = 40; + +Con.setMaxLatency = function (latency) { + Con.maxLatency = (latency > 0 ? latency : 40); +}; + +Con.pinning = false; + +Con.enablePinning = function (enabled) { + Con.pinning = enabled; +}; + +Con.linesCount = 0; + +Con.metLineBreak = false; + + +/* + * Give an extension point so external script can create and bind the console + * themself. + * + */ +Con.createConsoleWindow = function (parentEl) { + var console = document.createElement ("DIV"); + console.style.cssText = "font-family:monospace, Arial, sans-serif;"; + document.body.appendChild (console); + return console; +}; + +var c160 = String.fromCharCode(160); // nbsp; +c160 += c160+c160+c160; + +Con.consoleOutput = function (s, color) { + var con = consoleDiv; + if (con && typeof con == "string") + con = consoleDiv = document.getElementById(con) + if (!con) { + return false; // BH this just means we have turned off all console action + } + if (con == window.console) { + if (color == "red") + con.error(s); + else + con.log(s); + return; + } + + if (s == '\0') { + con.innerHTML = ""; + con.lineCount = 0; + return; + } + + if (Con.linesCount > Con.maxTotalLines) { + for (var i = 0; i < 1000; i++) { + if (con && con.childNodes.length > 0) { + con.removeChild(con.childNodes[0]); + } + } + Con.linesCount = Con.maxTotalLines - 1000; + } + + var willMeetLineBreak = false; + s = (typeof s == "undefined" ? "" : s == null ? "null" : "" + s); + s = s.replace (/\t/g, c160); + if (s.length > 0) + switch (s.charAt(s.length - 1)) { + case '\n': + case '\r': + s = (s.length > 1 ? s.substring (0, s.length - (s.charAt(s.length - 2) == '\r' ? 2 : 1)) : ""); + willMeetLineBreak = true; + break; + } + + var lines = null; + s = s.replace (/\t/g, c160); + lines = s.split(/\r\n|\r|\n/g); + for (var i = 0, last = lines.length - 1; i <= last; i++) { + var lastLineEl = null; + if (Con.metLineBreak || Con.linesCount == 0 + || con.childNodes.length < 1) { + lastLineEl = document.createElement ("DIV"); + con.appendChild (lastLineEl); + lastLineEl.style.whiteSpace = "nowrap"; + Con.linesCount++; + } else { + try { + lastLineEl = con.childNodes[con.childNodes.length - 1]; + } catch (e) { + lastLineEl = document.createElement ("DIV"); + con.appendChild (lastLineEl); + lastLineEl.style.whiteSpace = "nowrap"; + Con.linesCount++; + } + } + var el = document.createElement ("SPAN"); + lastLineEl.appendChild (el); + el.style.whiteSpace = "nowrap"; + if (color) + el.style.color = color; + var l = lines[i] + if (l.length == 0) + l = c160; + el.appendChild(document.createTextNode(l)); + if (!Con.pinning) + con.scrollTop += 100; + Con.metLineBreak = (i != last || willMeetLineBreak); + } + + var cssClazzName = con.parentNode.className; + if (!Con.pinning && cssClazzName + && cssClazzName.indexOf ("composite") != -1) { + con.parentNode.scrollTop = con.parentNode.scrollHeight; + } + Con.lastOutputTime = new Date ().getTime (); +}; + +/* + * Clear all contents inside the console. + */ +/* public */ +Con.clear = function () { + try { + Con.metLineBreak = true; + var console = consoleDiv; + if (console == window.console || !console || typeof console == "string" && !(console = document.getElementById (console))) + return; + console.innerHTML = ""; + Con.linesCount = 0; + } catch(e){}; +}; + +/* public */ +Clazz.alert = function (s) { + Con.consoleOutput (s + "\r\n"); +}; + +})(Clazz.Console); + +var getURIField = function(name, def) { + try { + var ref = document.location.href.toLowerCase(); + var i = ref.indexOf(name.toLowerCase() + "="); + if (i >= 0) + def = (document.location.href + "&").substring( + i + name.length + 1).split("&")[0]; + } catch (e) { + } finally { + return def; + } +} + +Clazz._setDeclared("java.lang.System", java.lang.System = System = {}); +;(function(C$){ + +C$.lineSeparator = "\n"; +C$.props = null; + +C$.setIn$java_io_InputStream=function ($in) { + C$.$in=$in; +} + +C$.setOut$java_io_PrintStream=function (out) { + C$.out=out; + out.println = out.println$S; + out.print = out.print$S; +} + +C$.setErr$java_io_PrintStream=function (err) { + C$.err=err; + err.println = err.println$S; + err.print = err.print$S; +} + +C$.console$=function () { + return null; +} + +C$.inheritedChannel$=function () { + return null; +} + +C$.setSecurityManager$SecurityManager=function (s) { +} + +C$.getSecurityManager$=function () { + return null; +} + +C$.currentTimeMillis$=function () { + { + return new Date().getTime(); +} +} + +C$.nanoTime$=function () { + { + return Math.round(window.performance.now() * 1e6); +} +} + +C$.arraycopy$O$I$O$I$I=function (src, srcPos, dest, destPos, length) { + + if (src !== dest || srcPos > destPos) { for (var i = length; --i >= 0;) dest[destPos++] = src[srcPos++]; } else { destPos += length; srcPos += length; for (var i = length; --i >= 0;) src[--destPos] = src[--srcPos]; } +} + +C$.identityHashCode$O=function (x, offset) { + return x==null ? 0 : x._$hashcode || (typeof x == "string" ? x.hashCode$() : (x._$hashcode = ++hashCode + (offset || 0))); +} + +C$.getProperties$=function () { + if (C$.props == null ) + C$.props=Clazz.new_("java.util.Properties"); + for (a in sysprops) + C$.props.put$O$O(a, sysprops[a]); + return C$.props; +} + +C$.lineSeparator$=function () { + return C$.lineSeparator; +} + +C$.setProperties$java_util_Properties=function (props) { + C$.props = props; +} + +C$.getProperty$S=function (key) { + if (key == "java.awt.headless") + return Clazz._isHeadless; + C$.checkKey$S(key); + var p = (C$.props == null ? sysprops[key] : C$.props.getProperty$S(key)) + if (p == null) { + switch (key) { + case "DeskTop_awt.multiClickInterval": + // from java.awt.Toolkit.getDesktopProperty(name) + return Integer.valueOf$I(500); + } + } + return (p == null ? null : p); +} + +C$.getProperty$S$S=function (key, def) { + C$.checkKey$S(key); + if (C$.props == null) { + var prop = sysprops[key]; + return (prop == null ? def : prop); + } + return C$.props.getProperty$S$S(key, def); +} + +C$.setProperty$S$S=function (key, value) { + C$.checkKey$S(key); + var ret; + if (C$.props == null) { + ret = sysprops[key]; + sysprops[key] = value; + return ret || null; + } + return C$.props.setProperty$S$S(key, value); +} + +C$.clearProperty$S=function (key) { + C$.checkKey$S(key); + return (C$.props == null ? null : C$.props.remove$O(key)); +} + +C$.checkKey$S=function (key) { + if (key == null ) { + throw Clazz.new_(Clazz.load('NullPointerException').c$$S,["key can\'t be null"]); + }if (key.equals$O("")) { + throw Clazz.new_(Clazz.load('IllegalArgumentException').c$$S,["key can\'t be empty"]); + } +} + +C$.getenv$S=function (name) { + var s = J2S.getGlobal(name) || getURIField(name, null); + return s || null; +} + +var env = null; + +C$.getenv$=function () { + return env || (env = Clazz.load("java.util.Properties")); +} + + + +C$.exit$I=function (status) { + Clazz.loadClass("java.lang.Runtime").getRuntime$().exit$I(status | 0); +} + +C$.gc$=C$.runFinalization$=C$.runFinalizersOnExit$Z=C$.load$S=C$.loadLibrary$S=C$.mapLibraryName$S= + function (libname) {return null;} + +var fixAgent = function(agent) {return "" + ((agent = agent.split(";")[0]), + (agent + (agent.indexOf("(") >= 0 && agent.indexOf(")") < 0 ? ")" : ""))) } + + var agent = navigator.userA; + var sysprops = { + "file.separator" : "/", + "line.separator" : "\n", + "java.awt.printerjob" : "swingjs.JSPrinterJob", + "java.class.path" : "/", + "java.class.version" : "80", + "java.home" : "https://.", + "java.vendor" : "java2script/SwingJS/OpenJDK", + "java.vendor.url" : "https://github.com/BobHanson/java2script", + "java.version" : "1.8", + "java.vm.name":"Java SwingJS", + "java.vm.version" : "1.8", + "java.specification.version" : "1.8", + "java.io.tmpdir" : J2S.getGlobal("j2s.tmpdir"), + "os.arch" : navigator.userAgent, + "os.name" : fixAgent(navigator.userAgent).split("(")[0], + "os.version": fixAgent(navigator.appVersion).replace(fixAgent(navigator.userAgent), ""), + "path.separator" : ":", + "user.dir" : "/TEMP/swingjs", + "user.home" : "/TEMP/swingjs", + "user.name" : "swingjs", + "javax.xml.datatype.DatatypeFactory" : "swingjs.xml.JSJAXBDatatypeFactory", + "javax.xml.bind.JAXBContextFactory" : "swingjs.xml.JSJAXBContextFactory" + } + + +})(System); + +;(function(Con, Sys) { + +Sys.exit$ = Sys.exit$I; + +Sys.out = new Clazz._O (); +Sys.out.__CLASS_NAME__ = "java.io.PrintStream"; +Sys.err = new Clazz._O (); +Sys.err.__CLASS_NAME__ = "java.io.PrintStream"; + +var checkTrace = function(s) { + if (J2S._nooutput || !J2S._traceFilter && !J2S._traceOutput) return; + if (J2S._traceFilter) { + if ((s= "" + s).indexOf(J2S._traceFilter) < 0) + return; + } else if (!(s = "" + s) || s.indexOf(J2S._traceOutput) < 0 && '"' + s + '"' != J2S._traceOutput) { + return; + } + alert(s + "\n\n" + Clazz._getStackTrace()); + doDebugger(); +} + +var setps = function(ps, f) { + +ps.flush$ = function() {} + +ps.print = ps.print$ = ps.print$O = ps.print$Z = ps.print$I = ps.print$S = ps.print$C = function (s) { + checkTrace(s); + f("" + s); +}; + +ps.print$J = function(l) {ps.print(Long.$s(l))} +ps.print$F = ps.print$D = function(f) { + var s = "" + f; + ps.println(s.indexOf(".") < 0 && s.indexOf("Inf") < 0 ? s + ".0" : s); +} + +ps.printf = ps.printf$S$OA = ps.format = ps.format$S$OA = function (f, args) { + ps.print(String.format$S$OA.apply(null, arguments)); +} + +ps.println = ps.println$ = ps.println$Z = ps.println$I = ps.println$S = ps.println$C = ps.println$O = function(s) { + checkTrace(s); + f((s && s.toString ? s.toString() : "" + s) + "\r\n"); +}; + +ps.println$J = function(l) {ps.println(Long.$s(l))} +ps.println$F = ps.println$D = function(f) { + var s = "" + f; + ps.println(s.indexOf(".") < 0 && s.indexOf("Inf") < 0 ? s + ".0" : s); +} + +ps.write$I = function(ch) { + ps.print(String.fromCharCode(ch)); +} + +ps.write$BA = function (buf) { + ps.write$BA$I$I(buf, 0, buf.length); +}; + +ps.write$BA$I$I = function (buf, offset, len) { + ps.print(String.instantialize(buf, offset, len)); +}; + +} + +setps(Sys.out, function(s) {Con.consoleOutput(s)}); +setps(Sys.err, function(s) {Con.consoleOutput(s, "red")}); + +})(Clazz.Console, System); + + +Clazz._Loader.registerPackages("java", [ "io", "lang", "lang.reflect", "util" ]); + + +// old J2S.setGlobal("java.registered", true); + +// /////////////// special definitions of standard Java class methods +// /////////// + +var C$, m$ = Clazz.newMeth; + +Clazz._setDeclared("java.lang.Math", java.lang.Math = Math); + +Math.rint || (Math.rint = function(a) { + var b; + return Math.round(a) + ((b = a % 1) != 0.5 && b != -0.5 ? 0 : (b = Math.round(a % 2)) > 0 ? b - 2 : b); +}); + +// Java 1.8 + +Math.abs$J = function(x) { return Long.$sign(x) < 0 ? Long.$neg(x) : Long.$dup(x); } + +Math.max$J$J = function(x,y) { return Long.max$J$J(x,y); } + +Math.min$J$J = function(x,y) { return Long.min$J$J(x,y); } + +Math.round$D = function(x) { return Clazz.toLong(Math.round(x)); } + +var arex = function(s) { + throw Clazz.new_(Clazz.load('ArithmeticException').c$$S,[s||"integer overflow"]); +} + +Math.addExact$J$J = function(x, y) { + var r = Long.$add(x,y); + (Long.$sign(r) != 0 && Long.$sign(x) == Long.$sign(y) && Long.$sign(x) != Long.$sign(r)) && arex(); + return r; +} + +Math.subtractExact$J$J = function(x, y) { + var r = Long.$sub(x,y); + (Long.$sign(r) != 0 && Long.$sign(x) == Long.$sign(y) && Long.$sign(x) != Long.$sign(r)) && arex(); + return r; +} + +Math.floorDiv$J$J = function(x,y) { + var r = Long.$div(x,y); + return (r < 0 && Long.$ne(Long.$mul(r,y), x) ? Long.$inc(r, -1) : r); +} + +Math.floorMod$J$J = function(x,y) { return Long.$sub(x, Long.$mul(Math.floorDiv(x, y), y)); } + +Math.incrementExact$J = function(a) { + (Long.$eq(a, Long_MAX_VALUE)) && arex(); + return Long.$inc(a,1); +} + +Math.decrementExact$J = function(a) { + (Long.$eq(a, Long_MIN_VALUE)) && arex(); + return Long.$inc(a,-1); +} + +Math.multiplyExact$J$J = function(x, y) { + var r = Long.$mul(x,y); + if (Long.$sign(r) != Long.$sign(x) * Long.$sign(y)) { + arex(); + } + return r; +} + +Math.negateExact$J = function(a) {return Long.$neg(a);} + +Math.toIntExact$J = function(value) { + if (!Long.$eq(Long.$ival(value), value)) { + arex(); + } + return value; +} + +Math.addExact = function(x, y) { + var r = x + y; + // HD 2-12 Overflow iff both arguments have the opposite sign of the result + if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE) { + arex(); + } + return r; +} + + +Math.subtractExact = function(x, y) { + var r = x - y; + // HD 2-12 Overflow iff the arguments have different signs and + // the sign of the result is different than the sign of x + if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE) { + arex(); + } + return r; +} + +Math.multiplyExact = function(x, y) { + var r = x * y; + if (r > Integer.MAX_VALUE || r < Integer.MIN_VALUE) { + arex(); + } + return r; +} +Math.incrementExact = function(a) { + if (a == Integer.MAX_VALUE) { + arex(); + } + return a + 1; +} + +Math.decrementExact = function(a) { + if (a == Integer.MIN_VALUE) { + arex(); + } + return a - 1; +} + +Math.negateExact = function(a) {return -a} + +Math.floorDiv || (Math.floorDiv = function(x,y) { + var r = (x / y) | 0; + if ((x ^ y) < 0 && (r * y != x)) { + r--; + } + return r; +}) + +Math.floorMod || (Math.floorMod = function(x,y) { return x - Math.floorDiv(x, y) * y; }) + +// +Math.log10||(Math.log10=function(a){return Math.log(a)/Math.E}); + +Math.hypot||(Math.hypot=function(x,y){return Math.sqrt(Math.pow(x,2)+Math.pow(y,2))}); + +Math.toDegrees||(Math.toDegrees=function(angrad){return angrad*180.0/Math.PI;}); + +Math.toRadians||(Math.toRadians=function(angdeg){return angdeg/180.0*Math.PI}); + +Math.copySign||(Math.copySign=function(mag,sign){return((sign>0?1:-1)*Math.abs(mag))}); + +// could use Math.sign(), but this was used to preserve cross-brower +// compatability (not in Internet Explorer) +Math.signum||(Math.signum=function(d){return(d==0.0||isNaN(d))?d:d < 0 ? -1 : 1}); + +Math.scalb||(Math.scalb=function(d,scaleFactor){return d*Math.pow(2,scaleFactor)}); + +Math.nextAfter|| +(Math.nextAfter=function(start,direction){ + if (isNaN(start) || isNaN(direction)) + return NaN; + if (direction == start) + return start; + if (start == Double.MAX_VALUE && direction == Double.POSITIVE_INFINITY) + return Double.POSITIVE_INFINITY; + if (start == -Double.MAX_VALUE && direction == Double.NEGATIVE_INFINITY) + return Double.NEGATIVE_INFINITY; + if (start == Double.POSITIVE_INFINITY && direction == Double.NEGATIVE_INFINITY) + return Double.MAX_VALUE; + if (start == Double.NEGATIVE_INFINITY && direction == Double.POSITIVE_INFINITY) + return -Double.MAX_VALUE; + if (start == 0) + return (direction > 0 ? Double.MIN_VALUE : -Double.MIN_VALUE); + + geta64()[0] = start; + var i0 = i64[0]; + var i1 = i64[1]; + var carry; + if ((direction > start) == (start >= 0)) { + i64[0]++; + carry = (i64[0] == 0 ? 1 : 0); + } else { + i64[0]--; + carry = (i64[0] == 4294967295 ? -1 : 0); + } + if (carry) + i64[1]+=carry; + return a64[0]; +}); + +Math.nextAfter$D$D = Math.nextAfter; + +Math.nextAfter$F$D =function(start,direction){ + if (isNaN(start) || isNaN(direction)) + return NaN; + if (direction == start) + return start; + if (start == Float.MAX_VALUE && direction == Float.POSITIVE_INFINITY) + return Float.POSITIVE_INFINITY; + if (start == -Float.MAX_VALUE && direction == Float.NEGATIVE_INFINITY) + return Float.NEGATIVE_INFINITY; + if (start == Float.POSITIVE_INFINITY && direction == Float.NEGATIVE_INFINITY) + return Float.MAX_VALUE; + if (start == Float.NEGATIVE_INFINITY && direction == Float.POSITIVE_INFINITY) + return -Float.MAX_VALUE; + if (start == 0 && direction < 0) + return -Float.MIN_VALUE; + if (start == 0) + return (direction > 0 ? Float.MIN_VALUE : -Float.MIN_VALUE); + + geta32()[0] = start; + i32[0] += ((direction > start) == (start >= 0) ? 1 : -1); + return a32[0]; +}; + + +Math.nextUp||(Math.nextUp=function(d){ return Math.nextAfter(d, Double.POSITIVE_INFINITY); }); + +Math.nextUP$D=Math.nextUp; + +Math.nextUp$F = function(f){ return Math.nextAfter$F$D(f, Double.NEGATIVE_INFINITY); }; + + +Math.nextDown||(Math.nextDown=function(d){ return Math.nextAfter(d, Double.NEGATIVE_INFINITY); }); + +Math.nextDown$D=Math.nextDown; + +Math.nextDown$F = function(f){ return Math.nextAfter$F$D(f, Double.NEGATIVE_INFINITY); }; + + +Math.ulp||(Math.ulp=function(d){ + if (isNaN(d)) { + return Double.NaN; + } + if (isInfinite(d)) { + return Double.POSITIVE_INFINITY; + } + if (d == Double.MAX_VALUE || d == -Double.MAX_VALUE) { + return Math.pow(2, 971); + } + return Math.nextUp(Math.abs(d)); +}); + +Math.ulp$D = Math.ulp; + +Math.ulp$F = function(f){ + if (isNaN(f)) { + return Float.NaN; + } + if (isInfinite(f)) { + return Float.POSITIVE_INFINITY; + } + if (f == Float.MAX_VALUE || f == -Float.MAX_VALUE) { + return Math.pow(2, 104); + } + return Math.nextUp$F(Math.abs(f)); +}; + +Math.getExponent = Math.getExponent$D = function(d) { + geta64()[0] = d; + return ((i64[1] & 0x7ff00000) >> 20) - 1023; +}; + +Math.getExponent$F=function(f){ + return ((Float.floatToRawIntBits$F(f) & 0x7f800000) >> 23) - 127; +} + +Math.IEEEremainder||(Math.IEEEremainder=function (x, y) { + if (Double.isNaN$D(x) || Double.isNaN$D(y) || Double.isInfinite$D(x) || y == 0) + return NaN; + if (!Double.isInfinite$D(x) && Double.isInfinite$D(y)) + return x; + var modxy = x % y; + if (modxy == 0) return modxy; + var rem = modxy - Math.abs(y) * Math.signum(x); + if (Math.abs(rem) == Math.abs(modxy)) { + var div = x / y; + return (Math.abs(Math.round(div)) > Math.abs(div) ? rem : modxy); + } + return (Math.abs(rem) < Math.abs(modxy) ? rem : modxy); +}); + + +Clazz._setDeclared("java.lang.Number", java.lang.Number=Number); +Number.prototype._numberToString=Number.prototype.toString; + extendObject(Array, EXT_NO_HASHCODE); + extendObject(Number, EXT_NO_HASHCODE); +Number.__CLASS_NAME__="Number"; +addInterface(Number,java.io.Serializable); +// extendPrototype(Number, true, false); +Number.prototype.compareTo$ = Number.prototype.compareTo$Number = + Number.prototype.compareTo$O = Number.prototype.compareTo$Byte = Number.prototype.compareTo$Integer = + Number.prototype.compareTo$Short = Number.prototype.compareTo$Float = Number.prototype.compareTo$Double = + function(x) { var a = this.valueOf(), b = x.valueOf(); return (a < b ? -1 : a == b ? 0 : 1) }; + +var $b$ = new Int8Array(1); +var $s$ = new Int16Array(1); +var $i$ = new Int32Array(1); + +// short forms, for the actual numbers in JavaScript +m$(Number,["byteValue"],function(){return ($b$[0] = this, $b$[0]);}); +m$(Number,["shortValue"],function(){return ($s$[0] = this, $s$[0]);}); +m$(Number,["intValue"],function(){return ($i$[0] = this, $i$[0]);}); +m$(Number,["longValue"],function(){return Clazz.toLong(this);}); + +// Object values +m$(Number,["byteValue$"],function(){return this.valueOf().byteValue();}); +m$(Number,["shortValue$"],function(){return this.valueOf().shortValue();}); +m$(Number,["intValue$"],function(){return this.valueOf().intValue();}); +m$(Number,["longValue$"],function(){return this.valueOf().longValue();}); +m$(Number,["floatValue$", "doubleValue$"],function(){return this.valueOf();}); +m$(Number,["longValue$"],function(){return this.valueOf().longValue();}); +m$(Number,["$incr$"],function(n){return this.$box$(this.valueOf() + n);}); +m$(Number,["$mul$"],function(v){return this.$box$(this.valueOf() * v);}); +m$(Number,["$neg$"],function(v){return this.$box$(-this.valueOf());}); +m$(Number,["$inv$"],function(v){return this.$box$(~this.valueOf());}); +m$(Number,["$c"],function(v){return this.valueOf();}); + +Clazz.incrAN = function(A,i,n,isPost) { + var v = A[i]; + A[i] = (v.TYPE ? v.$incr$(n) : Long.$inc(v,n)); + return (isPost ? v : A[i]); +} + +Clazz._setDeclared("java.lang.Integer", java.lang.Integer=Integer=function(){ +if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); +}); + +var primTypes = {}; + +var FALSE = function() { return false }; +var EMPTY_CLASSES = function() {return Clazz.array(Class, [0])}; +var NULL_FUNC = function() {return null}; + +var setJ2STypeclass = function(cl, type, paramCode) { +// TODO -- should be a proper Java.lang.Class + primTypes[paramCode] = cl; + cl.TYPE = { + isPrimitive$: function() { return true }, + type:type, + __PARAMCODE:paramCode, + __PRIMITIVE:1 // referenced in java.lang.Class + }; + cl.TYPE.hashCode$ = function() {return type.hashCode$()}; + cl.TYPE.isArray$ = cl.TYPE.isEnum$ = cl.TYPE.isAnnotation$ = FALSE; + cl.TYPE.toString = cl.TYPE.getName$ = cl.TYPE.getTypeName$ + = cl.TYPE.getCanonicalName$ = cl.TYPE.getSimpleName$ = function() {return type}; + cl.TYPE.isAssignableFrom$Class = (function(t) {return function(c) {return c == t}})(cl.TYPE); + cl.TYPE.getSuperclass$ = cl.TYPE.getComponentType$ = NULL_FUNC; + cl.TYPE.getInterfaces$ = EMPTY_CLASSES; +} + +var decorateAsNumber = function (clazz, qClazzName, type, PARAMCODE, hcOffset) { + clazz.prototype.valueOf=function(){return 0;}; + clazz.prototype.__VAL0__ = 1; + if (hcOffset) + clazz.prototype.hashCode$ = function() {return this.valueOf() + hcOffset}; + finalizeClazz(clazz, qClazzName, null, 0, true); + extendPrototype(clazz, true, true); + setSuperclass(clazz, Number); + addInterface(clazz, Comparable); + setJ2STypeclass(clazz, type, PARAMCODE); + return clazz; +}; + +Clazz.toLong = function(v) { + if (typeof v == "string") { + v = parseInt(v); + if (isNaN(v)) + return 0; + } + return (v.length ? v : v >= minLong && v <= maxLong ? v - v%1 : v == Infinity ? LONG_MAX_VALUE : v == -Infinity ? LONG_MIN_VALUE : isNaN(v) ? 0 : toLongRMS(v - v%1)); +} + +var parseIntLimit = function(s,radix, min, max) { + var v = (s == null || s.indexOf(".") >= 0 || s.startsWith("0x") ? NaN : radix === false ? parseInt(s) : parseInt(s, radix)); + if (!isNaN(v)) { + // check for trailing garbage + var v1 = parseInt(s + "1", radix); + if (v1 == v) + v = NaN; + } + if (isNaN(v) || v < min || v > max){ + throw Clazz.new_(NumberFormatException.c$$S, ["parsing " + s + " radix " + radix]); + } + return v; +} + +decorateAsNumber(Integer, "Integer", "int", "I", iHCOffset); + +Integer.toString=Integer.toString$I=Integer.toString$I$I=Integer.prototype.toString=function(i,radix){ + switch(arguments.length) { + case 2: + return i.toString(radix); + case 1: + return "" +i; + case 0: + return (this===Integer ? "class java.lang.Integer" : ""+this.valueOf()); + } +}; + +var minInt = Integer.MIN_VALUE=Integer.prototype.MIN_VALUE=-0x80000000; +var maxInt = Integer.MAX_VALUE=Integer.prototype.MAX_VALUE=0x7fffffff; +Integer.SIZE=Integer.prototype.SIZE=32; + + + +var ints = []; +var longs = []; +var shorts = []; +var chars = {}; + +var minValueOf = -128; +var maxValueOf = 127; + +var getCachedNumber = function(i, a, cl, c$) { + if (a == chars) { + return a[i] ? a[i] : (a[i] = Clazz.new_(cl[c$], [i])); + } + if (i >= minValueOf && i <= maxValueOf) { + var v = a[i - minValueOf]; + return (v ? v : a[i - minValueOf] = Clazz.new_(cl[c$], [i])); + } +} + +m$(Integer,"c$", function(v){ // SwingJS only -- for new Integer(3) + v || v == null || (v = 0); + if (typeof v != "number") + v = Integer.parseInt$S$I(v, 10); + v = v.intValue(); + this.valueOf=function(){return v;}; + }, 1); + +m$(Integer, "c$$S", function(v){ + v = Integer.parseInt$S$I(v, 10); + this.valueOf=function(){return v;}; + }, 1); + +m$(Integer, "c$$I", function(v){ + this.valueOf=function(){return v;}; +}, 1); + +m$(Integer,"valueOf$S", +function(s){ + return Integer.valueOf$S$I(s, 10); +}, 1); + +m$(Integer,"valueOf$S$I", +function(s, radix){ + return Integer.valueOf$I(Integer.parseInt$S$I(s, radix)); +}, 1); + +m$(Integer,"valueOf$I", +function(i){ + v |= 0; + var v = getCachedNumber(i, ints, Integer, "c$$I"); + return (v ? v : Clazz.new_(Integer.c$$I, [i])); +}, 1); + +m$(Integer,"parseInt$S", +function(s){ + return parseIntLimit(s, false, minInt, maxInt); +}, 1); + +m$(Integer,"parseInt$S$I", +function(s,radix){ + return parseIntLimit(s, radix, minInt, maxInt); +}, 1); + +m$(Integer,"getInteger$S$I", +function(ms,i){ + return Integer.valueOf$I(i); +}, 1); + +m$(Integer,"highestOneBit$I", + function(i) { + i |= (i >> 1); + i |= (i >> 2); + i |= (i >> 4); + i |= (i >> 8); + i |= (i >> 16); + return i - (i >>> 1); + }, 1); + +m$(Integer,"lowestOneBit$I", + function(i) { return i & -i;}, 1); + +m$(Integer,"rotateLeft$I$I", + function(i, distance) { return (i << distance) | (i >>> -distance); }, 1); + +m$(Integer,"rotateRight$I$I", + function(i, distance) { return (i >>> distance) | (i << -distance); }, 1); + +m$(Integer,"reverse$I", + function(i) { + i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555; + i = (i & 0x33333333) << 2 | (i >>> 2) & 0x33333333; + i = (i & 0x0f0f0f0f) << 4 | (i >>> 4) & 0x0f0f0f0f; + i = (i << 24) | ((i & 0xff00) << 8) | + ((i >>> 8) & 0xff00) | (i >>> 24); + return i;}, 1); + +m$(Integer,"reverseBytes$I", + function(i) { + return ((i >>> 24) ) | + ((i >> 8) & 0xFF00) | + ((i << 8) & 0xFF0000) | + ((i << 24)); + }, 1); + +m$(Integer,"signum$I", function(i){ return i < 0 ? -1 : i > 0 ? 1 : 0; }, 1); + +m$(Integer,"bitCount$I", + function(i) { + i = i - ((i >>> 1) & 0x55555555); + i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); + i = (i + (i >>> 4)) & 0x0f0f0f0f; + i = i + (i >>> 8); + i = i + (i >>> 16); + return i & 0x3f; + }, 1); + +m$(Integer,"numberOfLeadingZeros$I", + function(i) { + if (i == 0) return 32; + var n = 1; + if (i >>> 16 == 0) { n += 16; i <<= 16; } + if (i >>> 24 == 0) { n += 8; i <<= 8; } + if (i >>> 28 == 0) { n += 4; i <<= 4; } + if (i >>> 30 == 0) { n += 2; i <<= 2; } + n -= i >>> 31; + return n; + }, 1); + +m$(Integer,"numberOfTrailingZeros$I", + function(i) { + if (i == 0) return 32; + var n = 31; + var y = i <<16; if (y != 0) { n = n - 16; i = y; } + y = i << 8; if (y != 0) { n = n - 8; i = y; } + y = i << 4; if (y != 0) { n = n - 4; i = y; } + y = i << 2; if (y != 0) { n = n - 2; i = y; } + return n - ((i << 1) >>> 31); + }, 1); + +m$(Integer,"equals$O", +function(s){ +return (s instanceof Integer) && s.valueOf()==this.valueOf(); +}); + +m$(Integer, "$box$", function(v) { + return Integer.valueOf$I(v); +}); + +Integer.toHexString$I=function(d){ +if (d < 0) { +var b = d & 0xFFFFFF; +var c = ((d>>24)&0xFF); +return c._numberToString(16) + (b = "000000" + b._numberToString(16)).substring(b.length - 6); +} +return d._numberToString(16); +}; +Integer.toOctalString$I=function(d){return d._numberToString(8);}; +Integer.toBinaryString$I=function(d){return d._numberToString(2);}; + +Integer.toUnsignedLong$I=function(x){return (x > 0 ? x : x + 0x100000000);}; +Integer.toUnsignedString$I=function(x){return "" + Integer.toUnsignedLong$I(x);}; +Integer.toUnsignedString$I$I=function(x,r){return Long.toString$J(Integer.toUnsignedLong$I(x),r);}; + +m$(Integer,"decodeRaw$S", function(n){ +if (n.indexOf(".") >= 0)n = ""; +var i = (n.startsWith("-") ? 1 : 0); +n = n.replace(/\#/, "0x").toLowerCase(); +var radix=(n.startsWith("0x", i) ? 16 : n.startsWith("0", i) ? 8 : 10); +// The general problem with parseInt is that is not strict -- +// ParseInt("10whatever") == 10. +// Number is strict, but Number("055") does not work, though ParseInt("055", 8) +// does. +// need to make sure negative numbers are negative +if (n == "" || radix == 10 && isNaN(+n)) + return NaN +n = (+n) & 0xFFFFFFFF; +return (radix == 8 ? parseInt(n, 8) : n); +}, 1); + +m$(Integer,"decode$S", function(n){ + if (isNaN(n = Integer.decodeRaw$S(n)) || n < Integer.MIN_VALUE|| n > Integer.MAX_VALUE) + throw Clazz.new_(NumberFormatException.c$$S,["Invalid Integer"]); + return Clazz.new_(Integer.c$$I, [n]); +}, 1); + + + +// Note that Long is problematic in JavaScript + +Clazz._setDeclared("java.lang.Long", java.lang.Long=Long=function(){ + this.c$(arguments[0]); +}); + +decorateAsNumber(Long, "Long", "long", "J", lHCOffset); + +Long.toString=Long.toString$J=Long.toString$J$I = Long.prototype.toString=function(i, radix){ + switch(arguments.length) { + case 2: + return (i.length ? Long.$s(i,radix) : i.toString(radix)); + case 0: + if (this===Long) + return "class java.lang.Long"; + i = this.valueOf(); + break; + } + return (i.length ? Long.$s(i) : "" + i); +}; + + +// 64-bit long methods +// RMS [R 16 bits, M 47+1 bits, S (1/0/-1)] (for storage) +// RLH [R 16 bits, ML 24 bits, MH 24+1 bits] (for bit, * / % ops) + +var JSSAFE = 9007199254740991; // can +/-1 +var RBITS = 24; +var LBITS = RBITS; +var HBITS = (64 - LBITS - RBITS); // 16 +var MAXR = 1 << RBITS; +var RMASK = MAXR - 1; +var MAXL = 1 << LBITS; +var LMASK = MAXL - 1; +var MAXH = 1 << HBITS; +var HMASK = MAXH - 1; +var HSIGNB = MAXH >> 1; // 0x8000; +var MAXM = MAXL*MAXH; +var T15 = 10**15; +var T8 = 10**8; +var T15RD = T15/MAXR; // 5.9604644775390625 +var T15RN = T15RD|0; +var T15RF = T15RD - T15RN; +var MSIGNB = 0x8000000000; // Java long min >>>24;549755813888 +var MMINMAX = 0x10000000000; // Java overflow >>>24; +var LONG_MAX_VALUE = [16777215,549755813887,1]; +var LONG_MIN_VALUE = [0,549755813888,-1]; + +var parseLong = function(s, radix, v) { + if (v >= -JSSAFE && v <= JSSAFE) + return v; + var isNeg = (s.charAt(0) == '-'); + if (isNeg || s.charAt(0) == '+') + s = s.substring(1); + var n = s.length; + var m = 0,r = 0; + switch (radix) { + case 10: + return toLongRMS((isNeg ? "-" : "") + s,1); + case 2: + if (n > 64) + return null; + m = parseInt(s.substring(0, n - RBITS), 2); + r = parseInt(s.substring(n - RBITS), 2); + break; + case 8: + if (n > 33) + return null; + // mmmmmmmmmmmmmmmmm rrrrrrrr + m = parseInt(s.substring(0, n - RBITS/3), 8); + r = parseInt(s.substring(n - RBITS/3), 8); + break; + case 16: + if (n > 16) + return null; + // mmmmmmmmmmmm rrrrrr + m = parseInt(s.substring(0, n - RBITS/4), 16); + r = parseInt(s.substring(n - RBITS/4), 16); + break; + case 16: + if (n > 8) + return null; + // mmmmmmmmmmmm rrrrrr + m = parseInt(s.substring(0, n - RBITS/8), 32); + r = parseInt(s.substring(n - RBITS/8), 32); + break; + default: + return null; + } + if (m >= 0) { + if (m >= MSIGNB) { + if (m > MSIGNB || r != 0) { + return null; + } + isNeg = true; + } + return [r, m, isNeg ? -1 : r == 0 && m == 0 ? 0 : 1]; + } + return v; +} + +var toLongI2 = function(i0, i1) { + var r = i0&0xFFFFFF; // 24 + var l = (i0>>>24) + ((i1&0xFFFF)<<8); // 24 + var h = i1>>>16; // 16 + return fromLongRLH([r,l,h]); +} + +var toLongRMS = function(s0, noOver) { + if (typeof s0 == "number") { + if (s0 + 1 > s0 && s0 -1 < s0) + return checkLong([Math.abs(s0), 0, s0 < 0 ? -1 : s0 > 0 ? 1 : 0]); + + s0 -= s0%1; + s0 = "" + s0; + } else if (Array.isArray(s0)) { + return s0; + } + var isNeg = (s0.indexOf("-") == 0); + var s = (isNeg ? s0.substring(1) : s0); + + // 1) Split the string into two reasonably-sized numbers + // give l (low) the last 8 digits; h (high) can have the first 11. + // max l will be 27 bits; max h will be 37 bits. + // later we will add in up to 11 more bits into h. + + var pt = s.length - 15; + var h = Number(pt <= 0 ? 0 : s.substring(0, pt)); + var l = Number(pt <= 0 ? s : s.substring(pt)); + + + // The task is to partition the number based on binary digits, not decimal. + // Starting with [l,h] we want [r,m]. + + // L = h * T15 + l == m*MAXR + r + + // 2) Split the low-digit part into an m part and an r part + // using integerization |0 and modulus %. + // l = lm*MAXR + lr + + var lm = l/MAXR|0; + var r = l&RMASK; + + // That was the easy part. + + // For the high digits, consider that we must satisfy: + // h*T15 = hm*MAXR + hr + // or + // h*(T15/MAXR) = hm + hr/MAXR + // notice that T15/MAXR is a decimal with an + // integer part (ti) and a fractional part (tf): + // h*(ti + tf) + // so h*ti = hm and h*tf*MAXR = hr + // except hr will overflow, so we need to add its high part to hm + + // to avoid integer overflow, we divide both sides by MAXR. + // bringing in the fractional part of the high number along + // with the low part of the remainder digits. + + var r0 = h * T15RF; // 0.9604644775390625 + + // This is our remainder, except it has almost certainly overflowed. + // So we need to move its high part from r to m. We cannot + // use |0 here because this one could be over 31 bits now after + // adding in h * tf. + + var rh = Math.floor(r0) + r += Math.floor((r0 - rh)*MAXR); + + lm += r/MAXR|0; + r &= RMASK; + + // combining the integer high part h * ti with the overflow of the + // lower numbers (rh and lm): + + var m = h * T15RN + rh + lm; + + // That's i;, we have m, r and s. + + if (!r&&!m &&(h||l) || (isNeg ? m >= MSIGNB && r > 0 : m >= MSIGNB)) { + return (noOver ? null : isNeg ? LONG_MIN_VALUE : LONG_MAX_VALUE); + } + return [r, m, !r&&!m ? 0 : isNeg ? -1 : 1]; +} + +var checkLong = function(rms, limit) { + // returns rms without cloning + var r = rms[0]; + if (limit > 0 && (r >= -limit && r < limit)) + return rms; + var m = rms[1]; + if (!rms[2]) { + if (!r && !m) + return rms; + rms[2] = 1; + } + if (r < 0) { + if (m == 0) { + rms[0] = -r; + rms[2] = -rms[2]; + } else { + var rl = r%MAXR; + var rh = (r - rl) / MAXR; + var n = m + rh; + if (n < 1) { + rms[0] = -rl; + rms[1] = -n; + rms[2] = -rms[2]; + } else { + rms[0] = MAXR + rl + rms[1] = n - 1; + } + } + } else if (r >= MAXR) { + var rl = r%MAXR; + var rh = (r - rl) / MAXR; + rms[0] = rl + rms[1] += rh; + } + if (rms[1] >= MSIGNB) { + if (limit >= 0) { + return (rms[2] > 0 ? LONG_MAX_VALUE : LONG_MIN_VALUE); + } + while (rms[1] > 0) { + rms[1] -= MMINMAX; + } + if (rms[0] > 0) { + rms[1]++; + rms[0] = MAXR - rms[0]; + } + rms[1] = -rms[1]; + rms[2] = (rms[1] == MSIGNB ? -1 : -rms[2]); + } else if (rms[1] <= -MSIGNB) { + return LONG_MIN_VALUE; + } + return rms; +} + +Long.$sign = function(a) { + return (a.length ? a[2] : Math.signum(a)); +} + +Long.$n = function(a) { + return BigInt(Long.$s(a)); +} + +Long.$s = function(a, radix, unsigned) { + // todo radix + radix || (radix = 10); + if (!a.length) { + if (radix == 10 && !unsigned) + return "" + a; + a = toLongRMS(a); + } + if (a[1] == 0 && !unsigned) { + return (a[2]*a[0]).toString(radix); + } + var isNeg = (a[2] == -1); + checkLong(a); + var m = a[1]; + var r = a[0]; + var s = ""; + if (unsigned && isNeg && m < MSIGNB) { + a = toLongRLH(a); + r = a[0]; + m =a[1]+a[2]*MAXL; + } + var zeros = null; + switch (radix) { + case 2: // 24 + zeros = "000000000000000000000000"; + break; + case 4: // 12 + zeros = "000000000000"; + break; + case 8: + zeros = "00000000" + break; + case 16: + zeros = "000000" + break; + case 32: + isNeg = false; + m && (s = (m/0x3F).toString(32)); + var s1 = (r + ((m&0x40)<<24)).toString(32); + s += (s.length == 0 ? s1 : longFill(s1, "00000")); + break; + case 10: + var ml = m % T8; + var mh = (m - ml)/T8; + var ll = r + ml * MAXR; + var l = ll % T8; + var lh = (ll - l)/T8; + var h = mh * MAXR + lh; + var fl = (h == 0 ? "" : "00000000") + ll; + s = (h != 0 ? h + fl.substring(fl.length - 8) : ll); + break; + } + if (zeros) { + isNeg = false; + m && (s = m.toString(radix)); + var s1 = r.toString(radix); + s += (s.length == 0 ? s1 : longFill(s1, zeros)); + } + return (!unsigned && isNeg ? "-" : "") + s; +} + +var longFill = function(s, zeros) { + var i,n + if ((i = s.length) == (n = zeros.length)) + return s; + s = zeros + s; + return s.substring(i - n, i); +} + +Long.$dup=function(a,b){ + if (!a.length) { + return a; + } + if (a[1] == 0) { + return a[2] * a[0]; + } + return [a[0],a[1],a[2]]; +} + +Long.$inc = function(x,n) { + // n +/-1 only; + var ret; + if (!x.length) { + ret = x + n; + if (ret != x) { + return ret; + } + x = toLongRMS(x); + } + return checkLong([x[2] == -1 ? x[0] - n : x[0] + n, x[1], x[2]], -1); +} + +Long.$neg=function(a){ return (a.length ? checkLong([a[0],a[1],-a[2]]) : -a); } + + +Long.$ival=function(a){ return Long.$lval(a)|0; } + +Long.$lval=function(a){ return (a.length ? a[2] * (a[0] + (a[1]%MAXR)*MAXR) : a); } + +Long.$fval=function(a){ + geta32()[0] = (a.length ? a[2] * (a[0] + a[1]*MAXR) : a); + return a32[0]; +} + +Long.$dval=function(a){ + geta64()[0] = (a.length ? a[2] * (a[0] + a[1]*MAXR) : a); + return a64[0]; +} + +var longTest = function(a,b) { + var isna = (!a.length); + var isnb = (!b.length); + return (isna && isnb ? 0 : isna ? -1 : isnb ? 1 : 2); +} + +var ab = [0,0]; + +var fixLongAB = function(a,b) { + switch (longTest(a,b)) { + case 0: + return true; + case 2: + checkLong(a); + checkLong(b); + break; + case 1: + checkLong(a); + b = toLongRMS(b); + break; + case -1: + a = toLongRMS(a); + checkLong(b); + break; + } + ab[0] = a; + ab[1] = b; +} + + +Long.$cmp=function(a,b, unsigned){ + if (fixLongAB(a,b)) { + return (a < b ? -1 : a > b ? 1 : 0); + } + a = ab[0];b = ab[1]; + if (unsigned) { + a = toLongRLH(a); + b = toLongRLH(b); + for (let i = 2; i >= 0; i--) { + if (a[i] < b[i]) return -1; + if (a[i] > b[i]) return 1; + } + return 0; + } + return ( + a[2] < b[2] ? -1 + : a[2] > b[2] ? 1 + : a[2] == 0 ? 0 + : a[1] < b[1] ? -a[2] + : a[1] > b[1] ? a[2] + : a[0] < b[0] ? -a[2] + : a[0] > b[0] ? a[2] + : 0 + ); +} + +Long.$eq=function(a,b){ + return Long.$cmp(a, b) == 0; +} + +Long.$ne=function(a,b){ + return Long.$cmp(a, b) != 0; +} + +Long.$ge=function(a,b){ + return Long.$cmp(a, b) >= 0; +} + +Long.$gt=function(a,b){ + return Long.$cmp(a, b) > 0; +} + +Long.$le=function(a,b){ + return Long.$cmp(a, b) <= 0; +} + +Long.$lt=function(a,b){ + return Long.$cmp(a, b) < 0; +} + + +Long.$not=function(a){ + return (a.length ? checkLong([a[0]+a[2],a[1],-a[2]]) : -a - 1); +} + +var m2 = [0,1,3,7 + ,0xF,0x1F,0x3F,0x7F + ,0xFF,0x1FF,0x3FF,0x7FF + ,0xFFF,0x1FFF,0x3FFF,0x7FFF + ,0xFFFF,0x1FFFF,0x3FFFF,0x7FFFF + ,0xFFFFF,0x1FFFFF,0x3FFFFF,0x7FFFFF + ,0xFFFFFF + ]; + +Long.$sr=function(a,n){ + if (arguments.length > 2) + return doLong(Long.$sr,arguments); + return shiftLong(a, n, 0); +} + +Long.$usr=function(a,n){ + if (arguments.length > 2) + return doLong(Long.$usr,arguments); + return shiftLong(a, n, 1); +} + +var shiftLong = function(a, n, unsigned) { + if (fixLongAB(a,n)) { + if (a >= 0 && a == (a|0)) + return (n > 31 ? 0 : a>>n); + if (n >= 64) + return (a > 0 || unsigned ? 0 : -1); + if (n == 0) + return a; + a = toLongRMS(a); + } else { + a = ab[0]; + n = (ab[1][1] > 0 ? 64 : ab[1][0]); + } + if (n >= 64 || a[2] == 0) { + return (a[2] >= 0 || unsigned ? 0 : -1); + } else if (n == 0) { + return Long.$dup(a); + } + var isNeg = (a[2] < 0); + var a = toLongRLH(a); + var c2,c1; + if (isNeg && !unsigned) + a[2] = -1&~HMASK|a[2]; + if (n >= 48) { + a[0] = a[1] = 0; + a[2] && (a[0] = a[2]>>(n-48),a[2] = 0); + isNeg && !unsigned && a[0] && (a[1]=-1,a[2] = -1); + return fromLongRLH(a); + } + if (n >= 24) { + a[0] = a[1]; + a[1] = a[2]; + a[2] = 0; + n -= 24; + } + + a[2] && (c2=(a[2]&m2[n])<<(24-n),a[2]>>=n); + a[1] && (c1=(a[1]&m2[n])<<(24-n),a[1]>>=n); + c2 && (a[1] += c2); + a[0] && (a[0]>>=n); + c1 && (a[0] += c1); + return fromLongRLH(a); +} + +Long.$sl = function(a, n){ + if (arguments.length > 2) + return doLong(Long.$sl,arguments); + if (fixLongAB(a,n)) { + var c; + if (a == 0 || n == 0) + return a; + if (n < 32 && (a < 0 ? (c = a< a)) + return c; + if (n >= 64) + return 0; + a = toLongRMS(a); + } else { + a = ab[0]; + n = (ab[1][1] > 0 ? 64 : ab[1][0]); + } + if (n >= 64 || a[2] == 0) { + return 0; + } + if (n == 0) { + return Long.$dup(a); + } + var a = toLongRLH(a); + var c2,c1; + if (n < 24) { + a[2] && (a[2]<<=n); + a[1] && (a[2]|=a[1]>>(24-n),a[1]<<=n); + a[0] && (a[1]|=a[0]>>(24-n),a[0]<<=n,a[0]&=RMASK); + } else if (n < 48) { + a[2] = (a[0]?a[0]>>(48-n):0); + a[1] && (a[2]|=a[1]<<(n-24)); + a[0] && (a[1]=a[0]<<(n-24),a[0]=0); + } else { + a[1] = 0; + a[2] = (a[0]?a[0]<<(n-48):0); + a[0] = 0; + } + a[1] && (a[1]&=LMASK); + a[2] && (a[2]&=HMASK); + return fromLongRLH(a); +} + +var addAB = function(a,b, s) { + if (fixLongAB(a,b)) { + var r = a + s * b; + if (r + 1 > r && r - 1 < r) + return r; + ab[0] = toLongRMS(a); + ab[1] = toLongRMS(b); + } + a = ab[0];b = ab[1]; + var r,m; + if (a[2] < 0) + s = -s; + r = a[0] + s * b[0] * b[2]; + m = a[1] + s * b[1] * b[2]; + if (m == 0) + return (r == 0 ? 0 : r * (a[2] || 1)); + return checkLong([r,m,a[2]], -1); +} + +Long.$add = function(a,b) { + if (arguments.length > 2) + return doLong(Long.$add,arguments); + return addAB(a,b, 1); +} + +Long.$sub = function(a,b) { + if (arguments.length > 2) + return doLong(Long.$sub,arguments); + return addAB(a,b, -1); +} + +Long.$and=function(a,b){ + if (arguments.length > 2) + return doLong(Long.$and,arguments); + if (fixLongAB(a,b)) { + if (a == 0 || b == 0) + return 0; + if ((a|0) == a && (b|0) == b) + return a&b; + ab[0] = toLongRMS(a); + ab[1] = toLongRMS(b); + } + a = toLongRLH(ab[0]);b = toLongRLH(ab[1]); + a[0] = a[0]&b[0]; + a[1] = a[1]&b[1]; + a[2] = a[2]&b[2]; + return fromLongRLH(a); +} + +Long.$or=function(a,b){ + if (arguments.length > 2) + return doLong(Long.$or,arguments); + if (fixLongAB(a,b)) { + if (a == 0 && b == 0) + return 0; + if ((a|0) == a && (b|0) == b) + return a|b; + ab[0] = toLongRMS(a); + ab[1] = toLongRMS(b); + } + a = toLongRLH(ab[0]);b = toLongRLH(ab[1]); + a[0] = a[0]|b[0]; + a[1] = a[1]|b[1]; + a[2] = a[2]|b[2]; + return fromLongRLH(a); +} + +Long.$xor=function(a,b){ + if (arguments.length > 2) + return doLong(Long.$xor,arguments); + if (fixLongAB(a,b)) { + if (a == 0 && b == 0) + return 0; + if ((a|0) == a && (b|0) == b) + return a^b; + ab[0] = toLongRMS(a); + ab[1] = toLongRMS(b); + } + a = toLongRLH(ab[0]);b = toLongRLH(ab[1]); + a[0] = a[0]^b[0]; + a[1] = a[1]^b[1]; + a[2] = a[2]^b[2]; + return fromLongRLH(a); +} + +Long.$mul = function(a,b){ + if (arguments.length > 2) + return doLong(Long.$mul,arguments); + if (fixLongAB(a,b)) { + var r = a*b; + if (r + 1 > r && r - 1 < r) + return r; + ab[0] = toLongRMS(a); + ab[1] = toLongRMS(b); + } + var a = ab[0]; + var b = ab[1]; + if (a[2] == 0 || b[2] == 0) + return 0; + var isNeg = (a[2]*b[2] < 0); + if (a[2] < 0) + a = [a[0], a[1], 1]; + if (b[2] < 0) + b = [b[0], b[1], 1]; + a = toLongRLH(a); + b = toLongRLH(b); + var r = a[0]*b[0]; + var c = (r-r%MAXR)/MAXR; + var l = a[0]*b[1]+a[1]*b[0]+c; + c = (l-l%MAXL)/MAXL; + var h = a[0]*b[2]+a[2]*b[0]+a[1]*b[1]+c; + a = fromLongRLH([r,l,h]); + return (isNeg ? Long.$neg(a) : a); +} + +Long.$div=function(a,b){ + if (arguments.length > 2) + return doLong(Long.$div,arguments); + if (fixLongAB(a,b)) { + if (b == 0) + arex("/ by zero"); + return (a/b) - (a/b)%1; + } + var a = ab[0]; + var b = ab[1]; + if (b[2] == 0) + arex("/ by zero"); + if (a[2] == 0 || b[1] > a[1] || b[1] == a[1] && b[0] > a[0]) + return 0; + var isNeg = (a[2]*b[2] < 0); + if (a[2] < 0) + a = [a[0], a[1], 1]; + if (b[2] < 0) + b = [b[0], b[1], 1]; + if (b[1] == a[1]) { + // the result will only depend upon r, not m + return (isNeg ? -1 : 1)*(a[0]/b[0])|0; + } + var d = NaN; + if (b[1] == 0) { + d = b[0]; + } else { + d = b[0] + b[1] * MAXR; + if (d + 1 == d || d - 1 == d) { + d = NaN; + } + } + if (isNaN(d)) { + // only from very large numbers divided by very large numbers. + // never in BigInteger, as that is all long/int + var bi = self.BigInt; + var f = (bi || Long.toUnsignedBigInteger$J); + var m = f(MAXR); + var aBr = f(a[0]); + var aBm = f(a[1]); + var bBr = f(b[0]); + var bBm = f(b[1]); + if (bi) { + ret = Number((aBr + m * aBm)/(bBr + m * bBm)); + } else { + // SwingJS aliases in BigInteger + ret = aBr.add(m.mul(aBm)).div(bBr.add(m.mul(bBm))); + } + return Clazz.toLong((isNeg ? -1 : 1) * ret); + } + var m = a[1]/d; + var mf = m%1; + var r = a[0]/d + mf*MAXR; + var rf = r%1; + m -= mf; + r -= rf; + // rounding could be no more than +/-1 off + switch (Long.$cmp(a,Long.$mul([r, m, 1],d))) { + case 0: + break; + case -1:// a < b*d -- too high + r -= 1; + break; + case 1: + if (Long.$cmp(a,Long.$mul([r+1, m, 1],d)) >= 0) { + r += 1; + } + break; + } + return checkLong([r, m, isNeg ? -1 : 1]); +} + +Long.$mod=function(a,n){ + if (arguments.length > 2) + return doLong(Long.$mod,arguments); + if (fixLongAB(a,n)) { + return a%n; + } + // a mod n = a - (a/n)*n + return Long.sub(a,Long.mul(Long.div(a,n),n)); +} + +var doLong = function(f,args) { + var a = args[0]; + for (var i = 1; i < args.length; i++) { + a = f(a, args[i]); + } + return a; +} + +var toLongRLH = function(rms) { + // to [16][24][24] + // h l r + var r = rms[0]; + var m = rms[1]; + if (m == 0 && r == 0) { + return [0,0,0]; + } + var isNeg = (rms[2] == -1); + var ml = m&LMASK; + m = (m - ml)/MAXL; + if (isNeg) { + r = (~r&RMASK) + 1; + ml = (~ml&LMASK) + (r == MAXR ? 1 : 0); + m = (~m&HMASK) + (ml == MAXL ? 1 : 0); + r &= RMASK; + ml &= LMASK; + m &= HMASK; + } + return [r,ml,m]; +} + +var fromLongRLH = function(rlh) { + var isNeg = (rlh[1] < 0); + (isNeg ? (rlh[2] = -1) : (isNeg = rlh[2] < 0 || rlh[2] >= HSIGNB)); + r = rlh[0]&RMASK; + m = ((rlh[2]&HMASK)*MAXL)+(rlh[1]&LMASK); + if (m == 0 && r == 0) { + return 0; + } + if (isNeg) { + r = (~r&RMASK) + 1; + m = MAXM - m - (r == MAXR ? 0 : 1); + r &= RMASK; + } + return checkLong([r,m, !r&&!m ? 0 : isNeg ? -1 : 1]); +} + +// Long.TYPE=Long.prototype.TYPE=Long; +// Note that the largest usable "Long" in JavaScript is 53 digits: + +Long.MIN_VALUE=Long.prototype.MIN_VALUE=LONG_MIN_VALUE; +Long.MAX_VALUE=Long.prototype.MAX_VALUE=LONG_MAX_VALUE; + +var maxLong = 0x1000000000000000000000; // ignored +var minLong = -maxLong; +Long.SIZE=Long.prototype.SIZE=64;// REALLY 53 + + +m$(Long,["intValue","intValue$"],function(){return Long.$ival(this.valueOf());}); + +m$(Long,["longValue","longValue$"],function(){return this.valueOf();}); + +m$(Long,"c$", +function(v) { + if (typeof v != "number" && typeof v != "object") + v = Long.parseLong$S$I(v, 10); + this.valueOf=function(){return v;}; +}, 1); + +m$(Long, "c$$J", function(v){ + this.valueOf=function(){return v;}; +}, 1); + +m$(Long,"c$$S", +function(v){ + var v = Long.parseLong$S$I(v, 10); + this.valueOf=function(){return v;}; +}, 1); + +Long.compare$J$J = function(a,b) { return Long.$cmp(a,b); } + +m$(Long,"compareTo$Long", function(l){return Long.$cmp(this.valueOf(), l.valueOf());}); + +m$(Long,"valueOf$S", +function(s){ + return Long.valueOf$S$I(s, 10); +}, 1); + +m$(Long,"valueOf$S$I", +function(s, radix){ + return Long.valueOf$J(Long.parseLong$S$I(s, radix)); +}, 1); + +m$(Long,"valueOf$J", +function(i){ + i = Clazz.toLong(i); + var v = (!i.length || (v = Long.$ival(i)) == Long.$lval(i) && (i = v) == i ? getCachedNumber(i, longs, Long, "c$$J") : 0); + return (v ? v : Clazz.new_(Long.c$$J, [i])); +}, 1); + +m$(Long,"hashCode$",function(){return Long.$ival(this.valueOf());}); +m$(Long,"doubleValue$",function(){return Long.$dval(this.valueOf());}); +m$(Long,"floatValue$",function(){return Long.$fval(this.valueOf());}); + + +m$(Long,"parseLong$S", +function(s){ + return Long.parseLong$S$I(s,10); +}, 1); + +m$(Long,"parseLong$S$I", +function(s,radix){ + var v,v0; + if (s.indexOf("x") == 1 || isNaN(v0 = parseInt(s, radix)) || (v = parseLong(s, radix, v)) == null) + throw Clazz.new_(NumberFormatException.c$$S, ["parsing " + s + " radix " + radix]); + return v; +}, 1); + +m$(Long,"decode$S", +function(n){ + if (n.length() == 0) + throw new NumberFormatException("Zero length string"); + + if (n.indexOf(".") >= 0)n = ""; + var isNeg = (n.startsWith(i)); + var i = (isNeg ? 1 : 0); + n = n.replace(/\#/, "0x").toLowerCase(); + var radix = 10; + if (n.startsWith("0x", i)) { + radix = 16; + i += 2; + } else if (n.startsWith("0", i)) { + i += 1; + radix = 8; + } + var result; + try { + result = Long.valueOf$S$I(n.substring$I(i), radix); + result = (isNeg ? Long.valueOf$J(-result.longValue$()) : result); + } catch (e) { + var constant = (isNeg ? "-" + n.substring(i) : n.substring$I(i)); + result = Long.valueOf$S$I(constant, radix); + } + return result; +}, 1); + +m$(Long,"equals$O", + function(s){ + return (s instanceof Long) && Long.$eq(s.valueOf(),this.valueOf()); +}); + +m$(Long, "$box$", function(v) { + return Long.valueOf$J(v.longValue$()); +}); + +;(function(C$) { + +m$(C$, 'compareUnsigned$J$J', function (x, y) { +return C$.compare$J$J(Long.$add(x,LONG_MIN_VALUE), Long.$add(y,LONG_MIN_VALUE)); +}, 1); + +// Long.compareUnsigned$J$J = function(a,b) { return Long.$cmp(a,b,1); } + +m$(C$, 'divideUnsigned$J$J', function (dividend, divisor) { +if (Long.$lt(divisor,0 )) { +return (C$.compareUnsigned$J$J(dividend, divisor)) < 0 ? 0 : 1; +}if (Long.$gt(dividend,0 )) return Long.$div(dividend,divisor); + else { +return C$.toUnsignedBigInteger$J(dividend).divide$java_math_BigInteger(C$.toUnsignedBigInteger$J(divisor)).longValue$(); +}}, 1); + +m$(C$, 'remainderUnsigned$J$J', function (dividend, divisor) { +if (Long.$gt(dividend,0 ) && Long.$gt(divisor,0 ) ) { +return Long.$mod(dividend,divisor); +} else { +if (C$.compareUnsigned$J$J(dividend, divisor) < 0) return dividend; + else return C$.toUnsignedBigInteger$J(dividend).remainder$java_math_BigInteger(C$.toUnsignedBigInteger$J(divisor)).longValue$(); +}}, 1); + +m$(C$, 'highestOneBit$J', function (i) { +(i=Long.$or(i,((Long.$sr(i,1))))); +(i=Long.$or(i,((Long.$sr(i,2))))); +(i=Long.$or(i,((Long.$sr(i,4))))); +(i=Long.$or(i,((Long.$sr(i,8))))); +(i=Long.$or(i,((Long.$sr(i,16))))); +(i=Long.$or(i,((Long.$sr(i,32))))); +return Long.$sub(i,(Long.$usr(i,1))); +}, 1); + +m$(C$, 'lowestOneBit$J', function (i) { +return Long.$and(i,(Long.$neg(i))); +}, 1); + +m$(C$, 'numberOfLeadingZeros$J', function (i) { +if (Long.$eq(i,0 )) return 64; +var n=1; +var x=Long.$ival((Long.$usr(i,32))); +if (x == 0) { +n+=32; +x=Long.$ival(i); +}if (x >>> 16 == 0) { +n+=16; +x<<=16; +}if (x >>> 24 == 0) { +n+=8; +x<<=8; +}if (x >>> 28 == 0) { +n+=4; +x<<=4; +}if (x >>> 30 == 0) { +n+=2; +x<<=2; +}n-=x >>> 31; +return n; +}, 1); + +m$(C$, 'numberOfTrailingZeros$J', function (i) { +var x; +var y; +if (Long.$eq(i,0 )) return 64; +var n=63; +y=Long.$ival(i); +if (y != 0) { +n=n - 32; +x=y; +} else x=Long.$ival((Long.$usr(i,32))); +y=x << 16; +if (y != 0) { +n=n - 16; +x=y; +}y=x << 8; +if (y != 0) { +n=n - 8; +x=y; +}y=x << 4; +if (y != 0) { +n=n - 4; +x=y; +}y=x << 2; +if (y != 0) { +n=n - 2; +x=y; +}return n - ((x << 1) >>> 31); +}, 1); + +m$(C$, 'bitCount$J', function (i) { +i=Long.$sub(i,(Long.$and((Long.$usr(i,1)),[5592405,366503875925,1]))); +i=Long.$add((Long.$and(i,[3355443,219902325555,1])),(Long.$and((Long.$usr(i,2)),[3355443,219902325555,1]))); +i=Long.$and((Long.$add(i,(Long.$usr(i,4)))),[986895,64677154575,1]); +i=Long.$add(i,(Long.$usr(i,8))); +i=Long.$add(i,(Long.$usr(i,16))); +i=Long.$add(i,(Long.$usr(i,32))); +return Long.$ival(i) & 127; +}, 1); + +m$(C$, 'rotateLeft$J$I', function (i, distance) { +return Long.$or((Long.$sl(i,distance)),(Long.$usr(i,-distance))); +}, 1); + +m$(C$, 'rotateRight$J$I', function (i, distance) { +return Long.$or((Long.$usr(i,distance)),(Long.$sl(i,-distance))); +}, 1); + +m$(C$, 'reverse$J', function (i) { +i=Long.$or(Long.$sl((Long.$and(i,[5592405,366503875925,1])),1),Long.$and((Long.$usr(i,1)),[5592405,366503875925,1])); +i=Long.$or(Long.$sl((Long.$and(i,[3355443,219902325555,1])),2),Long.$and((Long.$usr(i,2)),[3355443,219902325555,1])); +i=Long.$or(Long.$sl((Long.$and(i,[986895,64677154575,1])),4),Long.$and((Long.$usr(i,4)),[986895,64677154575,1])); +i=Long.$or(Long.$sl((Long.$and(i,[16711935,4278255360,1])),8),Long.$and((Long.$usr(i,8)),[16711935,4278255360,1])); +i=Long.$or((Long.$sl(i,48)),(Long.$sl((Long.$and(i,4294901760)),16)) , (Long.$and((Long.$usr(i,16)),4294901760)) , (Long.$usr(i,48)) ); +return i; +}, 1); + +m$(C$, 'signum$J', function (i) { +return Long.$sign(i); +//Long.$ival((Long.$or((Long.$sr(i,63)),(Long.$usr((Long.$neg(i)),63))))); +}, 1); + +m$(C$, 'reverseBytes$J', function (i) { +i=Long.$or(Long.$sl((Long.$and(i,[16711935,4278255360,1])),8),Long.$and((Long.$usr(i,8)),[16711935,4278255360,1])); +return Long.$or((Long.$sl(i,48)),(Long.$sl((Long.$and(i,4294901760)),16)) , (Long.$and((Long.$usr(i,16)),4294901760)) , (Long.$usr(i,48)) ); +}, 1); + +m$(C$, 'sum$J$J', function (a, b) { +return Long.$add(a,b); +}, 1); + +m$(C$, 'max$J$J', function (a, b) { +return (Long.$ge(a,b) ? a : b); +}, 1); + +m$(C$, 'min$J$J', function (a, b) { +return (Long.$le(a,b) ? a : b); +}, 1); + +Clazz.newMeth(C$, 'getLong$S', function (nm) { + return C$.getLong$S$Long(nm, null); +}, 1); + +Clazz.newMeth(C$, 'getLong$S$J', function (nm, val) { + var result=C$.getLong$S$Long(nm, null); + return (Long.$eq(result,null )) ? C$.valueOf$J(val) : result; +}, 1); + +Clazz.newMeth(C$, 'getLong$S$Long', function (nm, val) { + var v=null; + try { + v=System.getProperty$S(nm); + } catch (e) { + if (Clazz.exceptionOf(e,"IllegalArgumentException") || Clazz.exceptionOf(e,"NullPointerException")){ + } else { + throw e; + } + } + if (v != null ) { + try { + return C$.decode$S(v); + } catch (e) { + if (Clazz.exceptionOf(e,"NumberFormatException")){ + } else { + throw e; + } + } + }return val; +}, 1); + +Clazz.newMeth(C$, 'parseUnsignedLong$S', function (s) { + return C$.parseUnsignedLong$S$I(s, 10); +}, 1); + +Clazz.newMeth(C$, 'parseUnsignedLong$S$I', function (s, radix) { + if (s == null ) { + throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,["null"]); + }var len=s.length$(); + if (len > 0) { + var firstChar=s.charAt$I(0); + if (firstChar == "-") { + throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,[String.format$S$OA("Illegal leading minus sign on unsigned string %s.", Clazz.array(java.lang.Object, -1, [s]))]); + } else { + if (len <= 12 || (radix == 10 && len <= 18 ) ) { + return C$.parseLong$S$I(s, radix); + }var first=C$.parseLong$S$I(s.substring$I$I(0, len - 1), radix); + var second=Character.digit$C$I(s.charAt$I(len - 1), radix); + if (second < 0) { + throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,["Bad digit at end of " + s]); + }var result=Long.$add(Long.$mul(first,radix),second); + if (C$.compareUnsigned$J$J(result, first) < 0) { + throw Clazz.new_(Clazz.load('NumberFormatException').c$$S,[String.format$S$OA("String value %s exceeds range of unsigned long.", Clazz.array(java.lang.Object, -1, [s]))]); + }return result; + }} else { + throw Clazz.load('NumberFormatException').forInputString$S(s); +}}, 1); + + +})(Long); + +Long.toUnsignedString$J=Long.toUnsignedString$J$I = function(i,r) { + if (i >= 0) + return Long.toString$J$I(i,r || 10); + switch (r || 10) { + case 2: + return Long.toBinaryString$J(i); + case 4: + return Long.$s(j,4,1) + case 8: + return Long.toOctalString$J(i); + case 16: + return Long.toHexString$J(i); + case 32: + default: + return Long.$s(i,r,1); + } +}; +Long.sum$J$J = Long.$add; +Long.toHexString$J=function(j) { return Long.$s(j,16,1)}; +Long.toOctalString$J=function(j) { return Long.$s(j,8,1)}; +Long.toBinaryString$J=function(j) { return Long.$s(j,2,1)}; + +var bi; +Long.toUnsignedBigInteger$J = function(i) { + bi || (bi=(Clazz.load("java.math.BigInteger"), Clazz.new_(java.math.BigInteger.c$$S,["18446744073709551616"]))); + return (i >= 0 ? bi.valueOf$J(i) : bi.valueOf$J(i).add$java_math_BigInteger(bi)); +} + +Clazz._setDeclared("java.lang.Short", java.lang.Short = Short = function(){ +if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); +}); +decorateAsNumber(Short, "Short", "short", "H", sHCOffset); + + +var minShort = Short.MIN_VALUE = Short.prototype.MIN_VALUE = -32768; +var maxShort = Short.MAX_VALUE = Short.prototype.MAX_VALUE = 32767; +Short.SIZE=Short.prototype.SIZE=16; + +m$(Short,"c$", function(v){ // SwingJS only -- for new Integer(3) + v || v == null || (v = 0); + if (typeof v != "number") + v = Short.parseShort$S$I(v, 10); + this.valueOf=function(){return v;}; + }, 1); + + +m$(Short, "c$$H", function(v){ + this.valueOf=function(){return v;}; +}, 1); + + +m$(Short,"c$$S", +function(v){ + var v = Short.parseShort$S$I(v, 10); + this.valueOf=function(){return v;}; +}, 1); + + +m$(Short,"valueOf$S", +function(s){ + return Short.valueOf$S$I(s, 10); +}, 1); + +m$(Short,"valueOf$S$I", +function(s, radix){ + return Short.valueOf$H(Short.parseShort$S$I(s, radix)); +}, 1); + +m$(Short,"valueOf$H", +function(i){ + var v = getCachedNumber(i, shorts, Short, "c$$H"); + return (v ? v : Clazz.new_(Short.c$$H, [i])); +}, 1); + + +m$(Short,"parseShort$S", +function(s){ + return parseIntLimit(s, false, minShort, maxShort); +}, 1); + +m$(Short,"parseShort$S$I", +function(s,radix){ + return parseIntLimit(s, radix, minShort, maxShort); +}, 1); + + +Short.toString = Short.toString$H = Short.toString$H$I = Short.prototype.toString = function (i,radix) { + switch(arguments.length) { + case 2: + return i.toString(radix); + case 1: + return "" +i; + case 0: + return (this===Short ? "class java.lang.Short" : ""+this.valueOf()); + } +}; + + +Short.toUnsignedInt$H = Short.toUnsignedLong$H = function (i) { + return (i < 0 ? i + 0x10000 : i); +}; + +m$(Short, "decode$S", +function(n){ + if (isNaN(n = Integer.decodeRaw$S(n)) || n < -32768|| n > 32767) + throw Clazz.new_(NumberFormatException.c$$S, ["Invalid Short"]); + return Clazz.new_(Short.c$$H, [n]); +}, 1); + + +m$(Short, "equals$O", function(s){ + return (s instanceof Short) && s.valueOf()==this.valueOf(); +}); + +m$(Short, "$box$", function(v) { + return Short.valueOf$H(v.shortValue$()); +}); + + +Clazz._setDeclared("Byte", java.lang.Byte=Byte=function(){ +if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); +}); +decorateAsNumber(Byte,"Byte", "byte", "B", bHCOffset); + +// Byte.serialVersionUID=Byte.prototype.serialVersionUID=-7183698231559129828; +var minByte = Byte.MIN_VALUE=Byte.prototype.MIN_VALUE=-128; +var maxByte = Byte.MAX_VALUE=Byte.prototype.MAX_VALUE=127; +Byte.SIZE=Byte.prototype.SIZE=8; + +m$(Byte,"c$", function(v){ // SwingJS only -- for new Integer(3) + v || v == null || (v = 0); + if (typeof v != "number") + v = Byte.parseByte$S$I(v, 10); + this.valueOf=function(){return v;}; + }, 1); + + +m$(Byte, "c$$B", function(v){ + this.valueOf=function(){return v;}; +}, 1); + +m$(Byte,"c$$S", +function(v){ + var v = Byte.parseByte$S$I(v, 10); + this.valueOf=function(){return v;}; +}, 1); + + +m$(Byte,"valueOf$S", +function(s){ + return Byte.valueOf$S$I(s, 10); +}, 1); + +m$(Byte,"valueOf$S$I", +function(s, radix){ + return Byte.valueOf$B(Byte.parseByte$S$I(s, radix)); +}, 1); + +m$(Byte,"valueOf$B", +function(i){ + var v = getCachedNumber(i, bytes, Byte, "c$$B"); + return v; +}, 1); + + +Byte.toString=Byte.toString$B=Byte.toString$B$I=Byte.prototype.toString=function(i,radix){ + switch(arguments.length) { + case 2: + return i.toString(radix); + case 1: + return "" +i; + case 0: + return (this===Byte ? "class java.lang.Byte" : ""+this.valueOf()); + } +}; + +m$(Byte,"parseByte$S", + function(s){ + return parseIntLimit(s, false, minByte, maxByte); + }, 1); + +m$(Byte,"parseByte$S$I", + function(s,radix){ + return parseIntLimit(s, radix, minByte, maxByte); + }, 1); + +Byte.toString=Byte.toString$B=Byte.toString$B$I=Byte.prototype.toString=function(i,radix){ + switch(arguments.length) { + case 2: + return i.toString(radix); + case 1: + return "" +i; + case 0: + return (this===Byte ? "class java.lang.Byte" : ""+this.valueOf()); + } +}; + + +m$(Byte, ["valueOf$S","valueOf$B","valueOf$S$I"], +function (s,radix) { + return Clazz.new_(Byte.c$, [s, radix||10]); +}, 1); + +m$(Byte,"equals$O", +function(s){ +return (s instanceof Byte) && s.valueOf()==this.valueOf(); +}); + +m$(Byte, "$box$", function(v) { + return Byte.valueOf$B(v.byteValue$()); +}); + +Byte.toUnsignedInt$B = Byte.toUnsignedLong$B = function (i) { + return (i < 0 ? i + 0x100 : i); +}; + +m$(Byte,"decode$S", +function(n){ + if (isNaN(n = Integer.decodeRaw$S(n)) || n < -128|| n > 127) + throw Clazz.new_(NumberFormatException.c$$S, ["Invalid Byte"]); + return Clazz.new_(Byte.c$$B, [n]); +}, 1); + +Clazz._floatToString = function(f) { + if (f === 0) { + return (1/f == -Infinity ? "-0.0" : "0.0"); + } + var check57 = (Math.abs(f) >= 1e-6 && Math.abs(f) < 1e-3); + if (check57) + f/=1e7; + var s = (""+f).replace('e','E'); + if (s.indexOf(".") < 0 && s.indexOf("Inf") < 0 && s.indexOf("NaN") < 0) { + if(s.indexOf('E') < 0) + s += ".0"; + else { + s = s.replace('E', '.0E'); + } + } + if (check57) { + s = s.substring(0, s.length - 2) + (parseInt(s.substring(s.length - 2)) - 7); + s = s.replace(".0000000000000001",".0"); + } + return s; +} + +Clazz._setDeclared("Float", java.lang.Float=Float=function(){ +if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); +}); +decorateAsNumber(Float,"Float", "float", "F"); + +var maxFloat = 3.4028235E38; +var minFloat = -3.4028235E38; + +m$(Float,"c$", function(v){ + v || v == null || v != v || (v == 0) || (v = 0); + if (typeof v != "number") + v = Float.parseFloat$S(v); + this.valueOf=function(){return v;} + }, 1); + +m$(Float, "c$$F", function(v){ + this.valueOf=function(){return v;}; +}, 1); + +m$(Float, "c$$S", function(v){ + v = Float.parseFloat$S(v); + this.valueOf=function(){return v;} +}, 1); + +m$(Float, "c$$D", function(v){ + v || v != v || (v == 0) || (v = 0); + v = (v < minFloat ? -Infinity : v > maxFloat ? Infinity : v); + this.valueOf=function(){return v;} +}, 1); + +Float.toString=Float.toString$F=Float.prototype.toString=function(){ +if(arguments.length!=0){ +return Clazz._floatToString(arguments[0]); +}else if(this===Float){ +return"class java.lang.Float"; +} +return Clazz._floatToString(this.valueOf()); +}; + +var a32, i32, a64, i64; + +var geti32 = function() { + return i32 || (a32 = new Float32Array(1), i32 = new Int32Array(a32.buffer)); +} +var geta32 = function() { + geti32(); + return a32; +} + +geti64 = function() { + return i64 || (a64 = new Float64Array(1), i64 = new Uint32Array(a64.buffer)); +} +geta64 = function() { + geti64(); + return a64; +} + +Float.floatToIntBits$F = function(f) { + return Float.floatToRawIntBits$F(f); +} + +Float.floatToRawIntBits$F = function(f) { + geta32()[0] = f; + return i32[0]; +} + +Float.intBitsToFloat$I = function(i) { + geti32()[0] = i; + return a32[0]; +} + +Float.serialVersionUID=Float.prototype.serialVersionUID=-2671257302660747028; +Float.MIN_VALUE=Float.prototype.MIN_VALUE=1.4e-45; +Float.MAX_VALUE=Float.prototype.MAX_VALUE=3.4028235e+38; +Float.NEGATIVE_INFINITY=Float.prototype.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY; +Float.POSITIVE_INFINITY=Float.prototype.POSITIVE_INFINITY = Number.POSITIVE_INFINITY; +Float.NaN=Number.NaN; + +m$(Float,"parseFloat$S", +function(s){ + var v = Double.parseDouble$S(s); + return (v < minFloat ? -Infinity : v > maxFloat ? Infinity : v); +}, 1); + +m$(Float,"valueOf$S", +function(s){ +return Clazz.new_(Float.c$$S, [s]); +}, 1); + + +m$(Float,["longValue$","longValue"],function(){return Math.floor(this.valueOf());}); + +m$(Float,"valueOf$D", +function(i){ +return Clazz.new_(Float.c$$F, [i < minFloat ? -Infinity : i > maxFloat ? Infinity : i]); +}, 1); + +m$(Float,"valueOf$F", +function(i){ +return Clazz.new_(Float.c$$F, [i]); +}, 1); + +m$(Float,"isNaN$F", +function(num){ +return isNaN(num); +}, 1); + +m$(Float,"isNaN$", +function(){ +return isNaN(this.valueOf()); +}); + +m$(Float,"isInfinite$F", +function(num){ +return num == num && !Number.isFinite(num); +}, 1); + +m$(Float,"isInfinite$", +function(){ + var v = this.valueOf(); +return v == v && !Number.isFinite(this.valueOf()); +}); + +m$(Float,"equals$O", +function(s){ +return (s instanceof Float) && s.valueOf()==this.valueOf(); +}); + +m$(Float, "$box$", function(v) { + return Float.valueOf$F(v.floatValue$()); +}); + +Clazz._setDeclared("Double", java.lang.Double=Double=function(){ + if (typeof arguments[0] == "number") { + this.c$$D(arguments[0]); + } else if (arguments[0] === null || typeof arguments[0] != "object") { + this.c$(arguments[0]); + } +}); +decorateAsNumber(Double,"Double", "double", "D"); + +Double.serialVersionUID=Double.prototype.serialVersionUID=-9172774392245257468; +Double.MIN_VALUE=Double.prototype.MIN_VALUE=4.9e-324; +Double.MAX_VALUE=Double.prototype.MAX_VALUE=1.7976931348623157e+308; +Double.NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY; +Double.POSITIVE_INFINITY=Number.POSITIVE_INFINITY; +Double.NaN=Number.NaN; +// Double.TYPE=Double.prototype.TYPE=Double; + +Double.toString=Double.toString$D=Double.prototype.toString=function(){ +if(arguments.length!=0){ +return Clazz._floatToString(arguments[0]); +}else if(this===Double){ +return"class java.lang.Double"; +} +return Clazz._floatToString(this.valueOf()); +}; + +m$(Double, "c$$D", function(v){ + v || v != v || (v == 0) || (v = 0); + this.valueOf=function(){return v;}; +}, 1); + +m$(Double,"c$", function(v){ + // -0 here becomes 0, from Double.valueOf(d) + v || v == null || v != v || (v = 0); + if (typeof v != "number") + v = Double.parseDouble$S(v); + this.valueOf=function(){return v;} +}, 1); + +m$(Double, ["c$$S"], function(v){ +v || v == null || (v == 0) || (v = 0); +if (typeof v != "number") + v = Double.parseDouble$S(v); +this.valueOf=function(){return v;}; +}, 1); + +Double.prototype.isNaN$ = Float.prototype.isNaN$; +Double.isNaN$D = Double.prototype.isNaN$D = Float.isNaN$F; + +Float.prototype.hashCode$ = function() {this._hashcode || (this._hashcode = new String("F\u79d8" + this.valueOf()).hashCode$())} +Double.prototype.hashCode$ = function() {this._hashcode || (this._hashcode = new String("D\u79d8" + this.valueOf()).hashCode$())} +Double.isInfinite$D = Double.prototype.isInfinite$D = Float.isInfinite$F; +Double.prototype.isInfinite$ = Float.prototype.isInfinite$; + +m$(Double,"parseDouble$S", +function(s){ +if(s == null) { + throw Clazz.new_(NumberFormatException.c$$S, ["null"]); +} +if(s.length == 0) { + throw Clazz.new_(NumberFormatException.c$$S, ["empty String"]); +} +if (s.indexOf("NaN") >= 0) + return NaN; +var v=Number(s); +if(isNaN(v)){ +throw Clazz.new_(NumberFormatException.c$$S, ["Not a Number : "+s]); +} +return v; +}, 1); + +m$(Double,["doubleToRawLongBits$D", "doubleToLongBits$D"], +function(d){ + geta64()[0] = d; + return toLongI2(i64[0], i64[1]); +}, 1); + +m$(Double,"valueOf$S", +function(v){ +return Clazz.new_(Double.c$$S, [v]); +}, 1); + +m$(Double,"valueOf$D", +function(v){ +return Clazz.new_(Double.c$, [v]); +}, 1); + +// Double.prototype.equals = +m$(Double,"equals$O", +function(s){ +return (s instanceof Double) && s.valueOf()==this.valueOf(); +}); + +m$(Double, "$box$", function(v) { + return Double.valueOf$D(v.doubleValue$()); +}); + + +Clazz._setDeclared("Boolean", +Boolean = java.lang.Boolean = Boolean || function(){ +if (arguments[0] === null || typeof arguments[0] != "object")this.c$(arguments[0]); +}); + +extendObject(Boolean); + +Boolean.__CLASS_NAME__="Boolean"; +addInterface(Boolean,[java.io.Serializable,java.lang.Comparable]); +setJ2STypeclass(Boolean, "boolean", "Z"); +// extendPrototype(Boolean, true, false); +Boolean.serialVersionUID=Boolean.prototype.serialVersionUID=-3665804199014368530; + +m$(Boolean, ["c$", "c$$S"], +function(s){ + var b = ((typeof s == "string" ? Boolean.toBoolean(s) : s) ? true : false); + this.valueOf=function(){return b;}; +}, 1); + +m$(Boolean, "c$$Z", function(v){ + this.valueOf=function(){return v;}; + }, 1); + + +Boolean.TRUE=Boolean.prototype.TRUE=Clazz.new_(Boolean.c$$Z, [true]); +Boolean.FALSE=Boolean.prototype.FALSE=Clazz.new_(Boolean.c$$Z, [false]); +m$(Boolean,"valueOf$S",function(s){ return("true".equalsIgnoreCase$S(s)?Boolean.TRUE:Boolean.FALSE);}, 1); + +// the need is to have new Boolean(string), but that won't work with native +// Boolean +// so instead we have to do a lexical switch from "new Boolean" to +// "Boolean.from" +// note no $ here + +m$(Boolean,"valueOf$Z",function(b){ return(b?Boolean.TRUE:Boolean.FALSE);}, 1); + + +// encoded by the transpiler for new Boolean(boolean); NOT equivalent to +// Boolean.TRUE or Boolean.FALSE +m$(Boolean,"from", +function(name){ +return Clazz.new_(Boolean.c$$Z, [Boolean.toBoolean(name)]); +}, 1); + +m$(Boolean,"getBoolean$S", +function(name){ +var result=false; +try{ +result=Boolean.toBoolean(System.getProperty$S(name)); +}catch(e){ +if(Clazz.instanceOf(e,IllegalArgumentException)){ +}else if(Clazz.instanceOf(e,NullPointerException)){ +}else{ +throw e; +} +} +return result; +}, 1); + +m$(Boolean,"parseBoolean$S", function(s){return Boolean.toBoolean(s);}, 1); + +m$(Boolean,"toBoolean", +function(name){ +return(typeof name == "string" ? name.equalsIgnoreCase$S("true") : !!name); +}, 1); + + +m$(Boolean,["$c","booleanValue","booleanValue$"], function(){ return this.valueOf(); }); + +m$(Boolean,"compare$Z$Z", function(a,b){return(a == b ? 0 : a ? 1 : -1);}, 1); + +m$(Boolean,["compareTo$Boolean","compareTo$O"], + function(b){ + return(b.valueOf() == this.valueOf() ? 0 : this.valueOf() ? 1 : -1); + }); + +// Boolean.prototype.equals = + m$(Boolean,"equals$O", + function(obj){ + return obj instanceof Boolean && this.booleanValue()==obj.booleanValue(); + }); + +m$(Boolean,"hashCode$", function(){ return this.valueOf()?1231:1237;}); +m$(Boolean,"hashCode$Z", function(b){ return b?1231:1237;}, 1); + +m$(Boolean,"logicalAnd$Z$Z", function(a,b){return(a && b);}, 1); +m$(Boolean,"logicalOr$Z$Z", function(a,b){return(a || b);}, 1); +m$(Boolean,"logicalXor$Z$Z", function(a,b){return !!(a ^ b);}, 1); + + +m$(Boolean,"toString",function(){return this.valueOf()?"true":"false";}); +m$(Boolean,"toString$Z",function(b){return "" + b;}, 1); + + +Clazz._Encoding={ + UTF8:"utf-8", // EF BB BF + UTF16:"utf-16", // FF FE (LE) + ASCII:"ascii" +}; + +(function(E) { + + var textDecoder = (self.TextDecoder && new TextDecoder() || null); + +E.guessEncoding=function(str){ +return ((str.charCodeAt(0)&0xFF)==0xEF&&(str.charCodeAt(1)&0xFF)==0xBB&&(str.charCodeAt(2)&0xFF)==0xBF ? E.UTF8 + : (str.charCodeAt(0)&0xFF)==0xFF&&(str.charCodeAt(1)&0xFF)==0xFE ? E.UTF16 // LE + : E.ASCII); +}; + +E.guessEncodingArray=function(a, offset){ +return ((a[offset]&0xFF)==0xEF&&(a[offset + 1]&0xFF)==0xBB&&(a[offset + 2]&0xFF)==0xBF ? E.UTF8 + : (a[offset + 0]&0xFF)==0xFF&&(a[offset + 1]&0xFF)==0xFE ? E.UTF16 : E.ASCII); +}; + +E.readUTF8Array=function(a, offset, length){ + // a will be an Int8Array, UTF8 only + // TextDecoder will accept a BOM or not. Java doesn't + var encoding=E.guessEncodingArray(a, offset); + var startIdx=0; + if(encoding==E.UTF8){ + startIdx=3; + }else if(encoding==E.UTF16){ + startIdx=2; + } + if (textDecoder) { + offset += startIdx; + length -= startIdx; + if (offset == 0 && length == a.length) + return textDecoder.decode(a); + var arr=new Uint8Array(length); + for(var i = 0; i < length; i++){ + arr[i] = a[offset + i]; + } + // Java needs to see the 0xFEFF byte mark + var s = textDecoder.decode(arr); + return (startIdx ? '\ufeff' + s : s); + } +// IE only. I don't know where this comes from. Is it Java? +var arrs=new Array(); +for(var i=offset + startIdx, endIdx = offset + length; i < endIdx; i++){ +var charCode=a[i]; +if(charCode<0x80){ +arrs[arrs.length]=String.fromCharCode(charCode); +}else if(charCode>0xc0&&charCode<0xe0){ +var c1=charCode&0x1f; +var c2=a[++i]&0x3f; +var c=(c1<<6)+c2; +arrs[arrs.length]=String.fromCharCode(c); +}else if(charCode>=0xe0){ +var c1=charCode&0x0f; +var c2=a[++i]&0x3f; +var c3=a[++i]&0x3f; +var c=(c1<<12)+(c2<<6)+c3; +arrs[arrs.length]=String.fromCharCode(c); +} +} +return arrs.join(''); +}; + + +E.convert2UTF8=function(str){ +var encoding=this.guessEncoding(str); +var startIdx=0; +if(encoding==E.UTF8){ +return str; +}else if(encoding==E.UTF16){ +startIdx=2; +} + +var offset=0; +var arrs=new Array(offset+str.length-startIdx); + +for(var i=startIdx;i>6); +var c2=0x80+(charCode&0x003f); +arrs[offset+i-startIdx]=String.fromCharCode(c1)+String.fromCharCode(c2); +}else{ +var c1=0xe0+((charCode&0xf000)>>12); +var c2=0x80+((charCode&0x0fc0)>>6); +var c3=0x80+(charCode&0x003f); +arrs[offset+i-startIdx]=String.fromCharCode(c1)+String.fromCharCode(c2)+String.fromCharCode(c3); +} +} +return arrs.join(''); +}; +if(!String.__PARAMCODE){ + +String.__PARAMCODE = "S"; + +Clazz._setDeclared("String", java.lang.String=String); + +extendObject(String, EXT_NO_TOSTRING); + +addInterface(String,[java.io.Serializable,CharSequence,Comparable]); + +String.serialVersionUID=String.prototype.serialVersionUID=-6849794470754667710; + +var formatterClass; + +String.format$S$OA = function(format, args) { + if (!formatterClass) + formatterClass = Clazz._4Name("java.util.Formatter", null, null, true); + var f = new formatterClass(); + return f.format$S$OA.apply(f,arguments).toString(); + }; + + // Java8 + String.lastIndexOf$CA$I$I$S$I = function(source, sourceOffset, sourceCount, target, fromIndex) { + return C$.lastIndexOf$CA$I$I$CA$I$I$I(source, sourceOffset, sourceCount, target.value, 0, target.value.length, fromIndex); + }; + + // Java8 + String.lastIndexOf$CA$I$I$CA$I$I$I = function(source, sourceOffset, sourceCount, target, targetOffset, targetCount, fromIndex) { + var rightIndex=sourceCount - targetCount; + if (fromIndex < 0) { + return -1; + }if (fromIndex > rightIndex) { + fromIndex=rightIndex; + }if (targetCount == 0) { + return fromIndex; + }var strLastIndex=targetOffset + targetCount - 1; + var strLastChar=target[strLastIndex]; + var min=sourceOffset + targetCount - 1; + var i=min + fromIndex; + searching : while (true){ + while (i >= min && source[i] != strLastChar ){ + i--; + } + if (i < min) { + return -1; + }var j=i - 1; + var start=j - (targetCount - 1); + var k=strLastIndex - 1; + while (j > start){ + if (source[j--] != target[k--]) { + i--; + continue searching; + }} + return start - sourceOffset + 1; + } + }; + + + String.CASE_INSENSITIVE_ORDER = { + compare$O$O: function(s1, s2){ + if(s1==null || s2 == null) + throw new NullPointerException(); + if(s1==s2) return 0; + var s1=s1.toUpperCase(); + var s2=s2.toUpperCase(); + if(s1==s2) return 0; + var s1=s1.toLowerCase(); + var s2=s2.toLowerCase(); + return (s1==s2 ? 0 : s1 > s2 ? 1 : -1); + } + } + +String.CASE_INSENSITIVE_ORDER.compare$S$S = String.CASE_INSENSITIVE_ORDER.compare$O$O; + +CharSequence.$defaults$(String); + +;(function(sp) { + + // Java-11 + +sp.isBlank$ = function() { + return this.indexOfNonWhitespace$() == this.length$(); +} + +sp.lines$ = function() { + return CharSequence.lines$S(this); +} + +sp.indexOfNonWhitespace$ = function() { + return this.length - this.stripLeading$().length; +} + +//sp.chars$ is implemented as CharSequence.prototype.chars$ +//sp.codePoints$ is implemented as = CharSequence.prototype.codePoints$ + +sp.repeat$I = function(count) { + if (count < 0) { + throw new IllegalArgumentException("count is negative: " + count); + } + if (count == 1) { + return this; + } + var len = this.length; + if (len == 0 || count == 0) { + return ""; + } + var s = this; + for (var i = 1; i < count; i++) { + s += this; + } + return s; +} + +sp.strip$ = function() { return this.trim(); } + +sp.stripLeading$ = function() { return this.trimStart ? this.trimStart() : this.trimLeft(); } + +sp.stripTrailing$ = function() { return this.trimEnd ? this.trimEnd() : this.trimRight(); } + + // +sp.compareToIgnoreCase$S = function(str) { return String.CASE_INSENSITIVE_ORDER.compare$S$S(this, str);} + +sp.replace$ = function(c1,c2){ + if (c1 == c2 || this.indexOf(c1) < 0) return "" + this; + if (c1.length == 1) { + if ("\\$.*+|?^{}()[]".indexOf(c1) >= 0) + c1 = "\\" + c1; + } else { + c1=c1.replace(/([\\\$\.\*\+\|\?\^\{\}\(\)\[\]])/g,function($0,$1){return "\\"+$1;}); + } + var pt = c2.indexOf("$"); + var is$ = (pt >= 0 && pt < c2.length - 1); + if (is$) + c2 = c2.replaceAll("$", "\uFFFD"); + var ret = this.replace(new RegExp(c1,"gm"),c2); + if (is$) + ret = ret.replaceAll("\uFFFD", "$"); + return ret; +}; + +// fastest: +sp.replaceAll$=sp.replaceAll$S$S=sp.replaceAll$CharSequence$CharSequence=function(exp,str){ +return this.replace(newRegExp(exp,"gm"),str); +}; +sp.replaceFirst$S$S=function(exp,str){ +return this.replace(newRegExp(exp,"m"),str); +}; +sp.matches$S=function(exp){ +if(exp!=null){ +exp="^("+exp+")$"; +} +var regExp=newRegExp(exp,"gm"); +var m=this.match(regExp); +return m!=null&&m.length!=0; +}; + +sp.regionMatches$I$S$I$I=function(toffset,other,ooffset,len){ + return this.regionMatches$Z$I$S$I$I(false,toffset,other,ooffset,len); +} + +sp.regionMatches$Z$I$S$I$I=function(ignoreCase,toffset,other,ooffset,len){ +var to=toffset; +var po=ooffset; + +if((ooffset<0)||(toffset<0)||(toffset>this.length-len)|| +(ooffset>other.length-len)){ +return false; +} +var s1=this.substring(toffset,toffset+len); +var s2=other.substring(ooffset,ooffset+len); +if(ignoreCase){ +s1=s1.toLowerCase(); +s2=s2.toLowerCase(); +} +return s1==s2; +}; + +var newRegExp = function(regex, flags) { + if (regex.indexOf("\\Q") >= 0 || regex.indexOf("(?") == 0) + return Clazz.loadClass("java.util.regex.Pattern").getJSRegex$S$S(regex, flags); + return new RegExp(regex, flags); +} +sp.split$S=sp.split$S$I=function(regex,limit){ +var arr; +if (!limit && regex == " ") { + arr = this.split(" "); +} else if(limit && limit > 0){ + if(limit == 1){ + arr = [this]; + } else { + var regExp=newRegExp("("+regex+")","gm"); + var count=1; + var s=this.replace(regExp,function($0,$1){ + count++; + if(count==limit){ + return"@@_@@"; + } + else if(count>limit){ + return $0; + }else{ + return $0; + } + }); + regExp=new RegExp(regex,"gm"); + arr=this.split(regExp); + if(arr.length>limit){ + arr[limit-1]=s.substring(s.indexOf("@@_@@")+5); + arr.length=limit; + } + } +}else{ + arr = this.split(newRegExp(regex,"gm")); +} +while (arr[arr.length - 1] === "") + arr.pop(); +return Clazz.array(String, -1, arr); +}; + +var sn=function(s, prefix,toffset){ + var to=toffset; + var po=0; + var pc=prefix.length; + + if((toffset<0)||(toffset>s.length-pc)){ + return false; + } + while(--pc>=0){ + if(s.charAt(to++)!=prefix.charAt(po++)){ + return false; + } + } + return true; +}; + +sp.startsWith$S=sp.startsWith$S$I=function(prefix){ +if(arguments.length==1){ +return sn(this,arguments[0],0); +}else if(arguments.length==2){ +return sn(this,arguments[0],arguments[1]); +}else{ +return false; +} +}; + +sp.endsWith$S=function(suffix){ +return sn(this, suffix,this.length-suffix.length); +}; + +sp.equals$O = function(anObject){ +return this.valueOf()==anObject; +}; + +sp.equalsIgnoreCase$S=function(anotherString){ +return(anotherString==null)?false:(this==anotherString +||this.toLowerCase()==anotherString.toLowerCase()); +}; + + +sp.hash=0; + +sp.hashCode$=function(){ +var h=this.hash; +if(h==0){ +var off=0; +var len=this.length; +for(var i=0;is.length){ + throw new StringIndexOutOfBoundsException(srcEnd); + } + if(srcBegin>srcEnd){ + throw new StringIndexOutOfBoundsException(srcEnd-srcBegin); + } + if(dst==null){ + throw new NullPointerException(); + } + for(var i=0;i255){ +arrs[ii]=0x1a; +arrs[ii+1]=c&0xff; +arrs[ii+2]=(c&0xff00)>>8; +ii+=2; +}else{ +arrs[ii]=c; +} +ii++; +} +return Clazz.array(Byte.TYPE, -1, arrs); +}; + +sp.contains$S = function(a) {return this.indexOf(a) >= 0} // bh added +sp.compareTo$ = sp.compareTo$S = sp.compareTo$O = function(a){return this > a ? 1 : this < a ? -1 : 0} // bh + // added + +sp.toCharArray$=function(){ + var result = this.split(""); + return setArray(result, Character.TYPE, "CA", -1); +}; + +String.valueOf$ = String.valueOf$Z = String.valueOf$C = String.valueOf$CA + = String.valueOf$CA$I$I = String.valueOf$D = String.valueOf$F + = String.valueOf$I = String.valueOf$J = String.valueOf$O = +function(o){ +if(o=="undefined"){ +return String.valueOf(); +} +if(o instanceof Array){ +if(arguments.length==1){ +return o.join(''); +}else{ +var off=arguments[1]; +var len=arguments[2]; +var oo=new Array(len); +for(var i=0;i cs.length$() && this.indexOf(cs.toString()) > -1); +}; + +sp.contentEquals$CharSequence=function(cs){ +if(cs==null) + throw new NullPointerException(); +if(this == cs) + return true; +if(this.length!=cs.length$()) + return false; +var v=cs.getValue(); +var n=this.length; +while(n-- >= 0){ + if(this.charCodeAt(n)!=v[n]){ + return false; + } +} +return true; +}; + +sp.concat$S = function(s){ +if(s==null){ +throw new NullPointerException(); +} +return this.concat(s); +}; + +sp.isEmpty$ = function() { + return this.valueOf().length == 0; +} + +sp.indexOf$S = sp.indexOf$S$I = sp.indexOf; +sp.lastIndexOf$S = sp.lastIndexOf; + +sp.indexOf$I = function(c){ + return this.indexOf(typeof c == "string" ? c : String.fromCodePoint(c)); +}; + +sp.indexOf$I$I = function(c, first) { + return this.indexOf(typeof c == "string" ? c : String.fromCodePoint(c), first); +} + +sp.lastIndexOf$S = sp.lastIndexOf$S$I = sp.lastIndexOf; + +sp.lastIndexOf$I = function(c){ + return this.lastIndexOf(typeof c == "string" ? c : String.fromCodePoint(c)); +}; + +sp.lastIndexOf$I$I = function(c, last) { + return this.lastIndexOf(typeof c == "string" ? c : String.fromCodePoint(c), last); +} + +sp.intern$=function(){ +return this.valueOf(); +}; + +String.copyValueOf$S=String.copyValueOf$S$I$I=sp.copyValueOf=function(){ + if(arguments.length==1){ + return String.instantialize(arguments[0]); + }else{ + return String.instantialize(arguments[0],arguments[1],arguments[2]); + } +}; + +sp.$c = function(){return this.charCodeAt(0)}; + +// covers for same functions in JavaScript +sp.codePointAt$I = (sp.codePointAt || sp.charCodeAt); // MSIE only +sp.charCodeAt$I = sp.charCodeAt; +sp.charAt$I = sp.charAt; +sp.substring$I = sp.substring$I$I = sp.subSequence$I$I = sp.substring; +sp.replace$C$C = sp.replace$CharSequence$CharSequence = sp.replace$; +sp.toUpperCase$ = sp.toUpperCase; +sp.toLowerCase$ = sp.toLowerCase; +sp.toLowerCase$java_util_Locale = sp.toLocaleLowerCase ? function(loc) {loc = loc.toString(); var s = this.valueOf(); return (loc ? s.toLocaleLowerCase(loc.replace(/_/g,'-')) : s.toLocaleLowerCase()) } : sp.toLowerCase; +sp.toUpperCase$java_util_Locale = sp.toLocaleUpperCase ? function(loc) {loc = loc.toString(); var s = this.valueOf(); return (loc ? s.toLocaleUpperCase(loc.replace(/_/g,'-')) : s.toLocaleUpperCase()) } : sp.toUpperCase; +sp.length$ = function() {return this.length}; +sp.trim$ = function() { + var s = this.trim(); + var j; + if (s == "" || s.charCodeAt(j = s.length - 1) > 32 && s.charCodeAt(0) > 32) return s; + var i = 0; + while (i <= j && s.charCodeAt(i) <= 32)i++; + while (j > i && s.charCodeAt(j) <= 32)j--; + return s.substring(i, ++j); +}; + + +// toString is always unqualified, and it is unnecessary for String + + +})(String.prototype); + +// Note that of all these constructors, only new String("xxx") and new +// String(new String()) +// return actual JavaScript String objects (as of 3.2.9.v1) + +String.instantialize=function(){ +var x=arguments[0]; +switch (arguments.length) { +case 0: + return new String(); +case 1: + // String(byte[] bytes) + // String(char[] value) + // String(StringBuffer buffer) + // String(StringBuilder builder) + // String(String original) + if (x.__BYTESIZE){ + return x.length == 0 ? "" : E.readUTF8Array(x, 0, x.length).toString(); + } + if (x instanceof Array){ + return x.length == 0 ? "" : typeof x[0]=="number" ? E.readUTF8Array(new Uint8Array(x), 0, x.length).toString() : x.join(''); + } + // raw JavaScript string unless new String(string) + return (typeof x == "string" || x instanceof String ? new String(x) : x.toString()); +case 2: + // String(byte[] ascii, int hibyte) + // String(char[] value, boolean share) ??? + // String(byte[] bytes, Charset charset) + // String(byte[] bytes, String charsetName) + + var a1=arguments[1]; + return (typeof a1=="number" ? String.instantialize(x,a1,0,x.length) + : typeof a1 == "boolean" ? x.join('') + : String.instantialize(x,0,x.length,a1.toString())); +case 3: + // String(byte[] bytes, int offset, int length) + // String(char[] value, int offset, int count) + // String(int[] codePoints, int offset, int count) + + var bytes=x; + var offset=arguments[1]; + var length=arguments[2]; + if(offset<0||length+offset>bytes.length){ + throw new IndexOutOfBoundsException(); + } + if (length == 0) + return ""; + var arr=new Array(length); + var isChar=!!bytes[offset].length; + if(isChar){ + for(var i=0;i= 0) + return E.readUTF8Array(bytes,offset,length).toString(); + cs = Clazz.loadClass("java.nio.charset.Charset").forName$S(cs); + if (!cs) + throw new java.io.UnsupportedEncodingException(); + } + return cs.decode$BA$I$I(bytes, offset, length).toString(); + } + var count=arguments[3]; + var offset=arguments[2]; + var hibyte=arguments[1]; + var value=new Array(count); + if(hibyte==0){ + for(var i=count;i-->0;){ + value[i]=String.fromCharCode(bytes[i+offset]&0xff); + } + }else{ + hibyte<<=8; + for(var i=count;i-->0;){ + value[i]=String.fromCharCode(hibyte|(bytes[i+offset]&0xff)); + } + } + return value.join(''); +default: + // ???? + var s=""; + for(var i=0;i= 0x1c && c <= 0x20 || c >= 0x9 && c <= 0xd || c == 0x1680 + || c >= 0x2000 && c != 0x2007 && (c <= 0x200b || c == 0x2028 || c == 0x2029 || c == 0x3000)); +}, 1); +m$(C$,"isSurrogate$C", function(c) { + c = c.charCodeAt(0); + return c >= 0xd800 && c < 0xe000; + +}, 1); +m$(C$,"isHighSurrogate$C", function(c) { + c = c.charCodeAt(0); + return c >= 0xd800 && c < 0xdc00; + +}, 1); +m$(C$,"isLowSurrogate$C", function(c) { + c = c.charCodeAt(0); + return c >= 0xdc00 && c < 0xe000; + +}, 1); + +m$(C$,["digit$C$I","digit$I$I"], +function(c,radix){ +var i = (typeof c == "string" ? c.charCodeAt(0) : c); +if(radix >= 2 && radix <= 36){ + if(i < 128){ + var result = -1; + if(48 <= i && i <= 57){ + result = i - 48; + }else if(97 <= i && i <= 122){ + result = i - 87; + }else if(65 <= i && i <= 90){ + result=i-(55); + } + return (result < radix ? result : -1); + } +} +return -1; +}, 1); + +m$(C$,"toString$C", function(c) { + return c; +}, 1); + +m$(C$,"toString", +function(c){ +if (arguments.length == 0) { + if(this===Character){ + return"class java.lang.Character"; + } + var buf=[this.value]; + return String.valueOf$(buf); +} +return String.valueOf$(c); +}, 1); +m$(C$,"charCount$I", function(codePoint){ + return codePoint >= 0x010000 ? 2 : 1; +}, 1); + + +Integer.compare$I$I = +Byte.compare$B$B = +Short.compare$H$H = +Float.compare$F$F = +Double.compare$D$D = function(a,b) { return (a < b ? -1 : a == b ? 0 : 1) }; + +Integer.prototype.objectValue$ = +Byte.prototype.objectValue$ = +Short.prototype.objectValue$ = +Long.prototype.objectValue$ = +Float.prototype.objectValue$ = +Boolean.prototype.objectValue$ = +Double.prototype.objectValue$ = function() {return this.valueOf()}; + +Character.prototype.objectValue$ = function() { return this.value }; + +Character.prototype.intValue$ = function() { return this.value.codePointAt(0) }; + +Integer.min$I$I = Long.min$J$J = Float.min$F$F = Double.min$D$D = function(a,b) { return Math.min(a,b); }; + +Integer.max$I$I = Long.max$J$J = Float.max$F$F = Double.max$D$D = function(a,b) { return Math.max(a,b); }; + +Integer.sum$I$I = Long.sum$J$J = Float.sum$F$F = Double.sum$D$D = function(a,b) { return a + b; }; + + +// TODO: Only asking for problems declaring Date. This is not necessary + +// NOTE THAT java.util.Date, like java.lang.Math, is unqualified by the +// transpiler -- this is NOT necessary + +;(function() { + +Clazz._setDeclared("java.util.Date", java.util.Date=Date); +// Date.TYPE="java.util.Date"; +Date.__CLASS_NAME__="Date"; +addInterface(Date,[java.io.Serializable,java.lang.Comparable]); + +Date.parse$S = Date.parse; + +m$(java.util.Date, ["c$", "c$$S", "c$$J"], function(t) { + this.setTime$J(typeof t == "string" ? Date.parse(t) : t ? t : System.currentTimeMillis$()) +}, 1); + +m$(java.util.Date, ["getClass$", "getClass"], function () { return Clazz.getClass(this); }, 1); + +m$(java.util.Date,["clone$","clone"], +function(){ +return new Date(this.getTime()); +}); + +m$(java.util.Date,["before", "before$java_util_Date"], +function(when){ +return this.getTime()when.getTime(); +}); + +m$(java.util.Date,["equals","equals$O"], +function(obj){ +return Clazz.instanceOf(obj,java.util.Date)&&this.getTime()==(obj).getTime(); +}); +m$(java.util.Date,["compareTo","compareTo$java_util_Date","compareTo$","compareTo$O","compareTo$O"], +function(anotherDate){ +var thisTime=this.getTime(); +var anotherTime=anotherDate.getTime(); +return(thisTime>32)); +}); + +Date.prototype.toString$ = Date.prototype.toString$$ = Date.prototype.toString; +m$(java.util.Date,"toString", +function(){ +var a = this.toString$().split(" "); +// Sun Mar 10 1996 17:05:00 GMT-0600 (Central Daylight Time) -> Sun Mar 10 +// 16:05:00 CST 1996 +return a[0] + " " + a[1] + " " + a[2] + " " + a[4] + " " + a[5] + " " + a[3]; +// return this.toString$().split("(")[0].trim(); +}); +})(); + +var notImplemented = function(why) {return function() {System.err.println(why + " has not been implemented.")}}; + +;(function(dp){ +dp.from$java_time_Instant = notImplemented("Date.from(java.time.Instant)"); +dp.setInstant$ = notImplemented("Date.toInstant()"); + +dp.getDate$ = dp.getDate; +dp.getDay$ = dp.getDay; +dp.getHours$ = dp.getHours; +dp.getMinutes$ = dp.getMinutes; +dp.getMonth$ = dp.getMonth; +dp.getSeconds$ = dp.getSeconds; +dp.getTime$ = dp.getTime; +dp.getTimeZoneOffset$ = dp.getTimeZoneOffset; +dp.getYear$ = dp.getYear; +dp.parse$S = dp.parse; +dp.setDate$I = dp.setDate; +dp.setHours$I = dp.setHours; +dp.setMinutes$I = dp.setMinutes; +dp.setMonth$I = dp.setMonth; +dp.setSeconds$I = dp.setSeconds; +dp.setTime$J = dp.setTime; +dp.setYear$I = dp.setYear; +dp.toGMTString$ = dp.toUTCString || dp.toGMTString; +dp.toLocaleString$ = dp.toLocaleString = dp.toLocaleDateString; +dp.UTC$ = dp.UTC; + + + +})(Date.prototype); + +var printStackTrace = function(e, ps) { + ps.println$O("" + e); + if (e.stackTrace){ + for (var i = 0; i < e.stackTrace.length; i++) { + var t = e.stackTrace[i]; + if (t.nativeClazz == null || !isInstanceOf(t.nativeClazz, Throwable)) { + ps.println$O(t); + } + } + } + if (e.stack) { + var S = e.stack.split("\n"); + for (var i = 0; i < S.length; i++) { + if (S[i].indexOf("__startAppletJS") >= 0) + break; + ps.println$O(S[i]); + } + } +} + +var C$ = Clazz.newClass(java.lang, "Throwable", function () { +Clazz.newInstance(this, arguments); +}, null, java.io.Serializable); + +m$(C$, 'c$', function () { +this.fillInStackTrace$(); +this.detailMessage = this.stack; +this.cause = this; +}, 1); + +m$(C$, 'c$$S', function (message) { +this.fillInStackTrace$(); +this.cause = this; +this.detailMessage = message; +}, 1); + +m$(C$, 'c$$S$Throwable', function (message, cause) { +this.fillInStackTrace$(); +this.detailMessage = message; +this.cause = cause; +}, 1); + +m$(C$, 'c$$Throwable', function (cause) { +this.fillInStackTrace$(); +this.detailMessage = (cause == null ? this.stack : cause.toString ()); +this.cause = cause; +}, 1); + +m$(C$, 'getMessage$', function () {return this.message || this.detailMessage || null}); + +m$(C$, 'getLocalizedMessage$', function () { +return this.getMessage$(); +}); + +m$(C$, 'getCause$', function () { +return (this.cause === this ? null : this.cause); +}); + +m$(C$, 'initCause$Throwable', function (cause) { +if (this.cause !== this) throw Clazz.new_(IllegalStateException.c$$S,["Can't overwrite cause"]); +if (cause === this) throw Clazz.new_(IllegalArgumentException.c$$S,["Self-causation not permitted"]); +this.cause = cause; +return this; +}); + +m$(C$, 'toString', function () { +var s = this.getClass$().getName$(); +var message = this.getLocalizedMessage$(); +return (message != null) ? (s + ": " + message) : s; +}); + +m$(C$, 'getStackTrace$', function () { +return this.stackTrace; +}); + +m$(C$, 'printStackTrace$', function () { + printStackTrace(this, System.err); +}); + +m$(C$, 'printStackTrace$java_io_PrintWriter', function (writer) { + printStackTrace(this, writer); +}); + +m$(C$, ['printStackTrace$java_io_PrintStream','printStackTrace$java_io_PrintWriter'], function (stream) { + printStackTrace(this, stream); +}); + +Clazz.newMeth(C$, 'fillInStackTrace$', function () { +this.stackTrace = Clazz.array(StackTraceElement); +try { +var caller = arguments.callee.caller; +var i = 0; +while (caller.caller && caller.caller.name != "__loadClazz") { + caller = caller.caller; + if (++i > 2 && caller.exClazz || caller == Clazz.load) + break; +} +var superCaller = null; +var callerList = []; +var index = 0; +while (index < 20 && caller != null) { + index++; + var clazzName = null; + var nativeClazz = null; + superCaller = caller; + if (superCaller.exClazz == null) { + if (superCaller.j2sname == "__START_APPLET__") + break; + } else { + nativeClazz = superCaller.exClazz; + } + var st =Clazz.new_(StackTraceElement.c$, [ + ((nativeClazz != null && nativeClazz.__CLASS_NAME__.length != 0) ? + nativeClazz.__CLASS_NAME__ : "anonymous"), + ((superCaller.exName == null) ? "anonymous" : superCaller.exName), + null, -1]); + st.nativeClazz = nativeClazz; + this.stackTrace.push(st); + for (var i = 0; i < callerList.length; i++) { + if (callerList[i] == superCaller) { + // ... stack Information lost as recursive invocation existed ... + var st =Clazz.new_(StackTraceElement.c$, ["lost", "missing", null, -3]); + st.nativeClazz = null; + this.stackTrace.push(st); + index = 100; + break; + } + } + if (superCaller != null) { + callerList.push(superCaller); + } + caller = (superCaller && superCaller.arguments && superCaller.arguments.callee) ? superCaller.arguments.callee.caller : null; +} +} catch (e) {}; + +Clazz.initializingException = false; +return this; +}); + +Clazz.newMeth(C$, 'setStackTrace$StackTraceElementA', function (stackTrace) { +var defensiveCopy = stackTrace.clone$(); +for (var i = 0; i < defensiveCopy.length; i++) if (defensiveCopy[i] == null) throw Clazz.new_(NullPointerException.c$$S,["stackTrace[" + i + "]"]); + +this.stackTrace = defensiveCopy; +}); + +C$=Clazz.newClass(java.lang,"StackTraceElement",function(){ +this.declaringClass=null; +this.methodName=null; +this.fileName=null; +this.lineNumber=0; +},null,java.io.Serializable); + +m$(C$, "c$",function(cls,method,file,line){ +if(cls==null||method==null){ +throw new NullPointerException(); +}this.declaringClass=cls; +this.methodName=method; +this.fileName=file; +this.lineNumber=line; +},1); + +m$(C$,"equals$O", +function(obj){ +if(!(Clazz.instanceOf(obj,StackTraceElement))){ +return false; +}var castObj=obj; +if((this.methodName==null)||(castObj.methodName==null)){ +return false; +}if(!this.getMethodName$().equals(castObj.getMethodName$())){ +return false; +}if(!this.getClassName$().equals(castObj.getClassName$())){ +return false; +}var localFileName=this.getFileName$(); +if(localFileName==null){ +if(castObj.getFileName$()!=null){ +return false; +}}else{ +if(!localFileName.equals(castObj.getFileName$())){ +return false; +}}if(this.getLineNumber$()!=castObj.getLineNumber$()){ +return false; +}return true; +}); +m$(C$,"getClassName$", +function(){ +return(this.declaringClass==null)?"":this.declaringClass; +}); +m$(C$,"getFileName$", +function(){ +return this.fileName; +}); +m$(C$,"getLineNumber$", +function(){ +return this.lineNumber; +}); +m$(C$,"getMethodName$", +function(){ +return(this.methodName==null)?"":this.methodName; +}); +m$(C$,"hashCode$", +function(){ +if(this.methodName==null){ +return 0; +}return this.methodName.hashCode$()^this.declaringClass.hashCode(); +}); +m$(C$,"isNativeMethod$", +function(){ +return this.lineNumber==-2; +}); +m$(C$,"toString", +function(){ +var s = this.getClassName$() + "." + this.getMethodName$(); +if(this.isNativeMethod$()){ + s += "(Native Method)"; +}else{ +var fName=this.getFileName$(); +if(fName==null){ + //s += "(Unknown Source)"; +}else{ +var lineNum=this.getLineNumber$(); +s += '(' + fName; +if(lineNum>=0){ + s += ':' + lineNum; +} + s += ')'; +}}return s; +}); + + +TypeError.prototype.getMessage$ || ( + +SyntaxError.prototype.getMessage$ + = ReferenceError.prototype.getMessage$ + = TypeError.prototype.getMessage$ + = SyntaxError.prototype.getLocalizedMessage$ + = ReferenceError.prototype.getLocalizedMessage$ + = TypeError.prototype.getLocalizedMessage$ + = function(){ return (this.stack ? this.stack : this.message || this.toString()) + (this.getStackTrace ? this.getStackTrace$() : Clazz._getStackTrace())}); + +TypeError.prototype.getStackTrace$ += SyntaxError.prototype.getStackTrace$ += ReferenceError.prototype.getStackTrace$ += function() { return Clazz._getStackTrace() } +TypeError.prototype.printStackTrace$ += SyntaxError.prototype.printStackTrace$ += ReferenceError.prototype.printStackTrace$ += function() { printStackTrace(this,System.err) } +ReferenceError.prototype.printStackTrace$java_io_PrintStream += TypeError.prototype.printStackTrace$java_io_PrintStream += SyntaxError.prototype.printStackTrace$java_io_PrintStream += function(stream){stream.println$S(this + "\n" + this.stack);}; +ReferenceError.prototype.printStackTrace$java_io_PrintWriter += TypeError.prototype.printStackTrace$java_io_PrintWriter += SyntaxError.prototype.printStackTrace$java_io_PrintWriter += function(printer){printer.println$S(this + "\n" + this.stack);}; + +Clazz.Error = Error; + +var declareType = function(prefix, name, clazzSuper, interfacez) { + var cl = Clazz.newClass(prefix, name, null, clazzSuper, interfacez); + if (clazzSuper) + setSuperclass(cl, clazzSuper); + return cl; +}; + +// at least allow Error() by itself to work as before +Clazz._Error || (Clazz._Error = Error); +// setSuperclass(Clazz._Error, Throwable); + +var setEx = function(C$) { + C$.$clinit$ = 1; + m$(C$, "c$", function() { C$.superclazz.c$.apply(this, []);}, 1); + m$(C$, "c$$S", function(detailMessage){C$.superclazz.c$$S.apply(this,[detailMessage]);},1); + m$(C$, "c$$Throwable", function(exception){C$.superclazz.c$$Throwable.apply(this, arguments);}, 1); + m$(C$, "c$$S$Throwable", function(detailMessage,exception){C$.superclazz.c$$S$Throwable.apply(this, arguments); +}, 1); + + return C$; +} + +/* +;(function() { +var C$ = Clazz.newClass(java.lang, "Error", function (){ +return Clazz._Error(); +}, Throwable); +setEx(C$); +})(); +*/ +var newEx = function(prefix, name, clazzSuper) { + return setEx(declareType(prefix, name, clazzSuper)); +} + +newEx(java.lang,"Exception",Throwable); +newEx(java.lang,"Error",Throwable); + +newEx(java.lang,"RuntimeException",Exception); +newEx(java.lang,"IllegalArgumentException",RuntimeException); +newEx(java.lang,"LinkageError",Error); +newEx(java.lang,"VirtualMachineError",Error); +newEx(java.lang,"IncompatibleClassChangeError",LinkageError); + +newEx(java.lang,"AbstractMethodError",IncompatibleClassChangeError); +newEx(java.lang,"ArithmeticException",RuntimeException); +newEx(java.lang,"ArrayStoreException",RuntimeException); +newEx(java.lang,"ClassCircularityError",LinkageError); +newEx(java.lang,"ClassFormatError",LinkageError); +newEx(java.lang,"CloneNotSupportedException",Exception); +newEx(java.lang,"ReflectiveOperationException",Exception); +newEx(java.lang,"IllegalAccessError",IncompatibleClassChangeError); +newEx(java.lang,"IllegalAccessException",ReflectiveOperationException); +newEx(java.lang,"IllegalMonitorStateException",RuntimeException); +newEx(java.lang,"IllegalStateException",RuntimeException); +newEx(java.lang,"IllegalThreadStateException",IllegalArgumentException); +newEx(java.lang,"IndexOutOfBoundsException",RuntimeException); +newEx(java.lang,"InstantiationError",IncompatibleClassChangeError); +newEx(java.lang,"InstantiationException",ReflectiveOperationException); +newEx(java.lang,"InternalError",VirtualMachineError); +newEx(java.lang,"InterruptedException",Exception); +newEx(java.lang,"NegativeArraySizeException",RuntimeException); +newEx(java.lang,"NoClassDefFoundError",LinkageError); +newEx(java.lang,"NoSuchFieldError",IncompatibleClassChangeError); +newEx(java.lang,"NoSuchFieldException",ReflectiveOperationException); +newEx(java.lang,"NoSuchMethodException",ReflectiveOperationException); +newEx(java.lang,"NoSuchMethodError",IncompatibleClassChangeError); +newEx(java.lang,"NullPointerException",RuntimeException); + +;(function(){ + +var C$=Clazz.newClass(java.lang, "NumberFormatException", null, 'IllegalArgumentException'); + +C$.$clinit$=2; + +Clazz.newMeth(C$, '$init$', function () { +},1); + +Clazz.newMeth(C$, 'c$', function () { +;C$.superclazz.c$.apply(this,[]);C$.$init$.apply(this); +}, 1); + +Clazz.newMeth(C$, 'c$$S', function (s) { +;C$.superclazz.c$$S.apply(this,[s]);C$.$init$.apply(this); +}, 1); + +Clazz.newMeth(C$, 'forInputString$S', function (s) { +return Clazz.new_(C$.c$$S,["For input string: \"" + s + "\"" ]); +}, 1); +})(); + +newEx(java.lang,"OutOfMemoryError",VirtualMachineError); +newEx(java.lang,"SecurityException",RuntimeException); +newEx(java.lang,"StackOverflowError",VirtualMachineError); +newEx(java.lang,"ThreadDeath",Error); +newEx(java.lang,"UnknownError",VirtualMachineError); +newEx(java.lang,"UnsatisfiedLinkError",LinkageError); +newEx(java.lang,"UnsupportedClassVersionError",ClassFormatError); +newEx(java.lang,"UnsupportedOperationException",RuntimeException); +newEx(java.lang,"VerifyError",LinkageError); + +newEx(java.lang,"ClassCastException",RuntimeException); + +;(function() { +var C$=Clazz.newClass(java.lang,"ClassNotFoundException",function(){this.ex=null;},Exception); +m$(C$, "c$$S$Throwable", function(detailMessage,exception){ +C$.superclazz.c$$S$Throwable.apply(this, arguments); +this.ex=exception; +}, 1); +m$(C$,"getException$", +function(){ +return this.ex; +}); +m$(C$,"getCause$", +function(){ +return this.ex; +}); +})(); + +;(function() { +var C$=newEx(java.lang,"StringIndexOutOfBoundsException",IndexOutOfBoundsException); +m$(C$, "c$$I", function(index){ +C$.superclazz.c$$S.apply(this,["String index out of range: "+index]); +}, 1); +})(); + +;(function() { +var C$=Clazz.newClass(java.lang.reflect,"InvocationTargetException",function(){this.target=null;},ReflectiveOperationException); +C$.$clinit$ = 2; +m$(C$, "c$$Throwable", function(exception){ +C$.superclazz.c$$Throwable.apply(this, arguments); +this.target=exception; +}, 1); +m$(C$, "c$$Throwable$S", function(exception,detailMessage){ +C$.superclazz.c$$S$Throwable.apply(this,[detailMessage,exception]); +this.target=exception; +}, 1); +m$(C$,"getTargetException$", +function(){ +return this.target; +}); +m$(C$,"getCause$", +function(){ +return this.target; +}); +})() + +;(function(){ +var C$=Clazz.newClass(java.lang.reflect,"UndeclaredThrowableException",function(){this.undeclaredThrowable=null;},RuntimeException); +C$.$clinit$ = 2; +m$(C$, "c$$Throwable", function(exception){ +Clazz.super_(C$, this); +C$.superclazz.c$$Throwable.apply(this, arguments); +this.undeclaredThrowable=exception; +this.initCause(exception); +},1); +m$(C$, "c$$Throwable$S", function(exception,detailMessage){ +C$.superclazz.c$$S.apply(this,[detailMessage]); +this.undeclaredThrowable=exception; +this.initCause(exception); +},1); +m$(C$,"getUndeclaredThrowable$", +function(){ +return this.undeclaredThrowable; +}); +m$(C$,"getCause$", +function(){ +return this.undeclaredThrowable; +}); +})(); + +newEx(java.io,"IOException",Exception); +newEx(java.io,"CharConversionException",java.io.IOException); +newEx(java.io,"EOFException",java.io.IOException); +newEx(java.io,"FileNotFoundException",java.io.IOException); +newEx(java.io,"ObjectStreamException",java.io.IOException); +newEx(java.io,"SyncFailedException",java.io.IOException); +newEx(java.io,"UnsupportedEncodingException",java.io.IOException); +newEx(java.io,"UTFDataFormatException",java.io.IOException); + +newEx(java.io,"InvalidObjectException",java.io.ObjectStreamException); +newEx(java.io,"NotActiveException",java.io.ObjectStreamException); +newEx(java.io,"NotSerializableException",java.io.ObjectStreamException); +newEx(java.io,"StreamCorruptedException",java.io.ObjectStreamException); + +;(function() { +var C$=Clazz.newClass(java.io,"InterruptedIOException",function(){ +this.bytesTransferred=0; +},java.io.IOException); +})(); + + +;(function() { +var C$=Clazz.newClass(java.io,"InvalidClassException",function(){ +this.classname=null; +},java.io.ObjectStreamException); + +m$(C$, "c$$S$S", function(className,detailMessage){ +C$.superclazz.c$$S.apply(this,[detailMessage]); +this.classname=className; +},1); + +m$(C$,"getMessage$", +function(){ +var msg=C$.superclazz.getMessage$.apply(this, []); +if(this.classname!=null){ +msg=this.classname+';' + ' '+msg; +}return msg; +}); +})(); + + +;(function(){ +var C$=Clazz.newClass(java.io,"OptionalDataException",function(){ +this.eof=false; +this.length=0; +},java.io.ObjectStreamException); +})(); + +;(function() { +var C$=Clazz.newClass(java.io,"WriteAbortedException",function(){ +this.detail=null; +},java.io.ObjectStreamException); + +m$(C$, "c$$S$Throwable", function(detailMessage, rootCause){ +C$.superclazz.c$$S.apply(this,[detailMessage]); +this.detail=rootCause; +this.initCause(rootCause); +}, 1); + +m$(C$,"getMessage$", +function(){ +var msg=C$.superclazz.getMessage.apply(this); +return (this.detail ? msg + "; "+this.detail.toString() : msg); +}); +m$(C$,"getCause$", +function(){ +return this.detail; +}); +})(); + +newEx(java.util,"EmptyStackException",RuntimeException); +newEx(java.util,"NoSuchElementException",RuntimeException); +newEx(java.util,"TooManyListenersException",Exception); + + +;(function(){ +var C$=newEx(java.util,"ConcurrentModificationException",RuntimeException); +m$(C$, "c$", function(detailMessage, rootCause){ +Clazz.super_(C$, this); +}, 1); +})(); + +;(function(){ +var C$=Clazz.newClass(java.util,"MissingResourceException",function(){ +this.className=null; +this.key=null; +},RuntimeException); +C$.$clinit$ = 1; +m$(C$, "c$$S$S$S", function(detailMessage,className,resourceName){ +Clazz.super_(C$, this); +C$.superclazz.c$$S.apply(this,[detailMessage]); +this.className=className; +this.key=resourceName; +}, 1); +m$(C$,"getClassName$", +function(){ +return this.className; +}); +m$(C$,"getKey$", +function(){ +return this.key; +}); +})(); + +declareType(java.lang,"Void"); +setJ2STypeclass(java.lang.Void, "void", "V"); +// java.lang.Void.TYPE=java.lang.Void; +// java.lang.V + +Clazz.newInterface(java.lang.reflect,"GenericDeclaration"); + +Clazz.newInterface(java.lang.reflect,"InvocationHandler"); + +C$=Clazz.newInterface(java.lang.reflect,"Member"); + +C$=declareType(java.lang.reflect,"Modifier"); +m$(C$, "c$", function(){}, 1); + +m$(C$,"isAbstract$I", +function(modifiers){ +return((modifiers&1024)!=0); +}, 1); +m$(C$,"isFinal$I", +function(modifiers){ +return((modifiers&16)!=0); +}, 1); +m$(C$,"isInterface$I", +function(modifiers){ +return((modifiers&512)!=0); +}, 1); +m$(C$,"isNative$I", +function(modifiers){ +return((modifiers&256)!=0); +}, 1); +m$(C$,"isPrivate$I", +function(modifiers){ +return((modifiers&2)!=0); +}, 1); +m$(C$,"isProtected$I", +function(modifiers){ +return((modifiers&4)!=0); +}, 1); +m$(C$,"isPublic$I", +function(modifiers){ +return((modifiers&1)!=0); +}, 1); +m$(C$,"isStatic$I", +function(modifiers){ +return((modifiers&8)!=0); +}, 1); +m$(C$,"isStrict$I", +function(modifiers){ +return((modifiers&2048)!=0); +}, 1); +m$(C$,"isSynchronized$I", +function(modifiers){ +return((modifiers&32)!=0); +}, 1); +m$(C$,"isTransient$I", +function(modifiers){ +return((modifiers&128)!=0); +}, 1); +m$(C$,"isVolatile$I", +function(modifiers){ +return((modifiers&64)!=0); +}, 1); +m$(C$,"toString", +function(modifiers){ +var sb=new Array(0); +if(java.lang.reflect.Modifier.isPublic(modifiers))sb[sb.length]="public"; +if(java.lang.reflect.Modifier.isProtected(modifiers))sb[sb.length]="protected"; +if(java.lang.reflect.Modifier.isPrivate(modifiers))sb[sb.length]="private"; +if(java.lang.reflect.Modifier.isAbstract(modifiers))sb[sb.length]="abstract"; +if(java.lang.reflect.Modifier.isStatic(modifiers))sb[sb.length]="static"; +if(java.lang.reflect.Modifier.isFinal(modifiers))sb[sb.length]="final"; +if(java.lang.reflect.Modifier.isTransient(modifiers))sb[sb.length]="transient"; +if(java.lang.reflect.Modifier.isVolatile(modifiers))sb[sb.length]="volatile"; +if(java.lang.reflect.Modifier.isSynchronized(modifiers))sb[sb.length]="synchronized"; +if(java.lang.reflect.Modifier.isNative(modifiers))sb[sb.length]="native"; +if(java.lang.reflect.Modifier.isStrict(modifiers))sb[sb.length]="strictfp"; +if(java.lang.reflect.Modifier.isInterface(modifiers))sb[sb.length]="interface"; +if(sb.length>0){ +return sb.join(" "); +}return""; +}, 1); + +var newMethodNotFoundException = function (clazz, method) { + var message = "Method " + getClassName(clazz, true) + (method ? "." + + method : "") + " was not found"; + System.out.println(message); + console.log(message); + throw Clazz.new_(java.lang.NoSuchMethodException.c$$S, [message]); +}; + +// if (needPackage("core")) + // _Loader.loadPackage("core"); + + +// Clazz._Loader.loadZJar(Clazz._Loader.getJ2SLibBase() + +// "core/coreswingjs.z.js", "swingjs.JSUtil"); + + // if (!J2S._isAsync) { +if (!J2S._loadcore || J2S._coreFiles.length == 0) { + if (J2S._verbose)System.out.println("Clazz: No core files to load -- check Info.core"); +} else { + J2S.onClazzLoaded && J2S.onClazzLoaded(1, "Clazz loaded; loading J2S._coreFiles " + J2S._coreFiles.length); + for (var i = 0; i < J2S._coreFiles.length; i++) { + Clazz.loadScript(J2S._coreFiles[i]); + } + J2S.onClazzLoaded && J2S.onClazzLoaded(2, "Clazz loaded; core files loaded"); +} + +} // LoadClazz +})(J2S, window, document); +// SwingJSApplet.js + +// BH 8/1/2018 $-qualified Java methods +// generic SwingJS Applet +// BH 3/14/2018 8:42:33 PM adds applet._window for JSObject +// BH 12/18/2016 8:09:56 AM added SwingJS.Loaded and SwingJS.isLoaded +// BH 7/24/2015 9:09:39 AM allows setting Info.resourcePath +// BH 4/28/2015 10:15:32 PM adds getAppletHtml +// BH 4/2/2015 5:17:44 PM adds SwingJS.getJavaResource(path) + +// BH 3/27/2015 6:34:49 AM just a shell + +if(typeof(jQuery)=="undefined") alert ("Note -- jQuery is required for SwingJS, but it's not defined.") + +if (typeof(SwingJS) == "undefined") { + + SwingJS = {eventID:0}; + +(function (SwingJS, $, J2S) { + + SwingJS.getApplet = function(id, Info, checkOnly) { + if (arguments.length == 1 && typeof id == "object") { + // allow for getApplet(Info) + Info = id; + id = null; + } + return SwingJS._Applet._get(id, Info, checkOnly); + } + + // optional Info here + SwingJS.getAppletHtml = function(applet, Info) { + if (arguments.length == 1 && typeof applet == "object" && !applet._code) { + // allow for getApplet(Info) + Info = applet; + applet = null; + } + if (Info) { + var d = SwingJS._document; + SwingJS._document = null; + applet = SwingJS.getApplet(applet, Info); + SwingJS._document = d; + } + return applet._code; + } + + SwingJS._Applet = function(id, Info, checkOnly){ + window[id] = this; + this._appletType = "SwingJS._Applet" + (Info.isSigned ? " (signed)" : ""); + this._isJava = true; + this._availableParams = null; // all allowed + this._window = window; + if (checkOnly) + return this; + this._isSigned = Info.isSigned; + this._readyFunction = Info.readyFunction; + this._ready = false; + this._isJava = true; + this._isInfoVisible = false; + this._applet = null; + this._memoryLimit = Info.memoryLimit || 512; + this._canScript = function(script) {return true;}; + this._savedOrientations = []; + this._initialize = function(jarPath, jarFile) { + var doReport = false; + SwingJS._jarFile && (jarFile = SwingJS._jarFile); + if(this._jarFile) { + var f = this._jarFile; + if(f.indexOf("/") >= 0) { + alert ("This web page URL is requesting that the applet used be " + f + ". This is a possible security risk, particularly if the applet is signed, because signed applets can read and write files on your local machine or network."); + var ok = prompt("Do you want to use applet " + f + "? ", "yes or no") + if(ok == "yes") { + jarPath = f.substring(0, f.lastIndexOf("/")); + jarFile = f.substring(f.lastIndexOf("/") + 1); + } else { + doReport = true; + } + } else { + jarFile = f; + } + this_isSigned = Info.isSigned = (jarFile.indexOf("Signed") >= 0); + } + this._jarPath = Info.jarPath = jarPath || "."; + this._jarFile = Info.jarFile = jarFile; + if (doReport) + alert ("The web page URL was ignored. Continuing using " + this._jarFile + ' in directory "' + this._jarPath + '"'); + // could do something like this: J2S.controls == undefined || J2S.controls._onloadResetForms(); + } + this._create(id, Info); + return this; + } + + ;(function(Applet, proto) { + + Applet._get = function(id, Info, checkOnly) { + + checkOnly || (checkOnly = false); + Info || (Info = {}); + var DefaultInfo = { + code: null,//"swingjs.test.TanSugd3S", + uncompressed: true, + //color: "#FFFFFF", // applet object background color + width: 300, + height: 300, + serverURL: "http://your.server.here/jsmol.php", + console: null, // div for where the JavaScript console will be. + readyFunction: null, + use: "HTML5",//other options include JAVA + jarPath: "java", + jarFile: "[code].jar", + j2sPath: "j2s", + spinnerImage: "core/Spinner.gif", + disableJ2SLoadMonitor: false, + disableInitialConsole: false, + debug: false + }; + id || (id = Info.name) || (id = "j2sApplet" + J2S._defaultID++); + + J2S._addDefaultInfo(Info, DefaultInfo); + + + Info.jarFile && Info.code && Info.jarFile.replace(/\[code\]/,Info.code); + J2S._debugAlert = Info.debug; + Info.serverURL && (J2S._serverUrl = Info.serverURL); + + var javaAllowed = false; + var applet = null; + var List = Info.use.toUpperCase().split("#")[0].split(" "); + for (var i = 0; i < List.length; i++) { + switch (List[i]) { + case "JAVA": + javaAllowed = true; + if (J2S.featureDetection.supportsJava()) + applet = new Applet(id, Info, checkOnly); + break; + case "HTML5": + if (J2S.featureDetection.allowHTML5){ + applet = Applet._getCanvas(id, Info, checkOnly); + } else { + List.push("JAVA"); + } + break; + } + if (applet != null) + break; + } + if (applet == null) { + if (checkOnly || !javaAllowed) + applet = {_appletType : "none" }; + else if (javaAllowed) + applet = new Applet(id, Info); + } + + // keyed to both its string id and itself + return (checkOnly ? applet : J2S._registerApplet(id, applet)); + } + + Applet._getCanvas = function(id, Info, checkOnly) { + Info._isLayered = true; + Info._isSwing = true; + Info._platform = ""; + J2S._Canvas2D.prototype = J2S._jsSetPrototype(new Applet(id, Info, true)); + return new J2S._Canvas2D(id, Info, Info.code, checkOnly); + }; + + /* AngelH, mar2007: + By (re)setting these variables in the webpage before calling J2S.getApplet(), + a custom message can be provided (e.g. localized for user's language) when no Java is installed. + */ + Applet._noJavaMsg = + "Either you do not have Java applets enabled in your web
browser or your browser is blocking this applet.
\ + Check the warning message from your browser and/or enable Java applets in
\ + your web browser preferences, or install the Java Runtime Environment from
www.java.com"; + + Applet._setCommonMethods = function(p) { + p._showInfo = proto._showInfo; +/// p._search = proto._search; + p._getName = proto._getName; + p.readyCallback = proto.readyCallback; + } + + Applet._createApplet = function(applet, Info, params) { + applet._initialize(Info.jarPath, Info.jarFile); + var jarFile = applet._jarFile; + var jnlp = "" + if (J2S._isFile) { + jarFile = jarFile.replace(/0\.jar/,".jar"); + } + // size is set to 100% of containers' size, but only if resizable. + // Note that resizability in MSIE requires: + // + var w = (applet._containerWidth.indexOf("px") >= 0 ? applet._containerWidth : "100%"); + var h = (applet._containerHeight.indexOf("px") >= 0 ? applet._containerHeight : "100%"); + var widthAndHeight = " style=\"width:" + w + ";height:" + h + "\" "; + var attributes = "name='" + applet._id + "_object' id='" + applet._id + "_object' " + "\n" + + widthAndHeight + jnlp + "\n" + params.codebase = applet._jarPath; + params.codePath = params.codebase + "/"; + if (params.codePath.indexOf("://") < 0) { + var base = document.location.href.split("#")[0].split("?")[0].split("/"); + base[base.length - 1] = params.codePath; + params.codePath = base.join("/"); + } + params.archive = jarFile; + params.mayscript = 'true'; + params.java_arguments = "-Xmx" + Math.round(Info.memoryLimit || applet._memoryLimit) + "m"; + params.permissions = (applet._isSigned ? "all-permissions" : "sandbox"); + params.documentLocation = document.location.href; + params.documentBase = document.location.href.split("#")[0].split("?")[0]; + + params.jarPath = Info.jarPath; + J2S._syncedApplets.length && (params.synccallback = "J2S._mySyncCallback"); + applet._startupScript && (params.script = applet._startupScript); + var t = "\n"; + for (var i in params) + if(params[i]) + t += " \n"; + if (J2S.featureDetection.useIEObject || J2S.featureDetection.useHtml4Object) { + t = "" + : " type='application/x-java-applet'>") + + t + "

\n" + Applet._noJavaMsg + "

\n"; + } else { // use applet tag + t = "\n" + + t + "
\n" + + Applet._noJavaMsg + "
\n"; + } + if (applet._deferApplet) + applet._javaCode = t, t=""; + t = J2S._getWrapper(applet, true) + t + J2S._getWrapper(applet, false) + + (Info.addSelectionOptions ? J2S._getGrabberOptions(applet) : ""); + if (J2S._debugAlert) + alert (t); + applet._code = J2S._documentWrite(t); + } + + proto._newApplet = function(viewerOptions) { + this._viewerOptions = viewerOptions; + // for now assigning this._applet here instead of in readyCallback + Clazz.loadClass("swingjs.JSAppletViewer"); + this._appletPanel = Clazz.new_(swingjs.JSAppletViewer.c$$java_util_Hashtable, [viewerOptions]); + this._appletPanel.start$(); + } + + proto._addCoreFiles = function() { + if (this.__Info.core != "NONE" && this.__Info.core != "none" && !J2S._debugCode) + J2S._addCoreFile((this.__Info.core || "swingjs"), this._j2sPath, this.__Info.preloadCore); +// if (J2S._debugCode) { +// // no min package for that +// J2S._addExec([this, null, "swingjs.JSAppletViewer", "load " + this.__Info.code]); +// +// } + } + + proto._create = function(id, Info){ + J2S._setObject(this, id, Info); + var params = { + syncId: J2S._syncId, + progressbar: "true", + progresscolor: "blue", + boxbgcolor: this._color || "black", + boxfgcolor: "white", + boxmessage: "Downloading Applet ...", + //script: (this._color ? "background \"" + this._color +"\"": ""), + code: Info.appletClass + ".class" + }; + + J2S._setAppletParams(this._availableParams, params, Info); + function sterilizeInline(model) { + model = model.replace(/\r|\n|\r\n/g, (model.indexOf("|") >= 0 ? "\\/n" : "|")).replace(/'/g, "'"); + if(J2S._debugAlert) + alert ("inline model:\n" + model); + return model; + } + + params.loadInline = (Info.inlineModel ? sterilizeInline(Info.inlineModel) : ""); + params.appletReadyCallback = "J2S.readyCallback"; + if (J2S._syncedApplets.length) + params.synccallback = "J2S._mySyncCallback"; + params.java_arguments = "-Xmx" + Math.round(Info.memoryLimit || this._memoryLimit) + "m"; + + this._initialize(Info.jarPath, Info.jarFile); + Applet._createApplet(this, Info, params); + } + + + proto._restoreState = function(clazzName, state) { + // applet-dependent + } + + proto.readyCallback = function(id, fullid, isReady) { + if (!isReady) + return; // ignore -- page is closing + J2S._setDestroy(this); + this._ready = true; + this._showInfo(true); + this._showInfo(false); + J2S.Cache.setDragDrop(this); + this._readyFunction && this._readyFunction(this); + J2S._setReady(this); + var app = this._2dapplet; + if (app && app._isEmbedded && app._ready && app.__Info.visible) + this._show2d(true); + } + + proto._showInfo = function(tf) { + if(this._isJNLP)return; + if(tf && this._2dapplet) + this._2dapplet._show(false); + J2S.$html(J2S.$(this, "infoheaderspan"), this._infoHeader); + if (this._info) + J2S.$html(J2S.$(this, "infodiv"), this._info); + if ((!this._isInfoVisible) == (!tf)) + return; + this._isInfoVisible = tf; + // 1px does not work for MSIE + if (this._isJava) { + var x = (tf ? 2 : "100%"); + J2S.$setSize(J2S.$(this, "appletdiv"), x, x); + } + J2S.$setVisible(J2S.$(this, "infotablediv"), tf); + J2S.$setVisible(J2S.$(this, "infoheaderdiv"), tf); + this._show(!tf); + } + + proto._show = function(tf) { + var x = (!tf ? 2 : "100%"); + J2S.$setSize(J2S.$(this, "object"), x, x); + if (!this._isJava) + J2S.$setVisible(J2S.$(this, "appletdiv"), tf); + } + + proto._clearConsole = function () { + if (this._console == this._id + "_infodiv") + this.info = ""; + if (!self.Clazz)return; + J2S._setConsoleDiv(this._console); + Clazz.Console.clear(); + } + + proto._resizeApplet = function(size) { + // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()] + // Special case: an empty value for width or height is accepted, meaning no change in that dimension. + + /* + * private functions + */ + function _getAppletSize(size, units) { + /* Accepts single number, 2-value array, or object with width and height as mroperties, each one can be one of: + percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.) + [width, height] array of strings is returned, with units added if specified. + Percent is relative to container div or element (which should have explicitly set size). + */ + var width, height; + if(( typeof size) == "object" && size != null) { + width = size[0]||size.width; + height = size[1]||size.height; + } else { + width = height = size; + } + return [J2S.fixDim(width, units), J2S.fixDim(height, units)]; + } + var sz = _getAppletSize(size, "px"); + var d = J2S._getElement(this, "appletinfotablediv"); + d.style.width = sz[0]; + d.style.height = sz[1]; + this._containerWidth = sz[0]; + this._containerHeight = sz[1]; + if (this._is2D) + J2S.repaint(this, true); + } + + proto._cover = function (doCover) { + // from using getAppletHtml() + this._newCanvas(false); + this._showInfo(false); + this._init(); + }; + + + +})(SwingJS._Applet, SwingJS._Applet.prototype); + +})(SwingJS, jQuery, J2S); + +} // SwingJS undefined diff --git a/sources/net.sf.j2s.java.core/template.html b/sources/net.sf.j2s.java.core/template.html index d132460b7..8f046d66c 100644 --- a/sources/net.sf.j2s.java.core/template.html +++ b/sources/net.sf.j2s.java.core/template.html @@ -22,11 +22,10 @@
-
-This is System.out. clear it start/stop profiling
see ___j2sflags.htm for SwingJS URL command-line options
get _j2sClassList.txt +
+This is System.out. clear it start/stop profiling
see ___j2sflags.htm for SwingJS URL command-line options
get _j2sclasslist.txt
diff --git a/sources/net.sf.j2s.java.core/tools/closure_compiler.jar b/sources/net.sf.j2s.java.core/tools/closure_compiler.jar new file mode 100644 index 000000000..53037b0e8 Binary files /dev/null and b/sources/net.sf.j2s.java.core/tools/closure_compiler.jar differ diff --git a/sources/net.sf.j2s.java.core/unused/AbstractStringBuilder.java b/sources/net.sf.j2s.java.core/unused/AbstractStringBuilder.java new file mode 100644 index 000000000..fd535df18 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/AbstractStringBuilder.java @@ -0,0 +1,833 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.io.InvalidObjectException; +//import java.util.Arrays; + +/** + *

+ * A modifiable {@link CharSequence sequence of characters} for use in creating + * and modifying Strings. This class is intended as a base class for + * {@link java.lang.StringBuffer} and {@link java.lang.StringBuilder}. + *

+ * + * @see java.lang.StringBuffer + * @see java.lang.StringBuilder + * + * @since 1.5 + */ +abstract class AbstractStringBuilder { + + static final int INITIAL_CAPACITY = 16; + + private char[] value; + + private int count; + + private boolean shared; + + /* + * Returns the character array. + */ + final char[] getValue() { + return value; + } + + /* + * Returns the underlying buffer and sets the shared flag. + */ + final char[] shareValue() { + shared = true; + return value; + } + + /* + * Restores internal state after deserialization. + */ + final void set(char[] val, int len) throws InvalidObjectException { + if (val == null) + val = new char[0]; + if (val.length < len) + throw new InvalidObjectException(("K0199")); + + shared = false; + value = val; + count = len; + } + + AbstractStringBuilder() { + value = new char[INITIAL_CAPACITY]; + } + + AbstractStringBuilder(int capacity) { + if (capacity < 0) + throw new NegativeArraySizeException(); + value = new char[capacity]; + } + + AbstractStringBuilder(String string) { + count = string.length(); + shared = false; + value = new char[count + INITIAL_CAPACITY]; + string.getChars(0, count, value, 0); + } + + private void enlargeBuffer(int min) { + int twice = (value.length << 1) + 2; + char[] newData = new char[min > twice ? min : twice]; + System.arraycopy(value, 0, newData, 0, count); + value = newData; + shared = false; + } + + final void appendNull() { + int newSize = count + 4; + if (newSize > value.length) { + enlargeBuffer(newSize); + } else if (shared) { + value = value.clone(); + shared = false; + } + value[count++] = 'n'; + value[count++] = 'u'; + value[count++] = 'l'; + value[count++] = 'l'; + } + + final void append0(char chars[]) { + int newSize = count + chars.length; + if (newSize > value.length) { + enlargeBuffer(newSize); + } else if (shared) { + value = value.clone(); + shared = false; + } + System.arraycopy(chars, 0, value, count, chars.length); + count = newSize; + } + + final void append0(char chars[], int start, int length) { + if (chars == null) { + throw new NullPointerException(); + } + // start + length could overflow, start/length maybe MaxInt + if (start >= 0 && 0 <= length && length <= chars.length - start) { + int newSize = count + length; + if (newSize > value.length) { + enlargeBuffer(newSize); + } else if (shared) { + value = value.clone(); + shared = false; + } + System.arraycopy(chars, start, value, count, length); + count = newSize; + } else { + throw new ArrayIndexOutOfBoundsException(); + } + } + + final void append0(char ch) { + if (count == value.length) { + enlargeBuffer(count + 1); + } + if (shared) { + value = value.clone(); + shared = false; + } + value[count++] = ch; + } + + final void append0(String string) { + if (string == null) { + appendNull(); + return; + } + int adding = string.length(); + int newSize = count + adding; + if (newSize > value.length) { + enlargeBuffer(newSize); + } else if (shared) { + value = value.clone(); + shared = false; + } + string.getChars(0, adding, value, count); + count = newSize; + } + + final void append0(CharSequence s, int start, int end) { + if (s == null) + s = "null"; + if (start < 0 || end < 0 || start > end || end > s.length()) + throw new IndexOutOfBoundsException(); + + append0(s.subSequence(start, end).toString()); + } + + /** + * Answers the number of characters this StringBuffer can hold without + * growing. + * + * @return the capacity of this StringBuffer + * + * @see #ensureCapacity + * @see #length + */ + public int capacity() { + return value.length; + } + + /** + *

+ * Retrieves the character at the index. + *

+ * + * @param The index of character in this object to retrieve. + * @return The char value. + * @throws IndexOutOfBoundsException if index is negative or + * greater than or equal to the current {@link #length()}. + */ + public char charAt(int index) { + if (index < 0 || index >= count) + throw new StringIndexOutOfBoundsException(index); + return value[index]; + } + + final void delete0(int start, int end) { + if (start >= 0) { + if (end > count) { + end = count; + } + if (end == start) { + return; + } + if (end > start) { + int length = count - end; + if (length > 0) { + if (!shared) { + System.arraycopy(value, end, value, start, length); + } else { + char[] newData = new char[value.length]; + System.arraycopy(value, 0, newData, 0, start); + System.arraycopy(value, end, newData, start, length); + value = newData; + shared = false; + } + } + count -= end - start; + return; + } + } + throw new StringIndexOutOfBoundsException(); + } + + final void deleteCharAt0(int location) { + if (0 > location || location >= count) + throw new StringIndexOutOfBoundsException(location); + int length = count - location - 1; + if (length > 0) { + if (!shared) { + System.arraycopy(value, location + 1, value, location, length); + } else { + char[] newData = new char[value.length]; + System.arraycopy(value, 0, newData, 0, location); + System + .arraycopy(value, location + 1, newData, location, + length); + value = newData; + shared = false; + } + } + count--; + } + + /** + *

+ * Ensures that this object has a minimum capacity available before + * requiring the internal buffer to be enlarged. The general policy of this + * method is that if the minimumCapacity is larger than the + * current {@link #capacity()}, then the capacity will be increased to the + * largest value of either the minimumCapacity or the current + * capacity multiplied by two plus two. Although this is the general policy, + * there is no guarantee that the capacity will change. + *

+ * + * @param minimumCapacity The new minimum capacity to set. + */ + public void ensureCapacity(int min) { + if (min > value.length) { + enlargeBuffer(min); + } + } + + /** + *

+ * Copies the requested sequence of characters to be copied to the + * char[] passed. + *

+ * + * @param start The inclusive start index of the characters to copy from + * this object. + * @param end The exclusive end index of the characters to copy from this + * object. + * @param dest The char[] to copy the characters to. + * @param destStart The inclusive start index of the dest + * parameter to begin copying to. + * @throws IndexOutOfBoundsException if the start is + * negative, the destStart is negative, the + * start is greater than end, the + * end is greater than the current {@link #length()} + * or destStart + end - begin is greater than + * dest.length. + */ + public void getChars(int start, int end, char[] dest, int destStart) { + if (start > count || end > count || start > end) { + throw new StringIndexOutOfBoundsException(); + } + System.arraycopy(value, start, dest, destStart, end - start); + } + + final void insert0(int index, char[] chars) { + if (0 > index || index > count) { + throw new StringIndexOutOfBoundsException(index); + } + if (chars.length != 0) { + move(chars.length, index); + System.arraycopy(chars, 0, value, index, chars.length); + count += chars.length; + } + } + + final void insert0(int index, char chars[], int start, int length) { + if (0 <= index && index <= count) { + // start + length could overflow, start/length maybe MaxInt + if (start >= 0 && 0 <= length && length <= chars.length - start) { + if (length != 0) { + move(length, index); + System.arraycopy(chars, start, value, index, length); + count += length; + } + return; + } + throw new StringIndexOutOfBoundsException("offset " + start + ", len " + length + ", array.length " + chars.length); + } + throw new StringIndexOutOfBoundsException(index); + } + + final void insert0(int index, char ch) { + if (0 > index || index > count) { + // RI compatible exception type + throw new ArrayIndexOutOfBoundsException(index); + } + move(1, index); + value[index] = ch; + count++; + } + + final void insert0(int index, String string) { + if (0 <= index && index <= count) { + if (string == null) + string = "null"; + int min = string.length(); + if (min != 0) { + move(min, index); + string.getChars(0, min, value, index); + count += min; + } + } else { + throw new StringIndexOutOfBoundsException(index); + } + } + + final void insert0(int index, CharSequence s, int start, int end) { + if (s == null) + s = "null"; + if (index < 0 || index > count || start < 0 || end < 0 || start > end + || end > s.length()) + throw new IndexOutOfBoundsException(); + insert0(index, s.subSequence(start, end).toString()); + } + + /** + *

+ * The current length of this object. + *

+ * + * @return the number of characters in this StringBuffer + */ + public int length() { + return count; + } + + private void move(int size, int index) { + int newSize; + if (value.length - count >= size) { + if (!shared) { + System.arraycopy(value, index, value, index + size, count + - index); // index == count case is no-op + return; + } + newSize = value.length; + } else { + int a = count + size, b = (value.length << 1) + 2; + newSize = a > b ? a : b; + } + + char[] newData = new char[newSize]; + System.arraycopy(value, 0, newData, 0, index); + // index == count case is no-op + System.arraycopy(value, index, newData, index + size, count - index); + value = newData; + shared = false; + } + + final void replace0(int start, int end, String string) { + if (start >= 0) { + if (end > count) + end = count; + if (end > start) { + int stringLength = string.length(); + int diff = end - start - stringLength; + if (diff > 0) { // replacing with fewer characters + if (!shared) { + // index == count case is no-op + System.arraycopy(value, end, value, start + + stringLength, count - end); + } else { + char[] newData = new char[value.length]; + System.arraycopy(value, 0, newData, 0, start); + // index == count case is no-op + System.arraycopy(value, end, newData, start + + stringLength, count - end); + value = newData; + shared = false; + } + } else if (diff < 0) { + // replacing with more characters...need some room + move(-diff, end); + } else if (shared) { + value = value.clone(); + shared = false; + } + string.getChars(0, stringLength, value, start); + count -= diff; + return; + } + if (start == end) { + if (string == null) + throw new NullPointerException(); + insert0(start, string); + return; + } + } + throw new StringIndexOutOfBoundsException(); + } + + final void reverse0() { + if (count < 2) { + return; + } + if (!shared) { + for (int i = 0, end = count, mid = count / 2; i < mid; i++) { + char temp = value[--end]; + value[end] = value[i]; + value[i] = temp; + } + } else { + char[] newData = new char[value.length]; + for (int i = 0, end = count; i < count; i++) { + newData[--end] = value[i]; + } + value = newData; + shared = false; + } + } + + /** + *

+ * Sets the character at the index in this object. + *

+ * + * @param index the zero-based index of the character to replace. + * @param ch the character to set. + * @throws IndexOutOfBoundsException if index is negative or + * greater than or equal to the current {@link #length()}. + */ + public void setCharAt(int index, char ch) { + if (0 > index || index >= count) { + throw new StringIndexOutOfBoundsException(index); + } + if (shared) { + value = value.clone(); + shared = false; + } + value[index] = ch; + } + + /** + *

+ * Sets the current length to a new value. If the new length is larger than + * the current length, then the new characters at the end of this object + * will contain the char value of \u0000. + *

+ * + * @param length the new length of this StringBuffer + * + * @exception IndexOutOfBoundsException when length < 0 + * + * @see #length + */ + public void setLength(int length) { + if (length < 0) + throw new StringIndexOutOfBoundsException(length); + if (count < length) { + if (length > value.length) { + enlargeBuffer(length); + } else { + if (shared) { + char[] newData = new char[value.length]; + System.arraycopy(value, 0, newData, 0, count); + value = newData; + shared = false; + } else { + //Arrays.fill(value, count, length, (char) 0); + for (int i = count; i < length; i++) { + value[i] = 0; + } + } + } + } + count = length; + } + + /** + *

+ * Returns the String value of the subsequence of this object from the + * start index to the current end. + *

+ * + * @param start The inclusive start index to begin the subsequence. + * @return A String containing the subsequence. + * @throws StringIndexOutOfBoundsException if start is + * negative or greater than the current {@link #length()}. + */ + public String substring(int start) { + if (0 <= start && start <= count) { + if (start == count) + return ""; + + shared = true; + return new String(value, start, count - start); + } + throw new StringIndexOutOfBoundsException(start); + } + + /** + *

+ * Returns the String value of the subsequence of this object from the + * start index to the start index. + *

+ * + * @param start The inclusive start index to begin the subsequence. + * @param end The exclusive end index to end the subsequence. + * @return A String containing the subsequence. + * @throws StringIndexOutOfBoundsException if start is + * negative, greater than the current {@link #length()} or greater + * than end. + */ + public String substring(int start, int end) { + if (0 <= start && start <= end && end <= count) { + if (start == end) + return ""; + + shared = true; + return new String(value, start, end - start); + } + throw new StringIndexOutOfBoundsException(); + } + + /** + *

+ * Returns the current String representation of this object. + *

+ * + * @return a String containing the characters in this StringBuilder. + */ + @Override + public String toString() { + if (count == 0) + return ""; + + if (count >= 256 && count <= (value.length >> 1)) + return new String(value, 0, count); + shared = true; + return new String(value, 0, count); + } + + /** + *

+ * Returns a CharSequence of the subsequence of this object + * from the start index to the start index. + *

+ * + * @param start The inclusive start index to begin the subsequence. + * @param end The exclusive end index to end the subsequence. + * @return A CharSequence containing the subsequence. + * @throws IndexOutOfBoundsException if start is negative, + * greater than the current {@link #length()} or greater than + * end. + * + * @since 1.4 + */ + public CharSequence subSequence(int start, int end) { + return substring(start, end); + } + + /** + * Searches in this StringBuffer for the first index of the specified + * character. The search for the character starts at the beginning and moves + * towards the end. + * + * + * @param string the string to find + * @return the index in this StringBuffer of the specified character, -1 if + * the character isn't found + * + * @see #lastIndexOf(String) + * + * @since 1.4 + */ + public int indexOf(String string) { + return indexOf(string, 0); + } + + /** + * Searches in this StringBuffer for the index of the specified character. + * The search for the character starts at the specified offset and moves + * towards the end. + * + * @param subString the string to find + * @param start the starting offset + * @return the index in this StringBuffer of the specified character, -1 if + * the character isn't found + * + * @see #lastIndexOf(String,int) + * + * @since 1.4 + */ + public int indexOf(String subString, int start) { + if (start < 0) + start = 0; + int subCount = subString.length(); + if (subCount > 0) { + if (subCount + start > count) + return -1; + // TODO optimize charAt to direct array access + char firstChar = subString.charAt(0); + while (true) { + int i = start; + boolean found = false; + for (; i < count; i++) + if (value[i] == firstChar) { + found = true; + break; + } + if (!found || subCount + i > count) + return -1; // handles subCount > count || start >= count + int o1 = i, o2 = 0; + while (++o2 < subCount && value[++o1] == subString.charAt(o2)) { + // Intentionally empty + } + if (o2 == subCount) + return i; + start = i + 1; + } + } + return (start < count || start == 0) ? start : count; + } + + /** + * Searches in this StringBuffer for the last index of the specified + * character. The search for the character starts at the end and moves + * towards the beginning. + * + * @param string the string to find + * @return the index in this StringBuffer of the specified character, -1 if + * the character isn't found + * @throws NullPointerException if the string parameter is + * null. + * + * @see String#lastIndexOf(java.lang.String) + * + * @since 1.4 + */ + public int lastIndexOf(String string) { + return lastIndexOf(string, count); + } + + /** + * Searches in this StringBuffer for the index of the specified character. + * The search for the character starts at the specified offset and moves + * towards the beginning. + * + * @param subString the string to find + * @param start the starting offset + * @return the index in this StringBuffer of the specified character, -1 if + * the character isn't found + * @throws NullPointerException if the subString parameter is + * null. + * @see String#lastIndexOf(java.lang.String,int) + * @since 1.4 + */ + public int lastIndexOf(String subString, int start) { + int subCount = subString.length(); + if (subCount <= count && start >= 0) { + if (subCount > 0) { + if (start > count - subCount) + start = count - subCount; // count and subCount are both + // >= 1 + // TODO optimize charAt to direct array access + char firstChar = subString.charAt(0); + while (true) { + int i = start; + boolean found = false; + for (; i >= 0; --i) + if (value[i] == firstChar) { + found = true; + break; + } + if (!found) + return -1; + int o1 = i, o2 = 0; + while (++o2 < subCount + && value[++o1] == subString.charAt(o2)) { + // Intentionally empty + } + if (o2 == subCount) + return i; + start = i - 1; + } + } + return start < count ? start : count; + } + return -1; + } + + /** + *

+ * Trims off any extra capacity beyond the current length. Note, this method + * is NOT guaranteed to change the capacity of this object. + *

+ * + * @since 1.5 + */ + public void trimToSize() { + if (count < value.length) { + char[] newValue = new char[count]; + System.arraycopy(value, 0, newValue, 0, count); + value = newValue; + shared = false; + } + } + + /** + *

+ * Retrieves the Unicode code point value at the index. + *

+ * + * @param index The index to the char code unit within this + * object. + * @return The Unicode code point value. + * @throws IndexOutOfBoundsException if index is negative or + * greater than or equal to {@link #length()}. + * @see Character + * @see Character#codePointAt(char[], int, int) + * @since 1.5 + * @j2sIgnore + */ + public int codePointAt(int index) { + if (index < 0 || index >= count) + throw new StringIndexOutOfBoundsException(index); + return Character.codePointAt(value, index, count); + } + + /** + *

+ * Retrieves the Unicode code point value that precedes the + * index. + *

+ * + * @param index The index to the char code unit within this + * object. + * @return The Unicode code point value. + * @throws IndexOutOfBoundsException if index is less than 1 + * or greater than {@link #length()}. + * @see Character + * @see Character#codePointBefore(char[], int, int) + * @since 1.5 + * @j2sIgnore + */ + public int codePointBefore(int index) { + if (index < 1 || index > count) + throw new StringIndexOutOfBoundsException(index); + return Character.codePointBefore(value, index); + } + + /** + *

+ * Calculates the number of Unicode code points between + * beginIndex and endIndex. + *

+ * + * @param beginIndex The inclusive beginning index of the subsequence. + * @param endIndex The exclusive end index of the subsequence. + * @return The number of Unicode code points in the subsequence. + * @throws IndexOutOfBoundsException if beginIndex is + * negative or greater than endIndex or + * endIndex is greater than {@link #length()}. + * @since 1.5 + * @j2sIgnore + */ + public int codePointCount(int beginIndex, int endIndex) { + if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) + throw new StringIndexOutOfBoundsException(); + return Character.codePointCount(value, beginIndex, endIndex + - beginIndex); + } + + /** + *

+ * Returns the index within this object that is offset from + * index by codePointOffset code points. + *

+ * + * @param index The index within this object to calculate the offset from. + * @param codePointOffset The number of code points to count. + * @return The index within this object that is the offset. + * @throws IndexOutOfBoundsException if index is negative or + * greater than {@link #length()} or if there aren't enough code + * points before or after index to match + * codePointOffset. + * @since 1.5 + * @j2sIgnore + */ + public int offsetByCodePoints(int index, int codePointOffset) { + return Character.offsetByCodePoints(value, 0, count, index, + codePointOffset); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/ArrayList.js b/sources/net.sf.j2s.java.core/unused/ArrayList.js new file mode 100644 index 000000000..ae2a135b6 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/ArrayList.js @@ -0,0 +1,415 @@ +//BH 12/18/2015 7:30:28 AM using slice for toArray() +//BH 7/4/2016 3:16:31 PM adding _removeItemAt and _removeObject + +Clazz.load(["java.util.AbstractList","$.List","$.RandomAccess"],"java.util.ArrayList",["java.lang.IllegalArgumentException","$.IndexOutOfBoundsException","java.lang.reflect.Array","java.util.Arrays"],function(){ +var $fz,c$=Clazz.decorateAsClass(function(){ +this.firstIndex=0; +this.lastIndex=0; +this.array=null; +Clazz.instantialize(this,arguments); +},java.util,"ArrayList",java.util.AbstractList,[java.util.List,Cloneable,java.io.Serializable,java.util.RandomAccess]); + +Clazz.overrideConstructor(c$, +function(){ +this.setup(0); +}); + +Clazz.defineMethod(c$, "setup", +function(capacity){ +//Clazz.superConstructor(this,java.util.ArrayList,[]); +this.firstIndex=this.lastIndex=0; +try{ +this.array=this.newElementArray(capacity); +}catch(e){ +if(Clazz.instanceOf(e,NegativeArraySizeException)){ +throw new IllegalArgumentException(); +}else{ +throw e; +} +} +},"~N"); +/* +Clazz.makeConstructor(c$, +function(collection){ +Clazz.superConstructor(this,java.util.ArrayList,[]); +var size=collection.size(); +this.firstIndex=this.lastIndex=0; +this.array=this.newElementArray(size+(Math.floor(size/10))); +this.addAll(collection); +},"java.util.Collection"); + +*/ + +Clazz.defineMethod(c$,"newElementArray", +($fz=function(size){ +return new Array(size); +},$fz.isPrivate=true,$fz),"~N"); + +Clazz.overrideMethod(c$,"add", +function(location,object){ + +if (arguments.length == 1) { + // coming from Java methods, e.g. Collections.list() + // location is actually the object + return this.add1(location); +} +var size=this.size(); +if(00)||this.lastIndex==this.array.length){ +System.arraycopy(this.array,this.firstIndex,this.array,--this.firstIndex,location); +}else{ +var index=location+this.firstIndex; +System.arraycopy(this.array,index,this.array,index+1,size-location); +this.lastIndex++; +}this.array[location+this.firstIndex]=object; +}else if(location==0){ +if(this.firstIndex==0){ +this.growAtFront(1); +}this.array[--this.firstIndex]=object; +}else if(location==size){ +if(this.lastIndex==this.array.length){ +this.growAtEnd(1); +}this.array[this.lastIndex++]=object; +}else{ +throw new IndexOutOfBoundsException(); +}this.modCount++; +},"~N,~O"); + +Clazz.overrideMethod(c$,"add1", +function(object){ +if(this.lastIndex==this.array.length){ +this.growAtEnd(1); +}this.array[this.lastIndex++]=object; +this.modCount++; +return true; +},"~O"); + +/* BH disallow addAll(int,List) + * +Clazz.defineMethod(c$,"addAll", +function(location,collection){ +var size=this.size(); +if(location<0||location>size){ +throw new IndexOutOfBoundsException(); +}var growSize=collection.size(); +if(00)||this.lastIndex>this.array.length-growSize){ +var newFirst=this.firstIndex-growSize; +if(newFirst<0){ +var index=location+this.firstIndex; +System.arraycopy(this.array,index,this.array,index-newFirst,size-location); +this.lastIndex-=newFirst; +newFirst=0; +}System.arraycopy(this.array,this.firstIndex,this.array,newFirst,location); +this.firstIndex=newFirst; +}else{ +var index=location+this.firstIndex; +System.arraycopy(this.array,index,this.array,index+growSize,size-location); +this.lastIndex+=growSize; +}}else if(location==0){ +this.growAtFront(growSize); +this.firstIndex-=growSize; +}else if(location==size){ +if(this.lastIndex>this.array.length-growSize){ +this.growAtEnd(growSize); +}this.lastIndex+=growSize; +}if(growSize>0){ +var it=collection.iterator(); +var index=location+this.firstIndex; +var end=index+growSize; +while(index0){ + if(this.lastIndex>this.array.length-growSize){ + this.growAtEnd(growSize); +} +var it=collection.iterator(); +var end=this.lastIndex+growSize; +while(this.lastIndex= i1;) +this.array[i] = null; +},"~N,~N"); + +Clazz.defineMethod(c$,"clone", +function(){ +try{ +var newList=Clazz.superCall(this,java.util.ArrayList,"clone",[]); +newList.array=this.array.clone(); +return newList; +}catch(e){ +if(Clazz.instanceOf(e,CloneNotSupportedException)){ +return null; +}else{ +throw e; +} +} +}); +Clazz.overrideMethod(c$,"contains", +function(object){ +if(object!=null){ +for(var i=this.firstIndex;i0){ +this.growAtFront(minimumCapacity-this.array.length); +}else{ +this.growAtEnd(minimumCapacity-this.array.length); +}}},"~N"); +Clazz.overrideMethod(c$,"get", +function(location){ +if(0<=location&&location=required-(this.array.length-this.lastIndex)){ + var newLast=this.lastIndex-this.firstIndex; + if(size>0){ + System.arraycopy(this.array,this.firstIndex,this.array,0,size); + var start=newLastincrement){ + increment=required; + } + if(increment<12){ + increment=12; + } + var newArray=this.newElementArray(size+increment); + if(size>0){ + System.arraycopy(this.array,this.firstIndex,newArray,this.firstIndex,size); + } + this.array=newArray; +} + +},$fz.isPrivate=true,$fz),"~N"); +Clazz.defineMethod(c$,"growAtFront", +($fz=function(required){ +var size=this.size(); +if(this.array.length-this.lastIndex>=required){ +var newFirst=this.array.length-size; +if(size>0){ +System.arraycopy(this.array,this.firstIndex,this.array,newFirst,size); +var length=this.firstIndex+size>newFirst?newFirst:this.firstIndex+size; +this.fill(this.firstIndex,length); +}this.firstIndex=newFirst; +this.lastIndex=this.array.length; +}else{ +var increment=Math.floor(size/2); +if(required>increment){ +increment=required; +}if(increment<12){ +increment=12; +}var newArray=this.newElementArray(size+increment); +if(size>0){ +System.arraycopy(this.array,this.firstIndex,newArray,newArray.length-size,size); +}this.firstIndex=newArray.length-size; +this.lastIndex=newArray.length; +this.array=newArray; +}},$fz.isPrivate=true,$fz),"~N"); +Clazz.defineMethod(c$,"growForInsert", +($fz=function(location,required){ +var size=this.size(); +var increment=Math.floor(size/2); +if(required>increment){ +increment=required; +}if(increment<12){ +increment=12; +}var newArray=this.newElementArray(size+increment); +if(location=this.firstIndex;i--){ +if(object.equals(this.array[i])){ +return i-this.firstIndex; +}} +}else{ +for(var i=this.lastIndex-1;i>=this.firstIndex;i--){ +if(this.array[i]==null){ +return i-this.firstIndex; +}} +}return-1; +},"~O"); +Clazz.overrideMethod(c$,"remove", +function(location){ +return (typeof location == "number" ? this._removeItemAt(location) : this._removeObject(location)); +},"~N"); + +Clazz.overrideMethod(c$,"_removeItemAt", +function(location){ +var result; +var size=this.size(); +if(0<=location&&location=0&&start<=end&&end<=this.size()){ +if(start==end){ +return; +}var size=this.size(); +if(end==size){ + this.fill(this.firstIndex+start,this.lastIndex); +this.lastIndex=this.firstIndex+start; +}else if(start==0){ + this.fill(this.firstIndex,this.firstIndex+end); +this.firstIndex+=end; +}else{ +System.arraycopy(this.array,this.firstIndex+end,this.array,this.firstIndex+start,size-end); +var newLast=this.lastIndex+start-end; +this.fill(newLast,this.lastIndex); +this.lastIndex=newLast; +}this.modCount++; +}else{ +throw new IndexOutOfBoundsException(); +}},"~N,~N"); +Clazz.overrideMethod(c$,"set", +function(location,object){ +if(0<=location&&locationcontents.length) { + return this.array.slice(this.firstIndex, this.firstIndex + size); +} +System.arraycopy(this.array,this.firstIndex,contents,0,size); +if(size>1; +if((result=key.compareTo(list.get(mid)))>0){ +low=mid+1; +}else if(result==0){ +return mid; +}else{ +high=mid-1; +}} +return-mid-(result<0?1:2); +},"java.util.List,~O"); +c$.binarySearch=Clazz.defineMethod(c$,"binarySearch", +function(list,object,comparator){ +if(comparator==null){ +return java.util.Collections.binarySearch(list,object); +}if(!(Clazz.instanceOf(list,java.util.RandomAccess))){ +var it=list.listIterator(); +while(it.hasNext()){ +var result; +if((result=comparator.compare(object,it.next()))<=0){ +if(result==0){ +return it.previousIndex(); +}return-it.previousIndex()-1; +}} +return-list.size()-1; +}var low=0; +var mid=list.size(); +var high=mid-1; +var result=-1; +while(low<=high){ +mid=(low+high)>>1; +if((result=comparator.compare(object,list.get(mid)))>0){ +low=mid+1; +}else if(result==0){ +return mid; +}else{ +high=mid-1; +}} +return-mid-(result<0?1:2); +},"java.util.List,~O,java.util.Comparator"); +c$.copy=Clazz.defineMethod(c$,"copy", +function(destination,source){ +if(destination.size()0){ +min=next; +}} +return min; +},"java.util.Collection"); +c$.min=Clazz.defineMethod(c$,"min", +function(collection,comparator){ +var it=collection.iterator(); +var min=it.next(); +while(it.hasNext()){ +var next=it.next(); +if(comparator.compare(min,next)>0){ +min=next; +}} +return min; +},"java.util.Collection,java.util.Comparator"); +c$.nCopies=Clazz.defineMethod(c$,"nCopies", +function(length,object){ +return new java.util.Collections.CopiesList(length,object); +},"~N,~O"); +c$.reverse=Clazz.defineMethod(c$,"reverse", +function(list){ +var size=list.size(); +var front=list.listIterator(); +var back=list.listIterator(size); +for(var i=0;i0;i--){ +var index=random.nextInt()%(i+1); +if(index<0){ +index=-index; +}var temp=array[i]; +array[i]=array[index]; +array[index]=temp; +} +var i=0; +var it=list.listIterator(); +while(it.hasNext()){ +it.next(); +it.set(array[i++]); +} +}else{ +var rawList=list; +for(var i=rawList.size()-1;i>0;i--){ +var index=random.nextInt()%(i+1); +if(index<0){ +index=-index; +}rawList.set(index,rawList.set(i,rawList.get(index))); +} +}},"java.util.List,java.util.Random"); +c$.singleton=Clazz.defineMethod(c$,"singleton", +function(object){ +return new java.util.Collections.SingletonSet(object); +},"~O"); +c$.singletonList=Clazz.defineMethod(c$,"singletonList", +function(object){ +return new java.util.Collections.SingletonList(object); +},"~O"); +c$.singletonMap=Clazz.defineMethod(c$,"singletonMap", +function(key,value){ +return new java.util.Collections.SingletonMap(key,value); +},"~O,~O"); +c$.sort=Clazz.defineMethod(c$,"sort", +function(list){ +var array=list.toArray(); +java.util.Arrays.sort(array); +var i=0; +var it=list.listIterator(); +while(it.hasNext()){ +it.next(); +it.set(array[i++]); +} +},"java.util.List"); +c$.sort=Clazz.defineMethod(c$,"sort", +function(list,comparator){ +var array=list.toArray(new Array(list.size())); +java.util.Arrays.sort(array,comparator); +var i=0; +var it=list.listIterator(); +while(it.hasNext()){ +it.next(); +it.set(array[i++]); +} +},"java.util.List,java.util.Comparator"); +c$.swap=Clazz.defineMethod(c$,"swap", +function(list,index1,index2){ +if(list==null){ +throw new NullPointerException(); +}if(index1==index2){ +return; +}var rawList=list; +rawList.set(index2,rawList.set(index1,rawList.get(index2))); +},"java.util.List,~N,~N"); +c$.replaceAll=Clazz.defineMethod(c$,"replaceAll", +function(list,obj,obj2){ +var index; +var found=false; +while((index=list.indexOf(obj))>-1){ +found=true; +list.set(index,obj2); +} +return found; +},"java.util.List,~O,~O"); +c$.rotate=Clazz.defineMethod(c$,"rotate", +function(lst,dist){ +var list=lst; +var size=list.size(); +if(size==0){ +return; +}var normdist; +if(dist>0){ +normdist=dist%size; +}else{ +normdist=size-((dist%size)*(-1)); +}if(normdist==0||normdist==size){ +return; +}if(Clazz.instanceOf(list,java.util.RandomAccess)){ +var temp=list.get(0); +var index=0; +var beginIndex=0; +for(var i=0;isize){ +return-1; +}if(sublistSize==0){ +return 0; +}var firstObj=sublist.get(0); +var index=list.indexOf(firstObj); +if(index==-1){ +return-1; +}while(index=sublistSize)){ +var listIt=list.listIterator(index); +if((firstObj==null)?listIt.next()==null:firstObj.equals(listIt.next())){ +var sublistIt=sublist.listIterator(1); +var difFound=false; +while(sublistIt.hasNext()){ +var element=sublistIt.next(); +if(!listIt.hasNext()){ +return-1; +}if((element==null)?listIt.next()!=null:!element.equals(listIt.next())){ +difFound=true; +break; +}} +if(!difFound){ +return index; +}}index++; +} +return-1; +},"java.util.List,java.util.List"); +c$.lastIndexOfSubList=Clazz.defineMethod(c$,"lastIndexOfSubList", +function(list,sublist){ +var sublistSize=sublist.size(); +var size=list.size(); +if(sublistSize>size){ +return-1; +}if(sublistSize==0){ +return size; +}var lastObj=sublist.get(sublistSize-1); +var index=list.lastIndexOf(lastObj); +while((index>-1)&&(index+1>=sublistSize)){ +var listIt=list.listIterator(index+1); +if((lastObj==null)?listIt.previous()==null:lastObj.equals(listIt.previous())){ +var sublistIt=sublist.listIterator(sublistSize-1); +var difFound=false; +while(sublistIt.hasPrevious()){ +var element=sublistIt.previous(); +if(!listIt.hasPrevious()){ +return-1; +}if((element==null)?listIt.previous()!=null:!element.equals(listIt.previous())){ +difFound=true; +break; +}} +if(!difFound){ +return listIt.nextIndex(); +}}index--; +} +return-1; +},"java.util.List,java.util.List"); +c$.list=Clazz.defineMethod(c$,"list", +function(enumeration){ +var list=new java.util.ArrayList(); +while(enumeration.hasMoreElements()){ +list.add(enumeration.nextElement()); +} +return list; +},"java.util.Enumeration"); +c$.synchronizedCollection=Clazz.defineMethod(c$,"synchronizedCollection", +function(collection){ +if(collection==null){ +throw new NullPointerException(); +}return new java.util.Collections.SynchronizedCollection(collection); +},"java.util.Collection"); +c$.synchronizedList=Clazz.defineMethod(c$,"synchronizedList", +function(list){ +if(list==null){ +throw new NullPointerException(); +}if(Clazz.instanceOf(list,java.util.RandomAccess)){ +return new java.util.Collections.SynchronizedRandomAccessList(list); +}return new java.util.Collections.SynchronizedList(list); +},"java.util.List"); +c$.synchronizedMap=Clazz.defineMethod(c$,"synchronizedMap", +function(map){ +if(map==null){ +throw new NullPointerException(); +}return new java.util.Collections.SynchronizedMap(map); +},"java.util.Map"); +c$.synchronizedSet=Clazz.defineMethod(c$,"synchronizedSet", +function(set){ +if(set==null){ +throw new NullPointerException(); +}return new java.util.Collections.SynchronizedSet(set); +},"java.util.Set"); +c$.synchronizedSortedMap=Clazz.defineMethod(c$,"synchronizedSortedMap", +function(map){ +if(map==null){ +throw new NullPointerException(); +}return new java.util.Collections.SynchronizedSortedMap(map); +},"java.util.SortedMap"); +c$.synchronizedSortedSet=Clazz.defineMethod(c$,"synchronizedSortedSet", +function(set){ +if(set==null){ +throw new NullPointerException(); +}return new java.util.Collections.SynchronizedSortedSet(set); +},"java.util.SortedSet"); +c$.unmodifiableCollection=Clazz.defineMethod(c$,"unmodifiableCollection", +function(collection){ +if(collection==null){ +throw new NullPointerException(); +}return new java.util.Collections.UnmodifiableCollection(collection); +},"java.util.Collection"); +c$.unmodifiableList=Clazz.defineMethod(c$,"unmodifiableList", +function(list){ +if(list==null){ +throw new NullPointerException(); +}if(Clazz.instanceOf(list,java.util.RandomAccess)){ +return new java.util.Collections.UnmodifiableRandomAccessList(list); +}return new java.util.Collections.UnmodifiableList(list); +},"java.util.List"); +c$.unmodifiableMap=Clazz.defineMethod(c$,"unmodifiableMap", +function(map){ +if(map==null){ +throw new NullPointerException(); +}return new java.util.Collections.UnmodifiableMap(map); +},"java.util.Map"); +c$.unmodifiableSet=Clazz.defineMethod(c$,"unmodifiableSet", +function(set){ +if(set==null){ +throw new NullPointerException(); +}return new java.util.Collections.UnmodifiableSet(set); +},"java.util.Set"); +c$.unmodifiableSortedMap=Clazz.defineMethod(c$,"unmodifiableSortedMap", +function(map){ +if(map==null){ +throw new NullPointerException(); +}return new java.util.Collections.UnmodifiableSortedMap(map); +},"java.util.SortedMap"); +c$.unmodifiableSortedSet=Clazz.defineMethod(c$,"unmodifiableSortedSet", +function(set){ +if(set==null){ +throw new NullPointerException(); +}return new java.util.Collections.UnmodifiableSortedSet(set); +},"java.util.SortedSet"); +c$.frequency=Clazz.defineMethod(c$,"frequency", +function(c,o){ +if(c==null){ +throw new NullPointerException(); +}if(c.isEmpty()){ +return 0; +} +var result=0; +var itr=c.iterator(); +while(itr.hasNext()){ +var e=itr.next(); +if(o==null?e==null:o.equals(e)){ +result++; +}} +return result; +},"java.util.Collection,~O"); + +c$.emptyList=Clazz.defineMethod(c$,"emptyList", +function(){ +return java.util.Collections.EMPTY_LIST; +}); +c$.emptySet=Clazz.defineMethod(c$,"emptySet", +function(){ +return java.util.Collections.EMPTY_SET; +}); +c$.emptyMap=Clazz.defineMethod(c$,"emptyMap", +function(){ +return java.util.Collections.EMPTY_MAP; +}); +c$.checkedCollection=Clazz.defineMethod(c$,"checkedCollection", +function(c,type){ +return new java.util.Collections.CheckedCollection(c,type); +},"java.util.Collection,Class"); +c$.checkedMap=Clazz.defineMethod(c$,"checkedMap", +function(m,keyType,valueType){ +return new java.util.Collections.CheckedMap(m,keyType,valueType); +},"java.util.Map,Class,Class"); +c$.checkedList=Clazz.defineMethod(c$,"checkedList", +function(list,type){ +if(Clazz.instanceOf(list,java.util.RandomAccess)){ +return new java.util.Collections.CheckedRandomAccessList(list,type); +}return new java.util.Collections.CheckedList(list,type); +},"java.util.List,Class"); +c$.checkedSet=Clazz.defineMethod(c$,"checkedSet", +function(s,type){ +return new java.util.Collections.CheckedSet(s,type); +},"java.util.Set,Class"); +c$.checkedSortedMap=Clazz.defineMethod(c$,"checkedSortedMap", +function(m,keyType,valueType){ +return new java.util.Collections.CheckedSortedMap(m,keyType,valueType); +},"java.util.SortedMap,Class,Class"); +c$.checkedSortedSet=Clazz.defineMethod(c$,"checkedSortedSet", +function(s,type){ +return new java.util.Collections.CheckedSortedSet(s,type); +},"java.util.SortedSet,Class"); +c$.addAll=Clazz.defineMethod(c$,"addAll", +function(c,a){ +var modified=false; +for(var i=0;ic1.size()){ +var tmp=c1; +c1=c2; +c2=tmp; +}var it=c1.iterator(); +while(it.hasNext()){ +if(c2.contains(it.next())){ +return false; +}} +return true; +},"java.util.Collection,java.util.Collection"); +c$.checkType=Clazz.defineMethod(c$,"checkType", +function(obj,type){ +if(!type.isInstance(obj)){ +throw new ClassCastException("Attempt to insert "+obj.getClass()+" element into collection with element type "+type); +}return obj; +},"~O,Class"); + +c$.$Collections$1$=function(c){ +/*if*/;(function(){ var +c$=Clazz.decorateAsClass(function(){ +Clazz.prepareCallback(this,arguments); +this.it=null; +Clazz.instantialize(this,arguments); +},java.util,"Collections$1",null,java.util.Enumeration); + +Clazz.prepareFields(c$,function(){ +this.it=c.iterator(); +}); + +Clazz.defineMethod(c$,"hasMoreElements", +function(){ +return this.it.hasNext(); +}); +Clazz.defineMethod(c$,"nextElement", +function(){ +return this.it.next(); +}); +/*eoif*/})(); +}; + +/*if*/;(function(){ var +c$=Clazz.decorateAsClass(function(){ +this.n=0; +this.element=null; +Clazz.instantialize(this,arguments); +},java.util.Collections,"CopiesList",java.util.AbstractList,java.io.Serializable); +Clazz.makeConstructor(c$, +function(a,b){ +Clazz.superConstructor(this,java.util.Collections.CopiesList,[]); +if(a<0){ +throw new IllegalArgumentException(); +}this.n=a; +this.element=b; +},"~N,~O"); +Clazz.overrideMethod(c$,"contains", +function(a){ +return this.element==null?a==null:this.element.equals(a); +},"~O"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.n; +}); +Clazz.overrideMethod(c$,"get", +function(a){ +if(0<=a&&a=0;){ +b[d]=c.next(); +} +return b; +}); +Clazz.defineMethod(c$,"toArray", +function(a){ +var b=this.c.size(); +var c=0; +var d=this.iterator(); +if(b>a.length){ +var e=a.getClass().getComponentType(); +a=java.lang.reflect.Array.newInstance(e,b); +}while(c=this.h$.firstSlot){ +if(this.h$.elementData[this.position]==null){ +this.position--; +}else{ +return true; +}} +return false; +}); +Clazz.overrideMethod(c$,"next", +function(){ +if(this.expectedModCount==this.h$.modCount){ +if(this.lastEntry){ +this.lastEntry=this.lastEntry.next; +}if(this.lastEntry==null){ +while(this.position>=this.h$.firstSlot&&(this.lastEntry=this.h$.elementData[this.position])==null){ +this.position--; +} +if(this.lastEntry){ +this.lastPosition=this.position; +this.position--; +}}if(this.lastEntry){ +this.canRemove=true; +return this.type.get(this.lastEntry); +}throw new java.util.NoSuchElementException(); +}throw new java.util.ConcurrentModificationException(); +}); +Clazz.overrideMethod(c$,"remove", +function(){ +if(this.expectedModCount==this.h$.modCount){ +if(this.canRemove){ +this.canRemove=false; +{ +var a=false; +var b=this.h$.elementData[this.lastPosition]; +if(b===this.lastEntry){ +this.h$.elementData[this.lastPosition]=b.next; +a=true; +}else{ +while(b&&b.next!==this.lastEntry){ +b=b.next; +} +if(b){ +b.next=this.lastEntry.next; +a=true; +}}if(a){ +this.h$.modCount++; +this.h$.elementCount--; +this.expectedModCount++; +return; +}}}else{ +throw new IllegalStateException(); +}}throw new java.util.ConcurrentModificationException(); +}); +}); + + + +//////////////////////////// + + +Clazz.load([],"java.util.HashtableEnumerator",[],function(){ +c$=Clazz.decorateAsClass(function(){ +this.key=false; +this.start=0; +this.entry=null; +Clazz.instantialize(this,arguments); +},java.util,"HashtableEnumerator",null,java.util.Enumeration); + +Clazz.makeConstructor(c$, +function(a, b){ +this.key = a; +this.h$ = b; +if (this.h$)this.start=this.h$.lastSlot+1; +},"~B,java.util.Hashtable"); +Clazz.overrideMethod(c$,"hasMoreElements", +function(){ +if (!this.h$)return false; +if(this.entry)return true; + +while(--this.start>=this.h$.firstSlot){ +if(this.h$.elementData[this.start]){ +this.entry=this.h$.elementData[this.start]; +return true; +}} +return false; +}); +Clazz.overrideMethod(c$,"nextElement", +function(){ +if(this.hasMoreElements()){ +var a=this.key?this.entry.key:this.entry.value; +this.entry=this.entry.next; +return a; +} +throw new java.util.NoSuchElementException(); +}); +}); + +//////////////////////////// + +Clazz.load(["java.util.AbstractSet"],"java.util.HashtableEntrySet",[],function(){ +c$=Clazz.decorateAsClass(function(){ +Clazz.instantialize(this,arguments); +},java.util,"HashtableEntrySet",java.util.AbstractSet,null); + +Clazz.makeConstructor(c$, +function(a){ +this.h$ = a; +},"java.util.Hashtable"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.h$.elementCount; +}); +Clazz.overrideMethod(c$,"clear", +function(){ +this.h$.clear(); +}); +Clazz.overrideMethod(c$,"remove", +function(object){ +if(this.contains(object)){ +this.h$.remove((object).getKey()); +return true; +}return false; +},"~O"); +Clazz.defineMethod(c$,"contains", +function(object){ +var entry=this.h$.getEntry((object).getKey()); +return object.equals(entry); +},"~O"); + +Clazz.overrideMethod(c$,"get", +function(entry){ +return entry; +},"java.util.MapEntry"); + +Clazz.defineMethod(c$,"iterator", +function(){ +return new java.util.HashtableIterator(this); +}); +}); + + +//////////////////////////// + +Clazz.load(["java.util.AbstractSet"],"java.util.HashtableKeySet",[],function(){ +c$=Clazz.decorateAsClass(function(){ +Clazz.instantialize(this,arguments); +},java.util,"HashtableKeySet",java.util.AbstractSet,null); + +Clazz.makeConstructor(c$, +function(a){ +this.h$ = a; +},"java.util.Hashtable"); + +Clazz.overrideMethod(c$,"contains", +function(object){ +return this.h$.containsKey(object); +},"~O"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.h$.elementCount; +}); +Clazz.overrideMethod(c$,"clear", +function(){ +this.h$.clear(); +}); +Clazz.overrideMethod(c$,"remove", +function(key){ +if(this.h$.containsKey(key)){ +this.h$.remove(key); +return true; +}return false; +},"~O"); + +Clazz.overrideMethod(c$,"get", +function(entry){ +return entry.key; +},"java.util.MapEntry"); + +Clazz.overrideMethod(c$,"iterator", +function(){ +return new java.util.HashtableIterator(this); +}); +}); + +//////////////////////////// + +Clazz.load(["java.util.AbstractCollection"],"java.util.HashtableValueCollection",[],function(){ +c$=Clazz.decorateAsClass(function(){ +Clazz.instantialize(this,arguments); +},java.util,"HashtableValueCollection",java.util.AbstractCollection,null); + +Clazz.makeConstructor(c$, +function(a){ +this.h$ = a; +},"java.util.Hashtable"); +Clazz.overrideMethod(c$,"contains", +function(object){ +return this.h$.contains(object); +},"~O"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.h$.elementCount; +}); +Clazz.overrideMethod(c$,"clear", +function(){ +this.h$.clear(); +}); + +Clazz.overrideMethod(c$,"get", +function(entry){ +return entry.value; +},"java.util.MapEntry"); + +Clazz.overrideMethod(c$,"iterator", +function(){ +return new java.util.HashtableIterator(this); +}); +}); +//////////////////////////// + + +Clazz.load(["java.util.MapEntry"],"java.util.HashtableEntry",[],function(){ +c$=Clazz.decorateAsClass(function(){ +this.next=null; +this.hashcode=0; +Clazz.instantialize(this,arguments); +},java.util,"HashtableEntry",java.util.MapEntry); +Clazz.overrideConstructor(c$, +function(a,b){ +this.key = a; +this.value = b; +this.hashcode=a.hashCode(); +}); +Clazz.defineMethod(c$,"clone", +function(){ +var a=Clazz.superCall(this,java.util.HashtableEntry,"clone",[]); +if(this.next!=null){ +a.next=this.next.clone(); +} +return a; +}); +Clazz.overrideMethod(c$,"setValue", +function(a){ +if(a==null){ +throw new NullPointerException(); +}var b=this.value; +this.value=a; +return b; +},"~O"); +Clazz.defineMethod(c$,"getKeyHash", +function(){ +return this.key.hashCode(); +}); +Clazz.defineMethod(c$,"equalsKey", +function(a,b){ +return this.hashcode==(!a.hashCode || a.hashCode())&&this.key.equals(a); +},"~O,~N"); +Clazz.overrideMethod(c$,"toString", +function(){ +return this.key+"="+this.value; +}); +}); + + + +//////////////////////////// + + +Clazz.load(["java.util.Dictionary","$.Enumeration","$.HashtableEnumerator","$.Iterator","$.Map","$.MapEntry","$.NoSuchElementException"],"java.util.Hashtable",["java.lang.IllegalArgumentException","$.IllegalStateException","$.NullPointerException","java.util.AbstractCollection","$.AbstractSet","$.Arrays","$.Collections","$.ConcurrentModificationException","java.util.MapEntry.Type","java.util.HashtableEntry"],function(){ +c$=Clazz.decorateAsClass(function(){ +this.elementCount=0; +this.elementData=null; +this.loadFactor=0; +this.threshold=0; +this.firstSlot=0; +this.lastSlot=-1; +this.modCount=0; +Clazz.instantialize(this,arguments); +},java.util,"Hashtable",java.util.Dictionary,[java.util.Map,Cloneable,java.io.Serializable]); +c$.newEntry=Clazz.defineMethod(c$,"newEntry", +($fz=function(key,value,hash){ +return new java.util.HashtableEntry(key,value); +},$fz.isPrivate=true,$fz),"~O,~O,~N"); +Clazz.overrideConstructor(c$, +function(){ +this.elementCount=0; +this.elementData=this.newElementArray(11); +this.firstSlot=this.elementData.length; +this.loadFactor=0.75; +this.computeMaxSize(); +}); +Clazz.defineMethod(c$,"newElementArray", +($fz=function(size){ +return new Array(size); +},$fz.isPrivate=true,$fz),"~N"); +Clazz.overrideMethod(c$,"clear", +function(){ +this.elementCount=0; +for (var i = this.elementData.length; --i >= 0;) + this.elementData[i] = null; +this.modCount++; +}); +Clazz.defineMethod(c$,"clone", +function(){ +try{ +var hashtable=Clazz.superCall(this,java.util.Hashtable,"clone",[]); +hashtable.elementData=new Array(this.elementData.length); +for(var i = this.elementData.length; --i >= 0;) + if (this.elementData[i] != null) + hashtable.elementData[i]=this.elementData[i].clone(); +return hashtable; +}catch(e){ +if(Clazz.instanceOf(e,CloneNotSupportedException)){ +return null; +}else{ +throw e; +} +} +}); +Clazz.defineMethod(c$,"computeMaxSize", +($fz=function(){ +this.threshold=Math.round((this.elementData.length*this.loadFactor)); +},$fz.isPrivate=true,$fz)); +Clazz.defineMethod(c$,"contains", +function(value){ +if(value==null){ +throw new NullPointerException(); +}for(var i=this.elementData.length;--i>=0;){ +var entry=this.elementData[i]; +while(entry){ +if(value.equals(entry.value)){ +return true; +}entry=entry.next; +} +} +return false; +},"~O"); +Clazz.overrideMethod(c$,"containsKey", +function(key){ + if(!key.hashCode) { + key.hashCode = function(){return 1}; + if (!key.equals) + key.equals = function(a) {return this == a}; + } +return this.getEntry(key)!=null ; +},"~O"); +Clazz.overrideMethod(c$,"containsValue", +function(value){ +return this.contains(value); +},"~O"); +Clazz.overrideMethod(c$,"elements", +function(){ +if(this.elementCount==0){ +return java.util.Hashtable.EMPTY_ENUMERATION; +} +return new java.util.HashtableEnumerator(false, this); +}); +Clazz.overrideMethod(c$,"entrySet", +function(){ +return new java.util.HashtableEntrySet(this); +}); +Clazz.overrideMethod(c$,"equals", +function(object){ +if(this===object){ +return true; +}if(Clazz.instanceOf(object,java.util.Map)){ +var map=object; +if(this.size()!=map.size()){ +return false; +}var entries=this.entrySet(); +for(var e,$e=map.entrySet().iterator();$e.hasNext()&&((e=$e.next())||true);){ +if(!entries.contains(e)){ +return false; +}} +return true; +}return false; +},"~O"); +Clazz.overrideMethod(c$,"get", +function(key){ + if(!key.hashCode) { + key.hashCode = function(){return 1}; + if (!key.equals) + key.equals = function(a) {return this == a}; + } +var hash=key.hashCode(); +var index=(hash&0x7FFFFFFF)%this.elementData.length; +var entry=this.elementData[index]; +while(entry){ +if(entry.equalsKey(key,hash)){ +return entry.value; +}entry=entry.next; +} +return null; +},"~O"); +Clazz.defineMethod(c$,"getEntry", +function(key){ +var hash=key.hashCode(); +var index=(hash&0x7FFFFFFF)%this.elementData.length; +var entry=this.elementData[index]; +while(entry){ +if(entry.equalsKey(key,hash)){ +return entry; +}entry=entry.next; +} +return null; +},"~O"); +Clazz.overrideMethod(c$,"hashCode", +function(){ +var result=0; +var it=this.entrySet().iterator(); +while(it.hasNext()){ +var entry=it.next(); +var key=entry.getKey(); +var value=entry.getValue(); +var hash=(key!==this?key.hashCode():0)^(value!==this?(value!=null?value.hashCode():0):0); +result+=hash; +} +return result; +}); +Clazz.overrideMethod(c$,"isEmpty", +function(){ +return this.elementCount==0; +}); +Clazz.overrideMethod(c$,"keys", +function(){ +if(this.elementCount==0){ +return java.util.Hashtable.EMPTY_ENUMERATION; +} +return new java.util.HashtableEnumerator(true, this); +}); +Clazz.overrideMethod(c$,"keySet", +function(){ +return new java.util.HashtableKeySet(this); +}); +Clazz.overrideMethod(c$,"put", +function(key,value){ +if(key!=null&&value!=null){ + if(!key.hashCode) { + key.hashCode = function(){return 1}; + if (!key.equals) + key.equals = function(a) {return this == a}; + } + var hash=key.hashCode(); + var index=(hash&0x7FFFFFFF)%this.elementData.length; + var entry=this.elementData[index]; + while(entry!=null&&!entry.equalsKey(key,hash)){ + entry=entry.next; +} +if(entry==null){ +this.modCount++; +if(++this.elementCount>this.threshold){ +this.rehash(); +index=(hash&0x7FFFFFFF)%this.elementData.length; +}if(indexthis.lastSlot){ +this.lastSlot=index; +} + +entry=java.util.Hashtable.newEntry(key,value,hash); +entry.next=this.elementData[index]; +this.elementData[index]=entry; +return null; +}var result=entry.value; +entry.value=value; +return result; +}throw new NullPointerException(); +},"~O,~O"); +Clazz.overrideMethod(c$,"putAll", +function(map){ +for(var entry,$entry=map.entrySet().iterator();$entry.hasNext()&&((entry=$entry.next())||true);){ +this.put(entry.getKey(),entry.getValue()); +} +},"java.util.Map"); + +Clazz.defineMethod(c$,"rehash", +function(){ +var length=(this.elementData.length<<1)+1; +if(length==0){ +length=1; +}var newFirst=length; +var newLast=-1; +var newData=this.newElementArray(length); +for(var i=this.lastSlot+1;--i>=this.firstSlot;){ +var entry=this.elementData[i]; +while(entry!=null){ +var index=(entry.getKeyHash()&0x7FFFFFFF)%length; +if(indexnewLast){ +newLast=index; +}var next=entry.next; +entry.next=newData[index]; +newData[index]=entry; +entry=next; +} +} +this.firstSlot=newFirst; +this.lastSlot=newLast; +this.elementData=newData; +this.computeMaxSize(); +}); +Clazz.overrideMethod(c$,"remove", +function(key){ +var hash=key.hashCode(); +var index=(hash&0x7FFFFFFF)%this.elementData.length; +var last=null; +var entry=this.elementData[index]; +while(entry!=null&&!entry.equalsKey(key,hash)){ +last=entry; +entry=entry.next; +} +if(entry!=null){ +this.modCount++; +if(last==null){ +this.elementData[index]=entry.next; +}else{ +last.next=entry.next; +}this.elementCount--; +var result=entry.value; +entry.value=null; +return result; +}return null; +},"~O"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.elementCount; +}); +Clazz.overrideMethod(c$,"toString", +function(){ +if(this.isEmpty()){ +return"{}"; +}var buffer='{'; +var sep = ""; +for(var i=this.lastSlot;i>=this.firstSlot;i--){ +var entry=this.elementData[i]; +while(entry!=null){ + buffer += sep; +if(entry.key!==this){ +buffer += (entry.key); +}else{ +buffer += ("(this Map)"); +}buffer += ('='); +if(entry.value!==this){ +buffer += (entry.value); +}else{ +buffer += ("(this Map)"); +} +sep = ", "; +entry=entry.next; +} +} +return buffer + "}"; +}); +Clazz.overrideMethod(c$,"values", +function(){ +return new java.util.HashtableValueCollection(this); +}); +java.util.Hashtable.EMPTY_ENUMERATION = new java.util.HashtableEnumerator(); +}); diff --git a/sources/net.sf.j2s.java.core/unused/MatchResult.java b/sources/net.sf.j2s.java.core/unused/MatchResult.java new file mode 100644 index 000000000..fc9d49fc6 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/MatchResult.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @author Nikolay A. Kuznetsov + * @version $Revision: 1.6.2.2 $ + */ +package java.util.regex; + +/** + * @com.intel.drl.spec_ref + * + * @author Nikolay A. Kuznetsov + * @version $Revision: 1.6.2.2 $ + */ +public interface MatchResult { + + /** + * @com.intel.drl.spec_ref + */ + int end(); + + /** + * @com.intel.drl.spec_ref + */ + int end(int group); + + /** + * @com.intel.drl.spec_ref + */ + String group(); + + /** + * @com.intel.drl.spec_ref + */ + String group(int group); + + /** + * @com.intel.drl.spec_ref + */ + int groupCount(); + + /** + * @com.intel.drl.spec_ref + */ + int start(); + + /** + * @com.intel.drl.spec_ref + */ + int start(int group); +} diff --git a/sources/net.sf.j2s.java.core/unused/Matcher.java b/sources/net.sf.j2s.java.core/unused/Matcher.java new file mode 100644 index 000000000..0feb12dc9 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/Matcher.java @@ -0,0 +1,579 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util.regex; + +public final class Matcher /*implements MatchResult*/ { + + + @SuppressWarnings("unused") + private Pattern pat; + + CharSequence string; + + String strString = null; + + // bounds + private int leftBound = -1; + + private int rightBound = -1; + + private String[] results; + + Matcher(Pattern pat, CharSequence cs) { + this.pat = pat; + this.string = cs; + this.strString = cs.toString(); + this.leftBound = 0; + this.rightBound = strString.length(); + } + + + + public boolean find() { + @SuppressWarnings("unused") + String s = (this.rightBound == this.strString.length() ? this.strString + : this.strString.substring(0, this.rightBound)); + @SuppressWarnings("unused") + int lb = this.leftBound; + + /** + * @j2sNative + * + * this.pat.regexp.lastIndex = this.leftBound; + * this.results = this.pat.regexp.exec(s); + * this.leftBound = this.pat.regexp.lastIndex; + */ + { + } + return (this.results != null); + } + + //@Override + public int start() { + /** + * @js2Native + * + * this.pat.regexp.lastIndex - this.results[0].length; + * + */ + { + return 0; + } + } + + //@Override + public int start(int groupIndex) { + System.err.println("Matcher.start(groupIndex) not implemented"); + return start(); + } + + /** + * @com.intel.drl.spec_ref + */ + //@Override + public int end(int groupIndex) { + System.err.println("Matcher.end(groupIndex) not implemented"); + return end(); + } + + /** + * @com.intel.drl.spec_ref + */ + //@Override + public int end() { + /** + * @j2sNative + * return this.pat.regexp.lastIndex; + */ + { + return -1; + } + } + + //@Override + public String group(int groupIndex) { + if (results == null || groupIndex < 0 || groupIndex > results.length) { + return null; + } + return this.results[groupIndex]; + } + + //@Override + public String group() { + return group(0); + } + + /// END OF STORY FOR Jmol /// + +// static int MODE_FIND = 1 << 0; +// +// static int MODE_MATCH = 1 << 1; +// /** +// * Return a reference to the pattern used by this Matcher. +// * +// * @return A reference to the pattern used by this Matcher. +// */ +// public Pattern pattern() { +// return pat; +// } +// +// +// // replacements +// private int appendPos = 0; +// +// private String replacement = null; +// +// private String processedRepl = null; +// +//// private ArrayList replacementParts = null; +// private Object[] replacementParts = null; +// +// private int lastAppendIndex; +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public Matcher appendReplacement(StringBuffer sb, String replacement) { +// processedRepl = processReplacement(replacement); +// sb.append(string.subSequence(appendPos, start())); +// sb.append(processedRepl); +// appendPos = end(); +//// int beginningIndex = 0; +//// /** +//// * @j2sNative +//// beginningIndex = this.pat.regexp.lastIndex; +//// */ {} +//// beginningIndex -= this.results[0].length(); +//// sb.append(this.string.subSequence(lastAppendIndex, beginningIndex)); +//// /** +//// * @j2sNative +//// this.lastAppendIndex = this.pat.regexp.lastIndex; +//// */ {} +//// int idx = replacement.indexOf('$'); +//// if (idx == -1) { +//// sb.append(replacement); +//// } else /** @j2sNative +//// var re = new RegExp (this.pat.regexp.source, ""); +//// sb.append (this.results[0].replace (re, s)); +//// */ { +//// } +// return this; +// } +// +// /** +// * Parses replacement string and creates pattern +// */ +// private String processReplacement(String replacement) { +// if (this.replacement != null +// && this.replacement.equals(replacement)) { +// if (replacementParts == null) { +// return processedRepl; +// } else { +// StringBuffer sb = new StringBuffer(); +//// for (int i = 0; i < replacementParts.size(); i++) { +//// sb.append(replacementParts.get(i)); +//// } +// for (int i = 0; i < replacementParts.length; i++) { +// sb.append(replacementParts[i]); +// } +// +// return sb.toString(); +// } +// } else { +// this.replacement = replacement; +// char[] repl = replacement.toCharArray(); +// StringBuffer res = new StringBuffer(); +// replacementParts = null; +// +// int index = 0; +// int replacementPos = 0; +// boolean nextBackSlashed = false; +// +// while (index < repl.length) { +// +// if (repl[index] == '\\' && !nextBackSlashed) { +// nextBackSlashed = true; +// index++; +// } +// +// if (nextBackSlashed) { +// res.append(repl[index]); +// nextBackSlashed = false; +// } else { +// if (repl[index] == '$') { +// if (replacementParts == null) { +//// replacementParts = new ArrayList(); +// replacementParts = new Object[0]; +// } +// try { +// final int gr = Integer.parseInt(new String( +// repl, ++index, 1)); +// +// if (replacementPos != res.length()) { +//// replacementParts.add(res.subSequence( +//// replacementPos, res.length())); +// replacementParts[replacementParts.length] = res.subSequence( +// replacementPos, res.length()); +// replacementPos = res.length(); +// } +// +// /* +// replacementParts.add(new Object() { //$NON-LOCK-1$ +// private final int grN = gr; +// +// public String toString() { +// return group(grN); +// } +// }); +// */ +// replacementParts[replacementParts.length] = new Object() { //$NON-LOCK-1$ +// private final int grN = gr; +// +// //@Override +// public String toString() { +// return group(grN); +// } +// }; +// String group = group(gr); +// replacementPos += group.length(); +// res.append(group); +// +// } catch (IndexOutOfBoundsException iob) { +// throw iob; +// } catch (Exception e) { +// throw new IllegalArgumentException( +//// Messages.getString("regex.00")); //$NON-NLS-1$ +// "Illegal regular expression format"); +// } +// } else { +// res.append(repl[index]); +// } +// } +// +// index++; +// } +// +// if (replacementParts != null && replacementPos != res.length()) { +//// replacementParts.add(res.subSequence(replacementPos, res +//// .length())); +// replacementParts[replacementParts.length] = res.subSequence(replacementPos, res +// .length()); +// } +// return res.toString(); +// } +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public Matcher reset(CharSequence newSequence) { +// if (newSequence == null) { +//// throw new NullPointerException(Messages.getString("regex.01")); //$NON-NLS-1$ +// throw new NullPointerException("Empty new sequence!"); +// } +// this.string = newSequence; +// return reset(); +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public Matcher reset() { +// this.leftBound = 0; +// this.rightBound = string.length(); +//// matchResult.reset(string, leftBound, rightBound); +// appendPos = 0; +// replacement = null; +//// matchResult.previousMatch = -1; +// /** +// * @j2sNative +// var flags = "" + (this.pat.regexp.ignoreCase ? "i" : "") +// + (this.pat.regexp.global ? "g" : "") +// + (this.pat.regexp.multiline ? "m" : ""); +// this.pat.regexp = new RegExp (this.pat.regexp.source, flags); +// */ {} +// return this; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public Matcher region(int leftBound, int rightBound) { +// +// if (leftBound > rightBound || leftBound < 0 || rightBound < 0 +// || leftBound > string.length() || rightBound > string.length()) { +//// throw new IndexOutOfBoundsException( Messages.getString("regex.02", //$NON-NLS-1$ +//// Integer.toString(leftBound), Integer.toString(rightBound))); +// throw new IndexOutOfBoundsException( leftBound + " is out of bound of " + rightBound ); +// } +// +// this.leftBound = leftBound; +// this.rightBound = rightBound; +// +// this.results = null; +// +//// matchResult.reset(null, leftBound, rightBound); +// appendPos = 0; +// replacement = null; +// +// return this; +// } +// +// /** +// * TODO: appendTail(StringBuffer) javadoc +// * +// * @param sb +// * @return +// */ +// public StringBuffer appendTail(StringBuffer sb) { +// return sb.append(string.subSequence(appendPos, string.length())); +// } +// +// /** +// * This is very similar to replaceAll except only the first occurrence of a +// * sequence matching the pattern is replaced. +// * +// * @param replacement +// * A string to replace occurrences of character sequences +// * matching the pattern. +// * @return A new string with replacements inserted +// */ +// public String replaceFirst(String replacement) { +// reset(); +// if (find()) { +// StringBuffer sb = new StringBuffer(); +// appendReplacement(sb, replacement); +// return appendTail(sb).toString(); +// } +// +// return string.toString(); +// +// } +// +// /** +// * Replace all occurrences of character sequences which match the pattern +// * with the given replacement string. The replacement string may refer to +// * capturing groups using the syntax "$". +// * +// * @param replacement +// * A string to replace occurrences of character sequences +// * matching the pattern. +// * @return A new string with replacements inserted +// */ +// public String replaceAll(String replacement) { +// StringBuffer sb = new StringBuffer(); +// reset(); +// while (find()) { +// appendReplacement(sb, replacement); +// } +// +// return appendTail(sb).toString(); +// } +// /** +// * @com.intel.drl.spec_ref +// */ +// public boolean find(int startIndex) { +// int stringLength = string.length(); +// if (startIndex < 0 || startIndex > stringLength) +//// throw new IndexOutOfBoundsException(Messages.getString("regex.03", //$NON-NLS-1$ +//// new Integer(startIndex))); +// throw new IndexOutOfBoundsException("Out of bound " + startIndex); +// +// startIndex = findAt(startIndex); +//// if (startIndex >= 0 && matchResult.isValid()) { +//// matchResult.finalizeMatch(); +//// return true; +//// } +//// matchResult.startIndex = -1; +// return false; +// } +// +// private int findAt(int startIndex) { +//// matchResult.reset(); +//// matchResult.setMode(Matcher.MODE_FIND); +//// matchResult.setStartIndex(startIndex); +//// int foundIndex = start.find(startIndex, string, matchResult); +//// if (foundIndex == -1) { +//// matchResult.hitEnd = true; +//// } +//// return foundIndex; +// return -1; +// } +// /** +// * @com.intel.drl.spec_ref +// */ +// public static String quoteReplacement(String string) { +// // first check whether we have smth to quote +// if (string.indexOf('\\') < 0 && string.indexOf('$') < 0) +// return string; +// StringBuffer res = new StringBuffer(string.length() * 2); +// char ch; +// int len = string.length(); +// +// for (int i = 0; i < len; i++) { +// +// switch (ch = string.charAt(i)) { +// case '$': +// res.append('\\'); +// res.append('$'); +// break; +// case '\\': +// res.append('\\'); +// res.append('\\'); +// break; +// default: +// res.append(ch); +// } +// } +// +// return res.toString(); +// } +// +// /** +// * Runs match starting from set specified against input +// * sequence starting at index specified; Result of the match +// * will be stored into matchResult instance; +// */ +// private boolean runMatch(AbstractSet set, int index, +// MatchResultImpl matchResult) { +// +// if (set.matches(index, string, matchResult) >= 0) { +// matchResult.finalizeMatch(); +// return true; +// } +// +// return false; +// } +// +// /** +// * This method attempts to match the pattern against the character sequence +// * starting at the beginning. If the pattern matches even a prefix of the +// * input character sequence, lookingAt() will return true. Otherwise it will +// * return false. +// * +// * @return A boolean indicating if the pattern matches a prefix of the input +// * character sequence. +// */ +// public boolean lookingAt() { +//// return lookingAt(leftBound, Matcher.MODE_FIND); +// return false; +// } +// +// private boolean lookingAt(int startIndex, int mode) { +// matchResult.reset(); +// matchResult.setMode(mode); +// matchResult.setStartIndex(startIndex); +// return runMatch(start, startIndex, matchResult); +// } +// +// /** +// * Return the number of capturing groups in the pattern. +// * +// * @return The number of capturing groups in the pattern. +// */ +// //@Override +// public int groupCount() { +// return matchResult.groupCount(); +// return this.results == null ? 0 : this.results.length; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public MatchResult toMatchResult() { +//// return this.matchResult.cloneImpl(); +// return this; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public Matcher useAnchoringBounds(boolean value) { +//// matchResult.useAnchoringBounds(value); +// return this; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public boolean hasAnchoringBounds() { +//// return matchResult.hasAnchoringBounds(); +// return false; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public Matcher useTransparentBounds(boolean value) { +//// matchResult.useTransparentBounds(value); +// return this; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public boolean hasTransparentBounds() { +//// return matchResult.hasTransparentBounds(); +// return false; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public int regionStart() { +//// return matchResult.getLeftBound(); +// return this.leftBound; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public int regionEnd() { +//// return matchResult.getRightBound(); +// return this.rightBound; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public boolean requireEnd() { +//// return matchResult.requireEnd; +// return false; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public boolean hitEnd() { +//// return matchResult.hitEnd; +// return false; +// } +// +// /** +// * @com.intel.drl.spec_ref +// */ +// public Matcher usePattern(Pattern pat) { +// if (pat == null) { +// throw new IllegalArgumentException("Empty pattern!"); +// } +// this.pat = pat; +// this.results = null; +// return this; +// } + +} diff --git a/sources/net.sf.j2s.java.core/unused/Matcher.js b/sources/net.sf.j2s.java.core/unused/Matcher.js new file mode 100644 index 000000000..84ade2e86 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/Matcher.js @@ -0,0 +1,352 @@ +//Udo Borkowski 6/13/2016 12:39:12 AM "matches" +// BH 2023.11.17 Jmol only uses public find(), start() ,end(), and group() +//BH 12/25/2016 7:28:07 AM fix for find() not updating this.leftBound +//BH fix for String not having .length() or .subSequence() +//BH fix for not reinitializing correctly +//BH note that start(groupIndex) is not implemented for groupIndex > 0 + +Clazz.declarePackage("java.util.regex"); +Clazz.load(["java.util.regex.MatchResult"],"java.util.regex.Matcher",["java.lang.IllegalArgumentException","$.IndexOutOfBoundsException","$.NullPointerException"],function(){ +var $fz,c$=Clazz.decorateAsClass(function(){ +this.pat=null; +this.string=null; +this.strString=null; +this.leftBound=-1; +this.rightBound=-1; +this.appendPos=0; +this.replacement=null; +this.processedRepl=null; +this.replacementParts=null; +this.results=null; +Clazz.instantialize(this,arguments); +},java.util.regex,"Matcher",null,java.util.regex.MatchResult); + +Clazz.defineMethod(c$,"reset", +function(newSequence){ +if(newSequence==null){ +throw new NullPointerException("Empty new sequence!"); +}this.string=newSequence; +this.strString = null; +return this.reset(); +},"CharSequence"); + +Clazz.defineMethod(c$,"reset", +function(){ +this.leftBound=0; +this.rightBound=this.string.length(); +this.appendPos=0; +this.replacement=null; +{ +var flags=""+(this.pat.regexp.ignoreCase?"i":"") ++(this.pat.regexp.global?"g":"") ++(this.pat.regexp.multiline?"m":""); +this.pat.regexp=new RegExp(this.pat.regexp.source,flags); +}return this; +}); + +Clazz.defineMethod(c$,"find", +function(startIndex){ +return this.findFrom(startIndex); +},"~N"); + +Clazz.defineMethod(c$,"find", +function(){ +// 'find next' +return this.findImpl(); +}); + +Clazz.defineMethod(c$,"findFrom", +function(startIndex){ +// BH for SAEM +var stringLength=this.string.length(); +if(startIndex<0||startIndex>stringLength)throw new IndexOutOfBoundsException("Out of bound "+startIndex); +this.leftBound = startIndex; +this.rightBound = stringLength; +return this.findImpl(); +},"~N"); + +Clazz.defineMethod(c$,"findImpl", +function(){ +// BH for SAEM +if (this.strString == null) + this.strString = this.string.toString(); +var s = (this.rightBound == this.strString.length ? this.strString : this.string.subSequence(0,this.rightBound)); +this.pat.regexp.lastIndex = this.leftBound; +this.results=this.pat.regexp.exec(s); +this.leftBound = this.pat.regexp.lastIndex; +return(this.results!=null); +}); + +Clazz.defineMethod(c$,"start", +function(){ +return this.start(0); +}); + +Clazz.defineMethod(c$,"start", +function(groupIndex){ +return this.startImpl(groupIndex); +},"~N"); + +Clazz.defineMethod(c$,"startImpl", +function(groupIndex){ +// BH SAEM +// NOTE: TODO groupIndex is not implemented! +return this.pat.regexp.lastIndex - this.results[0].length; +},"~N"); + +Clazz.defineMethod(c$,"end", +function(){ +return this.end(0); +}); + +Clazz.defineMethod(c$,"end", +function(groupIndex){ + return this.pat.regexp.lastIndex; +},"~N"); + + +Clazz.defineMethod(c$,"appendReplacement", +function(sb,replacement){ +this.processedRepl=this.processReplacement(replacement); +sb.append(this.string.subSequence(this.appendPos,this.start())); +sb.append(this.processedRepl); +this.appendPos=this.end(); +return this; +},"StringBuffer,~S"); +Clazz.defineMethod(c$,"processReplacement", +($fz=function(replacement){ +if(this.replacement!=null&&this.replacement.equals(replacement)){ +if(this.replacementParts==null){ +return this.processedRepl; +}else{ +var sb=new StringBuffer(); +for(var i=0;irightBound||leftBound<0||rightBound<0||leftBound>this.string.length()||rightBound>this.string.length()){ +throw new IndexOutOfBoundsException(leftBound+" is out of bound of "+rightBound); +}this.leftBound=leftBound; +this.rightBound=rightBound; +this.results=null; +this.appendPos=0; +this.replacement=null; +return this; +},"~N,~N"); +Clazz.defineMethod(c$,"appendTail", +function(sb){ +return sb.append(this.string.subSequence(this.appendPos,this.string.length())); +},"StringBuffer"); +Clazz.defineMethod(c$,"replaceFirst", +function(replacement){ +this.reset(); +if(this.findImpl()){ +var sb=new StringBuffer(); +this.appendReplacement(sb,replacement); +return this.appendTail(sb).toString(); +}return this.string.toString(); +},"~S"); +Clazz.defineMethod(c$,"replaceAll", +function(replacement){ +var sb=new StringBuffer(); +this.reset(); +while(this.findImpl()){ +this.appendReplacement(sb,replacement); +} +return this.appendTail(sb).toString(); +},"~S"); +Clazz.defineMethod(c$,"pattern", +function(){ +return this.pat; +}); +Clazz.defineMethod(c$,"group", +function(groupIndex){ +if(this.results==null||groupIndex<0||groupIndex>this.results.length){ +return null; +}return this.results[groupIndex]; +},"~N"); +Clazz.defineMethod(c$,"group", +function(){ +return this.group(0); +}); + +Clazz.defineMethod(c$,"findAt", +($fz=function(startIndex){ +// BH what is this? +return-1; +},$fz.isPrivate=true,$fz),"~N"); + +Clazz.defineMethod(c$,"matches", +function(){ +// UB: the find must match the complete input and not modify the RE object +var old_lastIndex = this.pat.regexp.lastIndex; +try { +this.findImpl(); +var r = this.results; +return r && r.length > 0 && r[0].length === r.input.length; +} finally { +// Restore the old state of the RE object +this.pat.regexp.lastIndex = old_lastIndex; +} +}); + +c$.quoteReplacement=Clazz.defineMethod(c$,"quoteReplacement", +function(string){ +if(string.indexOf('\\') < 0 && string.indexOf ('$')<0)return string; +var res=new StringBuffer(string.length*2); +var ch; +var len=string.length; +for(var i=0;i= 1) { +// char[] temp = new char[index]; +// Arrays.fill(temp, ' '); +// filler = new String(temp); +// } +// return desc +// + ((pattern != null && pattern.length() != 0) ? Messages.getString("regex.07", //$NON-NLS-1$ +// new Object[]{index, pattern, filler}) : ""); //$NON-NLS-1$ +// } + + /** + * @com.intel.drl.spec_ref + */ + public String getMessage() { + /* + String nl = System.getProperty("line.separator"); + StringBuffer sb = new StringBuffer(); + sb.append(desc); + if (index >= 0) { + sb.append(" near index "); + sb.append(index); + } + sb.append(nl); + sb.append(pattern); + if (index >= 0) { + sb.append(nl); + for (int i = 0; i < index; i++) sb.append(' '); + sb.append('^'); + } + return sb.toString(); + */ + String s = desc; + if (index >= 0) { + s += " near index " + index; + } + s += "\r\n" + pattern; + if (index >= 0) { + s += "\r\n"; + for (int i = 0; i < index; i++) s += ' '; + s += '^'; + } + return s; + } + + /** + * @com.intel.drl.spec_ref + */ + public String getDescription() { + return desc; + } + + /** + * @com.intel.drl.spec_ref + */ + public int getIndex() { + return index; + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/StringBuffer.java b/sources/net.sf.j2s.java.core/unused/StringBuffer.java new file mode 100644 index 000000000..5f6aa8ca1 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/StringBuffer.java @@ -0,0 +1,855 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +/** + * StringBuffer is a variable size contiguous indexable array of characters. The + * length of the StringBuffer is the number of characters it contains. The + * capacity of the StringBuffer is the number of characters it can hold. + *

+ * Characters may be inserted at any position up to the length of the + * StringBuffer, increasing the length of the StringBuffer. Characters at any + * position in the StringBuffer may be replaced, which does not affect the + * StringBuffer length. + *

+ * The capacity of a StringBuffer may be specified when the StringBuffer is + * created. If the capacity of the StringBuffer is exceeded, the capacity is + * increased. + * + * @see String + * @see StringBuilder + * @since 1.0 + */ +public final class StringBuffer extends AbstractStringBuilder implements + Appendable, Serializable, CharSequence { + + private static final long serialVersionUID = 3388685877147921107L; + + /* + private static final ObjectStreamField serialPersistentFields[] = { + new ObjectStreamField("count", int.class), + new ObjectStreamField("shared", boolean.class), + new ObjectStreamField("value", char[].class), }; + */ + + /** + * Constructs a new StringBuffer using the default capacity. + */ + public StringBuffer() { + super(); + } + + /** + * Constructs a new StringBuffer using the specified capacity. + * + * @param capacity the initial capacity + */ + public StringBuffer(int capacity) { + super(capacity); + } + + /** + * Constructs a new StringBuffer containing the characters in the specified + * string and the default capacity. + * + * @param string the string content with which to initialize the new + * StringBuffer instance + * @throws NullPointerException on supplying a null value of + * string + */ + public StringBuffer(String string) { + super(string); + } + + /** + *

+ * Constructs a StringBuffer and initializes it with the characters in the + * CharSequence. + *

+ * + * @param cs The CharSequence to initialize the instance. + * @throws NullPointerException if the cs parameter is + * null. + * @since 1.5 + * + * @j2sNative + * if (cs == null) { + * throw new NullPointerException(); + * } + * Clazz.superConstructor(this, StringBuffer, [cs.toString()]); + */ + public StringBuffer(CharSequence cs) { + super(cs.toString()); + } + + /** + * Adds the string representation of the specified boolean to the end of + * this StringBuffer. + * + * @param b the boolean + * @return this StringBuffer + */ + public StringBuffer append(boolean b) { + return append(b ? "true" : "false"); + } + + /** + * Adds the specified character to the end of this StringBuffer. + * + * @param ch a character + * @return this StringBuffer + */ + public synchronized StringBuffer append(char ch) { + append0(ch); + return this; + } + + /** + * Adds the string representation of the specified double to the end of this + * StringBuffer. + * + * @param d the double + * @return this StringBuffer + */ + public StringBuffer append(double d) { + return append(Double.toString(d)); + } + + /** + * Adds the string representation of the specified float to the end of this + * StringBuffer. + * + * @param f the float + * @return this StringBuffer + * + * @j2sIgnore + */ + public StringBuffer append(float f) { + return append(Float.toString(f)); + } + + /** + * Adds the string representation of the specified integer to the end of + * this StringBuffer. + * + * @param value the integer + * @return this StringBuffer + * + * @j2sIgnore + */ + public StringBuffer append(int i) { + return append(Integer.toString(i)); + } + + /** + * Adds the string representation of the specified long to the end of this + * StringBuffer. + * + * @param l the long + * @return this StringBuffer + * + * @j2sIgnore + */ + public StringBuffer append(long l) { + return append(Long.toString(l)); + } + + /** + * Adds the string representation of the specified object to the end of this + * StringBuffer. + * + * @param obj the object + * @return this StringBuffer + */ + public synchronized StringBuffer append(Object obj) { + if (obj == null) { + appendNull(); + } else { + append0(obj.toString()); + } + return this; + } + + /** + * Adds the specified string to the end of this StringBuffer. + * + * @param string the string + * @return this StringBuffer + */ + public synchronized StringBuffer append(String string) { + append0(string); + return this; + } + + /** + * Adds the specified StringBuffer to the end of this StringBuffer. + * + * @param sbuffer the StringBuffer + * @return this StringBuffer + * + * @since 1.4 + */ + public synchronized StringBuffer append(StringBuffer sb) { + if (sb == null) { + appendNull(); + } else { + synchronized (sb) { + append0(sb.getValue(), 0, sb.length()); + } + } + return this; + } + + /** + * Adds the character array to the end of this StringBuffer. + * + * @param chars the character array + * @return this StringBuffer + * + * @throws NullPointerException when chars is null + */ + public synchronized StringBuffer append(char chars[]) { + append0(chars); + return this; + } + + /** + * Adds the specified sequence of characters to the end of this + * StringBuffer. + * + * @param chars a character array + * @param start the starting offset + * @param length the number of characters + * @return this StringBuffer + * + * @throws ArrayIndexOutOfBoundsException when + * length < 0, start < 0 or + * start + length > chars.length + * @throws NullPointerException when chars is null + */ + public synchronized StringBuffer append(char chars[], int start, int length) { + append0(chars, start, length); + return this; + } + + /** + *

+ * Appends the CharSequence to this buffer. If the + * CharSequence is null, then the string + * "null" is appended. + *

+ * + * @param s The CharSequence to append. + * @return A reference to this object. + * @since 1.5 + */ + public synchronized StringBuffer append(CharSequence s) { + if (s == null) { + appendNull(); + } else { + append0(s.toString()); + } + return this; + } + + /** + *

+ * Appends the subsequence of the CharSequence to this + * buffer. If the CharSequence is null, then + * the string "null" is used to extract a subsequence. + *

+ * + * @param s The CharSequence to append. + * @param start The inclusive start index of the subsequence of the + * CharSequence. + * @param end The exclusive end index of the subsequence of the + * CharSequence. + * @return A reference to this object. + * @since 1.5 + * @throws IndexOutOfBoundsException if start or + * end are negative, start is greater + * than end or end is greater than the + * length of s. + */ + public synchronized StringBuffer append(CharSequence s, int start, int end) { + append0(s, start, end); + return this; + } + + /** + *

+ * Appends the encoded Unicode code point to this object. The code point is + * converted to a char[] as defined by + * {@link Character#toChars(int)}. + *

+ * + * @param codePoint The Unicode code point to encode and append. + * @return A reference to this object. + * @see Character#toChars(int) + * @since 1.5 + */ + public StringBuffer appendCodePoint(int codePoint) { + return append(Character.toChars(codePoint)); + } + + /** + * Answers the character at the specified offset in this StringBuffer. + * + * @param index the zero-based index in this StringBuffer + * @return the character at the index + * + * @throws IndexOutOfBoundsException when index < 0 or + * index >= length() + */ + @Override + public synchronized char charAt(int index) { + return super.charAt(index); + } + + /** + *

+ * Retrieves the Unicode code point value at the index. + *

+ * + * @param index The index to the char code unit within this + * object. + * @return The Unicode code point value. + * @throws IndexOutOfBoundsException if index is negative or + * greater than or equal to {@link #length()}. + * @see Character + * @see Character#codePointAt(char[], int, int) + * @since 1.5 + */ + @Override + public synchronized int codePointAt(int index) { + return super.codePointAt(index); + } + + /** + *

+ * Retrieves the Unicode code point value that precedes the + * index. + *

+ * + * @param index The index to the char code unit within this + * object. + * @return The Unicode code point value. + * @throws IndexOutOfBoundsException if index is less than 1 + * or greater than {@link #length()}. + * @see Character + * @see Character#codePointBefore(char[], int, int) + * @since 1.5 + */ + @Override + public synchronized int codePointBefore(int index) { + return super.codePointBefore(index); + } + + /** + *

+ * Calculates the number of Unicode code points between + * beginIndex and endIndex. + *

+ * + * @param beginIndex The inclusive beginning index of the subsequence. + * @param endIndex The exclusive end index of the subsequence. + * @return The number of Unicode code points in the subsequence. + * @throws IndexOutOfBoundsException if beginIndex is + * negative or greater than endIndex or + * endIndex is greater than {@link #length()}. + * @since 1.5 + */ + @Override + public synchronized int codePointCount(int beginIndex, int endIndex) { + return super.codePointCount(beginIndex, endIndex); + } + + /** + * Deletes a range of characters. + * + * @param start the offset of the first character + * @param end the offset one past the last character + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when + * start < 0, start > end or + * end > length() + */ + public synchronized StringBuffer delete(int start, int end) { + delete0(start, end); + return this; + } + + /** + * Deletes a single character + * + * @param location the offset of the character to delete + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when location < 0 + * or location >= length() + */ + public synchronized StringBuffer deleteCharAt(int location) { + deleteCharAt0(location); + return this; + } + + /** + * Ensures that this StringBuffer can hold the specified number of + * characters without growing. + * + * @param min the minimum number of elements that this StringBuffer will + * hold before growing + */ + @Override + public synchronized void ensureCapacity(int min) { + super.ensureCapacity(min); + } + + /** + * Copies the specified characters in this StringBuffer to the character + * array starting at the specified offset in the character array. + * + * @param start the starting offset of characters to copy + * @param end the ending offset of characters to copy + * @param buffer the destination character array + * @param index the starting offset in the character array + * + * @throws IndexOutOfBoundsException when start < 0, end > length(), + * start > end, index < 0, end - start > buffer.length - index + * @throws NullPointerException when buffer is null + */ + @Override + public synchronized void getChars(int start, int end, char[] buffer, int idx) { + super.getChars(start, end, buffer, idx); + } + + /** + * Searches in this StringBuffer for the index of the specified character. + * The search for the character starts at the specified offset and moves + * towards the end. + * + * @param subString the string to find + * @param start the starting offset + * @return the index in this StringBuffer of the specified character, -1 if + * the character isn't found + * + * @see #lastIndexOf(String,int) + * + * @since 1.4 + */ + @Override + public synchronized int indexOf(String subString, int start) { + return super.indexOf(subString, start); + } + + /** + * Inserts the character at the specified offset in this StringBuffer. + * + * @param index the index at which to insert + * @param ch the character to insert + * @return this StringBuffer + * + * @throws ArrayIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public synchronized StringBuffer insert(int index, char ch) { + insert0(index, ch); + return this; + } + + /** + * Inserts the string representation of the specified boolean at the + * specified offset in this StringBuffer. + * + * @param index the index at which to insert + * @param b the boolean to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public StringBuffer insert(int index, boolean b) { + return insert(index, b ? "true" : "false"); + } + + /** + * Inserts the string representation of the specified integer at the + * specified offset in this StringBuffer. + * + * @param index the index at which to insert + * @param i the integer to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public StringBuffer insert(int index, int i) { + return insert(index, Integer.toString(i)); + } + + /** + * Inserts the string representation of the specified long at the specified + * offset in this StringBuffer. + * + * @param index the index at which to insert + * @param l the long to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public StringBuffer insert(int index, long l) { + return insert(index, Long.toString(l)); + } + + /** + * Inserts the string representation of the specified double at the + * specified offset in this StringBuffer. + * + * @param index the index at which to insert + * @param d the double to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public StringBuffer insert(int index, double d) { + return insert(index, Double.toString(d)); + } + + /** + * Inserts the string representation of the specified float at the specified + * offset in this StringBuffer. + * + * @param index the index at which to insert + * @param f the float to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public StringBuffer insert(int index, float f) { + return insert(index, Float.toString(f)); + } + + /** + * Inserts the string representation of the specified object at the + * specified offset in this StringBuffer. + * + * @param index the index at which to insert + * @param obj the object to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public StringBuffer insert(int index, Object obj) { + return insert(index, obj == null ? "null" : obj.toString()); + } + + /** + * Inserts the string at the specified offset in this StringBuffer. + * + * @param index the index at which to insert + * @param string the string to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + */ + public synchronized StringBuffer insert(int index, String string) { + insert0(index, string); + return this; + } + + /** + * Inserts the character array at the specified offset in this StringBuffer. + * + * @param index the index at which to insert + * @param chars the character array to insert + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when index < 0 or + * index > length() + * @throws NullPointerException when chars is null + */ + public synchronized StringBuffer insert(int index, char[] chars) { + insert0(index, chars); + return this; + } + + /** + * Inserts the specified sequence of characters at the specified offset in + * this StringBuffer. + * + * @param index the index at which to insert + * @param chars a character array + * @param start the starting offset + * @param length the number of characters + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when + * length < 0, start < 0, + * start + length > chars.length, index < 0 + * or index > length() + * @throws NullPointerException when chars is null + */ + public synchronized StringBuffer insert(int index, char chars[], int start, + int length) { + insert0(index, chars, start, length); + return this; + } + + /** + *

+ * Inserts the CharSequence into this buffer at the + * index. If CharSequence is + * null, then the string "null" is inserted. + *

+ * + * @param index The index of this buffer to insert the sequence. + * @param s The CharSequence to insert. + * @return A reference to this object. + * @since 1.5 + * @throws IndexOutOfBoundsException if the index is invalid. + */ + public synchronized StringBuffer insert(int index, CharSequence s) { + insert0(index, s == null ? "null" : s.toString()); + return this; + } + + /** + *

+ * Inserts the CharSequence into this buffer at the + * index. If CharSequence is + * null, then the string "null" is inserted. + *

+ * + * @param index The index of this buffer to insert the sequence. + * @param s The CharSequence to insert. + * @param start The inclusive start index of the subsequence of the + * CharSequence. + * @param end The exclusive end index of the subsequence of the + * CharSequence. + * @return A reference to this object. + * @since 1.5 + * @throws IndexOutOfBoundsException if index is negative or + * greater than the current length, start or + * end are negative, start is greater + * than end or end is greater than the + * length of s. + */ + public synchronized StringBuffer insert(int index, CharSequence s, + int start, int end) { + insert0(index, s, start, end); + return this; + } + + /** + * Searches in this StringBuffer for the index of the specified character. + * The search for the character starts at the specified offset and moves + * towards the beginning. + * + * @param subString the string to find + * @param start the starting offset + * @return the index in this StringBuffer of the specified character, -1 if + * the character isn't found + * + * @see #indexOf(String,int) + * + * @since 1.4 + */ + @Override + public synchronized int lastIndexOf(String subString, int start) { + return super.lastIndexOf(subString, start); + } + + /** + *

+ * Returns the index within this object that is offset from + * index by codePointOffset code points. + *

+ * + * @param index The index within this object to calculate the offset from. + * @param codePointOffset The number of code points to count. + * @return The index within this object that is the offset. + * @throws IndexOutOfBoundsException if index is negative or + * greater than {@link #length()} or if there aren't enough code + * points before or after index to match + * codePointOffset. + * @since 1.5 + */ + @Override + public synchronized int offsetByCodePoints(int index, int codePointOffset) { + return super.offsetByCodePoints(index, codePointOffset); + } + + /** + * Replace a range of characters with the characters in the specified + * String. + * + * @param start the offset of the first character + * @param end the offset one past the last character + * @param string a String + * @return this StringBuffer + * + * @throws StringIndexOutOfBoundsException when start < 0 or + * start > end + */ + public synchronized StringBuffer replace(int start, int end, String string) { + replace0(start, end, string); + return this; + } + + /** + * Reverses the order of characters in this StringBuffer. + * + * @return this StringBuffer + */ + public synchronized StringBuffer reverse() { + reverse0(); + return this; + } + + /** + * Sets the character at the specified offset in this StringBuffer. + * + * @param index the zero-based index in this StringBuffer + * @param ch the character + * + * @throws IndexOutOfBoundsException when index < 0 or + * index >= length() + */ + @Override + public synchronized void setCharAt(int index, char ch) { + super.setCharAt(index, ch); + } + + /** + * Sets the length of this StringBuffer to the specified length. If there + * are more than length characters in this StringBuffer, the characters at + * end are lost. If there are less than length characters in the + * StringBuffer, the additional characters are set to \\u0000. + * + * @param length the new length of this StringBuffer + * + * @throws IndexOutOfBoundsException when length < 0 + * + * @see #length + */ + @Override + public synchronized void setLength(int length) { + super.setLength(length); + } + + /** + * Copies a range of characters into a new String. + * + * @param start the offset of the first character + * @param end the offset one past the last character + * @return a new String containing the characters from start to end - 1 + * + * @throws IndexOutOfBoundsException when + * start < 0, start > end or + * end > length() + * + * @since 1.4 + */ + @Override + public synchronized CharSequence subSequence(int start, int end) { + return super.substring(start, end); + } + + /** + * Copies a range of characters into a new String. + * + * @param start the offset of the first character + * @return a new String containing the characters from start to the end of + * the string + * + * @throws StringIndexOutOfBoundsException when start < 0 or + * start > length() + */ + @Override + public synchronized String substring(int start) { + return super.substring(start); + } + + /** + * Copies a range of characters into a new String. + * + * @param start the offset of the first character + * @param end the offset one past the last character + * @return a new String containing the characters from start to end - 1 + * + * @throws StringIndexOutOfBoundsException when + * start < 0, start > end or + * end > length() + */ + @Override + public synchronized String substring(int start, int end) { + return super.substring(start, end); + } + + /** + * Answers the contents of this StringBuffer. + * + * @return a String containing the characters in this StringBuffer + */ + @Override + public synchronized String toString() { + return super.toString(); + } + + /** + *

+ * Trims the storage capacity of this buffer down to the size of the current + * character sequence. Execution of this method may change the results + * returned by the {@link #capacity()} method, but this is not required. + *

+ * + * @since 1.5 + */ + @Override + public synchronized void trimToSize() { + super.trimToSize(); + } + + private synchronized void writeObject(ObjectOutputStream out) + throws IOException { + ObjectOutputStream.PutField fields = out.putFields(); + fields.put("count", length()); + fields.put("shared", false); + fields.put("value", getValue()); + out.writeFields(); + } + + private void readObject(ObjectInputStream in) throws IOException, + ClassNotFoundException { + ObjectInputStream.GetField fields = in.readFields(); + int count = fields.get("count", 0); + char[] value = (char[]) fields.get("value", null); + set(value, count); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/StringBuilder.java b/sources/net.sf.j2s.java.core/unused/StringBuilder.java new file mode 100644 index 000000000..f58636d6d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/StringBuilder.java @@ -0,0 +1,759 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +/** + *

+ * A modifiable {@link CharSequence sequence of characters} for use in creating + * and modifying Strings. This class is intended as a direct replacement of + * {@link java.lang.StringBuffer} for non-concurrent use; unlike + * StringBuffer this class is not synchronized for thread safety. + *

+ * + *

+ * The majority of the modification methods on this class return + * StringBuilder, so that, like StringBuffers, + * they can be used in chaining method calls together. For example, + * new StringBuilder("One should ").append("always strive ").append("to achieve Harmony"). + *

+ * + * @see java.lang.CharSequence + * @see java.lang.Appendable + * @see java.lang.StringBuffer + * @see java.lang.String + * + * @since 1.5 + */ +public final class StringBuilder extends AbstractStringBuilder implements + Appendable, CharSequence, Serializable { + + private static final long serialVersionUID = 4383685877147921099L; + + /** + *

+ * Constructs an instance with an initial capacity of 16. + *

+ * + * @see #capacity() + */ + public StringBuilder() { + super(); + } + + /** + *

+ * Constructs an instance with a specified capacity. + *

+ * + * @param capacity The initial capacity to use. + * + * @throws NegativeArraySizeException if the capacity + * parameter is null. + * + * @see #capacity() + */ + public StringBuilder(int capacity) { + super(capacity); + } + + /** + *

+ * Constructs an instance that's populated by a {@link CharSequence}. The + * capacity of the new builder will bee the length of the + * CharSequence plus 16. + *

+ * + * @param seq The CharSequence to copy into the builder. + * @throws NullPointerException if the seq parameter is + * null. + */ + public StringBuilder(CharSequence seq) { + super(seq.toString()); + } + + /** + *

+ * Constructs an instance that's populated by a {@link String}. The + * capacity of the new builder will bee the length of the + * String plus 16. + *

+ * + * @param str The String to copy into the builder. + * @throws NullPointerException if the str parameter is + * null. + */ + public StringBuilder(String str) { + super(str); + } + + /** + *

+ * Appends the String representation of the boolean value + * passed. The boolean value is converted to a String + * according to the rule defined by {@link String#valueOf(boolean)}. + *

+ * + * @param b The boolean value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(boolean) + */ + public StringBuilder append(boolean b) { + append0(b ? "true" : "false"); + return this; + } + + /** + *

+ * Appends the String representation of the char value + * passed. The char value is converted to a String according + * to the rule defined by {@link String#valueOf(char)}. + *

+ * + * @param c The char value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(char) + */ + @Override + public StringBuilder append(char c) { + append0(c); + return this; + } + + /** + *

+ * Appends the String representation of the int value passed. + * The int value is converted to a String according to the + * rule defined by {@link String#valueOf(int)}. + *

+ * + * @param i The int value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(int) + */ + public StringBuilder append(int i) { + append0(Integer.toString(i)); + return this; + } + + /** + *

+ * Appends the String representation of the long value + * passed. The long value is converted to a String according + * to the rule defined by {@link String#valueOf(long)}. + *

+ * + * @param lng The long value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(long) + */ + public StringBuilder append(long lng) { + append0(Long.toString(lng)); + return this; + } + + /** + *

+ * Appends the String representation of the float value + * passed. The float value is converted to a String according + * to the rule defined by {@link String#valueOf(float)}. + *

+ * + * @param f The float value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(float) + */ + public StringBuilder append(float f) { + append0(Float.toString(f)); + return this; + } + + /** + *

+ * Appends the String representation of the double value + * passed. The double value is converted to a String + * according to the rule defined by {@link String#valueOf(double)}. + *

+ * + * @param d The double value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(double) + */ + public StringBuilder append(double d) { + append0(Double.toString(d)); + return this; + } + + /** + *

+ * Appends the String representation of the Object value + * passed. The Object value is converted to a String + * according to the rule defined by {@link String#valueOf(Object)}. + *

+ * + * @param obj The Object value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(Object) + */ + public StringBuilder append(Object obj) { + if (obj == null) { + appendNull(); + } else { + append0(obj.toString()); + } + return this; + } + + /** + *

+ * Appends the contents of the String. If the String passed is + * null, then the String "null" is appended. + *

+ * + * @param str The String to append to this object. + * @return A reference to this object. + */ + public StringBuilder append(String str) { + append0(str); + return this; + } + + /** + *

+ * Appends the contents of the StringBuffer. If the StringBuffer passed is + * null, then the StringBuffer "null" is + * appended. + *

+ * + * @param sb The StringBuffer to append to this object. + * @return A reference to this object. + */ + public StringBuilder append(StringBuffer sb) { + if (sb == null) { + appendNull(); + } else { + append0(sb.getValue(), 0, sb.length()); + } + return this; + } + + /** + *

+ * Appends the String representation of the char[] value + * passed. The char[] value is converted to a String + * according to the rule defined by {@link String#valueOf(char[])}. + *

+ * + * @param str The char[] value to append to this object. + * @return A reference to this object. + * + * @see String#valueOf(char[]) + */ + public StringBuilder append(char[] ch) { + append0(ch); + return this; + } + + /** + *

+ * Appends the String representation of the subset of the + * char[] value passed. The char[] value is + * converted to a String according to the rule defined by + * {@link String#valueOf(char[],int,int)}. + *

+ * + * @param str The char[] value to append to this object. + * @param offset The inclusive offset index to begin copying from the + * str parameter. + * @param len The number of character to copy from the str + * parameter. + * @return A reference to this object. + * + * @see String#valueOf(char[],int,int) + */ + public StringBuilder append(char[] str, int offset, int len) { + append0(str, offset, len); + return this; + } + + /** + *

+ * Appends the String representation of the CharSequence + * value passed. If the CharSequence is null, + * then the String "null" is appended. + *

+ * + * @param csq The CharSequence value to append to this + * object. + * @return A reference to this object. + */ + @Override + public StringBuilder append(CharSequence csq) { + if (csq == null) { + appendNull(); + } else { + append0(csq.toString()); + } + return this; + } + + /** + *

+ * Appends the String representation of the subsequence of the + * CharSequence value passed. If the + * CharSequence is null, then the String + * "null" is used to extract the subsequence from. + *

+ * + * @param csq The CharSequence value to append to this + * object. + * @param start The beginning index of the subsequence. + * @param end The ending index of the subsequence. + * @return A reference to this object. + */ + @Override + public StringBuilder append(CharSequence csq, int start, int end) { + append0(csq, start, end); + return this; + } + + /** + *

+ * Appends the encoded Unicode code point to this object. The code point is + * converted to a char[] as defined by + * {@link Character#toChars(int)}. + *

+ * + * @param codePoint The Unicode code point to encode and append. + * @return A reference to this object. + * @see Character#toChars(int) + * + * @j2sIgnore + */ + public StringBuilder appendCodePoint(int codePoint) { + append0(Character.toChars(codePoint)); + return this; + } + + /** + *

+ * Deletes a sequence of characters within this object, shifts any remaining + * characters to the left and adjusts the {@link #length()} of this object. + *

+ * + * @param start The inclusive start index to begin deletion. + * @param end The exclusive end index to stop deletion. + * @return A reference to this object. + * @throws StringIndexOutOfBoundsException if start is less + * than zero, greater than the current length or greater than + * end. + */ + public StringBuilder delete(int start, int end) { + delete0(start, end); + return this; + } + + /** + *

+ * Deletes a single character within this object, shifts any remaining + * characters to the left and adjusts the {@link #length()} of this object. + *

+ * + * @param index The index of the character to delete. + * @return A reference to this object. + * @throws StringIndexOutOfBoundsException if index is less + * than zero or is greater than or equal to the current length. + */ + public StringBuilder deleteCharAt(int index) { + deleteCharAt0(index); + return this; + } + + /** + *

+ * Inserts the String representation of the boolean value + * passed into this object at the offset passed. The + * boolean value is converted to a String according to the + * rule defined by {@link String#valueOf(boolean)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param b The boolean value to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(boolean) + */ + public StringBuilder insert(int offset, boolean b) { + insert0(offset, b ? "true" : "false"); + return this; + } + + /** + *

+ * Inserts the String representation of the char value passed + * into this object at the offset passed. The + * char value is converted to a String according to the rule + * defined by {@link String#valueOf(char)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param c The char value to insert into this object. + * @return A reference to this object. + * + * @throws ArrayIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(char) + */ + public StringBuilder insert(int offset, char c) { + insert0(offset, c); + return this; + } + + /** + *

+ * Inserts the String representation of the int value passed + * into this object at the offset passed. The + * int value is converted to a String according to the rule + * defined by {@link String#valueOf(int)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param b The int value to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(int) + */ + public StringBuilder insert(int offset, int i) { + insert0(offset, Integer.toString(i)); + return this; + } + + /** + *

+ * Inserts the String representation of the long value passed + * into this object at the offset passed. The + * long value is converted to a String according to the rule + * defined by {@link String#valueOf(long)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param b The long value to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(long) + */ + public StringBuilder insert(int offset, long l) { + insert0(offset, Long.toString(l)); + return this; + } + + /** + *

+ * Inserts the String representation of the float value + * passed into this object at the offset passed. The + * float value is converted to a String according to the rule + * defined by {@link String#valueOf(float)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param b The float value to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(float) + */ + public StringBuilder insert(int offset, float f) { + insert0(offset, Float.toString(f)); + return this; + } + + /** + *

+ * Inserts the String representation of the double value + * passed into this object at the offset passed. The + * double value is converted to a String according to the + * rule defined by {@link String#valueOf(double)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param d The double value to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(double) + */ + public StringBuilder insert(int offset, double d) { + insert0(offset, Double.toString(d)); + return this; + } + + /** + *

+ * Inserts the String representation of the Object value + * passed into this object at the offset passed. The + * Object value is converted to a String according to the + * rule defined by {@link String#valueOf(Object)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param b The Object value to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(Object) + */ + public StringBuilder insert(int offset, Object obj) { + insert0(offset, obj == null ? "null" : obj.toString()); + return this; + } + + /** + *

+ * Inserts the String value passed into this object at the + * offset passed. If the String parameter is null, then the + * String "null" is inserted. + *

+ * + * @param offset The index of this object to insert the value. + * @param str The String to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + */ + public StringBuilder insert(int offset, String str) { + insert0(offset, str); + return this; + } + + /** + *

+ * Inserts the String representation of the char[] value + * passed into this object at the offset passed. The + * char[] value is converted to a String according to the + * rule defined by {@link String#valueOf(char[])}. + *

+ * + * @param offset The index of this object to insert the value. + * @param ch The char[] value to insert into this object. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(char[]) + */ + public StringBuilder insert(int offset, char[] ch) { + insert0(offset, ch); + return this; + } + + /** + *

+ * Inserts the String representation of the subsequence of the + * char[] value passed into this object at the + * offset passed. The char[] value is + * converted to a String according to the rule defined by + * {@link String#valueOf(char[],int,int)}. + *

+ * + * @param offset The index of this object to insert the value. + * @param str The char[] value to insert into this object. + * @param strOffset The inclusive index of the str parameter + * to start copying from. + * @param strLen The number of characters to copy from the str + * parameter. + * @return A reference to this object. + * + * @throws StringIndexOutOfBoundsException if offset is + * negative or greater than the current {@link #length()}. + * + * @see String#valueOf(char[],int,int) + */ + public StringBuilder insert(int offset, char[] str, int strOffset, + int strLen) { + insert0(offset, str, strOffset, strLen); + return this; + } + + /** + *

+ * Inserts the String representation of the CharSequence + * value passed into this object at the offset passed. The + * CharSequence value is converted to a String as defined by + * {@link CharSequence#toString()}. If the CharSequence is + * null, then the String "null" is inserted. + *

+ * + * @param offset The index of this object to insert the value. + * @param s The CharSequence value to insert into this + * object. + * @return A reference to this object. + * + * @throws IndexOutOfBoundsException if offset is negative or + * greater than the current {@link #length()}. + * + * @see CharSequence#toString() + */ + public StringBuilder insert(int offset, CharSequence s) { + insert0(offset, s == null ? "null" : s.toString()); + return this; + } + + /** + *

+ * Inserts the String representation of the subsequence of the + * CharSequence value passed into this object at the + * offset passed. The CharSequence value is + * converted to a String as defined by + * {@link CharSequence#subSequence(int, int)}. If the + * CharSequence is null, then the String + * "null" is used to determine the subsequence. + *

+ * + * @param offset The index of this object to insert the value. + * @param s The CharSequence value to insert into this + * object. + * @param start The start of the subsequence of the s + * parameter. + * @param end The end of the subsequence of the s parameter. + * @return A reference to this object. + * + * @throws IndexOutOfBoundsException if offset is negative or + * greater than the current {@link #length()}. + * + * @see CharSequence#subSequence(int, int) + */ + public StringBuilder insert(int offset, CharSequence s, int start, int end) { + insert0(offset, s, start, end); + return this; + } + + /** + *

+ * Replaces the indicated subsequence of this object with the String passed. + * If the String passed is longer or shorter than the subsequence, then this + * object will be adjusted appropriately. + *

+ * + * @param start The inclusive start index of the sequence to replace in this + * object. + * @param end The exclusive end index of the sequence to replace in this + * object. + * @param str The String to replace the subsequence. + * @return A reference to this object. + * @throws StringIndexOutOfBoundsException if start is + * negative, greater than the current {@link #length()} or greater + * than end. + * @throws NullPointerException if the str parameter is + * null. + */ + public StringBuilder replace(int start, int end, String str) { + replace0(start, end, str); + return this; + } + + /** + *

+ * Reverses the contents of this object. + *

+ * + * @return A reference to this object. + */ + public StringBuilder reverse() { + reverse0(); + return this; + } + + /** + * Answers the contents of this StringBuilder. + * + * @return a String containing the characters in this StringBuilder + */ + @Override + public String toString() { + /* Note: This method is required to workaround a compiler bug + * in the RI javac (at least in 1.5.0_06) that will generate a + * reference to the non-public AbstractStringBuilder if we don't + * override it here. + */ + return super.toString(); + } + + /** + *

+ * Reads the state of a StringBuilder from the passed stream + * and restores it to this instance. + *

+ * + * @param in The stream to read the state from. + * @throws IOException if the stream throws it during the read. + * @throws ClassNotFoundException if the stream throws it during the read. + */ + private void readObject(ObjectInputStream in) throws IOException, + ClassNotFoundException { + in.defaultReadObject(); + int count = in.readInt(); + char[] value = (char[]) in.readObject(); + set(value, count); + } + + /** + *

+ * Writes the state of this object to the stream passed. + *

+ * + * @param out The stream to write the state to. + * @throws IOException if the stream throws it during the write. + * @serialData int - The length of this object. + * char[] - The buffer from this object, which + * may be larger than the length field. + */ + private void writeObject(ObjectOutputStream out) throws IOException { + out.defaultWriteObject(); + out.writeInt(length()); + out.writeObject(getValue()); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/CharConversionException.java b/sources/net.sf.j2s.java.core/unused/java_io/CharConversionException.java new file mode 100644 index 000000000..29a7ed701 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/CharConversionException.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This is the top level class for character conversion exceptions. + * + */ +public class CharConversionException extends IOException { + + private static final long serialVersionUID = -8680016352018427031L; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public CharConversionException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public CharConversionException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/EOFException.java b/sources/net.sf.j2s.java.core/unused/java_io/EOFException.java new file mode 100644 index 000000000..081728d80 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/EOFException.java @@ -0,0 +1,48 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package java.io; + + +/** + * This End Of File (EOF) exception is thrown when a program encounters the end + * of a file or stream during an operation. + * + */ +public class EOFException extends IOException { + + private static final long serialVersionUID = 6433858223774886977L; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public EOFException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public EOFException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/FileNotFoundException.java b/sources/net.sf.j2s.java.core/unused/java_io/FileNotFoundException.java new file mode 100644 index 000000000..74fe61d09 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/FileNotFoundException.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This IO exception is thrown when a file specified by a program cannot be + * found. + * + */ +public class FileNotFoundException extends IOException { + + private static final long serialVersionUID = -897856973823710492L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public FileNotFoundException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public FileNotFoundException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/IOException.java b/sources/net.sf.j2s.java.core/unused/java_io/IOException.java new file mode 100644 index 000000000..ac87a70cd --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/IOException.java @@ -0,0 +1,47 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This IO exception is thrown when a program encounters some sort I/O error. + * Details may be specified in the constructor or by one of the subclasses. + * + + */ +public class IOException extends Exception { + + private static final long serialVersionUID = 7818375828146090155L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IOException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public IOException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/InterruptedIOException.java b/sources/net.sf.j2s.java.core/unused/java_io/InterruptedIOException.java new file mode 100644 index 000000000..f1b4b9dd3 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/InterruptedIOException.java @@ -0,0 +1,55 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This IO exception is thrown when a program reading or writing to a stream is + * interrupted. This is also thrown when a socket timeout occurs before the + * request has completed. + * + */ +public class InterruptedIOException extends IOException { + + private static final long serialVersionUID = 4020568460727500567L; + + /** + * The number of bytes transferred before the IO interrupt occurred. The + * default is 0 but the value may be filled in by the caller of the + * constructor. + */ + public int bytesTransferred; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public InterruptedIOException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public InterruptedIOException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/InvalidClassException.java b/sources/net.sf.j2s.java.core/unused/java_io/InvalidClassException.java new file mode 100644 index 000000000..75010748e --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/InvalidClassException.java @@ -0,0 +1,86 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * A problem was found with the class of one of the objects being serialized or + * deserialized. These can be + *
    + *
  • The SUIDs of the class loaded by the VM and the serialized class info do + * not match
  • + *
  • A serializable or externalizable object cannot be instantiated (when + * deserializing) because the empty constructor that needs to be run is not + * visible or fails.
  • + *
+ * + * @see ObjectInputStream #readObject() + * @see ObjectInputValidation#validateObject() + */ +public class InvalidClassException extends ObjectStreamException { + + private static final long serialVersionUID = -4333316296251054416L; + + /** + * The fully qualified name of the class that caused the problem + */ + public String classname; + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public InvalidClassException(String detailMessage) { + super(detailMessage); + } + + /** + * Constructs a new instance of this class with its walkback, message and + * the fully qualified name of the class which caused the exception filled + * in. + * + * @param className + * The detail message for the exception. + * @param detailMessage + * The detail message for the exception. + */ + public InvalidClassException(String className, String detailMessage) { + super(detailMessage); + this.classname = className; + } + + /** + * Answers the extra information message which was provided when the + * exception was created. If no message was provided at creation time, then + * answer null. If a message was provided and a class name which caused the + * exception, the values are concatenated and returned. + * + * @return The receiver's message, possibly concatenated with the name of + * the class that caused the problem. + */ + @Override + public String getMessage() { + String msg = super.getMessage(); + if (classname != null) { + msg = classname + ';' + ' ' + msg; + } + return msg; + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/InvalidObjectException.java b/sources/net.sf.j2s.java.core/unused/java_io/InvalidObjectException.java new file mode 100644 index 000000000..59905d537 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/InvalidObjectException.java @@ -0,0 +1,42 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * The object graph loaded (deserialized) can be validated by a collection of + * validator objects. If these decide the validation fails, then will throw + * InvalidObjectException. + * + * @see ObjectInputStream#registerValidation(ObjectInputValidation, int) + * @see ObjectInputValidation#validateObject() + */ +public class InvalidObjectException extends ObjectStreamException { + + private static final long serialVersionUID = 3233174318281839583L; + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public InvalidObjectException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/NotActiveException.java b/sources/net.sf.j2s.java.core/unused/java_io/NotActiveException.java new file mode 100644 index 000000000..bfa3e48bf --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/NotActiveException.java @@ -0,0 +1,56 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * Some methods in ObjectInputStream and ObjectOutputStream can only be called + * from a nested call to readObject() or writeObject(). Any attempt to call them + * from another context will cause this exception to be thrown. The list of + * methods that are protected this way is: + *
    + *
  • ObjectInputStream.defaultReadObject()
  • + *
  • ObjectInputStream.registerValidation()
  • + *
  • ObjectOutputStream.defaultWriteObject()
  • + *
+ * + * @see ObjectInputStream#defaultReadObject() + * @see ObjectInputStream#registerValidation(ObjectInputValidation, int) + * @see ObjectOutputStream#defaultWriteObject() + */ +public class NotActiveException extends ObjectStreamException { + + private static final long serialVersionUID = -3893467273049808895L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NotActiveException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public NotActiveException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/NotSerializableException.java b/sources/net.sf.j2s.java.core/unused/java_io/NotSerializableException.java new file mode 100644 index 000000000..f84af0ad1 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/NotSerializableException.java @@ -0,0 +1,53 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * When an implementation of ObjectOutput.writeObject() is passed an object that + * is not serializable, it will throw this type of exception. This can happen if + * the object does not implement Serializable or Externalizable, or if it is + * Serializable but it overrides writeObject(ObjectOutputStream) and explicitely + * decides it wants to prevent serialization, by throwing this type of + * exception. + * + * @see ObjectOutputStream#writeObject(Object) + * @see ObjectOutput#writeObject(Object) + */ +public class NotSerializableException extends ObjectStreamException { + + private static final long serialVersionUID = 2906642554793891381L; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public NotSerializableException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + public NotSerializableException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/ObjectStreamException.java b/sources/net.sf.j2s.java.core/unused/java_io/ObjectStreamException.java new file mode 100644 index 000000000..a7be94f5e --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/ObjectStreamException.java @@ -0,0 +1,55 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This is the superclass of all exceptions that can happen when serializing or + * deserialing objects. The state of the stream is unknown when one of these + * serialization-related exceptions are thrown. + * + * @see InvalidObjectException + * @see NotActiveException + * @see NotSerializableException + * @see OptionalDataException + * @see StreamCorruptedException + * @see WriteAbortedException + * + */ +public abstract class ObjectStreamException extends IOException { + + private static final long serialVersionUID = 7260898174833392607L; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + protected ObjectStreamException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * The detail message for the exception. + */ + protected ObjectStreamException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/OptionalDataException.java b/sources/net.sf.j2s.java.core/unused/java_io/OptionalDataException.java new file mode 100644 index 000000000..0ba264644 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/OptionalDataException.java @@ -0,0 +1,57 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; +/** + * When readObject() encounters primitive types (int, char, etc) instead of an + * object instance in the input stream, this type of exception will be thrown. + * + * @see ObjectInputStream#available() + * @see ObjectInputStream#readObject() + * @see ObjectInputStream#skipBytes(int) + */ +public class OptionalDataException extends ObjectStreamException { + + private static final long serialVersionUID = -8011121865681257820L; + + /** + * If true it means there is no more primitive data available. + */ + public boolean eof; + + /** + * Number of bytes of primitive data (int, char, long, etc). + */ + public int length; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + OptionalDataException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + OptionalDataException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/StreamCorruptedException.java b/sources/net.sf.j2s.java.core/unused/java_io/StreamCorruptedException.java new file mode 100644 index 000000000..3aacba762 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/StreamCorruptedException.java @@ -0,0 +1,50 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * When readObject() cannot read an object from the input stream due to missing + * information (cyclic reference that doesn't match previous instance or missing + * class descriptor for instance to be loaded) this type of exception is thrown. + * + * @see ObjectInputStream + * @see OptionalDataException + * + */ +public class StreamCorruptedException extends ObjectStreamException { + + private static final long serialVersionUID = 8983558202217591746L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public StreamCorruptedException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * the detail message for the exception. + */ + public StreamCorruptedException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/SyncFailedException.java b/sources/net.sf.j2s.java.core/unused/java_io/SyncFailedException.java new file mode 100644 index 000000000..1f2bc0e92 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/SyncFailedException.java @@ -0,0 +1,40 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This IO exception is thrown when the method sync() in + * FileDescriptor failed to complete. + * + * @see FileDescriptor#sync() + */ +public class SyncFailedException extends IOException { + + private static final long serialVersionUID = -2353342684412443330L; + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * the detail message for the exception. + */ + public SyncFailedException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/UTFDataFormatException.java b/sources/net.sf.j2s.java.core/unused/java_io/UTFDataFormatException.java new file mode 100644 index 000000000..3344f5803 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/UTFDataFormatException.java @@ -0,0 +1,47 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This IO exception is thrown when a program attempts to read a UTF-8 String + * and the encoding is incorrect. + * + * @see DataInputStream#readUTF() + */ +public class UTFDataFormatException extends IOException { + + private static final long serialVersionUID = 420743449228280612L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public UTFDataFormatException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * the detail message for the exception. + */ + public UTFDataFormatException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/UnsupportedEncodingException.java b/sources/net.sf.j2s.java.core/unused/java_io/UnsupportedEncodingException.java new file mode 100644 index 000000000..ad8ed8b4b --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/UnsupportedEncodingException.java @@ -0,0 +1,45 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + +/** + * This IO exception is thrown when a program asks for a particular character + * converter and it is not available. + * + */ +public class UnsupportedEncodingException extends IOException { + + private static final long serialVersionUID = -4274276298326136670L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public UnsupportedEncodingException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * the detail message for the exception. + */ + public UnsupportedEncodingException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/java_io/WriteAbortedException.java b/sources/net.sf.j2s.java.core/unused/java_io/WriteAbortedException.java new file mode 100644 index 000000000..51214f13f --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_io/WriteAbortedException.java @@ -0,0 +1,80 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.io; + + +/** + * This type of exception is thrown by readObject() when it detects an exception + * marker in the input stream. This marker indicates that when the object was + * being serialized, an exception happened and this marker was inserted instead + * of the original object. It is a way to "propagate" an exception from the code + * that attempted to write the object to the code that is attempting to read the + * object. + * + * @see ObjectInputStream#readObject() + */ +public class WriteAbortedException extends ObjectStreamException { + + private static final long serialVersionUID = -3326426625597282442L; + + /** + * The exception that was caused when writeObject() was attempting to + * serialize the object + */ + public Exception detail; + + /** + * Constructs a new instance of this class with its walkback, message and + * the exception which caused the underlying problem when serializing the + * object filled in. + * + * @param detailMessage + * the detail message for the exception. + * @param rootCause + * exception that caused the problem when serializing the object. + */ + public WriteAbortedException(String detailMessage, Exception rootCause) { + super(detailMessage); + detail = rootCause; + initCause(rootCause); + } + + /** + * Answers the extra information message which was provided when the + * throwable was created. If no message was provided at creation time, then + * answer null. + * + * @return the receiver's message. + */ + @Override + public String getMessage() { + String msg = super.getMessage(); + if (detail != null) { + msg = msg + "; " + detail.toString(); //$NON-NLS-1$ + } + return msg; + } + + /** + * Answers the cause of this Throwable, or null if there is no cause. + * + * @return the receiver's cause. + */ + @Override + public Throwable getCause() { + return detail; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/Appendable.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Appendable.java new file mode 100644 index 000000000..dc3e68f87 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Appendable.java @@ -0,0 +1,87 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.io.IOException; + +/** + * Appendable is an object used to append character or character sequence. Any + * class implements this interface can receive data formatted by + * Formatter. The appended character or character sequence + * should be valid accroding to the rules described + * Unicode Character Representation. + *

+ * Appendable itself does not gurantee thread safety. This responsibility is up + * to the implementing class.

+ *

+ * The implementing class can choose different exception handling mechanism. It + * can choose to throw exceptions other than IOException but which must be + * compatible with IOException, or does not throw any exceptions at all and use + * error code instead. All in all, the implementing class does not gurantee to + * propagate the exception declared by this interface.

+ * + */ +public interface Appendable { + + /** + * Append the given character. + * + * @param c the character to append + * @return this Appendable + * @throws IOException if some I/O operation fails + */ + Appendable append(char c) throws IOException; + + /** + * Append the given CharSequence. + *

+ * The behaviour of this method depends on the implementation class of + * Appendable.

+ *

+ * If the give CharSequence is null, the sequence is treated as + * String "null".

+ * + * @param csq the CharSequence to be append + * @return this Appendable + * @throws IOException if some I/O operation fails + */ + Appendable append(CharSequence csq) throws IOException; + + /** + * Append part of the given CharSequence. + *

+ * If the given CharSequence is not null, this method behaves + * same as the following statement:

+ *
    out.append(csq.subSequence(start, end)) 
+ *

+ * If the give CharSequence is null, the sequence is treated as + * String "null".

+ * + * @param csq the CharSequence to be append + * @param start the index to spicify the start position of + * CharSequence to be append, must be non-negative, + * and not larger than the end + * @param end the index to speicify the end position of + * CharSequence to be append, must be non-negative, + * and not larger than the size of csq + * @return this Appendable + * @throws IOException if some I/O operation fails + * @throws IndexOutOfBoundsException + * if the start or end is illegal + */ + Appendable append(CharSequence csq, int start, int end) throws IOException; +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/AutoCloseable.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/AutoCloseable.java new file mode 100644 index 000000000..f749fb865 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/AutoCloseable.java @@ -0,0 +1,4 @@ +package java.lang; +public interface AutoCloseable { + void close() throws Exception; +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/CharSequence.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/CharSequence.java new file mode 100644 index 000000000..fb4c2e265 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/CharSequence.java @@ -0,0 +1,65 @@ +/* Copyright 2003, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * The CharSequence interface represents an ordered set of characters and the + * functions to probe them. + */ +public interface CharSequence { + + /** + * Answers the number of characters in the sequence. + * + * @return the number of charcters in the sequence + */ + public int length(); + + /** + * Answers the character at the specified index (0-based indexing). + * + * @param index - + * of the character to return + * @return character indicated by index + * @throws IndexOutOfBoundsException + * when index < 0 or + * index >= the length of the CharSequence + */ + public char charAt(int index); + + /** + * Answers a CharSequence from the start index to the + * end index of this sequence. + * + * @param start -- index of the start of the sub-sequence to return + * @param end -- index of the end of the sub-sequence to return + * @return the sub sequence from start to end + * @throws IndexOutOfBoundsException when 1. either index is below 0 + * 2. either index >= this.length() + * 3. start > end + */ + public CharSequence subSequence(int start, int end); + + /** + * Answers a String with the same characters and ordering of this + * CharSequence + * + * @return a String based on the CharSequence + */ + @Override + public String toString(); +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/Character.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Character.java new file mode 100644 index 000000000..286b357cb --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Character.java @@ -0,0 +1,469 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.io.Serializable; + +/** + *

+ * Character is the wrapper for the primitive type char. This + * class also provides a number of utility methods for working with + * chars. + *

+ * + *

+ * Character data is based upon the Unicode Standard, 4.0. The Unicode + * specification, character tables and other information are available at http://www.unicode.org/. + *

+ * + *

+ * Unicode characters are referred to as code points. The range of valid + * code points is U+0000 to U+10FFFF. The Basic Multilingual Plane (BMP) + * is the code point range U+0000 to U+FFFF. Characters above the BMP are + * referred to as Supplementary Characters. On the Java platform, UTF-16 + * encoding and char pairs are used to represent code points in + * the supplementary range. A pair of char values that represent + * a supplementary character are made up of a high surrogate with a + * value range of 0xD800 to 0xDBFF and a low surrogate with a value + * range of 0xDC00 to 0xDFFF. + *

+ * + *

+ * On the Java platform a char value represents either a single + * BMP code point or a UTF-16 unit that's part of a surrogate pair. The + * int type is used to represent all Unicode code points. + *

+ * + * @since 1.0 + * + * @j2sSuffix java.lang.Character.TYPE=java.lang.Character.prototype.TYPE=java.lang.Character; + */ +public final class Character implements Serializable, Comparable { + private static final long serialVersionUID = 3786198910865385080L; + + /** + * The minimum possible Character value. + */ + public static final char MIN_VALUE = '\u0000'; + + /** + * The maximum possible Character value. + */ + public static final char MAX_VALUE = '\uffff'; + + /** + * The minimum possible radix used for conversions between Characters and + * integers. + */ + public static final int MIN_RADIX = 2; + + /** + * The maximum possible radix used for conversions between Characters and + * integers. + */ + public static final int MAX_RADIX = 36; + + /** + * The char {@link Class} object. + */ + @SuppressWarnings("unchecked") + public static final Class TYPE = null; + + private final char value; + + /** + * Constructs a new instance of the receiver which represents the char + * valued argument. + * + * @param value + * the char to store in the new instance. + */ + public Character(char value) { + this.value = value; + } + + /** + * Answers the char value which the receiver represents. + * + * @return char the value of the receiver + */ + public char charValue() { + return value; + } + + /** + * Returns a hash code for this Character. + * @return a hash code value for this object. + */ + @Override + public int hashCode() { + return (int)value; + } + + /** + * Compares this object against the specified object. + * The result is true if and only if the argument is not + * null and is a Character object that + * represents the same char value as this object. + * + * @param obj the object to compare with. + * @return true if the objects are the same; + * false otherwise. + */ + @Override + public boolean equals(Object obj) { + if (obj instanceof Character) { + return value == ((Character)obj).charValue(); + } + return false; + } + + /** + * Compares the receiver to the specified Character to determine the + * relative ordering. + * + * @param c + * the Character + * @return an int < 0 if this Character is less than the specified + * Character, 0 if they are equal, and > 0 if this Character is + * greater + * @throws NullPointerException + * if c is null. + * @since 1.2 + */ + @Override + public int compareTo(Character c) { + return value - c.value; + } + + /** + * Answers the lower case equivalent for the character when the character is + * an upper case letter, otherwise answer the character. + * + * @param c + * the character + * @return if c is not a lower case character then + * its lower case counterpart, otherwise just c + */ + public static char toLowerCase(char c) { + return ("" + c).toLowerCase().charAt(0); + } + + /** + * Answers the upper case equivalent for the character when the character is + * a lower case letter, otherwise answer the character. + * + * @param c + * the character + * @return if c is not an upper case character then + * its upper case counterpart, otherwise just c + */ + public static char toUpperCase(char c) { + return ("" + c).toUpperCase().charAt(0); + } + + + /** + * Answers whether the character is a digit. + * + * @param c + * the character + * @return true when the character is a digit, false otherwise + */ + public static boolean isDigit(char c) { + // Optimized case for ASCII + if ('0' <= c && c <= '9') + return true; + if (c < 1632) + return false; + //return getType(c) == DECIMAL_DIGIT_NUMBER; + return false; + } + + //sgurin: added forDigit + /** + * Determines the character representation for a specific digit in + * the specified radix. If the value of radix is not a + * valid radix, or the value of digit is not a valid + * digit in the specified radix, the null character + * ('\u0000') is returned. + *

+ * The radix argument is valid if it is greater than or + * equal to MIN_RADIX and less than or equal to + * MAX_RADIX. The digit argument is valid if + * 0 <=digit < radix. + *

+ * If the digit is less than 10, then + * '0' + digit is returned. Otherwise, the value + * 'a' + digit - 10 is returned. + * + * @param digit the number to convert to a character. + * @param radix the radix. + * @return the char representation of the specified digit + * in the specified radix. + * @see java.lang.Character#MIN_RADIX + * @see java.lang.Character#MAX_RADIX + * @see java.lang.Character#digit(char, int) + */ + public static char forDigit(int digit, int radix) { + if ((digit >= radix) || (digit < 0)) { + return '\0'; + } + if ((radix < Character.MIN_RADIX) || (radix > Character.MAX_RADIX)) { + return '\0'; + } + if (digit < 10) { + return (char)('0' + digit); + } + return (char)('a' - 10 + digit); + } + /** + * Answers whether the character is an upper case letter. + * + * @param c + * the character + * @return true when the character is a upper case letter, false otherwise + */ + public static boolean isUpperCase(char c) { + // Optimized case for ASCII + if ('A' <= c && c <= 'Z') { + return true; + } +// if (c < 128) { + return false; +// } +// +// return getType(c) == UPPERCASE_LETTER; + } + + /** + * Answers whether the character is a lower case letter. + * + * @param c + * the character + * @return true when the character is a lower case letter, false otherwise + */ + public static boolean isLowerCase(char c) { + // Optimized case for ASCII + if ('a' <= c && c <= 'z') { + return true; + } +// if (c < 128) { + return false; +// } +// +// return getType(c) == LOWERCASE_LETTER; + } + + /** + * Answers whether the character is a whitespace character in Java. + * + * @param c + * the character + * @return true if the supplied c is a + * whitespace character in Java, otherwise false. + */ + public static boolean isWhitespace(char c) { + // Optimized case for ASCII + if ((c >= 0x1c && c <= 0x20) || (c >= 0x9 && c <= 0xd)) + return true; + if (c == 0x1680) + return true; + if (c < 0x2000 || c == 0x2007) + return false; + return c <= 0x200b || c == 0x2028 || c == 0x2029 || c == 0x3000; + } + + /** + * Answers whether the character is a letter. + * + * @param c + * the character + * @return true when the character is a letter, false otherwise + */ + public static boolean isLetter(char c) { + if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) + return true; + if (c < 128) + return false; +// int type = getType(c); +// return type >= UPPERCASE_LETTER && type <= OTHER_LETTER; + return false; + } + + /** + * Answers whether the character is a letter or a digit. + * + * @param c + * the character + * @return true when the character is a letter or a digit, false otherwise + */ + public static boolean isLetterOrDigit(char c) { +// int type = getType(c); +// return (type >= UPPERCASE_LETTER && type <= OTHER_LETTER) +// || type == DECIMAL_DIGIT_NUMBER; + return isLetter(c) || isDigit(c); + } + + /** + * Answers whether the character is a Unicode space character. A member of + * one of the Unicode categories Space Separator, Line Separator, or + * Paragraph Separator. + * + * @param c + * the character + * @return true when the character is a Unicode space character, false + * otherwise + */ + public static boolean isSpaceChar(char c) { + if (c == 0x20 || c == 0xa0 || c == 0x1680) + return true; + if (c < 0x2000) + return false; + return c <= 0x200b || c == 0x2028 || c == 0x2029 || c == 0x202f + || c == 0x3000; + } + + /** + * @j2sIgnore + */ + public static int codePointCount(char[] chs, int begin, int offset) { + return 0; + } + + /** + * @j2sIgnore + */ + public static int codePointAt(char[] chs, int begin, int offset) { + return 0; + } + + /** + * @j2sIgnore + */ + public static int codePointBefore(char[] chs, int begin) { + return 0; + } + + /** + * @j2sIgnore + */ + public static int offsetByCodePoints(char[] chs, int begin, int offset, int end, int length) { + return 0; + } + + /** + * Convenient method to determine the value of character c in + * the supplied radix. The value of radix must be between + * MIN_RADIX and MAX_RADIX. + * + * @param c + * the character + * @param radix + * the radix + * @return if radix lies between {@link #MIN_RADIX} and + * {@link #MAX_RADIX} then the value of the character in the radix, + * otherwise -1. + */ + public static int digit(char c, int radix) { + if (radix >= MIN_RADIX && radix <= MAX_RADIX) { + if (c < 128) { + // Optimized for ASCII + int result = -1; + if ('0' <= c && c <= '9') { + result = c - '0'; + } else if ('a' <= c && c <= 'z') { + result = c - ('a' - 10); + } else if ('A' <= c && c <= 'Z') { + result = c - ('A' - 10); + } + return result < radix ? result : -1; + } +// int result = BinarySearch.binarySearchRange(digitKeys, c); +// if (result >= 0 && c <= digitValues[result * 2]) { +// int value = (char) (c - digitValues[result * 2 + 1]); +// if (value >= radix) { +// return -1; +// } +// return value; +// } + } + return -1; + } + + /** + * Convenient method to determine the value of character + * codePoint in the supplied radix. The value of + * radix must be between MIN_RADIX and MAX_RADIX. + * + * @param codePoint + * the character, including supplementary characters + * @param radix + * the radix + * @return if radix lies between {@link #MIN_RADIX} and + * {@link #MAX_RADIX} then the value of the character in the radix, + * otherwise -1. + * @j2sIgnore + */ + public static int digit(int codePoint, int radix) { + //return UCharacter.digit(codePoint, radix); + return -1; + } + + /** + * @j2sIgnore + */ + public static char[] toChars(int point) { + return null; + } + + /** + * Returns a String object representing this + * Character's value. The result is a string of + * length 1 whose sole component is the primitive + * char value represented by this + * Character object. + * + * @return a string representation of this object. + */ + @Override + public String toString() { + char buf[] = {value}; + return String.valueOf(buf); + } + + /** + * Returns a String object representing the + * specified char. The result is a string of length + * 1 consisting solely of the specified char. + * + * @param c the char to be converted + * @return the string representation of the specified char + * @since 1.4 + */ + public static String toString(char c) { + /** + * @j2sNative + * if (this === Charater) { + * return "class java.lang.Charater"; // Charater.class.toString + * } + */ {} + return String.valueOf(c); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/Cloneable.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Cloneable.java new file mode 100644 index 000000000..4c6ab0378 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Cloneable.java @@ -0,0 +1,30 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This (empty) interface should be implemented by all classes which wish to + * support cloning. The implementation of clone in class Object checks to ensure + * that the object being cloned implements this interface, and throws + * CloneNotSupportedException if not. + * + * @see Object#clone + * @see CloneNotSupportedException + */ +public interface Cloneable { + // Marker interface +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/Comparable.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Comparable.java new file mode 100644 index 000000000..f237e36e2 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Comparable.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This interface should be implemented by all classes which wish to define a + * natural ordering of their instances. The ordering rule must be + * transitive and invertable (i.e. the sign of the result of x.compareTo(y) must + * equal the negation of the sign of the result of y.compareTo(x) for all x and + * y). + *

+ * In addition, it is desireable (but not required) that when the result of + * x.compareTo(y) is zero (and only then) the result of x.equals(y) should be + * true. + * + */ +public interface Comparable { + + /** + * Answers an integer indicating the relative positions of the receiver and + * the argument in the natural order of elements of the receiver's class. + * + * + * @return int which should be <0 if the receiver should sort before the + * argument, 0 if the receiver should sort in the same position as + * the argument, and >0 if the receiver should sort after the + * argument. + * @param another + * Object an object to compare the receiver to + * @throws ClassCastException + * if the argument can not be converted into something + * comparable with the receiver. + */ + int compareTo(T another); +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/Enum.js b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Enum.js new file mode 100644 index 000000000..2c4b2d723 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Enum.js @@ -0,0 +1,81 @@ +// BH removed inner class +Clazz.load(null,"java.lang.Enum",["java.lang.CloneNotSupportedException","$.IllegalArgumentException","$.NullPointerException"],function(){ +var $fz,c$=Clazz.decorateAsClass(function(){ +this.$name=null; +this.$ordinal=0; +Clazz.instantialize(this,arguments); +},java.lang,"Enum",null,[java.io.Serializable,Comparable]); +Clazz.makeConstructor(c$, +function(name,ordinal){ +this.$name=name; +this.$ordinal=ordinal; +},"~S,~N"); +Clazz.defineMethod(c$,"name", +function(){ +return this.$name; +}); +Clazz.defineMethod(c$,"ordinal", +function(){ +return this.$ordinal; +}); +Clazz.overrideMethod(c$,"toString", +function(){ +return this.$name; +}); +Clazz.overrideMethod(c$,"equals", +function(other){ +return this===other; +},"~O"); +Clazz.overrideMethod(c$,"hashCode", +function(){ +return this.$ordinal+(this.$name==null?0:this.$name.hashCode()); +}); +Clazz.overrideMethod(c$,"clone", +function(){ +throw new CloneNotSupportedException(("KA004")); +}); +Clazz.overrideMethod(c$,"compareTo", +function(o){ +return this.$ordinal-o.$ordinal; +},"~O"); +Clazz.defineMethod(c$,"getDeclaringClass", +function(){ +var myClass=this.getClass(); +var mySuperClass=myClass.getSuperclass(); +if(Enum===mySuperClass){ +return myClass; +}return mySuperClass; +}); +c$.$valueOf=Clazz.defineMethod(c$,"$valueOf", +function(enumType,name){ +if((enumType==null)||(name==null)){ +throw new NullPointerException(("KA001")); +}var values=Enum.getValues(enumType); +if(values==null){ +throw new IllegalArgumentException(("KA005")); +}for(var enumConst,$enumConst=0,$$enumConst=values;$enumConst<$$enumConst.length&&((enumConst=$$enumConst[$enumConst])||true);$enumConst++){ +if(enumConst.$name.equals(name)){ +return enumConst; +}} +throw new IllegalArgumentException(("KA006")); +},"Class,~S"); +c$.getValues=Clazz.defineMethod(c$,"getValues", +function(enumType){ +return enumType.values(); +},"Class"); + +//c$.$Enum$1$=function(){ +//Clazz.pu$h(self.c$); + +//c$=Clazz.declareAnonymous(null,"Enum$1",null,java.security.PrivilegedExceptionAction); +//Clazz.overrideMethod(c$,"run", +//function(){ +//var valsMethod=this.f$.enumType.getMethod("values",null); +//valsMethod.setAccessible(true); +//return valsMethod; +//}); +//c$=Clazz.p0p(); +//}; + + +}); diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/Readable.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Readable.java new file mode 100644 index 000000000..0d4273780 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Readable.java @@ -0,0 +1,42 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.io.IOException; +import java.nio.CharBuffer; + +/** + * Readable marks that the implementing class provides character sequence. + * Readable gives a reference to character sequence from within itself to caller + * through a CharBuffer parameter of the read + * method. + */ +public interface Readable { + + /** + * Reads the characters into the given CharBuffer. The + * maximum number of characters read is CharBuffer.remaining(). + * + * @param cb + * the buffer to be filled in by the characters read + * @return the number of characters actually read, or -1 if this + * Readable reaches its end + * @throws IOException + * if some I/O operations fail + */ + int read(CharBuffer cb) throws IOException; +} diff --git a/sources/net.sf.j2s.java.core/unused/java_lang/lang/Runnable.java b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Runnable.java new file mode 100644 index 000000000..6db934029 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_lang/lang/Runnable.java @@ -0,0 +1,30 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * The runnable interface must be implemented by all classes which want to be + * run as threads. + * + * @see Thread + */ +public interface Runnable { + /** + * Begin doing the active part of the class' code. + */ + public void run(); +} diff --git a/sources/net.sf.j2s.java.core/unused/java_util/AbstractList.js b/sources/net.sf.j2s.java.core/unused/java_util/AbstractList.js new file mode 100644 index 000000000..ad2c7e837 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_util/AbstractList.js @@ -0,0 +1,473 @@ +// BH 8/25/2014 1:10:59 AM - removed indirect access/inner class business. + +Clazz.load(["java.util.AbstractCollection","$.Iterator","$.List","$.ListIterator","$.RandomAccess","$.NoSuchElementException"],"java.util.AbstractList",["java.lang.IllegalArgumentException","$.IllegalStateException","$.IndexOutOfBoundsException","$.UnsupportedOperationException","java.util.ConcurrentModificationException"],function(){ +var $fz,c$=Clazz.decorateAsClass(function(){ +this.modCount=0; + + + +//if(!Clazz.isClassDefined("java.util.AbstractList.SimpleListIterator")){ +//java.util.AbstractList.$AbstractList$SimpleListIterator$(); +//} +//if(!Clazz.isClassDefined("java.util.AbstractList.FullListIterator")){ +//java.util.AbstractList.$AbstractList$FullListIterator$(); +//} + + + +Clazz.instantialize(this,arguments); +},java.util,"AbstractList",java.util.AbstractCollection,java.util.List); +Clazz.defineMethod(c$,"add", +function(location,object){ +throw new UnsupportedOperationException(); +},"~N,~O"); +Clazz.defineMethod(c$,"add", +function(object){ +this.add(this.size(),object); +return true; +},"~O"); +Clazz.defineMethod(c$,"addAll", +function(location,collection){ +var it=collection.iterator(); +while(it.hasNext()){ +this.add(location++,it.next()); +} +return!collection.isEmpty(); +},"~N,java.util.Collection"); +Clazz.overrideMethod(c$,"clear", +function(){ +this.removeRange(0,this.size()); +}); +Clazz.overrideMethod(c$,"equals", +function(object){ +if(this===object){ +return true; +}if(Clazz.instanceOf(object,java.util.List)){ +var list=object; +if(list.size()!=this.size()){ +return false; +}var it1=this.iterator(); +var it2=list.iterator(); +while(it1.hasNext()){ +var e1=it1.next(); +var e2=it2.next(); +if(!(e1==null?e2==null:e1.equals(e2))){ +return false; +}} +return true; +}return false; +},"~O"); +Clazz.overrideMethod(c$,"hashCode", +function(){ +var result=1; +var it=this.iterator(); +while(it.hasNext()){ +var object=it.next(); +result=(31*result)+(object==null?0:object.hashCode()); +} +return result; +}); +Clazz.overrideMethod(c$,"indexOf", +function(object){ +var it=this.listIterator(); +if(object!=null){ +while(it.hasNext()){ +if(object.equals(it.next())){ +return it.previousIndex(); +}} +}else{ +while(it.hasNext()){ +if(it.next()==null){ +return it.previousIndex(); +}} +}return-1; +},"~O"); +Clazz.overrideMethod(c$,"iterator", +function(){ +return new java.util.AbstractListSimpleListIterator(this); // Clazz.innerTypeInstance(java.util.AbstractList.SimpleListIterator,this,null); +}); +Clazz.overrideMethod(c$,"lastIndexOf", +function(object){ +var it=this.listIterator(this.size()); +if(object!=null){ +while(it.hasPrevious()){ +if(object.equals(it.previous())){ +return it.nextIndex(); +}} +}else{ +while(it.hasPrevious()){ +if(it.previous()==null){ +return it.nextIndex(); +}} +}return-1; +},"~O"); +//Clazz.defineMethod(c$,"listIterator", +//function(){ +//return this.listIterator(0); +//}); +Clazz.defineMethod(c$,"listIterator", +function(location){ +location || (location = 0); +return new java.util.AbstractListFullListIterator(this, location);//Clazz.innerTypeInstance(java.util.AbstractList.FullListIterator,this,null,location); +},"~N"); +Clazz.defineMethod(c$,"remove", +function(location){ +throw new UnsupportedOperationException(); +},"~N"); +Clazz.defineMethod(c$,"removeRange", +function(start,end){ +var it=this.listIterator(start); +for(var i=start;i=0; +}); +Clazz.overrideMethod(c$,"nextIndex", +function(){ +return this.pos+1; +}); +Clazz.overrideMethod(c$,"previous", +function(){ +if(this.expectedModCount==this._list.modCount){ +try{ +var a=this._list.get(this.pos); +this.lastPosition=this.pos; +this.pos--; +return a; +}catch(e){ +if(Clazz.instanceOf(e,IndexOutOfBoundsException)){ +throw new java.util.NoSuchElementException(); +}else{ +throw e; +} +} +}throw new java.util.ConcurrentModificationException(); +}); +Clazz.overrideMethod(c$,"previousIndex", +function(){ +return this.pos; +}); +Clazz.overrideMethod(c$,"set", +function(a){ +if(this.expectedModCount==this._list.modCount){ +try{ +this._list.set(this.lastPosition,a); +}catch(e){ +if(Clazz.instanceOf(e,IndexOutOfBoundsException)){ +throw new IllegalStateException(); +}else{ +throw e; +} +} +}else{ +throw new java.util.ConcurrentModificationException(); +}},"~O"); +/*eoif*/})(); +//}; + + + + +/*if*/;(function(){ var +c$=Clazz.declareType(java.util.AbstractList,"SubAbstractListRandomAccess",java.util.AbstractList.SubAbstractList,java.util.RandomAccess); +/*eoif*/})(); + + + + +/*if*/;(function(){ var +c$=Clazz.decorateAsClass(function(){ +this.fullList=null; +this.offset=0; +this.$size=0; +Clazz.instantialize(this,arguments); +},java.util.AbstractList,"SubAbstractList",java.util.AbstractList); +Clazz.makeConstructor(c$, +function(a,b,c){ +Clazz.superConstructor(this,java.util.AbstractList.SubAbstractList); +this.fullList=a; +this.modCount=this.fullList.modCount; +this.offset=b; +this.$size=c-b; +},"java.util.AbstractList,~N,~N"); +Clazz.defineMethod(c$,"add", +function(a,b){ +if(this.modCount==this.fullList.modCount){ +if(0<=a&&a<=this.$size){ +this.fullList.add(a+this.offset,b); +this.$size++; +this.modCount=this.fullList.modCount; +}else{ +throw new IndexOutOfBoundsException(); +}}else{ +throw new java.util.ConcurrentModificationException(); +}},"~N,~O"); +Clazz.defineMethod(c$,"addAll", +function(a,b){ +if(this.modCount==this.fullList.modCount){ +if(0<=a&&a<=this.$size){ +var c=this.fullList.addAll(a+this.offset,b); +if(c){ +this.$size+=b.size(); +this.modCount=this.fullList.modCount; +}return c; +}throw new IndexOutOfBoundsException(); +}throw new java.util.ConcurrentModificationException(); +},"~N,java.util.Collection"); +Clazz.defineMethod(c$,"addAll", +function(a){ +if(this.modCount==this.fullList.modCount){ +var b=this.fullList.addAll(this.offset+this.$size,a); +if(b){ +this.$size+=a.size(); +this.modCount=this.fullList.modCount; +}return b; +}throw new java.util.ConcurrentModificationException(); +},"java.util.Collection"); +Clazz.defineMethod(c$,"get", +function(a){ +if(this.modCount==this.fullList.modCount){ +if(0<=a&&a=this.start; +}); +Clazz.defineMethod(c$,"next", +function(){ +if(this.iterator.nextIndex()=this.start){ +return this.iterator.previous(); +}throw new java.util.NoSuchElementException(); +}); +Clazz.defineMethod(c$,"previousIndex", +function(){ +var a=this.iterator.previousIndex(); +if(a>=this.start){ +return a-this.start; +}return-1; +}); +Clazz.defineMethod(c$,"remove", +function(){ +this.iterator.remove(); +this.subList.sizeChanged(false); +this.end--; +}); +Clazz.defineMethod(c$,"set", +function(a){ +this.iterator.set(a); +},"~O"); +/*eoif*/})(); +/*eoif*/})(); +}); diff --git a/sources/net.sf.j2s.java.core/unused/java_util/AbstractMap.js b/sources/net.sf.j2s.java.core/unused/java_util/AbstractMap.js new file mode 100644 index 000000000..6e0fa52da --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_util/AbstractMap.js @@ -0,0 +1,266 @@ +Clazz.load(["java.util.Map"],"java.util.AbstractMap",["java.lang.UnsupportedOperationException","java.util.AbstractCollection","$.AbstractSet","$.Iterator"],function(){ +var $fz,c$=Clazz.decorateAsClass(function(){ +this.$keySet=null; +this.valuesCollection=null; +Clazz.instantialize(this,arguments); +},java.util,"AbstractMap",null,java.util.Map); +Clazz.makeConstructor(c$, +function(){ +}); +Clazz.overrideMethod(c$,"clear", +function(){ +this.entrySet().clear(); +}); +Clazz.overrideMethod(c$,"containsKey", +function(key){ +var it=this.entrySet().iterator(); +if(key!=null){ +while(it.hasNext()){ +if(key.equals(it.next().getKey())){ +return true; +}} +}else{ +while(it.hasNext()){ +if(it.next().getKey()==null){ +return true; +}} +}return false; +},"~O"); +Clazz.overrideMethod(c$,"containsValue", +function(value){ +var it=this.entrySet().iterator(); +if(value!=null){ +while(it.hasNext()){ +if(value.equals(it.next().getValue())){ +return true; +}} +}else{ +while(it.hasNext()){ +if(it.next().getValue()==null){ +return true; +}} +}return false; +},"~O"); +Clazz.overrideMethod(c$,"equals", +function(object){ +if(this===object){ +return true; +}if(Clazz.instanceOf(object,java.util.Map)){ +var map=object; +if(this.size()!=map.size()){ +return false; +}var objectSet=map.entrySet(); +var it=this.entrySet().iterator(); +while(it.hasNext()){ +if(!objectSet.contains(it.next())){ +return false; +}} +return true; +}return false; +},"~O"); +Clazz.overrideMethod(c$,"get", +function(key){ +var it=this.entrySet().iterator(); +if(key!=null){ +while(it.hasNext()){ +var entry=it.next(); +if(key.equals(entry.getKey())){ +return entry.getValue(); +}} +}else{ +while(it.hasNext()){ +var entry=it.next(); +if(entry.getKey()==null){ +return entry.getValue(); +}} +}return null; +},"~O"); +Clazz.overrideMethod(c$,"hashCode", +function(){ +var result=0; +var it=this.entrySet().iterator(); +while(it.hasNext()){ +result+=it.next().hashCode(); +} +return result; +}); +Clazz.overrideMethod(c$,"isEmpty", +function(){ +return this.size()==0; +}); +Clazz.overrideMethod(c$,"keySet", +function(){ +if(this.$keySet==null){ +this.$keySet=((Clazz.isClassDefined("java.util.AbstractMap$1")?0:java.util.AbstractMap.$AbstractMap$1$()),Clazz.innerTypeInstance(java.util.AbstractMap$1,this,null)); +}return this.$keySet; +}); +Clazz.overrideMethod(c$,"put", +function(key,value){ +throw new UnsupportedOperationException(); +},"~O,~O"); +Clazz.overrideMethod(c$,"putAll", +function(map){ + this.putAllAM(map); +},"java.util.Map"); + +Clazz.overrideMethod(c$,"putAllAM", +function(map){ +for(var entry,$entry=map.entrySet().iterator();$entry.hasNext()&&((entry=$entry.next())||true);){ +this.put(entry.getKey(),entry.getValue()); +} +},"java.util.Map"); + +Clazz.overrideMethod(c$,"remove", +function(key){ +var it=this.entrySet().iterator(); +if(key!=null){ +while(it.hasNext()){ +var entry=it.next(); +if(key.equals(entry.getKey())){ +it.remove(); +return entry.getValue(); +}} +}else{ +while(it.hasNext()){ +var entry=it.next(); +if(entry.getKey()==null){ +it.remove(); +return entry.getValue(); +}} +}return null; +},"~O"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.entrySet().size(); +}); +Clazz.overrideMethod(c$,"toString", +function(){ +if(this.isEmpty()){ +return"{}"; +}var buffer='{'; +var it=this.entrySet().iterator(); +while(it.hasNext()){ +var entry=it.next(); +var key=entry.getKey(); +if(key!==this){ +buffer += (key); +}else{ +buffer += ("(this Map)"); +}buffer += ('='); +var value=entry.getValue(); +if(value!==this){ +buffer += (value); +}else{ +buffer += ("(this Map)"); +}if(it.hasNext()){ +buffer += (", "); +}} +buffer += ('}'); +return buffer; +}); +Clazz.overrideMethod(c$,"values", +function(){ +if(this.valuesCollection==null){ +this.valuesCollection=((Clazz.isClassDefined("java.util.AbstractMap$2")?0:java.util.AbstractMap.$AbstractMap$2$()),Clazz.innerTypeInstance(java.util.AbstractMap$2,this,null)); +}return this.valuesCollection; +}); +Clazz.defineMethod(c$,"clone", +function(){ +return this.cloneAM(); +}); + +Clazz.defineMethod(c$,"cloneAM", +function(){ +var result = Clazz.clone(this); +result.$keySet=null; +result.valuesCollection=null; +return result; +}); + +c$.$AbstractMap$1$=function(){ +/*if*/;(function(){ var + +c$=Clazz.declareAnonymous(java.util,"AbstractMap$1",java.util.AbstractSet); +Clazz.overrideMethod(c$,"contains", +function(object){ +return this.b$["java.util.AbstractMap"].containsKey(object); +},"~O"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.b$["java.util.AbstractMap"].size(); +}); +Clazz.overrideMethod(c$,"iterator", +function(){ +return((Clazz.isClassDefined("java.util.AbstractMap$1$1")?0:java.util.AbstractMap.$AbstractMap$1$1$()),Clazz.innerTypeInstance(java.util.AbstractMap$1$1,this,null)); +}); +/*eoif*/})(); +}; +c$.$AbstractMap$1$1$=function(){ +/*if*/;(function(){ var + +c$=Clazz.decorateAsClass(function(){ +Clazz.prepareCallback(this,arguments); +this.setIterator=null; +Clazz.instantialize(this,arguments); +},java.util,"AbstractMap$1$1",null,java.util.Iterator); +Clazz.prepareFields(c$,function(){ +this.setIterator=this.b$["java.util.AbstractMap"].entrySet().iterator(); +}); +Clazz.overrideMethod(c$,"hasNext", +function(){ +return this.setIterator.hasNext(); +}); +Clazz.overrideMethod(c$,"next", +function(){ +return this.setIterator.next().getKey(); +}); +Clazz.overrideMethod(c$,"remove", +function(){ +this.setIterator.remove(); +}); +/*eoif*/})(); +}; +c$.$AbstractMap$2$=function(){ +/*if*/;(function(){ var + +c$=Clazz.declareAnonymous(java.util,"AbstractMap$2",java.util.AbstractCollection); +Clazz.overrideMethod(c$,"size", +function(){ +return this.b$["java.util.AbstractMap"].size(); +}); +Clazz.overrideMethod(c$,"contains", +function(object){ +return this.b$["java.util.AbstractMap"].containsValue(object); +},"~O"); +Clazz.overrideMethod(c$,"iterator", +function(){ +return((Clazz.isClassDefined("java.util.AbstractMap$2$1")?0:java.util.AbstractMap.$AbstractMap$2$1$()),Clazz.innerTypeInstance(java.util.AbstractMap$2$1,this,null)); +}); +/*eoif*/})(); +}; +c$.$AbstractMap$2$1$=function(){ + /*if*/;(function(){ var + +c$=Clazz.decorateAsClass(function(){ +Clazz.prepareCallback(this,arguments); +this.setIterator=null; +Clazz.instantialize(this,arguments); +},java.util,"AbstractMap$2$1",null,java.util.Iterator); +Clazz.prepareFields(c$,function(){ +this.setIterator=this.b$["java.util.AbstractMap"].entrySet().iterator(); +}); +Clazz.overrideMethod(c$,"hasNext", +function(){ +return this.setIterator.hasNext(); +}); +Clazz.overrideMethod(c$,"next", +function(){ +return this.setIterator.next().getValue(); +}); +Clazz.overrideMethod(c$,"remove", +function(){ +this.setIterator.remove(); +}); +/*eoif*/})(); +}; +}); diff --git a/sources/net.sf.j2s.java.core/unused/java_util/Arrays.js b/sources/net.sf.j2s.java.core/unused/java_util/Arrays.js new file mode 100644 index 000000000..c64c333a4 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/java_util/Arrays.js @@ -0,0 +1,205 @@ +// BH adjusted to have only one sort method. +// BH 4/7/2017 1:49:45 PM fixing "instanceof Comparable" +// BH adding copyOf 7/12/2016 10:35:01 AM +Clazz.load(["java.util.AbstractList","$.RandomAccess"],"java.util.Arrays",["java.lang.ArrayIndexOutOfBoundsException","$.IllegalArgumentException","$.NullPointerException"],function(){ +var $fz,c$=Clazz.declareType(java.util,"Arrays"); + +c$.sort=Clazz.overrideMethod(c$,"sort", +function(a,c,d,e){ + switch (arguments.length) { + case 1: + var aux=a.sort(function(o1,o2){ + if(typeof o1=="string"||Clazz.instanceOf(o1, Comparable)){ + return o1.compareTo(o2); + } + return o1-o2; + }); + for(var i=0;itoIndex)throw new IllegalArgumentException("fromIndex("+fromIndex+") > toIndex("+toIndex+")"); +if(fromIndex<0)throw new ArrayIndexOutOfBoundsException(fromIndex); +if(toIndex>arrayLen)throw new ArrayIndexOutOfBoundsException(toIndex); +},$fz.isPrivate=true,$fz),"~N,~N,~N"); +c$.binarySearch=Clazz.defineMethod(c$,"binarySearch", +function(a,key){ +var low=0; +var high=a.length-1; +while(low<=high){ +var mid=(low+high)>>1; +var midVal=a[mid]; +if(midValkey)high=mid-1; +else return mid; +} +return-(low+1); +},"~A,~N"); +c$.binarySearch=Clazz.defineMethod(c$,"binarySearch", +function(a,key){ +var low=0; +var high=a.length-1; +while(low<=high){ +var mid=(low+high)>>1; +var midVal=a[mid]; +var cmp=(midVal).compareTo(key); +if(cmp<0)low=mid+1; +else if(cmp>0)high=mid-1; +else return mid; +} +return-(low+1); +},"~A,~O"); +c$.binarySearch=Clazz.defineMethod(c$,"binarySearch", +function(a,key,c){ +if(c==null)return java.util.Arrays.binarySearch(a,key); +var low=0; +var high=a.length-1; +while(low<=high){ +var mid=(low+high)>>1; +var midVal=a[mid]; +var cmp=c.compare(midVal,key); +if(cmp<0)low=mid+1; +else if(cmp>0)high=mid-1; +else return mid; +} +return-(low+1); +},"~A,~O,java.util.Comparator"); +c$.equals=Clazz.defineMethod(c$,"equals", +function(a,a2){ +if(a===a2)return true; +if(a==null||a2==null)return false; +var length=a.length; +if(a2.length!=length)return false; +for(var i=0;i= 0;)b[i]=a[i]; + return b; +}); + +c$.asList=Clazz.defineMethod(c$,"asList", +function(a){ +return new java.util.Arrays.ArrayList(arguments.length == 1 && Clazz.getClassName(a) == "Array" ? a : arguments); // BH must be T... +},"~A"); +/*if*/;(function(){ var + +c$=Clazz.decorateAsClass(function(){ +this.a=null; +Clazz.instantialize(this,arguments); +},java.util.Arrays,"ArrayList",java.util.AbstractList,[java.util.RandomAccess,java.io.Serializable]); +Clazz.makeConstructor(c$, +function(a){ +Clazz.superConstructor(this,java.util.Arrays.ArrayList,[]); +if(a==null)throw new NullPointerException(); +this.a=a; +},"~A"); +Clazz.overrideMethod(c$,"size", +function(){ +return this.a.length; +}); +Clazz.defineMethod(c$,"toArray", +function(){ +return this.a.clone(); +}); +Clazz.overrideMethod(c$,"get", +function(a){ +return this.a[a]; +},"~N"); +Clazz.overrideMethod(c$,"set", +function(a,b){ +var c=this.a[a]; +this.a[a]=b; +return c; +},"~N,~O"); +Clazz.overrideMethod(c$,"indexOf", +function(a){ +if(a==null){ +for(var b=0;b=0){ +this.elementCount=0; +this.elementData=this.newElementArray(capacity==0?1:capacity); +this.loadFactor=0.75; +this.computeMaxSize(); +}else{ +throw new IllegalArgumentException(); +}},"~N"); +Clazz.makeConstructor(c$, +function(capacity,loadFactor){ +Clazz.superConstructor(this,java.util.HashMap,[]); +if(capacity>=0&&loadFactor>0){ +this.elementCount=0; +this.elementData=this.newElementArray(capacity==0?1:capacity); +this.loadFactor=loadFactor; +this.computeMaxSize(); +}else{ +throw new IllegalArgumentException(); +}},"~N,~N"); +Clazz.makeConstructor(c$, +function(map){ +this.construct(map.size()<6?11:map.size()*2); +this.putAllAM(map); +},"java.util.Map"); + + +/* +Clazz.makeConstructor(c$, +function(capacity,loadFactor){ +this.doConstruct(capacity,loadFactor); +},"~N,~N"); + +Clazz.defineMethod(c$, "doConstruct", +function(capacity,loadFactor) { +capacity || (capacity = 16); +loadFactor || (loadFactor = 0.75); +if (typeof capacity != "number") { + var map = capacity; + this.loadFactor=loadFactor; + this.elementData=this.newElementArray(map.size()<6?11:map.size()*2); + this.computeMaxSize(); + this.putAllAM(map); + return; +} + +//Clazz.superConstructor(this,java.util.HashMap,[]); +if(capacity>=0&&loadFactor>0){ +this.elementData=this.newElementArray(capacity==0?1:capacity); +this.loadFactor=loadFactor; +this.computeMaxSize(); +}else{ +throw new IllegalArgumentException(); +} +},"~N,~N"); + +//Clazz.makeConstructor(c$, +//function(map){ +//this.construct(map.size()<6?11:map.size()*2); +//Clazz.superCall(this,java.util.HashMap,"putAll",[map]); +//},"java.util.Map"); + +*/ +Clazz.overrideMethod(c$,"clear", +function(){ +if(this.elementCount>0){ +this.elementCount=0; +java.util.Arrays.fill(this.elementData,null); +this.modCount++; +}}); +Clazz.defineMethod(c$,"clone", +function(){ + return this.cloneHM(); +}); + +Clazz.defineMethod(c$,"cloneHM", +function(){ +try{ +var map=this.cloneAM();//Clazz.superCall(this,java.util.HashMap,"clone",[]); +map.elementData=this.newElementArray(this.elementData.length); +var entry; +for(var i=0;i=0;){ +var entry=this.elementData[i]; +while(entry!=null){ +if(value.equals(entry.value)){ +return true; +}entry=entry.next; +} +} +}else{ +for(var i=this.elementData.length;--i>=0;){ +var entry=this.elementData[i]; +while(entry!=null){ +if(entry.value==null){ +return true; +}entry=entry.next; +} +} +}return false; +},"~O"); +Clazz.overrideMethod(c$,"entrySet", +function(){ +return new java.util.HashMap.HashMapEntrySet(this); +}); +Clazz.overrideMethod(c$,"get", +function(key){ +var m=this.getEntry(key); +if(m!=null){ +return m.value; +}return null; +},"~O"); +Clazz.defineMethod(c$,"getEntry", +function(key){ +var index=this.getModuloHash(key); +return this.findEntry(key,index); +},"~O"); +Clazz.defineMethod(c$,"getModuloHash", +function(key){ +if(key==null){ +return 0; +}return(key.hashCode()&0x7FFFFFFF)%this.elementData.length; +},"~O"); +Clazz.defineMethod(c$,"findEntry", +function(key,index){ +var m; +m=this.elementData[index]; +if(key!=null){ +while(m!=null&&!this.keysEqual(key,m)){ +m=m.next; +} +}else{ +while(m!=null&&m.key!=null){ +m=m.next; +} +}return m; +},"~O,~N"); +Clazz.overrideMethod(c$,"isEmpty", +function(){ +return this.elementCount==0; +}); +Clazz.overrideMethod(c$,"keySet", +function(){ +if(this.$keySet==null){ +this.$keySet=((Clazz.isClassDefined("java.util.HashMap$1")?0:java.util.HashMap.$HashMap$1$()),Clazz.innerTypeInstance(java.util.HashMap$1,this,null)); +}return this.$keySet; +}); +Clazz.overrideMethod(c$,"put", +function(key,value){ +var index=this.getModuloHash(key); +var entry=this.findEntry(key,index); +if(entry==null){ +this.modCount++; +if(++this.elementCount>this.threshold){ +this.rehash(); +index=key==null?0:(key.hashCode()&0x7FFFFFFF)%this.elementData.length; +}entry=this.createEntry(key,index,value); +return null; +}var result=entry.value; +entry.value=value; +return result; +},"~O,~O"); +Clazz.defineMethod(c$,"createEntry", +function(key,index,value){ +var entry=new java.util.HashMap.Entry(key,value); +entry.next=this.elementData[index]; +this.elementData[index]=entry; +return entry; +},"~O,~N,~O"); +Clazz.defineMethod(c$,"putAll", +function(map){ +if(!map.isEmpty()){ +var capacity=this.elementCount+map.size(); +if(capacity>this.threshold){ +this.rehash(capacity); +} +this.putAllAM(map); + +}},"java.util.Map"); +Clazz.defineMethod(c$,"rehash", +function(capacity){ +var length=(capacity==0?1:capacity<<1); +var newData=this.newElementArray(length); +for(var i=0;i>>(48-bits)); +},"~N"); +Clazz.defineMethod(c$,"nextBoolean", +function(){ +return Math.random()>0.5; +}); +Clazz.defineMethod(c$,"nextBytes", +function(buf){ +for(var i=0;i=1); +var norm=Math.sqrt(-2*Math.log(s)/s); +this.nextNextGaussian=v2*norm; +this.haveNextNextGaussian=true; +return v1*norm; +}); +Clazz.defineMethod(c$,"nextInt", +function(){ +return Math.ceil(0xffff*Math.random())-0x8000; +}); +Clazz.defineMethod(c$,"nextInt", +function(n){ +if(n>0){ +n = Math.min(n, 31); +return Math.floor((2 << (n - 1)) * Math.random()) +} +throw new IllegalArgumentException(); +},"~N"); +Clazz.defineMethod(c$,"nextLong", +function(){ +return Math.ceil(0xffffffff*Math.random())-0x80000000; +}); +Clazz.defineMethod(c$,"setSeed", +function(seed){ +Math.seedrandom(seed); +},"~N"); +}); + +// seedrandom.js +// Author: David Bau 3/11/2010 +// +// Defines a method Math.seedrandom() that, when called, substitutes +// an explicitly seeded RC4-based algorithm for Math.random(). Also +// supports automatic seeding from local or network sources of entropy. +// +// Usage: +// +// +// +// Math.seedrandom('yipee'); Sets Math.random to a function that is +// initialized using the given explicit seed. +// +// Math.seedrandom(); Sets Math.random to a function that is +// seeded using the current time, dom state, +// and other accumulated local entropy. +// The generated seed string is returned. +// +// Math.seedrandom('yowza', true); +// Seeds using the given explicit seed mixed +// together with accumulated entropy. +// +// +// Seeds using physical random bits downloaded +// from random.org. +// +// Examples: +// +// Math.seedrandom("hello"); // Use "hello" as the seed. +// document.write(Math.random()); // Always 0.5463663768140734 +// document.write(Math.random()); // Always 0.43973793770592234 +// var rng1 = Math.random; // Remember the current prng. +// +// var autoseed = Math.seedrandom(); // New prng with an automatic seed. +// document.write(Math.random()); // Pretty much unpredictable. +// +// Math.random = rng1; // Continue "hello" prng sequence. +// document.write(Math.random()); // Always 0.554769432473455 +// +// Math.seedrandom(autoseed); // Restart at the previous seed. +// document.write(Math.random()); // Repeat the 'unpredictable' value. +// +// Notes: +// +// Each time seedrandom('arg') is called, entropy from the passed seed +// is accumulated in a pool to help generate future seeds for the +// zero-argument form of Math.seedrandom, so entropy can be injected over +// time by calling seedrandom with explicit data repeatedly. +// +// On speed - This javascript implementation of Math.random() is about +// 3-10x slower than the built-in Math.random() because it is not native +// code, but this is typically fast enough anyway. Seeding is more expensive, +// especially if you use auto-seeding. Some details (timings on Chrome 4): +// +// Our Math.random() - avg less than 0.002 milliseconds per call +// seedrandom('explicit') - avg less than 0.5 milliseconds per call +// seedrandom('explicit', true) - avg less than 2 milliseconds per call +// seedrandom() - avg about 38 milliseconds per call +// +// LICENSE (BSD): +// +// Copyright 2010 David Bau, all rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of this module nor the names of its contributors may +// be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/** + * All code is in an anonymous closure to keep the global namespace clean. + * + * @param {number=} overflow + * @param {number=} startdenom + */ +(function (pool, math, width, chunks, significance, overflow, startdenom) { + +var copyright = "Copyright 2010 David Bau, all rights reserved. (BSD)" +// +// seedrandom() +// This is the seedrandom function described above. +// +math['seedrandom'] = function seedrandom(seed, use_entropy) { + var key = []; + var arc4; + + // Flatten the seed string or build one from local entropy if needed. + seed = mixkey(flatten( + use_entropy ? [seed, pool] : + arguments.length ? seed : + [new Date().getTime(), pool, window], 3), key); + + // Use the seed to initialize an ARC4 generator. + arc4 = new ARC4(key); + + // Mix the randomness into accumulated entropy. + mixkey(arc4.S, pool); + + // Override Math.random + + // This function returns a random double in [0, 1) that contains + // randomness in every bit of the mantissa of the IEEE 754 value. + + math['random'] = function random() { // Closure to return a random double: + var n = arc4.g(chunks); // Start with a numerator n < 2 ^ 48 + var d = startdenom; // and denominator d = 2 ^ 48. + var x = 0; // and no 'extra last byte'. + while (n < significance) { // Fill up all significant digits by + n = (n + x) * width; // shifting numerator and + d *= width; // denominator and generating a + x = arc4.g(1); // new least-significant-byte. + } + while (n >= overflow) { // To avoid rounding up, before adding + n /= 2; // last byte, shift everything + d /= 2; // right using integer math until + x >>>= 1; // we have exactly the desired bits. + } + return (n + x) / d; // Form the number within [0, 1). + }; + + // Return the seed that was used + return seed; +}; + +// +// ARC4 +// +// An ARC4 implementation. The constructor takes a key in the form of +// an array of at most (width) integers that should be 0 <= x < (width). +// +// The g(count) method returns a pseudorandom integer that concatenates +// the next (count) outputs from ARC4. Its return value is a number x +// that is in the range 0 <= x < (width ^ count). +// +/** @constructor */ +function ARC4(key) { + var t, u, me = this, keylen = key.length; + var i = 0, j = me.i = me.j = me.m = 0; + me.S = []; + me.c = []; + + // The empty key [] is treated as [0]. + if (!keylen) { key = [keylen++]; } + + // Set up S using the standard key scheduling algorithm. + while (i < width) { me.S[i] = i++; } + for (i = 0; i < width; i++) { + t = me.S[i]; + j = lowbits(j + t + key[i % keylen]); + u = me.S[j]; + me.S[i] = u; + me.S[j] = t; + } + + // The "g" method returns the next (count) outputs as one number. + me.g = function getnext(count) { + var s = me.S; + var i = lowbits(me.i + 1); var t = s[i]; + var j = lowbits(me.j + t); var u = s[j]; + s[i] = u; + s[j] = t; + var r = s[lowbits(t + u)]; + while (--count) { + i = lowbits(i + 1); t = s[i]; + j = lowbits(j + t); u = s[j]; + s[i] = u; + s[j] = t; + r = r * width + s[lowbits(t + u)]; + } + me.i = i; + me.j = j; + return r; + }; + // For robust unpredictability discard an initial batch of values. + // See http://www.rsa.com/rsalabs/node.asp?id=2009 + me.g(width); +} + +// +// flatten() +// Converts an object tree to nested arrays of strings. +// +/** @param {Object=} result + * @param {string=} prop */ +function flatten(obj, depth, result, prop) { + result = []; + if (depth && typeof(obj) == 'object') { + for (prop in obj) { + if (prop.indexOf('S') < 5) { // Avoid FF3 bug (local/sessionStorage) + try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {} + } + } + } + return result.length ? result : '' + obj; +} + +// +// mixkey() +// Mixes a string seed into a key that is an array of integers, and +// returns a shortened string seed that is equivalent to the result key. +// +/** @param {number=} smear + * @param {number=} j */ +function mixkey(seed, key, smear, j) { + seed += ''; // Ensure the seed is a string + smear = 0; + for (j = 0; j < seed.length; j++) { + key[lowbits(j)] = + lowbits((smear ^= key[lowbits(j)] * 19) + seed.charCodeAt(j)); + } + seed = ''; + for (j in key) { seed += String.fromCharCode(key[j]); } + return seed; +} + +// +// lowbits() +// A quick "n mod width" for width a power of 2. +// +function lowbits(n) { return n & (width - 1); } + +// +// The following constants are related to IEEE 754 limits. +// +startdenom = math.pow(width, chunks); +significance = math.pow(2, significance); +overflow = significance * 2; + +// +// When seedrandom.js is loaded, we immediately mix a few bits +// from the built-in RNG into the entropy pool. Because we do +// not want to intefere with determinstic PRNG state later, +// seedrandom will not call math.random on its own again after +// initialization. +// +mixkey(math.random(), pool); + +// End anonymous scope, and pass initial values. +})( + [], // pool: entropy pool starts empty + Math, // math: package containing random, pow, and seedrandom + 256, // width: each RC4 output is 0 <= x < 256 + 6, // chunks: at least six RC4 outputs for each double + 52 // significance: there are 52 significant digits in a double +); + diff --git a/sources/net.sf.j2s.java.core/resources/_ES6/jsutil.js b/sources/net.sf.j2s.java.core/unused/jsutil.js similarity index 100% rename from sources/net.sf.j2s.java.core/resources/_ES6/jsutil.js rename to sources/net.sf.j2s.java.core/unused/jsutil.js diff --git a/sources/net.sf.j2s.java.core/unused/lang/AbstractMethodError.java b/sources/net.sf.j2s.java.core/unused/lang/AbstractMethodError.java new file mode 100644 index 000000000..bf9a84219 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/AbstractMethodError.java @@ -0,0 +1,47 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM notices that a an attempt is being made to + * invoke an abstract method. + *

+ * Note that this can only occur when inconsistant class files are being loaded, + * since invoking an abstract method is a compile time error. + */ +public class AbstractMethodError extends IncompatibleClassChangeError { + + private static final long serialVersionUID = -1654391082989018462L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public AbstractMethodError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public AbstractMethodError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ArithmeticException.java b/sources/net.sf.j2s.java.core/unused/lang/ArithmeticException.java new file mode 100644 index 000000000..f2151f6ad --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ArithmeticException.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when the an invalid arithmetic operation is + * attempted. + */ +public class ArithmeticException extends RuntimeException { + + private static final long serialVersionUID = 2256477558314496007L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ArithmeticException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ArithmeticException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ArrayIndexOutOfBoundsException.java b/sources/net.sf.j2s.java.core/unused/lang/ArrayIndexOutOfBoundsException.java new file mode 100644 index 000000000..e5edb8de7 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ArrayIndexOutOfBoundsException.java @@ -0,0 +1,59 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +//import org.apache.harmony.luni.util.Msg; + +/** + * This runtime exception is thrown when the an array is indexed with a value + * less than zero, or greater than or equal to the size of the array. + */ +public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException { + + private static final long serialVersionUID = -5116101128118950844L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ArrayIndexOutOfBoundsException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * (which is based on the argument which is the index which failed) filled + * in. + * + * @param index + * int the offending index. + */ + public ArrayIndexOutOfBoundsException(int index) { + //super(Msg.getString("K0052", index)); + super("Array index out of range: " + index); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ArrayIndexOutOfBoundsException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ArrayStoreException.java b/sources/net.sf.j2s.java.core/unused/lang/ArrayStoreException.java new file mode 100644 index 000000000..b9d9f44ca --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ArrayStoreException.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when a program attempts to store into an + * array an element of a a type which the array can not hold.. + */ +public class ArrayStoreException extends RuntimeException { + + private static final long serialVersionUID = -4522193890499838241L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ArrayStoreException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ArrayStoreException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/AssertionError.java b/sources/net.sf.j2s.java.core/unused/lang/AssertionError.java new file mode 100644 index 000000000..a6155a0ab --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/AssertionError.java @@ -0,0 +1,128 @@ +/* + * Copyright 2002, 2004 The Apache Software Foundation or its licensors, as + * applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang; + +/** + *

+ * Indicates that an assertion has failed. + *

+ * + * @since 1.4 + */ +public class AssertionError extends Error { + + private static final long serialVersionUID = -5013299493970297370L; + + /** + *

+ * Constructs an instance without a message. + *

+ */ + public AssertionError() { + super(); + } + + /** + *

+ * Constructs an instance with a message that is the + * {@link String#valueOf(Object)} of the object passed. If the object passed + * is an instanceof {@link Throwable}, then it also becomes the cause of + * this error. + *

+ * + * @param detailMessage The value to be converted into the message and + * optionally the cause. + */ + public AssertionError(Object detailMessage) { + super(String.valueOf(detailMessage), + (detailMessage instanceof Throwable ? (Throwable) detailMessage + : null)); + } + + /** + *

+ * Constructs an instance with a message that is the + * {@link String#valueOf(boolean)} of the boolean passed. + *

+ * + * @param detailMessage The value to be converted into the message. + */ + public AssertionError(boolean detailMessage) { + this(String.valueOf(detailMessage)); + } + + /** + *

+ * Constructs an instance with a message that is the + * {@link String#valueOf(char)} of the char passed. + *

+ * + * @param detailMessage The value to be converted into the message. + */ + public AssertionError(char detailMessage) { + this(String.valueOf(detailMessage)); + } + + /** + *

+ * Constructs an instance with a message that is the + * {@link String#valueOf(int)} of the int passed. + *

+ * + * @param detailMessage The value to be converted into the message. + */ + public AssertionError(int detailMessage) { + this(Integer.toString(detailMessage)); + } + + /** + *

+ * Constructs an instance with a message that is the + * {@link String#valueOf(long)} of the long passed. + *

+ * + * @param detailMessage The value to be converted into the message. + */ + public AssertionError(long detailMessage) { + this(Long.toString(detailMessage)); + } + + /** + *

+ * Constructs an instance with a message that is the + * {@link String#valueOf(float)} of the float passed. + *

+ * + * @param detailMessage The value to be converted into the message. + */ + public AssertionError(float detailMessage) { + this(Float.toString(detailMessage)); + } + + /** + *

+ * Constructs an instance with a message that is the + * {@link String#valueOf(double)} of the double passed. + *

+ * + * @param detailMessage The value to be converted into the message. + */ + public AssertionError(double detailMessage) { + this(Double.toString(detailMessage)); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ClassCastException.java b/sources/net.sf.j2s.java.core/unused/lang/ClassCastException.java new file mode 100644 index 000000000..55e423c5d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ClassCastException.java @@ -0,0 +1,61 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +//import org.apache.harmony.luni.util.Msg; + +/** + * This runtime exception is thrown when a program attempts to cast a an object + * to a type which it is not compatible with. + * + */ +public class ClassCastException extends RuntimeException { + private static final long serialVersionUID = -9223365651070458532L; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public ClassCastException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ClassCastException(String detailMessage) { + super(detailMessage); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param instanceClass + * Class The class being cast from. + * + * @param castClass + * Class The class being cast to. + */ +// ClassCastException(Class instanceClass, Class castClass) { +// super(Msg.getString("K0340", instanceClass.getName(), castClass +// .getName())); +// } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ClassCircularityError.java b/sources/net.sf.j2s.java.core/unused/lang/ClassCircularityError.java new file mode 100644 index 000000000..ab32c204f --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ClassCircularityError.java @@ -0,0 +1,48 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package java.lang; + + +/** + * This error is thrown when the VM notices that an attempt is made to load a + * class which would directly or indirectly inherit from one of its subclasses. + *

+ * Note that this can only occur when inconsistant class files are being loaded, + * since this error would be detected at compile time. + */ +public class ClassCircularityError extends LinkageError { + + private static final long serialVersionUID = 1054362542914539689L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ClassCircularityError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ClassCircularityError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ClassFormatError.java b/sources/net.sf.j2s.java.core/unused/lang/ClassFormatError.java new file mode 100644 index 000000000..5b3724c22 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ClassFormatError.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown by the class loader when it discovers that a class that + * it is loading does not have the correct shape. + */ +public class ClassFormatError extends LinkageError { + + private static final long serialVersionUID = -8420114879011949195L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ClassFormatError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ClassFormatError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ClassNotFoundException.java b/sources/net.sf.j2s.java.core/unused/lang/ClassNotFoundException.java new file mode 100644 index 000000000..89e1985d6 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ClassNotFoundException.java @@ -0,0 +1,78 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This exception is thrown when a classloader is unable to find a class. + */ +public class ClassNotFoundException extends Exception { + + private static final long serialVersionUID = 9176873029745254542L; + + private Throwable ex; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ClassNotFoundException() { + super((Throwable) null); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ClassNotFoundException(String detailMessage) { + super(detailMessage, null); + } + + /** + * Constructs a new instance of this class with its walkback, message and + * exception filled in. + * + * @param detailMessage + * String The detail message for the exception. + * @param exception + * Throwable The exception which occurred while loading the + * class. + */ + public ClassNotFoundException(String detailMessage, Throwable exception) { + super(detailMessage); + ex = exception; + } + + /** + * Answers the exception which occured when loading the class. + * + * @return Throwable The exception which occurred while loading the class. + */ + public Throwable getException() { + return ex; + } + + /** + * Answers the cause of this Throwable, or null if there is no cause. + * + * @return Throwable The receiver's cause. + */ + public Throwable getCause() { + return ex; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/CloneNotSupportedException.java b/sources/net.sf.j2s.java.core/unused/lang/CloneNotSupportedException.java new file mode 100644 index 000000000..c555e52aa --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/CloneNotSupportedException.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This exception is thrown when a program attempts to clone an object which + * does not support the Cloneable interface. + * + * @see Cloneable + */ +public class CloneNotSupportedException extends Exception { + + private static final long serialVersionUID = 5195511250079656443L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public CloneNotSupportedException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public CloneNotSupportedException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/Error.java b/sources/net.sf.j2s.java.core/unused/lang/Error.java new file mode 100644 index 000000000..aebbf2f2a --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/Error.java @@ -0,0 +1,73 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This class is the superclass of all classes which represent unrecoverable + * errors. When Errors are thrown, they should not be caught by application + * code. + * + * @see Throwable + * @see Exception + * @see RuntimeException + */ +public class Error extends Throwable { + + private static final long serialVersionUID = 4980196508277280342L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public Error() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public Error(String detailMessage) { + super(detailMessage); + } + + /** + * Constructs a new instance of this class with its walkback, message and + * cause filled in. + * + * @param detailMessage + * String The detail message for the exception. + * @param throwable + * The cause of this Throwable + */ + public Error(String detailMessage, Throwable throwable) { + super(detailMessage, throwable); + } + + /** + * Constructs a new instance of this class with its walkback and cause + * filled in. + * + * @param throwable + * The cause of this Throwable + */ + public Error(Throwable throwable) { + super(throwable); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/Exception.java b/sources/net.sf.j2s.java.core/unused/lang/Exception.java new file mode 100644 index 000000000..db7d1aa81 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/Exception.java @@ -0,0 +1,72 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This class is the superclass of all classes which represent recoverable + * exceptions. When Exceptions are thrown, they may be caught by application + * code. + * + * @see Throwable + * @see Error + * @see RuntimeException + */ +public class Exception extends Throwable { + private static final long serialVersionUID = -3387516993124229948L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public Exception() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public Exception(String detailMessage) { + super(detailMessage); + } + + /** + * Constructs a new instance of this class with its walkback, message and + * cause filled in. + * + * @param detailMessage + * String The detail message for the exception. + * @param throwable + * The cause of this Throwable + */ + public Exception(String detailMessage, Throwable throwable) { + super(detailMessage, throwable); + } + + /** + * Constructs a new instance of this class with its walkback and cause + * filled in. + * + * @param throwable + * The cause of this Throwable + */ + public Exception(Throwable throwable) { + super(throwable); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ExceptionInInitializerError.java b/sources/net.sf.j2s.java.core/unused/lang/ExceptionInInitializerError.java new file mode 100644 index 000000000..28ef8f0cd --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ExceptionInInitializerError.java @@ -0,0 +1,77 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when an exception occurs during class initialization. + */ +public class ExceptionInInitializerError extends LinkageError { + + private static final long serialVersionUID = 1521711792217232256L; + + private Throwable exception; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ExceptionInInitializerError() { + super(); + initCause(null); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ExceptionInInitializerError(String detailMessage) { + super(detailMessage); + initCause(null); + } + + /** + * Constructs a new instance of this class with its walkback and exception + * filled in. The exception should be the one which originally occured in + * the class initialization code. + * + * @param exception + * Throwable The exception which caused the problem. + */ + public ExceptionInInitializerError(Throwable exception) { + super(); + this.exception = exception; + initCause(exception); + } + + /** + * Answers the exception which was passed in when the instance was created. + */ + public Throwable getException() { + return exception; + } + + /** + * Answers the cause of this Throwable, or null if there is no cause. + * + * @return Throwable The receiver's cause. + */ + public Throwable getCause() { + return exception; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IllegalAccessError.java b/sources/net.sf.j2s.java.core/unused/lang/IllegalAccessError.java new file mode 100644 index 000000000..cd0a944c0 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IllegalAccessError.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM notices that a an attempt is being made to + * access a field which is not accessable from where it is referenced. + *

+ * Note that this can only occur when inconsistant class files are being loaded. + */ +public class IllegalAccessError extends IncompatibleClassChangeError { + + private static final long serialVersionUID = -8988904074992417891L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IllegalAccessError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IllegalAccessError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IllegalAccessException.java b/sources/net.sf.j2s.java.core/unused/lang/IllegalAccessException.java new file mode 100644 index 000000000..57b107aad --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IllegalAccessException.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This exception is thrown when a program attempts to access a field or method + * which is not accessible from the location where the reference is made. + * + */ +public class IllegalAccessException extends Exception { + + private static final long serialVersionUID = 6616958222490762034L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IllegalAccessException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IllegalAccessException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IllegalArgumentException.java b/sources/net.sf.j2s.java.core/unused/lang/IllegalArgumentException.java new file mode 100644 index 000000000..094a06af1 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IllegalArgumentException.java @@ -0,0 +1,63 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when a method is invoked with an argument + * which it can not reasonably deal with. + */ +public class IllegalArgumentException extends RuntimeException { + + private static final long serialVersionUID = -5365630128856068164L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IllegalArgumentException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IllegalArgumentException(String detailMessage) { + super(detailMessage); + } + + /** + *

Constructs a new instance with a message and cause.

+ * @param message The message to assign to this exception. + * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public IllegalArgumentException(String message, Throwable cause) { + super(message, cause); + } + + /** + *

Constructs a new instance with a cause.

+ * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public IllegalArgumentException(Throwable cause) { + super((cause == null ? null : cause.toString()), cause); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IllegalMonitorStateException.java b/sources/net.sf.j2s.java.core/unused/lang/IllegalMonitorStateException.java new file mode 100644 index 000000000..c7e95e6de --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IllegalMonitorStateException.java @@ -0,0 +1,45 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when a monitor operation is attempted when + * the monitor is not in the correct state, for example when a thread attempts + * to exit a monitor which it did not own. + */ +public class IllegalMonitorStateException extends RuntimeException { + + private static final long serialVersionUID = 3713306369498869069L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IllegalMonitorStateException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IllegalMonitorStateException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IllegalStateException.java b/sources/net.sf.j2s.java.core/unused/lang/IllegalStateException.java new file mode 100644 index 000000000..ec34bd0a0 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IllegalStateException.java @@ -0,0 +1,63 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when an action is attempted at a time when + * the virtual machine is not in the correct state. + */ +public class IllegalStateException extends RuntimeException { + + private static final long serialVersionUID = -1848914673093119416L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IllegalStateException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IllegalStateException(String detailMessage) { + super(detailMessage); + } + + /** + *

Constructs a new instance with a message and cause.

+ * @param message The message to assign to this exception. + * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public IllegalStateException(String message, Throwable cause) { + super(message, cause); + } + + /** + *

Constructs a new instance with a cause.

+ * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public IllegalStateException(Throwable cause) { + super((cause == null ? null : cause.toString()), cause); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IllegalThreadStateException.java b/sources/net.sf.j2s.java.core/unused/lang/IllegalThreadStateException.java new file mode 100644 index 000000000..3e63d7e34 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IllegalThreadStateException.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when an operation is attempted which is not + * possible given the state that the executing thread is in. + */ +public class IllegalThreadStateException extends IllegalArgumentException { + + private static final long serialVersionUID = -7626246362397460174L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IllegalThreadStateException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IllegalThreadStateException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IncompatibleClassChangeError.java b/sources/net.sf.j2s.java.core/unused/lang/IncompatibleClassChangeError.java new file mode 100644 index 000000000..8709024d5 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IncompatibleClassChangeError.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This class is the superclass of all classes which represent errors which + * occur when inconsistant class files are loaded into the same running image. + * + * @see Error + */ +public class IncompatibleClassChangeError extends LinkageError { + + private static final long serialVersionUID = -4914975503642802119L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IncompatibleClassChangeError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IncompatibleClassChangeError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/IndexOutOfBoundsException.java b/sources/net.sf.j2s.java.core/unused/lang/IndexOutOfBoundsException.java new file mode 100644 index 000000000..3b18f8a3f --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/IndexOutOfBoundsException.java @@ -0,0 +1,45 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when a program attempts to access a value in + * an indexable collection using a value which is outside the possible range of + * indices. + */ +public class IndexOutOfBoundsException extends RuntimeException { + + private static final long serialVersionUID = 234122996006267687L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public IndexOutOfBoundsException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public IndexOutOfBoundsException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/InstantiationError.java b/sources/net.sf.j2s.java.core/unused/lang/InstantiationError.java new file mode 100644 index 000000000..16b639e2d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/InstantiationError.java @@ -0,0 +1,60 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM notices that a an attempt is being made to + * create a new instance of a class which has no visible constructors from the + * location where new is invoked. + *

+ * Note that this can only occur when inconsistent class files are being loaded. + * + */ +public class InstantiationError extends IncompatibleClassChangeError { + private static final long serialVersionUID = -4885810657349421204L; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public InstantiationError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public InstantiationError(String detailMessage) { + super(detailMessage); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param clazz + * Class The class which cannot be instantiated. + */ +// InstantiationError(Class clazz) { +// super(clazz.getName()); +// } + +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/InstantiationException.java b/sources/net.sf.j2s.java.core/unused/lang/InstantiationException.java new file mode 100644 index 000000000..9eb3f14b9 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/InstantiationException.java @@ -0,0 +1,56 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This exception is thrown when a program attempts to access a constructor + * which is not accessible from the location where the reference is made. + * + */ +public class InstantiationException extends Exception { + private static final long serialVersionUID = -8441929162975509110L; + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public InstantiationException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public InstantiationException(String detailMessage) { + super(detailMessage); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param clazz + * Class The class which cannot be instantiated. + */ +// InstantiationException(Class clazz) { +// super(clazz.getName()); +// } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/InternalError.java b/sources/net.sf.j2s.java.core/unused/lang/InternalError.java new file mode 100644 index 000000000..0c8b56e79 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/InternalError.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM notices that it has gotten into a state + * which it does not understand. + */ +public class InternalError extends VirtualMachineError { + + private static final long serialVersionUID = -9062593416125562365L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public InternalError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public InternalError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/InterruptedException.java b/sources/net.sf.j2s.java.core/unused/lang/InterruptedException.java new file mode 100644 index 000000000..9ee10c7a6 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/InterruptedException.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This exception is thrown when a waiting thread is activated before the + * condition it was waiting on has been satisfied. + */ +public class InterruptedException extends Exception { + + private static final long serialVersionUID = 6700697376100628473L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public InterruptedException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public InterruptedException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/Iterable.java b/sources/net.sf.j2s.java.core/unused/lang/Iterable.java new file mode 100644 index 000000000..a652b190f --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/Iterable.java @@ -0,0 +1,34 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.util.Iterator; + +/** + *

Implementations of this interface can be used within a foreach + * statement.

+ * @since 1.5 + */ +public interface Iterable { + + /** + *

Returns an {@link Iterator} for the elements in this object.

+ * + * @return An Iterator instance. + */ + Iterator iterator(); +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/LinkageError.java b/sources/net.sf.j2s.java.core/unused/lang/LinkageError.java new file mode 100644 index 000000000..0cea63cb9 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/LinkageError.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This class is the superclass of all classes which represent errors that occur + * when loading and linking class files. + * + * @see Error + */ +public class LinkageError extends Error { + + private static final long serialVersionUID = 3579600108157160122L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public LinkageError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public LinkageError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NegativeArraySizeException.java b/sources/net.sf.j2s.java.core/unused/lang/NegativeArraySizeException.java new file mode 100644 index 000000000..6c545cd8d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NegativeArraySizeException.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when an attempt is made to create an array + * whose size would be less than zero. + */ +public class NegativeArraySizeException extends RuntimeException { + + private static final long serialVersionUID = -8960118058596991861L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NegativeArraySizeException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NegativeArraySizeException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NoClassDefFoundError.java b/sources/net.sf.j2s.java.core/unused/lang/NoClassDefFoundError.java new file mode 100644 index 000000000..a1192101a --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NoClassDefFoundError.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM is unable to locate a class which it has + * been asked to load. + */ +public class NoClassDefFoundError extends LinkageError { + + private static final long serialVersionUID = 9095859863287012458L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NoClassDefFoundError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoClassDefFoundError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NoSuchFieldError.java b/sources/net.sf.j2s.java.core/unused/lang/NoSuchFieldError.java new file mode 100644 index 000000000..92e22e9fc --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NoSuchFieldError.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM notices that a an attempt is being made to + * reference a field of a class which does not exist in that class. + *

+ * Note that this can only occur when inconsistant class files are being loaded. + */ +public class NoSuchFieldError extends IncompatibleClassChangeError { + + private static final long serialVersionUID = -3456430195886129035L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NoSuchFieldError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoSuchFieldError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NoSuchFieldException.java b/sources/net.sf.j2s.java.core/unused/lang/NoSuchFieldException.java new file mode 100644 index 000000000..b85e80ad6 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NoSuchFieldException.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This exception is thrown when a program attempts to access a field which does + * not exist in a class + */ +public class NoSuchFieldException extends java.lang.Exception { + + private static final long serialVersionUID = -6143714805279938260L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NoSuchFieldException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoSuchFieldException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NoSuchMethodError.java b/sources/net.sf.j2s.java.core/unused/lang/NoSuchMethodError.java new file mode 100644 index 000000000..49f0e5c25 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NoSuchMethodError.java @@ -0,0 +1,45 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM notices that a an attempt is being made to + * reference a method of a class which does not exist in that class. + */ +public class NoSuchMethodError extends IncompatibleClassChangeError { + + private static final long serialVersionUID = -3765521442372831335L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NoSuchMethodError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoSuchMethodError(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NoSuchMethodException.java b/sources/net.sf.j2s.java.core/unused/lang/NoSuchMethodException.java new file mode 100644 index 000000000..e3a4b5c4c --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NoSuchMethodException.java @@ -0,0 +1,45 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This exception is thrown when a program attempts to access a method which + * does not exist in a class. + */ +public class NoSuchMethodException extends java.lang.Exception { + + private static final long serialVersionUID = 5034388446362600923L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NoSuchMethodException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoSuchMethodException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NullPointerException.java b/sources/net.sf.j2s.java.core/unused/lang/NullPointerException.java new file mode 100644 index 000000000..b3c6643c4 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NullPointerException.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when an attempt is made to access a field or + * method of an instance or an element of an array when there is no instance or + * array to use (i.e. the pointer is null). + */ +public class NullPointerException extends RuntimeException { + + private static final long serialVersionUID = 5162710183389028792L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NullPointerException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NullPointerException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/NumberFormatException.java b/sources/net.sf.j2s.java.core/unused/lang/NumberFormatException.java new file mode 100644 index 000000000..74d2fd2f8 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/NumberFormatException.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when a "string to number" conversion routine + * is passed an invalid value. + */ +public class NumberFormatException extends java.lang.IllegalArgumentException { + + private static final long serialVersionUID = -2848938806368998894L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NumberFormatException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NumberFormatException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/OutOfMemoryError.java b/sources/net.sf.j2s.java.core/unused/lang/OutOfMemoryError.java new file mode 100644 index 000000000..21f1027a3 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/OutOfMemoryError.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when a request is made for more memory either as a + * result of the running program, or because of the internal behavior of the + * virtual machine which can not be satisfied using the available platform + * resources. + */ +public class OutOfMemoryError extends java.lang.VirtualMachineError { + + private static final long serialVersionUID = 8228564086184010517L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public OutOfMemoryError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public OutOfMemoryError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/RuntimeException.java b/sources/net.sf.j2s.java.core/unused/lang/RuntimeException.java new file mode 100644 index 000000000..3788e7b7d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/RuntimeException.java @@ -0,0 +1,68 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This class is the superclass of all classes which represent exceptional + * conditions which occur as a result of the running of the virtual machine. + */ +public class RuntimeException extends Exception { + + private static final long serialVersionUID = -7034897190745766939L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public RuntimeException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public RuntimeException(String detailMessage) { + super(detailMessage); + } + + /** + * Constructs a new instance of this class with its walkback, message and + * cause filled in. + * + * @param detailMessage + * String The detail message for the exception. + * @param throwable + * The cause of this Throwable + */ + public RuntimeException(String detailMessage, Throwable throwable) { + super(detailMessage, throwable); + } + + /** + * Constructs a new instance of this class with its walkback and cause + * filled in. + * + * @param throwable + * The cause of this Throwable + */ + public RuntimeException(Throwable throwable) { + super(throwable); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/SecurityException.java b/sources/net.sf.j2s.java.core/unused/lang/SecurityException.java new file mode 100644 index 000000000..6df1c70ff --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/SecurityException.java @@ -0,0 +1,62 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when a security manager check fails. + */ +public class SecurityException extends java.lang.RuntimeException { + + private static final long serialVersionUID = 6878364983674394167L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public SecurityException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public SecurityException(String detailMessage) { + super(detailMessage); + } + + /** + *

Constructs a new instance with a message and cause.

+ * @param message The message to assign to this exception. + * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public SecurityException(String message, Throwable cause) { + super(message, cause); + } + + /** + *

Constructs a new instance with a cause.

+ * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public SecurityException(Throwable cause) { + super((cause == null ? null : cause.toString()), cause); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/StackOverflowError.java b/sources/net.sf.j2s.java.core/unused/lang/StackOverflowError.java new file mode 100644 index 000000000..bc6220d1d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/StackOverflowError.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the depth of the callstack of the running program + * excedes some platform or virtual machine specific limit. Typically, this will + * occur only when a program becomes infinitely recursive, but can occur in + * correctly written (but deeply recursive) programs. + */ +public class StackOverflowError extends java.lang.VirtualMachineError { + + private static final long serialVersionUID = 8609175038441759607L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public StackOverflowError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public StackOverflowError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/StackTraceElement.java b/sources/net.sf.j2s.java.core/unused/lang/StackTraceElement.java new file mode 100644 index 000000000..7cbe7793e --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/StackTraceElement.java @@ -0,0 +1,231 @@ +/* Copyright 2002, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*[INCLUDE-IF mJava14]*/ +package java.lang; + +import java.io.Serializable; + +/** + * An implementation of this class is provided, but the documented constructor + * can be used by the VM specific implementation to create instances. + * + * StackTraceElement represents a stack frame. + * + * @see Throwable#getStackTrace() + * @since 1.4 + */ +public final class StackTraceElement implements Serializable { + + private static final long serialVersionUID = 6992337162326171013L; + + String declaringClass; + + String methodName; + + String fileName; + + int lineNumber; + + /** + *

+ * Constructs a StackTraceElement for an execution point. + *

+ * + * @param cls The fully qualified name of the class where execution is at. + * @param method The name of the method where execution is at. + * @param file The name of the file where execution is at or + * null. + * @param line The line of the file where execution is at, a negative number + * if unknown or -2 if the execution is in a native + * method. + * + * @throws NullPointerException if cls or method + * is null. + * + * @since 1.5 + */ + public StackTraceElement(String cls, String method, String file, int line) { + super(); + if (cls == null || method == null) { + throw new NullPointerException(); + } + declaringClass = cls; + methodName = method; + fileName = file; + lineNumber = line; + } + + /** + *

+ * Private, nullary constructor for VM use only. + *

+ */ + private StackTraceElement() { + super(); + } + + /** + * Compare this object with the object passed in + * + * @param obj Object to compare with + */ + public boolean equals(Object obj) { + if (!(obj instanceof StackTraceElement)) { + return false; + } + StackTraceElement castObj = (StackTraceElement) obj; + + /* + * Unknown methods are never equal to anything (not strictly to spec, + * but spec does not allow null method/class names) + */ + if ((methodName == null) || (castObj.methodName == null)) { + return false; + } + + if (!getMethodName().equals(castObj.getMethodName())) { + return false; + } + if (!getClassName().equals(castObj.getClassName())) { + return false; + } + String localFileName = getFileName(); + if (localFileName == null) { + if (castObj.getFileName() != null) { + return false; + } + } else { + if (!localFileName.equals(castObj.getFileName())) { + return false; + } + } + if (getLineNumber() != castObj.getLineNumber()) { + return false; + } + + return true; + } + + /** + * Returns the full name (i.e. including the package) of the class where + * this stack trace element is executing. + * + * @return the fully qualified type name of the class where this stack trace + * element is executing. + */ + public String getClassName() { + return (declaringClass == null) ? "" : declaringClass; + } + + /** + * If available, returns the name of the file containing the Java code + * source which was compiled into the class where this stack trace element + * is executing. + * + * @return if available, the name of the file containing the Java code + * source for the stack trace element's executing class. If no such + * detail is available, a null value is returned. + */ + public String getFileName() { + return fileName; + } + + /** + * If available, returns the line number in the source for the class where + * this stack trace element is executing. + * + * @return if available, the line number in the source file for the class + * where this stack trace element is executing. If no such detail is + * available, a number less than 0. + */ + public int getLineNumber() { + return lineNumber; + } + + /** + * Returns the name of the method where this stack trace element is + * executing. + * + * @return the name of the method where this stack trace element is + * executing. + */ + public String getMethodName() { + return (methodName == null) ? "" : methodName; + } + + /** + * Return this StackTraceElement objects hash code + * + * @return This objects hash code + */ + public int hashCode() { + /* + * Either both methodName and declaringClass are null, or neither are + * null. + */ + if (methodName == null) { + // all unknown methods hash the same + return 0; + } + // declaringClass never null if methodName is non-null + return methodName.hashCode() ^ declaringClass.hashCode(); + } + + /** + * Returns true if the method name returned by + * {@link #getMethodName()} is implemented as a native method. + * + * @return if the method in which this stack trace element is executing is a + * native method + */ + public boolean isNativeMethod() { + return lineNumber == -2; + } + + /** + * Return a String representating this StackTraceElement object + * + * @return String representing this object + */ + public String toString() { + StringBuilder buf = new StringBuilder(80); + + buf.append(getClassName()); + buf.append('.'); + buf.append(getMethodName()); + + if (isNativeMethod()) { + buf.append("(Native Method)"); + } else { + String fName = getFileName(); + + if (fName == null) { + buf.append("(Unknown Source)"); + } else { + int lineNum = getLineNumber(); + + buf.append('('); + buf.append(fName); + if (lineNum >= 0) { + buf.append(':'); + buf.append(lineNum); + } + buf.append(')'); + } + } + return buf.toString(); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/StrictMath.java b/sources/net.sf.j2s.java.core/unused/lang/StrictMath.java new file mode 100644 index 000000000..54d70d9b5 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/StrictMath.java @@ -0,0 +1,713 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.util.Random; + +/** + * Class StrictMath provides various numeric operations using the standards set + * by the known "Freely Distributable Math Library" (fdlibm). The standard is + * set by the January 4th, 1995 version of the library. + */ +public final class StrictMath { + + /** + * Standard math constant + */ + public final static double E = Math.E; + + /** + * Standard math constant + */ + public final static double PI = Math.PI; + + private static java.util.Random random; + + /** + * Prevents this class from being instantiated. + */ + private StrictMath() { + } + + /** + * Answers the absolute value of the argument. + * + * @param d + * the value to be converted + * @return the argument if it is positive, otherwise the negation of the + * argument. + * + * @j2sNative return Math.abs (d); + */ + public static double abs(double d) { + long bits = Double.doubleToLongBits(d); + bits &= 0x7fffffffffffffffL; + return Double.longBitsToDouble(bits); + } + + /** + * Answers the absolute value of the argument. + * + * @param f + * the value to be converted + * @return the argument if it is positive, otherwise the negation of the + * argument. + * + * @j2sIgnore + */ + public static float abs(float f) { + int bits = Float.floatToIntBits(f); + bits &= 0x7fffffff; + return Float.intBitsToFloat(bits); + } + + /** + * Answers the absolute value of the argument. + * + * @param i + * the value to be converted + * @return the argument if it is positive, otherwise the negation of the + * argument. + * + * @j2sIgnore + */ + public static int abs(int i) { + return i >= 0 ? i : -i; + } + + /** + * Answers the absolute value of the argument. + * + * @param l + * the value to be converted + * @return the argument if it is positive, otherwise the negation of the + * argument. + * + * @j2sIgnore + */ + public static long abs(long l) { + return l >= 0 ? l : -l; + } + + /** + * Answers the closest double approximation of the arc cosine of the + * argument + * + * @param d + * the value to compute acos of + * @return the arc cosine of the argument. + * + * @j2sNative return Math.acos (d); + */ + public static native double acos(double d); + + /** + * Answers the closest double approximation of the arc sine of the argument + * + * @param d + * the value to compute asin of + * @return the arc sine of the argument. + * + * @j2sNative return Math.asin (d); + */ + public static native double asin(double d); + + /** + * Answers the closest double approximation of the arc tangent of the + * argument + * + * @param d + * the value to compute atan of + * @return the arc tangent of the argument. + * + * @j2sNative return Math.atan (d); + */ + public static native double atan(double d); + + /** + * Answers the closest double approximation of the arc tangent of the result + * of dividing the first argument by the second argument. + * + * @param d1 + * the numerator of the value to compute atan of + * @param d2 + * the denominator of the value to compute atan of + * @return the arc tangent of d1/d2. + * + * @j2sNative return Math.atan2 (d1, d2); + */ + public static native double atan2(double d1, double d2); + + /** + * Answers the closest double approximation of the cube root of the + * argument. + * + * @param d + * the value to compute cube root of + * @return the cube root of the argument. + */ + public static native double cbrt(double d); + + /** + * Answers the double conversion of the most negative (i.e. closest to + * negative infinity) integer value which is greater than the argument. + * + * @param d + * the value to be converted + * @return the ceiling of the argument. + * + * @j2sNative return Math.ceil (d); + */ + public static native double ceil(double d); + + + /** + * Answers the closest double approximation of the hyperbolic cosine of the + * argument. + * + * @param d + * the value to compute hyperbolic cosine of + * @return the hyperbolic cosine of the argument. + * + * @j2sNative return Math.cosh (d); + */ + public static native double cosh(double d); + + /** + * Answers the closest double approximation of the cosine of the argument + * + * @param d + * the value to compute cos of + * @return the cosine of the argument. + * + * @j2sNative return Math.cos (d); + */ + public static native double cos(double d); + + /** + * Answers the closest double approximation of the raising "e" to the power + * of the argument + * + * @param d + * the value to compute the exponential of + * @return the exponential of the argument. + * + * @j2sNative return Math.exp (d); + */ + public static native double exp(double d); + + /** + * Answers the closest double approximation of ed - 1. + * If the argument is very close to 0, it is much more accurate to use + * expm1(d)+1 than exp(d). + * + * @param d + * the value to compute the ed - 1 of + * @return the ed - 1 value of the argument. + */ + public static native double expm1(double d); + + /** + * Answers the double conversion of the most positive (i.e. closest to + * positive infinity) integer value which is less than the argument. + * + * + * @param d + * the value to be converted + * @return the ceiling of the argument. + * + * @j2sNative return Math.floor (d); + */ + public static native double floor(double d); + + /** + * Answers sqrt(x2+y2). The + * final result is without medium underflow or overflow. + * + * @param x + * a double number + * @param y + * a double number + * @return the sqrt(x2+y2) value + * of the arguments. + */ + public static native double hypot(double x, double y); + + /** + * Answers the remainder of dividing the first argument by the second using + * the IEEE 754 rules. + * + * @param d1 + * the numerator of the operation + * @param d2 + * the denominator of the operation + * @return the result of d1/d2. + */ + public static native double IEEEremainder(double d1, double d2); + + /** + * Answers the closest double approximation of the natural logarithm of the + * argument + * + * @param d + * the value to compute the log of + * @return the natural logarithm of the argument. + * + * @j2sNative return Math.log (d); + */ + public static native double log(double d); + + /** + * Answers the logarithm of the argument and the base is 10. + * + * @param d + * the value to compute the base 10 log of + * @return the base 10 logarithm of the argument. + * + * @j2sNative return Math.log10 (d); + */ + public static native double log10(double d); + + /** + * Answers the closest double approximation of the natural logarithm of the + * sum of the argument and 1. If the argument is very close to 0, it is much + * more accurate to use log1p(d) than log(1.0+d). + * + * @param d + * the value to compute the ln(1+d) of + * @return the natural logarithm of the sum of the argument and 1. + */ + public static native double log1p(double d); + + /** + * Answers the most positive (i.e. closest to positive infinity) of the two + * arguments. + * + * @param d1 + * the first argument to check + * @param d2 + * the second argument + * @return the larger of d1 and d2. + * + * @j2sNative return Math.max (d1, d2); + */ + public static double max(double d1, double d2) { + if (d1 > d2) + return d1; + if (d1 < d2) + return d2; + /* if either arg is NaN, return NaN */ + if (d1 != d2) + return Double.NaN; + /* max( +0.0,-0.0) == +0.0 */ + if (d1 == 0.0 + && ((Double.doubleToLongBits(d1) & Double.doubleToLongBits(d2)) & 0x8000000000000000L) == 0) + return 0.0; + return d1; + } + + /** + * Answers the most positive (i.e. closest to positive infinity) of the two + * arguments. + * + * @param f1 + * the first argument to check + * @param f2 + * the second argument + * @return the larger of f1 and f2. + * + * @j2sIgnore + */ + public static float max(float f1, float f2) { + if (f1 > f2) + return f1; + if (f1 < f2) + return f2; + /* if either arg is NaN, return NaN */ + if (f1 != f2) + return Float.NaN; + /* max( +0.0,-0.0) == +0.0 */ + if (f1 == 0.0f + && ((Float.floatToIntBits(f1) & Float.floatToIntBits(f2)) & 0x80000000) == 0) + return 0.0f; + return f1; + } + + /** + * Answers the most positive (i.e. closest to positive infinity) of the two + * arguments. + * + * @param i1 + * the first argument to check + * @param i2 + * the second argument + * @return the larger of i1 and i2. + * + * @j2sIgnore + */ + public static int max(int i1, int i2) { + return i1 > i2 ? i1 : i2; + } + + /** + * Answers the most positive (i.e. closest to positive infinity) of the two + * arguments. + * + * @param l1 + * the first argument to check + * @param l2 + * the second argument + * @return the larger of l1 and l2. + * + * @j2sIgnore + */ + public static long max(long l1, long l2) { + return l1 > l2 ? l1 : l2; + } + + /** + * Answers the most negative (i.e. closest to negative infinity) of the two + * arguments. + * + * @param d1 + * the first argument to check + * @param d2 + * the second argument + * @return the smaller of d1 and d2. + * + * @j2sNative return Math.min (d1, d2); + */ + public static double min(double d1, double d2) { + if (d1 > d2) + return d2; + if (d1 < d2) + return d1; + /* if either arg is NaN, return NaN */ + if (d1 != d2) + return Double.NaN; + /* min( +0.0,-0.0) == -0.0 */ + if (d1 == 0.0 + && ((Double.doubleToLongBits(d1) | Double.doubleToLongBits(d2)) & 0x8000000000000000l) != 0) + return 0.0 * (-1.0); + return d1; + } + + /** + * Answers the most negative (i.e. closest to negative infinity) of the two + * arguments. + * + * @param f1 + * the first argument to check + * @param f2 + * the second argument + * @return the smaller of f1 and f2. + * + * @j2sIgnore + */ + public static float min(float f1, float f2) { + if (f1 > f2) + return f2; + if (f1 < f2) + return f1; + /* if either arg is NaN, return NaN */ + if (f1 != f2) + return Float.NaN; + /* min( +0.0,-0.0) == -0.0 */ + if (f1 == 0.0f + && ((Float.floatToIntBits(f1) | Float.floatToIntBits(f2)) & 0x80000000) != 0) + return 0.0f * (-1.0f); + return f1; + } + + /** + * Answers the most negative (i.e. closest to negative infinity) of the two + * arguments. + * + * @param i1 + * the first argument to check + * @param i2 + * the second argument + * @return the smaller of i1 and i2. + * + * @j2sIgnore + */ + public static int min(int i1, int i2) { + return i1 < i2 ? i1 : i2; + } + + /** + * Answers the most negative (i.e. closest to negative infinity) of the two + * arguments. + * + * @param l1 + * the first argument to check + * @param l2 + * the second argument + * @return the smaller of l1 and l2. + * + * @j2sIgnore + */ + public static long min(long l1, long l2) { + return l1 < l2 ? l1 : l2; + } + + /** + * Answers the closest double approximation of the result of raising the + * first argument to the power of the second. + * + * @param d1 + * the base of the operation. + * @param d2 + * the exponent of the operation. + * @return d1 to the power of d2 + * + * @j2sNative return Math.pow (d1, d2); + */ + public static native double pow(double d1, double d2); + + /** + * Returns a pseudo-random number between 0.0 and 1.0. + * + * @return a pseudo-random number + * + * @j2sNative return Math.random (); + */ + public static double random() { + if (random == null) + random = new Random(); + return random.nextDouble(); + } + + /** + * Answers the double conversion of the result of rounding the argument to + * an integer. + * + * @param d + * the value to be converted + * @return the closest integer to the argument (as a double). + * + * @j2sNative return Math.round (d); + */ + public static native double rint(double d); + + /** + * Answers the result of rounding the argument to an integer. + * + * @param d + * the value to be converted + * @return the closest integer to the argument. + * + * @j2sNative return Math.round (d); + */ + public static long round(double d) { + // check for NaN + if (d != d) + return 0L; + return (long) Math.floor(d + 0.5d); + } + + /** + * Answers the result of rounding the argument to an integer. + * + * @param f + * the value to be converted + * @return the closest integer to the argument. + * + * @j2sIgnore + */ + public static int round(float f) { + // check for NaN + if (f != f) + return 0; + return (int) Math.floor(f + 0.5f); + } + + /** + * Answers the signum function of the argument. If the argument is less than + * zero, it answers -1.0. If greater than zero, 1.0 is returned. It returns + * zero if the argument is also zero. + * + * @param d + * the value to compute signum function of + * @return the value of the signum function. + */ + public static double signum(double d){ + if(Double.isNaN(d)){ + return Double.NaN; + } + double sig = d; + if(d > 0){ + sig = 1.0; + }else if (d < 0){ + sig = -1.0; + } + return sig; + } + + /** + * Answers the signum function of the argument. If the argument is less than + * zero, it answers -1.0. If greater than zero, 1.0 is returned. It returns + * zero if the argument is also zero. + * + * @param f + * the value to compute signum function of + * @return the value of the signum function. + */ + public static float signum(float f){ + if(Float.isNaN(f)){ + return Float.NaN; + } + float sig = f; + if(f > 0){ + sig = 1.0f; + }else if (f < 0){ + sig = -1.0f; + } + return sig; + } + + /** + * Answers the closest double approximation of the hyperbolic sine of the + * argument. + * + * @param d + * the value to compute hyperbolic sine of + * @return the hyperbolic sine of the argument. + * + * @j2sNative return Math.sinh (d); + */ + public static native double sinh(double d); + + /** + * Answers the closest double approximation of the sine of the argument + * + * @param d + * the value to compute sin of + * @return the sine of the argument. + * + * @j2sNative return Math.sin (d); + */ + public static native double sin(double d); + + /** + * Answers the closest double approximation of the square root of the + * argument + * + * @param d + * the value to compute sqrt of + * @return the square root of the argument. + * + * @j2sNative return Math.sqrt (d); + */ + public static native double sqrt(double d); + + /** + * Answers the closest double approximation of the tangent of the argument + * + * @param d + * the value to compute tan of + * @return the tangent of the argument. + * + * @j2sNative return Math.tan (d); + */ + public static native double tan(double d); + + /** + * Answers the closest double approximation of the hyperbolic tangent of the + * argument. The absolute value is always less than 1. + * + * @param d + * the value to compute hyperbolic tangent of + * @return the hyperbolic tangent of the argument. + * + * @j2sNative return Math.tanh (d); + */ + public static native double tanh(double d); + + /** + * Returns the measure in degrees of the supplied radian angle + * + * @param angrad + * an angle in radians + * @return the degree measure of the angle. + */ + public static double toDegrees(double angrad) { + return angrad * 180d / PI; + } + + /** + * Returns the measure in radians of the supplied degree angle + * + * @param angdeg + * an angle in degrees + * @return the radian measure of the angle. + */ + public static double toRadians(double angdeg) { + return angdeg / 180d * PI; + } + + /** + * Answers the argument's ulp. The size of a ulp of a double value is the + * positive distance between this value and the double value next larger + * in magnitude. For non-NaN x, ulp(-x) == ulp(x). + * + * @param d + * the floating-point value to compute ulp of + * @return the size of a ulp of the argument. + * + * @j2sIgnore + */ + public static double ulp(double d) { + // special cases + if (Double.isInfinite(d)) { + return Double.POSITIVE_INFINITY; + } else if (d == Double.MAX_VALUE || d == -Double.MAX_VALUE) { + return pow(2, 971); + } + d = Math.abs(d); + return nextafter(d, Double.MAX_VALUE) - d; + } + + /** + * Answers the argument's ulp. The size of a ulp of a float value is the + * positive distance between this value and the float value next larger + * in magnitude. For non-NaN x, ulp(-x) == ulp(x). + * + * @param f + * the floating-point value to compute ulp of + * @return the size of a ulp of the argument. + * + * @j2sIgnore + */ + public static float ulp(float f) { + // special cases + if (Float.isNaN(f)) { + return Float.NaN; + } else if (Float.isInfinite(f)) { + return Float.POSITIVE_INFINITY; + } else if (f == Float.MAX_VALUE || f == -Float.MAX_VALUE) { + return (float) pow(2, 104); + } + f = Math.abs(f); + return nextafterf(f, Float.MAX_VALUE) - f; + } + + private native static double nextafter(double x, double y); + + private native static float nextafterf(float x, float y); +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/StringIndexOutOfBoundsException.java b/sources/net.sf.j2s.java.core/unused/lang/StringIndexOutOfBoundsException.java new file mode 100644 index 000000000..f2703b0cd --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/StringIndexOutOfBoundsException.java @@ -0,0 +1,59 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +//import org.apache.harmony.luni.util.Msg; + +/** + * This runtime exception is thrown when the a String is indexed with a value + * less than zero, or greater than or equal to the size of the array. + */ +public class StringIndexOutOfBoundsException extends IndexOutOfBoundsException { + + private static final long serialVersionUID = -6762910422159637258L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public StringIndexOutOfBoundsException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * (which is based on the argument which is the index which failed) filled + * in. + * + * @param index + * int the index which is out of bounds + */ + public StringIndexOutOfBoundsException(int index) { + //super(Msg.getString("K0055", index)); + super("String index out of range: " + index); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public StringIndexOutOfBoundsException(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/ThreadDeath.java b/sources/net.sf.j2s.java.core/unused/lang/ThreadDeath.java new file mode 100644 index 000000000..bf66f5357 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/ThreadDeath.java @@ -0,0 +1,34 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * ThreadDeath is thrown when a thread stops executing. It is used to aid in the + * orderly unrolling of the thread's stack (eg. cleanup of monitors). + */ +public class ThreadDeath extends Error { + + private static final long serialVersionUID = -4417128565033088268L; + + /** + * Constructs a new instance of this class. Note that in the case of + * ThreadDeath, the walkback may not be filled in a way which + * allows a stack trace to be printed. + */ + public ThreadDeath() { + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/Throwable.java b/sources/net.sf.j2s.java.core/unused/lang/Throwable.java new file mode 100644 index 000000000..ccbd2f520 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/Throwable.java @@ -0,0 +1,740 @@ +/* + * @(#)Throwable.java 1.51 03/01/23 + * + * Copyright 2003 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +package java.lang; +import java.io.*; + +/** + * The Throwable class is the superclass of all errors and + * exceptions in the Java language. Only objects that are instances of this + * class (or one of its subclasses) are thrown by the Java Virtual Machine or + * can be thrown by the Java throw statement. Similarly, only + * this class or one of its subclasses can be the argument type in a + * catch clause. + * + *

Instances of two subclasses, {@link java.lang.Error} and + * {@link java.lang.Exception}, are conventionally used to indicate + * that exceptional situations have occurred. Typically, these instances + * are freshly created in the context of the exceptional situation so + * as to include relevant information (such as stack trace data). + * + *

A throwable contains a snapshot of the execution stack of its thread at + * the time it was created. It can also contain a message string that gives + * more information about the error. Finally, it can contain a cause: + * another throwable that caused this throwable to get thrown. The cause + * facility is new in release 1.4. It is also known as the chained + * exception facility, as the cause can, itself, have a cause, and so on, + * leading to a "chain" of exceptions, each caused by another. + * + *

One reason that a throwable may have a cause is that the class that + * throws it is built atop a lower layered abstraction, and an operation on + * the upper layer fails due to a failure in the lower layer. It would be bad + * design to let the throwable thrown by the lower layer propagate outward, as + * it is generally unrelated to the abstraction provided by the upper layer. + * Further, doing so would tie the API of the upper layer to the details of + * its implementation, assuming the lower layer's exception was a checked + * exception. Throwing a "wrapped exception" (i.e., an exception containing a + * cause) allows the upper layer to communicate the details of the failure to + * its caller without incurring either of these shortcomings. It preserves + * the flexibility to change the implementation of the upper layer without + * changing its API (in particular, the set of exceptions thrown by its + * methods). + * + *

A second reason that a throwable may have a cause is that the method + * that throws it must conform to a general-purpose interface that does not + * permit the method to throw the cause directly. For example, suppose + * a persistent collection conforms to the {@link java.util.Collection + * Collection} interface, and that its persistence is implemented atop + * java.io. Suppose the internals of the put method + * can throw an {@link java.io.IOException IOException}. The implementation + * can communicate the details of the IOException to its caller + * while conforming to the Collection interface by wrapping the + * IOException in an appropriate unchecked exception. (The + * specification for the persistent collection should indicate that it is + * capable of throwing such exceptions.) + * + *

A cause can be associated with a throwable in two ways: via a + * constructor that takes the cause as an argument, or via the + * {@link #initCause(Throwable)} method. New throwable classes that + * wish to allow causes to be associated with them should provide constructors + * that take a cause and delegate (perhaps indirectly) to one of the + * Throwable constructors that takes a cause. For example: + *

+ *     try {
+ *         lowLevelOp();
+ *     } catch (LowLevelException le) {
+ *         throw new HighLevelException(le);  // Chaining-aware constructor
+ *     }
+ * 
+ * Because the initCause method is public, it allows a cause to be + * associated with any throwable, even a "legacy throwable" whose + * implementation predates the addition of the exception chaining mechanism to + * Throwable. For example: + *
+ *     try {
+ *         lowLevelOp();
+ *     } catch (LowLevelException le) {
+ *         throw (HighLevelException)
+                 new HighLevelException().initCause(le);  // Legacy constructor
+ *     }
+ * 
+ * + *

Prior to release 1.4, there were many throwables that had their own + * non-standard exception chaining mechanisms ( + * {@link ExceptionInInitializerError}, {@link ClassNotFoundException}, + * {@link java.lang.reflect.UndeclaredThrowableException}, + * {@link java.lang.reflect.InvocationTargetException}, + * {@link java.io.WriteAbortedException}, + * {@link java.security.PrivilegedActionException}, + * {@link java.awt.print.PrinterIOException} and + * {@link java.rmi.RemoteException}). + * As of release 1.4, all of these throwables have been retrofitted to + * use the standard exception chaining mechanism, while continuing to + * implement their "legacy" chaining mechanisms for compatibility. + * + *

Further, as of release 1.4, many general purpose Throwable + * classes (for example {@link Exception}, {@link RuntimeException}, + * {@link Error}) have been retrofitted with constructors that take + * a cause. This was not strictly necessary, due to the existence of the + * initCause method, but it is more convenient and expressive to + * delegate to a constructor that takes a cause. + * + *

By convention, class Throwable and its subclasses have two + * constructors, one that takes no arguments and one that takes a + * String argument that can be used to produce a detail message. + * Further, those subclasses that might likely have a cause associated with + * them should have two more constructors, one that takes a + * Throwable (the cause), and one that takes a + * String (the detail message) and a Throwable (the + * cause). + * + *

Also introduced in release 1.4 is the {@link #getStackTrace()} method, + * which allows programmatic access to the stack trace information that was + * previously available only in text form, via the various forms of the + * {@link #printStackTrace()} method. This information has been added to the + * serialized representation of this class so getStackTrace + * and printStackTrace will operate properly on a throwable that + * was obtained by deserialization. + * + * @author unascribed + * @author Josh Bloch (Added exception chaining and programmatic access to + * stack trace in 1.4.) + * @version 1.51, 01/23/03 + * @since JDK1.0 + */ +public class Throwable implements Serializable { + /** use serialVersionUID from JDK 1.0.2 for interoperability */ + private static final long serialVersionUID = -3042686055658047285L; + + /** + * Native code saves some indication of the stack backtrace in this slot. + */ + //private transient Object backtrace; + + /** + * Specific details about the Throwable. For example, for + * FileNotFoundException, this contains the name of + * the file that could not be found. + * + * @serial + */ + private String detailMessage; + + /** + * The throwable that caused this throwable to get thrown, or null if this + * throwable was not caused by another throwable, or if the causative + * throwable is unknown. If this field is equal to this throwable itself, + * it indicates that the cause of this throwable has not yet been + * initialized. + * + * @serial + * @since 1.4 + */ + private Throwable cause = this; + + /** + * The stack trace, as returned by {@link #getStackTrace()}. + * + * @serial + * @since 1.4 + */ + private StackTraceElement[] stackTrace; + /* + * This field is lazily initialized on first use or serialization and + * nulled out when fillInStackTrace is called. + */ + + /** + * Constructs a new throwable with null as its detail message. + * The cause is not initialized, and may subsequently be initialized by a + * call to {@link #initCause}. + * + *

The {@link #fillInStackTrace()} method is called to initialize + * the stack trace data in the newly created throwable. + */ + public Throwable() { + fillInStackTrace(); + } + + /** + * Constructs a new throwable with the specified detail message. The + * cause is not initialized, and may subsequently be initialized by + * a call to {@link #initCause}. + * + *

The {@link #fillInStackTrace()} method is called to initialize + * the stack trace data in the newly created throwable. + * + * @param message the detail message. The detail message is saved for + * later retrieval by the {@link #getMessage()} method. + */ + public Throwable(String message) { + fillInStackTrace(); + detailMessage = message; + } + + /** + * Constructs a new throwable with the specified detail message and + * cause.

Note that the detail message associated with + * cause is not automatically incorporated in + * this throwable's detail message. + * + *

The {@link #fillInStackTrace()} method is called to initialize + * the stack trace data in the newly created throwable. + * + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A null value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + * @since 1.4 + */ + public Throwable(String message, Throwable cause) { + fillInStackTrace(); + detailMessage = message; + this.cause = cause; + } + + /** + * Constructs a new throwable with the specified cause and a detail + * message of (cause==null ? null : cause.toString()) (which + * typically contains the class and detail message of cause). + * This constructor is useful for throwables that are little more than + * wrappers for other throwables (for example, {@link + * java.security.PrivilegedActionException}). + * + *

The {@link #fillInStackTrace()} method is called to initialize + * the stack trace data in the newly created throwable. + * + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A null value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + * @since 1.4 + */ + public Throwable(Throwable cause) { + fillInStackTrace(); + detailMessage = (cause==null ? null : cause.toString()); + this.cause = cause; + } + + /** + * Returns the detail message string of this throwable. + * + * @return the detail message string of this Throwable instance + * (which may be null). + */ + public String getMessage() { + /** + * @j2sNative + * if (typeof this.message != "undefined") { + * return this.message; + * } + */{} + return detailMessage; + } + + /** + * Creates a localized description of this throwable. + * Subclasses may override this method in order to produce a + * locale-specific message. For subclasses that do not override this + * method, the default implementation returns the same result as + * getMessage(). + * + * @return The localized description of this throwable. + * @since JDK1.1 + */ + public String getLocalizedMessage() { + return getMessage(); + } + + /** + * Returns the cause of this throwable or null if the + * cause is nonexistent or unknown. (The cause is the throwable that + * caused this throwable to get thrown.) + * + *

This implementation returns the cause that was supplied via one of + * the constructors requiring a Throwable, or that was set after + * creation with the {@link #initCause(Throwable)} method. While it is + * typically unnecessary to override this method, a subclass can override + * it to return a cause set by some other means. This is appropriate for + * a "legacy chained throwable" that predates the addition of chained + * exceptions to Throwable. Note that it is not + * necessary to override any of the PrintStackTrace methods, + * all of which invoke the getCause method to determine the + * cause of a throwable. + * + * @return the cause of this throwable or null if the + * cause is nonexistent or unknown. + * @since 1.4 + */ + public Throwable getCause() { + return (cause==this ? null : cause); + } + + /** + * Initializes the cause of this throwable to the specified value. + * (The cause is the throwable that caused this throwable to get thrown.) + * + *

This method can be called at most once. It is generally called from + * within the constructor, or immediately after creating the + * throwable. If this throwable was created + * with {@link #Throwable(Throwable)} or + * {@link #Throwable(String,Throwable)}, this method cannot be called + * even once. + * + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A null value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + * @return a reference to this Throwable instance. + * @throws IllegalArgumentException if cause is this + * throwable. (A throwable cannot be its own cause.) + * @throws IllegalStateException if this throwable was + * created with {@link #Throwable(Throwable)} or + * {@link #Throwable(String,Throwable)}, or this method has already + * been called on this throwable. + * @since 1.4 + */ + public synchronized Throwable initCause(Throwable cause) { + if (this.cause != this) + throw new IllegalStateException("Can't overwrite cause"); + if (cause == this) + throw new IllegalArgumentException("Self-causation not permitted"); + this.cause = cause; + return this; + } + + /** + * Returns a short description of this throwable. + * If this Throwable object was created with a non-null detail + * message string, then the result is the concatenation of three strings: + *

    + *
  • The name of the actual class of this object + *
  • ": " (a colon and a space) + *
  • The result of the {@link #getMessage} method for this object + *
+ * If this Throwable object was created with a null + * detail message string, then the name of the actual class of this object + * is returned. + * + * @return a string representation of this throwable. + */ + public String toString() { + String s = getClass().getName(); + String message = getLocalizedMessage(); + return (message != null) ? (s + ": " + message) : s; + } + + /** + * Prints this throwable and its backtrace to the + * standard error stream. This method prints a stack trace for this + * Throwable object on the error output stream that is + * the value of the field System.err. The first line of + * output contains the result of the {@link #toString()} method for + * this object. Remaining lines represent data previously recorded by + * the method {@link #fillInStackTrace()}. The format of this + * information depends on the implementation, but the following + * example may be regarded as typical: + *
+     * java.lang.NullPointerException
+     *         at MyClass.mash(MyClass.java:9)
+     *         at MyClass.crunch(MyClass.java:6)
+     *         at MyClass.main(MyClass.java:3)
+     * 
+ * This example was produced by running the program: + *
+     * class MyClass {
+     *     public static void main(String[] args) {
+     *         crunch(null);
+     *     }
+     *     static void crunch(int[] a) {
+     *         mash(a);
+     *     }
+     *     static void mash(int[] b) {
+     *         System.out.println(b[0]);
+     *     }
+     * }
+     * 
+ * The backtrace for a throwable with an initialized, non-null cause + * should generally include the backtrace for the cause. The format + * of this information depends on the implementation, but the following + * example may be regarded as typical: + *
+     * HighLevelException: MidLevelException: LowLevelException
+     *         at Junk.a(Junk.java:13)
+     *         at Junk.main(Junk.java:4)
+     * Caused by: MidLevelException: LowLevelException
+     *         at Junk.c(Junk.java:23)
+     *         at Junk.b(Junk.java:17)
+     *         at Junk.a(Junk.java:11)
+     *         ... 1 more
+     * Caused by: LowLevelException
+     *         at Junk.e(Junk.java:30)
+     *         at Junk.d(Junk.java:27)
+     *         at Junk.c(Junk.java:21)
+     *         ... 3 more
+     * 
+ * Note the presence of lines containing the characters "...". + * These lines indicate that the remainder of the stack trace for this + * exception matches the indicated number of frames from the bottom of the + * stack trace of the exception that was caused by this exception (the + * "enclosing" exception). This shorthand can greatly reduce the length + * of the output in the common case where a wrapped exception is thrown + * from same method as the "causative exception" is caught. The above + * example was produced by running the program: + *
+     * public class Junk {
+     *     public static void main(String args[]) { 
+     *         try {
+     *             a();
+     *         } catch(HighLevelException e) {
+     *             e.printStackTrace();
+     *         }
+     *     }
+     *     static void a() throws HighLevelException {
+     *         try {
+     *             b();
+     *         } catch(MidLevelException e) {
+     *             throw new HighLevelException(e);
+     *         }
+     *     }
+     *     static void b() throws MidLevelException {
+     *         c();
+     *     }   
+     *     static void c() throws MidLevelException {
+     *         try {
+     *             d();
+     *         } catch(LowLevelException e) {
+     *             throw new MidLevelException(e);
+     *         }
+     *     }
+     *     static void d() throws LowLevelException { 
+     *        e();
+     *     }
+     *     static void e() throws LowLevelException {
+     *         throw new LowLevelException();
+     *     }
+     * }
+     *
+     * class HighLevelException extends Exception {
+     *     HighLevelException(Throwable cause) { super(cause); }
+     * }
+     *
+     * class MidLevelException extends Exception {
+     *     MidLevelException(Throwable cause)  { super(cause); }
+     * }
+     * 
+     * class LowLevelException extends Exception {
+     * }
+     * 
+ */ + public void printStackTrace() { + //printStackTrace(System.err); + System.err.println(this); + for (int i = 0; i < stackTrace.length; i++) + /** + * @j2sNative +var t = this.stackTrace[i]; +var x = t.methodName.indexOf ("("); +var n = t.methodName.substring (0, x).replace (/\s+/g, ""); +if (n != "construct" || t.nativeClazz == null + || Clazz.getInheritedLevel (t.nativeClazz, Throwable) < 0) { + System.err.println (t); +} + */ + { + System.err.println(stackTrace[i]); + } + } + + /** + * Prints this throwable and its backtrace to the specified print stream. + * + * @param s PrintStream to use for output + * @j2sNative + * this.printStackTrace (); + */ + public void printStackTrace(PrintStream s) { + synchronized (s) { + s.println(this); + StackTraceElement[] trace = getOurStackTrace(); + for (int i=0; i < trace.length; i++) + s.println("\tat " + trace[i]); + + Throwable ourCause = getCause(); + if (ourCause != null) + ourCause.printStackTraceAsCause(s, trace); + } + } + + /** + * Print our stack trace as a cause for the specified stack trace. + * @j2sIgnore + */ + private void printStackTraceAsCause(PrintStream s, + StackTraceElement[] causedTrace) + { + // assert Thread.holdsLock(s); + + // Compute number of frames in common between this and caused + StackTraceElement[] trace = getOurStackTrace(); + int m = trace.length-1, n = causedTrace.length-1; + while (m >= 0 && n >=0 && trace[m].equals(causedTrace[n])) { + m--; n--; + } + int framesInCommon = trace.length - 1 - m; + + s.println("Caused by: " + this); + for (int i=0; i <= m; i++) + s.println("\tat " + trace[i]); + if (framesInCommon != 0) + s.println("\t... " + framesInCommon + " more"); + + // Recurse if we have a cause + Throwable ourCause = getCause(); + if (ourCause != null) + ourCause.printStackTraceAsCause(s, trace); + } + + /** + * Prints this throwable and its backtrace to the specified + * print writer. + * + * @param s PrintWriter to use for output + * @since JDK1.1 + * @j2sNative + * this.printStackTrace (); + */ + public void printStackTrace(PrintWriter s) { + synchronized (s) { + s.println(this); + StackTraceElement[] trace = getOurStackTrace(); + for (int i=0; i < trace.length; i++) + s.println("\tat " + trace[i]); + + Throwable ourCause = getCause(); + if (ourCause != null) + ourCause.printStackTraceAsCause(s, trace); + } + } + + /** + * Print our stack trace as a cause for the specified stack trace. + * @j2sIgnore + */ + private void printStackTraceAsCause(PrintWriter s, + StackTraceElement[] causedTrace) + { + // assert Thread.holdsLock(s); + + // Compute number of frames in common between this and caused + StackTraceElement[] trace = getOurStackTrace(); + int m = trace.length-1, n = causedTrace.length-1; + while (m >= 0 && n >=0 && trace[m].equals(causedTrace[n])) { + m--; n--; + } + int framesInCommon = trace.length - 1 - m; + + s.println("Caused by: " + this); + for (int i=0; i <= m; i++) + s.println("\tat " + trace[i]); + if (framesInCommon != 0) + s.println("\t... " + framesInCommon + " more"); + + // Recurse if we have a cause + Throwable ourCause = getCause(); + if (ourCause != null) + ourCause.printStackTraceAsCause(s, trace); + } + + /** + * Fills in the execution stack trace. This method records within this + * Throwable object information about the current state of + * the stack frames for the current thread. + * + * @return a reference to this Throwable instance. + * @see java.lang.Throwable#printStackTrace() + * @j2sNative +this.stackTrace = new Array (); +var caller = arguments.callee.caller; +var superCaller = null; +var callerList = new Array (); +var index = Clazz.callingStackTraces.length - 1; +var noLooping = true; +while (index > -1 || caller != null) { + var clazzName = null; + var nativeClazz = null; + if (!noLooping || caller == Clazz.tryToSearchAndExecute || caller == Clazz.superCall || caller == null) { + if (index < 0) { + break; + } + noLooping = true; + superCaller = Clazz.callingStackTraces[index].caller; + nativeClazz = Clazz.callingStackTraces[index].owner; + index--; + } else { + superCaller = caller; + if (superCaller.claxxOwner != null) { + nativeClazz = superCaller.claxxOwner; + } else if (superCaller.exClazz != null) { + nativeClazz = superCaller.exClazz; + } + } + + var st = new StackTraceElement ( + ((nativeClazz != null && nativeClazz.__CLASS_NAME__.length != 0) ? + nativeClazz.__CLASS_NAME__ : "anonymous"), + ((superCaller.exName == null) ? "anonymous" : superCaller.exName) + + " (" + Clazz.getParamsType (superCaller.arguments) + ")", + null, -1); + st.nativeClazz = nativeClazz; + this.stackTrace[this.stackTrace.length] = st; + for (var i = 0; i < callerList.length; i++) { + if (callerList[i] == superCaller) { + // ... stack information lost as recursive invocation existed ... + var st = new StackTraceElement ("lost", "missing", null, -3); + st.nativeClazz = null; + this.stackTrace[this.stackTrace.length] = st; + + noLooping = false; + //break; + } + } + if (superCaller != null) { + callerList[callerList.length] = superCaller; + } + caller = superCaller.arguments.callee.caller; +} +Clazz.initializingException = false; +return this; + */ + public synchronized native Throwable fillInStackTrace(); + + /** + * Provides programmatic access to the stack trace information printed by + * {@link #printStackTrace()}. Returns an array of stack trace elements, + * each representing one stack frame. The zeroth element of the array + * (assuming the array's length is non-zero) represents the top of the + * stack, which is the last method invocation in the sequence. Typically, + * this is the point at which this throwable was created and thrown. + * The last element of the array (assuming the array's length is non-zero) + * represents the bottom of the stack, which is the first method invocation + * in the sequence. + * + *

Some virtual machines may, under some circumstances, omit one + * or more stack frames from the stack trace. In the extreme case, + * a virtual machine that has no stack trace information concerning + * this throwable is permitted to return a zero-length array from this + * method. Generally speaking, the array returned by this method will + * contain one element for every frame that would be printed by + * printStackTrace. + * + * @return an array of stack trace elements representing the stack trace + * pertaining to this throwable. + * @since 1.4 + * @j2sIgnore + */ + public StackTraceElement[] getStackTrace() { + return (StackTraceElement[]) getOurStackTrace().clone(); + } + + /** + * @return + * @j2sIgnore + */ + private synchronized StackTraceElement[] getOurStackTrace() { + // Initialize stack trace if this is the first call to this method + if (stackTrace == null) { + int depth = getStackTraceDepth(); + stackTrace = new StackTraceElement[depth]; + for (int i=0; i < depth; i++) + stackTrace[i] = getStackTraceElement(i); + } + return stackTrace; + } + + /** + * Sets the stack trace elements that will be returned by + * {@link #getStackTrace()} and printed by {@link #printStackTrace()} + * and related methods. + * + * This method, which is designed for use by RPC frameworks and other + * advanced systems, allows the client to override the default + * stack trace that is either generated by {@link #fillInStackTrace()} + * when a throwable is constructed or deserialized when a throwable is + * read from a serialization stream. + * + * @param stackTrace the stack trace elements to be associated with + * this Throwable. The specified array is copied by this + * call; changes in the specified array after the method invocation + * returns will have no affect on this Throwable's stack + * trace. + * + * @throws NullPointerException if stackTrace is + * null, or if any of the elements of + * stackTrace are null + * + * @since 1.4 + */ + public void setStackTrace(StackTraceElement[] stackTrace) { + StackTraceElement[] defensiveCopy = + (StackTraceElement[]) stackTrace.clone(); + for (int i = 0; i < defensiveCopy.length; i++) + if (defensiveCopy[i] == null) + throw new NullPointerException("stackTrace[" + i + "]"); + + this.stackTrace = defensiveCopy; + } + + /** + * Returns the number of elements in the stack trace (or 0 if the stack + * trace is unavailable). + */ + private native int getStackTraceDepth(); + + /** + * Returns the specified element of the stack trace. + * + * @param index index of the element to return. + * @throws IndexOutOfBoundsException if index %lt; 0 || + * index >= getStackTraceDepth() + */ + private native StackTraceElement getStackTraceElement(int index); + + /** + * @param s + * @throws IOException + * @j2sIgnore + */ + private synchronized void writeObject(java.io.ObjectOutputStream s) + throws IOException + { + getOurStackTrace(); // Ensure that stackTrace field is initialized. + s.defaultWriteObject(); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/TypeNotPresentException.java b/sources/net.sf.j2s.java.core/unused/lang/TypeNotPresentException.java new file mode 100644 index 000000000..626bde60b --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/TypeNotPresentException.java @@ -0,0 +1,58 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +/** + *

+ * Indicates that a class, interface, enum or annotation type cannot be found. + * This exception is an unchecked alternative to + * {@link java.lang.ClassNotFoundException}. + *

+ * + * @since 1.5 + * @author Nathan Beyer (Harmony) + */ +public class TypeNotPresentException extends RuntimeException { + private static final long serialVersionUID = -5101214195716534496L; + + private String typeName; + + /** + *

+ * Constructs an instance will a fully qualified type name and an optional + * cause. + *

+ * + * @param typeName The fully qualified type name. + * @param cause The Throwable that caused this exception or + * null. + */ + public TypeNotPresentException(String typeName, Throwable cause) { + super("Type " + typeName + " not present", cause); + this.typeName = typeName; + } + + /** + *

+ * The fully qualified type name. + *

+ * + * @return A String instance. + */ + public String typeName() { + return typeName; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/UnknownError.java b/sources/net.sf.j2s.java.core/unused/lang/UnknownError.java new file mode 100644 index 000000000..9af2bc049 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/UnknownError.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the virtual machine must throw an error which does + * not match any known exceptional condition. + */ +public class UnknownError extends VirtualMachineError { + + private static final long serialVersionUID = 2524784860676771849L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public UnknownError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public UnknownError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/UnsatisfiedLinkError.java b/sources/net.sf.j2s.java.core/unused/lang/UnsatisfiedLinkError.java new file mode 100644 index 000000000..c1cd626cb --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/UnsatisfiedLinkError.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when an attempt is made to invoke a native for which an + * implementation could not be found. + */ +public class UnsatisfiedLinkError extends LinkageError { + + private static final long serialVersionUID = -4019343241616879428L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public UnsatisfiedLinkError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public UnsatisfiedLinkError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/UnsupportedClassVersionError.java b/sources/net.sf.j2s.java.core/unused/lang/UnsupportedClassVersionError.java new file mode 100644 index 000000000..9a1487a11 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/UnsupportedClassVersionError.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when an attempt is made to load a class with a format + * version that is not supported by the VM. + */ +public class UnsupportedClassVersionError extends ClassFormatError { + + private static final long serialVersionUID = -7123279212883497373L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public UnsupportedClassVersionError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public UnsupportedClassVersionError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/UnsupportedOperationException.java b/sources/net.sf.j2s.java.core/unused/lang/UnsupportedOperationException.java new file mode 100644 index 000000000..add83fba9 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/UnsupportedOperationException.java @@ -0,0 +1,61 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This runtime exception is thrown when an unsupported operation is attempted. + */ +public class UnsupportedOperationException extends RuntimeException { + + private static final long serialVersionUID = -1242599979055084673L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public UnsupportedOperationException() { + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public UnsupportedOperationException(String detailMessage) { + super(detailMessage); + } + + /** + *

Constructs a new instance with a message and cause.

+ * @param message The message to assign to this exception. + * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public UnsupportedOperationException(String message, Throwable cause) { + super(message, cause); + } + + /** + *

Constructs a new instance with a cause.

+ * @param cause The optional cause of this exception; may be null. + * @since 1.5 + */ + public UnsupportedOperationException(Throwable cause) { + super((cause == null ? null : cause.toString()), cause); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/VerifyError.java b/sources/net.sf.j2s.java.core/unused/lang/VerifyError.java new file mode 100644 index 000000000..47be97a32 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/VerifyError.java @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This error is thrown when the VM notices that an attempt is made to load a + * class which does not pass the class verification phase. + */ +public class VerifyError extends LinkageError { + + private static final long serialVersionUID = 7001962396098498785L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public VerifyError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public VerifyError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/VirtualMachineError.java b/sources/net.sf.j2s.java.core/unused/lang/VirtualMachineError.java new file mode 100644 index 000000000..6603febfe --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/VirtualMachineError.java @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + + +/** + * This class is the superclass of all classes which represent errors that occur + * during the operation of the virtual machine. + * + * @see Error + */ +public abstract class VirtualMachineError extends Error { + + private static final long serialVersionUID = 4161983926571568670L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public VirtualMachineError() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public VirtualMachineError(String detailMessage) { + super(detailMessage); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/Void.java b/sources/net.sf.j2s.java.core/unused/lang/Void.java new file mode 100644 index 000000000..e7c8f5c78 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/Void.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang; + +import java.lang.reflect.Method; + +/** + * This class is a placeholder class for the Java keyword void + * @since 1.1 + */ +public final class Void extends Object { + + /** + * The {@link Class} instance that represents primitive type + * void. + */ + public static final Class TYPE = null; // lookupType(); + + // Note: This can't be set to "void.class", since *that* is + // defined to be "java.lang.Void.TYPE"; + + @SuppressWarnings("unchecked") + private static Class lookupType() { + Class voidType = null; + try { + Method method = Runnable.class.getMethod("run", new Class[0]); + voidType = method.getReturnType(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return (Class) voidType; + } + + private Void() { + } + + /** + * @j2sNative + * java.lang.Void.TYPE = java.lang.Void; + */ + static { } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/Annotation.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/Annotation.java new file mode 100644 index 000000000..cb1006563 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/Annotation.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * The interface implemented by all annotations. This interface is NOT an + * annotation itself and any interface that extends this one is NOT an + * annotation either. + *

+ * + * @since 1.5 + */ +public interface Annotation { + + /** + *

+ * Returns the type of this annotation. + *

+ * + * @return A Class instance. + */ + Class annotationType(); + + /** + *

+ * Determines whether or not this annotation is equivalent to the annotation + * passed. + *

+ * + * @param obj The object to compare to. + * @return true if obj is equal to this, + * otherwise false. + */ + boolean equals(Object obj); + + /** + *

+ * Returns the hash value of this annotation. + *

+ * + * @return The hash value. + */ + int hashCode(); + + /** + *

+ * Returns a String representation of this annotation. + *

+ * + * @return The String that represents this annotation. + */ + String toString(); +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/AnnotationFormatError.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/AnnotationFormatError.java new file mode 100644 index 000000000..865b62bd1 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/AnnotationFormatError.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * Indicates that an annotation in a class file is incorrectly formatted. + *

+ * + * @since 1.5 + */ +public class AnnotationFormatError extends Error { + + private static final long serialVersionUID = -4256701562333669892L; + + /** + *

+ * Constructs an instance with the message provided. + *

+ * + * @param message The details of the error. + */ + public AnnotationFormatError(String message) { + super(message); + } + + /** + *

+ * Constructs an instance with a message and a cause. + *

+ * + * @param message The details of the error. + * @param cause The cause of the error or null if none. + */ + public AnnotationFormatError(String message, Throwable cause) { + super(message, cause); + } + + /** + *

+ * Constructs an instance with a cause. If the cause is NOT + * null, then cause.toString() is used as the + * error's message. + *

+ * + * @param cause The cause of the error or null if none. + */ + public AnnotationFormatError(Throwable cause) { + super(cause == null ? null : cause.toString(), cause); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/AnnotationTypeMismatchException.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/AnnotationTypeMismatchException.java new file mode 100644 index 000000000..c0d8b3ab5 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/AnnotationTypeMismatchException.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +import java.lang.reflect.Method; + +import org.apache.harmony.luni.util.Msg; + +/** + *

+ * Indicates that an annotation type has changed since it was compiled or + * serialized. + *

+ * + * @since 1.5 + */ +public class AnnotationTypeMismatchException extends RuntimeException { + + private static final long serialVersionUID = 8125925355765570191L; + + private Method element; + + private String foundType; + + /** + *

+ * Constructs an instance for the given type element and the type found. + *

+ * + * @param element The annotation type element. + * @param foundType The invalid type that was found. + */ + public AnnotationTypeMismatchException(Method element, String foundType) { + super(Msg.getString("annotation.1", element, foundType)); //$NON-NLS-1$ + this.element = element; + this.foundType = foundType; + } + + /** + *

+ * The method object for the invalid type. + *

+ * + * @return A {@link Method} instance. + */ + public Method element() { + return element; + } + + /** + *

+ * The invalid type. + *

+ * + * @return A String describing the invalid data. + */ + public String foundType() { + return foundType; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/Documented.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/Documented.java new file mode 100644 index 000000000..3cc3943df --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/Documented.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * A meta-annotation used to indicate that a type's annotation are documented + * and part of the public API. + *

+ * + * @since 1.5 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Documented { +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/ElementType.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/ElementType.java new file mode 100644 index 000000000..bfca113fd --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/ElementType.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * An enumeration of element types. + *

+ * + * @since 1.5 + */ +public enum ElementType { + /** + *

+ * Class, interface or enum declaration. + *

+ */ + TYPE, + /** + *

+ * Field declaration. + *

+ */ + FIELD, + /** + *

+ * Method declaration. + *

+ */ + METHOD, + /** + *

+ * Parameter declaration. + *

+ */ + PARAMETER, + /** + *

+ * Constructor declaration. + *

+ */ + CONSTRUCTOR, + /** + *

+ * Local variable declaration. + *

+ */ + LOCAL_VARIABLE, + /** + *

+ * Annotation type declaration. + *

+ */ + ANNOTATION_TYPE, + /** + *

+ * Package declaration. + *

+ */ + PACKAGE +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/IncompleteAnnotationException.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/IncompleteAnnotationException.java new file mode 100644 index 000000000..d28568f6a --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/IncompleteAnnotationException.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +import org.apache.harmony.luni.util.Msg; + +/** + *

+ * Indicates that an element of an annotation type was accessed that was added + * after the type was compiled or serialized. This does not apply to new + * elements that have default values. + *

+ * + * @since 1.5 + */ +public class IncompleteAnnotationException extends RuntimeException { + + private static final long serialVersionUID = 8445097402741811912L; + + private Class annotationType; + + private String elementName; + + /** + *

+ * Constructs an instance with the incomplete annotation type and the name + * of the element that's missing. + *

+ * + * @param annotationType The annotation type. + * @param elementName The name of the incomplete element. + */ + public IncompleteAnnotationException( + Class annotationType, String elementName) { + super(Msg.getString("annotation.0", elementName, annotationType)); //$NON-NLS-1$ + this.annotationType = annotationType; + this.elementName = elementName; + } + + /** + *

+ * The annotation type. + *

+ * + * @return A Class instance. + */ + public Class annotationType() { + return annotationType; + } + + /** + *

+ * The incomplete element's name. + *

+ * + * @return The name of the element. + */ + public String elementName() { + return elementName; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/Inherited.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/Inherited.java new file mode 100644 index 000000000..4f476e339 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/Inherited.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * A meta-annotation used to indicate that an annotation is automatically + * inherited. + *

+ * + * @since 1.5 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Inherited { +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/Retention.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/Retention.java new file mode 100644 index 000000000..76dbdb355 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/Retention.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * A meta-annotation used to determine the scope of retention for an annotation. + * The default value is {@link RetentionPolicy#RUNTIME}. + *

+ * + * @since 1.5 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Retention { + RetentionPolicy value() default RetentionPolicy.CLASS; +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/RetentionPolicy.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/RetentionPolicy.java new file mode 100644 index 000000000..c12d3ec8b --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/RetentionPolicy.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * An enumeration for annotation retention policies. + *

+ * + * @since 1.5 + */ +public enum RetentionPolicy { + /** + *

+ * Annotation is only available in the source code. + *

+ */ + SOURCE, + /** + *

+ * Annotation is available in the source code and in the class file, but not + * at runtime. This is the default policy. + *

+ */ + CLASS, + /** + *

+ * Annotation is available in the source code, the class file and is + * available at runtime. + *

+ */ + RUNTIME +} diff --git a/sources/net.sf.j2s.java.core/unused/lang/annotation/Target.java b/sources/net.sf.j2s.java.core/unused/lang/annotation/Target.java new file mode 100644 index 000000000..ca137e4c5 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/lang/annotation/Target.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.annotation; + +/** + *

+ * A meta-annotation used to determine what {@link ElementType}s an annotation + * can be applied to. + *

+ * + * @since 1.5 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Target { + ElementType[] value(); +} diff --git a/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/ExternalMessages.properties b/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/ExternalMessages.properties new file mode 100644 index 000000000..69f542558 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/ExternalMessages.properties @@ -0,0 +1,311 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# External Messages for EN locale +K0006=Negative index specified +K0007=attempt to write after finish +K0008=Cannot read version +K0009=Missing version string\: {0} +K000a=Entry is not named +K000b=Invalid attribute {0} +K000c=cannot resolve subclasses +K000d=Unknown attribute +K000e=Cannot add attributes to empty string +K0014=Unquoted {0} in suffix\: {1} +K0015=Unexpected {0} in fraction\: {1} +K0016=Unexpected {0} in {1} +K0017=Missing pattern before {0} in {1} +K0018=Missing exponent format {0} +K0019=Unterminated quote {0} +K001a=Missing grouping format {0} +K001b=Invalid exponent format {0} +K001c=Invalid pattern char {0} in {1} +K001d=Invalid argument number +K001e=Missing element format +K001f=Unknown element format +K0020=Unknown format +K002b=Unknown pattern character - '{0}' +K002c=Access denied {0} +K002e=Offset out of bounds +K002f=Arguments out of bounds +K0032=Address null or destination port out of range +K0033=Unknown socket type +K0034=Packet address mismatch with connected address +K0035=Zero or negative buffer size +K0036=Invalid negative timeout +K0037=Connection already established +K0038=No host name provided +K0039=Attempted to join a non-multicast group +K003a=Attempted to leave a non-multicast group +K003c=TimeToLive out of bounds +K003d=Socket is closed +K003e=SOCKS connection failed\: {0} +K003f=Unable to connect to SOCKS server\: {0} +K0040=Invalid SOCKS client. +K0041=Socket implementation does not support SOCKS. +K0042=Socket implementation factory already set +K0044=The factory has already been set +K0045=Attempted to set a negative SoLinger +K0046=Local port declared out of range +K0047=buffer is null +K0048=Invalid action specified\: {0} +K0049=MinPort is greater than MaxPort +K004a=Invalid port number specified +K004b=Attempt to set factory more than once. +K004c=Package is sealed +K004d=Does not support writing to the input stream +K004e=Duplicate Factory +K004f=rounding necessary +K0050=wrong rounding mode +K0051=scale value < than zero +K0052=Array index out of range\: {0} +K0053=Package {0} already defined. +K0055=String index out of range\: {0} +K0056=Already destroyed +K0057=Has threads +K0058=size must be > 0 +K0059=Stream is closed +K005a=Mark has been invalidated. +K005b=BufferedReader is closed +K005c=Invalid Mark. +K005d=Writer is closed. +K005e=size must be >\= 0 +K005f=Does not support writing to the output stream +K0060=CharArrayReader is closed. +K0062=Second byte at {0} does not match UTF8 Specification +K0063=Third byte at {0} does not match UTF8 Specification +K0064=Second or third byte at {0} does not match UTF8 Specification +K0065=Input at {0} does not match UTF8 Specification +K0066=Entry already exists: {0} +K0068=String is too long +K0069=File cannot compare to non File +K006a=time must be positive +K006b=Prefix must be at least 3 characters +K006c=FileDescriptor is null +K006d=actions invalid +K006e=path is null +K006f=invalid permission\: {0} +K0070=InputStreamReader is closed. +K0071=Error fetching SUID\: {0} +K0072={0} computing SHA-1 / SUID +K0073=OutputStreamWriter is closed. +K0074=Not connected +K0075=InputStream is closed +K0076=Pipe broken +K0077=Crc mismatch +K0078=Pipe is closed +K0079=Already connected +K007a=Pipe already connected +K007b=Pipe Not Connected +K007e=Pushback buffer full +K007f=Mark/Reset not supported +K0080=Reader is closed +K0081=Mode must be one of "r" or "rw" +K0083=StringReader is closed. +K0084=can only instantiate one BootstrapClassLoader +K0086=Referenced reflect object is no longer valid +K0087=Referenced reflect object is no longer valid\: {0} +K0088=Incorrect end of BER tag +K0089=Unknown type\: {0} +K008a=Read {0} bytes trying to read {1} bytes from {2} +K008b=Position\: {0} +K008c=Invalid Base64 char\:{0} +K008d=This protocol does not support input +K008e=Does not support output +K008f=This method does not support writing\: {0} +K0090=can't open OutputStream after reading from an inputStream +K0091=Cannot access request header fields after connection is set +K0092=Cannot set method after connection is made +K0093=Too many redirects +K0094=Unable to change directories +K0095=Could not establish data connection +K0096=Unable to retrieve file\: {0} +K0097=Unable to connect to server\: {0} +K0098=Unable to log into server\: {0} +K0099=Unable to configure data port +K009a=Unable to store file +K009b=Unable to set transfer type +K00a2=Parsing policy file\: {0}, expected quoted {1}, found unquoted\: {2} +K00a3=Parsing policy file\: {0}, found unexpected\: {1} +K00a4=Content-Length underflow +K00a5=Invalid parameter - {0} +K00a8=Parsing policy file\: {0}, invalid codesource URL\: {1} +K00ab=No active entry +K00ae=Size mismatch +K00af=Invalid proxy port\: {0} +K00b0=Proxy port out of range +K00b1=Invalid port number +K00b2=Content-Length exceeded +K00b3=Unknown protocol\: {0} +K00b6=No entries +K00b7=File is closed +K00c1=Illegal character +K00cd=Failure to connect to SOCKS server. +K00ce=Unable to connect to identd to verify user. +K00cf=Failure - user ids do not match. +K00d0=Success +K00d1=Read null attempting to read class descriptor for an object +K00d2=Wrong format\: 0x{0} +K00d3=Read an exception +K00d4={2} - {0} not compatible with {1} +K00d5=Invalid typecode\: {0} +K00d7=Wrong base type in\: {0} +K00d8=Protocol not found\: {0} +K00d9=Callback object cannot be null +K00da=Incompatible class (SUID)\: {0} but expected {1} +K00dc=IllegalAccessException +K00e3=Could not create specified security manager\: {0} +K00e4=Key usage is critical and cannot be used for digital signature purposes. +K00e5=month\: {0} +K00e6=day of month\: {0} +K00e7=day of week\: {0} +K00e8=time\: {0} +K00e9=DST offset\: {0} +K00ea=era\: {0} +K00eb={0} failed verification of {1} +K00ec={0} has invalid digest for {1} in {2} +K00ed={0} is not an interface +K00ee={0} is not visible from class loader +K00ef={0} appears more than once +K00f0=non-public interfaces must be in the same package +K00f1=not a proxy instance +K00f2=the methods named {0} must have the same return type +K00f3=Timer was cancelled +K00f5=Illegal delay to start the TimerTask +K00f6=TimerTask is scheduled already +K00f7=TimerTask is cancelled +K00f8=day of week in month\: {0} +K00f9=min or max digit count too large +K00fa=min digits greater than max digits +K00fb=min or max digits negative +K00fc=Jar entry not specified +K00fd=Invalid keystore +K00fe=Incorrect password +K0185=The alias already exists for a key entry. +K018f=Can't convert to BMPString \: {0} +K0190=No data to decode +K0191=Invalid size, must be a multiple of 64 from 512 to 1024 +K0193=An identity with this name already exists in this scope +K0194=An identity in the scope has the same public key +K0195=The existing public key and the one contained in the certificate do not match. +K0196=Certificate is missing +K0199=Count out of range +K01a0=End of stream condition +K01a4=Already shutting down +K01a5=Illegal shutdown hook\: {0} +K01a6=Invalid filter +K01a7=Name too long: {0} +K01b3=Incorrect number of arguments +K01b4=Cannot convert {0} to {1} +K01b6=Cannot find \!/ +K01c1=File is a Directory +K01c2=Cannot create\: {0} +K01c3=Unable to open\: {0} +K01c4=Invalid zip file\: {0} +K01c6=No Main-Class specified in manifest\: {0} +K01d1=Signers of '{0}' do not match signers of other classes in package +K01d2={1} - protected system package '{0}' +K01ec=key size must be a multiple of 8 bits +K01ed=key size must be at least 512 bits +K01fe=Incomplete % sequence at\: {0} +K01ff=Invalid % sequence ({0}) at\: {1} +K0220=UTFDataFormatException +K0222=No Manifest found in jar file\: {0} +K0300=Unsupported encoding +K0301=Not signed data +K0302=Relative path +K0303=Scheme-specific part expected +K0304=Authority expected +K0305=Illegal character in scheme +K0306={0} in schemeSpecificPart +K0307={0} in authority +K0308={0} in path +K0309={0} in query +K030a={0} in fragment +K030c=Expected host +K030d=Illegal character in userinfo +K030e=Expected a closing square bracket for ipv6 address +K030f=Malformed ipv6 address +K0310=Illegal character in host name +K0311=Malformed ipv4 address +K0312=URI is not absolute +K0313=Incomplete % sequence +K0314=Invalid % sequence ({0}) +K0315=Socket is already bound +K0316=SocketAddress {0} not supported +K0317=Host is unresolved\: {0} +K0318=SocketAddress is null +K0319=Exception in thread "{0}"\ +K031a=URI is not absolute\: {0} +K031b=URI is not hierarchical\: {0} +K031c=Expected file scheme in URI\: {0} +K031d=Expected non-empty path in URI\: {0} +K031e=Found {0} component in URI\: {1} +K031f=Socket is not bound +K0320=Socket is not connected +K0321=Socket input is shutdown +K0322=Not a supported ISO 4217 Currency Code\: {0} +K0323=Not a supported ISO 3166 Country locale\: {0} +K0324=Needs dictionary +K0325=Port out of range\: {0} +K0326={0} at index {1}\: {2} +K0327={0}\: {1} +K0328=Certificate not yet valid +K0329=Certificate expired +K0330=interface name is null +K0331=address is null +K0332=Invalid IP Address is neither 4 or 16 bytes\: {0} +K0333=Urgent data not supported +K0334=Cannot set network interface with null +K0335=No addresses associated with Interface +K0337=null type not allowed +K0338=Address not associated with an interface - not set +K0339=Invalid IP Address is neither 4 or 16 bytes +K0340={0} incompatible with {1} +K0342=Scheme expected +K0344=Not a valid {0}, subclass should override readResolve() +K0346=Unmatched braces in the pattern +K0347=seek position is negative +K0348=Format specifier '{0}' +K0349=Conversion is '{0}' +K034a=The flags are {0} +K034b=url and proxy can not be null +K034c=proxy should not be null +K034d=method has not been implemented yet +K034e=Build rules empty +K0351=format is null +KA000=Line too long +KA001=Argument must not be null +KA002=Unshared read of back reference +KA003=different mode already set +KA004=Enums may not be cloned +KA005={0} is not an enum type +KA006={0} is not a constant in the enum type {1} +KA007=field is null +KA008={0} is an illegal radix +KA009=CharsetName is illegal +KA00a=File is null +KA00b=InputStream is null +KA00c=Readable is null +KA00d=ReadableByteChannel is null +KA00e=Radix {0} is less than Character.MIN_RADIX or greater than Character.MAX_RADIX +KA00f=Socket output is shutdown +KA010=Cannot read back reference to unshared object +KA011=Malformed reply from SOCKS server +KA012=No such file or directory +KA013=Number of bytes to skip cannot be negative +KA014=Invalit UUID string +KA015=Incompatible class (base name)\: {0} but expected {1} + diff --git a/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/Msg.java b/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/Msg.java new file mode 100644 index 000000000..787980909 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/Msg.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.harmony.luni.util; + + +import java.util.Locale; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +import org.apache.harmony.luni.util.MsgHelp; + +/** + * This class retrieves strings from a resource bundle and returns them, + * formatting them with MessageFormat when required. + *

+ * It is used by the system classes to provide national language support, by + * looking up messages in the + * org.apache.harmony.luni.util.ExternalMessages + * + * resource bundle. Note that if this file is not available, or an invalid key + * is looked up, or resource bundle support is not available, the key itself + * will be returned as the associated message. This means that the KEY + * should a reasonable human-readable (english) string. + * + * @j2sRequireImport org.apache.harmony.luni.util.MsgHelp,java.util.Locale + */ +public class Msg { + + // ResourceBundle holding the system messages. + static private ResourceBundle bundle = null; + + /** + * @j2sIgnore + */ + static { + // Attempt to load the messages. + /* + * TODO: Packing *.properties.js together! + */ + try { + bundle = MsgHelp.setLocale(Locale.getDefault(), + "org.apache.harmony.luni.util.ExternalMessages"); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + /** + * Retrieves a message which has no arguments. + * + * @param msg + * String the key to look up. + * @return String the message for that key in the system message bundle. + */ + static public String getString(String msg) { + if (bundle == null) + return msg; + try { + return bundle.getString(msg); + } catch (MissingResourceException e) { + return msg; + } + } + + /** + * Retrieves a message which takes 1 argument. + * + * @param msg + * String the key to look up. + * @param arg + * Object the object to insert in the formatted output. + * @return String the message for that key in the system message bundle. + */ + static public String getString(String msg, Object arg) { + return getString(msg, new Object[] { arg }); + } + + /** + * Retrieves a message which takes 1 integer argument. + * + * @param msg + * String the key to look up. + * @param arg + * int the integer to insert in the formatted output. + * @return String the message for that key in the system message bundle. + */ + static public String getString(String msg, int arg) { + return getString(msg, new Object[] { Integer.toString(arg) }); + } + + /** + * Retrieves a message which takes 1 character argument. + * + * @param msg + * String the key to look up. + * @param arg + * char the character to insert in the formatted output. + * @return String the message for that key in the system message bundle. + */ + static public String getString(String msg, char arg) { + return getString(msg, new Object[] { String.valueOf(arg) }); + } + + /** + * Retrieves a message which takes 2 arguments. + * + * @param msg + * String the key to look up. + * @param arg1 + * Object an object to insert in the formatted output. + * @param arg2 + * Object another object to insert in the formatted output. + * @return String the message for that key in the system message bundle. + */ + static public String getString(String msg, Object arg1, Object arg2) { + return getString(msg, new Object[] { arg1, arg2 }); + } + + /** + * Retrieves a message which takes several arguments. + * + * @param msg + * String the key to look up. + * @param args + * Object[] the objects to insert in the formatted output. + * @return String the message for that key in the system message bundle. + */ + static public String getString(String msg, Object[] args) { + String format = msg; + + if (bundle != null) { + try { + format = bundle.getString(msg); + } catch (MissingResourceException e) { + } + } + + return MsgHelp.format(format, args); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/MsgHelp.java b/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/MsgHelp.java new file mode 100644 index 000000000..707956224 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/org/apache/harmony/luni/util/MsgHelp.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.harmony.luni.util; + + +import java.util.Locale; +import java.util.ResourceBundle; + +/** + * This class contains helper methods for loading resource bundles and + * formatting external message strings. + * + * @j2sRequireImport java.util.ResourceBundle + */ + +public final class MsgHelp { + + /** + * Generates a formatted text string given a source string containing + * "argument markers" of the form "{argNum}" where each argNum must be in + * the range 0..9. The result is generated by inserting the toString of each + * argument into the position indicated in the string. + *

+ * To insert the "{" character into the output, use a single backslash + * character to escape it (i.e. "\{"). The "}" character does not need to be + * escaped. + * + * @param format + * String the format to use when printing. + * @param args + * Object[] the arguments to use. + * @return String the formatted message. + */ + public static String format(String format, Object[] args) { + StringBuilder answer = new StringBuilder(format.length() + + (args.length * 20)); + String[] argStrings = new String[args.length]; + for (int i = 0; i < args.length; ++i) { + if (args[i] == null) + argStrings[i] = ""; + else + argStrings[i] = args[i].toString(); + } + int lastI = 0; + for (int i = format.indexOf('{', 0); i >= 0; i = format.indexOf('{', + lastI)) { + if (i != 0 && format.charAt(i - 1) == '\\') { + // It's escaped, just print and loop. + if (i != 1) + answer.append(format.substring(lastI, i - 1)); + answer.append('{'); + lastI = i + 1; + } else { + // It's a format character. + if (i > format.length() - 3) { + // Bad format, just print and loop. + answer.append(format.substring(lastI, format.length())); + lastI = format.length(); + } else { +// int argnum = (byte) Character.digit(format.charAt(i + 1), +// 10); + int argnum = (byte) (format.charAt(i + 1) - '0'); + if (argnum < 0 || format.charAt(i + 2) != '}') { + // Bad format, just print and loop. + answer.append(format.substring(lastI, i + 1)); + lastI = i + 1; + } else { + // Got a good one! + answer.append(format.substring(lastI, i)); + if (argnum >= argStrings.length) + answer.append(""); + else + answer.append(argStrings[argnum]); + lastI = i + 3; + } + } + } + } + if (lastI < format.length()) + answer.append(format.substring(lastI, format.length())); + return answer.toString(); + } + + /** + * Changes the locale of the messages. + * + * @param locale + * Locale the locale to change to. + */ + static public ResourceBundle setLocale(final Locale locale, + final String resource) { + /* + try { + final ClassLoader loader = VM.bootCallerClassLoader(); + return (ResourceBundle) AccessController + .doPrivileged(new PrivilegedAction() { + public Object run() { + return ResourceBundle.getBundle(resource, locale, + loader != null ? loader : ClassLoader.getSystemClassLoader()); + } + }); + } catch (MissingResourceException e) { + } + */ + return ResourceBundle.getBundle(resource); + //return null; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/AccessibleObject.java b/sources/net.sf.j2s.java.core/unused/reflect/AccessibleObject.java new file mode 100644 index 000000000..df3136877 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/AccessibleObject.java @@ -0,0 +1,165 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +import java.lang.annotation.Annotation; + +/** + * This class must be implemented by the VM vendor. This class is the superclass + * of all member reflect classes (Field, Constructor, Method). AccessibleObject + * provides the ability to toggle access checks for these objects. By default + * accessing a member (for example, setting a field or invoking a method) checks + * the validity of the access (for example, invoking a private method from + * outside the defining class is prohibited) and throws IllegalAccessException + * if the operation is not permitted. If the accessible flag is set to true, + * these checks are omitted. This allows privileged applications such as Java + * Object Serialization, inspectors, and debuggers to have complete access to + * objects. + * + * @see Field + * @see Constructor + * @see Method + * @see ReflectPermission + * @since 1.2 + */ +public class AccessibleObject implements AnnotatedElement { + static final Object[] emptyArgs = new Object[0]; + + /** + * AccessibleObject constructor. AccessibleObjects can only be created by + * the Virtual Machine. + */ + protected AccessibleObject() { + super(); + } + + /** + * Returns the value of the accessible flag. This is false if access checks + * are performed, true if they are skipped. + * + * @return the value of the accessible flag + */ + public boolean isAccessible() { + return false; + } + + /** + * Attempts to set the value of the accessible flag for all the objects in + * the array provided. Only one security check is performed. Setting this + * flag to false will enable access checks, setting to true will disable + * them. If there is a security manager, checkPermission is called with a + * ReflectPermission("suppressAccessChecks"). + * + * @param objects + * the accessible objects + * @param flag + * the new value for the accessible flag + * @see #setAccessible(boolean) + * @see ReflectPermission + * @throws SecurityException + * if the request is denied + */ + public static void setAccessible(AccessibleObject[] objects, boolean flag) + throws SecurityException { + return; + } + + /** + * Attempts to set the value of the accessible flag. Setting this flag to + * false will enable access checks, setting to true will disable them. If + * there is a security manager, checkPermission is called with a + * ReflectPermission("suppressAccessChecks"). + * + * @param flag + * the new value for the accessible flag + * @see ReflectPermission + * @throws SecurityException + * if the request is denied + */ + public void setAccessible(boolean flag) throws SecurityException { + return; + } + + public boolean isAnnotationPresent(Class annotationType) { + return false; + } + + public Annotation[] getDeclaredAnnotations() { + return new Annotation[0]; + } + + public Annotation[] getAnnotations() { + return new Annotation[0]; + } + + public T getAnnotation(Class annotationType) { + return null; + } + + static Object[] marshallArguments(Class[] parameterTypes, Object[] args) + throws IllegalArgumentException { + return null; + } + + void invokeV(Object receiver, Object args[]) + throws InvocationTargetException { + return; + } + + Object invokeL(Object receiver, Object args[]) + throws InvocationTargetException { + return null; + } + + int invokeI(Object receiver, Object args[]) + throws InvocationTargetException { + return 0; + } + + long invokeJ(Object receiver, Object args[]) + throws InvocationTargetException { + return 0L; + } + + float invokeF(Object receiver, Object args[]) + throws InvocationTargetException { + return 0.0F; + } + + double invokeD(Object receiver, Object args[]) + throws InvocationTargetException { + return 0.0D; + } + + native Class[] getParameterTypesImpl(); + + native int getModifiers(); + + native Class[] getExceptionTypesImpl(); + + native String getSignature(); + + native boolean checkAccessibility(Class senderClass, Object receiver); + + static native void initializeClass(Class clazz); + + /** + * Answer the class at depth. Notes: 1) This method operates on the defining + * classes of methods on stack. NOT the classes of receivers. 2) The item at + * index zero describes the caller of this method. + */ + static final native Class getStackClass(int depth); +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/AnnotatedElement.java b/sources/net.sf.j2s.java.core/unused/reflect/AnnotatedElement.java new file mode 100644 index 000000000..1b3af07dd --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/AnnotatedElement.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +import java.lang.annotation.Annotation; + +/** + *

+ * An interface implemented an annotated element to enable reflective access to + * annotation information. + *

+ * + * @since 1.5 + */ +public interface AnnotatedElement { + + /** + *

+ * Gets the {@link Annotation} for this element for the annotation type + * passed, if it exists. + *

+ * + * @param annotationType The Class instance of the annotation to search for. + * @return The {@link Annotation} for this element or null. + * @throws NullPointerException if annotationType is + * null. + */ + T getAnnotation(Class annotationType); + + /** + *

+ * Gets all {@link Annotation}s for this element. + *

+ * + * @return An array of {@link Annotation}s, which may be empty, but never + * null. + */ + Annotation[] getAnnotations(); + + /** + *

+ * Gets all {@link Annotation}s that are explicitly declared by this + * element (not inherited). + *

+ * + * @return An array of {@link Annotation}s, which may be empty, but never + * null. + */ + Annotation[] getDeclaredAnnotations(); + + /** + *

+ * Determines if this element has an annotation for the annotation type + * passed. + *

+ * + * @param annotationType The class instance of the annotation to search for. + * @return true if the annotation exists, otherwise + * false. + * @throws NullPointerException if annotationType is + * null. + */ + boolean isAnnotationPresent(Class annotationType); +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/Array.java b/sources/net.sf.j2s.java.core/unused/reflect/Array.java new file mode 100644 index 000000000..0ce186005 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/Array.java @@ -0,0 +1,490 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +/** + * This class must be implemented by the vm vendor. This class provides methods + * to dynamically create and access arrays. + * + * @j2sPrefix + * Array.getComponentType = function () { + * return Object; + * }; + */ +public final class Array { + + /** + * Return the element of the array at the specified index. This reproduces + * the effect of array[index] If the array component is a + * base type, the result is automatically wrapped. + * + * @param array + * the array + * @param index + * the index + * @return the requested element, possibly wrapped + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native Object get(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the element of the array at the specified index, converted to a + * boolean if possible. This reproduces the effect of + * array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native boolean getBoolean(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the element of the array at the specified index, converted to a + * byte if possible. This reproduces the effect of array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native byte getByte(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the element of the array at the specified index, converted to a + * char if possible. This reproduces the effect of array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native char getChar(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the element of the array at the specified index, converted to a + * double if possible. This reproduces the effect of + * array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native double getDouble(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the element of the array at the specified index, converted to a + * float if possible. This reproduces the effect of + * array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native float getFloat(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the element of the array at the specified index, converted to an + * int if possible. This reproduces the effect of array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native int getInt(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the length of the array. This reproduces the effect of + * array.length + * + * @param array + * the array + * @return the length + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array + */ + public static native int getLength(Object array) + throws IllegalArgumentException; + + /** + * Return the element of the array at the specified index, converted to a + * long if possible. This reproduces the effect of array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native long getLong(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Return the element of the array at the specified index, converted to a + * short if possible. This reproduces the effect of + * array[index] + * + * @param array + * the array + * @param index + * the index + * @return the requested element + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the element cannot be + * converted to the requested type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native short getShort(Object array, int index) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + private static native Object multiNewArrayImpl(Class componentType, + int dimensions, int[] dimensionsArray); + + private static native Object newArrayImpl(Class componentType, int dimension); + + /** + * Return a new multidimensional array of the specified component type and + * dimensions. This reproduces the effect of + * new componentType[d0][d1]...[dn] for a dimensions array of { + * d0, d1, ... , dn } + * + * @param componentType + * the component type of the new array + * @param dimensions + * the dimensions of the new array + * @return the new array + * @exception java.lang.NullPointerException + * if the component type is null + * @exception java.lang.NegativeArraySizeException + * if any of the dimensions are negative + * @exception java.lang.IllegalArgumentException + * if the array of dimensions is of size zero, or exceeds the + * limit of the number of dimension for an array (currently + * 255) + * + * @j2sIgnore + */ + public static Object newInstance(Class componentType, int[] dimensions) + throws NegativeArraySizeException, IllegalArgumentException { + return null; + } + + /** + * Return a new array of the specified component type and length. This + * reproduces the effect of new componentType[size] + * + * @param componentType + * the component type of the new array + * @param size + * the length of the new array + * @return the new array + * @exception java.lang.NullPointerException + * if the component type is null + * @exception java.lang.NegativeArraySizeException + * if the size if negative + * + * @j2sNative + * return Clazz.newArray (length); + */ + public static Object newInstance(Class componentType, int size) + throws NegativeArraySizeException { + return null; + } + + /** + * Set the element of the array at the specified index to the value. This + * reproduces the effect of array[index] = value If the array + * component is a base type, the value is automatically unwrapped + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void set(Object array, int index, Object value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the boolean value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setBoolean(Object array, int index, boolean value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the byte value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setByte(Object array, int index, byte value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the char value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setChar(Object array, int index, char value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the double value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setDouble(Object array, int index, double value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the float value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setFloat(Object array, int index, float value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the int value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setInt(Object array, int index, int value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the long value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setLong(Object array, int index, long value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + + /** + * Set the element of the array at the specified index to the short value. + * This reproduces the effect of array[index] = value + * + * @param array + * the array + * @param index + * the index + * @param value + * the new value + * @exception java.lang.NullPointerException + * if the array is null + * @exception java.lang.IllegalArgumentException + * if the array is not an array or the value cannot be + * converted to the array type by a widening conversion + * @exception java.lang.ArrayIndexOutOfBoundsException + * if the index is out of bounds -- negative or greater than + * or equal to the array length + */ + public static native void setShort(Object array, int index, short value) + throws IllegalArgumentException, ArrayIndexOutOfBoundsException; + +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/Constructor.java b/sources/net.sf.j2s.java.core/unused/reflect/Constructor.java new file mode 100644 index 000000000..9f12d4060 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/Constructor.java @@ -0,0 +1,299 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +import java.lang.annotation.Annotation; + +/** + * This class must be implemented by the VM vendor. This class models a + * constructor. Information about the constructor can be accessed, and the + * constructor can be invoked dynamically. + * + * @j2sRequireImport java.lang.Void + */ +public final class Constructor extends AccessibleObject implements GenericDeclaration, Member { + + private Class clazz; + private Class[] parameterTypes; + private Class[] exceptionTypes; + private int modifiers; + + /** + * Package-private constructor used by ReflectAccess to enable + * instantiation of these objects in Java code from the java.lang + * package via sun.reflect.LangReflectAccess. + */ + Constructor(Class declaringClass, + Class[] parameterTypes, + Class[] checkedExceptions, + int modifiers) + { + this.clazz = declaringClass; + this.parameterTypes = parameterTypes; + this.exceptionTypes = checkedExceptions; + this.modifiers = modifiers; + } + + public TypeVariable>[] getTypeParameters() { + return null; + } + + /** + *

+ * Returns the String representation of the constructor's declaration, + * including the type parameters. + *

+ * + * @return An instance of String. + * @since 1.5 + */ + public String toGenericString() { + return null; + } + + /** + *

+ * Gets the parameter types as an array of {@link Type} instances, in + * declaration order. If the constructor has no parameters, then an empty + * array is returned. + *

+ * + * @return An array of {@link Type} instances. + * @throws GenericSignatureFormatError if the generic method signature is + * invalid. + * @throws TypeNotPresentException if the component type points to a missing + * type. + * @throws MalformedParameterizedTypeException if the component type points + * to a type that can't be instantiated for some reason. + * @since 1.5 + */ + public Type[] getGenericParameterTypes() { + return null; + } + + /** + *

+ * Gets the exception types as an array of {@link Type} instances. If the + * constructor has no declared exceptions, then an empty array is returned. + *

+ * + * @return An array of {@link Type} instances. + * @throws GenericSignatureFormatError if the generic method signature is + * invalid. + * @throws TypeNotPresentException if the component type points to a missing + * type. + * @throws MalformedParameterizedTypeException if the component type points + * to a type that can't be instantiated for some reason. + * @since 1.5 + */ + public Type[] getGenericExceptionTypes() { + return null; + } + + /** + *

+ * Gets an array of arrays that represent the annotations of the formal + * parameters of this constructor. If there are no parameters on this + * constructor, then an empty array is returned. If there are no annotations + * set, then and array of empty arrays is returned. + *

+ * + * @return An array of arrays of {@link Annotation} instances. + * @since 1.5 + */ + public Annotation[][] getParameterAnnotations() { + return null; + } + + /** + *

+ * Indicates whether or not this constructor takes a variable number + * argument. + *

+ * + * @return A value of true if a vararg is declare, otherwise + * false. + * @since 1.5 + */ + public boolean isVarArgs() { + return false; + } + + public boolean isSynthetic() { + return false; + } + + /** + * Compares the specified object to this Constructor and answer if they are + * equal. The object must be an instance of Constructor with the same + * defining class and parameter types. + * + * @param object the object to compare + * @return true if the specified object is equal to this Constructor, false + * otherwise + * @see #hashCode + */ + public boolean equals(Object object) { + if (object != null && object instanceof Constructor) { + Constructor other = (Constructor)object; + if (getDeclaringClass() == other.getDeclaringClass()) { + /* Avoid unnecessary cloning */ + Class[] params1 = parameterTypes; + Class[] params2 = other.parameterTypes; + if (params1.length == params2.length) { + for (int i = 0; i < params1.length; i++) { + if (params1[i] != params2[i]) + return false; + } + return true; + } + } + } + return false; + } + + /** + * Return the {@link Class} associated with the class that defined this + * constructor. + * + * @return the declaring class + */ + public Class getDeclaringClass() { + return clazz; + } + + /** + * Return an array of the {@link Class} objects associated with the + * exceptions declared to be thrown by this constructor. If the constructor + * was not declared to throw any exceptions, the array returned will be + * empty. + * + * @return the declared exception classes + */ + public Class[] getExceptionTypes() { + return exceptionTypes; + } + + /** + * Return the modifiers for the modelled constructor. The Modifier class + * should be used to decode the result. + * + * @return the modifiers + * @see java.lang.reflect.Modifier + */ + public int getModifiers() { + return modifiers; + } + + /** + * Return the name of the modelled constructor. This is the name of the + * declaring class. + * + * @return the name + */ + public String getName() { + return getDeclaringClass().getName(); + } + + /** + * Return an array of the {@link Class} objects associated with the + * parameter types of this constructor. If the constructor was declared with + * no parameters, the array returned will be empty. + * + * @return the parameter types + */ + public Class[] getParameterTypes() { + return parameterTypes; + } + + /** + * Answers an integer hash code for the receiver. Objects which are equal + * answer the same value for this method. The hash code for a Constructor is + * the hash code of the declaring class' name. + * + * @return the receiver's hash + * @see #equals + */ + public int hashCode() { + return getDeclaringClass().getName().hashCode(); + } + + /** + * Return a new instance of the declaring class, initialized by dynamically + * invoking the modelled constructor. This reproduces the effect of + * new declaringClass(arg1, arg2, ... , argN) This method + * performs the following: + *
    + *
  • A new instance of the declaring class is created. If the declaring + * class cannot be instantiated (i.e. abstract class, an interface, an array + * type, or a base type) then an InstantiationException is thrown.
  • + *
  • If this Constructor object is enforcing access control (see + * AccessibleObject) and the modelled constructor is not accessible from the + * current context, an IllegalAccessException is thrown.
  • + *
  • If the number of arguments passed and the number of parameters do + * not match, an IllegalArgumentException is thrown.
  • + *
  • For each argument passed: + *
      + *
    • If the corresponding parameter type is a base type, the argument is + * unwrapped. If the unwrapping fails, an IllegalArgumentException is + * thrown.
    • + *
    • If the resulting argument cannot be converted to the parameter type + * via a widening conversion, an IllegalArgumentException is thrown.
    • + *
    + *
  • The modelled constructor is then invoked. If an exception is thrown + * during the invocation, it is caught and wrapped in an + * InvocationTargetException. This exception is then thrown. If the + * invocation completes normally, the newly initialized object is returned. + *
+ * + * @param args + * the arguments to the constructor + * @return the new, initialized, object + * @exception java.lang.InstantiationException + * if the class cannot be instantiated + * @exception java.lang.IllegalAccessException + * if the modelled constructor is not accessible + * @exception java.lang.IllegalArgumentException + * if an incorrect number of arguments are passed, or an + * argument could not be converted by a widening conversion + * @exception java.lang.reflect.InvocationTargetException + * if an exception was thrown by the invoked constructor + * @see java.lang.reflect.AccessibleObject + * + * @j2sNative + * var instance = new this.clazz (Clazz.inheritArgs); + * Clazz.instantialize (instance, args); + * return instance; + */ + public T newInstance(Object... args) throws InstantiationException, + IllegalAccessException, IllegalArgumentException, + InvocationTargetException { + return null; + } + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. The format of the string is modifiers (if any) declaring class + * name '(' parameter types, separated by ',' ')' If the constructor throws + * exceptions, ' throws ' exception types, separated by ',' For example: + * public String(byte[],String) throws UnsupportedEncodingException + * + * @return a printable representation for the receiver + */ + public String toString() { + return null; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/Field.java b/sources/net.sf.j2s.java.core/unused/reflect/Field.java new file mode 100644 index 000000000..bc1da0901 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/Field.java @@ -0,0 +1,671 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +/** + * This class must be implemented by the VM vendor. This class models a field. + * Information about the field can be accessed, and the field's value can be + * accessed dynamically. + * + */ +public final class Field extends AccessibleObject implements Member { + + public boolean isSynthetic() { + return false; + } + + /** + *

+ * Returns the String representation of the field's declaration, including + * the type parameters. + *

+ * + * @return An instance of String. + * @since 1.5 + */ + public String toGenericString() { + return null; + } + + /** + *

+ * Indicates whether or not this field is an enumeration constant. + *

+ * + * @return A value of true if this field is an enumeration + * constant, otherwise false. + * @since 1.5 + */ + public boolean isEnumConstant() { + return false; + } + + /** + *

+ * Gets the declared type of this field. + *

+ * + * @return An instance of {@link Type}. + * @throws GenericSignatureFormatError if the generic method signature is + * invalid. + * @throws TypeNotPresentException if the component type points to a missing + * type. + * @throws MalformedParameterizedTypeException if the component type points + * to a type that can't be instantiated for some reason. + * @since 1.5 + */ + public Type getGenericType() { + return null; + } + + /** + * Compares the specified object to this Field and answer if they are equal. + * The object must be an instance of Field with the same defining class and + * name. + * + * @param object the object to compare + * @return true if the specified object is equal to this Field, false + * otherwise + * @see #hashCode + */ + public boolean equals(Object object) { + return false; + } + + /** + * Return the value of the field in the specified object. This reproduces + * the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * The value of the field is returned. If the type of this field is a base + * type, the field value is automatically wrapped. + * + * @param object + * the object to access + * @return the field value, possibly wrapped + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native Object get(Object object) throws IllegalAccessException, + IllegalArgumentException; + + /** + * Return the value of the field in the specified object as a boolean. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native boolean getBoolean(Object object) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Return the value of the field in the specified object as a byte. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native byte getByte(Object object) throws IllegalAccessException, + IllegalArgumentException; + + /** + * Return the value of the field in the specified object as a char. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native char getChar(Object object) throws IllegalAccessException, + IllegalArgumentException; + + /** + * Return the {@link Class} associated with the class that defined this + * field. + * + * @return the declaring class + */ + public Class getDeclaringClass() { + return null; + } + + /** + * Return the value of the field in the specified object as a double. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native double getDouble(Object object) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Return the value of the field in the specified object as a float. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native float getFloat(Object object) throws IllegalAccessException, + IllegalArgumentException; + + /** + * Return the value of the field in the specified object as an int. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native int getInt(Object object) throws IllegalAccessException, + IllegalArgumentException; + + /** + * Return the value of the field in the specified object as a long. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native long getLong(Object object) throws IllegalAccessException, + IllegalArgumentException; + + /** + * Return the modifiers for the modelled field. The Modifier class should be + * used to decode the result. + * + * @return the modifiers + * @see java.lang.reflect.Modifier + */ + public native int getModifiers(); + + /** + * Return the name of the modelled field. + * + * @return the name + */ + public String getName() { + return null; + } + + /** + * Return the value of the field in the specified object as a short. This + * reproduces the effect of object.fieldName + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * + * @param object + * the object to access + * @return the field value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native short getShort(Object object) throws IllegalAccessException, + IllegalArgumentException; + + native String getSignature(); + + /** + * Return the {@link Class} associated with the type of this field. + * + * @return the type + */ + public Class getType() { + return null; + } + + /** + * Answers an integer hash code for the receiver. Objects which are equal + * answer the same value for this method. + *

+ * The hash code for a Field is the hash code of the field's name. + * + * @return the receiver's hash + * @see #equals + */ + public int hashCode() { + return 0; + } + + /** + * Set the value of the field in the specified object to the boolean value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the field type is a base type, the value is automatically unwrapped. + * If the unwrap fails, an IllegalArgumentException is thrown. If the value + * cannot be converted to the field type via a widening conversion, an + * IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void set(Object object, Object value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the boolean value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setBoolean(Object object, boolean value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the byte value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setByte(Object object, byte value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the char value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setChar(Object object, char value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the double value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setDouble(Object object, double value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the float value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setFloat(Object object, float value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the int value. This + * reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setInt(Object object, int value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the long value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setLong(Object object, long value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Set the value of the field in the specified object to the short value. + * This reproduces the effect of object.fieldName = value + *

+ * If the modelled field is static, the object argument is ignored. + * Otherwise, if the object is null, a NullPointerException is thrown. If + * the object is not an instance of the declaring class of the method, an + * IllegalArgumentException is thrown. + *

+ * If this Field object is enforcing access control (see AccessibleObject) + * and the modelled field is not accessible from the current context, an + * IllegalAccessException is thrown. + *

+ * If the value cannot be converted to the field type via a widening + * conversion, an IllegalArgumentException is thrown. + * + * @param object + * the object to access + * @param value + * the new value + * @throws NullPointerException + * if the object is null and the field is non-static + * @throws IllegalArgumentException + * if the object is not compatible with the declaring class + * @throws IllegalAccessException + * if modelled field is not accessible + */ + public native void setShort(Object object, short value) + throws IllegalAccessException, IllegalArgumentException; + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. + *

+ * The format of the string is: + *

    + *
  • modifiers (if any) + *
  • return type + *
  • declaring class name + *
  • '.' + *
  • field name + *
+ *

+ * For example: + * public static java.io.InputStream java.lang.System.in + * + * @return a printable representation for the receiver + */ + public String toString() { + return null; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/GenericDeclaration.java b/sources/net.sf.j2s.java.core/unused/reflect/GenericDeclaration.java new file mode 100644 index 000000000..4a7b214db --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/GenericDeclaration.java @@ -0,0 +1,35 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +/** + * Common interface for entities that have type variables. + * @since 1.5 + */ +public interface GenericDeclaration { + + /** + * Answers the generic declared types in declaration order. + * If there are no generic types this method returns a zero + * length array. + * + * @return array of generic declared type variables. + * @throws GenericSignatureFormatError if the signature is malformed. + */ + TypeVariable[] getTypeParameters(); + +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/GenericSignatureFormatError.java b/sources/net.sf.j2s.java.core/unused/reflect/GenericSignatureFormatError.java new file mode 100644 index 000000000..d99e19c13 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/GenericSignatureFormatError.java @@ -0,0 +1,33 @@ +/* + * Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.reflect; + +/** + *

+ * Indicates that a malformed signature has been encountered via a reflective + * method. + *

+ * + * @since 1.5 + */ +public class GenericSignatureFormatError extends ClassFormatError { + private static final long serialVersionUID = 6709919147137911034L; + + public GenericSignatureFormatError() { + super(); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/InvocationHandler.java b/sources/net.sf.j2s.java.core/unused/reflect/InvocationHandler.java new file mode 100644 index 000000000..3cac20ddc --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/InvocationHandler.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + + +/** + * Implementors of this interface decode and dispatch methods sent to proxy + * instances. + * + * @see Proxy + */ +public interface InvocationHandler { + /** + * Return the result of decoding and dispatching the method which was + * originally sent to the proxy instance. + * + * @param proxy + * the proxy instance which was the receiver of the method. + * @param method + * the Method invoked on the proxy instance. + * @param args + * an array of objects containing the parameters passed to the + * method, or null if no arguments are expected. primitive types + * are wrapped in the appropriate class. + * @return the result of executing the method + * + * @throws Throwable + * if an exception was thrown by the invoked method. The + * exception must match one of the declared exception types for + * the invoked method or any unchecked exception type. If not + * then an UndeclaredThrowableException is thrown. + */ + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable; +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/InvocationTargetException.java b/sources/net.sf.j2s.java.core/unused/reflect/InvocationTargetException.java new file mode 100644 index 000000000..b2ebfd4aa --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/InvocationTargetException.java @@ -0,0 +1,82 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + + +/** + * This class provides a wrapper for an exception thrown by a Method or + * Constructor invocation. + * + * @see java.lang.reflect.Method#invoke + * @see java.lang.reflect.Constructor#newInstance + */ +public class InvocationTargetException extends Exception { + + private static final long serialVersionUID = 4085088731926701167L; + + private Throwable target; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + protected InvocationTargetException() { + super((Throwable) null); + } + + /** + * Constructs a new instance of this class with its walkback and target + * exception filled in. + * + * @param exception + * Throwable The exception which occurred while running the + * Method or Constructor. + */ + public InvocationTargetException(Throwable exception) { + super(null, exception); + target = exception; + } + + /** + * Constructs a new instance of this class with its walkback, target + * exception and message filled in. + * + * @param detailMessage + * String The detail message for the exception. + * @param exception + * Throwable The exception which occurred while running the + * Method or Constructor. + */ + public InvocationTargetException(Throwable exception, String detailMessage) { + super(detailMessage, exception); + target = exception; + } + + /** + * Answers the exception which caused the receiver to be thrown. + */ + public Throwable getTargetException() { + return target; + } + + /** + * Answers the cause of this Throwable, or null if there is no cause. + * + * @return Throwable The receiver's cause. + */ + public Throwable getCause() { + return target; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/MalformedParameterizedTypeException.java b/sources/net.sf.j2s.java.core/unused/reflect/MalformedParameterizedTypeException.java new file mode 100644 index 000000000..2de95e3a8 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/MalformedParameterizedTypeException.java @@ -0,0 +1,36 @@ +/* + * Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package java.lang.reflect; + +/** + *

+ * Indicates that a malformed parameterized type has been accessed by a + * reflected method. + *

+ * + * @since 1.5 + */ +public class MalformedParameterizedTypeException extends RuntimeException { + private static final long serialVersionUID = -5696557788586220964L; + + /** + *

Constructs an instance.

+ */ + public MalformedParameterizedTypeException() { + super(); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/Member.java b/sources/net.sf.j2s.java.core/unused/reflect/Member.java new file mode 100644 index 000000000..fd03a980c --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/Member.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + + +/** + * Implementors of this interface model a class member. + * + * @see Field + * @see Constructor + * @see Method + */ +public interface Member { + + public static final int PUBLIC = 0; + + public static final int DECLARED = 1; + + /** + * Return the {@link Class} associated with the class that defined this + * member. + * + * @return the declaring class + */ + @SuppressWarnings("unchecked") + Class getDeclaringClass(); + + /** + * Return the modifiers for the member. The Modifier class should be used to + * decode the result. + * + * @return the modifiers + * @see java.lang.reflect.Modifier + */ + int getModifiers(); + + /** + * Return the name of the member. + * + * @return the name + */ + String getName(); + + /** + *

Indicates whether or not this member is synthetic (artificially introduced by + * the compiler).

+ * @return A value of true if synthetic, otherwise false. + */ + boolean isSynthetic(); +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/Method.java b/sources/net.sf.j2s.java.core/unused/reflect/Method.java new file mode 100644 index 000000000..76e1dd022 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/Method.java @@ -0,0 +1,379 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +import java.lang.annotation.Annotation; + +/** + * This class must be implemented by the VM vendor. This class models a method. + * Information about the method can be accessed, and the method can be invoked + * dynamically. + * + * @j2sRequireImport java.lang.Void + */ +public final class Method extends AccessibleObject implements GenericDeclaration, Member { + + private Class clazz; + // This is guaranteed to be interned by the VM in the 1.4 + // reflection implementation + private String name; + private Class returnType; + private Class[] parameterTypes; + private Class[] exceptionTypes; + private int modifiers; + + /** + * Package-private constructor used by ReflectAccess to enable + * instantiation of these objects in Java code from the java.lang + * package via sun.reflect.LangReflectAccess. + */ + Method(Class declaringClass, + String name, + Class[] parameterTypes, + Class returnType, + Class[] checkedExceptions, + int modifiers) + { + this.clazz = declaringClass; + this.name = name; + this.parameterTypes = parameterTypes; + this.returnType = returnType; + this.exceptionTypes = checkedExceptions; + this.modifiers = modifiers; + } + + public TypeVariable[] getTypeParameters() { + return null; + } + + /** + *

+ * Returns the String representation of the method's declaration, including + * the type parameters. + *

+ * + * @return An instance of String. + * @since 1.5 + */ + public String toGenericString() { + return null; + } + + /** + *

+ * Gets the parameter types as an array of {@link Type} instances, in + * declaration order. If the method has no parameters, then an empty array + * is returned. + *

+ * + * @return An array of {@link Type} instances. + * @throws GenericSignatureFormatError if the generic method signature is + * invalid. + * @throws TypeNotPresentException if the component type points to a missing + * type. + * @throws MalformedParameterizedTypeException if the component type points + * to a type that can't be instantiated for some reason. + * @since 1.5 + */ + public Type[] getGenericParameterTypes() { + return null; + } + + /** + *

+ * Gets the exception types as an array of {@link Type} instances. If the + * method has no declared exceptions, then an empty array is returned. + *

+ * + * @return An array of {@link Type} instances. + * @throws GenericSignatureFormatError if the generic method signature is + * invalid. + * @throws TypeNotPresentException if the component type points to a missing + * type. + * @throws MalformedParameterizedTypeException if the component type points + * to a type that can't be instantiated for some reason. + * @since 1.5 + */ + public Type[] getGenericExceptionTypes() { + return null; + } + + /** + *

+ * Gets the return type as a {@link Type} instance. + *

+ * + * @return A {@link Type} instance. + * @throws GenericSignatureFormatError if the generic method signature is + * invalid. + * @throws TypeNotPresentException if the component type points to a missing + * type. + * @throws MalformedParameterizedTypeException if the component type points + * to a type that can't be instantiated for some reason. + * @since 1.5 + */ + public Type getGenericReturnType() { + return null; + } + + /** + *

+ * Gets an array of arrays that represent the annotations of the formal + * parameters of this method. If there are no parameters on this method, + * then an empty array is returned. If there are no annotations set, then + * and array of empty arrays is returned. + *

+ * + * @return An array of arrays of {@link Annotation} instances. + * @since 1.5 + */ + public Annotation[][] getParameterAnnotations() { + return null; + } + + /** + *

+ * Indicates whether or not this method takes a variable number argument. + *

+ * + * @return A value of true if a vararg is declare, otherwise + * false. + * @since 1.5 + */ + public boolean isVarArgs() { + return false; + } + + /** + *

+ * Indicates whether or not this method is a bridge. + *

+ * + * @return A value of true if this method's a bridge, + * otherwise false. + * @since 1.5 + */ + public boolean isBridge() { + return false; + } + + public boolean isSynthetic() { + return false; + } + + /** + *

Gets the default value for the annotation member represented by + * this method.

+ * @return The default value or null if none. + * @throws TypeNotPresentException if the annotation is of type {@link Class} + * and no definition can be found. + * @since 1.5 + */ + public Object getDefaultValue() { + return null; + } + + /** + * Compares the specified object to this Method and answer if they are + * equal. The object must be an instance of Method with the same defining + * class and parameter types. + * + * @param object + * the object to compare + * @return true if the specified object is equal to this Method, false + * otherwise + * @see #hashCode + */ + public boolean equals(Object object) { + if (object != null && object instanceof Method) { + Method other = (Method)object; + if ((getDeclaringClass() == other.getDeclaringClass()) + && (getName() == other.getName())) { + /* Avoid unnecessary cloning */ + Class[] params1 = parameterTypes; + Class[] params2 = other.parameterTypes; + if (params1.length == params2.length) { + for (int i = 0; i < params1.length; i++) { + if (params1[i] != params2[i]) + return false; + } + return true; + } + } + } + return false; + } + + /** + * Return the {@link Class} associated with the class that defined this + * method. + * + * @return the declaring class + */ + public Class getDeclaringClass() { + return clazz; + } + + /** + * Return an array of the {@link Class} objects associated with the + * exceptions declared to be thrown by this method. If the method was not + * declared to throw any exceptions, the array returned will be empty. + * + * @return the declared exception classes + */ + public Class[] getExceptionTypes() { + return exceptionTypes; + } + + /** + * Return the modifiers for the modelled method. The Modifier class + * should be used to decode the result. + * + * @return the modifiers + * @see java.lang.reflect.Modifier + */ + public int getModifiers() { + return modifiers; + } + + /** + * Return the name of the modelled method. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Return an array of the {@link Class} objects associated with the + * parameter types of this method. If the method was declared with no + * parameters, the array returned will be empty. + * + * @return the parameter types + */ + public Class[] getParameterTypes() { + return parameterTypes; + } + + /** + * Return the {@link Class} associated with the return type of this + * method. + * + * @return the return type + */ + public Class getReturnType() { + return returnType; + } + + /** + * Answers an integer hash code for the receiver. Objects which are equal + * answer the same value for this method. The hash code for a Method is the + * hash code of the method's name. + * + * @return the receiver's hash + * @see #equals + */ + public int hashCode() { + return getDeclaringClass().getName().hashCode() ^ getName().hashCode(); + } + + /** + * Return the result of dynamically invoking the modelled method. This + * reproduces the effect of + * receiver.methodName(arg1, arg2, ... , argN) This method + * performs the following: + *
    + *
  • If the modelled method is static, the receiver argument is ignored. + *
  • + *
  • Otherwise, if the receiver is null, a NullPointerException is + * thrown.
  • + * If the receiver is not an instance of the declaring class of the method, + * an IllegalArgumentException is thrown. + *
  • If this Method object is enforcing access control (see + * AccessibleObject) and the modelled method is not accessible from the + * current context, an IllegalAccessException is thrown.
  • + *
  • If the number of arguments passed and the number of parameters do + * not match, an IllegalArgumentException is thrown.
  • + *
  • For each argument passed: + *
      + *
    • If the corresponding parameter type is a base type, the argument is + * unwrapped. If the unwrapping fails, an IllegalArgumentException is + * thrown.
    • + *
    • If the resulting argument cannot be converted to the parameter type + * via a widening conversion, an IllegalArgumentException is thrown.
    • + *
    + *
  • If the modelled method is static, it is invoked directly. If it is + * non-static, the modelled method and the receiver are then used to perform + * a standard dynamic method lookup. The resulting method is then invoked. + *
  • + *
  • If an exception is thrown during the invocation it is caught and + * wrapped in an InvocationTargetException. This exception is then thrown. + *
  • + *
  • If the invocation completes normally, the return value is itself + * returned. If the method is declared to return a base type, the return + * value is first wrapped. If the return type is void, null is returned. + *
  • + *
+ * + * @param receiver + * The object on which to call the modelled method + * @param args + * the arguments to the method + * @return the new, initialized, object + * @exception java.lang.NullPointerException + * if the receiver is null for a non-static method + * @exception java.lang.IllegalAccessException + * if the modelled method is not accessible + * @exception java.lang.IllegalArgumentException + * if an incorrect number of arguments are passed, the + * receiver is incompatible with the declaring class, or an + * argument could not be converted by a widening conversion + * @exception java.lang.reflect.InvocationTargetException + * if an exception was thrown by the invoked method + * @see java.lang.reflect.AccessibleObject + * + * @j2sNative + * var m = this.clazz.prototype[this.getName ()]; + * if (m == null) { + * m = this.clazz[this.getName ()]; + * } + * if (m != null) { + * return m.apply(receiver,args); + * } else { + * // should never reach here! + * } + */ + public Object invoke(Object receiver, Object args[]) + throws IllegalAccessException, IllegalArgumentException, + InvocationTargetException { + return null; + } + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. The format of the string is modifiers (if any) return type + * declaring class name '.' method name '(' parameter types, separated by + * ',' ')' If the method throws exceptions, ' throws ' exception types, + * separated by ',' For example: + * public native Object java.lang.Method.invoke(Object,Object) throws IllegalAccessException,IllegalArgumentException,InvocationTargetException + * + * @return a printable representation for the receiver + */ + public String toString() { + return null; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/Modifier.java b/sources/net.sf.j2s.java.core/unused/reflect/Modifier.java new file mode 100644 index 000000000..00f598028 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/Modifier.java @@ -0,0 +1,284 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + + +/** + * This class provides methods to decode class and member modifiers. + * + * @see java.lang.Class#getModifiers() + * @see java.lang.reflect.Member#getModifiers() + * + * @j2sOptionalImport java.lang.reflect.Method + */ +public class Modifier { + + public static final int PUBLIC = 0x1; + + public static final int PRIVATE = 0x2; + + public static final int PROTECTED = 0x4; + + public static final int STATIC = 0x8; + + public static final int FINAL = 0x10; + + public static final int SYNCHRONIZED = 0x20; + + public static final int VOLATILE = 0x40; + + public static final int TRANSIENT = 0x80; + + public static final int NATIVE = 0x100; + + public static final int INTERFACE = 0x200; + + public static final int ABSTRACT = 0x400; + + public static final int STRICT = 0x800; + + // Non-public types required by Java 5 update to class file format + static final int BRIDGE = 0x40; + + static final int VARARGS = 0x80; + + static final int SYNTHETIC = 0x1000; + + static final int ANNOTATION = 0x2000; + + static final int ENUM = 0x4000; + + public Modifier() { + } + + /** + * Return true if the specified modifiers contain the abstract + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the abstract modifier + */ + public static boolean isAbstract(int modifiers) { + return ((modifiers & ABSTRACT) != 0); + } + + /** + * Return true if the specified modifiers contain the final + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the final modifier + */ + public static boolean isFinal(int modifiers) { + return ((modifiers & FINAL) != 0); + } + + /** + * Return true if the specified modifiers contain the interface + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the interface modifier + */ + public static boolean isInterface(int modifiers) { + return ((modifiers & INTERFACE) != 0); + } + + /** + * Return true if the specified modifiers contain the native + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the native modifier + */ + public static boolean isNative(int modifiers) { + return ((modifiers & NATIVE) != 0); + } + + /** + * Return true if the specified modifiers contain the private + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the private modifier + */ + public static boolean isPrivate(int modifiers) { + return ((modifiers & PRIVATE) != 0); + } + + /** + * Return true if the specified modifiers contain the protected + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the protected modifier + */ + public static boolean isProtected(int modifiers) { + return ((modifiers & PROTECTED) != 0); + } + + /** + * Return true if the specified modifiers contain the public + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the abstract modifier + */ + public static boolean isPublic(int modifiers) { + return ((modifiers & PUBLIC) != 0); + } + + /** + * Return true if the specified modifiers contain the static + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the static modifier + */ + public static boolean isStatic(int modifiers) { + return ((modifiers & STATIC) != 0); + } + + /** + * Return true if the specified modifiers contain the strict + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the strict modifier + */ + public static boolean isStrict(int modifiers) { + return ((modifiers & STRICT) != 0); + } + + /** + * Return true if the specified modifiers contain the + * synchronized modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the synchronized modifier + */ + public static boolean isSynchronized(int modifiers) { + return ((modifiers & SYNCHRONIZED) != 0); + } + + /** + * Return true if the specified modifiers contain the transient + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the transient modifier + */ + public static boolean isTransient(int modifiers) { + return ((modifiers & TRANSIENT) != 0); + } + + /** + * Return true if the specified modifiers contain the volatile + * modifier, false otherwise. + * + * @param modifiers + * the modifiers to test + * @return if the modifiers contain the volatile modifier + */ + public static boolean isVolatile(int modifiers) { + return ((modifiers & VOLATILE) != 0); + } + + /** + * Answers a string containing the string representation of all modifiers + * present in the specified modifiers. + * + * Modifiers appear in the order specified by the Java Language + * Specification: + * public private protected abstract static final transient volatile native synchronized interface strict + * + * @param modifiers + * the modifiers to print + * @return a printable representation of the modifiers + */ + public static java.lang.String toString(int modifiers) { + /* + StringBuffer buf; + + buf = new StringBuffer(); + + if (isPublic(modifiers)) + buf.append("public "); + if (isProtected(modifiers)) + buf.append("protected "); + if (isPrivate(modifiers)) + buf.append("private "); + if (isAbstract(modifiers)) + buf.append("abstract "); + if (isStatic(modifiers)) + buf.append("static "); + if (isFinal(modifiers)) + buf.append("final "); + if (isTransient(modifiers)) + buf.append("transient "); + if (isVolatile(modifiers)) + buf.append("volatile "); + if (isSynchronized(modifiers)) + buf.append("synchronized "); + if (isNative(modifiers)) + buf.append("native "); + if (isStrict(modifiers)) + buf.append("strictfp "); + if (isInterface(modifiers)) + buf.append("interface "); + if (buf.length() == 0) + return ""; + buf.setLength(buf.length() - 1); + return buf.toString(); + */ + String[] sb = new String[0]; + if (isPublic(modifiers)) sb[sb.length] = "public"; + if (isProtected(modifiers)) sb[sb.length] = "protected"; + if (isPrivate(modifiers)) sb[sb.length] = "private"; + if (isAbstract(modifiers)) sb[sb.length] = "abstract"; + if (isStatic(modifiers)) sb[sb.length] = "static"; + if (isFinal(modifiers)) sb[sb.length] = "final"; + if (isTransient(modifiers)) sb[sb.length] = "transient"; + if (isVolatile(modifiers)) sb[sb.length] = "volatile"; + if (isSynchronized(modifiers)) sb[sb.length] = "synchronized"; + if (isNative(modifiers)) sb[sb.length] = "native"; + if (isStrict(modifiers)) sb[sb.length] = "strictfp"; + if (isInterface(modifiers)) sb[sb.length] = "interface"; + + if (sb.length > 0) /* join the array */ + /** + * @j2sNative + * return sb.join(" "); + */ + { + return sb.toString(); + } + return ""; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/Proxy.java b/sources/net.sf.j2s.java.core/unused/reflect/Proxy.java new file mode 100644 index 000000000..3f38a0263 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/Proxy.java @@ -0,0 +1,249 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +import java.io.Serializable; + +import org.apache.harmony.luni.util.Msg; + +/** + * This class provides methods to creating dynamic proxy classes and instances. + * + * @see java.lang.reflect.InvocationHandler + * @since 1.3 + */ +public class Proxy implements Serializable { + + private static final long serialVersionUID = -2222568056686623797L; + + // maps class loaders to created classes by interface names + //private static final Map>>> loaderCache = new WeakHashMap>>>(); + + // to find previously created types + //private static final Map, String> proxyCache = new WeakHashMap, String>(); + + //private static int NextClassNameIndex = 0; + + protected InvocationHandler h; + + private Proxy() { + } + + protected Proxy(InvocationHandler h) { + this.h = h; + } + + /** + * Return the dynamically build class for the given interfaces, build a new + * one when necessary. The order of the interfaces is important. + * + * The interfaces must be visible from the supplied class loader; no + * duplicates are permitted. All non-public interfaces must be defined in + * the same package. + * + * @param loader + * the class loader that will define the proxy class. + * @param interfaces + * an array of Class objects, each one identifying + * an interface that the new proxy must implement + * @return a proxy class that implements all of the interfaces referred to + * in the contents of interfaces. + * @exception IllegalArgumentException + * @exception NullPointerException + * if either interfaces or any of its elements + * are null. + */ + public static Class getProxyClass(ClassLoader loader, Class[] interfaces) + throws IllegalArgumentException { + // check that interfaces are a valid array of visible interfaces + if (interfaces == null) { + throw new NullPointerException(); + } + /* + String commonPackageName = null; + for (int i = 0, length = interfaces.length; i < length; i++) { + Class next = interfaces[i]; + if (next == null) { + throw new NullPointerException(); + } + String name = next.getName(); + if (!next.isInterface()) { + throw new IllegalArgumentException(Msg.getString("K00ed", name)); + } + if (loader != next.getClassLoader()) { + try { + if (next != Class.forName(name, false, loader)) { + throw new IllegalArgumentException(Msg.getString( + "K00ee", name)); + } + } catch (ClassNotFoundException ex) { + throw new IllegalArgumentException(Msg.getString("K00ee", + name)); + } + } + for (int j = i + 1; j < length; j++) { + if (next == interfaces[j]) { + throw new IllegalArgumentException(Msg.getString("K00ef", + name)); + } + } + if (!Modifier.isPublic(next.getModifiers())) { + int last = name.lastIndexOf('.'); + String p = last == -1 ? "" : name.substring(0, last); + if (commonPackageName == null) { + commonPackageName = p; + } else if (!commonPackageName.equals(p)) { + throw new IllegalArgumentException(Msg.getString("K00f0")); + } + } + } + + // search cache for matching proxy class using the class loader + synchronized (loaderCache) { + Map>> interfaceCache = loaderCache.get(loader); + if (interfaceCache == null) { + loaderCache.put(loader, (interfaceCache = new HashMap>>())); + } + + String interfaceKey = ""; + if (interfaces.length == 1) { + interfaceKey = interfaces[0].getName(); + } else { + StringBuilder names = new StringBuilder(); + for (int i = 0, length = interfaces.length; i < length; i++) { + names.append(interfaces[i].getName()); + names.append(' '); + } + interfaceKey = names.toString(); + } + + Class newClass; + WeakReference> ref = interfaceCache.get(interfaceKey); + if (ref == null) { + String nextClassName = "$Proxy" + NextClassNameIndex++; + if (commonPackageName != null) { + nextClassName = commonPackageName + "." + nextClassName; + } + byte[] classFileBytes = ProxyClassFile.generateBytes( + nextClassName, interfaces); + if (loader == null) { + loader = ClassLoader.getSystemClassLoader(); + } + newClass = defineClassImpl(loader, nextClassName.replace('.', + '/'), classFileBytes); + // Need a weak reference to the class so it can + // be unloaded if the class loader is discarded + interfaceCache.put(interfaceKey, new WeakReference>(newClass)); + synchronized (proxyCache) { + proxyCache.put(newClass, ""); // the value is unused + } + } else { + newClass = ref.get(); + } + return newClass; + } + */ + return null; + } + + /** + * Return an instance of the dynamically build class for the given + * interfaces that forwards methods to the specified invocation handler. + * + * The interfaces must be visible from the supplied class loader; no + * duplicates are permitted. All non-public interfaces must be defined in + * the same package. + * + * @param loader + * the class loader that will define the proxy class. + * @param interfaces + * the list of interfaces to implement. + * @param h + * the invocation handler for the forwarded methods. + * @return a new proxy object that delegates to the handler h + * @exception IllegalArgumentException + * @exception NullPointerException + * if the interfaces or any of its elements are null. + */ + public static Object newProxyInstance(ClassLoader loader, + Class[] interfaces, InvocationHandler h) + throws IllegalArgumentException { + if (h != null) { + /* + try { + return getProxyClass(loader, interfaces).getConstructor( + new Class[] { InvocationHandler.class }).newInstance( + new Object[] { h }); + } catch (NoSuchMethodException ex) { + throw (InternalError)(new InternalError(ex.toString()).initCause(ex)); + } catch (IllegalAccessException ex) { + throw (InternalError)(new InternalError(ex.toString()).initCause(ex)); + } catch (InstantiationException ex) { + throw (InternalError)(new InternalError(ex.toString()).initCause(ex)); + } catch (InvocationTargetException ex) { + Throwable target = ex.getTargetException(); + throw (InternalError)(new InternalError(target.toString()).initCause(target)); + } + */ + } + throw new NullPointerException(); + } + + /** + * Return whether the supplied class is a dynamically generated proxy class. + * + * @param cl + * the class. + * @return true if the class is a proxy class and false otherwise. + * @exception NullPointerException + * if the class is null. + */ + public static boolean isProxyClass(Class cl) { + if (cl != null) { + /* + synchronized (proxyCache) { + return proxyCache.containsKey(cl); + } + */ + } + throw new NullPointerException(); + } + + /** + * Return the proxy instance's invocation handler. + * + * @param proxy + * the proxy instance. + * @return the proxy's invocation handler object + * @exception IllegalArgumentException + * if the supplied proxy is not a proxy + * object. + */ + public static InvocationHandler getInvocationHandler(Object proxy) + throws IllegalArgumentException { + if (isProxyClass(proxy.getClass())) { + return ((Proxy) proxy).h; + } + + throw new IllegalArgumentException(Msg.getString("K00f1")); + } + +// private static native Class defineClassImpl(ClassLoader classLoader, +// String className, byte[] classFileBytes); + +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/ReflectPermission.java b/sources/net.sf.j2s.java.core/unused/reflect/ReflectPermission.java new file mode 100644 index 000000000..783c44ccc --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/ReflectPermission.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + + +import java.security.BasicPermission; + +/** + * ReflectPermission objects represent permission to access dangerous operations + * in the reflection layer. + */ +public final class ReflectPermission extends BasicPermission { + + private static final long serialVersionUID = 7412737110241507485L; + + /** + * Creates an instance of this class with given name. + * + * @param permissionName + * String the name of the new permission. + */ + public ReflectPermission(String permissionName) { + super(permissionName); + } + + /** + * Creates an instance of this class with the given name and action list. + * The action list is ignored. + * + * @param name + * String the name of the new permission. + * @param actions + * String ignored. + */ + public ReflectPermission(String name, String actions) { + super(name, actions); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/TypeVariable.java b/sources/net.sf.j2s.java.core/unused/reflect/TypeVariable.java new file mode 100644 index 000000000..06c1e6891 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/TypeVariable.java @@ -0,0 +1,51 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + +/** + *

Represents a type variable.

+ * + * @param + * @since 1.5 + */ +public interface TypeVariable extends Type { + + /** + * Answers the upper bounds of the type variable. + * + * @return array of type variable's upper bounds. + * @throws TypeNotPresentException if the component type points to a missing + * type. + * @throws MalformedParameterizedTypeException if the component type points + * to a type that can't be instantiated for some reason. + */ + Type[] getBounds(); + + /** + * Answers a GenericDeclaration object for this type variable. + * + * @return the generic declaration spec + */ + D getGenericDeclaration(); + + /** + * Answers the type variable's name from source. + * + * @return the variable's name from the source code. + */ + String getName(); +} diff --git a/sources/net.sf.j2s.java.core/unused/reflect/UndeclaredThrowableException.java b/sources/net.sf.j2s.java.core/unused/reflect/UndeclaredThrowableException.java new file mode 100644 index 000000000..8b0f4e342 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/reflect/UndeclaredThrowableException.java @@ -0,0 +1,77 @@ +/* Copyright 2001, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.lang.reflect; + + +/** + * This class provides a wrapper for an unexpected exception thrown by an + * InvocationHandler + * + * @see java.lang.reflect.InvocationHandler#invoke + */ + +public class UndeclaredThrowableException extends RuntimeException { + + private static final long serialVersionUID = 330127114055056639L; + + private Throwable undeclaredThrowable; + + /** + * Constructs a new instance of this class with its walkback and target + * exception filled in. + * + * @param exception + * The exception which occurred while loading the class. + */ + public UndeclaredThrowableException(Throwable exception) { + super(); + this.undeclaredThrowable = exception; + initCause(exception); + } + + /** + * Constructs a new instance of this class with its walkback, target + * exception and message filled in. + * + * @param detailMessage + * String The detail message for the exception. + * @param exception + * Throwable The exception which occurred while loading the + * class. + */ + public UndeclaredThrowableException(Throwable exception, + String detailMessage) { + super(detailMessage); + this.undeclaredThrowable = exception; + initCause(exception); + } + + /** + * Answers the exception which caused the receiver to be thrown. + */ + public Throwable getUndeclaredThrowable() { + return undeclaredThrowable; + } + + /** + * Answers the cause of this Throwable, or null if there is no cause. + * + * @return Throwable The receiver's cause. + */ + public Throwable getCause() { + return undeclaredThrowable; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/text/Annotation.java b/sources/net.sf.j2s.java.core/unused/text/Annotation.java new file mode 100644 index 000000000..922cbd00d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/text/Annotation.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.text; + +/** + * Annotation + */ +public class Annotation { + + private Object value; + + public Annotation(Object attribute) { + value = attribute; + } + + public Object getValue() { + return value; + } + + @Override + public String toString() { + return getClass().getName() + "[value=" + value + ']'; //$NON-NLS-1$ + } +} diff --git a/sources/net.sf.j2s.java.core/unused/text/MessageFormat.java b/sources/net.sf.j2s.java.core/unused/text/MessageFormat.java new file mode 100644 index 000000000..946dd3931 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/text/MessageFormat.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2007 java2script.org and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Zhou Renjian - initial API and implementation + *******************************************************************************/ + +package java.text; + +import java.util.Locale; + + +/** + * @author zhou renjian + * + * 2006-10-10 + */ +public class MessageFormat { + private String pattern; + + public MessageFormat(String pattern) { + this.pattern = pattern; + } + + public MessageFormat(String pattern, Locale locale) { + this.pattern = pattern; + } + + /** + * @j2sNative + * return pattern.replace (/\{(\d+)\}/g, function ($0, $1) { + * var i = parseInt ($1); + * if (args == null) return null; + * return args[i]; + * }); + */ + public static String format(String pattern, Object[] args) { + return pattern; + } + + public final String format (Object obj) { + return format(pattern, new Object[] { obj }); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/ConcurrentModificationException.java b/sources/net.sf.j2s.java.core/unused/util/ConcurrentModificationException.java new file mode 100644 index 000000000..bcc2a1c4a --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/ConcurrentModificationException.java @@ -0,0 +1,47 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + + +/** + * This runtime exception is thrown when a Collection is modified and an + * existing iterator on the Collection is used to modify the Collection as well. + * + * @see java.lang.RuntimeException + */ +public class ConcurrentModificationException extends RuntimeException { + + private static final long serialVersionUID = -3666751008965953603L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public ConcurrentModificationException() { + /*empty*/ + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public ConcurrentModificationException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/DuplicateFormatFlagsException.java b/sources/net.sf.j2s.java.core/unused/util/DuplicateFormatFlagsException.java new file mode 100644 index 000000000..33e387d09 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/DuplicateFormatFlagsException.java @@ -0,0 +1,65 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +/** + * The unchecked exception will be thrown out if there are duplicate flags given + * out in the format specifier. + */ +public class DuplicateFormatFlagsException extends IllegalFormatException { + private static final long serialVersionUID = 18890531L; + + private String flags; + + /** + * Constructs a DuplicateFormatFlagsException which flags is specified. + * + * @param f + * The format flags that contian a duplicate flag. + */ + public DuplicateFormatFlagsException(String f) { + if (null == f) { + throw new NullPointerException(); + } + flags = f; + } + + /** + * Returns the format flags that contian a duplicate flag. + * + * @return The format flags that contian a duplicate flag. + */ + public String getFlags() { + return flags; + } + + /** + * Returns the message string of the DuplicateFormatFlagsException. + * + * @return The message string of the DuplicateFormatFlagsException. + */ + public String getMessage() { + /* + StringBuilder buffer = new StringBuilder(); + buffer.append("Flags of the DuplicateFormatFlagsException is'"); + buffer.append(flags); + buffer.append("'"); + return buffer.toString(); + */ + return "Flags of the DuplicateFormatFlagsException is '" + flags + "'"; + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/EmptyStackException.java b/sources/net.sf.j2s.java.core/unused/util/EmptyStackException.java new file mode 100644 index 000000000..0bec00d79 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/EmptyStackException.java @@ -0,0 +1,33 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + + +/** + * Runtime exception which is thrown when pop/peek method of stack is executed + * on a stack which is empty + */ +public class EmptyStackException extends RuntimeException { + + private static final long serialVersionUID = 5084686378493302095L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public EmptyStackException() { + super(); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/FormatFlagsConversionMismatchException.java b/sources/net.sf.j2s.java.core/unused/util/FormatFlagsConversionMismatchException.java new file mode 100644 index 000000000..c19694cd7 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/FormatFlagsConversionMismatchException.java @@ -0,0 +1,84 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +import java.io.Serializable; + +/** + * The unchecked exception will be thrown out if a conversion and flags are + * incompatible. + */ +public class FormatFlagsConversionMismatchException extends + IllegalFormatException implements Serializable { + + private static final long serialVersionUID = 19120414L; + + private String f; + + private char c; + + /** + * Construct a FormatFlagsConversionMismatchException with the flags and + * conversion specified. + * + * @param f + * The flags + * @param c + * The conversion + */ + public FormatFlagsConversionMismatchException(String f, char c) { + if (null == f) { + throw new NullPointerException(); + } + this.f = f; + this.c = c; + } + + /** + * Returns the incompatible format flag. + * + * @return The incompatible format flag. + */ + public String getFlags() { + return f; + } + + /** + * Returns the incompatible Conversion. + * + * @return The incompatible Conversion. + */ + public char getConversion() { + return c; + } + + /** + * Returns the message string of the FormatFlagsConversionMismatchException. + * + * @return The message string of the FormatFlagsConversionMismatchException. + */ + public String getMessage() { + /* + StringBuilder buffer = new StringBuilder(); + buffer.append("Mismatched Convertor ="); + buffer.append(c); + buffer.append(", Flags= "); + buffer.append(f); + return buffer.toString(); + */ + return "Mismatched Convertor =" + c + ", Flags= " + f; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/FormatterClosedException.java b/sources/net.sf.j2s.java.core/unused/util/FormatterClosedException.java new file mode 100644 index 000000000..103081a62 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/FormatterClosedException.java @@ -0,0 +1,34 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +import java.io.Serializable; + +/** + * The unchecked exception will be thrown out if the formatter has been closed. + * + */ +public class FormatterClosedException extends IllegalStateException implements + Serializable { + private static final long serialVersionUID = 18111216L; + + /** + * Constucts an instance of FormatterClosedException. + * + */ + public FormatterClosedException() { + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/IllegalFormatCodePointException.java b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatCodePointException.java new file mode 100644 index 000000000..2bdcfe08b --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatCodePointException.java @@ -0,0 +1,68 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +import java.io.Serializable; + +/** + * The unchecked exception will be thrown out if an invalid Unicode code point, + * which is Character.isValidCodePoint(int), is passed as a parameter to + * Formatter. + */ +public class IllegalFormatCodePointException extends IllegalFormatException + implements Serializable { + private static final long serialVersionUID = 19080630L; + + private int c; + + /** + * Constructs an IllegalFormatCodePointException which is specified by the + * invalid Unicode code point. + * + * @param c + * The invalid Unicode code point. + */ + public IllegalFormatCodePointException(int c) { + this.c = c; + } + + /** + * Return the invalid Unicode code point. + * + * @return The invalid Unicode code point. + */ + public int getCodePoint() { + return c; + } + + /** + * Return the message string of the IllegalFormatCodePointException. + * + * @retun The message string of the IllegalFormatCodePointException. + */ + public String getMessage() { + /* + StringBuilder buffer = new StringBuilder(); + buffer.append("Code point is "); + char[] chars = Character.toChars(c); + for (int i = 0; i < chars.length; i++) { + buffer.append(chars[i]); + } + return buffer.toString(); + */ + return "Code point is " + c; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/IllegalFormatConversionException.java b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatConversionException.java new file mode 100644 index 000000000..a59da9108 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatConversionException.java @@ -0,0 +1,87 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +import java.io.Serializable; + +/** + * The unchecked exception will be thrown out when the parameter is incompatible + * with the corresponding format specifier. + * @since 1.5 + */ +public class IllegalFormatConversionException extends IllegalFormatException + implements Serializable { + private static final long serialVersionUID = 17000126L; + + private char c; + +// private Class arg; + private Class arg; + + /** + * Constructs an IllegalFormatConversionException with the class of the + * mismatched conversion and corresponding parameter. + * + * @param c + * The class of the mismatched conversion. + * @param arg + * The corresponding parameter. + */ +// public IllegalFormatConversionException(char c, Class arg) { + public IllegalFormatConversionException(char c, Class arg) { + this.c = c; + if (arg == null) { + throw new NullPointerException(); + } + this.arg = arg; + } + + /** + * Return the class of the mismatched parameter. + * + * @return The class of the mismatched parameter. + */ +// public Class getArgumentClass() { + public Class getArgumentClass() { + return arg; + } + + /** + * Return the incompatible conversion. + * + * @return The incompatible conversion. + */ + public char getConversion() { + return c; + } + + /** + * Return the message string of the IllegalFormatConversionException. + * + * @return The message string of the IllegalFormatConversionException. + */ + public String getMessage() { + /* + StringBuilder buffer = new StringBuilder(); + buffer.append(c); + buffer.append(" is incompatible with "); + buffer.append(arg.getName()); + return buffer.toString(); + */ + return "" + c + " is incompatible with " + arg.getName(); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/IllegalFormatException.java b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatException.java new file mode 100644 index 000000000..96013f583 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatException.java @@ -0,0 +1,36 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package java.util; + +import java.io.Serializable; + +/** + * Unchecked Exception that is to be thrown out when a format string that + * contains either an illegal syntax or format specifier is transferred as a + * parameter. Only subclass that is inherited explicitly from this exception is + * allowed to be instantialized. + * + * + */ +public class IllegalFormatException extends IllegalArgumentException implements + Serializable { + + private static final long serialVersionUID = 18830826L; + + // the constructor is not callable from outside from the package + IllegalFormatException() { + // do nothing + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/IllegalFormatFlagsException.java b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatFlagsException.java new file mode 100644 index 000000000..15177766e --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatFlagsException.java @@ -0,0 +1,70 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +import java.io.Serializable; + +/** + * + * The unchecked exception will be thrown out if the combination of the format + * flags is illegal. + * + */ +public class IllegalFormatFlagsException extends IllegalFormatException + implements Serializable { + private static final long serialVersionUID = 790824L; + + private String flags; + + /** + * Constructs an IllegalFormatFlagsException with the specified flags. + * + * @param f + * The specified flags. + */ + public IllegalFormatFlagsException(String f) { + if (null == f) { + throw new NullPointerException(); + } + flags = f; + } + + /** + * Return the flags that are illegal. + * + * @return The flags that are illegal. + */ + public String getFlags() { + return flags; + } + + /** + * Return the message string of the IllegalFormatFlagsException. + * + * @retun The message string of the IllegalFormatFlagsException. + */ + public String getMessage() { + /* + StringBuilder buffer = new StringBuilder(); + buffer.append("Flags = '"); + buffer.append(flags); + buffer.append("'"); + return buffer.toString(); + */ + return "Flags = '" + flags + "'"; + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/IllegalFormatPrecisionException.java b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatPrecisionException.java new file mode 100644 index 000000000..37ff16d58 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatPrecisionException.java @@ -0,0 +1,59 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +/** + * + * The unchecked exception will be thrown out when the precision is a negative + * other than -1, or the conversion does not support a precision or other cases + * when the precision is not supported. + * + */ + +public class IllegalFormatPrecisionException extends IllegalFormatException { + private static final long serialVersionUID = 18711008L; + + private int p; + + /** + * Constructs a IllegalFormatPrecisionException with specified precision. + * + * @param p + * The precision. + */ + public IllegalFormatPrecisionException(int p) { + this.p = p; + } + + /** + * Returns the precision associated with the exception. + * + * @return the precision. + */ + public int getPrecision() { + return p; + } + + /** + * Returns the message of the exception. + * + * @return The message of the exception. + */ + public String getMessage() { + return String.valueOf(p); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/IllegalFormatWidthException.java b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatWidthException.java new file mode 100644 index 000000000..da246067a --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/IllegalFormatWidthException.java @@ -0,0 +1,58 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +/** + * + * The unchecked exception will be thrown out when the width is a negative other + * than -1, or the conversion does not support a width or other cases when the + * width is not supported. + * + */ +public class IllegalFormatWidthException extends IllegalFormatException { + + private static final long serialVersionUID = 16660902L; + + private int w; + + /** + * Constructs a IllegalFormatWidthException with specified width. + * + * @param w + * The width. + */ + public IllegalFormatWidthException(int w) { + this.w = w; + } + + /** + * Returns the width associated with the exception. + * + * @return the width. + */ + public int getWidth() { + return w; + } + + /** + * Returns the message of the exception. + * + * @return The message of the exception. + */ + public String getMessage() { + return String.valueOf(w); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/InputMismatchException.java b/sources/net.sf.j2s.java.core/unused/util/InputMismatchException.java new file mode 100644 index 000000000..096758d11 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/InputMismatchException.java @@ -0,0 +1,47 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package java.util; + +import java.io.Serializable; + +/** + * An InputMismatchException is thrown by a scanner to indicate that the next + * token does not match the pattern the specified type. + * + * @see Scanner + */ +public class InputMismatchException extends NoSuchElementException implements + Serializable { + + static final long serialVersionUID = 8811230760997066428L; + + /** + * Constructs a InputMismatchException with no error message + * + */ + public InputMismatchException() { + super(); + } + + /** + * Constructs a InputMismatchException with msg as its error message + * + * @param msg + * The specified error message + */ + public InputMismatchException(String msg) { + super(msg); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/InvalidPropertiesFormatException.java b/sources/net.sf.j2s.java.core/unused/util/InvalidPropertiesFormatException.java new file mode 100644 index 000000000..44d0e3605 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/InvalidPropertiesFormatException.java @@ -0,0 +1,45 @@ +/* Copyright 2005-2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package java.util; + +import java.io.NotSerializableException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.IOException; + +public class InvalidPropertiesFormatException extends IOException { + + private static final long serialVersionUID = 7763056076009360219L; + + public InvalidPropertiesFormatException(String m) { + super(m); + } + + public InvalidPropertiesFormatException(Throwable c) { + initCause(c); + } + + private void writeObject(ObjectOutputStream out) + throws NotSerializableException{ + throw new NotSerializableException(); + } + + private void readObject(ObjectInputStream in) + throws NotSerializableException{ + throw new NotSerializableException(); + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/MissingFormatArgumentException.java b/sources/net.sf.j2s.java.core/unused/util/MissingFormatArgumentException.java new file mode 100644 index 000000000..eab07eb6e --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/MissingFormatArgumentException.java @@ -0,0 +1,60 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +/** + * The unchecked exception will be thrown out if there no corresponding argument + * with the specified conversion or an argument index that refers to an + * unexisting argument. + */ +public class MissingFormatArgumentException extends IllegalFormatException { + private static final long serialVersionUID = 19190115L; + + private String s; + + /** + * Constructs an MissingFormatArgumentException with the specified + * conversion that lacks the argument. + * + * @param s + * The specified conversion that lacks the argument. + */ + public MissingFormatArgumentException(String s) { + if (null == s) { + throw new NullPointerException(); + } + this.s = s; + } + + /** + * Returns the conversion associated with the exception. + * + * @return The conversion associated with the exception. + */ + public String getFormatSpecifier() { + return s; + } + + /** + * Returns the message of the exception. + * + * @return The message of the exception. + */ + public String getMessage() { + //return org.apache.harmony.luni.util.Msg.getString("K0348", s); + return "Format specifier '" + s + "'"; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/MissingFormatWidthException.java b/sources/net.sf.j2s.java.core/unused/util/MissingFormatWidthException.java new file mode 100644 index 000000000..d9ad5ca28 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/MissingFormatWidthException.java @@ -0,0 +1,61 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +/** + * The unchecked exception will be thrown out if the format width is missing but + * is required. + * + * + */ +public class MissingFormatWidthException extends IllegalFormatException { + private static final long serialVersionUID = 15560123L; + + private String s; + + /** + * Constructs a MissingFormatWidthException with the specified format + * specifier. + * + * @param s + * The specified format specifier. + */ + public MissingFormatWidthException(String s) { + if (null == s) { + throw new NullPointerException(); + } + this.s = s; + } + + /** + * Returns the format specifier associated with the exception. + * + * @return The format specifier associated with the exception. + */ + public String getFormatSpecifier() { + return s; + } + + /** + * Returns the message of the exception. + * + * @return The message of the exception. + */ + public String getMessage() { + return s; + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/MissingResourceException.java b/sources/net.sf.j2s.java.core/unused/util/MissingResourceException.java new file mode 100644 index 000000000..e00bc87b9 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/MissingResourceException.java @@ -0,0 +1,70 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + + +/** + * This runtime exception is thrown by ResourceBundle when a resouce bundle + * cannot be found or a resource is missing from a resource bundle. + * + * @see ResourceBundle + */ +public class MissingResourceException extends RuntimeException { + + private static final long serialVersionUID = -4876345176062000401L; + + String className, key; + + /** + * Constructs a new instance of this class with its walkback, message, the + * class name of the resource bundle and the name of the missing resource. + * + * @param detailMessage + * String The detail message for the exception. + * @param className + * String The class name of the resource bundle. + * @param resourceName + * String The name of the missing resource. + */ + public MissingResourceException(String detailMessage, String className, + String resourceName) { + super(detailMessage); + this.className = className; + key = resourceName; + } + + /** + * Answers the class name of the resource bundle from which a resource could + * not be found, or in the case of a missing resource, the name of the + * missing resource bundle. + * + * @return String The class name of the resource bundle. + */ + public String getClassName() { + return className; + } + + /** + * Answers the name of the missing resource, or an empty string if the + * resource bundle is missing. + * + * @return String The name of the missing resource. + */ + public String getKey() { + return key; + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/NoSuchElementException.java b/sources/net.sf.j2s.java.core/unused/util/NoSuchElementException.java new file mode 100644 index 000000000..169d85b46 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/NoSuchElementException.java @@ -0,0 +1,48 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + + +/** + * This runtime exception is thrown when trying to retrieve an element past the + * end of an Enumeration, or the first or last element from an empty Vector. + * + * @see Enumeration + * @see java.lang.RuntimeException + */ +public class NoSuchElementException extends RuntimeException { + + private static final long serialVersionUID = 6769829250639411880L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public NoSuchElementException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoSuchElementException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/TooManyListenersException.java b/sources/net.sf.j2s.java.core/unused/util/TooManyListenersException.java new file mode 100644 index 000000000..39eb57a2d --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/TooManyListenersException.java @@ -0,0 +1,48 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + + +/** + * This exception is thrown when an attempt is made to add more than one + * listener to an event source which only supports a single listener. It is also + * thrown when the same listener is added more than once. + * + * @see java.lang.Exception + */ +public class TooManyListenersException extends Exception { + + private static final long serialVersionUID = 5074640544770687831L; + + /** + * Constructs a new instance of this class with its walkback filled in. + */ + public TooManyListenersException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public TooManyListenersException(String detailMessage) { + super(detailMessage); + } + +} diff --git a/sources/net.sf.j2s.java.core/unused/util/UnknownFormatConversionException.java b/sources/net.sf.j2s.java.core/unused/util/UnknownFormatConversionException.java new file mode 100644 index 000000000..c2d4bf0a8 --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/UnknownFormatConversionException.java @@ -0,0 +1,57 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package java.util; + +/** + * The unchecked exception will be thrown out if the format conversion is + * unknown. + * + * + */ +public class UnknownFormatConversionException extends IllegalFormatException { + private static final long serialVersionUID = 19060418L; + + private String s; + + /** + * Constructs an UnknownFormatConversionException with the unknown format + * conversion. + * + * @param s + * The unknown format conversion + */ + public UnknownFormatConversionException(String s) { + this.s = s; + } + + /** + * Returns the conversion associated with the exception. + * + * @return The conversion associated with the exception. + */ + public String getConversion() { + return s; + } + + /** + * Returns the message of the exception. + * + * @return The message of the exception. + */ + public String getMessage() { + //return org.apache.harmony.luni.util.Msg.getString("K0349", s); + return "Conversion = '" + s + "'"; + } +} diff --git a/sources/net.sf.j2s.java.core/unused/util/UnknownFormatFlagsException.java b/sources/net.sf.j2s.java.core/unused/util/UnknownFormatFlagsException.java new file mode 100644 index 000000000..ac67d42fe --- /dev/null +++ b/sources/net.sf.j2s.java.core/unused/util/UnknownFormatFlagsException.java @@ -0,0 +1,59 @@ +/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package java.util; + +/** + * The unchecked exception will be thrown out if there is an unknown flag. + * + */ +public class UnknownFormatFlagsException extends IllegalFormatException { + + private static final long serialVersionUID = 19370506L; + + private String flags; + + /** + * Constructs an UnknownFormatFlagsException with the specified flags. + * + * @param f + * The specified flags. + */ + public UnknownFormatFlagsException(String f) { + if (null == f) { + throw new NullPointerException(); + } + flags = f; + } + + /** + * Returns the flags associated with the exception. + * + * @return The flags associated with the excepiton. + */ + public String getFlags() { + return flags; + } + + /** + * Returns the message associated with the exception. + * + * @return The message associated with the exception. + */ + public String getMessage() { + //return org.apache.harmony.luni.util.Msg.getString("K034a", flags); + return "The flags are " + flags; + } +} diff --git a/sources/net.sf.j2s.java.core/resources/_WASM/wasi.esm.js b/sources/net.sf.j2s.java.core/unused/wasi.esm.js similarity index 100% rename from sources/net.sf.j2s.java.core/resources/_WASM/wasi.esm.js rename to sources/net.sf.j2s.java.core/unused/wasi.esm.js