pax_global_header00006660000000000000000000000064144667145000014521gustar00rootroot0000000000000052 comment=07c6942786b6f61ab94bc289d3004ef80b1c15da jtreg-jtreg-7.3.1-1/000077500000000000000000000000001446671450000141135ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/.github/000077500000000000000000000000001446671450000154535ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/.github/workflows/000077500000000000000000000000001446671450000175105ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/.github/workflows/gradle-wrapper-validation.yml000066400000000000000000000004031446671450000252740ustar00rootroot00000000000000name: 'Validate Gradle Wrapper' on: push: branches-ignore: - master - pr/* jobs: validation: name: 'Validation' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1 jtreg-jtreg-7.3.1-1/.github/workflows/test.yml000066400000000000000000000015401446671450000212120ustar00rootroot00000000000000name: Build and Test JTReg on: push: branches-ignore: - master - pr/* jobs: linux-x64: runs-on: ubuntu-latest steps: - name: 'Check out repository' uses: actions/checkout@v3 with: fetch-depth: 1 - name: 'Set up Java Development Kit' uses: actions/setup-java@v3 with: distribution: 'oracle' java-version: '17' - name: 'Build JTReg' shell: bash run: | java --version bash make/build.sh - name: 'Run initial tests (goal: quick-test)' shell: bash env: MAKE_ARGS: quick-test HEADLESS: 1 run: | bash make/build.sh --skip-download - name: 'Run all tests (goal: test)' shell: bash env: MAKE_ARGS: test HEADLESS: 1 run: | bash make/build.sh --skip-download jtreg-jtreg-7.3.1-1/.gitignore000066400000000000000000000000531446671450000161010ustar00rootroot00000000000000/build/ /.idea/ /webrev .DS_Store .src-rev jtreg-jtreg-7.3.1-1/.hgignore000066400000000000000000000001131446671450000157110ustar00rootroot00000000000000^(build|dist)/ nbproject/private/ plugins/idea/.idea/ plugins/idea/build/ jtreg-jtreg-7.3.1-1/.hgtags000066400000000000000000000034571446671450000154020ustar00rootroot000000000000009f51ef22f00a3d5b681472cacf3ce15868073103 jtreg4.1-b01 2cf779985e18ba2f79aaec88f543be9efecf352f jtreg4.1-b02 bd7a3ed1210fa61f92f066c65d5e589e2aa26813 jtreg4.1-b03 cbc1f04a52ea2488e8dc7715fc59a5a122be9851 jtreg4.1-b04 46b8c02be3b356c7f953dbfa18246b357b5e7101 jtreg4.1-b05 d47a6e238c3e0f6d8ca1a6640c182be14c45eab2 jtreg-4.1-b06 d47a6e238c3e0f6d8ca1a6640c182be14c45eab2 jtreg4.1-b06 8ab579624a503e1df21841070ae5f869c301de8f jtreg4.1-b07 d47a6e238c3e0f6d8ca1a6640c182be14c45eab2 jtreg-4.1-b06 0000000000000000000000000000000000000000 jtreg-4.1-b06 e08a5e0b79ba57743222bbea19c0bdb142968769 jtreg4.1-b08 c54815dea64cf7b011f8473c18d54a86b9a9d5af jtreg4.1-b09 8c3179c3ebdab7df35b8e9907bd8ad8bc5a9f9f8 jtreg4.1-b10 04f40c388713f11c1cfb2094556d4b024b9ab939 jtreg4.1-b11 79705dae19e74b0693cda9ece8eaf0984159ab97 jtreg4.1-b12 5e994d1f9840ba39b82977a56e02c4f702a1dcbd jtreg4.1-b13 1159c9f96a4470dec79e6fa71b4f1a4895c4b20f jtreg4.2-b01 dbccea90c34dacf7e0824d5e3d3e9e1e930a103a jtreg4.2-b02 45590e2d6af12da44cc160764a9b552516be8440 jtreg4.2-b03 585f794e105997ab44109d70dbaa1c072b03afcc jtreg4.2-b04 4b0cd55e7741825de6ea79e9d4338d2972460678 jtreg4.2-b05 2d96b4cf02660b1580542379d77492f68d3ca73b jtreg4.2-b06 26d8a4a47674c4ca304b9e290dccca1dd1c7224f jtreg4.2-b07 cce0ac75e87864ed365a420fb836a4430421ab0f jtreg4.2-b08 684f12eef4a8c2f42afe2abe3d79eead72efcc5f jtreg4.2-b09 746c6d1328721541d3b16154c25a0179fbf53f7c jtreg4.2-b10 a13ec77e7adcc4c9ed434e664abc350abaacc045 jtreg4.2-b11 652902f7fb0ed0b4f307d61a799caf50a6e609be jtreg4.2-b12 7a38f21e077821a5015792e85b3793c90c81b866 jtreg4.2-b13 ec37d2900cd42987270f98423a60eb6297bdc37b jtreg4.2-b14 d5a9216fad5ca01002e18526be2c31cafb43e178 jtreg4.2-b15 deee95d5d8ff6406b77c0d5b9297736eb7c98c6d jtreg4.2-b16 03c4dff80b0f55865c6e5fe0aa8ea94d0ca1a2ac jtreg5.0-b01 95aa601b8100c6c56a14d35cfe493372214b1d94 jtreg5.1-b01 jtreg-jtreg-7.3.1-1/.jcheck/000077500000000000000000000000001446671450000154205ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/.jcheck/conf000066400000000000000000000010671446671450000162740ustar00rootroot00000000000000[general] project=code-tools comments=lax jbs=CODETOOLS [checks] error=author,committer,reviewers,merge,issues,executable,symlink,message,whitespace [repository] tags=jtreg(?:4\.1-b[0-9]{2}|5\.[01]-b[0-9]{2}|6|-[6789](?:\.[0-9]+)?\+[0-9]+) branches= [census] version=0 domain=openjdk.org [checks "whitespace"] files=.*\.java|.*\.m|.*\.mm|.*\.gmk|.*\.m4|.*\.ac|Makefile ignore-tabs=.*\.gmk|Makefile [checks "merge"] message=Merge [checks "reviewers"] reviewers=1 ignore=duke [checks "committer"] role=committer [checks "issues"] pattern=^(79[0-9]{5}): (\S.*)$ jtreg-jtreg-7.3.1-1/CHANGELOG.md000066400000000000000000000226451446671450000157350ustar00rootroot00000000000000## [Unreleased](https://git.openjdk.org/jtreg/compare/jtreg-7.3.1+1...master) _nothing noteworthy, yet_ ## [7.3.1](https://git.openjdk.org/jtreg/compare/jtreg-7.3+1...jtreg-7.3.1+1) * Fixed setting default environment variables on Windows * [CODETOOLS-7903515](https://bugs.openjdk.org/browse/CODETOOLS-7903515) ## [7.3](https://git.openjdk.org/jtreg/compare/jtreg-7.2+1...jtreg-7.3+1) * Updated set of default environment variables set for tests on Unix-like platforms. * Includes `DBUS_SESSION_BUS_ADDRESS`, `WAYLAND_DISPLAY`, and `XDG-*` [CODETOOLS-7903400](https://bugs.openjdk.org/browse/CODETOOLS-7903400) * Updated external dependencies. * Guice to 5.1.0 [CODETOOLS-7903468](https://bugs.openjdk.org/browse/CODETOOLS-7903468) * JCommander to 1.82 [CODETOOLS-7903469](https://bugs.openjdk.org/browse/CODETOOLS-7903469) * Fixed output-related issues. * AgentServer log() does not flush [CODETOOLS-7903470](https://bugs.openjdk.org/browse/CODETOOLS-7903470) * System.out and System.err messages are missing in jtr file when a test times out in agentvm mode [CODETOOLS-7903441](https://bugs.openjdk.org/browse/CODETOOLS-7903441) * Timeout refired %s times message confusing [CODETOOLS-7902485](https://bugs.openjdk.org/browse/CODETOOLS-7902485) * Fixed race-condition when running tests with a multi-module setup * [CODETOOLS-7903507](https://bugs.openjdk.org/browse/CODETOOLS-7903507) ## [7.2](https://git.openjdk.org/jtreg/compare/jtreg-7.1.1+1...jtreg-7.2+1) * Improved support for JUnit Jupiter. * Update jtreg to bundle JUnit 5.9.2 [CODETOOLS-7903406](https://bugs.openjdk.org/browse/CODETOOLS-7903406) * Improve reporting for errors in JUnit's lifecycle methods [CODETOOLS-7903430](https://bugs.openjdk.org/browse/CODETOOLS-7903430) * Improved support for TestNG. * Support `test.query` for TestNG tests [CODETOOLS-7903414](https://bugs.openjdk.org/browse/CODETOOLS-7903414) * Generate all debugging info when compiling `jtreg` [CODETOOLS-7903393](https://bugs.openjdk.org/browse/CODETOOLS-7903393) * RISC-V Port has been integrated into JDK mainline * Set `simpleArch` to `riscv64` when `os.arch` is `riscv64` [CODETOOLS-7903138](https://bugs.openjdk.org/browse/CODETOOLS-7903138) * Fix incorrect format for version in error message [CODETOOLS-7903398](https://bugs.openjdk.org/browse/CODETOOLS-7903398) * Add options -testThreadFactory and -testThreadFactoryPath to allow the use of a custom thread factory, to be used to create the thread to run a test. * [CODETOOLS-7903373](https://bugs.openjdk.org/browse/CODETOOLS-79033734) ## [7.1.1](https://git.openjdk.org/jtreg/compare/jtreg-7.1+1...jtreg-7.1.1+1) * Summary reporter getter is now thread-safe. * [CODETOOLS-7903390](https://bugs.openjdk.org/browse/CODETOOLS-7903390) ## [7.1](https://git.openjdk.org/jtreg/compare/jtreg-7+1...jtreg-7.1+1) * Improved support for JUnit Jupiter. * Avoid using TestNG mixed mode. [CODETOOLS-7903264](https://bugs.openjdk.org/browse/CODETOOLS-7903264) * Support JUnit tests in a system module. [CODETOOLS-7903260](https://bugs.openjdk.org/browse/CODETOOLS-7903260) * Support executing a single method. [CODETOOLS-7903267](https://bugs.openjdk.org/browse/CODETOOLS-7903267) * Improve per-class reporting of JUnit tests, in `.jtr` file. [CODETOOLS-7903324](https://bugs.openjdk.org/browse/CODETOOLS-7903324) * Support a group of "all tests", represented by `.`. * [CODETOOLS-7903331](https://bugs.openjdk.org/browse/CODETOOLS-7903331) * Improve performance when writing reports; new reporting option `-report:files`. * [CODETOOLS-7903323](https://bugs.openjdk.org/browse/CODETOOLS-7903323) * Updates for building jtreg with recent JDKs. * [CODETOOLS-7903346](https://bugs.openjdk.org/browse/CODETOOLS-7903346) * Improve OS detection on Mac. * Use `sw_vers`. [CODETOOLS-7903294](https://bugs.openjdk.org/browse/CODETOOLS-7903294) * Check process exit code. [CODETOOLS-7903325](https://bugs.openjdk.org/browse/CODETOOLS-7903325) * Trace reasons to recompile extra property definition files. * [CODETOOLS-7903329](https://bugs.openjdk.org/browse/CODETOOLS-7903329) * FAQ updates. * Time taken to run tests. [CODETOOLS-7903261](https://bugs.openjdk.org/browse/CODETOOLS-7903261) * Accessing TestNG and JUnit libraries. [CODETOOLS-7903244](https://bugs.openjdk.org/browse/CODETOOLS-7903244) ## [7](https://git.openjdk.org/jtreg/compare/jtreg-6.2+1...jtreg-7+1) * Improved support for JUnit Jupiter. * Use JUnit Platform Launcher. [CODETOOLS-7903047](https://bugs.openjdk.org/browse/CODETOOLS-7903047) * Use JUnit uber-jar. [CODETOOLS-7903055](https://bugs.openjdk.org/browse/CODETOOLS-7903055) * Support MSYS2 for building jtreg on Windows. * [CODETOOLS-7903206](https://bugs.openjdk.org/browse/CODETOOLS-7903206) * `os.simpleArch` is `x64` for `linux-loongarch64`/`mips64`/`mips64el` in `@require` context. * [CODETOOLS-7903120](https://bugs.openjdk.org/browse/CODETOOLS-7903120) * Log start time for every action. * [CODETOOLS-7903183](https://bugs.openjdk.org/browse/CODETOOLS-7903183) * Update OS version check. * [CODETOOLS-7903184](https://bugs.openjdk.org/browse/CODETOOLS-7903184) * Support invocation via ToolProvider. * [CODETOOLS-7903097](https://bugs.openjdk.org/browse/CODETOOLS-7903097) * Report `os.*` system properties in `.jtr` file. * [CODETOOLS-7903044](https://bugs.openjdk.org/browse/CODETOOLS-7903044) ## [6.2](https://git.openjdk.org/jtreg/compare/jtreg-6.1+1...jtreg-6.2+1) * Provide system property or option to override timeout. * [CODETOOLS-7903083](https://bugs.openjdk.org/browse/CODETOOLS-7903083) * Updates for building jtreg with recent JDKs. * [CODETOOLS-7903073](https://bugs.openjdk.org/browse/CODETOOLS-7903073) * Add an FAQ entry for `javatest.maxOutputSize`. * [CODETOOLS-7903050](https://bugs.openjdk.org/browse/CODETOOLS-7903050) * Allow subtest ids with dashes and underscores. * [CODETOOLS-7903037](https://bugs.openjdk.org/browse/CODETOOLS-7903037) * jtreg should print stdout if JVM gathering properties fails. * [CODETOOLS-7903030](https://bugs.openjdk.org/browse/CODETOOLS-7903030) ## [6.1](https://git.openjdk.org/jtreg/compare/jtreg-6+1...jtreg-6.1+1) * Elapsed time of `MainAction` is including serialization wait time * [CODETOOLS-7902942](https://bugs.openjdk.org/browse/CODETOOLS-7902942) * Support building jtreg with recent JDKs. * [CODETOOLS-7902966](https://bugs.openjdk.org/browse/CODETOOLS-7902966) * [CODETOOLS-7902991](https://bugs.openjdk.org/browse/CODETOOLS-7902991) * Update/improve jcheck settings for jtreg repo. * [CODETOOLS-7902995](https://bugs.openjdk.org/browse/CODETOOLS-7902995) * Introduce support for `HEADLESS` to disable tests that require a display. * jtreg should not set a security manager for JDK 18. * [CODETOOLS-7902990](https://bugs.openjdk.org/browse/CODETOOLS-7902990) ## [6](https://git.openjdk.org/jtreg/compare/jtreg5.1-b01...jtreg-6+1) * Add support for `Automatic-Module-Name` in jar files. * Update versions of jtreg dependencies. * [CODETOOLS-7902791](https://bugs.openjdk.org/browse/CODETOOLS-7902791) * User modules can be used only in othervm. * [CODETOOLS-7902707](https://bugs.openjdk.org/browse/CODETOOLS-7902707) * Improve diagnostic output when failing to get version for JDK under test. * [CODETOOLS-7902748](https://bugs.openjdk.org/browse/CODETOOLS-7902748) * Initial support for new-style version numbers for jtreg. * Improve support for `@enablePreview`. * [CODETOOLS-7902754](https://bugs.openjdk.org/browse/CODETOOLS-7902754) * Move details of environment variables to new appendix. * Add FAQ reference to `doc/testing.md`. * Add support for explicit `-retain:lastRun`. ## [5.1](https://git.openjdk.org/jtreg/compare/jtreg5.0-b01...jtreg5.1-b01) * Update AsmTools to 7.0 b08; update JT Harness to 6.0-b11. * Add `test.name` to properties given to test. * [CODETOOLS-7902671](https://bugs.openjdk.org/browse/CODETOOLS-7902671) * Pass `test.*` to `requires.extraPropDefns` classes. * [CODETOOLS-7902336](https://bugs.openjdk.org/browse/CODETOOLS-7902336) * Add mean, standard deviation to agent stats. * Report jtreg version info to work directory. * Report agent pool statistics. * Improve version details for JT Harness and AsmTools. * Log Agent Pool activity to `agent.trace` file. * Catch output written to agent stdout (fd1) and stderr (fd2). * [CODETOOLS-7902657](https://bugs.openjdk.org/browse/CODETOOLS-7902657) * Log agent activity to files in the work directory. * [CODETOOLS-7902656](https://bugs.openjdk.org/browse/CODETOOLS-7902656) * Propagate client-side "id" to agent server. * [CODETOOLS-7902655](https://bugs.openjdk.org/browse/CODETOOLS-7902655) * Support `@enablePreview`. * [CODETOOLS-7902654](https://bugs.openjdk.org/browse/CODETOOLS-7902654) * Use https://git.openjdk.java.net for CODE_TOOLS_URL. * [CODETOOLS-7902637](https://bugs.openjdk.org/browse/CODETOOLS-7902637) * Ignore specified lines in `@compile/fail/ref=`. * [CODETOOLS-7902633](https://bugs.openjdk.org/browse/CODETOOLS-7902633) * Validate test group names. * [CODETOOLS-7902606](https://bugs.openjdk.org/browse/CODETOOLS-7902606) ## [5](https://git.openjdk.org/jtreg/compare/jtreg4.2-b16...jtreg5.0-b01) * Improve Cygwin detection by relaxing constraints on expected installation directory. * Incorrect handling of paths in smart action args for Windows. * [CODETOOLS-7902571](https://bugs.openjdk.org/browse/CODETOOLS-7902571) * Introduce `test.file`. * [CODETOOLS-7902545](https://bugs.openjdk.org/browse/CODETOOLS-7902545) jtreg-jtreg-7.3.1-1/CONTRIBUTING.md000066400000000000000000000003211446671450000163400ustar00rootroot00000000000000# Contributing to JTReg JTReg is part of the OpenJDK [CodeTools] Project. Please see for how to contribute. [CodeTools]: https://openjdk.java.net/projects/code-tools jtreg-jtreg-7.3.1-1/CONTRIBUTORS000066400000000000000000000010721446671450000157730ustar00rootroot00000000000000The following people have contributed to the development of jtreg. Original Author: Iris Clark Tag Specification: Mark Reinhold Currently Maintained As Part Of: OpenJDK CodeTools Project Other Early Contributors: Brian Kurotsuchi Dawn Phillips Jessica Mauvais John Rose Maurizio Cimadamore Kumar Srinivasan Since open-sourcing the code in 2006, and the use of first Mercurial and subsequently Git, the Contributors are tracked in the SCM metadata. For all recent contributors and contributions, see `git shortlog` or `git log`. jtreg-jtreg-7.3.1-1/COPYRIGHT000066400000000000000000000017421446671450000154120ustar00rootroot00000000000000Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. This code is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 only, as published by the Free Software Foundation. This code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version 2 for more details (a copy is included in the LICENSE file that accompanied this code). You should have received a copy of the GNU General Public License version 2 along with this work; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA or visit www.oracle.com if you need additional information or have any questions. jtreg-jtreg-7.3.1-1/LICENSE000066400000000000000000000455121446671450000151270ustar00rootroot00000000000000The GNU General Public License (GPL) Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. One line to give the program's name and a brief idea of what it does. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details. The hypothetical commands 'show w' and 'show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than 'show w' and 'show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program 'Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. "CLASSPATH" EXCEPTION TO THE GPL Certain source files distributed by Oracle America and/or its affiliates are subject to the following clarification and special exception to the GPL, but only where Oracle has expressly included in the particular source file's header the words "Oracle designates this particular file as subject to the "Classpath" exception as provided by Oracle in the LICENSE file that accompanied this code." Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. jtreg-jtreg-7.3.1-1/README.md000066400000000000000000000017661446671450000154040ustar00rootroot00000000000000# The Regression Test Harness for the OpenJDK platform: `jtreg` * For details on writing tests for `jtreg`, see [The JDK Test Framework: Tag Language Specification][tagspec]. * For details on building `jtreg`, see [doc/building.md](doc/building.md). * For additional details about `jtreg`, see [The `jtreg` FAQ][faq]. * For details on running JDK tests using the JDK _make test_ framework, see [Using "make test" (the run-test framework)][make-test]. [faq]: https://openjdk.java.net/jtreg/faq.html [tagspec]: https://openjdk.java.net/jtreg/tag-spec.html [make-test]: https://github.com/openjdk/jdk/blob/master/doc/testing.md ## Using IntelliJ IDEA The `jtreg` repo also contains a plugin for the IntelliJ IDEA IDE. This is a convenience plugin which adds `jtreg` capabilities to the IDE. With this plugin, OpenJDK developers can write, run, and debug `jtreg` tests without leaving their IDE environment. For more details, see the file [plugins/idea/README.md](plugins/idea/README.md) in this repo. jtreg-jtreg-7.3.1-1/doc/000077500000000000000000000000001446671450000146605ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/doc/building.md000066400000000000000000000137571446671450000170140ustar00rootroot00000000000000# Building The Regression Test Harness for the OpenJDK platform: `jtreg` (This information is also available at ) `jtreg` depends on a number of external components: JT Harness, TestNG, JUnit, AsmTools, and JCov. The fundamental way to build `jtreg` is with GNU make, specifying where to find those external components, but a script is also available that will download appropriate copies of those components before building `jtreg`. ## Building `jtreg` with the `build.sh` script This is the recommended way to build `jtreg`, for those that want a simple, basic way to build `jtreg`. *Note:* The _build.sh_ script supersedes the earlier _build-all.sh_ script. The script is intended to be run in a Unix-like shell, such as `bash` on Linux or Mac OS X, or with Cygwin, MSYS2, or WSL on Windows. At a minimum, you must either set the `JAVA_HOME` environment variable or specify the location of the JDK to be used to build `jtreg` with the `--jdk` command-line option. It must be a recent build of JDK 11 or later. % cd jtreg-root-directory % sh make/build.sh --jdk JDK-directory If your shell is not compatible with `bash`, you may need to invoke `bash` explicitly: % bash make/build.sh --jdk JDK-directory The script will create a `build` sub-directory, download and build dependencies, and finally build `jtreg` itself. The resulting image will be in _build/images/jtreg_ . If you have access to the public Internet, no environment variables need to be specified to get a standard build of `jtreg`. However, you can set environment variables used to define the location of dependencies to be downloaded. These are documented in _make/build.sh_ and are normally specified in _make/build-support/version-numbers_ and _make/build-support/*/version-numbers_ . ## Building `jtreg` with GNU Make If you don't want to use `build.sh` to build `jtreg`, you can invoke the makefile directly, or by writing and using your own alternative wrapper. The makefiles require a number of variables to be set, identifying the parts of all the dependencies. In general, there are two kinds of variable to be set for each dependency: the location of any jar files that may be required to use the component, and the location of any "legal notices" (such as license files) that may need to be included in the `jtreg` image. There are five dependencies that need to be made available. The following lists the variables that need to be set for each dependency. 1. [JT Harness] (JavaTest) * `JAVATEST_JAR`: a jar file containing the classes for JT Harness * `JTHARNESS_NOTICES`: any legal notices that may be required to use JT Harness 2. [AsmTools] * `ASMTOOLS_JAR`: a jar file containing the classes for AsmTools * `ASMTOOLS_NOTICES`: any legal notices that may be required to use AsmTools 3. [JCov] * `JCOV_JAR`: a jar file containing the main set classes for JCov tools * `JCOV_NETWORK_SAVER_JAR`: a jar file containing the classes to inject into a JVM to save coverage information * `JCOV_NOTICES`: any legal notices that may be required to use JCov 4. [JUnit] * `JUNIT_JARS`: a list of one or more jar files containing the classes for JUnit and its dependencies: the list may be a series of jar files or a singleton "uber-jar" * `JUNIT_NOTICES`: any legal notices that be required to use JUnit Consult the JUnit documentation to see if there are any additional dependencies that may be required when running JUnit. 5. [TestNG] * `TESTNG_JARS`: a list of one or more jar files containing the classes for TestNG and its dependencies: the list may be a series of jar files or a singleton "uber-jar" * `TESTNG_NOTICES`: any legal notices that be required to use TestNG Consult the TestNG documentation to see if there are any additional dependencies that may be required when running TestNG. In general, any jar files identified by `*_JAR` or `*_JARS` variables will be copied to the `lib` directory in the generated image. Any files identified by `*_NOTICES` variables will be copied to a component-specific subdirectory of the `legal` directory in the generated image. [AsmTools]: https://github.com/openjdk/asmtools [JCov]: https://github.com/openjdk/jcov [JT Harness]: https://github.com/openjdk/jtharness [JUnit]: https://junit.org/ [TestNG]: https://testng.org/ ## Running `jtreg` Self-Tests The tests can be invoked with individual make targets, or collectively via the `test` target. Some tests depend on specific versions of JDK being available, specified by the following variables: `JDK8HOME`, `JDK9HOME`, `JDK14HOME`, `JDK18HOME`. A test that requires any of these version of JDK will be skipped if the variable is not set. Some of the tests need to pop up windows while they execute. No interaction with these windows is normally required. Since this can be a problem on a headless server machine, and an annoyance on a personal workstation, the tests will attempt to use VNC to create a dummy X-server for use by the tests while they are running. Various implementations of VNC are available, such as from . Using VNC is optional; it is not required in order to run the tests. By default, VNC will be used if `vncserver` is found on your execution path, or if VNC_HOME points to an installed copy of VNC. To explicitly disable the use of VNC, set the VNC environment variable to one of false, off, no, or 0. Unless explicitly disabled, the tests will check the following: * You must have a password set in _$HOME/.vnc/passwd_. This is the standard location used by the vncserver command. * If you set the environment variable `VNC_HOME`, it will be prepended to your execution path to find vncserver. * vncserver must be on your execution path, after `VNC_HOME` has been added, if set. If the tests find any issue with using VNC, it will not be used. If VNC is used to create a dummy X server, the server will be terminated when the test is complete. The logic for using VNC is encapsulated within the script _make/display.sh_. jtreg-jtreg-7.3.1-1/make/000077500000000000000000000000001446671450000150305ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/make/CheckJavaOSVersion.java000066400000000000000000000041411446671450000213220ustar00rootroot00000000000000/* * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /** * Checks the value of System.getProperty("os.version") against an expected value. * For more info, see * JDK-8253702: BigSur version number reported as 10.16, should be 11.nn * https://bugs.openjdk.java.net/browse/JDK-8253702 */ public class CheckJavaOSVersion { public static void main(String... args) { checkJavaOSVersion(args[0]); } private static void checkJavaOSVersion(String expectVersion) { String osVersion = System.getProperty("os.version"); if (!osVersion.startsWith(expectVersion)) { System.err.println("The version of JDK you are using does not report the OS version correctly."); System.err.println(" java.home: " + System.getProperty("java.home")); System.err.println(" java.version: " + System.getProperty("java.version")); System.err.println(" os.version: " + osVersion + " (expected: " + expectVersion + ")"); System.err.println("Use a more recent update of this version of JDK, or a newer version of JDK."); System.exit(1); } } }jtreg-jtreg-7.3.1-1/make/Defs.gmk000066400000000000000000000154641446671450000164230ustar00rootroot00000000000000# # Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # include host-specific defs, if any -include Defs-$(shell hostname).gmk # TOPDIR = .. # now set in Makefile ABSTOPDIR = $(shell cd $(TOPDIR); pwd) # clobber settings from user's environment JAVA_HOME= CLASSPATH= JAVA_COMPILER= LD_LIBRARY_PATH= #---------------------------------------------------------------------- # # Support for Cygwin and MSYS2 (which may identify as MSYS, MINGW32 or MINGW64 (the default)) SYSTEM_UNAME := $(shell uname) # Where is unwanted output to be delivered? # On Windows, MKS uses the special file "NUL", cygwin uses the customary unix file. ifeq ($(SYSTEM_UNAME), Windows_NT) DEV_NULL = NUL else DEV_NULL = /dev/null endif ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME))) USING_CYGWIN = true USING_CYGWIN_OR_USING_MSYS = true endif ifneq (,$(findstring MSYS,$(SYSTEM_UNAME))$(findstring MINGW,$(SYSTEM_UNAME))) USING_MSYS = true USING_CYGWIN_OR_USING_MSYS = true endif ifdef USING_CYGWIN_OR_USING_MSYS define FullPath $(shell cygpath -a -m $1 2> $(DEV_NULL)) endef define PosixPath $(shell cygpath -a -u $1 2> $(DEV_NULL)) endef else define FullPath $(abspath $1) endef define PosixPath $1 endef endif ifndef BUILDDIR BUILDDIR = $(TOPDIR)/build endif override BUILDDIR := $(call FullPath, $(BUILDDIR)) override JDKHOME := $(call FullPath, $(JDKHOME)) BUILDTESTDIR=$(BUILDDIR)/test #---------------------------------------------------------------------- # # Parameters to control what to build and test with. # Notices are optional or may be empty # The following are not optional ... ifndef JDKHOME $(error JDKHOME not set) endif ifndef JAVATEST_JAR $(error JAVATEST_JAR not set) endif ifndef ASMTOOLS_JAR $(error ASMTOOLS_JAR not set) endif ifndef JUNIT_JARS $(error JUNIT_JARS not set) endif ifndef TESTNG_JARS $(error TESTNG_JARS not set) endif # derived values JDKJAVA = $(JDKHOME)/bin/java JDKJAVAC = $(JDKHOME)/bin/javac JAR = $(JDKHOME)/bin/jar AGENT_JAVAC_SOURCE_TARGET = --release 8 TOOL_JAVAC_SOURCE_TARGET = --release 11 REGTEST_TOOL_PATCH_JAVA_BASE_OPTIONS = --patch-module java.base=$(JAVADIR) # for files needed to run agentvm and othervm tests (on platforms back to JDK 8) REGTEST_AGENT_JAVAC = $(JDKHOME)/bin/javac REGTEST_AGENT_JAVAC_OPTIONS = \ $(AGENT_JAVAC_SOURCE_TARGET) -Xlint:all,-options,-deprecation -Werror # for files needed for jtreg tool REGTEST_TOOL_JAVAC = $(JDKHOME)/bin/javac REGTEST_TOOL_JAVAC_OPTIONS = \ $(TOOL_JAVAC_SOURCE_TARGET) -Xlint:all,-options,-deprecation -Werror #----- Unix commands AWK = /usr/bin/awk CAT = /bin/cat CHMOD = /bin/chmod CP = /bin/cp DIFF = /usr/bin/diff ECHO = /bin/echo FIND = /usr/bin/find GREP := $(shell if [ -r /bin/grep ]; then echo /bin/grep ; else echo /usr/bin/grep ; fi ) LN = /bin/ln LS = /bin/ls MKDIR = /bin/mkdir MV = /bin/mv PANDOC := $(shell if [ -r /usr/bin/pandoc ]; then \ echo /usr/bin/pandoc ; \ elif [ -r /usr/local/bin/pandoc ]; then \ echo /usr/local/bin/pandoc ; \ elif [ -r /opt/homebrew/bin/tidy ]; then \ echo /opt/homebrew/bin/pandoc ; \ else \ echo /bin/echo "pandoc not available" ; \ fi ) PERL = /usr/bin/perl PRINTF = /usr/bin/printf RM = /bin/rm -rf SED := $(shell if [ -r /bin/sed ]; then echo /bin/sed ; else echo /usr/bin/sed ; fi ) SH = /bin/sh SORT = /usr/bin/sort TEST = /usr/bin/test ifeq ($(SYSTEM_UNAME), Darwin) TIDY := $(shell if [ -r /usr/local/bin/tidy ]; then \ echo /usr/local/bin/tidy ; \ elif [ -r /opt/homebrew/bin/tidy ]; then \ echo /opt/homebrew/bin/tidy ; \ else \ echo /usr/bin/tidy ; \ fi ) else TIDY = /usr/bin/tidy endif TOUCH = /usr/bin/touch UNZIP = /usr/bin/unzip WC = /usr/bin/wc ZIP = /usr/bin/zip #---------------------------------------------------------------------- # # Identification of parts of the system SRCDIR = $(TOPDIR)/src JAVADIR = $(SRCDIR)/share/classes SRCDOCDIR = $(SRCDIR)/share/doc SRCJTDOCDIR = $(SRCDIR)/share/doc/javatest SRCJTREGDOCDIR = $(SRCDIR)/share/doc/javatest/regtest SRCSHAREBINDIR = $(SRCDIR)/share/bin TESTDIR = $(TOPDIR)/test CLASSDIR = $(BUILDDIR)/classes ABSCLASSDIR = $(cd $(CLASSDIR); pwd) IMAGES_DIR = $(BUILDDIR)/images JTREG_IMAGEDIR = $(IMAGES_DIR)/jtreg JTREG_IMAGEDOCDIR = $(JTREG_IMAGEDIR)/doc JTREG_IMAGEJARDIR = $(JTREG_IMAGEDIR)/lib ABS_JTREG_IMAGEJARDIR = $(shell cd $(JTREG_IMAGEJARDIR); pwd) # source bundle locations IMAGESRC_SRCDIR = $(IMAGESRC_TOPDIR)/src/share/classes #---------------------------------------------------------------------- # # Version tags # # BUILD_* variables are normally set (overridden) by RE builds BUILD_VERSION = 5.2 BUILD_MILESTONE = dev BUILD_NUMBER = b00 # don't eval dates here directly, because that leads to unstable builds #BUILD_YEAR:sh = /bin/date +"%Y" BUILD_YEAR_CMD = /bin/date '+%Y' #BUILD_DOCDATE:sh = /bin/date +"%B %d, %Y" BUILD_DOCDATE_CMD = /bin/date +'%B %d, %Y' #BUILD_ZIPDATE:sh = /bin/date '+%d %h %Y' BUILD_ZIPDATE_CMD = /bin/date '+%d %h %Y' BUILD_NONFCS_MILESTONE_sh = echo $(BUILD_MILESTONE) | sed -e 's/[fF][cC][sS]//' BUILD_NONFCS_MILESTONE = $(BUILD_NONFCS_MILESTONE_sh:sh) # munge the BUILD values suitable for use in the bundle name ZIPSFX_VERSION_sh = echo '$(BUILD_VERSION)' | sed -e 's|\([^0-9][^0-9]*\)|_|g' ZIPSFX_MILESTONE_sh = echo '$(BUILD_MILESTONE)' ZIPSFX_BUILD_sh = echo '$(BUILD_NUMBER)' ZIPSFX_NEWBUILD_sh = echo '$(BUILD_NUMBER)' | sed -e 's|[^[0-9]||g' | xargs printf "%d" ZIPSFX_DATE_sh = echo "`$(BUILD_ZIPDATE_CMD)`" | /usr/bin/tr -s '[A-Z] ' '[a-z]_' VERBOSE_ZIP_SUFFIX = $(shell $(ZIPSFX_VERSION_sh))-$(shell $(ZIPSFX_MILESTONE_sh))-bin-$(shell $(ZIPSFX_BUILD_sh))-$(shell $(ZIPSFX_DATE_sh)) ifdef BUILD_MILESTONE NEW_VERBOSE_ZIP_SUFFIX = $(BUILD_VERSION)-$(BUILD_MILESTONE)+$(shell $(ZIPSFX_NEWBUILD_sh))_bin else NEW_VERBOSE_ZIP_SUFFIX = $(BUILD_VERSION)+$(shell $(ZIPSFX_NEWBUILD_sh))_bin endif jtreg-jtreg-7.3.1-1/make/Makefile000066400000000000000000000067071446671450000165020ustar00rootroot00000000000000# # Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # TOPDIR = .. include Defs.gmk include Platform.gmk default: build all: build test #---------------------------------------------------------------------- include jtdiff.gmk include jtreg.gmk include $(TOPDIR)/test/*.gmk include $(TOPDIR)/test/*/*.gmk include Rules.gmk build: $(BUILDFILES) test: checkJavaOSVersion $(BUILDTESTDIR) $(INITIAL_TESTS) $(TESTS) $(FINAL_TESTS) count=`echo $+ | wc -w` ; \ echo "All ($${count}) selected tests completed successfully" quick-test: checkJavaOSVersion $(BUILDTESTDIR) $(INITIAL_TESTS) count=`echo $+ | wc -w` ; \ echo "All ($${count}) selected tests completed successfully" images: $(VERBOSEZIPFILES) new-images: $(NEWVERBOSEZIPFILES) clean: $(RM) $(BUILDDIR) clean-except-deps: for i in $(BUILDDIR)/* ; do \ case $$i in \ */deps ) ;; \ * ) $(RM) $$i ;; \ esac \ done clean-deps: $(RM) $(BUILDDIR)/deps clean-tests: $(RM) $(BUILDTESTDIR) .NO_PARALLEL: clean clean-except-deps clean-deps clean-tests sanity: ifdef JDK8HOME @echo "JDK8HOME = $(JDK8HOME)" endif ifdef JDK9HOME @echo "JDK9HOME = $(JDK9HOME)" endif ifdef JDK14HOME @echo "JDK14HOME = $(JDK14HOME)" endif ifdef JDK18HOME @echo "JDK18HOME = $(JDK18HOME)" endif @echo "JDKHOME = $(JDKHOME)" @echo "JAVATEST_HOME = $(JAVATEST_HOME)" ifneq ($(JTHARNESS_HOME), $(JAVATEST_HOME)) @echo "JTHARNESS_HOME = $(JTHARNESS_HOME)" endif @echo "JTHARNESS_NOTICES = $(JTHARNESS_NOTICES)" @echo "ASMTOOLS_JAR = $(ASMTOOLS_JAR)" @echo "ASMTOOLS_NOTICES = $(ASMTOOLS_NOTICES)" @echo "JUNIT_JARS = $(JUNIT_JARS)" @echo "JUNIT_NOTICES = $(JUNIT_NOTICES)" @echo "TESTNG_JARS = $(TESTNG_JARS)" @echo "TESTNG_NOTICES = $(TESTNG_NOTICES)" @echo "BUILD_VERSION = $(BUILD_VERSION)" @echo "BUILD_MILESTONE = $(BUILD_MILESTONE)" @echo "BUILD_NUMBER = $(BUILD_NUMBER)" #---------------------------------------------------------------------- $(BUILDTESTDIR): $(MKDIR) -p $@ #---------------------------------------------------------------------- checkJavaOSVersion: ifeq ($(OS_NAME), macosx) $(JDKJAVA) CheckJavaOSVersion.java $(OS_VERSION) endif #---------------------------------------------------------------------- .PHONY: default all build test images new-images clean sanity jtreg-jtreg-7.3.1-1/make/Platform.gmk000066400000000000000000000134641446671450000173240ustar00rootroot00000000000000# # Copyright (c) 1995, 2022, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # This file is an extract from jdk/test/Makefile to model the logic # for determining the platform keys used for ProblemList.txt CUT = cut UNAME = uname # Get OS name from uname UNAME_S := $(shell $(UNAME) -s) # Commands to run on paths to make mixed paths for java on windows GETMIXEDPATH=$(ECHO) # Location of developer shared files SLASH_JAVA = /java # path separator PS = : # Platform specific settings ifeq ($(UNAME_S), SunOS) OS_NAME = solaris OS_ARCH := $(shell $(UNAME) -p) OS_VERSION := $(shell $(UNAME) -r) endif ifeq ($(UNAME_S), Linux) OS_NAME = linux OS_ARCH := $(shell $(UNAME) -m) # Check for unknown arch, try uname -p if uname -m says unknown ifeq ($(OS_ARCH),unknown) OS_ARCH := $(shell $(UNAME) -p) endif OS_VERSION := $(shell $(UNAME) -r) endif ifeq ($(UNAME_S), Darwin) OS_NAME = macosx OS_ARCH := $(shell $(UNAME) -m) OS_VERSION := $(shell defaults read loginwindow SystemVersionStampAsString) endif ifeq ($(OS_NAME),) OS_NAME = windows # GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always # return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead. ifeq ($(PROCESSOR_IDENTIFIER),) PROC_ARCH:=$(shell $(UNAME) -m) else PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER)) endif OS_ARCH:=$(PROC_ARCH) SLASH_JAVA = J: EXESUFFIX = .exe # These need to be different depending on MKS or CYGWIN ifeq ($(findstring cygdrive,$(shell (cd C:/ && pwd))), ) GETMIXEDPATH = dosname -s OS_VERSION := $(shell $(UNAME) -r) else GETMIXEDPATH = cygpath -m -s OS_VERSION := $(shell $(UNAME) -s | $(CUT) -d'-' -f2) endif PS = ; endif EMPTY := SPACE := $(EMPTY) $(EMPTY) AS_CLASSPATH = $(subst $(SPACE),$(PS),$(strip $1)) # Only want major and minor numbers from os version OS_VERSION := $(shell $(ECHO) "$(OS_VERSION)" | $(CUT) -d'.' -f1,2) # Name to use for x86_64 arch (historically amd64, but should change someday) #OS_ARCH_X64_NAME:=amd64 OS_ARCH_X64_NAME:=x64 # Alternate arch names (in case this arch is known by a second name) # PROBLEM_LISTS may use either name. #OS_ARCH2-amd64:=x64 OS_ARCH2-x64:=amd64 # Try and use the arch names consistently OS_ARCH:=$(patsubst x64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst X64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst AMD64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst amd64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst x86_64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst 8664,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst EM64T,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst em64t,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst intel64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst Intel64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst INTEL64,$(OS_ARCH_X64_NAME),$(OS_ARCH)) OS_ARCH:=$(patsubst IA64,ia64,$(OS_ARCH)) OS_ARCH:=$(patsubst X86,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst x86,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst i386,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst i486,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst i686,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst 386,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst 486,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst 586,i586,$(OS_ARCH)) OS_ARCH:=$(patsubst 686,i586,$(OS_ARCH)) # Default ARCH_DATA_MODEL settings ARCH_DATA_MODEL-i586 = 32 ARCH_DATA_MODEL-$(OS_ARCH_X64_NAME) = 64 ARCH_DATA_MODEL-ia64 = 64 ARCH_DATA_MODEL-sparc = 32 ARCH_DATA_MODEL-sparcv9 = 64 # If ARCH_DATA_MODEL is not defined, try and pick a reasonable default ifndef ARCH_DATA_MODEL ARCH_DATA_MODEL:=$(ARCH_DATA_MODEL-$(OS_ARCH)) endif ifndef ARCH_DATA_MODEL ARCH_DATA_MODEL=32 endif # Platform directory name PLATFORM_OS = $(OS_NAME)-$(OS_ARCH) # Check ARCH_DATA_MODEL, adjust OS_ARCH accordingly on solaris ARCH_DATA_MODEL_ERROR= \ ARCH_DATA_MODEL=$(ARCH_DATA_MODEL) cannot be used with $(PLATFORM_OS) ifeq ($(ARCH_DATA_MODEL),64) ifeq ($(PLATFORM_OS),solaris-i586) OS_ARCH=$(OS_ARCH_X64_NAME) endif ifeq ($(PLATFORM_OS),solaris-sparc) OS_ARCH=sparcv9 endif ifeq ($(OS_ARCH),i586) x:=$(warning "WARNING: $(ARCH_DATA_MODEL_ERROR)") endif ifeq ($(OS_ARCH),sparc) x:=$(warning "WARNING: $(ARCH_DATA_MODEL_ERROR)") endif else ifeq ($(ARCH_DATA_MODEL),32) ifeq ($(OS_ARCH),$(OS_ARCH_X64_NAME)) x:=$(warning "WARNING: $(ARCH_DATA_MODEL_ERROR)") endif ifeq ($(OS_ARCH),ia64) x:=$(warning "WARNING: $(ARCH_DATA_MODEL_ERROR)") endif ifeq ($(OS_ARCH),sparcv9) x:=$(warning "WARNING: $(ARCH_DATA_MODEL_ERROR)") endif else x:=$(warning "WARNING: $(ARCH_DATA_MODEL_ERROR)") endif endif # Alternate OS_ARCH name (defaults to OS_ARCH) OS_ARCH2:=$(OS_ARCH2-$(OS_ARCH)) ifeq ($(OS_ARCH2),) OS_ARCH2:=$(OS_ARCH) endif jtreg-jtreg-7.3.1-1/make/Rules.gmk000066400000000000000000000100421446671450000166170ustar00rootroot00000000000000# # Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # #--------------------------------------------------------------------- # # Copy resources (*.properties) into classes directory from source tree $(CLASSDIR)/%.properties: $(JAVADIR)/%.properties $(RM) -f $@ $(MKDIR) -p $(@D) $(CP) $(@:$(CLASSDIR)/%=$(JAVADIR)/%) $@ $(CLASSDIR)/%.gif: $(JAVADIR)/%.gif $(RM) -f $@ $(MKDIR) -p $(@D) $(CP) $(@:$(CLASSDIR)/%=$(JAVADIR)/%) $@ $(CLASSDIR)/%.png: $(JAVADIR)/%.png $(RM) -f $@ $(MKDIR) -p $(@D) $(CP) $(@:$(CLASSDIR)/%=$(JAVADIR)/%) $@ $(CLASSDIR)/META-INF/services/%: $(JAVADIR)/META-INF/services/% $(RM) -f $@ $(MKDIR) -p $(@D) $(CP) $(@:$(CLASSDIR)/%=$(JAVADIR)/%) $@ #--------------------------------------------------------------------- $(CLASSDIR) $(BUILDDIR) $(BUILDDIR)/testClasses $(BUILDDIR)/testWork $(BUILDDIR)/testReport: $(MKDIR) -p $@ #---------------------------------------------------------------------- # # Build a JAR file containing the contents of any classes/* files # listed in the FILES.JAR.% # default copyright; override as necessary JAR_COPYRIGHT = -C $(TOPDIR) COPYRIGHT $(IMAGES_DIR)/%.jar: pkgsToFiles.sh $(RM) $@ $(@:$(IMAGES_DIR)/%.jar=$(BUILDDIR)/jarData/%) $(MKDIR) -p $(@D) $(MKDIR) -p $(@:$(IMAGES_DIR)/%.jar=$(BUILDDIR)/jarData/%) ( if [ -n "$(JAR_MAINCLASS)" ]; then echo "Main-class: $(JAR_MAINCLASS)" ; fi ; \ if [ -n "$(JAR_CLASSPATH)" ]; then echo "Class-Path: $(JAR_CLASSPATH)" ; fi ; \ echo "$(@F:%.jar=%)-Name: $(@F:%.jar=%)" ; \ if [ -n "$(BUILD_VERSION_STRING)" ]; then echo "$(@F:%.jar=%)-VersionString: $(BUILD_VERSION_STRING)" ; fi ; \ echo "$(@F:%.jar=%)-Version: $(BUILD_VERSION)" ; \ echo "$(@F:%.jar=%)-Milestone: $(BUILD_MILESTONE)" ; \ echo "$(@F:%.jar=%)-Build: $(BUILD_NUMBER)" ; \ echo "$(@F:%.jar=%)-BuildJavaVersion: `$(JDKJAVA) -fullversion 2>&1 | awk '{print $$NF}' | \ sed -e 's|^"\(.*\)"$$|Java(TM) 2 SDK, Version \1|'`" ; \ echo "$(@F:%.jar=%)-BuildDate: `/bin/date +'%B %d, %Y'`" ; \ ) \ > $(@:$(IMAGES_DIR)/%.jar=$(BUILDDIR)/jarData/%/manifest.txt) sh pkgsToFiles.sh $(CLASSDIR) $($(@F:%.jar=PKGS.JAR.%)) > $(@:$(IMAGES_DIR)/%.jar=$(BUILDDIR)/jarData/%/includes.txt) $(JAR) -cmf $(@:$(IMAGES_DIR)/%.jar=$(BUILDDIR)/jarData/%/manifest.txt) $@ \ $(JAR_COPYRIGHT) \ @$(@:$(IMAGES_DIR)/%.jar=$(BUILDDIR)/jarData/%/includes.txt) \ $(patsubst $(CLASSDIR)/%,-C $(CLASSDIR) %,$(sort $(FILES.JAR.$(@F:%.jar=%)))) \ $(JAR_EXTRAS) $(CHMOD) a-w $@ #---------------------------------------------------------------------- # # Build zips with verbose names %-$(VERBOSE_ZIP_SUFFIX).zip: %.zip $(CP) $(@:%-$(VERBOSE_ZIP_SUFFIX).zip=%.zip) $@ %-$(NEW_VERBOSE_ZIP_SUFFIX).zip: %.zip $(RM) $@ $(LN) $(@:%-$(NEW_VERBOSE_ZIP_SUFFIX).zip=%.zip) $@ #---------------------------------------------------------------------- # # cancel implicit rules %: %.o %: %.obj %: %.dll %: %.c %: %.cc %: %.cpp %: %.C %: %.p %: %.f %: %.s %: %.F %: %.r %: %.S %: %.mod %: %.sh jtreg-jtreg-7.3.1-1/make/build-support/000077500000000000000000000000001446671450000176415ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/make/build-support/asmtools/000077500000000000000000000000001446671450000215025ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/make/build-support/asmtools/build.sh000066400000000000000000000057031446671450000231420ustar00rootroot00000000000000#!/bin/bash # # Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # mydir="$(dirname ${BASH_SOURCE[0]})" log_module="$(basename "${BASH_SOURCE[0]}")" . "${mydir}/../build-common.sh" . "${mydir}/version-numbers" ASMTOOLS_SRC_TAG="${ASMTOOLS_SRC_TAG:-${DEFAULT_ASMTOOLS_SRC_TAG}}" ASMTOOLS_SRC_ARCHIVE_CHECKSUM="${ASMTOOLS_SRC_ARCHIVE_CHECKSUM:-${DEFAULT_ASMTOOLS_SRC_ARCHIVE_CHECKSUM}}" ANT_VERSION="${ANT_VERSION:-${DEFAULT_ANT_VERSION}}" ANT_ARCHIVE_CHECKSUM="${ANT_ARCHIVE_CHECKSUM:-${DEFAULT_ANT_ARCHIVE_CHECKSUM}}" setup_ant setup_asmtools_src() { check_arguments "${FUNCNAME}" 1 $# local dir="$1" local ASMTOOLS_LOCAL_SRC_ARCHIVE="${dir}/../source.zip" if [ "${ASMTOOLS_SRC_TAG}" = "tip" -o "${ASMTOOLS_SRC_TAG}" = "master" ]; then local BRANCH="master" get_archive_no_checksum "${CODE_TOOLS_URL_BASE}/asmtools/archive/${BRANCH}.zip" "${ASMTOOLS_LOCAL_SRC_ARCHIVE}" "${dir}" ASMTOOLS_SRC_DIR="${dir}/asmtools-${BRANCH}" else get_archive "${CODE_TOOLS_URL_BASE}/asmtools/archive/${ASMTOOLS_SRC_TAG}.zip" "${ASMTOOLS_LOCAL_SRC_ARCHIVE}" "${dir}" "${ASMTOOLS_SRC_ARCHIVE_CHECKSUM}" ASMTOOLS_SRC_DIR="${dir}/asmtools-${ASMTOOLS_SRC_TAG}" fi } build_asmtools() { check_arguments "${FUNCNAME}" 0 $# local ASMTOOLS_SRC_DIR_BASE="${BUILD_DIR}/src" setup_asmtools_src "${ASMTOOLS_SRC_DIR_BASE}" local ASMTOOLS_DIST="${BUILD_DIR}/build" "${ANT}" -DBUILD_DIR="$(native_path "${ASMTOOLS_DIST}")" -f "$(native_path "${ASMTOOLS_SRC_DIR}/build/build.xml")" ASMTOOLS_JAR="${ASMTOOLS_DIST}/binaries/lib/asmtools.jar" ASMTOOLS_LICENSE="${ASMTOOLS_SRC_DIR}/LICENSE" } build_asmtools if [ ! x"$BUILD_RESULTS_FILE" = x"" ]; then mkdir -p "$(dirname "${BUILD_RESULTS_FILE}")" cat > "${BUILD_RESULTS_FILE}" << EOF ASMTOOLS_JAR="${ASMTOOLS_JAR}" ASMTOOLS_LICENSE="${ASMTOOLS_LICENSE}" EOF fi jtreg-jtreg-7.3.1-1/make/build-support/asmtools/version-numbers000066400000000000000000000025611446671450000245670ustar00rootroot00000000000000# # Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # DEFAULT_ASMTOOLS_SRC_TAG=7.0-b09 DEFAULT_ASMTOOLS_SRC_ARCHIVE_CHECKSUM=604f5e1aad1912968781dc72a1f86043e4e2dc20 DEFAULT_ANT_VERSION=1.10.8 DEFAULT_ANT_ARCHIVE_CHECKSUM=dbe187ce2963f9df8a67de8aaff3b0a437d06978 jtreg-jtreg-7.3.1-1/make/build-support/build-common.sh000066400000000000000000000200421446671450000225600ustar00rootroot00000000000000# # Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # log_message() { local level="$1" shift echo "[${log_module}][${level}] $@" } error() { log_message "ERROR" "$@" } info() { log_message "INFO" "$@" } ## # Helper used to ensure the correct number of arguments is passed to bash functions check_arguments() { local name="$1" local expected="$2" local actual="$3" if [ ! "${expected}" = "${actual}" ]; then error "Incorrect number of arguments to function '${name}' (expecting ${expected} but got ${actual})" exit 1 fi } ## # Print an absolute path abspath() { check_arguments "${FUNCNAME}" 1 $# local path="$1" if [[ ${path} = /* ]]; then echo "${path}" else echo "$PWD/${path}" fi } ## # Set up the checksum tool to use # setup_shasum() { if [ -n "${SHASUM:-}" ]; then return fi if [ -n "$(which sha1sum)" ]; then SHASUM="sha1sum" SHASUM_OPTIONS="" elif [ -n "$(which shasum)" ]; then SHASUM="shasum" SHASUM_OPTIONS="-a 1" else error "Can't find shasum or sha1sum" exit 1 fi } native_path() { check_arguments "${FUNCNAME}" 1 $# if [ $CYGWIN_OR_MSYS -eq 1 ]; then echo $(cygpath -w $1); else echo "$1"; fi } mixed_path() { check_arguments "${FUNCNAME}" 1 $# if [ $CYGWIN_OR_MSYS -eq 1 ]; then echo $(cygpath -m $1); else echo "$1"; fi } ## # Download a file using wget # # wget options can be provided through the WGET_OPTIONS environment # variable # download_using_wget() { check_arguments "${FUNCNAME}" 2 $# local url="$1" local destfile="$2" set +e "${WGET}" ${WGET_OPTIONS} "${url}" -O "${destfile}" ret=$? if [ ! ${ret} = 0 ]; then error "wget exited with exit code ${ret}" exit 1 fi set -e } ## # Download a file using curl # # curl options can be provided through the CURL_OPTIONS environment # variable # download_using_curl() { check_arguments "${FUNCNAME}" 2 $# local url="$1" local destfile="$2" set +e "${CURL}" ${CURL_OPTIONS} "${url}" -o "${destfile}" ret=$? if [ ! ${ret} = 0 ]; then error "curl exited with exit code ${ret}" exit 1 fi set -e } ## # Download a file # # Will attempt to skip the download if the SKIP_DOWNLOAD environment # variable is set and the destination file already exists # download() { check_arguments "${FUNCNAME}" 2 $# local url="$1" local destfile="$2" if [ "${SKIP_DOWNLOAD:-}" != "" -a -r "${destfile}" ]; then info "Skipping download of ${url}..." return fi info "Downloading ${url} to ${destfile}" mkdir -p "$(dirname "${destfile}")" if [ -n "${WGET}" ]; then download_using_wget "${url}" "${destfile}" elif [ -n "${CURL}" ]; then download_using_curl "${url}" "${destfile}" else error "Cannot find a suitable tool for downloading fils (tried 'wget' and 'curl')" exit 1 fi } ## # Checksum a file # checksum() { check_arguments "${FUNCNAME}" 2 $# local file="$1" local expected="$2" if [ -n "${SKIP_CHECKSUM_CHECK:-}" ]; then return fi if [ x"${expected}" = x"" ]; then error "Expected checksum unexpectedly empty.." exit 1 fi local actual="$("${SHASUM}" ${SHASUM_OPTIONS} "${dest}" | awk '{ print $1; }')" if [ ! x"${actual}" = x"${expected}" ]; then error "Checksum mismatch for ${dest}:" error "Expected: ${expected}" error "Actual : ${actual}" exit 1 fi } ## # Download and checksum a file # download_and_checksum() { check_arguments "${FUNCNAME}" 3 $# local url="$1" local dest="$2" local shasum="$3" download "${url}" "${dest}" checksum "${dest}" "${shasum}" } ## # Unpack an archive # unpack() { check_arguments "${FUNCNAME}" 2 $# local file="$1" local unpackdir="$2" info "Unpacking $file in $unpackdir" ( mkdir -p "${unpackdir}" case ${file} in *.tar.gz) "${TAR_CMD}" -xzf "$1" -C "${unpackdir}" ;; *.zip) "${UNZIP_CMD}" -q "$1" -d "${unpackdir}" ;; *) error "Unknown archive type for file '${file}'" exit 1 esac ) } ## # Download and unpack an archive without performing a checksum check # get_archive_no_checksum() { check_arguments "${FUNCNAME}" 3 $# local url="$1" local destfile="$2" local unpackdir="$3" rm -rf "${unpackdir}"/* download "${url}" "${destfile}" unpack "${destfile}" "${unpackdir}" } ## # Download, checksum, and unpack an archive # get_archive() { check_arguments "${FUNCNAME}" 4 $# local url="$1" local destfile="$2" local unpackdir="$3" local shasum="$4" rm -rf "${unpackdir}"/* download_and_checksum "${url}" "${destfile}" "${shasum}" unpack "${destfile}" "${unpackdir}" } ## # Set up the ANT (and possibly ANT_JAR) environment variable(s) # setup_ant() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${ANT:-}" ]; then return fi if [ -z "${ANT_ARCHIVE_URL:-}" ]; then if [ -n "${ANT_ARCHIVE_URL_BASE:-}" ]; then ANT_ARCHIVE_URL="${ANT_ARCHIVE_URL_BASE}/apache-ant-${ANT_VERSION}-bin.zip" fi fi local ANT_DEPS_DIR="${DEPS_DIR}/ant" if [ -n "${ANT_ARCHIVE_URL:-}" ]; then local ANT_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${ANT_ARCHIVE_URL}")" get_archive "${ANT_ARCHIVE_URL}" "${ANT_LOCAL_ARCHIVE_FILE}" "${ANT_DEPS_DIR}" "${ANT_ARCHIVE_CHECKSUM}" ANT="$(find "${ANT_DEPS_DIR}" -path '*/bin/ant')" ANT_JAR="$(dirname "${ANT}")/../lib/ant.jar" return fi error "Neither ANT_ARCHIVE_URL or ANT_ARCHIVE_URL_BASE is set" exit 1 } set -e set -u if [ -z "${mydir:-}" ]; then error "mydir not set in caller (line/file): $(caller)" exit 1 fi if [ -z "${log_module:-}" ]; then error "log_module not set in caller (line/file): $(caller)" exit 1 fi ROOT="$(abspath ${ROOT:-${mydir}/..})" BUILD_DIR="$(abspath "${BUILD_DIR:-${ROOT}/build}")" DEPS_DIR="${BUILD_DIR}/deps" export TAR_CMD="${TAR_CMD:-tar}" export TAR_OPTIONS="${TAR_OPTIONS:-}" export UNZIP_CMD="${UNZIP_CMD:-unzip}" export UNZIP_OPTIONS="${UNZIP_OPTIONS:--q} -u" export WGET="${WGET:-$(which wget)}" export WGET_OPTIONS="${WGET_OPTIONS:--q}" export CURL="${CURL:-$(which curl)}" export CURL_OPTIONS="${CURL_OPTIONS:--s -f -L}" export MAVEN_REPO_URL_BASE="${MAVEN_REPO_URL_BASE:-https://repo1.maven.org/maven2}" export CODE_TOOLS_URL_BASE="${CODE_TOOLS_URL_BASE:-https://git.openjdk.java.net}" export ANT_ARCHIVE_URL_BASE="${ANT_ARCHIVE_URL_BASE:-https://archive.apache.org/dist/ant/binaries}" setup_shasum ## # Support for Cygwin and MSYS2 (which may identify as MSYS, MINGW32 or MINGW64 (the default)) # case $(uname) in CYGWIN*|MSYS*|MINGW*) CYGWIN_OR_MSYS=1 ;; *) CYGWIN_OR_MSYS=0 ;; esac info "CYGWIN_OR_MSYS=$CYGWIN_OR_MSYS" jtreg-jtreg-7.3.1-1/make/build-support/jtharness/000077500000000000000000000000001446671450000216425ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/make/build-support/jtharness/build.sh000066400000000000000000000062441446671450000233030ustar00rootroot00000000000000#!/bin/bash # # Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # mydir="$(dirname ${BASH_SOURCE[0]})" log_module="$(basename "${BASH_SOURCE[0]}")" . "${mydir}/../build-common.sh" . "${mydir}/version-numbers" JTHARNESS_SRC_TAG="${JTHARNESS_SRC_TAG:-${DEFAULT_JTHARNESS_SRC_TAG}}" JTHARNESS_SRC_ARCHIVE_CHECKSUM="${JTHARNESS_SRC_ARCHIVE_CHECKSUM:-${DEFAULT_JTHARNESS_SRC_ARCHIVE_CHECKSUM}}" ANT_VERSION="${ANT_VERSION:-${DEFAULT_ANT_VERSION}}" ANT_ARCHIVE_CHECKSUM="${ANT_ARCHIVE_CHECKSUM:-${DEFAULT_ANT_ARCHIVE_CHECKSUM}}" setup_ant info "ANT: ${ANT}" setup_jtharness_source() { check_arguments "${FUNCNAME}" 1 $# local dir="$1" # Build jtharness local JTHARNESS_LOCAL_SRC_ARCHIVE="${dir}/../source.zip" if [ "${JTHARNESS_SRC_TAG}" = "tip" -o "${JTHARNESS_SRC_TAG}" = "master" ]; then local BRANCH="master" get_archive_no_checksum "${CODE_TOOLS_URL_BASE}/jtharness/archive/${BRANCH}.zip" "${JTHARNESS_LOCAL_SRC_ARCHIVE}" "${dir}" JTHARNESS_SRC_DIR="${dir}/jtharness-${BRANCH}" else get_archive "${CODE_TOOLS_URL_BASE}/jtharness/archive/${JTHARNESS_SRC_TAG}.zip" "${JTHARNESS_LOCAL_SRC_ARCHIVE}" "${dir}" "${JTHARNESS_SRC_ARCHIVE_CHECKSUM}" JTHARNESS_SRC_DIR="${dir}/jtharness-${JTHARNESS_SRC_TAG}" fi } build_jtharness() { check_arguments "${FUNCNAME}" 0 $# local JTHARNESS_SRC_DIR_BASE="${BUILD_DIR}/src" setup_jtharness_source "${JTHARNESS_SRC_DIR_BASE}" local JTHARNESS_DIST="${BUILD_DIR}/build" "${ANT}" -DBUILD_DIR="$(native_path "${JTHARNESS_DIST}")" -f "$(native_path "${JTHARNESS_SRC_DIR}/build/build.xml")" JTHARNESS_JAVATEST_JAR="${JTHARNESS_DIST}/binaries/lib/javatest.jar" JTHARNESS_LICENSE="${JTHARNESS_SRC_DIR}/LICENSE" JTHARNESS_COPYRIGHT="${JTHARNESS_SRC_DIR}/legal/copyright.txt" } build_jtharness if [ ! x"$BUILD_RESULTS_FILE" = x"" ]; then mkdir -p "$(dirname "${BUILD_RESULTS_FILE}")" cat > "${BUILD_RESULTS_FILE}" << EOF JTHARNESS_JAVATEST_JAR="${JTHARNESS_JAVATEST_JAR}" JTHARNESS_LICENSE="${JTHARNESS_LICENSE}" JTHARNESS_COPYRIGHT="${JTHARNESS_COPYRIGHT}" EOF fi jtreg-jtreg-7.3.1-1/make/build-support/jtharness/version-numbers000066400000000000000000000025651446671450000247330ustar00rootroot00000000000000# # Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # DEFAULT_JTHARNESS_SRC_TAG=jt6.0-b24 DEFAULT_JTHARNESS_SRC_ARCHIVE_CHECKSUM=3d25ddea8e59ab8ff0943bc65aebc80a2aecc4a3 DEFAULT_ANT_VERSION=1.10.8 DEFAULT_ANT_ARCHIVE_CHECKSUM=dbe187ce2963f9df8a67de8aaff3b0a437d06978 jtreg-jtreg-7.3.1-1/make/build-support/version-numbers000066400000000000000000000043101446671450000227200ustar00rootroot00000000000000# # Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # JTREG_VERSION=7.3.1 DEFAULT_ANT_VERSION=1.10.8 DEFAULT_ANT_ARCHIVE_CHECKSUM=dbe187ce2963f9df8a67de8aaff3b0a437d06978 DEFAULT_ANT_JAR_CHECKSUM=ae148abb0532b685c5eeb22fdec9d124e89be5de DEFAULT_ASMTOOLS_SRC_TAG=7.0-b09 DEFAULT_ASMTOOLS_SRC_ARCHIVE_CHECKSUM=604f5e1aad1912968781dc72a1f86043e4e2dc20 DEFAULT_GOOGLE_GUICE_VERSION=5.1.0 DEFAULT_GOOGLE_GUICE_JAR_CHECKSUM=da25056c694c54ba16e78e4fc35f17fc60f0d1b4 DEFAULT_JCOMMANDER_VERSION=1.82 DEFAULT_JCOMMANDER_JAR_CHECKSUM=0a7c5fef184d238065de38f81bbc6ee50cca2e21 DEFAULT_JTHARNESS_SRC_TAG=jt6.0-b24 DEFAULT_JTHARNESS_SRC_ARCHIVE_CHECKSUM=3d25ddea8e59ab8ff0943bc65aebc80a2aecc4a3 # JUnit 5 = JUnit Platform 1.y.z + JUnit Jupiter 5.y.z + JUnit Vintage 5.y.z DEFAULT_JUNIT_VERSION=1.9.2 DEFAULT_JUNIT_JAR_CHECKSUM=bb856bc86a6e6cd48080546afcaf7a210713ea21 DEFAULT_JUNIT_LICENSE_FILE=LICENSE-junit.txt DEFAULT_TESTNG_VERSION=7.3.0 DEFAULT_TESTNG_JAR_CHECKSUM=a5069c3dfba58d23702f96c3d9f5081f5ce7136f DEFAULT_TESTNG_LICENSE_VERSION=7.3.0 DEFAULT_TESTNG_LICENSE_CHECKSUM=c646d2cd1433560a4b43cb98e7273b59aac4563c jtreg-jtreg-7.3.1-1/make/build.sh000066400000000000000000000671101446671450000164700ustar00rootroot00000000000000#!/bin/bash # # Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # This script will download/build the dependencies for jtreg and then # build jtreg. Downloaded files are verified against known/specified # checksums. # The default version to use when building jtreg can be found in the # make/version-numbers file, where the default versions and # corresponding known checksums for the dependencies are also # specified. Almost all of the defaults can be overridden by setting # the respective environment variables. # For each of the dependency the following steps are applied and the # first successful one is used: # # 1. Check if the dependency is available locally # 2. Download a prebuilt version of the dependency # 3. Build the dependency from source, downloading the source archive # first # # In particular, when not found locally the dependencies will be # handled as follows: # # * JUnit, TestNG, JCommander, and Ant jar are by default # downloaded from Maven central. # * JT Harness and AsmTools are downloaded or built from source. # * The JDK dependency is downloaded. No default URL is set. # # Some noteworthy control variables: # # MAVEN_REPO_URL_BASE (e.g. "https://repo1.maven.org/maven2") # The base URL for the maven central repository. # # CODE_TOOLS_URL_BASE (e.g. "https://git.openjdk.java.net") # The base URL for the code tools source repositories. # # ANT_ARCHIVE_URL_BASE (e.g. "https://archive.apache.org/dist/ant/binaries") # The base URL for Ant dist binaries. # # JTREG_VERSION (e.g. "5.2") # JTREG_VERSION_STRING (e.g. "jtreg-5.2+8" # JTREG_BUILD_NUMBER (e.g. "8") # JTREG_BUILD_MILESTONE (e.g. "dev") # The version information to use for when building jtreg. # # MAKE_ARGS (e.g. "-j4 all") # Additional arguments to pass to make when building jtreg. # # WGET # The wget-like executable to use when downloading files. # # WGET_OPTS (e.g. "-v") # Additional arguments to pass to WGET when downloading files. # # CURL (e.g. "/path/to/my/wget") # The curl-like executable to use when downloading files. # Note: If available, wget will be preferred. # # CURL_OPTS (e.g. "-v") # Additional arguments to pass to CURL when downloading files. # # SKIP_DOWNLOAD # Skip the downloads if the file is already present locally. # # SKIP_CHECKSUM_CHECK # Skip the checksum verification for downloaded files. # The control variables for dependencies are on the following general # form (not all of them are relevant for all dependencies): # # _URL (e.g. JTHARNESS_ARCHIVE_URL) # The full URL for the dependency. # # _URL_BASE (e.g. JTHARNESS_ARCHIVE_URL_BASE) # The base URL for the dependency. Requires additional dependency # specific variables to be specified. # # _CHECKSUM (e.g. JTHARNESS_ARCHIVE_CHECKSUM) # The expected checksum of the download file. # # _SRC_TAG (e.g. JTHARNESS_SRC_TAG) # The SCM tag to use when building from source. The special value # "tip" can be used to get the most recent version. # # _SRC_ARCHIVE_CHECKSUM (e.g. JTHARNESS_SRC_ARCHIVE_CHECKSUM) # The checksum of the source archive. # # The below outlines the details of how the dependencies are # handled. For each dependency the steps are tried in order and the # first successful one will be used. # # Ant (required to build AsmTools and JT Harness) # Checksum variables: # ANT_ARCHIVE_CHECKSUM: checksum of binary archive # # 1. ANT # The path to the ant executable. # 2a. ANT_ARCHIVE_URL # The full URL for the archive. # 2b. ANT_ARCHIVE_URL_BASE + ANT_VERSION # The individual URL components used to construct the full URL. # # AsmTools # Checksum variables: # ASMTOOLS_ARCHIVE_CHECKSUM: checksum of binary archive # ASMTOOLS_SRC_ARCHIVE_CHECKSUM: checksum of source archive # # 1. ASMTOOLS_JAR + ASMTOOLS_LICENSE # The path to asmtools.jar and LICENSE respectively. # 2a. ASMTOOLS_ARCHIVE_URL # The full URL for the archive. # 2b. ASMTOOLS_ARCHIVE_URL_BASE + ASMTOOLS_VERSION + ASMTOOLS_BUILD_NUMBER + ASMTOOLS_FILE # The individual URL components used to construct the full URL. # 3. ASMTOOLS_SRC_TAG # The SCM repository tag to use when building from source. # # Google Guice (required by TestNG) # Checksum variables: # GOOGLE_GUICE_JAR_CHECKSUM: checksum of jar # # 1. GOOGLE_GUICE_JAR # The path to guice.jar. # 2a. GOOGLE_GUICE_JAR_URL # The full URL for the jar. # 2b. GOOGLE_GUICE_JAR_URL_BASE + GOOGLE_GUICE_VERSION # The individual URL components used to construct the full URL. # # JCommander (required by TestNG) # Checksum variables: # JCOMMANDER_JAR_CHECKSUM: checksum of jar # # 1. JCOMMANDER_JAR # The path to jcommander.jar. # 2a. JCOMMANDER_JAR_URL # The full URL for the jar. # 2b. JCOMMANDER_JAR_URL_BASE + JCOMMANDER_VERSION # The individual URL components used to construct the full URL. # # JDK # Checksum variables: # JDK_ARCHIVE_CHECKSUM: checksum of binary archive # # 1. JAVA_HOME # The path to the JDK. # 2a. JDK_ARCHIVE_URL # The full URL for the archive. # 2b. JDK_ARCHIVE_URL_BASE + JDK_VERSION + JDK_BUILD_NUMBER + JDK_FILE # The individual URL components used to construct the full URL. # # JT Harness # Checksum variables: # JTHARNESS_ARCHIVE_CHECKSUM: checksum of binary archive # JTHARNESS_SRC_ARCHIVE_CHECKSUM: checksum of source archive # # 1. JTHARNESS_JAVATEST_JAR + JTHARNESS_LICENSE + JTHARNESS_COPYRIGHT # The path to javatest.jar, LICENSE, and copyright.txt respectively. # 2a. JTHARNESS_ARCHIVE_URL # The full URL for the archive. # 2b. JTHARNESS_ARCHIVE_URL_BASE + JTHARNESS_VERSION + JTHARNESS_BUILD_NUMBER + JTHARNESS_FILE # The individual URL components used to construct the full URL. # 3. JTHARNESS_SRC_TAG # The SCM repository tag to use when building from source. # # JUnit (includes HamCrest) # Checksum variables: # JUNIT_JAR_CHECKSUM: checksum of binary archive # # 1. JUNIT_JAR + JUNIT_LICENSE # The path to junit.jar and LICENSE respectively. # 2a. JUNIT_JAR_URL # The full URL for the jar. # 2b. JUNIT_JAR_URL_BASE + JUNIT_VERSION + JUNIT_FILE # The individual URL components used to construct the full URL. # # TestNG (requires JCommander, Google Guice) # Checksum variables: # TESTNG_JAR_CHECKSUM: checksum of binary archive # TESTNG_LICENSE_CHECKSUM: checksum of LICENSE file # # 1. TESTNG_JAR + TESTNG_LICENSE # The path to testng.jar and LICENSE.txt respectively. # 2a. TESTNG_JAR_URL # The full URL for the jar. # 2b. TESTNG_JAR_URL_BASE + TESTNG_VERSION + TESTNG_FILE # The individual URL components used to construct the full URL. # mydir="$(dirname ${BASH_SOURCE[0]})" log_module="$(basename "${BASH_SOURCE[0]}")" . "${mydir}/build-support/build-common.sh" usage() { echo "Usage: $0 [ [--] ]" echo "--help" echo " Show this message" echo "--jdk /path/to/jdk" echo " Path to JDK; must be JDK 11 or higher" echo "--quiet | -q" echo " Reduce the logging output." echo "--show-default-versions" echo " Show default versions of external components" echo "--show-config-details" echo " Show configuration details" echo "--skip-checksum-check" echo " Skip the checksum check for downloaded files." echo "--skip-download" echo " Skip downloading files if file already available" echo "--skip-make" echo " Skip running 'make' (just download dependencies if needed)" echo "--version-numbers file" echo " Provide an alternate file containing dependency version information" echo "--" echo " Subsequent arguments are for 'make'" } ensure_arg() { check_arguments "${FUNCNAME}" 2 $# local option="$1" local arg_count="$2" if [ "$2" -lt "2" ]; then echo "The $option option requires an argument" exit fi } process_args() { while [ "$#" -gt 0 ]; do case "$1" in --help|-h ) HELP=1 ; shift ;; --jdk ) ensure_arg "$1" $# ; JAVA_HOME="$2" ; shift ; shift ;; --quiet|-q ) export QUIET=1 ; shift ;; --show-config-details ) SHOW_CONFIG_DETAILS=1 ; shift ;; --show-default-versions ) SHOW_DEFAULT_VERSIONS=1 ; shift ;; --skip-checksum-check ) export SKIP_CHECKSUM_CHECK=1 ; shift ;; --skip-download ) export SKIP_DOWNLOAD=1 ; shift ;; --skip-make ) SKIP_MAKE=1 ; shift ;; --version-numbers ) ensure_arg "$1" $# ; VERSION_NUMBERS="$2" ; shift ; shift ;; -- ) shift ; MAKE_ARGS="$@" ; break ;; -* ) error "unknown option: '$1'" ; exit 1 ;; * ) MAKE_ARGS="$@" ; break ;; esac done } process_args "$@" if [ -n "${HELP:-}" ]; then usage exit fi . "${VERSION_NUMBERS:-${mydir}/build-support/version-numbers}" JTREG_VERSION="${JTREG_VERSION:-}" ANT_VERSION="${ANT_VERSION:-${DEFAULT_ANT_VERSION}}" ANT_ARCHIVE_CHECKSUM="${ANT_ARCHIVE_CHECKSUM:-${DEFAULT_ANT_ARCHIVE_CHECKSUM}}" # Not available in Maven ASMTOOLS_SRC_TAG="${ASMTOOLS_SRC_TAG:-${DEFAULT_ASMTOOLS_SRC_TAG}}" ASMTOOLS_SRC_ARCHIVE_CHECKSUM="${ASMTOOLS_SRC_ARCHIVE_CHECKSUM:-${DEFAULT_ASMTOOLS_SRC_ARCHIVE_CHECKSUM}}" GOOGLE_GUICE_VERSION="${GOOGLE_GUICE_VERSION:-${DEFAULT_GOOGLE_GUICE_VERSION}}" GOOGLE_GUICE_JAR_URL_BASE="${GOOGLE_GUICE_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}" GOOGLE_GUICE_JAR_CHECKSUM="${GOOGLE_GUICE_JAR_CHECKSUM:-${DEFAULT_GOOGLE_GUICE_JAR_CHECKSUM}}" JCOMMANDER_VERSION="${JCOMMANDER_VERSION:-${DEFAULT_JCOMMANDER_VERSION}}" JCOMMANDER_JAR_URL_BASE="${JCOMMANDER_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}" JCOMMANDER_JAR_CHECKSUM="${JCOMMANDER_JAR_CHECKSUM:-${DEFAULT_JCOMMANDER_JAR_CHECKSUM}}" # Not available in Maven JTHARNESS_SRC_TAG="${JTHARNESS_SRC_TAG:-${DEFAULT_JTHARNESS_SRC_TAG}}" JTHARNESS_SRC_ARCHIVE_CHECKSUM="${JTHARNESS_SRC_ARCHIVE_CHECKSUM:-${DEFAULT_JTHARNESS_SRC_ARCHIVE_CHECKSUM}}" JUNIT_VERSION="${JUNIT_VERSION:-${DEFAULT_JUNIT_VERSION}}" JUNIT_JAR_URL_BASE="${JUNIT_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}" JUNIT_JAR_CHECKSUM="${JUNIT_JAR_CHECKSUM:-${DEFAULT_JUNIT_JAR_CHECKSUM}}" JUNIT_LICENSE_FILE="${JUNIT_LICENSE_FILE:-${DEFAULT_JUNIT_LICENSE_FILE}}" TESTNG_VERSION="${TESTNG_VERSION:-${DEFAULT_TESTNG_VERSION}}" TESTNG_JAR_URL_BASE="${TESTNG_JAR_URL_BASE:-${MAVEN_REPO_URL_BASE}}" TESTNG_JAR_CHECKSUM="${TESTNG_JAR_CHECKSUM:-${DEFAULT_TESTNG_JAR_CHECKSUM}}" TESTNG_LICENSE_VERSION="${TESTNG_LICENSE_VERSION:-${DEFAULT_TESTNG_LICENSE_VERSION:-${TESTNG_VERSION}}}" TESTNG_LICENSE_CHECKSUM="${TESTNG_LICENSE_CHECKSUM:-${DEFAULT_TESTNG_LICENSE_CHECKSUM}}" if [ "${SHOW_DEFAULT_VERSIONS:-}" != "" ]; then find ${mydir} -name version-numbers | \ xargs cat | \ grep -v '^#' | \ grep -E 'DEFAULT.*(_VERSION|_SRC_TAG)' | \ sort -u exit fi if [ "${SHOW_CONFIG_DETAILS:-}" != "" ]; then ( set -o posix ; set ) | \ grep -E '^(ANT|ASM|ASMTOOLS|GOOGLE_GUICE|JCOMMANDER|JTHARNESS|JUNIT|TESTNG)_[A-Z_]*=' | \ sort -u exit fi setup_java_home() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${JAVA_HOME:-}" ]; then return fi if [ -z "${JDK_ARCHIVE_URL:-}" ]; then if [ -n "${JDK_ARCHIVE_URL_BASE:-}" ]; then if [ -z "${JDK_VERSION:-}" ]; then error "JDK_VERSION not set" exit 1 fi if [ -z "${JDK_BUILD_NUMBER:-}" ]; then error "JDK_BUILD_NUMBER not set" exit 1 fi if [ -z "${JDK_FILE:-}" ]; then error "JDK_FILE not set" exit 1 fi JDK_ARCHIVE_URL="${JDK_ARCHIVE_URL_BASE}/${JDK_VERSION}/${JDK_BUILD_NUMBER}/${JDK_FILE}" fi fi local JDK_DEPS_DIR="${DEPS_DIR}" if [ -n "${JDK_ARCHIVE_URL:-}" ]; then local JDK_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${JDK_ARCHIVE_URL}")" if [ -n "${JDK_ARCHIVE_CHECKSUM:-}" ]; then get_archive "${JDK_ARCHIVE_URL}" "${JDK_LOCAL_ARCHIVE_FILE}" "${JDK_DEPS_DIR}" "${JDK_ARCHIVE_CHECKSUM}" else get_archive_no_checksum "${JDK_ARCHIVE_URL}" "${JDK_LOCAL_ARCHIVE_FILE}" "${JDK_DEPS_DIR}" fi local JDK_JAVAC="$(find "${JDK_DEPS_DIR}" -path '*/bin/javac')" JAVA_HOME="$(dirname $(dirname "${JDK_JAVAC}"))" return fi error "None of JAVA_HOME, JDK_ARCHIVE_URL or JDK_ARCHIVE_URL_BASE are set" exit 1 } sanity_check_java_home() { if [ -z "${JAVA_HOME:-}" ]; then error "No JAVA_HOME set" exit 1 fi if [ ! -d "${JAVA_HOME}" ]; then error "'${JAVA_HOME}' is not a directory" exit 1 fi if [ ! -x "${JAVA_HOME}/bin/java" ]; then error "Could not find an executable binary at '${JAVA_HOME}/bin/java'" exit 1 fi local version=$(${JAVA_HOME}/bin/java -version 2>&1) local vnum=$(echo "${version}" | \ grep -e ^java -e ^openjdk | head -n 1 | \ sed -e 's/^[^0-9]*\(1\.\)*\([1-9][0-9]*\).*/\2/' ) if [ "${vnum:-0}" -lt "11" ]; then error "JDK 11 or newer is required to build jtreg" exit 1 fi } checkJavaOSVersion() { # This checks that the value in the Java "os.version" system property # is as expected. While it is OK to *build* jtreg with a JDK with this bug, # some of the `jtreg` self-tests will fail: notably, test/problemList. # See https://bugs.openjdk.java.net/browse/JDK-8253702 case `uname` in Darwin ) OS_VERSION=`defaults read loginwindow SystemVersionStampAsString` ${JAVA_HOME}/bin/java ${mydir}/CheckJavaOSVersion.java ${OS_VERSION} esac } setup_java_home sanity_check_java_home #checkJavaOSVersion #temp: check for presence of the JDK os.version bug (JDK-8253702) export JAVA_HOME info "JAVA_HOME: ${JAVA_HOME}" #----- Ant ----- setup_ant info "ANT: ${ANT}" #----- JT Harness ----- setup_jtharness_javatest_jar() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${JTHARNESS_JAVATEST_JAR:-}" ]; then return fi if [ -z "${JTHARNESS_ARCHIVE_URL:-}" ]; then if [ -n "${JTHARNESS_ARCHIVE_URL_BASE:-}" ]; then JTHARNESS_ARCHIVE_URL="${JTHARNESS_ARCHIVE_URL_BASE}/${JTHARNESS_VERSION}/${JTHARNESS_BUILD_NUMBER}/${JTHARNESS_FILE}" fi fi local JTHARNESS_DEPS_DIR="${DEPS_DIR}/jtharness" if [ -n "${JTHARNESS_ARCHIVE_URL:-}" ]; then local JTHARNESS_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${JTHARNESS_ARCHIVE_URL}")" get_archive "${JTHARNESS_ARCHIVE_URL}" "${JTHARNESS_LOCAL_ARCHIVE_FILE}" "${JTHARNESS_DEPS_DIR}" "${JTHARNESS_ARCHIVE_CHECKSUM}" JTHARNESS_JAVATEST_JAR="$(find "${JTHARNESS_DEPS_DIR}" -path '*/lib/javatest.jar')" JTHARNESS_LICENSE="$(dirname "${JTHARNESS_JAVATEST_JAR}")/../LICENSE" JTHARNESS_COPYRIGHT="$(dirname "${JTHARNESS_JAVATEST_JAR}")/../legal/copyright.txt" return fi info "None of JTHARNESS_JAVATEST_JAR, JTHARNESS_ARCHIVE_URL or JTHARNESS_ARCHIVE_URL_BASE are set; building from source" export JTHARNESS_BUILD_RESULTS_FILE="${DEPS_DIR}/jtharness.results" ( export BUILD_DIR="${JTHARNESS_DEPS_DIR}" export BUILD_RESULTS_FILE="${JTHARNESS_BUILD_RESULTS_FILE}" export JTHARNESS_SRC_TAG="${JTHARNESS_SRC_TAG}" export JTHARNESS_SRC_ARCHIVE_CHECKSUM="${JTHARNESS_SRC_ARCHIVE_CHECKSUM}" export ANT="${ANT}" bash "${mydir}/build-support/jtharness/build.sh" ) ret=$? if [ ! $ret = 0 ]; then exit ${ret} fi . "${JTHARNESS_BUILD_RESULTS_FILE}" } setup_jtharness_javatest_jar info "JTHARNESS_JAVATEST_JAR: ${JTHARNESS_JAVATEST_JAR}" #----- JT Harness License and Copyright ----- setup_jtharness_license_and_copyright() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${JTHARNESS_LICENSE:-}" -a -n "${JTHARNESS_COPYRIGHT:-}" ]; then return fi if [ -z "${JTHARNESS_SRC:-}" ]; then local JTHARNESS_SRC_DEPS_DIR="${DEPS_DIR}/jtharness-src" local JTHARNESS_LOCAL_SRC_ARCHIVE="${JTHARNESS_SRC_DEPS_DIR}/source.zip" get_archive "${CODE_TOOLS_URL_BASE}/jtharness/archive/${JTHARNESS_SRC_VERSION}.zip" "${JTHARNESS_LOCAL_SRC_ARCHIVE}" "${JTHARNESS_SRC_DEPS_DIR}" "${JTHARNESS_SRC_ARCHIVE_CHECKSUM}" JTHARNESS_SRC="${JTHARNESS_SRC_DEPS_DIR}/jtharness-${JTHARNESS_SRC_VERSION}" fi JTHARNESS_LICENSE="${JTHARNESS_SRC}/LICENSE" JTHARNESS_COPYRIGHT="${JTHARNESS_SRC}/legal/copyright.txt" } setup_jtharness_license_and_copyright info "JTHARNESS_LICENSE: ${JTHARNESS_LICENSE}" info "JTHARNESS_COPYRIGHT: ${JTHARNESS_COPYRIGHT}" #----- AsmTools ----- setup_asmtools() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${ASMTOOLS_JAR:-}" -a -n "${ASMTOOLS_LICENSE:-}" ]; then return fi if [ -z "${ASMTOOLS_ARCHIVE_URL:-}" ]; then if [ -n "${ASMTOOLS_ARCHIVE_URL_BASE:-}" ]; then if [ -z "${ASMTOOLS_VERSION:-}" ]; then error "ASMTOOLS_VERSION not set" exit 1 fi if [ -z "${ASMTOOLS_BUILD_NUMBER:-}" ]; then error "ASMTOOLS_BUILD_NUMBER not set" exit 1 fi if [ -z "${ASMTOOLS_FILE:-}" ]; then error "ASMTOOLS_FILE not set" exit 1 fi ASMTOOLS_ARCHIVE_URL="${ASMTOOLS_ARCHIVE_URL_BASE}/${ASMTOOLS_VERSION}/${ASMTOOLS_BUILD_NUMBER}/${ASMTOOLS_FILE}" fi fi local ASMTOOLS_DEPS_DIR="${DEPS_DIR}/asmtools" if [ -n "${ASMTOOLS_ARCHIVE_URL:-}" ]; then local ASMTOOLS_LOCAL_ARCHIVE_FILE="${DEPS_DIR}/$(basename "${ASMTOOLS_ARCHIVE_URL}")" get_archive "${ASMTOOLS_ARCHIVE_URL}" "${ASMTOOLS_LOCAL_ARCHIVE_FILE}" "${ASMTOOLS_DEPS_DIR}" "${ASMTOOLS_ARCHIVE_CHECKSUM}" ASMTOOLS_JAR="$(find "${ASMTOOLS_DEPS_DIR}" -name asmtools.jar)" ASMTOOLS_LICENSE="$(dirname "${ASMTOOLS_JAR}")/../LICENSE" return fi info "None of ASMTOOLS_JAR, ASMTOOLS_ARCHIVE_URL or ASMTOOLS_ARCHIVE_URL_BASE are set; building from source" export ASMTOOLS_BUILD_RESULTS_FILE="${DEPS_DIR}/asmtools.results" ( export BUILD_DIR="${ASMTOOLS_DEPS_DIR}" export BUILD_RESULTS_FILE="${ASMTOOLS_BUILD_RESULTS_FILE}" export ANT="${ANT}" export ASMTOOLS_SRC_TAG="${ASMTOOLS_SRC_TAG}" bash "${mydir}/build-support/asmtools/build.sh" ) ret=$? if [ ! $ret = 0 ]; then exit ${ret} fi . "${ASMTOOLS_BUILD_RESULTS_FILE}" } setup_asmtools info "ASMTOOLS_JAR: ${ASMTOOLS_JAR}" info "ASMTOOLS_LICENSE: ${ASMTOOLS_LICENSE}" #----- JUnit ----- setup_junit() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${JUNIT_JAR:-}" ]; then return fi if [ -z "${JUNIT_JAR_URL:-}" ]; then if [ -n "${JUNIT_JAR_URL_BASE:-}" ]; then JUNIT_JAR_URL="${JUNIT_JAR_URL_BASE}/org/junit/platform/junit-platform-console-standalone/${JUNIT_VERSION}/junit-platform-console-standalone-${JUNIT_VERSION}.jar" fi fi local JUNIT_DEPS_DIR="${DEPS_DIR}/junit" if [ -n "${JUNIT_JAR_URL:-}" ]; then JUNIT_JAR="${JUNIT_DEPS_DIR}/$(basename ${JUNIT_JAR_URL})" download_and_checksum "${JUNIT_JAR_URL}" "${JUNIT_JAR}" "${JUNIT_JAR_CHECKSUM}" return fi error "None of JUNIT_JAR, JUNIT_JAR_URL or JUNIT_JAR_URL_BASE is set" exit 1 } setup_junit info "JUNIT_JAR ${JUNIT_JAR}" #----- JUnit license ----- setup_junit_license() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${JUNIT_LICENSE:-}" ]; then return fi local JUNIT_LICENSE_DEPS_DIR="${DEPS_DIR}/junit-license" "${UNZIP_CMD}" ${UNZIP_OPTIONS} "${JUNIT_JAR}" ${JUNIT_LICENSE_FILE} -d "${JUNIT_LICENSE_DEPS_DIR}" JUNIT_LICENSE="${JUNIT_LICENSE_DEPS_DIR}/${JUNIT_LICENSE_FILE}" } setup_junit_license info "JUNIT_LICENSE: ${JUNIT_LICENSE}" #----- TestNG ----- setup_testng() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${TESTNG_JAR:-}" ]; then return fi if [ -z "${TESTNG_JAR_URL:-}" ]; then if [ -n "${TESTNG_JAR_URL_BASE:-}" ]; then TESTNG_JAR_URL="${TESTNG_JAR_URL_BASE}/org/testng/testng/${TESTNG_VERSION}/testng-${TESTNG_VERSION}.jar" fi fi local TESTNG_DEPS_DIR="${DEPS_DIR}/testng" if [ -n "${TESTNG_JAR_URL:-}" ]; then TESTNG_JAR="${TESTNG_DEPS_DIR}/$(basename "${TESTNG_JAR_URL}")" download_and_checksum "${TESTNG_JAR_URL}" "${TESTNG_JAR}" "${TESTNG_JAR_CHECKSUM}" return fi error "None of TESTNG_JAR, TESTNG_JAR_URL or TESTNG_JAR_URL_BASE are set" exit 1 } setup_testng info "TESTNG_JAR: ${TESTNG_JAR}" #----- TestNG License ----- setup_testng_license() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${TESTNG_LICENSE:-}" ]; then return fi local TESTNG_LICENSE_DEPS_DIR="${DEPS_DIR}/testng-license" TESTNG_LICENSE="${TESTNG_LICENSE_DEPS_DIR}/LICENSE.txt" download_and_checksum "https://raw.githubusercontent.com/cbeust/testng/${TESTNG_LICENSE_VERSION}/LICENSE.txt" "${TESTNG_LICENSE}" "${TESTNG_LICENSE_CHECKSUM}" } setup_testng_license info "TESTNG_LICENSE: ${TESTNG_LICENSE}" #----- JCommander (required by TestNG) ----- setup_jcommander() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${JCOMMANDER_JAR:-}" ]; then return fi if [ -z "${JCOMMANDER_JAR_URL:-}" ]; then if [ -n "${JCOMMANDER_JAR_URL_BASE:-}" ]; then JCOMMANDER_JAR_URL="${JCOMMANDER_JAR_URL_BASE}/com/beust/jcommander/${JCOMMANDER_VERSION}/jcommander-${JCOMMANDER_VERSION}.jar" fi fi local JCOMMANDER_DEPS_DIR="${DEPS_DIR}/jcommander" if [ -n "${JCOMMANDER_JAR_URL:-}" ]; then JCOMMANDER_JAR="${JCOMMANDER_DEPS_DIR}/$(basename "${JCOMMANDER_JAR_URL}")" download_and_checksum "${JCOMMANDER_JAR_URL}" "${JCOMMANDER_JAR}" "${JCOMMANDER_JAR_CHECKSUM}" return fi error "None of JCOMMANDER_JAR, JCOMMANDER_JAR_URL or JCOMMANDER_JAR_URL_BASE are set" exit 1 } setup_jcommander info "JCOMMANDER_JAR: ${JCOMMANDER_JAR}" #----- Google Guice (required by TestNG) ----- setup_google_guice() { check_arguments "${FUNCNAME}" 0 $# if [ -n "${GOOGLE_GUICE_JAR:-}" ]; then return fi if [ -z "${GOOGLE_GUICE_JAR_URL:-}" ]; then if [ -n "${GOOGLE_GUICE_JAR_URL_BASE:-}" ]; then GOOGLE_GUICE_JAR_URL="${GOOGLE_GUICE_JAR_URL_BASE}/com/google/inject/guice/${GOOGLE_GUICE_VERSION}/guice-${GOOGLE_GUICE_VERSION}.jar" fi fi local GOOGLE_GUICE_DEPS_DIR="${DEPS_DIR}/guice" if [ -n "${GOOGLE_GUICE_JAR_URL:-}" ]; then GOOGLE_GUICE_JAR="${GOOGLE_GUICE_DEPS_DIR}/$(basename "${GOOGLE_GUICE_JAR_URL}")" download_and_checksum "${GOOGLE_GUICE_JAR_URL}" "${GOOGLE_GUICE_JAR}" "${GOOGLE_GUICE_JAR_CHECKSUM}" return fi error "None of GOOGLE_GUICE_JAR, GOOGLE_GUICE_JAR_URL or GOOGLE_GUICE_JAR_URL_BASE are set" exit 1 } setup_google_guice info "GOOGLE_GUICE_JAR: ${GOOGLE_GUICE_JAR}" #----- # Create aggregate settings ASMTOOLS_NOTICES="$(mixed_path "${ASMTOOLS_LICENSE}")" info "ASMTOOLS_NOTICES: ${ASMTOOLS_NOTICES}" JTHARNESS_NOTICES="$(mixed_path "${JTHARNESS_COPYRIGHT}") $(mixed_path "${JTHARNESS_LICENSE}")" info "JTHARNESS_NOTICES: ${JTHARNESS_NOTICES}" TESTNG_JARS="$(mixed_path "${TESTNG_JAR}") $(mixed_path "${GOOGLE_GUICE_JAR}") $(mixed_path "${JCOMMANDER_JAR}")" info "TESTNG_JARS: ${TESTNG_JARS}" TESTNG_NOTICES="$(mixed_path "${TESTNG_LICENSE}")" info "TESTNG_NOTICES: ${TESTNG_NOTICES}" JUNIT_JARS="$(mixed_path "${JUNIT_JAR}")" info "JUNIT_JARS: ${JUNIT_JARS}" JUNIT_NOTICES="$(mixed_path "${JUNIT_LICENSE}")" info "JUNIT_NOTICES: ${JUNIT_NOTICES}" ## # The build version typically comes from the version-numbers file; # It is expected that the build number will typically come from an external CI system. # setup_build_info() { check_arguments "${FUNCNAME}" 0 $# JTREG_BUILD_MILESTONE="${JTREG_BUILD_MILESTONE:-dev}" JTREG_BUILD_NUMBER="${JTREG_BUILD_NUMBER:-0}" if [ -z "${JTREG_VERSION_STRING:-}" ]; then MILESTONE="" if [ -n "${JTREG_BUILD_MILESTONE}" ]; then MILESTONE="-${JTREG_BUILD_MILESTONE}" fi JTREG_VERSION_STRING="${JTREG_VERSION}${MILESTONE}+${JTREG_BUILD_NUMBER}" fi } setup_build_info info "JTREG_VERSION: ${JTREG_VERSION}" info "JTREG_BUILD_NUMBER: ${JTREG_BUILD_NUMBER}" info "JTREG_BUILD_MILESTONE: ${JTREG_BUILD_MILESTONE}" check_files() { for i in "$@" ; do check_file "$i" done } check_file() { check_arguments "${FUNCNAME}" 1 $# info "Checking $1" if [ ! -f "$1" ]; then error "Missing: $1" exit 1 fi } check_dir() { check_arguments "${FUNCNAME}" 1 $# info "Checking $1" if [ ! -d "$1" ]; then error "Missing: $1" exit 1 fi } check_file "${ANT}" check_file "${ASMTOOLS_JAR}" check_files ${ASMTOOLS_NOTICES} check_dir "${JAVA_HOME}" check_file "${JTHARNESS_JAVATEST_JAR}" check_files ${JTHARNESS_NOTICES} check_files ${JUNIT_JARS} check_files ${JUNIT_NOTICES} check_files ${TESTNG_JARS} check_files ${TESTNG_NOTICES} if [ -n "${SKIP_MAKE:-}" ]; then exit fi # save make command for possible later reuse, bypassing this script mkdir -p ${BUILD_DIR} cat > ${BUILD_DIR}/make.sh << EOF #!/bin/sh cd "${ROOT}/make" make ASMTOOLS_JAR="${ASMTOOLS_JAR}" \\ ASMTOOLS_NOTICES="${ASMTOOLS_NOTICES}" \\ BUILDDIR="${BUILD_DIR}" \\ BUILD_MILESTONE="${JTREG_BUILD_MILESTONE}" \\ BUILD_NUMBER="${JTREG_BUILD_NUMBER}" \\ BUILD_VERSION="${JTREG_VERSION}" \\ BUILD_VERSION_STRING="${JTREG_VERSION_STRING}" \\ JAVATEST_JAR="$(mixed_path "${JTHARNESS_JAVATEST_JAR}")" \\ JDKHOME="$(mixed_path ${JAVA_HOME})" \\ JTHARNESS_NOTICES="${JTHARNESS_NOTICES}" \\ JUNIT_JARS="${JUNIT_JARS}" \\ JUNIT_NOTICES="${JUNIT_NOTICES}" \\ TESTNG_JARS="${TESTNG_JARS}" \\ TESTNG_NOTICES="${TESTNG_NOTICES}" \\ ${MAKE_ARGS:-} EOF sh ${BUILD_DIR}/make.sh jtreg-jtreg-7.3.1-1/make/checkstyle/000077500000000000000000000000001446671450000171665ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/make/checkstyle/checkstyle-emacs.xsl000066400000000000000000000016671446671450000231540ustar00rootroot00000000000000 Coding Style Check Results -------------------------- Total files checked: Files with errors: Total errors: Errors per file: :: jtreg-jtreg-7.3.1-1/make/checkstyle/checkstyle-jtreg.xml000066400000000000000000000031141446671450000231560ustar00rootroot00000000000000 jtreg-jtreg-7.3.1-1/make/i18n.pat000066400000000000000000000024601446671450000163170ustar00rootroot00000000000000# Patterns for recognizing i18n strings in source code # Each line is of the form # regexp keys # If the regexp matches within a line of source text, the keys give the # names of the implied i18n keys. Use the standard \int syntax for referring # to capture groups within the regexp. Note the regular expression should # not contain space characters. If necessary, use \s to match space. # For spec of regular expressions, see java.util.regex.Pattern # See also com.sun.jct.utils.i18ncheck.Main # i18n.getString("...", (printMessage|getI18NString|writeI18N|i18n.getString|formatI18N|setI18NTitle)\("([^"]*)"(,|\)) \2 # new BadArgs(i18n, "...", (Message.get|Fault|BadArgs|BadValue|println|printErrorMessage|printMessage|[eE]rror|showMessage|popupError|write|JavaTestError|\.log|super)\((msgs|i18n),\s"([^"]*)"(,|\)) \3 # uif.createMessageArea("...", uif.createMessageArea\("([^"]*)"(,|\)) \1.txt # uif.showXXYZDialog("...", uif.show(YesNo|YesNoCancel|OKCancel|Information|CustomInfo)Dialog\("([^"]*)"(,|\)) \2.txt \2.title # uif.showWaitDialog("...", uif.createWaitDialog\("([^"]*)"(,|\)) \1.txt \1.title \1.desc \1.name # showError("...", showError\("([^"]*)"(,|\)) \1.err # new FileType() new\sFileType\(\) filetype.allFiles # new FileType("...") new\sFileType\("([^"]*)"\) filetype\1 # i18n: ... i18n:\s*(\S+) \1 jtreg-jtreg-7.3.1-1/make/jtdiff.gmk000066400000000000000000000052171446671450000170030ustar00rootroot00000000000000# # Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # #---------------------------------------------------------------------- # # compile com.sun.javatest.diff JAVAFILES.com.sun.javatest.diff := \ $(shell $(FIND) $(JAVADIR)/com/sun/javatest/diff -name \*.java ) $(BUILDDIR)/classes.com.sun.javatest.diff.ok: \ $(JAVAFILES.com.sun.javatest.diff) \ $(BUILDDIR)/classes.com.sun.javatest.regtest.ok CLASSPATH="$(CLASSDIR)$(PS)$(JAVATEST_JAR)$(PS)$(ANT_JAR)" \ $(REGTEST_TOOL_JAVAC) $(REGTEST_TOOL_JAVAC_OPTIONS) \ -d $(CLASSDIR) \ -encoding ASCII \ $(JAVAFILES.com.sun.javatest.diff) echo "classes built at `date`" > $@ TARGETS.com.sun.javatest.diff += $(BUILDDIR)/classes.com.sun.javatest.diff.ok #---------------------------------------------------------------------- # # resources required for com.sun.javatest.diff RESOURCES.com.sun.javatest.diff = \ $(CLASSDIR)/com/sun/javatest/diff/i18n.properties TARGETS.com.sun.javatest.diff += $(RESOURCES.com.sun.javatest.diff) #---------------------------------------------------------------------- # # include jtdiff in jtreg.jar PKGS.JAR.jtreg += com.sun.javatest.diff TARGETS.JAR.jtreg += $(TARGETS.com.sun.javatest.diff) #---------------------------------------------------------------------- # # executable scripts $(JTREG_IMAGEDIR)/bin/jtdiff: $(SRCSHAREBINDIR)/jtdiff.sh $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ $(CHMOD) a+x,a-w $@ TARGETS.ZIP.jtreg += \ $(JTREG_IMAGEDIR)/bin/jtdiff #---------------------------------------------------------------------- TESTS += $(TESTS.jtdiff) jtreg-jtreg-7.3.1-1/make/jtreg.gmk000066400000000000000000000306001446671450000166420ustar00rootroot00000000000000# # Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # #---------------------------------------------------------------------- # # compile com.sun.javatest.regtest DEFAULT_DEBUG_FLAGS = -g AGENT_DEBUG_FLAGS = $(DEFAULT_DEBUG_FLAGS) TOOL_DEBUG_FLAGS = $(DEFAULT_DEBUG_FLAGS) JAVA_LANG_DEBUG_FLAGS = $(DEFAULT_DEBUG_FLAGS) ### The following files are required to run agentvm and othervm tests, as far back as JDK 8 JUNIT_CLASSPATH = $(call AS_CLASSPATH,$(JUNIT_JARS)) TESTNG_CLASSPATH = $(call AS_CLASSPATH,$(TESTNG_JARS)) JAVAFILES.com.sun.javatest.regtest-agentvm := \ $(shell $(FIND) $(JAVADIR)/com/sun/javatest/regtest/agent -name \*.java ) $(BUILDDIR)/classes.com.sun.javatest.regtest.agent.ok: \ $(JAVAFILES.com.sun.javatest.regtest-agentvm) $(MKDIR) -p $(CLASSDIR) CLASSPATH="$(CLASSDIR)$(PS)$(JAVATEST_JAR)$(PS)$(JUNIT_CLASSPATH)$(PS)$(TESTNG_CLASSPATH)" \ $(REGTEST_AGENT_JAVAC) $(REGTEST_AGENT_JAVAC_OPTIONS) \ -d $(CLASSDIR) \ -encoding ASCII \ $(AGENT_DEBUG_FLAGS) \ $(JAVAFILES.com.sun.javatest.regtest-agentvm) echo "classes built at `date`" > $@ ### The following files are for the jtreg and jtdiff tools JAVAFILES.com.sun.javatest.regtest-tools := \ $(shell $(FIND) $(JAVADIR)/com/sun/javatest/regtest -name agent -prune -o -name \*.java -print ) $(BUILDDIR)/classes.com.sun.javatest.regtest.ok: \ $(JAVAFILES.com.sun.javatest.regtest-tools) \ $(BUILDDIR)/classes.com.sun.javatest.regtest.agent.ok CLASSPATH="$(CLASSDIR)$(PS)$(JAVATEST_JAR)$(PS)$(JUNIT_CLASSPATH)$(PS)$(TESTNG_CLASSPATH)" \ $(REGTEST_TOOL_JAVAC) $(REGTEST_TOOL_JAVAC_OPTIONS) \ -d $(CLASSDIR) \ -encoding ASCII \ $(TOOL_DEBUG_FLAGS) \ $(JAVAFILES.com.sun.javatest.regtest-tools) echo "classes built at `date`" > $@ TARGETS.com.sun.javatest.regtest += $(BUILDDIR)/classes.com.sun.javatest.regtest.ok JAVAFILES.java.lang := \ $(JAVADIR)/java/lang/JTRegModuleHelper.java # The hardcoded use of --release 9 reflects the introduction of the Java Platform Module System $(BUILDDIR)/classes.java.lang.ok: \ $(JAVAFILES.java.lang) CLASSPATH= \ $(REGTEST_TOOL_JAVAC) $(REGTEST_TOOL_JAVAC_OPTIONS) --release 9 $(REGTEST_TOOL_PATCH_JAVA_BASE_OPTIONS) \ -d $(CLASSDIR) \ -encoding ASCII \ $(JAVA_LANG_DEBUG_FLAGS) \ $(JAVAFILES.java.lang) echo "classes built at `date`" > $@ TARGETS.com.sun.javatest.regtest += $(BUILDDIR)/classes.java.lang.ok #---------------------------------------------------------------------- # # resources required for com.sun.javatest.regtest RESOURCES.com.sun.javatest.regtest = \ $(CLASSDIR)/META-INF/services/java.util.spi.ToolProvider \ $(CLASSDIR)/com/sun/javatest/regtest/config/i18n.properties \ $(CLASSDIR)/com/sun/javatest/regtest/report/i18n.properties \ $(CLASSDIR)/com/sun/javatest/regtest/tool/i18n.properties \ $(CLASSDIR)/com/sun/javatest/regtest/tool/jtlogo.png \ $(CLASSDIR)/com/sun/javatest/regtest/tool/jars.properties $(BUILDDIR)/classes/com/sun/javatest/regtest/tool/jars.properties: \ $(ASMTOOLS_JAR) \ $(TESTNG_JARS) \ $(JUNIT_JARS) ( \ echo "asmtools=$(notdir $(ASMTOOLS_JAR))" ; \ echo "testng=$(notdir $(TESTNG_JARS))" ; \ echo "junit=$(notdir $(JUNIT_JARS))" \ ) > $@ TARGETS.com.sun.javatest.regtest += $(RESOURCES.com.sun.javatest.regtest) #---------------------------------------------------------------------- # # Misc. doc files JTREG_COPYRIGHT = $(JTREG_IMAGEDIR)/COPYRIGHT JTREG_LICENSE = $(JTREG_IMAGEDIR)/LICENSE JTREG_README = $(JTREG_IMAGEDIR)/README JTREG_FAQ = $(JTREG_IMAGEDIR)/doc/jtreg/faq.html JTREG_TAGSPEC = $(JTREG_IMAGEDIR)/doc/jtreg/tag-spec.html JTREG_USAGE = $(JTREG_IMAGEDIR)/doc/jtreg/usage.txt JTREG_DOCS = \ $(JTREG_COPYRIGHT) \ $(JTREG_FAQ) \ $(JTREG_LICENSE) \ $(JTREG_README) \ $(JTREG_TAGSPEC) \ $(JTREG_USAGE) $(JTREG_COPYRIGHT): $(TOPDIR)/COPYRIGHT $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ $(JTREG_FAQ): FAQ_PANDOC_OPTIONS = --to html5 $(BUILDDIR)/alt-faq.html: FAQ_PANDOC_OPTIONS = --to html4 --ascii $(BUILDDIR)/alt-faq.html: FAQ_SED_OPTIONS = -e '/max-width: 36em;/d' $(JTREG_FAQ) $(BUILDDIR)/alt-faq.html: $(SRCJTREGDOCDIR)/faq.md \ $(SRCJTREGDOCDIR)/faq-local-style.html \ $(SRCJTREGDOCDIR)/faq-intro.html $(MKDIR) -p $(@D) $(ECHO) '/
/{;:a;N;/<\/header>/!ba;};/

/d' | tr ';' '\n' > $(BUILDDIR)/fixupheader $(PANDOC) \ --standalone \ --include-in-header $(SRCJTREGDOCDIR)/faq-local-style.html \ --include-before $(SRCJTREGDOCDIR)/faq-intro.html \ --toc \ $(FAQ_PANDOC_OPTIONS) \ --number-sections \ $(SRCJTREGDOCDIR)/faq.md | \ $(SED) \ -e 's/^code > span\.\([a-z][a-z] .*\)/code span.\1/' \ -e 's/-section-number">0./-section-number">/' \ -e 's/…/\…/g' \ -e 's/â„¢/\™/g' \ -f $(BUILDDIR)/fixupheader \ $(FAQ_SED_OPTIONS) \ > $@ $(JTREG_README): $(SRCJTREGDOCDIR)/README $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ $(JTREG_TAGSPEC): $(JTREG_IMAGEDIR)/doc/jtreg/%: $(SRCJTREGDOCDIR)/% $(RM) $@ $(MKDIR) -p $(@D) $(CP) $^ $@ $(JTREG_USAGE): $(BUILDDIR)/jtreg-usage.txt $(CP) $^ $@ $(JTREG_LICENSE): $(TOPDIR)/LICENSE $(MKDIR) -p $(@D) $(CP) $^ $@ $(BUILDDIR)/jtreg-usage.txt: \ $(BUILDDIR)/classes.com.sun.javatest.regtest.ok \ $(BUILDDIR)/classes/com/sun/javatest/regtest/tool/i18n.properties \ $(BUILDDIR)/classes/com/sun/javatest/regtest/tool/jars.properties $(JDKJAVA) -cp "$(CLASSDIR)$(PS)$(JAVATEST_JAR)" \ -Dprogram=jtreg com.sun.javatest.regtest.Main -help all > $@ TARGETS.ZIP.jtreg += $(JTREG_DOCS) #---------------------------------------------------------------------- ifdef JAVATEST_SRCDIR JAVATEST_SRCFILES= \ $(JAVATEST_SRCDIR)/com/sun/javatest/InterviewParameters.java \ $(JAVATEST_SRCDIR)/com/sun/javatest/Parameters.java \ $(JAVATEST_SRCDIR)/com/sun/javatest/Status.java \ $(JAVATEST_SRCDIR)/com/sun/javatest/TestDescription.java \ $(JAVATEST_SRCDIR)/com/sun/javatest/TestResult.java \ $(JAVATEST_SRCDIR)/com/sun/javatest/TestResultTable.java \ $(JAVATEST_SRCDIR)/com/sun/javatest/WorkDirectory.java endif $(JTREG_IMAGEDIR)/doc/api/index.html: \ $(JAVAFILES.com.sun.javatest.regtest-tools) \ $(JAVATEST_SRCFILES) $(JDKHOME)/bin/javadoc -d $(@D) \ -encoding ASCII \ -sourcepath "$(JAVADIR)$(PS)$(JAVATEST_SRCDIR)" \ -classpath "$(JAVATEST_JAR)$(PS)$(JUNIT_JAR)$(PS)$(TESTNG_JAR)" \ com.sun.javatest.regtest \ $(JAVATEST_SRCFILES) $(JTREG_IMAGEDIR)/doc/devapi/index.html: \ $(JAVAFILES.com.sun.javatest.regtest-tools) \ $(JAVATEST_SRCFILES) $(JDKHOME)/bin/javadoc -d $(@D) \ -encoding ASCII \ -sourcepath "$(JAVADIR)$(PS)$(JAVATEST_SRCDIR)" \ -classpath "$(JAVATEST_JAR)$(PS)$(JUNIT_CLASSPATH)$(PS)$(TESTNG_CLASSPATH)" \ -subpackages com.sun.javatest.regtest \ -tag "implNote:a:Implementation Note:" \ $(JAVATEST_SRCFILES) #---------------------------------------------------------------------- # # create jtreg.jar PKGS.JAR.jtreg += \ com.sun.javatest.regtest \ com.sun.javatest.regtest.agent \ com.sun.javatest.regtest.config \ com.sun.javatest.regtest.exec \ com.sun.javatest.regtest.report \ com.sun.javatest.regtest.tool \ com.sun.javatest.regtest.util \ java.lang TARGETS.JAR.jtreg += $(TARGETS.com.sun.javatest.regtest) FILES.JAR.jtreg=$(CLASSDIR)/META-INF/services/java.util.spi.ToolProvider $(JTREG_IMAGEDIR)/lib/jtreg.jar: JAR_MAINCLASS = com.sun.javatest.regtest.Main $(JTREG_IMAGEDIR)/lib/jtreg.jar: JAR_CLASSPATH = javatest.jar asmtools.jar $(JTREG_IMAGEJARDIR)/jtreg.jar: \ $(JTREG_IMAGEDIR)/lib/javatest.jar \ $(TARGETS.JAR.jtreg) TARGETS.ZIP.jtreg += $(JTREG_IMAGEJARDIR)/jtreg.jar #---------------------------------------------------------------------- # Import a file to a given directory, and add the target to the list of # dependencies for TARGETS.ZIP.jtreg # 1: the file to be imported # 2: the target directory # define IMPORT_FILE $(2)/$(notdir $(1)): $(call PosixPath,$(1)) $(RM) -f $$@ $(MKDIR) -p $$(@D) $(CP) $$< $$@ TARGETS.ZIP.jtreg += $(2)/$(notdir $(1)) endef #---------------------------------------------------------------------- # # import JavaTest or JT Harness TARGETS.com.sun.javatest.regtest += $(RESOURCES.com.sun.javatest.regtest) $(JTREG_IMAGEDIR)/lib/javatest.jar: $(call PosixPath,$(JAVATEST_JAR)) $(RM) -f $@ $(MKDIR) -p $(@D) $(CP) $< $@ TARGETS.ZIP.jtreg += $(JTREG_IMAGEJARDIR)/javatest.jar $(foreach file,$(JTHARNESS_NOTICES),$(eval $(call IMPORT_FILE,$(file),$(JTREG_IMAGEDIR)/legal/jtharness))) #---------------------------------------------------------------------- # # import JUnit $(foreach jar,$(JUNIT_JARS),$(eval $(call IMPORT_FILE,$(jar),$(JTREG_IMAGEDIR)/lib))) $(foreach file,$(JUNIT_NOTICES),$(eval $(call IMPORT_FILE,$(file),$(JTREG_IMAGEDIR)/legal/junit))) #---------------------------------------------------------------------- # # import TestNG $(foreach jar,$(TESTNG_JARS),$(eval $(call IMPORT_FILE,$(jar),$(JTREG_IMAGEDIR)/lib))) $(foreach file,$(TESTNG_NOTICES),$(eval $(call IMPORT_FILE,$(file),$(JTREG_IMAGEDIR)/legal/testng))) #---------------------------------------------------------------------- # # import AsmTools $(eval $(call IMPORT_FILE,$(ASMTOOLS_JAR),$(JTREG_IMAGEDIR)/lib)) $(JTREG_IMAGEDIR)/lib/jtreg.jar: $(JTREG_IMAGEDIR)/lib/$(notdir $(ASMTOOLS_JAR)) $(foreach file,$(ASMTOOLS_NOTICES),$(eval $(call IMPORT_FILE,$(file),$(JTREG_IMAGEDIR)/legal/asmtools))) #---------------------------------------------------------------------- # # convenience aggregate value for tests ALL_JTREG_JARS = \ $(JTREG_IMAGEDIR)/lib/jtreg.jar \ $(JTREG_IMAGEDIR)/lib/javatest.jar \ $(addprefix $(JTREG_IMAGEDIR)/lib/,$(notdir $(ASMTOOL_JAR))) \ $(addprefix $(JTREG_IMAGEDIR)/lib/,$(notdir $(ASMTOOL_JAR))) \ $(addprefix $(JTREG_IMAGEDIR)/lib/,$(notdir $(JUNIT_JARS))) \ $(addprefix $(JTREG_IMAGEDIR)/lib/,$(notdir $(TESTNG_JARS))) \ #---------------------------------------------------------------------- # # executable scripts $(JTREG_IMAGEDIR)/bin/jtreg: $(SRCSHAREBINDIR)/jtreg.sh $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ $(CHMOD) a+x,a-w $@ TARGETS.ZIP.jtreg += \ $(JTREG_IMAGEDIR)/bin/jtreg #---------------------------------------------------------------------- # # release info # based on code in OpenJDK make/SourceRevision.gmk ID_COMMAND := $(PRINTF) "git:%s%s\n" \ "$$(git log -n1 --format=%H | cut -c1-12)" \ "$$(if test -n "$$(git status --porcelain)"; then printf '+'; fi)" $(JTREG_IMAGEDIR)/release: echo "JTREG_VERSION=$(BUILD_VERSION) $(BUILD_NUMBER)" > $@ echo "BUILD_DATE=`/bin/date +'%B %d, %Y'`" >> $@ if [ -r $(TOPDIR)/.git ]; then \ echo "SOURCE=$$($(ID_COMMAND))" >> $@ ; \ elif [ -n "$(SRCREV)" -a -r $(SRCREV) ]; then \ echo "SOURCE=\"$$($(CAT) $(SRCREV) | $(SED) -e 's/:/:git:/' -e 's/ *$$//')\"" >> $@ ; \ fi TARGETS.ZIP.jtreg += \ $(JTREG_IMAGEDIR)/release #---------------------------------------------------------------------- # # create jtreg.zip bundles JTREG_ZIP = $(IMAGES_DIR)/jtreg.zip $(JTREG_ZIP): $(TARGETS.ZIP.jtreg) $(RM) $@ cd $(IMAGES_DIR); $(ZIP) -rq $@ $(@F:%.zip=%) JTREG_ZIPFILES = $(JTREG_ZIP) #---------------------------------------------------------------------- BUILDFILES += $(JTREG_ZIPFILES) VERBOSEZIPFILES += $(JTREG_ZIPFILES:%.zip=%-$(VERBOSE_ZIP_SUFFIX).zip) NEWVERBOSEZIPFILES += $(JTREG_ZIPFILES:%.zip=%-$(NEW_VERBOSE_ZIP_SUFFIX).zip) #JTREG_JAVA_OPTS = -Ddebug.com.sun.javatest.TestResultCache=98 #JTREG_OPTS = $(JTREG_JAVA_OPTS:%=-J%) TESTS += $(TESTS.jtreg) jtreg-jtreg-7.3.1-1/make/pkgsToFiles.sh000066400000000000000000000026151446671450000176220ustar00rootroot00000000000000#! /bin/sh # # Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # classdir=$1; shift cd $classdir if [ "$#" -gt 0 ]; then for i in $* ; do dir=`echo $i | sed -e 's|\.|/|g'` ls -F $dir | grep -v '/$' | sed -e 's|\*$||' -e "s|\(.*\)|-C $classdir $dir/\1|" done fi jtreg-jtreg-7.3.1-1/plugins/000077500000000000000000000000001446671450000155745ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/000077500000000000000000000000001446671450000164765ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/.gitignore000066400000000000000000000000271446671450000204650ustar00rootroot00000000000000.idea .gradle/ build/ jtreg-jtreg-7.3.1-1/plugins/idea/README.md000066400000000000000000000221341446671450000177570ustar00rootroot00000000000000# jtreg plugin for IntelliJ IDE ##### *Maurizio Cimadamore and Chris Hegarty* This is a convenience plugin which adds jtreg capabilities to the IntelliJ IDE. With this plugin, OpenJDK developers can write, run, debug jtreg tests without the need of leaving their IDE environment. ## Plugin setup This section covers the initial steps that are required in order to correctly setup the plugin project inside the IntelliJ IDE. ### Folder layout The output of this folder is as follows: ``` idea |-src |-main |-java (plugin sources) |-resources (plugin resources - the plugin.xml file lives here) |-build (where build files are stored) |-distributions (where the plugin zip file is generated) |-build.gradle (the gradle build file) |-gradle.properties (contains properties required to build this project) ``` ### Building the plugin This plugin can be built with `gradle`. To build the plugin, simply run the following command from the `idea` folder: `sh gradlew clean build` > Note: when working behind a proxy, additional options might be required, such as: \ > `-Dhttps.proxyhost= -Dhttps.proxyPort=` This will download gradle and the required IntelliJ dependencies, will build the plugin and will place the results in the `build/distributions` folder. > Note: to build the plugin, the build script must point to a valid jtreg installation; see the property `jtregHome` in the `gradle.properties` file, and tweak accordingly. > Note: the property `minBuild` can be used to specify which IDE version should the plugin depend. The value of this property should be a valid IntelliJ [release build number](https://www.jetbrains.com/intellij-repository/releases/) (defaults to `IC-211.7142.45`). Once the build is configured correctly, the plugin can even be tested in a sandbox environment, as follows: `sh gradlew runIde` ### Installing the plugin To install the plugin in your IDE, first you need to build a plugin module file (a `.zip` file), as described in the previous section. Once the plugin zip has been obtained, it can be installed in the IDE; go in `Help -> Find Action...`, and type `Install plugin from disk`, and then select the corresponding action from the drop down list. A new file dialog will pop up: point the IDE to the zip file you have created in the step above. The IDE will require a restart - once restart is completed the installation process is completed, and the plugin is ready to be used to run and debug jtreg tests. ## Using the plugin This section covers the the functionalities supported by the jtreg plugin. ### Configuring jtreg The plugin allows user to configure how jtreg should be invoked by the plugin. Possible options include: * which jtreg should be used to run the tests * which JDK should be used to run the tests * which jtreg options should be used to run tests * where jtreg should put its output files Configuring such parameters is possible through the dialog located under `File -> Settings`, under the `jtreg` panel. By default, such settings are saved on a per-project basis. If, however, you would like to specify IDE-wide default, you can do so by accessing a similar dialog under `File -> Other Settings -> Default Settings`. Note: the settings specified here will be used as defaults for creating new jtreg run/debug configurations. As a result, if any error is made when configuring global jtreg settings, such errors will be propagated in all newly created jtreg test configurations. ### Running/debugging jtreg tests In order to run a test, you need to create a run configuration. To create a configuration, simply open a jtreg test file, right-click on it and select `Run` (or `Debug`). This should create a configuration for the selected test, and run that configuration. The configuration will then become available for inspection under the `Run -> Edit Configurations` menu. If you wish to run all tests in a given folder, the process is the same: simply right click on the test folder (in the left panel) of choice and select `Run`. A jtreg run configuration contains the following information: * which test (or folder of tests) should be given as input to jtreg * which JDK should be used to run the tests * which jtreg options should be used to run tests * where jtreg should put its output files The last three options can be used to override global settings (e.g. in case a test needs more memory to run). Once a configuration has been created, the new configuration will appear in the top right panel. If you notice a red mark beside the configuration name, it means that the configuration contains errors that will likely result in test failures. If that happens, please open the `Run -> Edit Configurations` dialog, and select the problematic configuration; this dialog should contain additional information as to why the configuration is problematic (e.g. missing JDK path). To run an existing configuration, simply select it from the drop down list in the top right panel, and click on the `Run` (an icon similar to a *play* button) icon. If you wish to debug instead, simply press the icon beside `Run` (the one with the little bug in it). Debugging works as for any other Java application. Simply set breakpoints (this can be done by left-clicking the area to the left of the code in the source editor, which will cause a red circle to appear). During a test debug, execution will stop at any given breakpoints, allowing you to see values of variables, set watch expressions, etc. > Note: debugging only works with a _single_ test action such as `@run` or `@compile`. If multiple test actions are present, debugging will not work correctly. This is a known issue. To workaround, please manually remove the test actions that do not need to be debugged. Conversely, `@build` actions can be safely ignored, as they do not have any adverse effect on the debugging process. ### Inspecting jtreg test results Once a test (or a group of tests) have finished running, you can inspect test results in the corresponding bottom panel. This panel is organized in two sub-panels: the one on the left allows you to chose the test whose results you'd like to inspect; the panel on the right contains the actual test output (e.g. the `jtr` file). During test execution you will see green and red bars appearing, notifying test passes/failures. It is possible to filter out the tests that show up in the left panel so that e.g. only failed test are displayed (that is done by clicking on the little circle with the `OK` label in the bottom panel); ignored tests can be filtered in a similar fashion. If you click on the very first entry of the left panel (the one named 'Test Results'), some general information will be presented in the right panel - such as how many tests were run, how many pass/fail there were, etc. You will also see the URL to the location where test results have been written (this can be opened using your browser of choice). ### Creating new tests To create a new jtreg test, simply create a new file under a jtreg test root. Then add a javadoc comment like this: ``` /* * @test ``` And press `CTRL + ` - the IDE will show you possible completion suggestions for creating a positive/negative jtreg test. Once the right completion path is selected, a full jtreg header will be populated by the IDE. The IDE will then highlight the sections in the header that require user intervention (e.g. add summary in the `@summary` tag, etc.). Once you have finished typing in the input for a given section, just press enter and the IDE will move to the next section which requires manual intervention. Repeat the process until all required fields have been entered. At the end of this process, a new jtreg test will have been created. ## Miscellaneous ### What needs to be rebuilt before a test run? The jtreg plugin is very flexible when it comes to defining the actions that should be taken by IntelliJ to rebuild the project before running/debugging a test. If your project does not use Ant, the default action associated with a jtreg test configuration is to simply run `Make` - which is the standard way in which IntelliJ builds a project. However, if your project uses Ant (this is the case with the JDK and the langtools IntelliJ projects), the plugin can launch any desired ant target before running a given test. To select which Ant target to run before a jtreg test, simply go in the `File -> Settings -> jtreg` menu, and add ant targets to the drop down list. You can add, remove targets as well as changing order of existing targets. ### Dealing with bugs In the unfortunate case you run into a plugin bug, you will notice a red mark in the bottom right part of the IDE. If you click on that icon, you will have the ability to show the stack trace associated with the error (and you will also be offered the option of disabling the plugin). If you want to report a bug against the jtreg plugin, we recommend that you copy the stack trace along with the IDE log file (this can be found under `Help -> Show Log in Files`) and submit them along with a description of the experienced buggy behavior. Please forward such bug reports to `jtreg-dev@openjdk.java.net`, or `ide-support-dev@openjdk.java.net` jtreg-jtreg-7.3.1-1/plugins/idea/build.gradle000066400000000000000000000013661446671450000207630ustar00rootroot00000000000000plugins { id 'java' id 'org.jetbrains.intellij' version '1.0' } def jtregLib = jtregHome + File.separator + "lib" + File.separator + "jtreg.jar" assert file(jtregLib).exists() : """Could not find jtreg in ${jtregHome}. Please make sure that 'jtregHome' in 'gradle.properties' points to a valid jtreg root. """ version pluginVersion compileJava { sourceCompatibility = javaLevel targetCompatibility = javaLevel } repositories { mavenCentral() } dependencies { implementation files(jtregLib) } // See https://github.com/JetBrains/gradle-intellij-plugin/ intellij { version = minBuild plugins = ['java', 'AntSupport', 'TestNG-J'] } patchPluginXml { changeNotes = notes sinceBuild = minBuild untilBuild = '' } jtreg-jtreg-7.3.1-1/plugins/idea/gradle.properties000066400000000000000000000002331446671450000220500ustar00rootroot00000000000000jtregHome = /path/to/jtreg minBuild = IC-211.7142.45 pluginVersion = 1.15 javaLevel = 11 notes =
    \
  • Fix NPE when resolving @library tag
  • \
jtreg-jtreg-7.3.1-1/plugins/idea/gradle/000077500000000000000000000000001446671450000177345ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/gradle/legal/000077500000000000000000000000001446671450000210205ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/gradle/legal/gradle.md000066400000000000000000000274301446671450000226060ustar00rootroot00000000000000## Gradle v7.6.1 ### Gradle Notice ``` gradlew gradlew.bat gradle-wrapper.jar: Copyright 2007-2022 the original author or authors. 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. ``` ### Apache 2.0 License ``` Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} 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. ``` jtreg-jtreg-7.3.1-1/plugins/idea/gradle/wrapper/000077500000000000000000000000001446671450000214145ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/gradle/wrapper/gradle-wrapper.jar000066400000000000000000001635031446671450000250360ustar00rootroot00000000000000PK A META-INF/PK Am±>=@?META-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àåòÌ-ÈIÍMÍ+I, ê†d–ä¤Z)¸%¦ä¤*„%¤ñrñrPK Aorg/PK A org/gradle/PK Aorg/gradle/wrapper/PK A•%Ó¦¹/org/gradle/wrapper/BootstrapMainStarter$1.classRËnÓ@=Ó¸u1¦„ôEy”@_IikÁ6ˆU‘@.,RuØLì!™ÊGã ü6 ±àø(ı ]t1ssÎÕ¹÷ÎÏ_ßxŠ½ó¸³ˆ»îá¾M|4ži£ÝsZ«}.à穸k£ÞŒ‡=eÏd/c¦ç‰ÌÎ¥Õeié0“c“ ”=<ÚO¦õ±b»í+7.Pÿ£ômïB%œÀÚßM• Ñ-°wźláƒ6i<øZ2³93Ööìèê³#ð‡Ò±w¹Úºl hÂãâòø¹æx8F×èE´‚v~ÿÄ—ê9à½P%pw8Ð.ÑR3êSò ѵ²ÜAcî+jŸgèQEoN SzéÝB£z÷±Œ•ªÄjÅ\Ã:­‡ÛØÀ zQ^ÅÁoPK Ai,«$ -org/gradle/wrapper/BootstrapMainStarter.classVÛSWÿsÙ°,ˆ1*‰‚±BI/µV°V(Ð-m´Ú.É!¬nvéf£Ðjï­½<÷·þ ö%Ø2µÓ—v¦“ãô;»IIb¼ÀÌÙ³ßõ÷]7ÿ>ýý1€£øIF2^à C˜”0%cïÊðA•0#aVF —d\Æ{2æǼŒd\ÁUq¼BNP®…p]ÂR2"¸!c7%|؉^|$A aQØÊ‹£ .aIÆ~ †¢„eeÊ4¹1´r™—‚§tSwN3øÉ+ þŒUà ÛUÝ䳕Ò"·çµEƒ(aÕÊkÆÍÖÅ{èw–u²‘T-»˜.ÚZÁàé»¶¶²Âíô9ËrʽÌhº™u4Ûáö8C ,® ‰ëê-펖64³˜Î:¶nÇ=Šn¥/èwñhv‘<ìl#Ì {.'­aénVfèð¸ÓšMèó–éðUÇ [µ´'bÔÓ0¹“^˜SXB¹D¨]ÃŽß.I¸üî,[†Xƒ€Í— žwÒ$w7'nm¥ž¼H«ÙSçI¾‹r•¿=£­¸btr6±šç+Žn™e ·¨:KºYPµŠ™_æ¶_¢%u­ÉPŒ-q iûõgôÅóºMÐ-{\f­Šç‚I‰jWË”0 `ƒ NãÊÂV8sÓÑKüØ «bâ¦åÄ Ê‡ÃãÎ2_t+¯c‹OŸ‹ëf\Ðɧ¾XâCƒå¡CÏ–“K‹·­„Û ”ò³ç9%¥9 ,¬HøX Ê©£ ‚; îŠc«Ö|‚OÜÃ}Ê.µwÊë¦TkÊ)¢à3|N­*Z‚RÛRU_àK_ákê¤zÒ3†U梾 ¾Á`\­4‹T ä[ßá‚ïñ€¦ì‡làˆ‚ð#ÃÐ+*0ô>¯iò¶X åìiFZ$K–]Òh²O&žÕÆñõêVoÑæ‰ÞÕFW¬€c-ÌM‘ßD²qh§Æ›ë:U“TŸ‘T…ñ–ÊÔ;#RäNv­ìðRózH$['tk=ÊeÍæ&Å›¬o²º§çh‰8ò6¿lsÜ•¯ØÂPý=ÒäÖ£ ðeîdÚ,±Xâî: º×¶Ø`»Ô¶Ùl"´zñϼ¤”žNòEë/¨›w¬Û¼¥-j=𒶨‘¨¨y1/ [Ö\ûf òUÚe÷“v¡S/7,¶ƒxBY|·šÍ™ZI,<ñJ¶ìG xâÏ&–¯Ó[šžŒžá °_é² Ct]b :OI Ó“a£$EÊì$úî>¶ÙCÿ w¾\Øïÿœo4ûÁ Hn"”#RGÎw¨ ¹ŠNb(Utm {ÌÿÛ£þ*z¢þðŽ*Âch ¼“¤#9_xW¶ŠÝcÁhyGè}ÏÕ¨ÿ/ô®CŽúC”A€ö» Sè¤s/A݇ô¡Ÿ~8Œ#Ž E¯Rü7q%нBÑß# ܤ@-8q;Dv˜{Kã0À*ŽÐÍG¶ÎÑ¢cäM%Ê8N¼›äãMœ „½UK•Ç;I¼1¢D°í ú%Ğↄ„ˆDvN¹˜Þ¦ŸDôí©Õâg¢ùèy|±Üpxïö©#Uô­c€ýëèÙÄþÜâU˜ý]£ý¿@õ}Ⱥ¥iˆP8T©(Õj@§ ö1*BŽ“Ü ºqg)öæÁ?ßð Þ2Ç õhÁ )¥È˜$NÖᔉÓx± œ‘š³&Îa¨Ã15ð’‰(^Žœ™ú˜ÈaTŠóÆ \00Îq¼rYø yÏ/§Ë>/9"½äó…á§óʘa¨+ G”y ŽnwpØ[r—.ú^Ù•JÞ®ÂU®{|±h{ÕÊÆá…0°៴];8Íp>¹ Ç‚ì™by%âÚ”·]q¡:?+üI>ë¦9ï¹3Å}[>×”á`ή0t‹+¼ê;Ef°r.­C¯T9œÚסÿˆF¥I”j¶BÀƒjehŽ»eQbhIæ¯òEžvE¾4‘ËŒŽÊœ ^*É ›¢EÏ¥ A^¸å`Ž*;Ê`®—£„P¼6Æj'$Ww½¼, ^–S‚zr «µXõ}²<Ú3é¼o{éÜøÈõ¢XlÏ%mTÙbÕ¡)yÄMÅ¥v7^Àuš±MŠë*³àUÉ'kK–Ñõ8ýÐÂ~\´ÐнÚÐna:,E?±ê7ðŠ… ,Ƌޛg LZ¸„)ÓÒò*•uÚ û”Ö¡Ò§'ªn`Ï‹ £Dœ1ðš…×qÙ¸làM†Ìÿè:%½‰7>{U©:½1Þ ZRv¨}Ç·…^ªµî2« ’B£ñò âíªp‹"Ó³ÅpV–ƒ‘yˆ^!ðm·Lƒ·Èª¿BOæ¶:® §øvÁˆcrhGœ¶­Ô&ç|oIdj›†1.‡B›ç×å årr†´y›ÚÖ±KÍÐE·aÄšåÄÐõ×,‡†ÖœZÃdß$ÒÓ,é5Zã©°Tï2B©¾eh)má;Ê«“d+t’Ÿ“ï¨Ç—hÄW„ô5á~ÊÝ8¤®Û¸Âej'‘C´§Ù¬á½}Á®ú›ïbOêChŸÁLuµ†W “¼y QR†š#Á˜–æO“K/ï¢.ÉJS¬ ù ]ößÖw”Ý÷„ôúð#Nà'Å.Eœ mƒÝ žBR±DYCj׫ÎõÑ^‡µšÞ¯å5ÊÙ˜™êì^A}Ìtæô„~ GˆY8¡¿‡’sB_…I´c‡ï¢!„éTB§*ÞFÓ þ ¢3íú ïßQàDЪ¥ñêHþLEý…ó+Žá7²ÿI'~G`©T޹F"Ÿ¦Du²˜tòiÕ˜ìFzY•S;™”¦’ªƒ6p΀Õ@yÑ QËk‚²’ÞñXIë¾ÑyË£éÚ;«Ø³Šæ6ZQÑþÞ¡ÕÇkhq<§ÐBÄ\z>'Õ?/]>ÈS†æ¿PK AѺNì,À4org/gradle/wrapper/Download$ProxyAuthenticator.class•UÝSQÿ]D×E‰PSó#5TPûÒ4S1ÊB%PÓìe…ÜÂ]Z–Ô¨gëœé¡¦/{èj¦éÜDG‡{Î=çwÎý³ç^þ~ü`/ExÐ'¢ž/ôW#€ ×D bHÀM÷ ¸åÀm.‹aF¸ÇÕQc"îc\„ xª SB Ucª¦šã ^߃=¤'†ºˆª)s¹5ÅX×ÒdqGô„œ^’ •ï F»¹®fÉ5ô­íÉœ¹®h¦šMÝ`f4M1Bi9›U3ÑT0eÈÉ´Ü4äLF1‚Óú¦–Öåd÷É£ M)ÅŒRø¦n$K|ª®1ty}‘Wò[9¨)fðtepfxÞ#7/ŠIËZ*7 UKÈA SOèi†j ¿˜Uˆ¿3nʉ׳rƪUÀ4C§÷Ì"Gym[ íçĸž3JXå}t¹œŸ„4JxˆGK˜Á O0+aó åULåÔtR1$DñŒRŠeHˆa^@\Âje wéösz)ไe¬pj/$´£CÀ*Càÿ¾)CCñœ2Gë™ýbpÑ,Ä”79%Kð…í oZÙÞ[:ÇÒwCRó»/‚c¨ŒÆæ—Wz.š·„%}•ÅX„L¥¬ÈB(©tÏPÃǼ8‚ž#üñ!­â-Ñè‹õ{OºOF‚O·©šˆJ j;k*ų©Ûæ6Õy¡Ü”tøàC]å6"aê¡uÙ˜4 ™Hؽ¾Uz—O9b5Ä/XË£‚zëÁ°ñ{†+´ ’¤qG¥¶÷¤ØÐDk•eüŒfð«`Ђ6’v>ä…à/´³“\öçQñöwˆV™GUdÂÊ.½yT»EZò¨Ùƒ4Û÷ ¾R—óÐå®ÝCÝÜ>\+}ýy\Ú…{‡ø\Þ±èr>môx_!â;Üø~¢ãâømñô—0œ¸†NŠrc]¤1ÂúÑMš3-TqݪˆýAÜêÆBA#$m…n°Ó»Ñp(äáš—Nàa~ ß‹V’ÍÄÀC ®ãs9èß©ቦPK A$É~ãX !org/gradle/wrapper/Download.class­Z xÇu~±KpyA%è„eÐ’u’–l‘¢$H¼D”)Y’WÀ’„báÅB8Žíȉí(vl'qœ¦n›¦n›8‘œ”EÛJÈ­Ý6é÷HÛôH´MO×½’°ÿ  @B´Ó¯ú„Ù™7oÞ{óŽfWzãGW_#¢-ü¬‡VÓïyè}«½·Dóû¢ù…þÐCnú#1ø¶àúc•þÄCJßQéÏúsUÒ_xè/é»úý•hþZ°ýhþÖC»é{ ýBï¡:ú-¡ï{èËôbúŸDóÏ*ý‹‡^¤UèßÄómÑü»hÞÍxèKôŸú/úoÑüO9Tÿ@¥zèG4£0©ÌÚÄ%e$þÔUp)»<ôE.SÙía…UHàrA)WØ£p…‡¶Ñ·TÖðäJÑT©\-ž5BR­Â^˜Í‹D³X4KDS'š¥¢Y&ŸÂË^¡òJíçZl„W©¼ÚC'yÊ~•oRy­ Þ §ò: òz•7xèë¼Qåz…7 RƒÊ*7)ô…›=à•o26+¼Eá[UÞªò6•·«¼CåÂÆ]B{«Êm*ߦòn•÷¨|»Êw¨¼W,lW¸Cá}LZ07¬Ž˜žLI¦5ûŒ=³÷™ñ˜©Gú,sÔ2’É®hÒ6ÀÈäéÜäÞ”=fÄíhX·M«{÷ôí95ÔÙ öö€­ëý¬ÞÓã£-!ÛŠÆGÛ˜*;ÌxÒÖãöK*w2U´îßßÙ*<†K‰ê‰©ª¯¿÷@g(tªã d—ŠˆÁºŽÞžžÎŽh85ìîì8Õìê †:1³/„Åk˜|ý{÷e`rÇÌÑQ±]¦5Ú2j鑘Ñ2a鉄aµtÉIXª`Ü£Lô† +5ãL5‰yþh.&çFîƒd÷mÑxÔÞÃÔ^¿€ó½7Ÿ²iˆÉÕaF`duW4nô¤ÆOÖ€~:fÿ›a=6¤[Q1vˆ.{,Š ¯ZÈd˜h.hÙ³Ý÷º•a3>MYÆÜì’n/­L•![ŸéÖÎnÔˆ£‰QŸ‘7ì–Áþ £%j¶ìÆ ©AÑ#aR«)1’v4îèª*\‹è<6b‹k²:ƒqÛ°âz RIÃÚ;j8YŸNŒˆÔ(9ÞÅñÔx¿!Œ¬°M[uñQ{,O’É’ø"™Í°3%T hð ìZ–ov )n„…Q°¡ô¦Ùé>cØÑqÃLÙ9ãÁWŠ1S]nƒ½);‘²CÇtIj–äfƒñüI%©ƒVlŽÿºÚÞ¯ð…*TøÂ‡sÌQ¦Õs³i®óWB“q[?W`sJˆ©CôÚõd4<736 ü|'‰ð„sc$ˆZ0>bOëIcûÖÎxXÖÒ†ú"9Z ÍjF ;³Èê6ì1!^žÇg#1hkÉÌ_3$s–WÉ ­B¬ì=}»JжõZº‹ ®%y\ù’Œ;òÝ2«ÐYš·B"|—œ@Ⱥ˜jáTL·Áœ'ÖVá¶¥çâÕ„N˜vã-'Ëiq}Q A2âqtTdÀÖÎNåhn3™âr3™OÜk…Q4ž™²Â†(V@D‰BŽFÐÑ<¡ÑéA¢”FSŠ©m[÷.g $r·F¢ó}Œž@Æl;Hä›W¸Gã^ºŠbÉÙ¦ÀBz矬BUŸÂG4îçÆ<¨ñÕèYzJ£Kô’Æwò0ð3[´ízŒH~i;ò!-JÈ?&šãßÅ'4ºLiÞ 7áWap³ ¤Æ'ùNÌl×ønÖ5>-š0chðˆÆ£<¦pTã{øŒÆ1a÷çæTD²Y©„mDŽklr‚iQxzsé³<«Á?¡'ýy Âì„Â÷jlqRc›VRø¬ÆœÐøœˆÌšwEÔÈÜülOEc²zj³šAôXæ¸_ãI¾O4ïCñûGt83Òê·325~?½)lº•ž_Eü€h>(¼ò è=$š‡3+>ß.€‚€•Y#ûq*@aÞä¢ýÒ¿múº•4üB']§×™Êdþi|ža:toO°ç€0)vtp` Ï/1Õ_ª~ó¬aùõ8œ4Â8’ý³¸)”dÏ-?ùÈtðGPVôtJðü}1ˆ*–%£p¥?•S  F…:ÓŠÞç@¸;c„F/ÓU?ÌÑøQ~ ›@d,Ð.ZãÇù£HÌYØE…ÍA8/ðÇœ„Ï_».·¢*»f&ÜŽž|ðUø ŸäÃû›wjü?]À—]º¨"3ùõ\àÜx,p:öé¶nO& Gð¬<Ók`gLkÇÕÚd:‘ŸoEüšôODí±âMúã¦íO¦ j"~Ð&ŽþCCÝð»7Sº§t3xTWHìsð\$ù3BèÀY®5gäÀpuf8>KQÌd s:xÐ+ ë°W¬O¶¬Oúë×'ÛäßMy]?ÉŸœAšà¾ÜmoÕB º÷¡[²%è@N¢bwl¿øu!ŒâyìùuÝUþ1ËœÈ\K—=t™ÿ¿ÝªÅe&?'A°ŠÂ/–Ú“ò,_ÐMRÊìþç¼Ðy’†íƒˆXÞµ €Oʨju ÄŒ«k²‡þìÚ=~&µ’ò" ee›Ò9Îì]…Q?ÿêî«/~csUØn¸ÓÓE>¨èIâ˜U¾ßÒGÇå ;ñž’w>%ø[&¬v£€ôXrN>dÝt,c¬D>Ô|¿Ib[¦6  Ñ7ŸÍyU“D®8âÖ¿K ³ „c³¯YwYs|Þš|)ó^Ü–ÝhΈÆÏšg¿]Eœq|á4Ê½ê ‡µOÚâû[]±ŠÏ+ë;JA‘³ïqîÓ×í9VÙü “»n¢ÕtŒ˜L*'Ù”Bÿ,•Ð-§s4™߇ñûòÆïÇøþ¼ñ0~ `ì¯cè{Å™|>ì<ñR…§¼Ð‡Ñ~£A*#žå ÜÔøùm^!Ÿ™DøIÚˆö <~)x\ÝHØ>$f?5Qi;€4D4‡0{Ô;i57§0ÝE#tuµ| iz7Ò1ŒhFèyÌ|…FišÆè :ôº—¾K}+¾~›ÆéŠÃš¯£{yY ›·PŠ·Óüyy²…~–>5 ´ßOÏÑga èø `F9ôž¥Ï¢çö$öôôŸ;4¬6††kÜMh”æÐŠ_œsOyv^……Ó¸h½‚KÝ«¨‚×pH\“{;˜1ÈÙ›ÂoÈÈhÄoʽyqLü–Ü›Çÿ7ä=Å*ú&ze³~=78Gjþ] „Ë_)àZü£»Š¹Õ8$ÄÿX 0÷ü/PK AyL¢¡Ê1org/gradle/wrapper/DownloadProgressListener.classuÁ ‚@Eï+ÓjDËöEÐ@Û–EERûI¦ˆ#3cþ[‹> Š4Úv‡»9œ×ûñ°ÂÀƒç¡O˜Äª.r%ãÐJ[™ÍM Ç„ñ,Èä]Š‚­8Ÿökߟ_ÃPU:â]š3aºý©G­ÍÆ©±\°^¶&a¡t"-ãœE­eY²ÿÂè›Ë›¼8\3ެK tÐŽBNûÐkØûPK A!9|¶„ 3org/gradle/wrapper/ExclusiveFileAccessManager.class•WÛsWÿYÒÚ«u|iªVÍMNZ*;±•JŠlB×NåKœÆŽ[—t-دvÅjÇÜSšB[(·¶ÐP`x¡ 3íL«$x†ô©Ì0à }á…0¿³+9¾%L=öÙs¾óÝ¿ß÷íúOÿýýÁ¯t<ŠgZ ãYµÌjxNG_ÔpNGϨ×Ô Íx^mMEœSKA-EµH ›1¯¶ ::`éÔvIÃb3lIÅžDIGŽºqu”ñåfxJ_¥~O¡ªc—u,áJ ê§íÄñ–ñ _Õð5öñÉ¡± #ùñá SgGFòÏ tŽ_2/›YÛtæ³S¾g9óý­C®SñMÇŸ1íªhñ­’t«þDE@äv”]ÛÎ;¾ô.›¶"Æ,Çò Ä2ù|÷Œ@tÈ-R°mÜrä©jiNzÓæœ-•=·`Ú3¦g©sõ,jÉŽ»Þ|vÞ3‹¶Ì.yf¹,½ìð•‚]­X—åˆeËÁBAV*¦cÎKŽÆÍ€ 0˜ ã°Ü¬âëOUß²³×)T=O:~vÈ´me±¿{]Ô“s—dÁWÊ䕲å-3ÄQºd»…EÝ!£C½…Óq¤] 0ŠE•(¹Þ;&f£*2³B5ûþ?ÍÊ^¨¤£±}Òò虫\j÷L§è–ÂøC¶‡ÖlÙtGuZÝÛ5Ó[" äMn,Ér¹Q–‡ïíõÀôtÿ1•„)ß,,N˜å@LÃ×5|CÃ75|K@gùdÙ·ˆ'ÂhÊšwL¿êQ÷ÄÀtnkŽ}¢2†ts¥óÒŸ&J',ÛVXjÊt³Š%syNÙnE>]µ¤o3•É;6‚‹ÄlK¡q¸oF3åV½B½ÖûîŽÌ>%l W Ä!½8$`¬ÍÀ ø¶À›»ïDÕ²‹Ò3ð"®x ßèýD]AÌõÙ…EßU úð²Wðªï©åûx•À¹cóLÕQ­½V$ÃCnÕ.¦×O#€&¤A7zxŠ N5@¸ïT3„Ï(ïúåz˜§Yò4©}Ï ˆž] Ò³û4½?ˆE¹vqÝÀ<Ì ŠáÓøLø¥˜ÁNŠpÿ8>K.š‰ü1´â‰DgÖ[A|ö4n›khéLp©Á¸ÖS½¼ÍESÑv\ÇcêÙöêÙ~]+蘭ËvvRˆÜ÷5dwÞ¹˜ÈÅÊý=ï#rÍ<ª‰\KªåT´¤öúÛ8º‚äloç7ð`.–ŠÕÊÅSñ WÿšŠßÄ®TŒ U4]»‰Ýï¬~¨Tô®7½‡6•‰övîãþà7ÝBZ §§Hè Ò«@'¼c ¥¿›KlÏ“¸3Ö1·™ÿ¿ãcÑÆ¶‰õDQDDwp>¨žäPõzp}”ÕÊ@8B gmγ*& _$W™Ô ëö+ôkôŽrÖ}¿F¿A?~‹Ô(µ‚AZÆÇ8‰ðÃñŸü:üưŠqÁ¤Ð8­ Ó›“"‰¼Ø…Q±câï?… z5)“çqj…™sDP·hí hô F›9Òˆ‹ޏë§uì>cÄÑ~êþiMȈvz5ÀHMü¾ ªŠø †ð$?b‡)n¬IŽPò$)SÐþƒã¢üݳŠhÑ ǧB¢†¤†<£À¿q¢ÏÒ0¶Ê.Ò¶åƒÃx½dÐ(§øÇWW½§Žw@óMì߉¥ß­5S< Ÿ ’a„<õÀuõ.«ËŸç3ôäGhí¹…GÞAtü=’£dl¥Ù¦@]± …ùßéçysŽýùü:õmŒšO• ‘ ²¼8x4ó?PK Aì„,y†-org/gradle/wrapper/GradleUserHomeLookup.classSÛNÛ@= $vŒÔ”K J)$´ÄÚÒ E¢`@"\”@¤Õ-Þsc-ÂÄg¥ØOˆN™QMž} (1ŠáìÁ#Šj€ RŽ`뛿Í€i­õm¹õßP/ÊQ«ðWM:‡Ü‰â;"¢¬+) Q¤gc@'Q„)‹f! Ip @"p€å´Hw·bo’8=N%ŤډÓ;RN² ½8½÷êôÞCÇÉ?»§Ó•éË÷¡¹7oþWç½yüá+V‰ ž¡b3ž©Bųäðl9Ü­à9**$¹ÏUð<Ï÷ã~¼PΫx^ìÇKüx©‚{TÔJÆZ\‹/Sñr¼BÁ+UÌtɯRñjÜ+aï“ÃkäðZ÷ãu ^ïÇüx£ 7)x³Š…x‹Šx«‚·©X,îÇ ôãí*Âx‡Šwâ]òëÝrxÞëÇE?.©¨Äûäüý*>€ªÈ`XÅRñ0F|HÁeëqEÅ]¸êÇ‡å†øñQ“Ÿ—‹ŸPñI|ª ŸÆg<"9?+!Iþ>/‡/¨ø"¾¤âËøŠ‚¯ªØŽ¯ ÌêØÛÒi?²¯§}ï‘ÎîíGºw÷vuïDNè§õ¦¸žhê±­Xr`ƒÀÔV3™²õ¤½_§ PÉö¶öÞ–®H{[§.˲g_W{oŽ:¯€Z²©bc,³7 ”…ö øZÍ~J«‰Ä’Æ®tâ˜aõêÇâ†TÒŒêñýº“ó,ÑgÆRK"¦5Ð4`éýq£éŒ¥ VS‡3=àÎvê±$ò%ø+03|¨ÔdGºn ¯ÎcY@Í"o×-j—#f6m‹Å ®VY&협’Å2M»-FÞŠ!ÝJüX˜¯g4kj5 =Ù/Ýíð¨2j&OHnX[¼¡ç\Ê6»s¢òZǶC1‡ìãç!Ò‘ÓŸ·ìÓRE°t‘k_ÚŽÅ›ÆéÒNk•í4´³"n HeçzE!â,r_M–Ò~Öˆ¦m“ü‹¼ørI··Ÿ®9 ¾ÎàèýýÅn¸)\™Œ­êJr•^PÄÞPÎÚ¬Bù2¦…KØüqf¥Ô-—IÃnÚ··‹k‚ræ{Î%mýlÎò„òm—Ù×S©6ãø63ìo·,Çþ©=¶=¹Srr^Á7V…'Žj‰ª[&µéF!T{Ì´5ÜôžYr¾VHLˆ6óL2nêýö¢GÑÖ`#¥á(è×ÐD§BÃ7ñ-ú¿øP2‡&sð ²NsÙ–§ ¸|Y áÛøŽ‚ïjø¾OžSå§Ò1ÃXý; ?À5ü?Vð â§Ì¢ñCÔ©§D ?ÃÏüBÃ/ñ+ 1àš˜kŠ˜©‰Yb63R1Gs%qžÌB¯{(¥Ìù,‰ã2ò\£å;NÖÍxÜ<³/y2ÉÃØ=Ö…&Ó”*Ì,è:ÏÖyˆî\©›ˆ‡)2¨§Z¬tÂHÚ©–Õýòxl m19—Ô¸Rcd/(w:òd­ñl™yÛœâÀB=`ØùíböX»(m¢J¶Ç lDUÎCaÙÐP4˜î%FÞ;Òv‹¬p1}°pâîKx wB·¬)i¡“jç…õ˜Ò`xßÓj‹e“vø†À^u¬+y®”OG€b8VÐôC^iã)­ٞk^%בs‹çU¦ØÅmª“—W³:¦æÄw¦ÒÄrRZ·xݘWææLº±ô.¼%+dÙ¥Ë;–fCq]Þ¬ùׇ']/ÌúÉm¥WjÆ©N­uM§Ñ6Ë4ëE›é¾Ž)ŸbH­˜}®©˜gÃXé¾.‡ëù^qïE|ê” Ž¯oöõÖXùˆÉ]%sM·xG6ó ˜m:E½ˆS^;gç;«wÐ2ÏÈ{£ã¾žè á\ÛSi=NÍÈçwûÙ††ƒdàÑOè ÜíÞ?ä±Ç+r3<öJMÜŽ•dæÉÆì6ªR6`8u¿Ð¤1 ó™ (¥RiÛ̾¾œL•¤â¾SR_éö±ä©1ݱы>aíÎu©%“ãä‹‚ŠgŸÜ^µŽ‚×WÄ4O¦‡x½ lØ›!ÿ—ð!ˆvB`gSPÅywÞ\ã|wÞ¼†ó=yóiðó›7u޽¤4ñWð·¼qS.9,û8V8ÄösÔ\Àø[‰>$7‹{¨TiWGPY:ßNå»FQÑ7 ¥Ùôeà?ô•_Fe_Y ª§ÏÐz2˜šAõ8¹F’§IòQÔrg ¹€A(”u¯Ž‡ÇóÔâNíõ‹#Áp$9&¿ùöÈF9J¬)Ò2:rá¾Æ@Ã0G°”>Ì’–æ‘ÆRMÅ€m¨C–Ð|iÔL •€óuÔ1J•/¾¬ÀµÙ´ªbü–¹ÿ.%׎¼äªrüBØ9ˆ–,ß,Gá –óoE )°2ƒ[‡±ª®;nVޝÑ,Ü£tÔ»7 f°:ƒ5¬Íà¶`jdëû–ãö«ÑØÁÆû0[›|—±¹¯¬±g[†qÇU:¨å!l¸ɪÕ6Œö‹r “g6Ñ[ ™£ÛüªaʨaOÑ<ž 0ù‰ÚuPÏNYêÞÈÀÕpßiœá¬Ž;Ïâµï¤Ugñ$~Ícª¹«Oæ_-|{¬{ • î u)ªÊGgÖà>'€ª ¶Ý‹énä9éÈ Sª=‚.鯲¼P÷S¬9̵qw.prÐZ1‡bø¢ÍŠYŸS=ŠíD¯¡¨aì(ŽÎÉ<¸ê,œ`*K®§ÿPK AúâæªÛ"org/gradle/wrapper/IDownload.classEÁ Â0 †ÿÌéæ¼ ^õbÁë®* AÑ{ÝÊØ(í¨Óùl|JìTf $_òçÏóuX ï¡ë! ø‰®”ÔÌai'$|TÆ:Ü/Ó ?&áãNJø„@ÅÕXaXQÕГ7é†&° ã°zDèV„çÊ™&¦§œ6ÝX”›Ùú`ÚÑ-³×6¦˜L͉ôv·ÓeLµÌCz~@Få@º«Yá%üHÁ™ë'ø©„Ÿ)ø9~¡à<~©àWxLÁãøµ‚ß°þß"N˜iÓ ÍavÂyܲ‘ 'ð; ¿WðüQÁ“ø“‚?ã/D\˜„¨V+mĪMË©N›·ëÉjJ jÇ¢N4 „º55e™-$õ¯|à¿áï žÂ¤ÀÒiïu§MGOhSBÙWt„ìäå³%+i/ÆŒÀ•³‚FàúKLÑ\г¥‹Êva:PÑ™^hw4*\–ó’kQž—–^\)¡6jkªãæ®À†’•¶dœQŸ|5\$çÇ5g—ʧöò@¢y—šÐгpú6`Ù&•‘ÆšewÆRæÄr,oIàÚšRe¿¸~—ë©¶Ð\s©nõ”gçB²së`Ê2ÒŽ¶Ku†È1j4ª¥è¢ZIWU|ÎWPá1æP™³j›YmÃlj 9ù49ÞUÌ[:–¥y‹c™‡ìžc)G£«Ü§Ùvþ±‹NæÐù45‘gõjÖ¼yΚ !±¨„BR’gáyq)¤P€ƒ1.(Ìe%ÔOßWßU½¶N·qMá¡¶øm”;ÖšguhéwXñ¸ Öpg/˜ÙÀ¾¨0Š„aŧM[˦mš»ií9‡l¼H›vX(65¼ºÈc…Àá „(÷)ß÷Xô²,JË|ˆ®{v³‹˜g>BúT᫪ÉßÏD¢‘†ÔT—v”j›ßt»œ7°s1` tù.U½z’ÿÊ{ÒÍ„×z¶e÷%Ø’øK)y9XÁÆÿû튢u’,5N V>]¤æêE¾#¼+§Ká%TÓ—N È>+*ø)P¿%ÛÓƒÈíéMäöô,r{z7Ñ7¢~;ð|ân§ÑÊ Q]]ýD]ÃÊêÇà« ûÇ௠ƨ Ǭ‡ôQ–áfjƒÄ¬Ä-ÔVÑI@ºwÄšèAÁOÚ#=¾[`=eòY„úëDYóÎBîG¹7S2˜_¹€š ŽÓ»—V}\6ŠõõTŽ¢™/z‹&pygÃ"D]Õ©ÓXBý„‰~iŸ'´ò>Hþðû6ÓÜ?e]ËG1<« ˧Lhñ‡ýYQbWfI+¯"‚Æ ®&¢ ª½ÍkX|ØÏñ!ì÷¤]Û—³x+ZÜÝç ´Â3¸N`›yt½ çe¨%X¤¤†”„ƒtLÏš¬¢ppµ}'þ;™•È .ƒzÖG?ÚlÈn”yjOà¶–@‘è‰ô,dá•+½©/;m.P˜Ç¶Š-"…«§œ>òG=„ç†d©k-«&°†â±¶Ïœ:‹uý<ºb7LBˆƒ"!’ô1ïw1u7®qÿ‡QƒÕ„ï5„§µè¡û}4$¼Ç ß#„òã„ï; Ý' ß§ ݾ#Ì=I¨~íb nëq‹Ø†±]â v‹ö’¦na£GÜ=âzÅ#Ø'Σ_<ñö‹‸€[]L‚Lú—a7ö‚ORNõ’v?É®Ç^IÒ~ô‘mFuû5âqôÓ®Àˆ¸—rk?ñ÷àYìÃÓ¢/ÀA’r ®äi¢÷ön#O¨´Ò ùöIIè~ æßHv9BÂà,–•{­‡%4ý þQA#6? :T±•Ò.î¥"n‚r8ƒõ§Jf¯âdO0%†Ú!—^Ça·†áî%`¢“F•´¶Þ_7­ö@þPK AØ ’$|-org/gradle/wrapper/Install$InstallCheck.class•”]OA†ßi·]ºÝB-~ ¢|K[*[ šÅIŒ&E/0MðnX†²°ýÈn«þ#o¸ÐD¢ÑÄK/üQÆ3³K[J 4MÏÌÙ÷9ïÙ™Ý?üPÂ#qäeXNP(Èð@¦+:Šr\5@IǃQõø¾+^6j‚a´|ÄßsËiX/W<¦ Üq۞ؾϫ´"¬py½jí´<§^¥Uz¸ŠÁ|U÷[Üu·…}¬Òºð¶\îûÂgØÌ^TçÊ ¯j&¬o6…g…”…^ÕѶûTd¬ìÔÅëvmOxoùž«\5lîV¸çÈ<¼¨×ÎLë~Û¶)aØÈžïp˜êñ'NÝi=e˜ïƒ hªBf[‡U¦‚áøá9ŽØgˆfsïR;-noófØ”ÁU' «Å"C!{e¸dE>»€’l è?g 5 Útþ%ÏÚR}u2eÒØi´=[Ȳݶ"!&nâ–‰Q\3a"eÂ@ÒÄîêXgXº¢#¸-ÃC†t×Û›½#a·&ÿQ›TÁ ½Q zñ"ÈH4ËH;4&('w JÙ:4šÆOÄwYþôÏJ5N1.ï° \§¹¬Â Å0d“ƒy6€0uޏ‰ÈCÂ.eQǨüH~ùZ¾pŠè—&C%À¦¡±$Ø,FÙœBÎ2Lâ fÎÔL6¡=ù°Ìså½Tþ+´ßеOТ't!Úãu±Çk*ߣ ‘ä3–Á4U xVÈ‹‘íØI_Ïã=œf%‡Äs˜¿ &3ýl°x‹ÄÑ«‰ïwv¼+þŽÈeâ”/u6»WÌ.ûœU1‡´Ú}úd„6êPK Aävp£.- org/gradle/wrapper/Install.class­Y |TÕÕ?'³¼ax,‰„0lH +aGb“$%, ÔêKò’ŒÌß¼1 ]´­µ­­ZjÑV­]è‚­¨$h*ÚÚZ[—jmk­»Ý»}Ú~~¥Mÿç¾™É$yøûø…ûÞ»÷ÜsÏò?çž{ç‡ÿ¹ï-á¿i/çKS ÍÒL‘¦pš©ÒÉç´ •rHãéâŸ<¤ ϱ™ÒÌ òl>SšpçðÜ ೤™§qq¦ð|¡_ qI€Kƒt—i\¤é\¤»¹RzÊ[•¼-Òxq ò^¤:^&ŸË¥Y!ÍÊñtŒÏð*«exuÞËk¤óœ¯•ç¹A~׸VFêDúuBX¤"^àóä¹Aㆠ­äŸ¤UXÒl’¦Iøl–©[üNéÙªq³ÆÛ¼=À;¤cgjù]Ò´éyÞ¥ñnß-¯é|~O6ò…_¤ÍÂ}#n•6iVjܤíljÜäNî’&¤Òsqvs(À{ä•fecp"ÈÝ|É8¶8)*ÙNÉóR¨GãÞ u‰U»¸o<½Î{¥y¯Æï RŒ›¤y¿~@ãË4¾A H'íIªÑ#X¤9Ò7ì”…Å„×k(IÓ®ïöl1àÓŠE’I‰ÄàhnP4O°8-Ûï€ÊlßjíN2MÚ퉔ūZz}ж­¼Q$?ðénE"Ï1æ+!i¹6‰:œ°‰Òc dÄ›³Q»:ë5£!Ž%­T7ŒžK2ÁR]"3âˆ?D +u_ “F’;#qlcÐÕSRº j%’M†o\»5%ÝZ.ö¡–L©íRâ+ÐÖu,À>c·[žðîý.NÅ÷F ñ™®q–럷­¾¬”1µ Y¬^F$­ÁÙ!Á’a²9§_2£°Š²Šr˜ÕÇS13›Ú=J,o»)û‹¶7“*‹Æ®î@’?¡ñ'Õ¶Dw_N¦bZXâšÁÜes ³y˜Ôù×üË¿CIêZéôgþ½ÎGþ‘ÿ”±ð˜²Mç×$õýYÜW®Êz“iÆ[€sq’[NæpÚÖe%zœãßÄ‘Õ jô1ñ1ÂQ9µ.Ó·RT¤ì.ih§›ÁÜnEPwšöHí'—”޾™6Š(ç¢aJ‰ëÕBødvgºðt®ÞÖJÁ(±Õy(«ÞðKtÙë•+Þv¡6Òj§¬œ{é7Ò'´׳–ÂvW€7»ª ¸F\ô8å•ñ6h¸Øåú ô$×;^ ¬]ðµ»¶TnŒRÝí†-µ:ÈùÚ¢‰$züíéˆð–”ÊuRþÈ,©®?ÇÛ‰ ÷@…% ®òã<Õiw)lËšb;9 Ï(©KŸ½8ª8±vnä;‘‘C‹$ëcÝ6N­þµ#¨“Óf»ÇZØUül;Xjös\Å:õó7Ù ëzàÉ1ËúÙ-ìk !`toB!Öl–-˜$å^£‘Š£(°6è™í~+3%Y}–¤Ï”£ÈO]¿y êÉq%.¶”‹ çþÂÉN5­ÉD4e›ï£¦äÆ‹ÙëdüqriµÞ¹ŠÊǨI®ËÔ¶°§ÑDuò{C,1ÂÔñDµiÔ‘fj‰Ë…‰Š†¤XZÄÍuÔðíÖcDlÔØ Tlædò¢œ5òušû儬wÆðPú–Kzµê*kÍi!yÌ…˜¤ÈM™ÛÃœš »šJ Ò‰(ó=r[pzWËU¦PR§ØS ÔÌU[è„×rõ’èYKö¡šŽ9™oKº€gšJK®ÎprvhÙXä.p{söG¨œÕ*›5&zÖ É™5ri\×ÐfïæŽ`ºAÝB& ¹^Ë…Jr½5òBlR—‘Ü”°Ìú¨ƒ[ ããf¯þíŸlÑ`.ç ÑÛã\r‡†‘5æò«*W××{'‚°¯Û‹Ish/•‘BôºŒ˜.ÇW} äÎïr¡žWÒ>õ¼Š®Æó Ð^CEû1|]^<ç• Ð¸²A ¶ŒÏ§GH?BÊÊVVq„üe•GhâaµÂÇÑN'?Ú¹˜¦)td˜G³©oóéZŒ”9<éôI"õ&2±z©òÔ›ÈåAïut=zDš£$ ϵåý4išÉMe÷ÐD¼äW{CÞ~*¨öÉãŒj?ú'„üƒ4¥¥,äù*Ê+¨°Ÿ¦>HEwŽ’³:–sd­¤´’/RrnpVËʹ–n OA"­¢ýôip Ò2ºöõ`n}†n†f3 çgés šK3é¼ùéVÌöbæm˜ƒã¸£ß¾FöL;J¡Mƒ4½¥|€f4yVxó'Ó·Õ¾BoÞ­4³2äë§™+¼…Þ[†þZòy ¡ä¬ƒC¿ªì§ÙI¯öËKÈÿ@E?Yí¤pËÍ©öyVø ý!ï±ÛiQ> …¼…þ¥8Js«µÖOgyo£ñ!ßäEý4ogÈ']Å;¯ðóÁ¡'d¹ùwBÈIt6 Ï¥õô(³í B´P«@çb¸xIQZ@12Žy­¡$fYTçJQõÐNê¥Vê£n´Þ @¾°ë…‰/W&ï€I “/Ðaœx~‰¾ Svãý ­Ñ.ZN_Á¨¸nÖ5ûé«04 =_£¯+Ù¯¤Ctdn¢óèàâÅêké›t'ø X—‘6¶~öjT¤Ñ]ÝÍÝCô&Í^¯Ñ‘À(ß…ù8ÍרîMš0•ý4†æxúDþ2xÐ×Ty/-`:@S J¼÷Si‹§¢ù(•¥ò;1RÌs+†*Gyyˆ šRÕ÷A´h‘ ,¾SÉ ¾˜OãÐ~z_ ÷!ய¡Õ=Ý {\„ºVé«$ÌÚ¬CÁ”ÕÛQØ6\.¢{é>ØìL5e´¤Ú[)!ºô&Z ´.ÛY°\S –7·xѱ¢¹ÅWÙÜÔŠÂÕ¾AZÙò ÐÙÎâÏÑy?–»‘Æ#è¦ÀÐ!ºI¡f)žg3µÀȵ*dýøÒ·¡ŸÔ+é;x“ôS—µC=¤R¤¼I¸æ©·ïª°>¬’(ÿ s5ü=œu|žŠáƒ´ QW-iiõZƒÇš&h½´Rœyl…Œ…¾ÛiŽâ'Ï9@zEH»—Öæ‘|/VŒvî×Áÿ ~ýM€« Z-Þ7„ç.¦|(—Ñ÷é(ɲŠnL;<€™â漬sžûÑ# —“gILËÆ1~€?†‰f Ð=ÙåbI§âÿcô¸³mÀ€~%úCØ6Î=@ÞÃTÔR^ðŽªÙÄMƒTÛ⿟êZ<ëàõ‚zø®_ß<@ç9y|ò8rPÃZ?H[éüùn MÔT¼¾¶Þúûé-Õ‡©(¤lub%hî§æÈbâmMi¦Ãv^±S¥wõS‹tì…±Whƒ´ß]pA?½G`ˆG?]ØO†6…°«h»zÞ€$âÀpME{¬=ûÝó(¿MÕ€Y-`µ0ºXÙo\F?Àü'ÁéQècðÉ“àö8€üöa_x Àý1fþDy´p݉Ýè ŒIðƒþ)¬ÖE³@uÖ\J[éiP{±ÞùôSú|s hŸ¡Ÿ£o?<û =«ÀþP©°FA ýB½¨z. öz †°n ãcüÕiT«ÑómÔPè8ÍFŸÁ›KDB´$;'„Áöz1]DtáKbjzq”Z~jo,/0û©#ï‹äóòÊÆv÷ˆþs˜÷YÀý9eŒ©‡´:M¤—TÌŠÈBzž&äÉï+éUÂ’ïV–«0[ˆGç&ÏÚYØç”)@VÌZDW¶Ö›Èç9t…!øH— ‹4WÅ÷K°üËXøÄÖ«ðÅ/‘f…­îZBÈF`1¨^ŘÎSÛ”sæƒò×J•Y?¬¤ß(?ˆÈóoš¨ÑoyÖ›`’'¿¥K„§°¸DÒõƒÔ%ÅAÄAòŲÃì‘&‚—(v1'fâ¨H”«Ôë§n„ÂÓƒt âÈj16@ɲQ-…¼Ò• ùèR‰©žƒ4Á‰®žöÀÁ¡OÉ¢½ÒPo¡ò±—.ÀÎoA:‹lõ Â'RLîÃ.´/kÀ&€è/ýM¦ÿA®~ÆùŒ÷O:‡þ—ÞAÿ§ƒ×%X¸ ô>$œËØCW°—öáy-ž×±O{+ì2ÞÓÿ»»ÕŸè5x|2jŒ?c-I|×g}=ý5½Ó]ô×áË¡ " ÿ©¼Êiÿ¦É½Ž8;NUņVµœËº5zƒP,y“Æå Áë¾,‰ Q‚ç|£fb‰Ì>²bü&pöÙj®ÅùØrMå¨èf¶¬ðÞL+*U½×wpè5s6²SÏð^¨JXŸÇS>ë4“'¡Z™Ló8?gÏ/ÎZ¢ö¾CY¢UÎkjÏwj, [Dÿ§ê®Ã*ÆòŽKmtÏq*äa¡'à­ãi¡ë1K,­••co WÖ~µÄ %BØ!ƒ4úOÚ-eGvg`‚Ó®"VT>ÉÏî¬u‡ÀaÉyìq™ì?µÉ^@Ë™\NX~U̹Ïv’?«•ßÑ |üð½ ï¡Óäàqi3ou$-`fœc<‡]99§ª@–Sœœ²&;;eM€ƒ*ÓçZ|<`ãæÎ<÷eÞÚŸËq'°Âx¢›1Ø÷ ŒAy@5èë÷+Ì{prØKïCìN!çßžƒÊoÜPK Að¿:öo4org/gradle/wrapper/Logger.class…“koÒ`Çÿ—UncŒá@Ø&s*]7¼‹11$KHð’°`²wÏÊ“®³´¬_ÅO¡Fgâ ?€ÊxžRŽ5KÓÓçrÎÿw.éï??h G ·b¸‚Û1TP£†º4w¤¹+ͶUÁŽ‚]†èÉØ.;`XxfX†ûœ!R9¨öèÓ²û‚!Ý1,ñj<8Î>?4éd¹ckÜìqÇ{ÿ0â#†bÇvtUwxßꇇÂQ;¶® §É6m!Wéó÷\5¹¥«]×1,½)Ê@ŒF\÷s ©®Ëµw/ùÐ'.Hq«Ï°3«×:âNWœŒ…¥‰fuæâ…ç-Ce"Úè„!ÇÐÔl·U£#—;²›m"x©*­@o¦ÑÛbˆwí±£‰=C•˜ôj[Æ$‘B#‰’ î%qŸc”‰±I![3ŒÌ”‘¡JgŒ´ÇXó&Õ¡ovÂHIFií ó” Qª¤V÷(µIØ”’õ)rµŽ /‡,®Ó*üœñÈåàꊧPæ¹*qw(¤PÝ&nü_Ý–7Û›PK AJJ¯'ï8org/gradle/wrapper/PathAssembler$LocalDistribution.class•QÛJÃ@=›¤­ñïwjÅ7EA(*(‚¾mÛ¥nIÙ¦Š¥`|ðü(qv[Ī ¾ÌÌ™™3sf÷íýå@ËY¤0ƒmf]Ì»X`pk²•\Ê&Ãp¹Áoy ãà@†b§W*IÅÞ•‘Lö–sýMýhýœÁ)Æ5Á0R–‘8jßT„:ã•2~9®òðœ+©q/é$W²Å0fj%Z§d¥È8bð£H¨bÈ[-A-ÛåXÕƒºâµPwŠ7›B'<¹Ú§ú Sk?†Ð ~]$_SæœÑÜú÷[³ÔG¯ Ó¸­ª¢ ü¾%[šç!ƒEp=¤áºXb(ü_ 1*BÕƒãJCT;§_qå¯iX¥OLÑÏZðµŠ|-ˆ¼ Fú²d ]P‡M~$ÿ –ßèÀÊov`?ªghYI¶A´k #ÄeVº4Âc€‰ôxf"½Ð¢ØÇxoM@^×Rù'XŸÃÓ&©Ì@¯ÛÐÈ0ñ+ÙþN¾ÿ…laÒØ)Œ’×§:˜#]™PK A´çtx7‘&org/gradle/wrapper/PathAssembler.class•VéÕ=cKy<^¢Ø 6vPœ@dI¶šM›˜”Ø2‰À²]oÔ `FÒDžDš1³$viKiÓB÷–®iéBWº‹¤·¤Ë·þM-¿Þ;3–l!ø ÷î{ºïÜs—wçýûí7ßp ÿ’p?Ö;0 MÂU\“H*ñPæAaðö/žaJ°Î;KvÏ×%ˆ¸ÁÛ›!Ë5Am%-«lø…Òcªeãº:½i«ºå†= »Ñ(:B†bèW‚Ãß]µSË ™}BÀá]6Kõ¢ÞÑ&ð *? î$%ÍMÈÈþj\ˆç˜.Ž™Wy“ŠOYó xHÆœñ#iüXÆ“xJÆ*æe<Š,ÝíÝÈ2~‚WdäQ [ÞÌbÒÑJÕ”ñSÖù~NAIÉø¯&ðK¿béU¼"àÔû/zÆøµˆßÈø-~'â÷2æ0O>›~PÄdü¯áO2þŒ×ô¹ìÊ„™šÔŠÝV‹Lí V˜@•iÕlQ» ŽnkeuןCS†S*DuÃŽ®SÁF5}ñ£^ÉŒ3ömr›„¿àMÛø«Œ¿±ÛÛl.únn èmî2Þª¿)Òu¨Ž4SÄßeüƒ5RÙr…œ‰RF5+êè×tãñím83—»ªæí=[‹~©Ÿx÷˜ÇF› õ`Sœtk¯/Ö²à›•Ù"Ϧtªª±÷týýRãff;>kêÍ-€V¼»DíÌãè/<÷´<¿»ÓßÝ"JiŠrÉPˆºh)WÔeSp¤õÍoDLÞ½&ÜÿÓ¹¼®’q¿y¢|rÿíÛúÂÜ?¼îˆrÿ 9Å&¸`ìò$»*øÖB±Œ·ÓË´L`¼Õg ±³´n7¸_ºë¤7‘/¨›sW²wò¿Ãrr;M÷P,ÓÚ."übQŸq”’Õ„çU÷ÙÑK{ |˲ղÄyÓ ŒÙ[ûY¡7Î(=Þ€v àƒ8 ¢Uâ´þð®u’~Ô3IÓµPÏÑê~ššƒñ„×\ÕÐ(Ñ #€#x˜$ÙSÂyLÒÌS>À#¤ÉºÄo ­ÒM´€(¡EF\¤Cž¶ÄÓbiLû˜o“%‘æ›ñDí5²ñd ÁÙøX¢†Ð™À6ÄUþ+\CÇ6¤Õ:i%WÑé¦a @C=5ôž îèØ£Ù£ëJÉÆ¡Ð6®B5ôUêÞ "Dc üPî¡F‚¢Ä&Æ\Ï.zœëžÝ¤Ø\ :ð,ýwšPzà CR;-Ó·ê4EfŠô£ GÆ I!Ò¤ï˜ ‹VšOĉ`ûmôWq¨†Ã³ _<úcýJS O’ÑS.½¸S§wÂ¥"¸ezwa֥ׯ_*ŸÀ«tŽOŽGîº,œM’µ»·1´ RÃ5é=^Å=•ì6Ž®FF(WÇî¸ÈG)éQÂk„ï<“è$·{)á#”òcdù=@!Ñóÿ£X û¢E,ÑÙc$/cÅõf¼Î~»ì?FrBN$;müðY_¥“\|}‰Q»÷¡¡—LTíCUÜWqï sЏž=F‰›!+Yt‘ß»%ëž­[ëÃ%ךH—ñYòíþ]ô<ãˆo÷y:ɘƒ§Ù$§æÞsÃdg:Ɔ¾ÏÙV¹¥K9#½ªÛ]QÛ¶ìÎÍ”nv¦-m•¾Î½†v^g-£*6`Ja©Èà#Y­" GANÅ lª¸‰”Š-|,Ðûì÷ƒg+[ò *øDŧøLÅ縥â |©â+|­â|+ÐXyvyÊ) î'ð1MnÄBʶ6‹w{/(æè¶æX,£Ö(~> WÙ¹Ê## IŽÀ±=×þ›(¾DÚÊÊWFîÙ$v tð$õ0;©À/èÓð~Ç*˜x¤BDôV©`ª -nýµ|/âº#·¿ÿŽÐ)ãÚÅøy­eðǤ2FIiÙý&Ñ^ÓÊ«,=A•5ò²ñÙ¶ì’áð¾´Tã‘mªMëfRص/}6·’-Æ·„bU ñ$eñgþ‡èRevXà|ø3%Àóò_ ๡~Šcg5hçOÈW‚ò -aŽ‚£¯÷Äï.¤›²Ö5¢T ô —cúÐOƒÅ_ð ü¶‹šå{ðLõæáý¾¾»»ðÑP;½ e™™ý3ýyÔñ؆:â•JÐ{3»P—wÑ@ô¡æÃy42ESÍ÷pä~GwÐ"03°ƒV;¸L¥M`Äôæq¬¹=çî ¿4éÈãøˆ/è£öZú‚>×u‚Þœô`iûÑNß]xÈG7Yø κcÃA=·#7?£”ÇáÇ ÆI4¹lv1ê4ýÝ$ Ĩn¼Ìq˜³R!9K€MÏ-²z›™À9üBÔ¯r‰œäWÊ)´5È"è î,µÛìÊ9z|Œ~…_=/±’ÊÈ!Ž~üLë0›Ä÷8WIþH±-_„Ú÷{ÉÿM F1µWÁU>…Ë ¯=€ÿ’‚úއ¨SpñL<`¦×Ý–_b†qW»üPK Aª=©°?-org/gradle/wrapper/WrapperConfiguration.class“mOAÇg¡ôÚãJKŸ|iᤠ" HULCß-œåH¹’»«&~*M$&¾ðø¡Œ3w ”e›˜&3³3óŸýíîõÏß_¿ Ë:¤ÀÒàaæ’`@EƒG xLá<™2OÈ<%³¨Á’ÏŽxN£8m—ÁPíˆæ–kÖöÖÖ3Ýõ5îÛ ²QO‹»M«Ž5·)÷½çÁ!ƒBwª~È+ó õÎ1í«sM¢(ê/;®¬0è/•wÄ^´°ž®9®ý®sܰ½¼Ñ ÷nïóÖ÷Z‹d,8t|åZÛkZM´lë‹ÇONlÏÚü‹¶ûÉiv,.âsñmâìî£nsúô =ÌN æN8¡u‰ Ñ½ÐÆØq$&ƒL*AîÂ=HL)£ÆìBCO*A4dF r_ ¢É s¨©ôÉ )%È  2¯)©AeEÔ,õÉ ²$!ƒÂçX Ìþywã ¬âyõ%^}9„¯°úÏ3à 2¦y~žÉOȸ¨`;¾Êä¯)Hãƒ^V0ƒYWðõ^”а¿;98ÐÝ14ØÝß724Ð3’èOt K÷×Njí-;Þž´-#;¾[ÂüN3›·µ¬}HËt eû’]„rbbßàAqy1ypßÈ–mÛG’C½–éNŒ$ûº*=” 8%g™9ݲ =/a©£zÁ62í‰â9©¿ ÄuÀÈþ NÃlç=qÔ¤Ìì˜1.aCi·[Z:£·Ÿ²´Ýk?ìÌ‚§`i¶aféRݘi‘œãzÊÞoX4šÖ”„­ÑrðÛ!vÖSºF`N3Mš-ì1²z_arT·µQÖ5Üc¦´Ì!Í2xï²Ý®\ò)éá&* Ÿ´µÔ‰^-çÞ«Ùcd {¯„õZú»nÃ! ]«÷$E×锞s=°' r|Ë™¸4gé9ÍÒ÷yJ¬Ñƒ Y†„EÑ Ž€¬n· ts@òfÁJ•BU¢(Eò2æÈDK×ÒÒ²2t!cjé„'-BF–Y×&‹vÑÝÙ\ÁvŽwËø†Œ—d¼Lî×m¯z¤”^B<úÿd‰¬ )G£Go..?¤n.¶LÆ—Öaš6é§åz5¶K³lÝq hÖ8Y[ç#ƒ”0H M·(aɨþ-ÊÂW ÃvМ$›ç‘ûÜ`Pm¬‹Þ¬Ü?}U·b§ú4FÙásïN‘Òú˜VÈÜè\;ïéˆ/TÈÒ,P¡§©(ŽHždHW)¯(±MËî5òyb-Ù«$E;µ¸¤¢"6² Íÿ»vÈ o±JˆVð;Û6w»±ÔîT â›$Ú¯º™ö-†T|ß¡Æ]²y µI½XjZ]"%ðÈ)Y¿6¿>’6i›5íˆ~šªg#•M «”;•Šïâ{,í5Ÿ;¬¯ÃëUÀkUD· u=‚£*®ãû$$í)Õ-¯«ø^Q‘ÇI?dIe ÍžPñ#æø1ë½Ää„F/Q²0©â'Æi?e6õ!#—¤(莄Ÿ1õçeøLø%ê|º%y°Ó,dÒÂKÜ¢"§|j™“¡ÙS¿RqŒmý5ÿ¿Uñ;^ýG©Q¥Ëšh†&Ÿ…}#YÜŽI¯§7w<}EüAÅñ'æLÇQQñWüMÆßUüÿ”°¯ÏŒˆDœ2ì‰È }ʉx>§§Œ1COGŒ¬¯)7rƒ’a…W¡äTÖÖN{üRçÓ“Ë|88a™§œ÷«ÄÛïAXTY¬Öø¾oeÝ‚zfu”Ç‘´y±¥º®¡çtR³ý{…·»:‰íßvêý:ÉZ˜¯|`GË_8檫x†8󨊣¾¢êò~Ì•œ£7ó:§Ë+x‹µ@¤ü-I Ý:bäqJÞ»q(¸Kq6±Û·ßb¤…j &™šÐù˜Ïï};dm§?JßpõEö¤“›)º@a Ú¦¨ƒÅ•führ%’•Qßæ¦2&ÛÔxëg“lL¿->lDÚÜé×ÁM6øuF¿g–ôÊÛºߊ C±šþ!Ì£BµhÀ^ÜG»×Ю ›h¿Ï³_FûÏ~í;=ûU´ßïÙ7Ӿ˳_‹0·kZ‡¹c‹™z8ÍóIvz‰³v¨¡Ð0ixUñpõ,sÏ¢fò´€ë§Ña\‡ªs oе(ŽC´ÖØ BÏbùj‡ÃJà%Ì®Ž%¯@Åü«,,V.£ZÈX@3#Œ8šÐæ‘Õêš‘¼RMô`:B¥ûéB€N¦c³X@À xÑe,޵^F8¿Œº8isOÆ[¯`IìQfQ?ƒ¥b^ÆÓ –Ï¢aÎÙ ç¬Iœ­tÎV9gw‘‡"3Xí6;‡kc‹s¶Ö9['ÎÖ_@cŸpÃÇ qvCÛ,bW/’þ<…guÐE4n"kÖÐÿÅÍXBÿ™èeÛ(¦Û‰rÅ}îÇNLbÅnº¿—öà<îÅ ÿ„pa€öKq‡…K§éÆ0 VìHI¬8Cª„K—¢ê?RMÁ“Q%Ó¿Vš£tʯ<Z‹0«hn!çÅ{È£­×9o(g.¡nmt²‘rgíÓñRHÃ"2„¸ü ÑLòŽDÆrõ â.<€7’^¬MÒ«h–Éî7Ñ.@§#Ä}¬¨Éâ "áð¦l¾%Þ4‹-‡çp÷°XnŶÊÌê%úPG ”2kµ«‚›Yu™ è¸2Ÿ&"[²rÛ‡É÷ôÆ[g°ƒ~;/@éã¹M´–dÕ客ÔäT­¥P, Ia’UOs#ÍMä\Ö#"t[éf8¯80Œ´£HyCTÏ!âøÈHsˆôš¢ºcô£/··ÐÌÖ…œTÜUYÇÇ<¹0ýßîÞòýÊËãžËÁâåã8áú*C9ö­ŽôÝ»mñÊŒ=‹HN@N3XL¹Ìˆ[[Å\ mRH # SdL9¾\ö¸ÙŠÅ¥l¥ 9O†ŠC(ˆ.ÊH']¤„Tí µú!Ùž ތīS´ª˜§]ÌçhµDL…³yW !p 5 éÖk¶N¯<ÚXœzZ*%q3a0LQwxˆ|q†,8‹åx˜’é¢?æñcKQ—–¢.-®.¼š"öc#ÞLg‘d ª_EXÆ™`-q-z3AiÌ·šD#»7è6²á×þ¶^á—Ç=n*êÒäê"á-‚ÿáÿPK AÔe‹ #gradle-wrapper-classpath.properties+(ÊÏJM.)¶M/JLÉIÕMÎÉä**Í+ÉÌMµåPK A)gradle-wrapper-parameter-names.propertiesPK Aorg/gradle/cli/PK AÕÜ?®<S1org/gradle/cli/AbstractCommandLineConverter.class•T]oA= ‹ëÚ"¶µ~C?”R*O¦Òh4!­ÒÄÇaY×m`— C£Âߢ/4ÑÄà2ÞP–´ôaçÞ9{ï¹sæÞÝ?þPFÙ@;:v D°c@ÇóÀ{xY9y†xÕõ\Ycˆfs§ Ú‘ß±V®g{m[´x»KHªá[¼{Ê…ì' &?»†bÃNɼӵKV×-ÕÛ)¸%ü^{€ìÈ÷Îm!mQaظÌõµÿŸ¯|¢j«U©›n†Ãl㌟óR—{Né…¬•ì¤}f[²’ C¤… ‡´¬-¢ k’ôÚ–Á=,È÷¹Ø‚ak^ÀÌÁß«Š^tÊê Ö”Âõ¥-JŒ×_,»/]ßèØc¸ÕtË¡ +;Xš¨rŠîCµuVQ CWˆ uÁhúCaÙoÜ ™«ú¶Ô1aà6Cúºë2Qľ‰LÜÃK†Â &„!9¯‰a{ Qá23Quá {¶'§M¡†Ð~rÕÝìõ3|i153 ¯mnžDevf¨èÎ߆J…£–š~-C…Hý;"d©9´š´«“edcù °äDq‡Ö¸SX¡Õ`I²w/!)²Œ:·FyÝ7²ÙÍ_ˆ|¼@ô8_AË #ÄöFˆŸVX! ÊK`öªR~œ;©xëô†)ï>=ŠNâRnpŽ´âØœœcÿhÿ˜âŸ¯òÏ”ô4=c/ƒ-e·ÿPK A׃µ³Xì ;org/gradle/cli/AbstractPropertiesCommandLineConverter.class­V[WUþN2ÉÀ0å H¡°Ô„¤ÄKKµIQJ©†‹¦‚Ø;L†0fâÌáOøîZ¾ûZ_¢t­ºúìÿñA—·}N.iÊ2Y9çì}öÞç;ûvòëßOð6¾Q0Œ÷e| `ó|¸£`w,â'?ä«û ÒøHÁÇÈô` Ë=˜Å V»ð‰>íB¶ƒxÀ‰Ïø°&cë.cCÆ Á”i™Þƒ?]cì¼ÁЗ1-c¹¼·i8´Í"qB[׊kšcrºÆ”¼mÓe¸™±B¢àhù¢‘Ћfb~ÓõM÷V»d8ži¸ öÞžfå¹ÙÛÚ'¦á$ F]èp¥ä™¶Å0‰fv´}-QÔ¬B"ë9¦U ёѻ†§™E#Ï0ÖfÏÕ³f±[·­-³PvòTä4ØÐV5Ç%\ÜÁ’X3L¾Xž¤íÚQgIW‘‘´¬W]Àp§0™?¡•¬:£ì™ÅÄ’VJFOѹ’MA`i Ò®q¸¦ËÆâAÉ1\W@ µó¦\ì¶AÜŠ€A)5"É“ã4‚¡æä8,ÕäF³hªJ+gŽ ^Èzš¾KÂŽŒ‡añ@7ª e<¢ fÍ‚¥y"¨ß¾´;D='þûš+›;†î%£­,†üW»’J /G¬dí²£÷L¶Xg<Ãm©x# ý§íªx ã*&0.ãKo 'ã+A“|gºŒ<ß¡o©(`[†©b»*ŠØSaÁ¦¼¾­¢„¯ Â«ÂC™û”%M—UÅ4¥Ü¹zÝù%ÜLEu|tššg·1qBuÞ)”÷ Ëk$1Ãø‹ú 5ÖÈÃÖxE;i1g¯÷Yu[së°¨ª¯D:2ÜKZMÍu6ò?Al©†T'¶[ô'\íL’z ½¢o’B‘“EŸ1]^„½Í†.³õ¡&…z6ðK®Z6<ñ¶ÒS+Y‚h~ßu.›VÞ8XÙb·»uš÷ù2©¿iÕî°•t»ežÔd£N§Û¾³áH;¾4A†Á?2/y/• ™jéŸÀ~¤…£43Œ1𺸄ˀ$ñ¾ æ‰Ú<Ég’yWjFK$í§ùj,ð ¾ ÿtþì†D“”­ °¯ ¸'R® kýøÔ$G è}/aŠNäƫ֪ÄjŠ~Œäú¨ýDH›ñæARüôßèô ͹?·‚î ”#ô0,_;‚Êðiqá9|·¤)Ô[Aßl øq"û0àÇú%ÊT‘Âéq¯Ô¶þù9þ„NêËäR7¦È3ä…wÈó„oƒ="\ü× Ó bôÓjŠèkDóÛæ·ÊQ0Þ¾Îá-úé#KuïsÎuâÜQ‘þÄ€ŒÙ¿ác¿cøÚº)Q‚á=áÐ[ýótx’V¿p¢2‹?Ç`á'g[©:¶é«YMᶘçþPK A}­ÎyGK1org/gradle/cli/CommandLineArgumentException.class•‘ÍJ1…Oú3£µ¶Zm+êÂî´UÜV " Âà–îÓi˜FfĘ́¯åªàÂð¡Ä$-U´fq“{rïwOÈûÇë€34K(`Ë„mu çœ žöê‡þ=}¤^DEèõSÅEØ=.å˜T}.Øm˜ÐQ¤•š/ ©â&Ÿ‹…t‚_ªÐ GÌ "î]Ê8¦bl *Ìb&Ò«ç€=¤\Š.³$¡¡¥þrAÐ^âí›2˜(ùdæ[ÃÅ€f‰&Õ—V”ú2S»æÆoë/c§PFŽ ‚Î?^E°û5ÿ.)Ùâ-äõ/˜•1ttuÖÓyNïN»3y±÷+:–¬ÚÔ•;XէƬJëk–â ŒuÍ0¬Êœu£gäõî¶;ÇSä~ÂötÓ¾…ÌÊ0w3§*6¬ÅMÛ]ûPK A³ßâúg)org/gradle/cli/CommandLineConverter.classQMKÃ@}ÓÖÆÔ¯ª'Ï"4 F<6¥ EQ($xߦë²%ÝÈvSúÛ<øüQâ6…L ]XvæÍ¾÷†™Ÿß¯o÷8wÐupJp’L-¸6„~/œ²óS¦„ÿb¸fã”%ìu<å‰ ¼*Dè<.þid¦æÎn$…b&לpW'<(a‘ÑR‰`ÄqàÙKxî…™¾Ðl’r?I¥ÿÆôœOFÙlÆÔ$”jçήwÚøºvRm_Uˆ%J¡¡ïÐÄýªñ°vJQ–ë„?ÉÔê_”äFë%p}»b.·;o¾ºÿ-7Û‰Zä3®ÌfSm¡Õi¶M´l¶g³–ÅÛplÔÀ~Qqk*[9Àa¯‘#ïÉPK ASf Õg&org/gradle/cli/CommandLineOption.classV[wUÝ“¦4™^ˆ´i¡\ä"iBµ´ ­ÜZ.Å^ÐÖŠÓdL¦™0™pïwü¼ø¦¼ð .UYË哾ùü.—¸Ïd:™Ü¤Ë‡œós¾³¿ÛþNæ÷~þÀËø&Œm8'ã|œkE–Zqo é¢Þ‰à.Eð .‹A•±AšŒwÃh/ÝÊ iEHzWœ¯Š…ª8ɉÁC^ܾ&KFA†-A6ó¶næ :¦®¨×ÕTÑÖÔœfJhÓ³9Õ.Zš„Ý•§c¥¥¡æ²©9ÛÒsÙÑü¡¨V¶¸ªåìù[y^ÚäÓ7ÔB*›«÷Æâf$£Ò–î8#!Z /!¬çÒÅeÕæJ‚´Dÿ²–YÌ/êöŠ„¡jÿL+›ÊZjÆÐRiCO›««j.3¥ç´YLjão8£å--­ÚZFB˘žÓíÃbqŸùI[³ÔeCí_73šHafŠ«Ëš5/΄ÃfZ5TKkw³Åtà Ú+:3¼ëÙNUæÇ³-¡»ÒÓë©çkƒê´ÍÙjúê´šw®Ê(ʸ.!¹a‘pV³g×)³)Þ_Cš½Õ{ œ‰¬¨…c.[$ Çk¨Ò¿‘lª¹'è´¡«{âRS|~2ävÆ?á§êæõx+ÉÚbi…¢ÁÈzkNu#£Y¢ j>¯å2ÓZ¡ fYËT¼¡òR­QŽ–ûxu¤Wx8R‹º± Eë1Ã0oøÐïgëmñަ¥ž74ŸŠ¢Ór_q9éë\…WO•w¸–/jÝh¼Šz"#ñÿåÐzÎ,Zií¤.Zª»FkP *Ø$}ÙÂiµ°B+ ¶c‡Œ› na·‚]bèÇïá¶‚÷1£à|(¡³º 2>Rð1>aÑÊ Sz´‰5 ‚‚½xAÁ$>UDœé¼P~Ã.*8…Ó ö•Êï%>Ä‚Ïñ…¸û¥‚¯ðµ‚;ÂôÎg¥¨ÂñÙå+ZšþEkߌõM' gÓ6-‡0 ë:ú ¦NVçÏŸ=!!¤{ŠÝLX`©e2zF»I«Áœ3Uö\É%ÑNµ§e5CC]ñZ]AáºmѸYC¶YÚb×Z.+ÈËØ&%ôÅÇÿëb Ý`¯ð)ð³sÜ4 º"((¼á{±j^×ð<ÿ¸·ñë QÁ*°>\¸ÄòÖ{ø#™åæœóÎü%ýNîíÇ׃\ý&9ŸI<†”x‚ÀùÇhzˆ`âG4?DKyGN®!$azÿZ%ÜÅV a ¿"2“ø Á5(,Þ{ú碑⸠!ŽÛ¹Š¡=èÆVú½£ôé$¥Ij¼Hôa¼Dÿ›„/üi;ÐßaÊ çÒÎ¥ƒ”»xÊšdôÉ8$ó‹¬ð«TŘfŠ+q½Yøúƒ£r²*6÷:^”ð›]Û%׸wG\788ˉ¤H€ir`ÂÎv?/'¨î’š†ì–ª†ØÙãç¨cæGaf„;B'”ˆFÖí|vévÊçrȵ#áx=Œ¶zCÄ8Pc.ÆÎÑ}‚vr cйëü JR̰i1!¤hô¹ÇØìˆ]ÑnŠÉGˆ•S³…†À¯Ö«ÓÁ¢ô0§»ì ƒ.§jÈ5"GO¥ú† ý™ªñ޹nÝæJ0¶·ï.b4Öó-ÂÉÎл˜n=ðŒw³"`´á‚~´r<ña³s>Ìã)C—ÓÕ0Œ9y®mjú®V!:«©|¸Šk‚Ø"%²£ƒ…*ðÕý5&˜@TZ¥[AkI )†áª±Zb²=Níʆr2¦jŠÁ³ å¾sš¶噜É(…B`4JY:TCaôÙeºcªùU•¨°*çœb2ô”vŒTzCɘ‡gKEËÔ·N„ö¶R¯9‡r,m:µïBM}¯V´Î÷{"O.6¸ÿu1á³ ¢‹~è-ôëg~¿hW´ªƒKt/ÐO‘vs´¯£Ù }„+ ï£î=í]h§±YèØ,êÙ¼l$ë Ùã®ÖŠúÉ®“7õ½ Ü4O?Àõ îðgԻ𠞥þïh;_‘¦!ÈöѸwiýÞõP˜¶¾þCEÓžEVÐh`l­l í,…[±¨m'GT&p ÝDA¬nÓÊE‡ÀÂé!iØ/8<~Ù[$›"­ÀáVôì8z€b3%®ø‘+Ž>gÖ*hÅ/V!r'î·ßÂÀeš§Ém3=³:Irƒæ›n w„¿NÄ0ñ¾Š!ñØŠuñ2‹aÚíÂÍI·ôPK A¥D£¢&3org/gradle/cli/CommandLineParser$AfterOptions.class­•mOAÇÿ{-½r-´¨ >W+p€Š"ÆDð!$MFxa²´g9½î™í¡øü.¾D%ÑÄà‡2Î^ÏrÒ’cšìÎÌÎþffwnûó×·fqÛ€ŽQiŒu“4®£h ‰IS°tLë˜aÈT¼z‹jÉ6ÃPÉ“5«&yÕµ­ŠëXO¹lØÕ¥}Ÿ†ÔG8þ]†‘±x÷ñ2CrÉ«<§ +ÛõM[>ã›.YN”¼ wË\:JIËi0dï½ômùäïxB©ËBØrÉå†Mªu0r$f„Žî§¬óuþ~Ó^õ¹ô›F†þ±Ò+þ–[.5k՗ލ-Œo0$¸¬©äÚz<Aè˜eèkÊͨ´èS ÈbÅÑÆVçï…ùg<±â‰?ÕdþÊ`±Smññ¢‘t\cX>ÂÇcg‚>Ðv¦Õ@]7|”- ƪ·-+öCGõÅ@›Ï”ª0‹ ²j¸žE7 7æcékâµðÞ‰W7xØ’Š1§ãf·0Ï0y¬d˜8ÎÙ3Ì¿5èó?U†Ñ¶=ì¾ q~ :5úh˜hþkºmqéóåÕêƒ_ò2w·íC^€2 ô\¦é ¥G@õI]ÐTŸ‘¥‡´G¤i4gL¶Í,~Ab—T ½4ö"A;Ÿ£‹­Ã`È‘m éŽò:CóÙ¤ú÷3q‘æ‚äÓôhbÆoPK AŒ‹Müu <org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.classÅVërÛTþޭ䏲Ò:¦I à§I|‰sk›ØiK’^‰Üœr“Õ¨±¥Ž,Ó¾À[”˜2ÐþƒáxöHnb×Nä0áϹìÙ³ûí§=«ýóŸ_~0‡‡2Ncñ K2†°È‘“!aYF—ø‚«ŠÍ ǪP»&CÆuŽ!Üä¸%ã6>’1€u޼Œ(68 wúoŒz|†a,oÙ•LÅV·«zF«™5«VSÍí¼aêwU»®Û9Ò^6LùÂpsÒ_ýu W¼Ý¢—›ÚdÖ¬má”l4jeݾ§–«$‰æ-M­nª¶!öM¡$à2 ­ê-[¿aØu§Ø(7m2(·MS·×ªj½®“Ú¢/ÈxWCiX;PíBNg, –YtTÛ)§âò}›ø”ã3%l1ÄüøTðŸ3,ùzºoî˜Ö³Kfž=ìHÁ9Œ T_1$w°bW5Ýt®?ÕôfœkšŒ5s$]%½˜—€±‰ñúÄ4Cä Y åGºæp|­@EYxÔ.ù†´~H@ÃÝ„]*ÿ[qèçrå‰jëí€;˜;þk§G柮G&ާİÞSEêõQɪ¦éõz|q†×|ïyÊóÕpŒj†Š( mªjÝa8ß ÓË”Ww[E–‚ñ^lqŸá6v¿ëÆÊ(=­»WN#¯#¡rN©YS‰–¥.8ÍÔ~éêrWøûß´ö¿€¹ÿ¿¨KÇ*bÔ; QËÅ"Q¼iD@Ôr0¼M»[´Ò¬$’?!H¦vüö¼CãIqÆæÑÇfð.ɆéŒô1J¶á®¨–’ŒáœoZý }4«{JÉÛEßFâGž£?õ3x/ÊJ#Òï˜õÄ'¾Gtr)IÛp‚ô•g{(EOJ¿âT)˜.>Gdƒ/ö-¥G¤WZo=sPß#—`K3‹Q–Ã[FŠ]FŽ]¥¶pÕ…¾àÚ‡®b“Y¬¦h@˜~R ¤Èæ(®!ijJ3n¿‘ã8B§# g›¡HW¢™»Ü±îú…a6ç:Nx*ûŽ9µÀg\Çó.{bµ€ î×¹èÚ¸„÷i^Eˆ¾`– Nó¸$úä,’ÔÏS‘DŸ¼Ñgq¢ŸÎâc)€/hþR’ÿPK A´*«ZMïForg/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.class¥S]OA=wû±P·RˇŠ"ˆUhAx1¦„¨MLšÔ¤„÷¡êàv—Ìn‰ÅÿÀ‹/˜ø`|öñãÎîƒEkâCçÎÜ9÷Ü{Ng?ÿðÀ&6 °Q)`Ì,9Ü5Ë=K&½l£fcÅÆ*!¿¥|m2ËÕ]B¶t%a¢¥|ù|Ðß“zGìyœ)·‚Žðv…Væœ&³Ñ+æ"”M?”~¨"u$Û‘V~¯ô…Q  NÓ÷¥nx" %œ©6mÜÁ#¥nÔóÖ›uBå_Єñ¶êù"ñ[šf)ÏýåØÖ°àm¦*´ƒîȧÊH›j·fŠpÉÁ\ëp ¥ß©LbÊûúèÿÙsì‰ ÂÔEŠ‹£Ý"L¦ïd'höü@KÓŸ0}Á›1/dü MXEÏnØü…qsYXÆ'>9|r9Ç\í=¬w¼±Pä5o’ô—yï$L Ì‘Œ…i±ft–cyeõ™í¹·ÈÍ›}ö˜³™˜©lôy:E¾Á¡1k-©LYÍn3q§2®òÎâ\Ãuæ™M&:åâÒcî#íÿ€ï2‹µ•OÈ­òïù㿈(&íJ`æR’‡­ÔºØ™p6k·0Ï÷,ÄøÛXŒã\‰ç·Øî*w™ÅM/ýPK A|ìRÎÐ&=org/gradle/cli/CommandLineParser$KnownOptionParserState.classÍXéwUÿ½6ͤÓK‘*EqDè’t‚;VkE¬´E­+. ɤ3ufÒ‚ŠHQpCqPð![ÿ>žäu¿\|ÂÿŸIø\@-V< á°À¥gØZ§YÍ“ˆæ€5ͨ-4Τ¦j§×ª¨ 窬ÓÕm͵løÅ Z n­ÍïÔpi S¬5ê¿—˜$뻦 —b^¡)ÄÌSº™tçÐd%f³ùâsT‹CPÅž`Åg^íá •€ôt ¤µÒÎH‘@Ú'ÙØ„N‚rŒ"#ÁŸ^häÛÁN°oGQ7AUß‘çt$‹ åYFRkº|²ôžÃyÞaCè@Æçg‚²°pPÆÉëèn'»Iì<:\(ð=õÄšÆpÑÁÿòÙ,§œÊá›Á«ía…µîà¿Ò±<çÔV²â8æŠoßSTÀ=âGŒˆŸ°KüŒQñ ½’~Ãqñ;~àWqÂóW”|²‹ò¶›â\Šãä¹ÊTÎÏÛ°kqS Žä'×Í'Q.á–¿QsŠw8¿Th·áÚDL)Ù GcMóCG!O Ø+žm>V6ådÜŒ¾ hd¬ ŠFÆí^Ñð©wŒ¬÷øÞ‰&Ï aÄà ‘îWÐ~qˆÿªpÐN߽̾2BIî þ7ÄÁ³!ù?PK A$ľ¢¥ô<org/gradle/cli/CommandLineParser$MissingOptionArgState.class•mOÓPÇÿwÝÖ*ˆLDÙ² ‘!¨ ·'š`0ÁWÖÌšîo;¢ñoôÓøB…Ä~?”ñܶÌKË’îœÛs~ç±íŸ¿¿~˜Å’Žr:’È'I*(uZG 7ÕÙŒ’Šq”ã˜eМ-ÏrD·†_øòK.]S®zÜ3Œ§B˜²js×5]†¹š#ņäuÛ,nÚV±ê4›\Ôk–0¿É#%Šr×–wŸ¡’í[cˆU:å3¤ WZÍ S¾â6œ®9›Ü^ãÒRzxóÞZ”îÈsËu-Ñ˲VµÐ;‹®žTJºÉ?n˜¤I/¸GQ²µw|›m.ÅUO’ÛRn!ÊeCåwä&à# Ö» º@ûë~Ê+ŽØ•:0ßÝrïæ`€´#:L‰:՞ͭÅ1Ç𦯉÷ö)û[ùPR—2Ãäq\ôU§%7ÍÇ–Ú’Ñ#63ª†V—Ûtœ201,¸ˆKî`<ŽE†ùþ–ˆaú$ýe˜=y&z·ƒaêà °ÜýÒýioÙ¦ SÊžx[t¿­¦)<†L/gdè핤÷=Ij$iˆ¨ ÑÉ0iOH‹Ð*ÏöÉ~"ºCj„ÌAæQòÜÂ{Iœ¡³ÑÀgI‚/),£ß9Œ…ÐÅªå »ˆ}kó4º¶ÝÁÑÚ çqÁçЖ„œgŸ2À`þ¢»(LïBû~÷ÉÇeÃ6n0Ä)I')BòeŒ‡à{a‚I¦㇡Ÿ;rL¶¡ÉvŽ\ Q_Q”ãëÿíÓ•;û‚ûêãŒÀ0À¥AS¸B’e4hØØÎ¡dšv6lÒo¼’®ã†_єš Äh8%1õ+aêûUÂÒ' øPK ATK>ªÄ=org/gradle/cli/CommandLineParser$OptionAwareParserState.class­UÛnÓ@=›¤qâ¸$”6\Ê%¤)MÝKÚ@)½p)E¡ E*oÇÓĮօOá xá$ ˆJ|…˜MÝ’*A./Þ™³çŒgf퟿¾ÿPĽ8È©Ð0*w×TzŒ©Èc\…Ž “*L+(¨ˆcVAQÁu†„á4›Ü®•,ÛdÈ–Q/Ô¯5̂Ѱ O¹pÍÚêÌCÔ{i¹¹™è\û èe˶¼; óÁð`ùñ CdÕ©Q²IéØh5«¦xÆ« ò ”ƒ7*\XÒö™.Cúɶg9öʾZÙãŵuÛ6Åjƒ»®I¸…À,s½™è]SMþ¶j’%¼} ÃP¾ôŠ¿æ…·ë…²',»¾4þœ!ÌE]&ܤ–8ö†c$Ž${¿]pÆGÓì§±õ˜oûRËNKæš%t×éi©¨!‰”†Ó˜ÓÐSnbXÁ¼†[XP°¨a Ë s™¬¼ðL±f ×+·ª~˜a°—[ªÝf˜:ç~½¨Z§)9höæOØS†É©­‚» cÁsž›mÏqÌrºœ |ê¯Õ¼ñ¯ðFËüËdUº©ºÔ©áÜ0L×ÍÍÍÐ-=ƽ”»õ_îïqk³Þ¥vr®l0.’¡Ï¥FÒå|©”œxò„¡!òJ„ÓšÒ'vÁtö!}ráOþYÐYг,T6‚$Ëaˆ|iŠÑZÏíÔç ûÌ‹dKTTŸø‚ȇC¾(ÅÁò<ÑCž(.âÅ.#ãóì ¯*êŸ&ª>ZÙ7Dß!½eSZ2B™ÇÞ#¹‡ø¦oªÛo+5UÉÀ¦cÓºÅCÝ¢¯{•ö B£*^ÙvÒ#8G«Ni$èy6¢˜Ž+ùÿÑ1Eˆ8­3$r£]‹ØoPK A˜%àÌ»ª7org/gradle/cli/CommandLineParser$OptionComparator.class•TmOÓP~îÖÑQ:¯ ¾€ Ý ƒ2@Š.Ñ,YÀd†Äe4³¤kIÛ†?„/~#‰á³ÿƨ_ç¶ N6).]ÏË}Îsî=çô~ýõù €E”%d0#¡Ÿ¿ú0+bN‚UÂJ"E,IHs;'"V8|UÄSk"Öz6LÛô7’eA(;íªi;­æ¾á¾Ñ÷-ò Vºníé®ÉíÈ)øïL!»{䛎]všGº«ûŽË WlÛpË–îy!–ªŽÛP®~`jÝ2UÂ6uû€§y­»žáN_åÐÄz`Q¢W…kÂH-¡TˆÓ ôÃT|À%|‘ÎÚ4yÔ`õP?ÖUK·jÍwM»¡…kÉÚw÷º¯uz”Š-ÇÖ¤¤ñž$Þ/0LßÍÐ[3¶î·xѪÿÚMË7-õO¥7â ±IÔRÍi¹uã¥É;?Ú‘~žSËÈb@Æž‰ ™Z½a×ÃB¶ÏÏh÷Οñ\ƶið®ö‚a+6eY÷ŒŠí¶gúæ±Ñ™{"!c /&ãªÆqã ¥ÿý¿vŽa¸[ëhŠãÇ‚Z×0ü0 }‹¥m j†¯]{–…a¤=¿eÑžBº$Í>•½Pí¶Þ}à4¥s2¯|=ѧÕéQ*t±e躣KŠ.@ >rd ’¥’d$S3gH|$%!z÷p'û†aÒå€Ü!Éx‹¢àD–"¹2{Šä9„·ì ©Oè¹€¸Sìp­ çHs»wnL8…tr™­I"þŽ!öyö3Ⱥ2GY¹v÷‚¬à>i<2‡˜ Ø<l’4!»M»{ín•Vˆ™™Ù ôé ùäš#fÂdYþä"’5’‰¨>¬{}FCÀåNS˜Æ#ZOâq€Ï£H·INQÍ2(RÔ8éô˦ÉSÄ<Ùi’Ëÿ PK AäfC˜§£8org/gradle/cli/CommandLineParser$OptionParserState.class•’ßJAÆ¿³Y³º¦ÿ4Õ¶Ö¨£×JoJ¤P¥… …H.¼›$Ã:²™•Ù‰ø }¯/ú}¨Ò3›€ˆ…4»ß™³ßùΜýýçá€#ÔB°ÂÇF€ÍUBñXie? õ½Áo¦}IXl)-O‡ƒ®4碛pf¹•öDÒF¹ó8éÛK•–ή­Jõa2iÚVXþTú®µ4ÍDd™dËÇVjâ(6¢ŸÈ¨—¨¨™B÷]ŸQ]í¤AXH5‡ÆžÊ[ûÅĶóOúÖ÷&£ŸBÃT3k8ÚNê­+q#¢Dè8j[£tܘš¸KûMdT¾Ì‹¼W^'ÒÊÛ„Ýúdð‡†[ƒw{H¨ý›»´Ó¡éɯÊm¤òÌsàÆ+aÅ;„£é÷@(?^ÑY÷JöxÂ÷Ó\a{ò(„ê$“_åÿׇ{ŠðÜL |ŠX‰ufÿÞfs'é'æ8. ñðygXÊu+¹®âe®—/;çÚþ‰ÕÃéßðÊÈ0‚çÑ:^çeorÿ[nÎø}‡y?Ä"k™õ•³—gÿPK A¢Æ÷E«¶3org/gradle/cli/CommandLineParser$OptionString.class•TÿNAþözåÊq”ZDQ‹´GËQÄŸ kLŒ&(ÿ[®—rx½kî£âø/$‰&>€ï¤qv[l“B“ÎîÌÎ|óÍÌîýúóý'€9<éE?LÄ´Ž4ŠB-¥0£ã, ³:4…( 1—Âmá;¯á®†{ Ö²ËÛü#·<î׬µ8týÚCOЈÝÀ§Í¢ë»ñÃT¾Ý¯ÝRXgP+AÕaXv}ge§¾é„oø¦çˆLͽuºBoÕxËŒU™° Cê ßwŠǣȡSk9kV-äUϱlϵ*A½ÎýªHñš‡‘æNÆSéš?s£†Ç?¯ð:幘/t*´-æö‡W¼!éh¸ÏŠƒæ±† /ÏTww~eÙåÓ¬e!ærg‰cèã¶íDQ®ä¹ŽÀOE„–;McBÒ»…ÛÉ-Ü!¹%Œá.ÕÌ"‡{ä©äN'Möë¬zz‹ÆÇY%¼B65[ümŽ~çèkÿE“T‡BZÆ“q‘5²<”]/h¦¸äŸÀ}LѾ‚>‡‡‘ÆM²c”ïGÃäMHxº¦) ˆ±ïPK A`M~U¸2org/gradle/cli/CommandLineParser$ParserState.class•SßoÒPþN) s€ÛÔ97Õ½Œ&MLÈf‚ÙÃÞ.а.åÖÜvFÿ'_|ÑÄÿÿ(ã¹-›Ý Aš´çG¿óïœÛþþóó€´mdQ³‘C-Ç6êxbaÇBƒ{áI/zIÈ4šÇ³Œ\ÂjÏ“îáùdàªbàs¦Ò †Â?ÊÓñ4iF§^H(¼*tU?'‹ï¤tU×aèòËv/Pcg¬ÄÈw¡ï9Ý`2r¤;$uõTy‡Pšˆ/—#}Œ¼@Ö½3ñI8¾c§)OŽ;ÍBÞ / ¡ÆZå Ž°È›…&¡œøWtŸÌi2§íâqf¸YC!‡¼ûzÞPÚ•h&ß—ûP2£»e²»gÆv¡nÓ‚$Ù$T@|„*>AŸÑ%¾ W|Å):ËT Ð3€¿â‚Â_qIÅ_q3!ŠžÅ¹ t–¯^= xÎc @椚ÙCäÍ!ð÷:°Z_ eªàYòÊqà>8YM¨ÝHÅEÿF‚Ÿw@³@9\"žÙ!µvÚC”œzÀ¨1‹ø‰vñ«®¥x••&Òƒá€k$}ËŒfÇö!¶uõÁÇÏTsj]Åp9Ð9†+Î1Œø:ó*…4ñ*4fEù!Š´“æ¿Ëœ¦./1YœŸÍ ®‡µ?PK A£=l)&org/gradle/cli/CommandLineParser.classYi`\Å‘þJš™7zz¶eÙ²=`láë–1¶°åS>K6–±‘ÌXz’Fψ™¶8B¸ÂŽŽ``‡‚¹d ÙM¸ÂÈîØÍ²aÙƒ=€ !lÇÇ~ýÞ›ÑÌè‰üPwOwUuUuÕ×ÕO¯{ö€YòT:ñ±jþW5¿×±Ÿhøƒ/>Ññ)þ¨sú3 ÿ§áOùø >סã yøRÃa#ñç|ÁÑ|ìÇ1ÕׄW‹ø%GÇÉÕÄ£c¼xýâS¿5ÕøEžŽ]¢û%_ͪ¡fFúeu‘¿ŒÖ¤PÇt|ÂeŒ&cu”࿱—qª¯8&¨& œ¤äž¬š‰JO‹ï”|7#ñP"t‰™M$(°¹ÓùÎL8?²=ݱ×cq3Ö”&LMÖsÇsO°¶A0ÚeúAQC(çÖöj]¬ÝZ¢-um 3fÏÆ5iŒµfÎ Å≦îmÔkG0ÒJKͶhÌÌš×dcÊu;ƒ13cßM‚üŒ‰ÍÜ0Ý[‚1«×¬«_ݸµ±®aÅÖ5uëÖ­XÛ(¬ê ^¬îN„ÂÕ1³ÝÜU½&˜ V‘ù‚QQ[Ù¥=I£Ò¨‚]¤Ék µG‚‰î-\‘¹ºÀþFÚ«móWEcíÕí±`kجn ‡ªÛV…"¦­ìüE”9:Gw6„v™­Ž»Êú1Ö|ÆyqeÌ41ë×òP<¸-lÒ‰¾¡H(±H[RÊsô,‹¶šJîÔØ½c›[§…«¢-Áðú`,¤~;“žDGˆ’§|…º¶³©¬·Kg–lloi¶‹­5M%ä· ü¤9.bˆI+vµ˜ÉÐÙ"˜[’FUÏóRŠo;ÃRØñ¬`öFNç”â3#­ŒmL=ƒ šŒ4åPõ%$Ðl¢ÓÉuöÎ * cÝLate+ïr"n꣓uUC›—iظ̀èéJ…›Ç]B\ð kÙΰX5¹P°jØìÃ:ÄÉ)Bˆp(^H˜i%ƒ¹…¯n ZÍükn »‰Ý’É_>N¶§¢‚ Ïœ&3A†32g R4ìÑd«Š Z”8?lçyÒO¤®«‹m'áˆf@çØh¬ÕŒ%sÆžUÊuÅÌ6ë’3iÊ­ Å•¾¹ÛÍ¢Ä%Áp77õš‘DLý^a÷E™9ÍšV\ÑEW ™p¼ vX8)â¬ä4iFf(Må¼aú„}îŽà.ÁÔl?ºFò´,ƒN@6ßÍ 7üwåž3ô½á§ÉEš5ÙF¼îŒ†p JÒ-‹†Ãf‹n1íR^¢¾:ít[½­“BÞY‹ñÔ™dïÁ3‰›©R÷­»­M΄A-µVÔvmê‚ϼ.(SžYìn‘Z¦Q_;¥S™©[ZÌx|Úœ™3ÓK†FR^Ñ9»fpÎUœg ‡sPY‘1O‰ð/ ›}›ëMÑîX k#…ÈãIªRr ÜŠ[ Ü€ ܬFßÁíD¨-Î Æ;¸&-†´Šià{¸OP<ì’Á´1¤MÚ¹ƒt¨†·\Í×ku§¸;5ÙnHXv‘¨!]r1%ûð ‰ Ã0§²Ò„t *‡Ü1½ðT]BØ­¬ÜtáÂ-å†ì”¸!»¤ÇKå2C.—+%‹ã¥Ū2C¾!W*¢or•\Mx´ÖÕ²ZÅm¸…UŒ3W¹¥ªŒqŸ\ÉêlE,rRzüà´…[UÆíºV®3ä[r½!7(GÜ(Wr“|Û›åjCnÁí†Ü*·ò%*ûÜŲ!·ËwYX¹À¤Š2Îu]Ì4y®‚Ó‡Y <'”kïP͆Ü%w't°3²ÝluY9LáÙC¾'÷d˜R‹{23$*Š ¼ƒ0d·\/€!{ä^C¾/÷hrŸ7å†ÜŸÅžkCPáæ™ŸɈ: ù¡\lȃò÷™nÑEñâbÅ`ÈÃ*ÅÆ¹c&{ý>Vi%±¬=f Ù½ƒwbª¼eic›^ÏRĉ^ÒÉw÷w¶`Ö× „OðFŸ3<,ôdn>g?Ü_çy2°Ï|ô—Ÿ˜Þ%õ €Áz¢Xç>"£Nd1ìV“fY72³pLbÊh1s}Á¸½6=£JqŠ®ÒÁÅ´Ï*£É9¡¤ôDuXàU ªëÇ»?›¹²}eÊг¡›§[»Ö‚eN(åóqæ%ÏB=—:‚ñFsWÂú®Áz˱~Œ-)u+Z v{¶©—p,‘|”•¸”ƒÕ{þâî`8žE< ÔrÐ_n¾ÆÛ·¥Cc^¼{[܉բ’z×v„ ç46º˜ð—<[]¿kŒt6SN¶¾oÌÆ;:낊´š»ÔƒÚC“êÕqÖ»›¦[àc¥¡`©ÛÑ|ݽóÛ(~®zvú‚V†7\eŸ £"šzü–¸ª>²ÝL°žP_·k¡°©pÊ6#í‰+Lé€üh¤1I`E™4c…Ò/·]AËin±çع¼™<í±hw׆ڧ0=ëÕ—g3†Nj'"³@#yëYk>nV²0=tziÎH_û»…ò×r3Þ %?~u©'þ\“‡éßv³ÇBä‘‹ Aå ¯Š7ºÝo}m°hüÜ~½ý ÂÇ¡öW„‡sú Èé_&º%î@,yÛÂÝñŽäÅ‘å<ހà MçÙ<ïkéš³®àÇÖ­²0nGRZÕžñA<[1ëQ; hK½&§i13|d³7ØLó]$7$åJ“¦þÙAÈh5㡘ٚz=©ïæ‚ÖÂè´ž¿_‘Ó.Ÿóq*:±€'©ª—£õF†à&kümþñ¹loU}Áõ²ãï¤ášíwùkr9ârÙxÊúám>ß3ÈyÂ⼃­Î˜æâNŽ ›wánöWñ¹})”¬…ìm^YùAh½ðïO ñYL+,ãl"G€íÆ®ß˱‡ý÷ùÇ7<£ÐÜ7hb>Åxú‘×ܽ¹ìiäô!_pÆŒhèÇÈæ² 9€Qå}(à Âðôa´`·¼®F…‚¿Â˜ZoeÀÛ‹±»å±€·°¨ãv£ ã›ë„Æ}r§½8i7N"eÀKâ“{1±Öðõâ\N‚IAUÀ[°°“k|6e)Š­Ðüå¹Èâ=•Lg“iŠÅtªEëñ:¤ðúRt“ŸÄÔ=("õ4RïA~?¦ó(N{,$ªõ)³¾>ÌÈ¡»Æ)Y>gGK;¼åÈ®Õ,JÍ¡¼ª²%TZXÖ‹rE\Þ‹ ÕO¬õü½¨Ü€?i.UÁMjºªÑ[“W”§\Vý æÒ*þRv×ê™"uG¤žYÕxmžì;þâ>,¦.’®®³¾Ó‡ÒKéÖ‘ÍlÜwlfe/N¯ØoEˆŠ§'QÁöÛõb¶ãô Wb#Ó`cm3Æ< ñרŠ_ã"¼KÊ÷° Ÿ£ÇÑ*#`Êx´É)h—btH):åLl—&„evH'¢Ò….¹ËMˆÉ^ÄåQþ~;å9ôÈ˸TÞÄ7äC\)À5ò®“?ãz9†sr˜–*öÅhêåÃp?Û»0à‡=ŒQÖœFÍ {•ºØtw›‚ñt‰c1~DŽÌÎÁ†k½ŒûßUôaŽ ±Ò!Œ¯t0¨F!SE/ÎÜwüƒ²XžÂSýá'æMâ©Íd_ø8ç¼ç¾‘g¦ôMÍ'¡Ð9Íóø×K ô(=SXº-,õ3úð,-Nž¡=ÓÏu†Sá9ÎPôièÔðœ†çÙ Ýñ¦Q³ûc"™áÛ%¹Ïp;°üªs›Ë`q·–x<¿™ð¹à6V¦€¹‹è‹~,¦ï–Ôz*-wÔü‡¼®FŽG|¶˜:%f)ÅXJ¨X–²œBV4[J^ Ï‘²^l×úT{À”€ß œúp…íÃäå¢ÁËÇ÷ü…gÄ9Ü…*Ô+±/#ß’½ZáJNxy½çæ*ú™ŒuìR6+í|*,í&©‘£VäUÀV} 5^ƇbiÌÒ•bY­¼Ð‡5»µùÉ…çyžÇÚæ\µÐ$hêÅ:4¯"iÏù4¥ˆh¹¾pƒm”7ƒ¼ÙãH´ßÌ8¼à‰T ^ÊÈRè”Çx 0ÓK%³°k˜ŸAæg„鵓r7sä~ÆÝ!ÆÙo_ÿŒçðžÇÇœ9Ì`9†Ÿ‹Ž_K_”¼$³ñ²,Á+² ¯J;~);ñšÜ†×å%¼!¯âMyxw§•Ø#){9í%ÊqÇGˆÒÏ2wR»ŸãŒÞ0 /r5{‚—,º5¤ÙËðqÃBH»\ˆ—‰ƒš Öd^pôK¼ÆPΓñ7xY§ñ+òçb–Ü‹7X:y¨ñóx“Yçµ²F园ɯSšü-1ÍÞáï8gËèOÉø{zSe× yµNv½¥a®•`¿aZx¼úà 5Öøm‹èCãd"æQL´ðtLîq:ɛŠeÍc%,3w„…Çä]}sÚêê²Sž}ÆÞÇ~e?š2<‹Ê_¯p媲>lJ¯›0Ý©›j½§ìA^Ãió† uoQ£ÜEûŽ¿Ãø¹pê8Ð~?ÞâžoSÑw/¿å-ýOijw‰g¿ÃÞ¶Kñ/´ÿýžU°üGÒy•^¤}×B±•Œ«‡,ÌZJ¾÷,;–ó–ô;É¢Ÿ½òøxŽb´†f9Ír¶öKêaß2ÿJ|ß‹sð=ijSž8TÞPqhQn§ÈsʃØYQä™Uëµ@Ýë”O~lm.¼ÈI=oÓA`‹2/-ÉõÖìõ'a*oµõ¢}CÓ‘Ms­‡wÅý¨iVÕò„*,ØK¿:&U¦@Äcéå©HbÏ{V5”ky¿†E=ð!Æâ#Þ&³Pÿ==÷ k Oц?âr®]?1Ë>gŽAäù’y{8u cÑaÝ*^®Ž°òHÝ*‡R·Ê!çV¹•g©ò-y‡hÇà·.Ž#¨f€N>Œ©_À{EV43$§øñïøçf®f¯N¹8÷Ѭ·Áœ´;ÙËlçÎdþOü— sNöÃÂù¿]w–aìÌÈûŸÔi‰µ ;{±g<¹Oajaø v<sð[©€Gò¸%.ÇX"œüÐ"ùQ kGOa©XÇg\Ÿp³±ŸÏ>Î>Á¾›â.a¿“ý.ö=¼¸Œ¿Ç³¿œýì¿AÉ#Ù_Éþ›ì¯òäð´;q é¯eéV)^ñåý?PK A‹å>É&org/gradle/cli/ParsedCommandLine.class•Wiwg~FÛÈòÄ‹ê%v“TMc[–å’ñR·Ž›8¶SâÆÆ)-L¬‰¬TÖ(£‘·”.PhÙ¡liÙ7 ’`rX¾Áá;ßøÆŸ œœ˜ç}g$KÖ¸1GçÌÜ÷Î}Ÿ÷Þç.3úǽ?þÀü.‚v˜*òø`Ö!‰‹*¬‚΢ .¶ŠbuŽf¹¸T“¸,.+*žWñBM0#hÄ'ëñ".©øT=^ÂËa¼¢âÕ·}:‚|FÅkt ã³âþ¹0^÷7„ÅçÅÎ/Ô㋸$–__Vñ•0¾A¾V¯ãMaó qù¦¸¼©â[ ͼ1s…#+3¶•É¥©™¼ /ëE;“˜Òóà êf2éœn-CÁÉê§#Î2«çÒÀð¤i¥Ò–žÊ ÙÌÀ“ºU0RãæÒ’žKMfrÆ)yâð(‘ò–Q0r¶£*T>cØ4y¤Zãq ²Œ%sÙH•ŒË¶¥Yéâñ©hªÀ™Ìô¾Mª-°C#™\ÆUЯ08a–~.k ÷Î*Œ›)CxÏð¦‹Kç ë)ñLAtÒ\г³º•kWYçpÎ#„AÍ™ ´¼äÌ FA|»”ÒWÓݳwó/뀽˜)xØÖàÓV5KÔ¶x±  ­:Ô•|)ÜÃö#÷wOP¿cÆÖžcI(ßVñÃ^yØ¢ÈUØ6K¥Þïõ¤ÿbÑ´±\jÂÌú½Óîµ3Tp‘UG(ˆŒí|ÑVÐQ³áH1“M– 7S8–± ´RΊ|{…çY›#Û¶õô·nQ/”ª¬5^kÑKošu·O;=F‚¸m,·RÚÙ¯h¤q3›5$ßbwcÖLOËF¶Ü™mÞÆ ž¶¼ßûLïÐÏn"ªÝöûª9mØG7M”h©z*gJwr‹vè©”DœÕ³Ec úY®ÁeçyíK„?ëa{ÿòÿ?ÂÕœqZ:¯«fy Ó×ÈŒY´ŒcÑöm5ðû…Óã Ý é¸^Xd‹kèÇþšùÞဂ6žŽY–¾"Öð|PÃ[x[Ãwñ= ßÇÄîç1sµ=>4ü?Rñc¶ÂfÖUüDÃOñ3Ýñ8ë*$cÕ/GWý†º*ÀSç.°„5œÂ“~ŽU¾n¶˜ |ɘ†_à—=¦0­a ç4ü WU\Ó0³~ßp´WLöHZÏ–¼:zyÁpyØéøëé*ôÄr¦Kç}j¿Ècü­†ë¸ªážÑð®Ö’[û£v.•”2}Ri›ŒÆ—c9SV´UõPÉPŒIÎir+÷°©9¹¨ã‘´Ž°gËS§¹ Óù´ØQ¥¨Z³yˆœÛ‡ãµàµOBçMkI'Æ GÃ>ýÞ ï=Ÿ7r©‘W=¶~©„Ìœ­gDô­1[¼f(O :º½6y…ÙP=𸟳J8žJe³œÒÇÃü2mç‡sQÑëP0À•ïãš-^^äúЦ5[¼¼þêy?ŒAÊC€2?TjÞH܆’¸ßümøo"@1H1tꆦXG1rõ}kÐL%×°CÁœ¤Ð à¯hœ¾ƒ&Ú4úo!º† ;‚®]LHÒ°e(”ø=¡ŽÀZý˜[]ÿ×êú;7dÃò?‚Æk'W­ü¾o£ÔÎÏñ ùAþØ…ì†=xá5Äð:IáŽCüa£b!ZÀcxœ(DÃÌp1Ž')Å1ÒóaÊïŽæ8¥”÷!°NÎü*’*&TþïÀ=t«hTÑÄÕÐý_éP;É=œ'¼’XœáÙ­/ÚúÚçý F«ÞÆÎ™ù€ë¥bXˆ@Çu #Bw¶vÉp§ú\‡}bÈ9¹Ã»¼‡x?}düÁ©À¨“•¡€àTò}HH.ßÁÝo!’Œîº…ÝsÉèyëV¬ü£«ëOÞÂC×ËIØ/ë¥a$¡qÖa’xA1c¬¾ã¤x‚š)R_J@{ñ& (ü+“}š?Av˜ö3xŠþG¸û f™”«97­ðßCTE§Bºï"¦¢å]t¸Œ”Fœ×.ã'¨ññޜ軅؜ ›t<ìõ2¯i Êâ1éi›³¡ì_3ã%œ‚§ß6ì ;AØ“÷ýžq“÷6ïA-ÁöV4Rg©‘Z¦l G® ¸¶ºþoÿµrNÚ$«gسdyŽE:ú+ŽŽ‘ÉN:$ôËÌ•œèųøxU¡ Í'\ž5øïB%Ç»6 Zç3¾]^ᜈ¢kéô>lšJþ ;ï k>ÚeÞ'*ù6zþ’Eä—Ge¤)ö¤Aù<],;[í¢ÃS;\ô¬Oº†r=l8>Y ŠÃ߀äŠ^ÚÜ9ÙŠÎ ºðNL¯ç‘vczÂÍ­&@S܇¹›Òšg\¬H«VvWc£òŒ .¸ˆ97­{ªXšŘ”ã°—GôoøÛ )ãªÈ‘¶,ÏI8åsöÈQ¦HI 0­›$AbïsŒÖ9ûŠ{ö`_ið–«*^QUt¥ Õ ¢š¹èó‰ñûÏåŒ9%ö<'ì tçE¾B^âKãårÖvs?ê–Ø`ÙÑAé^EAEXP QP –dȹÿPK AyßtÚE,org/gradle/cli/ParsedCommandLineOption.classS]OÔ@=ݯîGeùPa„eQª¨ø"ˆhHV1YƒÁ·awR»í¦íá§ðl⋘¨IÔg”ñN[`Y$ñ¡Ó™Û{Ï=çÜéï?ߘ“4²(ª˜H#‚b ¸ž¦å†ŠÉ$ô4¸™Á-L%q[¾ï¨¸+ßÓr¹§â¾Š [ÌlpWA¶´É¶˜Þð„©—„ëÍ(H•…a1¯áp#-Ÿgƒ³É,C/{ްŒ™9*IÌ Kxs ¢…ñU±E»JÅ%añ—Ú:w^³u“"¹’]aæ*s„<‡Á˜·!ˆI¡d;†n8¬jr½b ýs\^]´k5fU%ÔJݶEí’÷V¥Ý…ñ³”´•=Vy÷‚Õé£ j”;*i=z&xŽÔ «V£Qã–§ §p6K:dÇ)¹ñKn07T@–½U.Û §ÂŸ Évàé“ICzt°]p¶-)kèDNÃ(Æ t]6Mn0“,ñøÒû ÷±(#ÍWmîæ-ÛËo°-žgÖvÞ¿“²Ñ°Š‡f0« ?L'æùZÃôDÝäA¦K©@Ó϶*Õðó$¡Ñÿï)”•õM^!ÛO†îŒ+vï–i¥áÊQ,7_… ”¬ŽÒÀZ~“¾«Â]ªÕ½m\¡(K? LºHï.:EÐ8íÉrZ/PdQÚÙâ>”â!"kûˆ~E쳟}‘Vù_‚*bTÓG;-ÈÇ%ôûø¸bí„XÓÅoˆï¢í‰µœºäÏâÄ"¡Âpú(=@&‚_Ðö¨2êwì%Ž ^*õè$üAêPÀPS÷é°û =1D:¥š!䉩ä¡ÓIfÅ%þÞ±„n‚‰‡05W(v•¾bžRD ×$ÈÄÚ"xÓjÊ2D¬Ï§ìç†xr7‚k> º½!âóV.p£]Á.ÔØG²àÓ±ô€ãDÇ\“Ô8"Ùy Rð‰ŒÿPK A\vÆB| :org/gradle/cli/ProjectPropertiesCommandLineConverter.class’KOÂ@…ÏD|?PâìÀšuã#QŒ+¢$÷C;–1m‡  ÿJW&.üþ(ãª1ØDã,îéœ9ßôv¦oï/¯ö±[@yl汕G)‡ívÙ }FHWkw„LSºœ°Ü!¿]®nY×7ÎZK:Ì¿cJDóØÌ螎ZRy¶§˜ësÛñ…ÝVò;ÚHŸ+-ø )ƒ€…n´kS†#cruLXõøgh|Ó×B†„j­õÀFÌöYèÙ­Dè™èÎè%×LøÜ%”ÖŽñŽ…Ž*‡_‰¨å½?õÖˆ:("‡<Ú„bJÕö ®­ØŠtòfë^*K÷¸Õ ßµ¦ XUÞðV½Œ£Üi01Èk ÂÁp8ƒwZ±ß8T0gî?Pôa¦Î›™m”ŒÎí=ƒžÌC S³s ¦§£‹| Ë1\áôZêq-}CÓ_èJšžEˉèjš™E+ ¨ùw'©õPK A Ï8=|ü9org/gradle/cli/SystemPropertiesCommandLineConverter.class’ËJÃ@†ÏØ«mµ¶ÖjÕEÜ5BPÄ…R/Pé~šÓ‘$&ÓBÞJW‚ À‡'i©AÄYœ3óÏÿÍœ¹¼¼¾Àl— "l¡Y„Íl E Ê<&Ï dÚú@¶ËÇH ÚgÞLÝŠ{:r”Rïs‹:C*X4NĬœ°€ÀQŸ Û´;hZ3a ѽÜG!]îºÔG‹v¹7S"Š5eb o}ɸG ÑÖûtFM‡z¶9‚y¶²¶~X{()spL`7e.°KV, øTXxÉ¢Šõ¿”fDT E¤G ÄPÇWãJm®h~²­Æ49Aíjx­µÑ° ­ÓsÃhöÌ gÔ™¢n8üÇ5©Û] .FÔ’¿s°9õàQˉ΢ⲙ*•sû/@žUg J*æc±e+sƒÊ+1¾ Õî$p¦¾ô´€6¿¡™/t-Í,¢;©h-Í.¢Z ª>kìZÿPK AýØ?¢gradle-cli-classpath.properties+(ÊÏJM.)¶å**Í+ÉÌMµåPK A%gradle-cli-parameter-names.propertiesPK A íAMETA-INF/PK Am±>=@?¤)META-INF/MANIFEST.MFPK AíA›org/PK A íA¿org/gradle/PK AíAêorg/gradle/wrapper/PK A•%Ó¦¹/¤org/gradle/wrapper/BootstrapMainStarter$1.classPK Ai,«$ -¤#org/gradle/wrapper/BootstrapMainStarter.classPK AhQþ}¢Ò#¤org/gradle/wrapper/Download$1.classPK A¥"I;ØA¤p org/gradle/wrapper/Download$DefaultDownloadProgressListener.classPK AѺNì,À4¤ org/gradle/wrapper/Download$ProxyAuthenticator.classPK A$É~ãX !¤ˆorg/gradle/wrapper/Download.classPK AyL¢¡Ê1¤ª!org/gradle/wrapper/DownloadProgressListener.classPK A!9|¶„ 3¤š"org/gradle/wrapper/ExclusiveFileAccessManager.classPK Aì„,y†-¤¡)org/gradle/wrapper/GradleUserHomeLookup.classPK A™c67§ *¤e,org/gradle/wrapper/GradleWrapperMain.classPK AúâæªÛ"¤T6org/gradle/wrapper/IDownload.classPK A9lâV†"¤>7org/gradle/wrapper/Install$1.classPK AØ ’$|-¤Ô?org/gradle/wrapper/Install$InstallCheck.classPK Aävp£.- ¤›Borg/gradle/wrapper/Install.classPK Að¿:öo4¤|Worg/gradle/wrapper/Logger.classPK AJJ¯'ï8¤(Zorg/gradle/wrapper/PathAssembler$LocalDistribution.classPK A´çtx7‘&¤ \org/gradle/wrapper/PathAssembler.classPK A„ÍëÂ| 0¤†corg/gradle/wrapper/SystemPropertiesHandler.classPK Aª=©°?-¤–horg/gradle/wrapper/WrapperConfiguration.classPK AGü¨ (¤‘korg/gradle/wrapper/WrapperExecutor.classPK AÔe‹ #¤ìtgradle-wrapper-classpath.propertiesPK A)¤Lugradle-wrapper-parameter-names.propertiesPK AíA•uorg/gradle/cli/PK AÕÜ?®<S1¤Äuorg/gradle/cli/AbstractCommandLineConverter.classPK A׃µ³Xì ;¤Oxorg/gradle/cli/AbstractPropertiesCommandLineConverter.classPK A}­ÎyGK1¤}org/gradle/cli/CommandLineArgumentException.classPK A³ßâúg)¤–~org/gradle/cli/CommandLineConverter.classPK ASf Õg&¤öorg/gradle/cli/CommandLineOption.classPK Aü튯¥å(¤<†org/gradle/cli/CommandLineParser$1.classPK A$f{K¿ ;¤'‡org/gradle/cli/CommandLineParser$AfterFirstSubCommand.classPK A¥D£¢&3¤ËŠorg/gradle/cli/CommandLineParser$AfterOptions.classPK AŒ‹Müu <¤¾org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.classPK A´*«ZMïF¤’org/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.classPK A|ìRÎÐ&=¤Å”org/gradle/cli/CommandLineParser$KnownOptionParserState.classPK A$ľ¢¥ô<¤ð›org/gradle/cli/CommandLineParser$MissingOptionArgState.classPK ATK>ªÄ=¤ïžorg/gradle/cli/CommandLineParser$OptionAwareParserState.classPK A˜%àÌ»ª7¤ô¡org/gradle/cli/CommandLineParser$OptionComparator.classPK AäfC˜§£8¤¥org/gradle/cli/CommandLineParser$OptionParserState.classPK A¢Æ÷E«¶3¤§org/gradle/cli/CommandLineParser$OptionString.classPK AgAq²”x=¤ý©org/gradle/cli/CommandLineParser$OptionStringComparator.classPK A`M~U¸2¤ì¬org/gradle/cli/CommandLineParser$ParserState.classPK ApÍX Ýk?¤@¯org/gradle/cli/CommandLineParser$UnknownOptionParserState.classPK A£=l)&¤z²org/gradle/cli/CommandLineParser.classPK A‹å>É&¤ÔÄorg/gradle/cli/ParsedCommandLine.classPK AyßtÚE,¤áÌorg/gradle/cli/ParsedCommandLineOption.classPK A\vÆB| :¤Ðorg/gradle/cli/ProjectPropertiesCommandLineConverter.classPK A Ï8=|ü9¤ÙÑorg/gradle/cli/SystemPropertiesCommandLineConverter.classPK AýØ?¢¤¬Ógradle-cli-classpath.propertiesPK A%¤þÓgradle-cli-parameter-names.propertiesPK66êCÔjtreg-jtreg-7.3.1-1/plugins/idea/gradle/wrapper/gradle-wrapper.properties000066400000000000000000000003101446671450000264400ustar00rootroot00000000000000distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists jtreg-jtreg-7.3.1-1/plugins/idea/gradlew000066400000000000000000000132061446671450000200500ustar00rootroot00000000000000#!/usr/bin/env sh # # Copyright 2015 the original author or authors. # # 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 # # https://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. # ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn () { echo "$*" } die () { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin or MSYS, switch paths to Windows format before running java if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=`expr $i + 1` done case $i in 0) set -- ;; 1) set -- "$args0" ;; 2) set -- "$args0" "$args1" ;; 3) set -- "$args0" "$args1" "$args2" ;; 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Escape application args save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" exec "$JAVACMD" "$@" jtreg-jtreg-7.3.1-1/plugins/idea/gradlew.bat000066400000000000000000000053131446671450000206150ustar00rootroot00000000000000@rem @rem Copyright 2015 the original author or authors. @rem @rem Licensed under the Apache License, Version 2.0 (the "License"); @rem you may not use this file except in compliance with the License. @rem You may obtain a copy of the License at @rem @rem https://www.apache.org/licenses/LICENSE-2.0 @rem @rem Unless required by applicable law or agreed to in writing, software @rem distributed under the License is distributed on an "AS IS" BASIS, @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Resolve any "." and ".." in APP_HOME to make it shorter. for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega jtreg-jtreg-7.3.1-1/plugins/idea/settings.gradle000066400000000000000000000000431446671450000215130ustar00rootroot00000000000000rootProject.name = 'jtreg-plugin' jtreg-jtreg-7.3.1-1/plugins/idea/src/000077500000000000000000000000001446671450000172655ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/000077500000000000000000000000001446671450000202115ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/000077500000000000000000000000001446671450000211325ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/000077500000000000000000000000001446671450000217105ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/000077500000000000000000000000001446671450000231555ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/000077500000000000000000000000001446671450000244535ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/000077500000000000000000000000001446671450000255665ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/components/000077500000000000000000000000001446671450000277535ustar00rootroot00000000000000JTRegApplicationComponent.java000066400000000000000000000050631446671450000355650ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/components/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.components; import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.fileEditor.FileEditorManagerListener; import com.intellij.openapi.project.Project; import com.intellij.util.messages.MessageBusConnection; import org.jetbrains.annotations.NotNull; /** * The jtreg project component. This class is attached to every project that is opened inside the IDE and listens * for specific events (see {@see JTRegFileManagerListener}. */ public class JTRegApplicationComponent implements ProjectComponent { JTRegFileManagerListener listener; MessageBusConnection busConnection; public JTRegApplicationComponent(Project project) { busConnection = project.getMessageBus().connect(); listener = new JTRegFileManagerListener(project); busConnection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, listener); } @Override public void initComponent() { // nothing } @Override public void disposeComponent() { busConnection.disconnect(); listener.dispose(); listener = null; } @Override public void projectOpened() { //nothing } @Override public void projectClosed() { //do nothing } @Override @NotNull public String getComponentName() { return "JTRegApplicationComponent"; } } JTRegFileManagerListener.java000066400000000000000000000244211446671450000353160ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/components/* * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.components; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.event.DocumentListener; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorManagerListener; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Alarm; import com.oracle.plugin.jtreg.util.JTRegUtils; import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.stream.Stream; /** * This listener intercepts editor events for file opened/closed. Each time a new jtreg test is opened, the project root * model is updated, so that the test source is displayed without errors. Changes in the headers will be picked up * and reflected in the root model. */ public class JTRegFileManagerListener implements FileEditorManagerListener { public static final Logger LOG = Logger.getInstance(JTRegFileManagerListener.class); Project project; class TestInfo { VirtualFile file; Module module; Alarm alarm = new Alarm(); VirtualFile contentRoot; List roots = new ArrayList<>(); Document document; DocumentListener listener = new DocumentListener() { @Override public void documentChanged(DocumentEvent e) { alarm.cancelAllRequests(); alarm.addRequest(() -> processFileOpened(TestInfo.this), 1000); } }; TestInfo(VirtualFile file) { this.file = file; this.module = ModuleUtilCore.findModuleForFile(file, project); this.contentRoot = ProjectRootManager.getInstance(project).getFileIndex().getContentRootForFile(file); this.document = FileDocumentManager.getInstance().getDocument(file); document.addDocumentListener(listener); } void dispose() { alarm.cancelAllRequests(); document.removeDocumentListener(listener); //clear out test info file = null; roots = null; contentRoot = null; module = null; alarm = null; document = null; } } Map testInfos = new HashMap<>(); TestRootManager rootManager = new TestRootManager(); public JTRegFileManagerListener(Project project) { this.project = project; } @Override public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) { if (JTRegUtils.isInJTRegRoot(file)) { LOG.info("test file opened: " + file + " @ " + project.getName()); DumbService.getInstance(project).smartInvokeLater(() -> { LOG.info("test file opened [smart]: " + file + " @ " + project.getName()); TestInfo testInfo = new TestInfo(file); testInfos.put(file, testInfo); processFileOpened(testInfo); }, ModalityState.NON_MODAL); } } void processFileOpened(TestInfo testInfo) { VirtualFile file = testInfo.file; LOG.info("processing file opened: " + testInfo.file + " @ " + project.getName()); boolean isJtreg = JTRegUtils.isJTRegTestData(project, file); boolean isTestNg = JTRegUtils.isTestNGTestData(project, file); if (isJtreg || isTestNg) { //add jtreg roots try (TestRootManager.TestRootModel rootModel = rootManager.rootModel(testInfo)) { List oldRoots = testInfo.roots; List testRoots = JTRegUtils.getTestRoots(project, file); if (oldRoots == null || !oldRoots.equals(testRoots)) { if (oldRoots != null) { rootModel.removeSourceFolders(oldRoots); } testInfo.roots = testRoots; if (!testRoots.isEmpty()) { rootModel.addSourceFolders(testRoots); } } } } else { try (TestRootManager.TestRootModel rootModel = rootManager.rootModel(testInfo)) { List oldRoots = testInfo.roots; if (oldRoots != null) { rootModel.removeSourceFolders(oldRoots); } testInfo.roots = Collections.emptyList(); } } } @Override public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) { TestInfo testInfo = testInfos.get(file); //did we open the file? if (testInfo != null) { LOG.info("test file closed: " + file + " @ " + project.getName()); DumbService.getInstance(project).smartInvokeLater(() -> { LOG.info("test file closed [smart]: " + file + " @ " + project.getName()); processFileClosed(testInfo); }, ModalityState.NON_MODAL); } } void processFileClosed(TestInfo testInfo) { VirtualFile file = testInfo.file; LOG.info("processing file closed: " + testInfo.file + " @ " + project.getName()); if (!file.exists() || JTRegUtils.isJTRegTestData(project, file) || JTRegUtils.isTestNGTestData(project, file)) { if (project.isOpen()) { try (TestRootManager.TestRootModel rootModel = rootManager.rootModel(testInfo)) { List rootsToRemove = file.exists() ? JTRegUtils.getTestRoots(project, file) : testInfo.roots; rootModel.removeSourceFolders(rootsToRemove); } } } testInfo.dispose(); testInfos.remove(file); } class TestRootManager { Map refCount = new HashMap<>(); TestRootModel rootModel(TestInfo testInfo) { ModifiableRootModel modifiableRootModel = ModuleRootManager.getInstance(testInfo.module).getModifiableModel(); ContentEntry contentEntry = Stream.of(modifiableRootModel.getContentEntries()) .filter(e -> e.getFile().equals(testInfo.contentRoot)) .findFirst().orElse(null); return new TestRootModel(contentEntry, modifiableRootModel); } void dispose() { refCount.clear(); } class TestRootModel implements AutoCloseable { ContentEntry contentEntry; ModifiableRootModel modifiableRootModel; TestRootModel(ContentEntry contentEntry, ModifiableRootModel modifiableRootModel) { this.contentEntry = contentEntry; this.modifiableRootModel = modifiableRootModel; } void addSourceFolders(List sourceRoots) { for (VirtualFile f : sourceRoots) { Integer i = refCount.get(f); if (i == null) { LOG.debug("Adding source folder: " + f); contentEntry.addSourceFolder(f, true); } refCount.put(f, i == null ? 1 : i + 1); } } void removeSourceFolders(List sourceRoots) { for (SourceFolder s : contentEntry.getSourceFolders()) { if (!s.isTestSource()) continue; for (VirtualFile f : sourceRoots) { if (f.getUrl().equals(s.getUrl())) { removeSourceFolder(f, s); } } } } void removeSourceFolder(VirtualFile f, SourceFolder s) { Integer i = refCount.get(f); if (i == null) { //not found - skip } else if (i == 1) { LOG.debug("Removing source folder: " + s); contentEntry.removeSourceFolder(s); refCount.remove(f); } else { refCount.put(f, i - 1); } } @Override public void close() { if (modifiableRootModel.isChanged()) { ApplicationManager.getApplication().runWriteAction(() -> modifiableRootModel.commit()); } else { modifiableRootModel.dispose(); } } } } void dispose() { Iterator> entriesIt = testInfos.entrySet().iterator(); while (entriesIt.hasNext()) { entriesIt.next().getValue().dispose(); entriesIt.remove(); } rootManager.dispose(); project = null; } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/000077500000000000000000000000001446671450000304355ustar00rootroot00000000000000JTRegConfiguration.java000066400000000000000000000245021446671450000347270ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/* * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration; import com.intellij.diagnostic.logging.LogConfigurationPanel; import com.intellij.execution.*; import com.intellij.execution.configurations.*; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.testframework.TestSearchScope; import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties; import com.intellij.execution.ui.DefaultJreSelector; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.options.SettingsEditorGroup; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.JdkUtil; import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.oracle.plugin.jtreg.configuration.ui.JTRegConfigurable; import com.oracle.plugin.jtreg.service.JTRegService; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; /** * The jtreg configuration. */ public class JTRegConfiguration extends JavaTestConfigurationBase { private String jtregOptions; private boolean alternativeJrePathEnabled; private String alternativeJrePath; private String file; private String directory; private String workDirectory; public JTRegConfiguration(Project project, ConfigurationFactory configurationFactory) { super("jtreg", new JavaRunConfigurationModule(project, false), configurationFactory); } @NotNull public String getFrameworkPrefix() { return "jtreg"; } @Override public void setEnvs(Map map) { } @NotNull @Override public Map getEnvs() { return Collections.emptyMap(); } @Override public void setPassParentEnvs(boolean b) { } @Override public boolean isPassParentEnvs() { return false; } @Override public Collection getValidModules() { if (file != null) { VirtualFile vf = LocalFileSystem.getInstance().findFileByPath(file); if (vf != null) { return Collections.singletonList(ModuleUtilCore.findModuleForFile(vf, getProject())); } } return Arrays.asList(ModuleManager.getInstance(getProject()).getModules()); } @Nullable @Override public RefactoringElementListener getRefactoringElementListener(PsiElement psiElement) { return null; } @Override public void readExternal(Element element) throws InvalidDataException { super.readExternal(element); XmlSerializer.deserializeInto(this, element); } @Override public void writeExternal(Element element) throws WriteExternalException { super.writeExternal(element); XmlSerializer.serializeInto(this, element); } @NotNull @Override public SettingsEditor getConfigurationEditor() { SettingsEditorGroup group = new SettingsEditorGroup<>(); group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), new JTRegConfigurable<>(getProject())); //provides e.g. coverage tab JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group); //if some logging would be interesting to have aside with console group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel<>()); return group; } @Nullable @Override public JTRegConfigurationRunnableState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment executionEnvironment) throws ExecutionException { return new JTRegConfigurationRunnableState(this, executionEnvironment); } @Override public SMTRunnerConsoleProperties createTestConsoleProperties(Executor executor) { //produces some additional benefits for rerun failed tests, etc return new JTRegConfigurationConsoleProperties(executor, JTRegConfiguration.this); } @Override public void checkConfiguration() throws RuntimeConfigurationException { super.checkConfiguration(); String fileOrDirectory = file != null ? file : directory; if (fileOrDirectory != null) { final VirtualFile file = LocalFileSystem.getInstance().findFileByPath(fileOrDirectory); if (file == null || !file.isValid()) { throw new RuntimeConfigurationWarning("Test " + (this.file != null ? "file " : "directory ") + fileOrDirectory + " doesn't exist"); } } else { throw new RuntimeConfigurationWarning("Nothing found to run"); } String jtregDir = JTRegService.getInstance(getProject()).getJTRegDir(); if (jtregDir != null && !jtregDir.isEmpty()) { final VirtualFile file = LocalFileSystem.getInstance().findFileByPath(jtregDir); if (file == null || !file.isValid()) { throw new RuntimeConfigurationWarning("Configured jtreg path " + jtregDir + " doesn't exist"); } VirtualFile lib = file.findChild("lib"); boolean error = lib == null || !lib.isValid(); if (!error) { VirtualFile jar = lib.findChild("jtreg.jar"); error = jar == null || !jar.isValid(); } if (error) { throw new RuntimeConfigurationWarning("Configured jtreg path " + jtregDir + " doesn't point to a valid jtreg installation"); } } else { throw new RuntimeConfigurationWarning("No jtreg path configured"); } if (getJDKString() == null) { throw new RuntimeConfigurationWarning("No valid JDK configured for running jtreg tests"); } } String getJDKString() { String jdkString = null; if (isAlternativeJrePathEnabled()) { String jdkPathString = getAlternativeJrePath(); Sdk sdk = ProjectJdkTable.getInstance().findJdk(jdkPathString); if (sdk != null) { jdkString = sdk.getHomePath(); } else if (JdkUtil.checkForJdk(jdkPathString)) { jdkString = jdkPathString; } } else { String defaultJdk = DefaultJreSelector.projectSdk(getProject()).getNameAndDescription().first; jdkString = ProjectJdkTable.getInstance().findJdk(defaultJdk).getHomePath(); } return jdkString; } @Override public String getRunClass() { return file; } public void setRunClass(String file) { this.file = file; } @Nullable @Override public String getPackage() { return directory; } public void setPackage(String directory) { this.directory = directory; } @Override public boolean isAlternativeJrePathEnabled() { return alternativeJrePathEnabled; } @Override public void setAlternativeJrePathEnabled(boolean alternativeJREPathEnabled) { this.alternativeJrePathEnabled = alternativeJREPathEnabled; } @Override public String getAlternativeJrePath() { return alternativeJrePath; } @Override public void setAlternativeJrePath(String alternativeJrePath) { this.alternativeJrePath = alternativeJrePath; } @Override public String getProgramParameters() { return jtregOptions; } @Override public void setProgramParameters(String jtregOptions) { this.jtregOptions = jtregOptions; } @Nullable @Override public String getWorkingDirectory() { return workDirectory; } @Override public void setWorkingDirectory(@Nullable String s) { workDirectory = s; } @Override public String getVMParameters() { return ""; } @Override public void setVMParameters(String s) { } public void bePatternConfiguration(List list, PsiMethod psiMethod) { //do nothing } public void beMethodConfiguration(Location location) { //do nothing } public void beClassConfiguration(PsiClass psiClass) { //do nothing } public boolean isConfiguredByElement(PsiElement psiElement) { return false; } public TestSearchScope getTestSearchScope() { return null; } public void setSearchScope(TestSearchScope testSearchScope) { //do nothing } public String getTestType() { return "jtreg"; } public byte getTestFrameworkId() { return 2; //for now } } JTRegConfigurationConsoleProperties.java000066400000000000000000000041771446671450000403350ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration; import com.intellij.execution.Executor; import com.intellij.execution.actions.JavaRerunFailedTestsAction; import com.intellij.execution.testframework.JavaAwareTestConsoleProperties; import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction; import com.intellij.execution.ui.ConsoleView; import org.jetbrains.annotations.Nullable; /** * This class defines policies to filter out failed tests etc. Currently unused. */ public class JTRegConfigurationConsoleProperties extends JavaAwareTestConsoleProperties { public JTRegConfigurationConsoleProperties(Executor executor, JTRegConfiguration runConfiguration) { super("jtreg", runConfiguration, executor); } @Nullable @Override public AbstractRerunFailedTestsAction createRerunFailedTestsAction(ConsoleView consoleView) { return new JavaRerunFailedTestsAction(consoleView, this); } } JTRegConfigurationRunnableState.java000066400000000000000000000216111446671450000374150ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration; import com.intellij.execution.*; import com.intellij.execution.configurations.JavaParameters; import com.intellij.execution.configurations.ParametersList; import com.intellij.execution.configurations.RuntimeConfigurationError; import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.execution.process.KillableColoredProcessHandler; import com.intellij.execution.process.OSProcessHandler; import com.intellij.execution.process.ProcessTerminatedListener; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.testframework.SearchForTestsTask; import com.intellij.execution.testframework.TestSearchScope; import com.intellij.execution.ui.DefaultJreSelector; import com.intellij.openapi.module.Module; import com.intellij.openapi.projectRoots.JdkUtil; import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.util.PathUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.oracle.plugin.jtreg.executors.JTRegDebuggerRunner; import com.oracle.plugin.jtreg.runtime.JTRegTestListener; import com.oracle.plugin.jtreg.service.JTRegService; import java.io.File; import java.io.IOException; import java.lang.reflect.Method; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * This class tells the IDE how a given configuration should be translated into an actual command line invocation. */ class JTRegConfigurationRunnableState extends JavaTestFrameworkRunnableState { private final JTRegConfiguration myConfiguration; public JTRegConfigurationRunnableState(JTRegConfiguration configuration, ExecutionEnvironment executionEnvironment) { super(executionEnvironment); myConfiguration = configuration; } @NotNull @Override protected String getFrameworkName() { return "jtreg"; } @NotNull @Override protected String getFrameworkId() { return "jtreg"; } @Override protected void passTempFile(ParametersList parametersList, String s) { //do nothing } @NotNull @Override protected JTRegConfiguration getConfiguration() { return myConfiguration; } @Nullable @Override protected TestSearchScope getScope() { return TestSearchScope.SINGLE_MODULE; } @Override protected JavaParameters createJavaParameters() throws ExecutionException { try { getConfiguration().checkConfiguration(); } catch (RuntimeConfigurationException err) { throw new CantRunException(err.getMessage()); } JavaParameters javaParameters = super.createJavaParameters(); javaParameters.getProgramParametersList().clearAll(); javaParameters.setMainClass("com.sun.javatest.regtest.Main"); String jdkString = getConfiguration().getJDKString(); javaParameters.getProgramParametersList().add("-jdk:" + jdkString); String customJTRegOptions = getConfiguration().getProgramParameters(); if (customJTRegOptions != null) { javaParameters.getProgramParametersList().addParametersString(customJTRegOptions); } if (getEnvironment().getRunner() instanceof JTRegDebuggerRunner) { JTRegDebuggerRunner runner = (JTRegDebuggerRunner) getEnvironment().getRunner(); javaParameters.getProgramParametersList().add("-debug:-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=127.0.0.1:" + runner.address()); boolean hasMode = false; for (String s : new String[] { "-ovm", "-othervm", "-avm", "-agentvm" }) { if (javaParameters.getProgramParametersList().hasParameter(s)) { javaParameters.getProgramParametersList().replaceOrAppend(s, "-avm"); hasMode = true; break; } } if (!hasMode) { javaParameters.getProgramParametersList().add("-avm"); } javaParameters.getProgramParametersList().replaceOrAppend("-conc:", "-conc:1"); } //convert any vm passed by intellij options into jtreg -vmoptions for (String vmOption : javaParameters.getVMParametersList().getParameters()) { javaParameters.getProgramParametersList().add("-vmoption:" + vmOption); } javaParameters.getVMParametersList().clearAll(); javaParameters.getProgramParametersList().add("-o:com.oracle.plugin.jtreg.runtime.JTRegTestListener"); javaParameters.getProgramParametersList().add("-od:" + PathUtil.getJarPathForClass(JTRegConfiguration.class)); if (getConfiguration().getRunClass() != null) { javaParameters.getProgramParametersList().add(getConfiguration().getRunClass()); } else { javaParameters.getProgramParametersList().add(getConfiguration().getPackage()); } return javaParameters; } protected void configureRTClasspath(JavaParameters javaParameters) { JTRegService jtregSettings = JTRegService.getInstance(getConfiguration().getProject()); Path jtregLibDir = Path.of(jtregSettings.getJTRegDir(), "lib"); try (DirectoryStream libs = Files.newDirectoryStream(jtregLibDir, "*.jar")) { libs.forEach(lib -> javaParameters.getClassPath().add(lib.toString())); } catch (IOException ex) { throw new IllegalStateException(ex); } } protected void configureRTClasspath(JavaParameters javaParameters, Module module) throws CantRunException { configureRTClasspath(javaParameters); } @Override protected List getNamedParams(String parameters) { return Stream.of(parameters.split(" ")).collect(Collectors.toList()); } @NotNull protected OSProcessHandler createHandler(Executor executor) throws ExecutionException { final OSProcessHandler processHandler = new KillableColoredProcessHandler(createCommandLine()); ProcessTerminatedListener.attach(processHandler); final SearchForTestsTask searchingForTestsTask = createSearchingForTestsTask(); if (searchingForTestsTask != null) { searchingForTestsTask.attachTaskToProcess(processHandler); } return processHandler; } @NotNull @Override public ExecutionResult execute(@NotNull final Executor executor, @NotNull final ProgramRunner runner) throws ExecutionException { try { Method smRunner = JavaTestFrameworkRunnableState.class.getDeclaredMethod("startSMRunner", Executor.class); //compatibility (2016.3 or earlier) return (ExecutionResult)smRunner.invoke(this, executor); } catch (NoSuchMethodException ex) { //newer IDEA (2017.1 or later) return super.execute(executor, runner); } catch (ReflectiveOperationException ex) { throw new IllegalStateException(ex); } } /** * We need this for compatibility with 2016.2 */ protected boolean isSmRunnerUsed() { return true; } @Override public SearchForTestsTask createSearchingForTestsTask() { //todo add here test detection based on myConfiguration.getPackage(), for class configuration - do nothing return null; } @NotNull @Override protected String getForkMode() { return "none"; } @Override protected void passForkMode(String s, File file, JavaParameters javaParameters) throws ExecutionException { } } JTRegConfigurationType.java000066400000000000000000000053431446671450000355730ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import icons.JTRegPluginIcons; import javax.swing.*; /** * The jtreg configuration type. */ public class JTRegConfigurationType implements ConfigurationType { @Override public String getDisplayName() { return "jtreg"; } @Override public String getConfigurationTypeDescription() { return "jtreg"; } @Override public Icon getIcon() { return JTRegPluginIcons.JTREG_ICON_16; } @NotNull @Override public String getId() { return "jtreg"; } @Override public ConfigurationFactory[] getConfigurationFactories() { return new ConfigurationFactory[]{new ConfigurationFactory(this) { @NotNull @Override public RunConfiguration createTemplateConfiguration(@NotNull Project project) { return new JTRegConfiguration(project, this); } @NotNull public String getId() { return "jtreg"; } }}; } @NotNull public static JTRegConfigurationType getInstance() { return ConfigurationTypeUtil.findConfigurationType(JTRegConfigurationType.class); } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/producers/000077500000000000000000000000001446671450000324435ustar00rootroot00000000000000JTRegClassConfigurationProducer.java000066400000000000000000000066071446671450000414350ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/producers/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration.producers; import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.lang.ant.config.AntConfiguration; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Ref; import com.intellij.psi.*; import com.oracle.plugin.jtreg.configuration.JTRegConfiguration; import com.oracle.plugin.jtreg.service.JTRegService; import com.oracle.plugin.jtreg.util.JTRegUtils; import com.oracle.plugin.jtreg.configuration.JTRegConfiguration; import com.oracle.plugin.jtreg.service.JTRegService; /** * This class generates a jtreg configuration from a given file selected in the IDE. */ public class JTRegClassConfigurationProducer extends JTRegConfigurationProducer { @Override protected boolean setupConfigurationFromContext(JTRegConfiguration configuration, ConfigurationContext context, Ref sourceElement) { final Location contextLocation = context.getLocation(); assert contextLocation != null; PsiFile psiFile = contextLocation.getPsiElement().getContainingFile(); if (psiFile == null || !JTRegUtils.isInJTRegRoot(psiFile.getContainingDirectory()) || (!JTRegUtils.isJTRegTestData(psiFile) && !JTRegUtils.isTestNGTestData(psiFile))) return false; setupConfigurationModule(context, configuration); final Module originalModule = configuration.getConfigurationModule().getModule(); configuration.setAlternativeJrePathEnabled(JTRegService.getInstance(configuration.getProject()).isAlternativeJrePathEnabled()); configuration.setAlternativeJrePath(JTRegService.getInstance(configuration.getProject()).getAlternativeJrePath()); configuration.setProgramParameters(JTRegService.getInstance(configuration.getProject()).getJTregOptions()); configuration.setWorkingDirectory(JTRegService.getInstance(configuration.getProject()).getWorkDir()); configuration.setRunClass(psiFile.getVirtualFile().getPath()); configuration.restoreOriginalModule(originalModule); configuration.setName(psiFile.getName()); initBeforeTaskActions(configuration); return true; } } JTRegConfigurationProducer.java000066400000000000000000000113521446671450000404400ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/producers/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration.producers; import com.intellij.execution.BeforeRunTask; import com.intellij.execution.JavaExecutionUtil; import com.intellij.execution.Location; import com.intellij.execution.RunManagerEx; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; import com.intellij.execution.application.ApplicationConfiguration; import com.intellij.execution.junit.JavaRunConfigurationProducerBase; import com.intellij.lang.ant.config.*; import com.intellij.lang.ant.config.impl.AntBeforeRunTask; import com.intellij.lang.ant.config.impl.AntBeforeRunTaskProvider; import com.intellij.psi.PsiFile; import com.oracle.plugin.jtreg.configuration.JTRegConfiguration; import com.oracle.plugin.jtreg.service.JTRegService; import com.oracle.plugin.jtreg.configuration.JTRegConfigurationType; import com.theoryinpractice.testng.configuration.TestNGConfiguration; import java.util.List; import java.util.stream.Collectors; /** * This class serves as a common superclass for both file and folder-based configuration producers. */ public abstract class JTRegConfigurationProducer extends JavaRunConfigurationProducerBase implements Cloneable { public JTRegConfigurationProducer() { super(JTRegConfigurationType.getInstance()); } @Override public boolean isConfigurationFromContext(JTRegConfiguration unitConfiguration, ConfigurationContext context) { final Location contextLocation = context.getLocation(); if (contextLocation == null) { return false; } Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); if (location == null) { return false; } PsiFile testClass = location.getPsiElement().getContainingFile(); final String runClass = unitConfiguration.getRunClass(); return runClass != null && testClass != null && testClass.getVirtualFile() != null && runClass.equals(testClass.getVirtualFile().getPath()); } @Override public boolean shouldReplace(ConfigurationFromContext self, ConfigurationFromContext other) { if (other.getConfiguration() instanceof TestNGConfiguration) { return true; } else if (other.getConfiguration() instanceof ApplicationConfiguration) { return true; } return super.shouldReplace(self, other); } public void initBeforeTaskActions(JTRegConfiguration configuration) { AntConfigurationBase antConfiguration = (AntConfigurationBase)AntConfiguration.getInstance(configuration.getProject()); antConfiguration.ensureInitialized(); List targets = JTRegService.getInstance(configuration.getProject()).getOptTargets(antConfiguration); if (!targets.isEmpty()) { List beforeTasks = targets.stream().map(target -> { AntBeforeRunTask beforeTask = AntBeforeRunTaskProvider.getProvider(antConfiguration.getProject(), AntBeforeRunTaskProvider.ID) .createTask(configuration); beforeTask.setTargetName(target.getName()); beforeTask.setAntFileUrl(target.getModel().getBuildFile().getVirtualFile().getUrl()); beforeTask.setEnabled(true); return beforeTask; }).collect(Collectors.toList()); RunManagerEx.getInstanceEx(configuration.getProject()) .setBeforeRunTasks(configuration, beforeTasks, false); } } } JTRegDirectoryConfigurationProducer.java000066400000000000000000000067471446671450000423410ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/producers/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration.producers; import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.lang.ant.config.AntConfiguration; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.oracle.plugin.jtreg.configuration.JTRegConfiguration; import com.oracle.plugin.jtreg.service.JTRegService; import com.oracle.plugin.jtreg.util.JTRegUtils; /** * This class generates a jtreg configuration from a given folder selected in the IDE. */ public class JTRegDirectoryConfigurationProducer extends JTRegConfigurationProducer { @Override protected boolean setupConfigurationFromContext(JTRegConfiguration configuration, ConfigurationContext context, Ref ref) { final Location contextLocation = context.getLocation(); assert contextLocation != null; final PsiElement element = contextLocation.getPsiElement(); if (!(element instanceof PsiDirectory)) { return false; } final PsiDirectory dir = (PsiDirectory) element; final VirtualFile virtualFile = dir.getVirtualFile(); if (!JTRegUtils.isInJTRegRoot(dir)) { return false; } setupConfigurationModule(context, configuration); final Module originalModule = configuration.getConfigurationModule().getModule(); configuration.setAlternativeJrePathEnabled(JTRegService.getInstance(configuration.getProject()).isAlternativeJrePathEnabled()); configuration.setAlternativeJrePath(JTRegService.getInstance(configuration.getProject()).getAlternativeJrePath()); configuration.setProgramParameters(JTRegService.getInstance(configuration.getProject()).getJTregOptions()); configuration.setWorkingDirectory(JTRegService.getInstance(configuration.getProject()).getWorkDir()); configuration.setPackage(virtualFile.getPath()); configuration.restoreOriginalModule(originalModule); configuration.setName(dir.getName()); initBeforeTaskActions(configuration); return true; } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/ui/000077500000000000000000000000001446671450000310525ustar00rootroot00000000000000JTRegConfigurable.form000066400000000000000000000110461446671450000351560ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/ui
JTRegConfigurable.java000066400000000000000000000130421446671450000351320ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/configuration/ui/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.configuration.ui; import com.intellij.execution.ui.DefaultJreSelector; import com.intellij.execution.ui.JrePathEditor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.io.FileUtil; import com.oracle.plugin.jtreg.configuration.JTRegConfiguration; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * This class models the dialog associated with the (project-wide) jtreg tool settings. */ public class JTRegConfigurable extends SettingsEditor { private JTextField jtregOptions; private TextFieldWithBrowseButton jtregDir; private TextFieldWithBrowseButton workDirectory; private JrePathEditor jrePathEditor; private JPanel mainPane; private JRadioButton fileRadioButton; private JRadioButton directoryRadioButton; private TextFieldWithBrowseButton file; private TextFieldWithBrowseButton directory; Project project; public JTRegConfigurable(final Project project) { this.project = project; ActionListener listener = this::updateComponents; fileRadioButton.addActionListener(listener); directoryRadioButton.addActionListener(listener); } private void createUIComponents() { jrePathEditor = new JrePathEditor(DefaultJreSelector.projectSdk(project)); jtregDir = new TextFieldWithBrowseButton(); jtregDir.addBrowseFolderListener("Directory with Strategies", null, project, FileChooserDescriptorFactory.createSingleFolderDescriptor()); workDirectory = new TextFieldWithBrowseButton(); workDirectory.addBrowseFolderListener("Directory with Strategies", null, project, FileChooserDescriptorFactory.createSingleFolderDescriptor()); file = new TextFieldWithBrowseButton(); file.addBrowseFolderListener("File with Strategies", null, project, FileChooserDescriptorFactory.createSingleFileDescriptor()); directory = new TextFieldWithBrowseButton(); directory.addBrowseFolderListener("Directory with Strategies", null, project, FileChooserDescriptorFactory.createSingleFolderDescriptor()); } private void updateComponents(ActionEvent _unused) { file.setEnabled(fileRadioButton.isSelected()); directory.setEnabled(directoryRadioButton.isSelected()); } @Override public void applyEditorTo(final JTRegConfiguration configuration) { configuration.setAlternativeJrePath(jrePathEditor.getJrePathOrName()); configuration.setAlternativeJrePathEnabled(jrePathEditor.isAlternativeJreSelected()); configuration.setRunClass(fileRadioButton.isSelected() ? FileUtil.toSystemIndependentName(file.getText().trim()) : null); configuration.setPackage(directoryRadioButton.isSelected() ? FileUtil.toSystemIndependentName(directory.getText().trim()) : null); configuration.setProgramParameters(jtregOptions.getText().trim()); configuration.setWorkingDirectory(workDirectory.getText().isEmpty() ? null : FileUtil.toSystemIndependentName(workDirectory.getText().trim())); } @Override public void resetEditorFrom(final JTRegConfiguration configuration) { jrePathEditor.setPathOrName(configuration.getAlternativeJrePath(), configuration.isAlternativeJrePathEnabled()); final String runClass = configuration.getRunClass(); if (runClass != null) { fileRadioButton.setSelected(true); file.setText(FileUtil.toSystemDependentName(runClass)); } else { directoryRadioButton.setSelected(true); final String aPackage = configuration.getPackage(); directory.setText(aPackage != null ? FileUtil.toSystemDependentName(aPackage) : null); } jtregOptions.setText(configuration.getProgramParameters()); String workDir = configuration.getWorkingDirectory(); workDirectory.setText(workDir == null ? "" : FileUtil.toSystemDependentName(workDir)); updateComponents(null); } @NotNull @Override public JComponent createEditor() { return mainPane; } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/executors/000077500000000000000000000000001446671450000276075ustar00rootroot00000000000000JTRegDebuggerRunner.java000066400000000000000000000057051446671450000342140ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/executors/* * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.executors; import com.intellij.debugger.engine.DebuggerUtils; import com.intellij.debugger.impl.GenericDebuggerRunner; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.RemoteConnection; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.ui.RunContentDescriptor; import com.oracle.plugin.jtreg.configuration.JTRegConfiguration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * A custom debugger executor that publicize port choices to external clients. */ public class JTRegDebuggerRunner extends GenericDebuggerRunner { @NotNull public String getRunnerId() { return "JTRegDebuggerRunner"; } public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) { return profile instanceof JTRegConfiguration; } private String address; public String address() { return address; } @Override public void execute(@NotNull ExecutionEnvironment environment) throws ExecutionException { address = DebuggerUtils.getInstance().findAvailableDebugAddress(true); super.execute(environment); } @Nullable @Override protected RunContentDescriptor createContentDescriptor(@NotNull final RunProfileState state, @NotNull final ExecutionEnvironment environment) throws ExecutionException { RemoteConnection connection = new RemoteConnection(true, "127.0.0.1", address, true); return attachVirtualMachine(state, environment, connection, true); } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/runtime/000077500000000000000000000000001446671450000272515ustar00rootroot00000000000000JTRegTestListener.java000066400000000000000000000111541446671450000333600ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/runtime/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.runtime; import com.oracle.plugin.jtreg.util.MapSerializerUtil; import com.sun.javatest.Harness; import com.sun.javatest.Parameters; import com.sun.javatest.Status; import com.sun.javatest.TestResult; import com.oracle.plugin.jtreg.util.MapSerializerUtil; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.stream.Collectors; /** * The jtreg test listener; this class listens for jtreg test events and maps them into events that the IDE * can understand and present back to the user. */ public class JTRegTestListener implements Harness.Observer { @Override public void startingTestRun(Parameters parameters) { System.out.println("##teamcity[testSuiteStarted name=\'jtreg\']"); } @Override public void startingTest(TestResult testResult) { String location = ""; try { location = "locationHint=\'file://" + testResult.getDescription().getFile().getCanonicalPath() + "\'"; } catch (TestResult.Fault | IOException e) { //do nothing (leave location empty) } System.out.println("##teamcity[testStarted name=\'" + escapeName(testResult.getTestName()) + "\' " + location + "]"); } @Override public void finishedTest(TestResult testResult) { final Status status = testResult.getStatus(); final File file = testResult.getFile(); if (status.isFailed() || status.isError()) { if (file.isFile()) { final String output = loadText(file); if (output != null && output.length() > 0) { System.out.println("##teamcity[testStdOut name=\'" + escapeName(testResult.getTestName()) + "\' " + "out=\'" + escapeName(output) + "\']"); } } System.out.println("##teamcity[testFailed name=\'" + escapeName(testResult.getTestName()) + "\' " + "message=\'" + escapeName(status.getReason()) + "\']"); } else if (status.isNotRun()) { System.out.println("##teamcity[testIgnored name=\'" + escapeName(testResult.getTestName()) + "\']"); } String duration = "0"; try { duration = testResult.getProperty("elapsed").split(" ")[0]; } catch (Throwable t) { //do nothing (leave duration unspecified) } System.out.println("##teamcity[testFinished name=\'" + escapeName(testResult.getTestName()) + "\' " + (!duration.equals("0") ? "duration=\'" + duration : "") + "\'" + (!status.isFailed() ? "outputFile=\'" + escapeName(file.getAbsolutePath()) + "\'" : "") + " ]"); } @Override public void stoppingTestRun() { //do nothing } @Override public void finishedTesting() { //do nothing } @Override public void finishedTestRun(boolean b) { System.out.println("##teamcity[testSuiteFinished name=\'jtreg\']"); } @Override public void error(String s) { System.out.println(s); } private static String escapeName(String str) { return MapSerializerUtil.escapeStr(str); } private static String loadText(File file) { try { return Files.readAllLines(file.toPath()).stream().collect(Collectors.joining("\n")); } catch (IOException e) { return "Failed to load test results."; } } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/service/000077500000000000000000000000001446671450000272265ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/service/JTRegService.java000066400000000000000000000163361446671450000323760ustar00rootroot00000000000000/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.service; import com.intellij.lang.ant.config.AntBuildFile; import com.intellij.lang.ant.config.AntBuildTarget; import com.intellij.lang.ant.config.AntConfiguration; import com.intellij.lang.ant.config.AntConfigurationBase; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.oracle.plugin.jtreg.util.JTRegUtils; import org.jdom.Element; import org.jetbrains.annotations.Nullable; import org.jetbrains.java.generate.element.ElementUtils; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; /** * This class acts as a model for the jtreg tool settings ui. Its state can be persisted to the project configuration * file, so that jtreg settings can effectively be shared on a per-project basis. */ @State(name = "JTRegService") public class JTRegService implements PersistentStateComponent { Project project; //state private String jtregOptions = ""; private boolean alternativeJrePathEnabled = false; private String alternativeJrePath = ""; private String jtregDir = ""; private String workDir = ""; private List> optTargets = new ArrayList<>(); public JTRegService(Project project) { this.project = project; } public static JTRegService getInstance(Project project) { return ServiceManager.getService(project, JTRegService.class); } @Nullable @Override public Element getState() { Element jtreg = new Element("jtreg"); Element jtregPath = new Element("path"); jtregPath.addContent(jtregDir); jtreg.addContent(jtregPath); Element jtregWork = new Element("workDir"); jtregWork.addContent(workDir); jtreg.addContent(jtregWork); Element jrePath = new Element("jre"); jrePath.setAttribute("alt", String.valueOf(alternativeJrePathEnabled)); if (alternativeJrePathEnabled) { jrePath.setAttribute("value", alternativeJrePath); } jtreg.addContent(jrePath); Element opts = new Element("options"); opts.addContent(jtregOptions); jtreg.addContent(opts); if (!optTargets.isEmpty()) { Element ant = new Element("ant"); for (Pair antBuildTarget : optTargets) { Element target = new Element("target"); target.setAttribute("file", antBuildTarget.first); target.setAttribute("name", antBuildTarget.second); ant.addContent(target); } jtreg.addContent(ant); } return jtreg; } @Override public void loadState(Element jtreg) { try { jtregDir = Optional.of(jtreg.getChildText("path")).orElse(""); workDir = Optional.of(jtreg.getChildText("workDir")).orElse(""); jtregOptions = Optional.of(jtreg.getChildText("options")).orElse(""); Element jre = jtreg.getChild("jre"); if (jre != null) { alternativeJrePathEnabled = jre.getAttribute("alt").getBooleanValue(); if (alternativeJrePathEnabled) { alternativeJrePath = jre.getAttribute("value").getValue(); } } else { alternativeJrePathEnabled = false; } Element ant = jtreg.getChild("ant"); if (ant != null) { List> targets = new ArrayList<>(); for (Element target : ant.getChildren("target")) { String url = target.getAttribute("file").getValue(); String targetName = target.getAttribute("name").getValue(); targets.add(Pair.create(url, targetName)); } optTargets = targets; } } catch (Throwable ex) { ex.printStackTrace(); } } public String getJTregOptions() { return jtregOptions; } public void setJTRegOptions(String jtregOptions) { this.jtregOptions = jtregOptions; } public boolean isAlternativeJrePathEnabled() { return alternativeJrePathEnabled; } public void setAlternativePathEnabled(boolean enabled) { alternativeJrePathEnabled = enabled; } public String getAlternativeJrePath() { return alternativeJrePath; } public void setAlternativeJrePath(String alternativeJrePath) { this.alternativeJrePath = alternativeJrePath; } public String getJTRegDir() { return jtregDir; } public void setJTRegDir(String jtregDir) { this.jtregDir = jtregDir; } public String getWorkDir() { return workDir; } public void setWorkDir(String workDir) { this.workDir = workDir; } public void setOptTargets(List targets) { optTargets = targets.stream() .filter(target -> target != null) .map(t -> Pair.create(t.getModel().getBuildFile().getVirtualFile().getUrl(), t.getName())) .collect(Collectors.toList()); } public List getOptTargets(AntConfiguration antConfiguration) { return optTargets.stream() .map(p -> findTargetByFileAndName(antConfiguration, p.first, p.second)) .filter(target -> target != null) .collect(Collectors.toList()); } //where private AntBuildTarget findTargetByFileAndName(AntConfiguration antConfiguration, String url, String name) { for (AntBuildFile file : JTRegUtils.getAntBuildFiles(antConfiguration)) { if (file.getVirtualFile().getUrl().equals(url)) { AntBuildTarget foundTarget = file.getModel().findTarget(name); if (foundTarget != null) { return foundTarget; } } } return null; } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/service/ui/000077500000000000000000000000001446671450000276435ustar00rootroot00000000000000JTRegServiceConfigurable.form000066400000000000000000000101371446671450000352700ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/service/ui
JTRegServiceConfigurable.java000066400000000000000000000251061446671450000352500ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/service/ui/* * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.service.ui; import com.intellij.execution.ExecutionBundle; import com.intellij.execution.ui.DefaultJreSelector; import com.intellij.execution.ui.JrePathEditor; import com.intellij.icons.AllIcons; import com.intellij.lang.ant.AntBundle; import com.intellij.lang.ant.config.AntBuildTarget; import com.intellij.lang.ant.config.AntConfiguration; import com.intellij.lang.ant.config.AntConfigurationBase; import com.intellij.lang.ant.config.impl.MetaTarget; import com.intellij.lang.ant.config.impl.TargetChooserDialog; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.ui.AnActionButton; import com.intellij.ui.AnActionButtonRunnable; import com.intellij.ui.AnActionButtonUpdater; import com.intellij.ui.CollectionListModel; import com.intellij.ui.ToolbarDecorator; import com.intellij.ui.components.JBList; import com.oracle.plugin.jtreg.service.JTRegService; import com.oracle.plugin.jtreg.util.JTRegUtils; import icons.AntIcons; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.lang.reflect.Field; /** * This class models the dialog associated with the (project-wide) jtreg tool settings. */ public class JTRegServiceConfigurable implements SearchableConfigurable { private JTextField jtregOptions; private TextFieldWithBrowseButton jtregDir; private TextFieldWithBrowseButton workDir; private JrePathEditor jrePathEditor; private JPanel mainPane; private JPanel myListPane; private CollectionListModel myModel; Project project; public JTRegServiceConfigurable(Project project) { this.project = project; } private JTRegService getJTRegService() { return JTRegService.getInstance(project); } private AntConfigurationBase getAntConfigurationBase() { return AntConfigurationBase.getInstance(project); } @Nullable @Override public JComponent createComponent() { return mainPane; } @NotNull @Override public String getId() { return "jtreg"; } @Nullable @Override public Runnable enableSearch(String s) { return null; } @Nls @Override public String getDisplayName() { return "jtreg Settings"; } @Nullable @Override public String getHelpTopic() { return getId(); } @Override public boolean isModified() { JTRegService service = getJTRegService(); AntConfigurationBase antConfiguration = getAntConfigurationBase(); return !jtregOptions.getText().trim().equals(service.getJTregOptions()) || jrePathEditor.isAlternativeJreSelected() != service.isAlternativeJrePathEnabled() || !jtregDir.getText().trim().equals(service.getJTRegDir()) || !workDir.getText().trim().equals(FileUtil.toSystemDependentName(service.getWorkDir())) || (jrePathEditor.isAlternativeJreSelected() && !Comparing.equal(jrePathEditor.getJrePathOrName(), service.getAlternativeJrePath())) || !myModel.getItems().equals(service.getOptTargets(antConfiguration)); } @Override public void apply() throws ConfigurationException { JTRegService service = getJTRegService(); service.setJTRegOptions(jtregOptions.getText().trim()); service.setAlternativePathEnabled(jrePathEditor.isAlternativeJreSelected()); service.setAlternativeJrePath(jrePathEditor.getJrePathOrName()); service.setJTRegDir(FileUtil.toSystemIndependentName(jtregDir.getText().trim())); service.setWorkDir(workDir.getText().trim()); service.setOptTargets(myModel.getItems()); } @Override public void reset() { JTRegService service = getJTRegService(); AntConfigurationBase antConfiguration = getAntConfigurationBase(); jtregOptions.setText(service.getJTregOptions()); jrePathEditor.setPathOrName(service.getAlternativeJrePath(), service.isAlternativeJrePathEnabled()); jtregDir.setText(FileUtil.toSystemDependentName(service.getJTRegDir())); workDir.setText(FileUtil.toSystemDependentName(service.getWorkDir())); myModel.removeAll(); for (AntBuildTarget target : service.getOptTargets(antConfiguration)) { myModel.add(target); } } @Override public void disposeUIResources() { //do nothing } private void createUIComponents() { jrePathEditor = new JrePathEditor(DefaultJreSelector.projectSdk(project)); jtregDir = new TextFieldWithBrowseButton(); jtregDir.addBrowseFolderListener("Directory with Strategies", null, project, FileChooserDescriptorFactory.createSingleFolderDescriptor()); workDir = new TextFieldWithBrowseButton(); workDir.addBrowseFolderListener("Directory with Strategies", null, project, FileChooserDescriptorFactory.createSingleFolderDescriptor()); myModel = new CollectionListModel<>(); JBList myList = new JBList<>(myModel); myList.getEmptyText().setText(ExecutionBundle.message("before.launch.panel.empty")); myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); myList.setCellRenderer(new MyListCellRenderer()); ToolbarDecorator myDecorator = ToolbarDecorator.createDecorator(myList); if (!SystemInfo.isMac) { myDecorator.setAsUsualTopToolbar(); } AntConfigurationBase antConfiguration = getAntConfigurationBase(); antConfiguration.ensureInitialized(); boolean antConfigEnabled = JTRegUtils.getAntBuildFiles(antConfiguration).length != 0; myDecorator.setEditAction(new AnActionButtonRunnable() { @Override public void run(AnActionButton button) { int index = myList.getSelectedIndex(); if (index == -1) return; AntBuildTarget prevTarget = myModel.getElementAt(index); AntBuildTarget newTarget = pickTarget(prevTarget); if (newTarget != null) { myModel.setElementAt(newTarget, index); } } }); myDecorator.setEditActionUpdater(new AnActionButtonUpdater() { @Override public boolean isEnabled(AnActionEvent e) { int index = myList.getSelectedIndex(); return index != -1; } }); myDecorator.setAddAction(new AnActionButtonRunnable() { @Override public void run(AnActionButton button) { AntBuildTarget target = pickTarget(null); myModel.add(target); } }); myDecorator.setAddActionUpdater(new AnActionButtonUpdater() { @Override public boolean isEnabled(AnActionEvent e) { return antConfigEnabled; } }); myListPane = myDecorator.createPanel(); } AntBuildTarget pickTarget(AntBuildTarget prev) { TargetChooserDialog dlg = new TargetChooserDialog(project, prev); if (dlg.showAndGet()) { return dlg.getSelectedTarget(); } else { return null; } } static Icon TARGET; static { //some reflective goop to retain compatibility with earlier versions Class[] iconClasses = { AntIcons.class, AllIcons.Nodes.class }; Field targetIcon; for (Class iconClass : iconClasses) { try { targetIcon = iconClass.getDeclaredField("Target"); TARGET = (Icon) targetIcon.get(null); break; } catch (ReflectiveOperationException ex) { // try again } } if (TARGET == null) { throw new ExceptionInInitializerError("Cannot find Target icon!"); } } private class MyListCellRenderer extends JBList.StripedListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value instanceof AntBuildTarget) { AntBuildTarget target = (AntBuildTarget) value; setIcon(getTaskIcon(target)); setText(getDescription(target)); } return this; } public Icon getTaskIcon(AntBuildTarget antTarget) { return antTarget instanceof MetaTarget ? AntIcons.MetaTarget : TARGET; } public String getDescription(AntBuildTarget antTarget) { String targetName = antTarget.getName(); return targetName == null ? AntBundle.message("ant.target.before.run.description.empty", new Object[0]) : AntBundle.message("ant.target.before.run.description", new Object[]{targetName != null ? targetName : ""}); } } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/templates/000077500000000000000000000000001446671450000275645ustar00rootroot00000000000000JTRegTemplateProvider.java000066400000000000000000000032721446671450000345360ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/templates/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.templates; import com.intellij.codeInsight.template.impl.DefaultLiveTemplatesProvider; import org.jetbrains.annotations.Nullable; /** * Provider class for jtreg active templates */ public class JTRegTemplateProvider implements DefaultLiveTemplatesProvider { @Override public String[] getDefaultLiveTemplateFiles() { return new String[]{"liveTemplates/jtreg"}; } @Nullable @Override public String[] getHiddenLiveTemplateFiles() { return new String[0]; } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/util/000077500000000000000000000000001446671450000265435ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/util/JTRegTagParser.java000066400000000000000000000076121446671450000322000ustar00rootroot00000000000000/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.util; import com.intellij.psi.PsiComment; import com.intellij.psi.tree.java.IJavaElementType; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Simple parser for jtreg tags. */ public class JTRegTagParser { private static final Pattern TAG_PATTERN = Pattern.compile("@([a-zA-Z]+)(\\s+|$)"); public static Result parseTags(PsiComment header) { String text = header.getText(); List tags = new ArrayList<>(); int start = -1; int end = -1; int tagStart = -1; int tagEnd = -1; text = text.substring(0, text.length() - 2); String tagName = null; StringBuilder tagText = new StringBuilder(); int prefix = header.getTokenType() instanceof IJavaElementType ? 2 : 3; String[] lines = text.substring(prefix).split("\n"); int pos = header.getTextOffset() + prefix; for (String line : lines) { if (line.replaceAll("[*\\s]+", "").isEmpty()) { pos += line.length() + 1; continue; } Matcher m = TAG_PATTERN.matcher(line); if (m.find()) { if (tagName != null) { tags.add(new Tag(start, pos, tagStart, tagEnd, tagName, tagText.toString())); tagText.delete(0, tagText.length()); } tagName = m.group(1); start = pos; tagStart = pos + m.start(); tagEnd = pos + m.end(1); tagText.append(line.substring(m.end())); } else if (tagName != null) { int asterisk = line.indexOf('*'); tagText.append(line.substring(asterisk + 1)); } pos += line.length() + 1; if (tagName != null) { end = pos; } } if (tagName != null) { tags.add(new Tag(start, end, tagStart, tagEnd, tagName, tagText.toString())); } Map> result = new HashMap<>(); for (Tag tag : tags) { List innerTags = result.get(tag.getName()); if (innerTags == null) { result.put(tag.getName(), innerTags = new ArrayList<>()); } innerTags.add(tag); } return new Result(result); } /** * Class holding parser results. */ public static final class Result { private final Map> name2Tag; public Result(Map> name2Tag) { this.name2Tag = name2Tag; } public Map> getName2Tag() { return name2Tag; } } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/util/JTRegUtils.java000066400000000000000000000350671446671450000314150ustar00rootroot00000000000000/* * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.util; import com.intellij.lang.ant.config.AntBuildFile; import com.intellij.lang.ant.config.AntConfiguration; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.openapi.diagnostic.Logger; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.util.*; import java.util.stream.Stream; /** * This class contains several helper routines that are used by the jtreg plugin. */ public class JTRegUtils { private static final Logger LOG = Logger.getInstance(JTRegUtils.class); /** * Are we inside a jtreg test root? */ public static boolean isInJTRegRoot(PsiDirectory dir) { return dir != null ? isInJTRegRoot(dir.getVirtualFile()) : false; } /** * Are we inside a jtreg test root? */ public static boolean isInJTRegRoot(VirtualFile file) { return findJTRegRoot(file) != null; } /** * Given a file, searches up the vfs hierarchy for the closest parent directory containing the * associated test suite config (TEST.ROOT). * @param file the file * @return file referring to the test root directory or null if not found */ public static VirtualFile findJTRegRoot(VirtualFile file) { VirtualFile test_root_file = findRootFile(file); if (test_root_file != null) { return file.getParent(); } return null; } /** * Given a file, searches up the vfs hierarchy for the associated test suite * configuration (a TEST.ROOT file in a parent directory). * @param file the virtual file * @return virtual file referring to TEST.ROOT or null if not found. */ private static VirtualFile findRootFile(VirtualFile file) { while (file != null) { VirtualFile rootFile = file.findChild("TEST.ROOT"); if (rootFile != null) { return rootFile; } file = file.getParent(); } return null; } /** * Parse a test suite configuration. * @param rootFile a file representing a test suite configuration (TEST.ROOT) * @return a Properties object containing the parsed TEST.ROOT */ private static Properties parseTestSuiteConfig(VirtualFile rootFile) { Properties prop = null; try { prop = new Properties(); InputStream input = rootFile.getInputStream(); prop.load(input); } catch (IOException e) { e.printStackTrace(); } return prop; } // cache parsed test configurations. private static HashMap _cachedTestConfigs = new HashMap<>(); /** * Parse a test suite configuration. * @param rootFile a file representing a test suite configuration (TEST.ROOT) * @return a Properties object containing the parsed TEST.ROOT */ private static Properties testSuiteConfigForRootFile(VirtualFile rootFile) { Properties p = _cachedTestConfigs.get(rootFile); if (p == null) { p = parseTestSuiteConfig(rootFile); if (p != null) { LOG.debug("Parsing test suite config " + rootFile + "..."); _cachedTestConfigs.put(rootFile, p); LOG.debug("Content: " + p); } } else { LOG.debug("Returning cached test suite config for " + rootFile); } return p; } /** * Is the given file a jtreg test? */ public static boolean isJTRegTestData(Project project, VirtualFile file) { return isJTRegTestData(PsiUtil.getPsiFile(project, file)); } /** * Is the given file a jtreg test? */ public static boolean isJTRegTestData(PsiFile file) { if (file instanceof PsiJavaFile) { return PsiTreeUtil.findChildrenOfType(file, PsiComment.class).stream() .anyMatch(JTRegUtils::hasTestTag); } return false; } /** * Retrieve the source roots associated with a jtreg test. */ public static List getTestRoots(Project project, VirtualFile file) { return isJTRegTestData(project, file) ? getJTRegRoots(PsiUtil.getPsiFile(project, file)) : getTestNgRoots(PsiUtil.getPsiFile(project, file)); } /** * Retrieve the source roots associated with a testng test. */ public static List getTestNgRoots(PsiFile file) { VirtualFile pkgRoot = getPackageRoot(file); return pkgRoot == null ? Collections.singletonList(file.getVirtualFile().getParent()) : Collections.singletonList(pkgRoot); } /** * Infer the source root given a package name. */ public static VirtualFile getPackageRoot(PsiFile file) { if (file instanceof PsiJavaFile) { Optional optPackageDecl = PsiTreeUtil.findChildrenOfType(file, PsiPackageStatement.class).stream().findFirst(); if (optPackageDecl.isPresent()) { String[] pkgs = optPackageDecl.get().getPackageName().split("\\."); VirtualFile root = file.getVirtualFile(); for (int i = pkgs.length - 1 ; i >= 0 ; i--) { root = root.getParent(); if (!root.getName().equals(pkgs[i])) { return null; } } return root.getParent(); } } return null; } /** * Retrieve the source roots associated with jtreg test with header. */ public static List getJTRegRoots(PsiFile file) { LOG.debug("JTregRoots for " + file + "..."); if (file instanceof PsiJavaFile) { Optional optHeader = PsiTreeUtil.findChildrenOfType(file, PsiComment.class).stream() .filter(JTRegUtils::hasTestTag).findFirst(); if (optHeader.isPresent()) { PsiComment header = getTestHeader(optHeader.get()); List roots = new ArrayList<>(); VirtualFile pkgRoot = getPackageRoot(file); if (pkgRoot != null) { LOG.debug("Package root: " + pkgRoot.getParent()); roots.add(pkgRoot); } else { LOG.debug("Package root not found, adding immediate parent."); roots.add(file.getVirtualFile().getParent()); } JTRegTagParser.Result result = JTRegTagParser.parseTags(header); //watch out for library tags List libTags = result.getName2Tag().get("library"); if (libTags != null) { for (Tag libTag : libTags) { String libVal = libTag.getValue(); for (String lib : libVal.split(" ")) { VirtualFile libFile = null; LOG.debug("Processing @library \"" + lib + "\"..."); if (lib.startsWith("/")) { //absolute // Excerpt from jtreg tags specification: // "If an argument begins with '/', it will first be evaluated relative to the root // directory of the test suite. It is an error if the resulting path is outside the // test suite." VirtualFile testRootFile = findRootFile(file.getVirtualFile()); if (testRootFile != null) { VirtualFile jtRegRoot = testRootFile.getParent(); libFile = jtRegRoot.findFileByRelativePath(lib.substring(1)); if (libFile != null) { LOG.debug("Found : " + libFile + " relative to test suite root."); } else { // "If the result does not identify an existing directory, it will be further // evaluated against each entry of a search path in turn, until an existing // directory is found. The search path is specified by the external.lib.roots // entry in the test suite configuration files." LOG.debug("Nothing found relative to test suite root."); Properties testSuiteConfig = testSuiteConfigForRootFile(testRootFile); if (testSuiteConfig != null) { String s = testSuiteConfig.getProperty("external.lib.roots"); if (s != null) { s = s.trim(); LOG.debug("external.lib.roots = \"" + s + "\""); // Note: jtreg tag specification for "external.lib.roots" talks about a // search path with separate segments; however, all usages I see in our // configurations are single paths, so to keep matters simple I treat it // as a single path. // The "external.lib.roots" is relative to the jtreg root VirtualFile searchPath = jtRegRoot.findFileByRelativePath(s); if (searchPath != null) { libFile = searchPath.findFileByRelativePath(lib); } } } } } } else { //relative libFile = file.getParent().getVirtualFile().findFileByRelativePath(lib); } if (libFile != null) { LOG.debug("@library \"" + lib + "\" resolves to " + libFile + "."); if (libFile.exists()) { LOG.debug("which exists."); roots.add(libFile); } else { LOG.debug("which does not exists."); } } } } } return roots; } } return Collections.emptyList(); } /** * Is the given file a testng test? */ public static boolean isTestNGTestData(Project project, VirtualFile file) { return isTestNGTestData(PsiUtil.getPsiFile(project, file)); } /** * Is the given file a testng test? */ public static boolean isTestNGTestData(PsiFile file) { // if (file instanceof PsiJavaFile) { // for (PsiClass psiClass : ((PsiJavaFile) file).getClasses()) { // if (TestNGUtil.isTestNGClass(psiClass)) return true; // } // } //would be nice to rely on TestNG to do this (see above) but doesn't work as the file is not //under test root (yet!) so we use an heuristics instead (look for 'import org.testng') if (file instanceof PsiJavaFile) { return Stream.of(((PsiJavaFile) file).getImportList().getImportStatements()) .anyMatch(JTRegUtils::isTestNGImport); } return false; } /** * Is the given file a testng test? */ public static boolean isTestNGImport(PsiImportStatement importStatement) { String qualifiedName = importStatement.getQualifiedName(); //qualifiedName can be null if the import statement hasn't been fully written yet return qualifiedName != null && qualifiedName.startsWith("org.testng"); } /** * Does the given file contain a jtreg header? */ private static boolean hasTestTag(PsiElement e) { return getTestHeader(e) != null; } /** * Does the given file contain a jtreg header? */ private static PsiComment getTestHeader(PsiElement e) { while (e instanceof PsiComment) { PsiComment comment = (PsiComment) e; if (comment.getText().contains("@test")) { return comment; } e = PsiTreeUtil.skipSiblingsForward(e, PsiWhiteSpace.class); } return null; } /** * Workaround incompatible signature change from 2016.2 to 2016.3 */ public static AntBuildFile[] getAntBuildFiles(AntConfiguration antConfiguration) { try { Method m = antConfiguration.getClass().getDeclaredMethod("getBuildFiles"); return (AntBuildFile[])m.invoke(antConfiguration); } catch (ReflectiveOperationException ex) { throw new IllegalStateException(ex); } } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/util/MapSerializerUtil.java000066400000000000000000000065501446671450000330210ustar00rootroot00000000000000/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.util; /** * Misc utility methods for formatting test results messages back onto the IDE console. */ public class MapSerializerUtil { static final char ESC_CHAR = '|'; static char escape(final char c) { switch (c) { case '\n': return 'n'; case '\r': return 'r'; case '\u0085': return 'x'; // next-line character case '\u2028': return 'l'; // line-separator character case '\u2029': return 'p'; // paragraph-separator character case '|': return '|'; case '\'': return '\''; case '[': return '['; case ']': return ']'; default: return 0; } } /** * Escapes characters specified by provider with '\' and specified character. * * @param str initial string * @return escaped string. */ public static String escapeStr(final String str) { if (str == null) return null; int finalCount = calcFinalEscapedStringCount(str); if (str.length() == finalCount) return str; char[] resultChars = new char[finalCount]; int resultPos = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); final char escaped = escape(c); if (escaped != 0) { resultChars[resultPos++] = ESC_CHAR; resultChars[resultPos++] = escaped; } else { resultChars[resultPos++] = c; } } if (resultPos != finalCount) { throw new RuntimeException("Incorrect escaping for '" + str + "'"); } return new String(resultChars); } private static int calcFinalEscapedStringCount(final String name) { int result = 0; for (int i = 0; i < name.length(); i++) { char c = name.charAt(i); if (escape(c) != 0) { result += 2; } else { result += 1; } } return result; } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/com/oracle/plugin/jtreg/util/Tag.java000066400000000000000000000043131446671450000301220ustar00rootroot00000000000000/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.oracle.plugin.jtreg.util; /** * This class models a jtreg test tag. For a full specification of jtreg tags please refer to the following * document: {@link "http://openjdk.java.net/jtreg/tag-spec.html"}. */ public class Tag { private final int start; private final int end; private final int tagStart; private final int tagEnd; private final String name; private final String value; public Tag(int start, int end, int tagStart, int tagEnd, String name, String value) { this.start = start; this.end = end; this.tagStart = tagStart; this.tagEnd = tagEnd; this.name = name; this.value = value; } public int getStart() { return start; } public int getEnd() { return end; } public int getTagStart() { return tagStart; } public int getTagEnd() { return tagEnd; } public String getName() { return name; } public String getValue() { return value; } } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/icons/000077500000000000000000000000001446671450000222455ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/java/icons/JTRegPluginIcons.java000066400000000000000000000027601446671450000262430ustar00rootroot00000000000000/* * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package icons; import com.intellij.openapi.util.IconLoader; import javax.swing.*; public interface JTRegPluginIcons { Icon JTREG_ICON_32 = IconLoader.findIcon("/com/oracle/plugin/jtreg/icons/JavaCup32.png"); Icon JTREG_ICON_16 = IconLoader.findIcon("/com/oracle/plugin/jtreg/icons/JavaCup16.png"); } jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/000077500000000000000000000000001446671450000222235ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/META-INF/000077500000000000000000000000001446671450000233635ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/META-INF/plugin.xml000066400000000000000000000051501446671450000254040ustar00rootroot00000000000000 jtreg jtreg Test Support jtreg framework. ]]> AntSupport TestNG-J com.oracle.plugin.jtreg.components.JTRegApplicationComponent jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/com/000077500000000000000000000000001446671450000230015ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/com/oracle/000077500000000000000000000000001446671450000242465ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/com/oracle/plugin/000077500000000000000000000000001446671450000255445ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/com/oracle/plugin/jtreg/000077500000000000000000000000001446671450000266575ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/com/oracle/plugin/jtreg/icons/000077500000000000000000000000001446671450000277725ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/com/oracle/plugin/jtreg/icons/JavaCup16.png000066400000000000000000000066701446671450000322110ustar00rootroot00000000000000‰PNG  IHDRóÿa pHYs  šœ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-ÛgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÓIDATxÚ¤“Oh\UÆ3¹ÃÐŽt’NgRlÓŒ'’†f¤ÚT‰âBL¡P YXR‚.íJèBWºpRP«Í¢ )¤($Ñn¤Z"$4“4:Ƽ”šyóÇÌ›7÷Þwßë¢íh6‚xàlÎwÎÇùÎá_}ómàå¿ÅpExžwaà™'³éCí„Ãá]ÓÓÓ¤Óir¹---ͺïû¬ûÙŸW¶ZëìÁDœh4J(ÚE0??O©\æâ[§yåÌX“$&âhý{6¬´&‚ À÷ýfV*VÖ×q >þâ*Ëù|{ܯ´&,•ƳkØ÷}f®_ç)Çáòž=¼1ñáû(¥š¸1©4aù¨hŒÁCµRaaao¾¼L¯1d<7êu"Å¿¸³¶†Öš|ßG*…RbŒÁq®Í|Ç/+8÷ïræÜyf&'¹´´DL>˜›ãÆíÛTÊeòù<###H) K©0ÆpåóÏXºçñæùwz•öd‚Z"Á'Å"‹}}îí¥=™djj ˲J ÑP7X^Îc®aݼÊÉÁ牤r s¬¯ññqZ÷àÇŸnЕyš±±1J"Râû>™®.ŠöŸT[ŠŠc±½œ"™LÒÝÝ À¾'öÒyü$û´âyJebb’¹o¿&ѺÛ¶q]­5¶m±XŒÔ¡N²ƒ§þ–ðøˆ¶mS(˜åÎÚ:Õj×u‰Çãttt000@[[ímœ}ù8µZ )%B*E$¡T*±½½Íææ&[ÖÜÛÚduuÇqH¥RX–E&“áõ\‘H„h4úèJ#„ ¿¿7š ?Ê‘èaj•Ï}éÖ©ïTùá×e~+”ùô£÷B „@*PZoÜZÌyé…,'zÒœèIÃkÿnÌP(Ä­Åç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-ÛgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFvIDATxÚ¼—[låÇsٙݽÙß³‰‡„$@B“Fd“(¡ EEUUzM¡Éu]Nþå|ØÄ«ø"Ng]÷ÝÝ ¹®Ëo^}ê™Ú ÆhX}Óòïã³SLÏçHåJdJöãÇní”~ýJw<ì÷œÙØ\Ëukc«&ëî~ÉÉIŽû*~¿ÿsr51ÎàdŠLÑ:  áì¯1tÚ[Ö²TŽÕœþþ‹üáŘ˜ç÷ÞO0\õ·í-kIe ¤ræ~ÙqD¼¡&€ë²j˜¦ÉÌì ¶móÞÙwyòÉ$“ÉÏÅÑPÀqD\‰7FC¸®»jÌÌÌ044H©T²,.]êç‰'c||lÕ±†f„pâ²ÇuVѱ®^½‚뺋EYfdtˆ_G:^-²ÇqpwU˜šš¢§ç(2e×ÅoÛ´”Jh–…íñpºóÞ~ë „ølÎÿIþ‹Ñ{ñCIâUå·µµœ ‡9ì©TpU•WÞxÁÁU) ŠjŽã|æø,,¤xë·X(8(Ë<Ðjà÷Óª(üTÊÅ"ï$Æx÷oÄbëPUõ?ò-*`ÛÕ>üNwÁ[©ÐbYTl«TÓ„r™ðe!P²Yþüú«LOOÿW>Û¶QíjÈòJ\×eaa™™)²Ù cccœ>ý6–m¡ A¢\¦[ÓÈͦ‰.ËÈå2Á-[¶àÔדHŒÑÔ´hë•J…DbŒ††F #°XÛË ,Ó4yéÅßÑÕõW¦''IÎ¥ˆD×pDZ£Ü{ÿ}œyóMΞ<‰nŽ¢ëÒ¢i<& Ò›6ñÀómÏNzž‹?bË–m$ã<óÌS9rŒC‡Ž Ë2¶-Pmaã8’äà8‚žž÷yùå?âFÖqÝáû¸®4‡^˜ebt·ïàÖ]»å]çl2I^U‰é:>EáÃd’‡ÑÜÞ@GG;?~‚GyG£·÷n¸aŽ#ª ØŸ(`VLž{öWœëíeßÝÛ~¶¤âÕ…‘^ÂÑ$Qaxhˆl6‹2<;Kv~ž¨®S(q ƒo=Jm]›6m¶+\øûyöîÝG $ Ḁë®T “IÓsî,zh þp©œ§N';&34HÀ^¿±l2ÑúzÒé4f¡À`±HÅuùúw²7Gª–2‰ÐÖÖÆùž÷B  R.—ðz}K ,NÁåË—¥&<Ç‹ÝÏM7îäGÇ¿ƒå)°ú-Aö´bY6à ÖÒB>Ÿ§T( I×oÞÌñ{iå]bݺu<ûìsœ=û.Š"Ó×wT*EccSu ª%˜™™FVešêCäSI^õ%úúº¹yk+õ!pí.$YErmjkkÙ¶m¡PˆR©D}}={öìa÷îÝx<žlØÐNCC½½‡Ã8ŽK¥R©Žá§JPWWG¡PDQ5¶oí`r¡Ho_?£‰ ¾²ÿK¬ßj È È"‘>ŸX,†,ËD£Q:::ˆD"ט®ë|ÿøÉå²LLŒãõzñz½¸®³² 7nì ±±‰‘ñY’ ~Âu1¾±+N´6ŠY.áàA–@’$|>†a ( º®‰DˆF£(ŠrM–eb~ü“yôÑGˆ8Œa?­À¢…Ãîþæ÷xúéŸsøè]9r”º5õaóÚ«£y0M]×QEQðz½†A ¸FúOÚððÞÎÏNü’¦æTUÅqœ%#ZlB$‰C‡ogó–­´®oC®f“ÍeÉæ2XV-Åb!º®WÝSFÓ4LÓ$—Ëáº.^¯I’–0 IZ¼o´ml¯Þ=M϶íÅe lª²~]+år ³l"+2ù\–B!O.—Ãq<š¦¡ë:>Ÿr¹L©T"ŸÏƒ†ÏçC’$"‘º¦#Kî¿-Kj!Es¹R©D2™¤R© Iº®£ëúr/ÔÔÔÐØØH,öm$IÂu/Žû‰ô×(°¸ùRLN$˜ŸŸ#™œajj’L&M.—꘬miÂ0 òù<ÉdÓ4—{Ç£zðú¼„C!b±ÅbMÓ–?7ŸBqÍ”ØB ´îØßÐR×êAÁ6’$‰Fëhhh$ ’L&F×uJ¥©TŠt:ƒªzÃ(²B:f.™¤PuÆ`0ˆ¢(tw¿O$RGmM-¶e!K2’$1>3NOÿ@§*„Óyyd2ß¹“ÚhÇq‘e I’±m‹L&Ö­7ÒÓÓÍü\EQ¨«kbÆZÛ6ÒÒ¼˶¸òÏKôö^```€r¹L>Ÿ§«« Ç‘ùÚ]7aš&²,£( ²,syd!œNÕqD×¹¾~Ö5®¡}mÛ ‰T†¦ûXS×ÀÍ·ìÁ4Ë,Ž­ƒ$Éèº]×q]‡;w±ï¶ƒ\½r™‘áA2Ù"ë[9xðõ ‹ûa)±+ãÜëëÇqD—äº.û¾û`<ÐÎ\¿¾™ÝÛ7³¶>ö…Ï»ÿT'À¿«‡êúQIÌIEND®B`‚jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/liveTemplates/000077500000000000000000000000001446671450000250415ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/plugins/idea/src/main/resources/liveTemplates/jtreg.xml000066400000000000000000000036111446671450000266770ustar00rootroot00000000000000 jtreg-jtreg-7.3.1-1/src/000077500000000000000000000000001446671450000147025ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/000077500000000000000000000000001446671450000160045ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/bin/000077500000000000000000000000001446671450000165545ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/bin/jtdiff.sh000066400000000000000000000102421446671450000203550ustar00rootroot00000000000000#!/bin/sh # # Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # Usage: # jtdiff ...args.... # # jtdiff requires a version of Java equivalent to JDK 1.5.0 or higher. # $JT_HOME can be used to specify the jtdiff installation directory # (e.g. /usr/local/java/jct-tools/3.2.2) # # $JT_JAVA is used to specify the version of java to use when running JavaTest # (e.g. /usr/local/java/jdk1.5.0/solaris-sparc/bin/java) # # jtdiff also provides an Ant task for direct invocation from Ant. # Determine jtdiff/JavaTest installation directory if [ -n "$JT_HOME" ]; then if [ ! -r $JT_HOME/lib/jtreg.jar ];then echo "Invalid JT_HOME=$JT_HOME. Cannot find or read $JT_HOME/lib/jtreg.jar" exit 1; fi else # Deduce where script is installed # - should work on most derivatives of Bourne shell, like ash, bash, ksh, # sh, zsh, etc, including on Windows, MKS (ksh) and Cygwin (ash or bash) if type -p type 1>/dev/null 2>&1 && test -z "`type -p type`" ; then myname=`type -p "$0"` elif type type 1>/dev/null 2>&1 ; then myname=`type "$0" | sed -e 's/^.* is a tracked alias for //' -e 's/^.* is //'` elif whence whence 1>/dev/null 2>&1 ; then myname=`whence "$0"` fi mydir=`dirname "$myname"` p=`cd "$mydir" ; pwd` while [ -n "$p" -a "$p" != "/" ]; do if [ -r "$p"/lib/jtreg.jar ]; then JT_HOME="$p" ; break; fi p=`dirname "$p"` done if [ -z "$JT_HOME" ]; then echo "Cannot determine JT_HOME; please set it explicitly"; exit 1 fi fi # Normalize JT_HOME if using Cygwin case "`uname -s`" in CYGWIN* ) cygwin=1 ; JT_HOME=`cygpath -a -m "$JT_HOME"` ;; esac # Separate out -J* options for the JVM # Unset IFS and use newline as arg separator to preserve spaces in args DUALCASE=1 # for MKS: make case statement case-sensitive (6709498) saveIFS="$IFS" nl=' ' for i in "$@" ; do IFS= if [ -n "$cygwin" ]; then i=`echo $i | sed -e 's|/cygdrive/\([A-Za-z]\)/|\1:/|'` ; fi case $i in -J* ) javaOpts=$javaOpts$nl`echo $i | sed -e 's/^-J//'` ;; * ) jtdiffOpts=$jtdiffOpts$nl$i ;; esac IFS="$saveIFS" done unset DUALCASE # Determine java for jtdiff, from JT_JAVA, JAVA_HOME, java if [ -n "$JT_JAVA" ]; then if [ -d "$JT_JAVA" ]; then JT_JAVA="$JT_JAVA/bin/java" fi elif [ -n "$JAVA_HOME" ]; then JT_JAVA="$JAVA_HOME/bin/java" else JT_JAVA=java fi # Verify java version (1.)5 or newer used to run jtdiff version=`"$JT_JAVA" -classpath "${JT_HOME}/lib/jtreg.jar" com.sun.javatest.regtest.agent.GetSystemProperty java.version 2>&1 | grep 'java.version=' | sed -e 's/^.*=//' -e 's/^1\.//' -e 's/\([1-9][0-9]*\).*/\1/'` if [ -z "$version" ]; then echo "Cannot determine version of java to run jtdiff" exit 1; elif [ "$version" -lt 5 ]; then echo "java version 5 or later is required to run jtdiff" exit 1; fi # And finally ... IFS=$nl "${JT_JAVA:-${JAVA_HOME:+$JAVA_HOME/bin/}java}" \ $javaOpts \ -Dprogram=`basename "$0"` \ -cp "${JT_HOME}/lib/jtreg.jar" \ com.sun.javatest.diff.Main \ $jtdiffOpts jtreg-jtreg-7.3.1-1/src/share/bin/jtreg.sh000066400000000000000000000142731446671450000202320ustar00rootroot00000000000000#!/bin/sh # # Copyright (c) 1998, 2022, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # Usage: # jtreg ...args.... # Run the application via the regression test-suite front end # with the given arguments. # The Java runtime used to run jtreg is found as follows: # - $JTREG_JAVA is used, if it is set # - Otherwise, $JAVA_HOME/bin/java is used if $JAVA_HOME is set # (that is, similar to JDK.) # - Otherwise, the value of the -jdk option is used if found # - Otherwise, "java" is used # # jtreg requires a version of Java equivalent to JDK 1.8.0 or higher. # $JTREG_HOME can be used to specify the jtreg installation directory # (e.g. /usr/local/jtreg/5.0) # # $JTREG_JAVA is used to specify the version of java to use when running jtreg # (e.g. /usr/local/java/jdk1.8.0/bin/java) # # You can also run the jar file directly, as in # java -jar /lib/jtreg.jar ...args... # # jtreg also provides Ant tasks; see the documentation for details. # Implementation notes for Windows: # Cygwin: # Detected with `uname -s` (CYGWIN*) # Windows drives are mounted with /cygdrive/LETTER # Windows Subsystem for Linux (WSL): # Detected with `uname -s` (Linux) and /proc/version contains "Microsoft" # Windows drives are mounted with /mnt/LETTER # Windows binaries need an explicit .exe suffix. # # Values are evaluated according to whether they are used in the context of the # shell, or in the context of the JDK under test. # JTREG_JAVA is evaluated for use in the shell, to run java # JTREG_HOME is evaluated as a JDK arg, for use in -classpath or -jar args # Other command line are updated to be JDK args for jtreg. case "`uname -s`" in CYGWIN* ) cygwin=1 ;; Linux ) if grep -qi Microsoft /proc/version ; then wsl=1 ; fi ;; esac # Determine jtreg installation directory JTREG_HOME=${JTREG_HOME:-$JT_HOME} # allow for old version of name if [ -n "$JTREG_HOME" ]; then if [ ! -r $JTREG_HOME/lib/jtreg.jar ];then echo "Invalid JTREG_HOME=$JTREG_HOME. Cannot find or read $JTREG_HOME/lib/jtreg.jar" exit 1; fi else # Deduce where script is installed # - should work on most derivatives of Bourne shell, like ash, bash, ksh, # sh, zsh, etc, including on Windows, MKS (ksh), Cygwin (ash or bash) # and Windows Subsystem for Linux (WSL) if type -p type 1>/dev/null 2>&1 && test -z "`type -p type`" ; then myname=`type -p "$0"` elif type type 1>/dev/null 2>&1 ; then myname=`type "$0" | sed -e 's/^.* is a tracked alias for //' -e 's/^.* is //'` elif whence whence 1>/dev/null 2>&1 ; then myname=`whence "$0"` fi mydir=`dirname "$myname"` p=`cd "$mydir" ; pwd` while [ -n "$p" -a "$p" != "/" ]; do if [ -r "$p"/lib/jtreg.jar ]; then JTREG_HOME="$p" ; break; fi p=`dirname "$p"` done if [ -z "$JTREG_HOME" ]; then echo "Cannot determine JTREG_HOME; please set it explicitly"; exit 1 fi fi # Look for -jdk option as possible default to run jtreg # Unset IFS and use newline as arg separator to preserve spaces in args DUALCASE=1 # for MKS: make case statement case-sensitive (6709498) saveIFS="$IFS" nl=' ' for i in "$@" ; do IFS= case $i in -jdk:* ) jdk="`echo $i | sed -e 's/^-jdk://'`" ;; esac IFS="$saveIFS" done unset DUALCASE # Determine java for jtreg, from JTREG_JAVA, JAVA_HOME, -jdk, java JTREG_JAVA=${JTREG_JAVA:-$JT_JAVA} # allow for old version of name if [ -n "$JTREG_JAVA" ]; then if [ -d "$JTREG_JAVA" ]; then JTREG_JAVA="$JTREG_JAVA/bin/java" fi elif [ -n "$JAVA_HOME" ]; then JTREG_JAVA="$JAVA_HOME/bin/java" elif [ -n "$jdk" ]; then JTREG_JAVA="$jdk/bin/java" else JTREG_JAVA=java fi # Fixup JTREG_JAVA, JTREG_HOME as needed, if using Cygwin or WSL if [ -n "$cygwin" ]; then JTREG_HOME=`cygpath -a -m "$JTREG_HOME"` driveDir=cygdrive elif [ -n "$wsl" -a -x "$JTREG_JAVA".exe ]; then JTREG_JAVA="$JTREG_JAVA".exe JTREG_HOME=`wslpath -a -m "$JTREG_HOME"` driveDir=mnt fi # Verify java version 11 or newer used to run jtreg version=`"$JTREG_JAVA" -classpath "${JTREG_HOME}/lib/jtreg.jar" com.sun.javatest.regtest.agent.GetSystemProperty java.version 2>&1 | grep 'java.version=' | sed -e 's/^.*=//' -e 's/^1\.//' -e 's/\([1-9][0-9]*\).*/\1/'` if [ -z "$version" ]; then echo "Cannot determine version of java to run jtreg" exit 1; elif [ "$version" -lt 11 ]; then echo "java version 11 or later is required to run jtreg" exit 1; fi # Separate out -J* options for the JVM # Unset IFS and use newline as arg separator to preserve spaces in arg DUALCASE=1 # for MKS: make case statement case-sensitive (6709498) saveIFS="$IFS" nl=' ' for i in "$@" ; do IFS= if [ -n "$driveDir" ]; then i=`echo $i | sed -e 's|/'$driveDir'/\([A-Za-z]\)/|\1:/|'` ; fi case $i in -J* ) javaOpts=$javaOpts$nl`echo $i | sed -e 's/^-J//'` ;; * ) jtregOpts=$jtregOpts$nl$i ;; esac IFS="$saveIFS" done unset DUALCASE # And finally ... IFS=$nl "${JTREG_JAVA}" \ $javaOpts \ -Dprogram=`basename "$0"` \ -jar "${JTREG_HOME}/lib/jtreg.jar" \ $jtregOpts jtreg-jtreg-7.3.1-1/src/share/classes/000077500000000000000000000000001446671450000174415ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/classes/META-INF/000077500000000000000000000000001446671450000206015ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/classes/META-INF/services/000077500000000000000000000000001446671450000224245ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/classes/META-INF/services/java.util.spi.ToolProvider000066400000000000000000000000601446671450000274610ustar00rootroot00000000000000com.sun.javatest.regtest.tool.JtregToolProvider jtreg-jtreg-7.3.1-1/src/share/classes/com/000077500000000000000000000000001446671450000202175ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/000077500000000000000000000000001446671450000210245ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/000077500000000000000000000000001446671450000226455ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/diff/000077500000000000000000000000001446671450000235555ustar00rootroot00000000000000jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/diff/Diff.java000066400000000000000000000125001446671450000252660ustar00rootroot00000000000000/* * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest.diff; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import com.sun.javatest.Status; import com.sun.javatest.TestResult; import com.sun.javatest.TestSuite; import com.sun.javatest.WorkDirectory; import com.sun.javatest.util.I18NResourceBundle; public abstract class Diff { public abstract boolean report(File outFile) throws Fault, InterruptedException; protected boolean diff(List files, File outFile) throws Fault, InterruptedException { this.outFile = outFile; List list = new ArrayList<>(); for (File f: files) list.add(open(f)); PrintWriter prevOut = out; if (outFile != null) { try { out = new PrintWriter(new BufferedWriter(new FileWriter(outFile))); // FIXME don't want to use PrintWriter } catch (IOException e) { throw new Fault(i18n, "diff.cantOpenFile", outFile, e); } } try { initComparator(); initReporter(); reporter.setTitle(title); reporter.setComparator(comparator); reporter.setReaders(list); List testCounts = new ArrayList<>(); MultiMap table = new MultiMap<>(); for (DiffReader r: list) { int index = table.addColumn(r.getFile().getPath()); int[] counts = new int[Status.NUM_STATES]; for (TestResult tr: r) { table.addRow(index, tr.getTestName(), tr); counts[tr.getStatus().getType()]++; } testCounts.add(counts); } reporter.setTestCounts(testCounts); try { reporter.write(table); } catch (IOException e) { throw new Fault(i18n, "diff.ioError", e); } return (reporter.diffs == 0); } finally { if (out != prevOut) { // try { out.close(); // } catch (IOException e) { // throw new Fault(i18n, "main.ioError", e); // } out = prevOut; } } } protected void initFormat() { if (format == null && outFile != null) { String name = outFile.getName(); int dot = name.lastIndexOf("."); if (dot != -1) format = name.substring(dot + 1).toLowerCase(); } } protected void initReporter() throws Fault { if (reporter == null) { try { initFormat(); if (format != null && format.equals("html")) reporter = new HTMLReporter(out); else reporter = new SimpleReporter(out); } catch (IOException e) { throw new Fault(i18n, "diff.cantOpenReport", e); } } } protected void initComparator() { if (comparator == null) comparator = new StatusComparator(includeReason); } protected DiffReader open(File f) throws Fault { if (!f.exists()) throw new Fault(i18n, "main.cantFindFile", f); try { if (WorkDirectoryReader.accepts(f)) return new WorkDirectoryReader(f); if (ReportReader.accepts(f)) return new ReportReader(f); throw new Fault(i18n, "main.unrecognizedFile", f); } catch (TestSuite.Fault | WorkDirectory.Fault | IOException e) { throw new Fault(i18n, "main.cantOpenFile", f, e); } } protected File outFile; protected PrintWriter out; protected Comparator comparator; protected Reporter reporter; protected boolean includeReason; protected String format; protected String title; private static final I18NResourceBundle i18n = I18NResourceBundle.getBundleForClass(Diff.class); } jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/diff/DiffReader.java000066400000000000000000000027361446671450000264230ustar00rootroot00000000000000/* * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest.diff; import java.io.File; import com.sun.javatest.TestResult; /** * Interface for reading a series of test-status results. */ public interface DiffReader extends Iterable { File getWorkDirectory(); String getFileType(); File getFile(); } jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/diff/Fault.java000066400000000000000000000030431446671450000254730ustar00rootroot00000000000000/* * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest.diff; import com.sun.javatest.util.I18NResourceBundle; /** * Exception to report a problem while executing in Main. */ public class Fault extends Exception { static final long serialVersionUID = 1607979458544175906L; Fault(I18NResourceBundle i18n, String s, Object... args) { super(i18n.getString(s, args)); } } jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/diff/HTMLReporter.java000066400000000000000000000274531446671450000267220ustar00rootroot00000000000000/* * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest.diff; import java.io.File; import java.io.IOException; import java.io.Writer; import java.util.Date; import java.util.Map; import com.sun.javatest.Status; import com.sun.javatest.TestResult; import com.sun.javatest.util.I18NResourceBundle; import static com.sun.javatest.util.HTMLWriter.*; /* * TODO: import CSS * TODO: links to .jtr files */ /** * Report differences to an HTML file. */ public class HTMLReporter extends Reporter { /** Creates a new instance of HTMLReporter */ public HTMLReporter(Writer out) throws IOException { this.out = new HTMLWriter(out, DOCTYPE); this.out.setI18NResourceBundle(i18n); } public void write(MultiMap table) throws IOException { this.table = table; size = table.getColumns(); startReport(title); out.startTag(H1); if (title == null) out.writeI18N("html.head.notitle"); else out.writeI18N("html.head.title", title); out.endTag(H1); writeIndexTable(); writeMainTable(); writeSummary(); endReport(); } protected void startReport(String title) throws IOException { out.startTag(HTML); writeHead(title); out.startTag(BODY); } protected void endReport() throws IOException { out.startTag(HR); out.writeI18N("html.generatedAt", new Date()); out.endTag(BODY); out.endTag(HTML); out.flush(); } protected void writeHead(String title) throws IOException { out.startTag(HEAD); out.startTag(TITLE); if (title == null) out.writeI18N("html.head.notitle"); else out.writeI18N("html.head.title", title); out.endTag(TITLE); out.startTag(STYLE); out.writeAttr(TYPE, "text/css"); out.write("\n"); out.write("table { background-color:white }"); out.write("tr.head { background-color:#dddddd }"); out.write("tr.odd { background-color:#eeeeee }"); out.write("tr.even { background-color:white } "); out.write("td { padding: 0 .5em }"); out.write("td.pass { background-color:#ddffdd } "); out.write("td.fail { background-color:#ffdddd } "); out.write("td.error { background-color:#ddddff } "); out.write("td.notRun { background-color:#dddddd } "); out.write("th { padding: 0 .5em }"); out.write("hr { margin-top:30px; }"); out.write("\n"); out.endTag(STYLE); out.endTag(HEAD); } private void writeIndexTable() throws IOException { out.startTag(H2); out.writeI18N("html.head.sets"); out.endTag(H2); out.startTag(TABLE); out.writeAttr(FRAME, BOX); out.writeAttr(RULES, GROUPS); out.startTag(THEAD); out.startTag(TR); out.writeAttr(CLASS, HEAD); out.startTag(TH); out.writeI18N("html.th.set"); out.endTag(TH); out.startTag(TH); out.writeI18N("html.th.location"); out.endTag(TH); writeIndexTableInfoHeadings(); // out.startTag(TH); // out.writeI18N("html.th.type"); // out.endTag(TH); for (int c = 0; c < Status.NUM_STATES; c++) { out.startTag(TH); switch (c) { case Status.PASSED: out.writeI18N("html.th.pass"); break; case Status.FAILED: out.writeI18N("html.th.fail"); break; case Status.ERROR: out.writeI18N("html.th.error"); break; default: out.writeI18N("html.th.notRun"); break; } out.endTag(TH); } out.startTag(TH); out.writeI18N("html.th.total"); out.endTag(TH); out.endTag(TR); out.endTag(THEAD); out.startTag(TBODY); for (int i = 0; i < size; i++) { out.startTag(TR); out.writeAttr(CLASS, (i % 2 == 0 ? EVEN : ODD)); out.startTag(TD); out.write(String.valueOf(i + 1)); out.endTag(TD); out.startTag(TD); out.write(table.getColumnName(i)); out.endTag(TD); writeIndexTableInfoValues(table.getColumnName(i)); // out.startTag(TD); // out.write("??"); // out.endTag(TD); int total = 0; int[] counts = testCounts.get(i); for (int c = 0; c < Status.NUM_STATES; c++) { out.startTag(TD); if (counts[c] > 0) out.write(String.valueOf(counts[c])); else out.writeEntity(" "); total += counts[c]; out.endTag(TD); } out.startTag(TD); out.write(String.valueOf(total)); out.endTag(TD); out.endTag(TR); } out.endTag(TBODY); out.endTag(TABLE); } protected void writeIndexTableInfoHeadings() throws IOException { } protected void writeIndexTableInfoValues(String name) throws IOException { } private void writeMainTable() throws IOException { diffs = 0; for (Map.Entry> e: table.entrySet()) { String testName = e.getKey(); MultiMap.Entry result = e.getValue(); if (result.allEqual(comparator)) continue; if (diffs == 0) { out.startTag(H2); out.writeI18N("html.head.differences"); out.endTag(H2); out.startTag(TABLE); out.writeAttr(FRAME, BOX); out.writeAttr(RULES, GROUPS); out.startTag(THEAD); out.startTag(TR); out.writeAttr(CLASS, HEAD); out.startTag(TH); out.writeI18N("html.th.test"); out.endTag(TH); for (int i = 0; i < result.getSize(); i++) { out.startTag(TH); if (compact) out.write(String.valueOf(i + 1)); else out.writeI18N("html.th.setN", i + 1); out.endTag(TH); } out.endTag(TR); out.endTag(THEAD); out.startTag(TBODY); } out.startTag(TR); out.writeAttr(CLASS, (diffs % 2 == 0 ? EVEN : ODD)); out.startTag(TD); out.write(testName); out.endTag(TD); for (int i = 0; i < result.getSize(); i++) { TestResult tr = result.get(i); File trFile = (tr == null ? null : tr.getFile()); if (trFile == null) { File wd = readers.get(i).getWorkDirectory(); if (wd != null) trFile = new File(wd, tr.getWorkRelativePath()); } out.startTag(TD); Status s = (tr == null ? null : tr.getStatus()); out.writeAttr(CLASS, getClassAttr(s)); String text = getText(s); if (trFile != null && trFile.exists()) { out.startTag(A); out.writeAttr(HREF, trFile.toURI().toString()); if (text.startsWith("&")) out.writeEntity(text); else out.write(text); out.endTag(A); } else { if (text.startsWith("&")) out.writeEntity(text); else out.write(text); } out.endTag(TD); } out.endTag(TR); diffs++; } if (diffs > 0) { out.endTag(TBODY); out.endTag(TABLE); } } private void writeSummary() throws IOException { out.startTag(P); if (diffs == 0) out.writeI18N("html.diffs.none"); else out.writeI18N("html.diffs.count", diffs); out.endTag(P); } protected String getClassAttr(Status s) { switch (s == null ? Status.NOT_RUN : s.getType()) { case Status.PASSED: return PASS; case Status.FAILED: return FAIL; case Status.ERROR: return ERROR; default: return NOT_RUN; } } protected String getText(Status s) { if (statusStrings == null) { statusStrings = new String[Status.NUM_STATES]; if (compact) { statusStrings[Status.PASSED] = i18n.getString("html.pass.compact"); statusStrings[Status.FAILED] = i18n.getString("html.fail.compact"); statusStrings[Status.ERROR] = i18n.getString("html.error.compact"); statusStrings[Status.NOT_RUN] = i18n.getString("html.notRun.compact"); } else { statusStrings[Status.PASSED] = i18n.getString("html.pass"); statusStrings[Status.FAILED] = i18n.getString("html.fail"); statusStrings[Status.ERROR] = i18n.getString("html.error"); statusStrings[Status.NOT_RUN] = i18n.getString("html.notRun"); } } return statusStrings[s == null ? Status.NOT_RUN : s.getType()]; } private String[] statusStrings; protected final HTMLWriter out; private MultiMap table; private int size; private static final String DOCTYPE = ""; // HTML tags private static final String THEAD = "thead"; private static final String TBODY = "tbody"; // HTML attribute names private static final String CLASS = "class"; private static final String FRAME = "frame"; private static final String RULES = "rules"; // HTML attribute values private static final String BOX = "box"; private static final String GROUPS = "groups"; // HTML class values private static final String HEAD = "head"; private static final String ODD = "odd"; private static final String EVEN = "even"; private static final String PASS = "pass"; private static final String FAIL = "fail"; private static final String ERROR = "error"; private static final String NOT_RUN = "notRun"; private boolean compact = Boolean.TRUE.equals(Boolean.getBoolean("jtdiff.html.compact")); private static I18NResourceBundle i18n = I18NResourceBundle.getBundleForClass(HTMLReporter.class); } jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/diff/HTMLWriter.java000066400000000000000000000503721446671450000263700ustar00rootroot00000000000000/* * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest.diff; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.Writer; import java.net.URL; import com.sun.javatest.util.I18NResourceBundle; /** * A class to facilitate writing HTML via a stream. */ public class HTMLWriter { /** * Create an HTMLWriter object, using a default doctype for HTML 3.2. * @param out a Writer to which to write the generated HTML * @throws IOException if there is a problem writing to the underlying stream */ public HTMLWriter(Writer out) throws IOException { this(out, ""); } /** * Create an HTMLWriter object, using a specifed doctype header. * @param out a Writer to which to write the generated HTML * @param docType a string containing a doctype header for the HTML to be generetaed * @throws IOException if there is a problem writing to the underlying stream */ public HTMLWriter(Writer out, String docType) throws IOException { if (out instanceof BufferedWriter) this.out = (BufferedWriter) out; else this.out = new BufferedWriter(out); this.out.write(docType); this.out.newLine(); } /** * Create an HTMLWriter object, using a specified bundle for l0calizing messages. * @param out a Writer to which to write the generated HTML * @param i18n a resource bundle to use to localize messages * @throws IOException if there is a problem writing to the underlying stream */ public HTMLWriter(Writer out, I18NResourceBundle i18n) throws IOException { this(out); this.i18n = i18n; } /** * Create an HTMLWriter object, using a specifed doctype header and * using a specified bundle for l0calizing messages. * @param out a Writer to which to write the generated HTML * @param docType a string containing a doctype header for the HTML to be generetaed * @param i18n a resource bundle to use to localize messages * @throws IOException if there is a problem writing to the underlying stream */ public HTMLWriter(Writer out, String docType, I18NResourceBundle i18n) throws IOException { this(out, docType); this.i18n = i18n; } /** * Set the reource bundle to be used for localizing messages. * @param i18n the resource bundle to be used for localizing messages */ public void setI18NResourceBundle(I18NResourceBundle i18n) { this.i18n = i18n; } /** * Flush the stream, and the underlying output stream. * @throws IOException if there is a problem writing to the underlying stream */ public void flush() throws IOException { out.flush(); } /** * Close the stream, and the underlying output stream. * @throws IOException if there is a problem closing the underlying stream */ public void close() throws IOException { out.close(); } /** * Write a newline to the underlying output stream. * @throws IOException if there is a problem writing to the underlying stream */ public void newLine() throws IOException { out.newLine(); } /** * Start an HTML tag. If a prior tag has been started, it will * be closed first. Once a tag has been opened, attributes for the * tag may be written out, followed by body content before finally * ending the tag. * @param tag the tag to be started * @throws IOException if there is a problem writing to the underlying stream * @see #writeAttr * @see #write * @see #endTag */ public void startTag(String tag) throws IOException { if (state == IN_TAG) { out.write(">"); state = IN_BODY; } newLine(); out.write("<"); out.write(tag); state = IN_TAG; } /** * Finish an HTML tag. It is expected that a call to endTag will match * a corresponding earlier call to startTag, but there is no formal check * for this. * @param tag the tag to be closed. * @throws IOException if there is a problem writing to the underlying stream */ public void endTag(String tag) throws IOException { if (state == IN_TAG) { out.write(">"); state = IN_BODY; out.newLine(); } out.write(""); //out.newLine(); // PATCHED, jjg state = IN_BODY; } /** * Finish an empty element tag, such as a META, BASE or LINK tag. * This is expected to correspond with a startTag. * @param tag the tag which is being closed. this is only useful for * validation, it is not written out * @throws IllegalStateException if this call does not follow startTag * (stream is not currently inside a tag) * @throws IOException if there is a problem writing to the underlying stream */ public void endEmptyTag(String tag) throws IOException { if (state != IN_TAG) throw new IllegalStateException(); out.write(">"); state = IN_BODY; out.newLine(); } /** * Write an attribute for a tag. A tag must previously have been started. * All tag attributes must be written before any body text is written. * The value will be quoted if necessary when writing it to the underlying * stream. No check is made that the attribute is valid for the current tag. * @param name the name of the attribute to be written * @param value the value of the attribute to be written * @throws IllegalStateException if the stream is not in a state to * write attributes -- e.g. if this call does not follow startTag or other * calls of writteAttr * @throws IOException if there is a problem writing to the underlying stream */ public void writeAttr(String name, String value) throws IOException { if (state != IN_TAG) throw new IllegalStateException(); out.write(" "); out.write(name); out.write("="); boolean alpha = true; for (int i = 0; i < value.length() && alpha; i++) alpha = Character.isLetter(value.charAt(i)); if (!alpha) out.write("\""); out.write(value); if (!alpha) out.write("\""); } /** * Write an attribute for a tag. A tag must previously have been started. * All tag attributes must be written before any body text is written. * The value will be quoted if necessary when writing it to the underlying * stream. No check is made that the attribute is valid for the current tag. * @param name the name of the attribute to be written * @param value the value of the attribute to be written * @throws IllegalStateException if the stream is not in a state to * write attributes -- e.g. if this call does not follow startTag or other * calls of writteAttr * @throws IOException if there is a problem writing to the underlying stream */ public void writeAttr(String name, int value) throws IOException { writeAttr(name, Integer.toString(value)); } /** * Write a line of text, followed by a newline. * The text will be escaped as necessary. * @param text the text to be written. * @throws IOException if there is a problem closing the underlying stream */ public void writeLine(String text) throws IOException { write(text); out.newLine(); } /** * Write body text, escaping it as necessary. * If this call follows a call of startTag, the open tag will be * closed -- meaning that no more attributes can be written until another * tag is started. If the text value is null, the current tag will still * be closed, but no other text will be written. * @param text the text to be written, may be null or zero length. * @throws IOException if there is a problem writing to the underlying stream */ public void write(String text) throws IOException { if (state == IN_TAG) { out.write(">"); state = IN_BODY; } if (text == null) return; // check to see if there are any special characters boolean specialChars = false; for (int i = 0; i < text.length() && !specialChars; i++) { switch (text.charAt(i)) { case '<': case '>': case '&': specialChars = true; } } // if there are special characters write the string character at a time; // otherwise, write it out as is if (specialChars) { for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); switch (c) { case '<': out.write("<"); break; case '>': out.write(">"); break; case '&': out.write("&"); break; default: out.write(c); } } } else out.write(text); } /** * Write a basic HTML entity, such as   or { . * @param entity the entity to write * @throws IOException if there is a problem writing to the underlying stream */ public void writeEntity(String entity) throws IOException { if (state == IN_TAG) { out.write(">"); state = IN_BODY; } out.write(entity); } /** * Write an image tag, using a specified path for the image source attribute. * @param imagePath the path for the image source * @throws IOException if there is a problem closing the underlying stream */ public void writeImage(String imagePath) throws IOException { startTag(IMAGE); writeAttr(SRC, imagePath); } /** * Write an image tag, using a specified path for the image source attribute. * @param imageURL the url for the image source * @throws IOException if there is a problem closing the underlying stream */ public void writeImage(URL imageURL) throws IOException { writeImage(imageURL.toString()); } /** * Write a hypertext link. * @param anchor the target for the link * @param body the body text for the link * @throws IOException if there is a problem closing the underlying stream */ public void writeLink(String anchor, String body) throws IOException { startTag(A); writeAttr(HREF, anchor); write(body); endTag(A); } /** * Write a hypertext link. * @param file the target for the link * @param body the body text for the link * @throws IOException if there is a problem closing the underlying stream */ public void writeLink(File file, String body) throws IOException { startTag(A); StringBuilder sb = new StringBuilder(); String path = file.getPath().replace(File.separatorChar, '/'); if (file.isAbsolute() && !path.startsWith("/")) sb.append('/'); sb.append(path); writeAttr(HREF, sb.toString()); write(body); endTag(A); } /** * Write a hypertext link. * @param file the target and body for the link * @throws IOException if there is a problem closing the underlying stream */ public void writeLink(File file) throws IOException { writeLink(file, file.getPath()); } /** * Write a hypertext link. * @param url the target for the link * @param body the body text for the link * @throws IOException if there is a problem closing the underlying stream */ public void writeLink(URL url, String body) throws IOException { startTag(A); writeAttr(HREF, url.toString()); write(body); endTag(A); } /** * Write the destination marker for a hypertext link. * @param anchor the destination marker for hypertext links * @param body the body text for the marker * @throws IOException if there is a problem closing the underlying stream */ public void writeLinkDestination(String anchor, String body) throws IOException { startTag(A); writeAttr(NAME, anchor); write(body); endTag(A); } /** * Write a parameter tag. * @param name the name of the parameter * @param value the value of the parameter * @throws IOException if there is a problem closing the underlying stream */ public void writeParam(String name, String value) throws IOException { startTag(PARAM); writeAttr(NAME, name); writeAttr(VALUE, value); } /** * Write a style attribute. * @param value the value for the style atrtribute * @throws IOException if there is a problem closing the underlying stream */ public void writeStyleAttr(String value) throws IOException { writeAttr(STYLE, value); } /** * Write a localized message, using a specified resource bundle. * @param i18n the resource bundle used to localize the message * @param key the key for the message to be localized * @throws IOException if there is a problem closing the underlying stream */ public void write(I18NResourceBundle i18n, String key) throws IOException { write(i18n.getString(key)); } /** * Write a localized message, using a specified resource bundle. * @param i18n the resource bundle used to localize the message * @param key the key for the message to be localized * @param arg an argument to be formatted into the localized message * @throws IOException if there is a problem closing the underlying stream */ public void write(I18NResourceBundle i18n, String key, Object arg) throws IOException { write(i18n.getString(key, arg)); } /** * Write a localized message, using a specified resource bundle. * @param i18n the resource bundle used to localize the message * @param key the key for the message to be localized * @param args arguments to be formatted into the localized message * @throws IOException if there is a problem closing the underlying stream */ public void write(I18NResourceBundle i18n, String key, Object[] args) throws IOException { write(i18n.getString(key, args)); } /** * Write a localized message, using the default resource bundle. * @param key the key for the message to be localized * @throws IOException if there is a problem closing the underlying stream */ public void writeI18N(String key) throws IOException { write(i18n.getString(key)); } /** * Write a localized message, using the default resource bundle. * @param key the key for the message to be localized * @param arg an argument to be formatted into the localized message * @throws IOException if there is a problem closing the underlying stream */ public void writeI18N(String key, Object arg) throws IOException { write(i18n.getString(key, arg)); } /** * Write a localized message, using the default resource bundle. * @param key the key for the message to be localized * @param args arguments to be formatted into the localized message * @throws IOException if there is a problem closing the underlying stream */ public void writeI18N(String key, Object[] args) throws IOException { write(i18n.getString(key, args)); } /** The HTML "a" tag. */ public static final String A = "a"; /** The HTML "align" attribute. */ public static final String ALIGN = "align"; /** The HTML "b" tag. */ public static final String B = "b"; /** The HTML "body" tag. */ public static final String BODY = "body"; /** The HTML "border" attribute. */ public static final String BORDER = "border"; /** The HTML "br" tag. */ public static final String BR = "br"; /** The HTML "classid" attribute. */ public static final String CLASSID = "classid"; /** The HTML "code" tag. */ public static final String CODE = "code"; /** The HTML "color" attribte. */ public static final String COLOR = "color"; /** The HTML "col" attribute value. */ public static final String COL = "col"; /** The HTML "font" tag. */ public static final String FONT = "font"; /** The HTML "h1" tag. */ public static final String H1 = "h1"; /** The HTML "h2" tag. */ public static final String H2 = "h2"; /** The HTML "h3" tag. */ public static final String H3 = "h3"; /** The HTML "h4" tag. */ public static final String H4 = "h4"; /** The HTML "head" tag. */ public static final String HEAD = "head"; /** The HTML "href" attribute. */ public static final String HREF = "href"; /** The HTML "html" tag. */ public static final String HTML = "html"; /** The HTML "hr" tag. */ public static final String HR = "hr"; /** The HTML "i" tag. */ public static final String I = "i"; /** The HTML "image" tag. */ public static final String IMAGE = "image"; /** The HTML "left" attribute value. */ public static final String LEFT = "left"; /** The HTML "li" tag. */ public static final String LI = "li"; /** The HTML "link" tag. */ public static final String LINK = "link"; /** The HTML "name" attribute. */ public static final String NAME = "name"; /** The HTML "object" tag. */ public static final String OBJECT = "object"; /** The HTML "p" tag. */ public static final String PARAM = "param"; /** The HTML "param" tag. */ public static final String P = "p"; /** The HTML "rel" attribute value. */ public static final String REL = "rel"; /** The HTML "right" attribute value. */ public static final String RIGHT = "right"; /** The HTML "row" attribute value. */ public static final String ROW = "row"; /** The HTML "small" tag. */ public static final String SMALL = "small"; /** The HTML "src" attribute. */ public static final String SRC = "src"; /** The HTML "scope" attribute. */ public static final String SCOPE = "scope"; /** The HTML "style" attribute. */ public static final String STYLE = "style"; /** The HTML "table" tag. */ public static final String TABLE = "table"; /** The HTML "td" tag. */ public static final String TD = "td"; /** The HTML "title"attribute. */ public static final String TITLE = "title"; /** The HTML "th" tag. */ public static final String TH = "th"; /** The HTML "top" attribute value. */ public static final String TOP = "top"; /** The HTML "tr" tag. */ public static final String TR = "tr"; /** The HTML "type" attribute. */ public static final String TYPE = "type"; /** The HTML "ul" tag. */ public static final String UL = "ul"; /** The HTML "valign" attribute. */ public static final String VALIGN = "valign"; /** The HTML "value" attribute. */ public static final String VALUE = "value"; private BufferedWriter out; private int state; private I18NResourceBundle i18n; private static final int IN_TAG = 1; private static final int IN_BODY = 2; } jtreg-jtreg-7.3.1-1/src/share/classes/com/sun/javatest/diff/Help.java000066400000000000000000000316661446671450000253240ustar00rootroot00000000000000/* * Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javatest.diff; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URL; import java.text.DateFormat; import java.util.ArrayList; import java.util.Comparator; import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import com.sun.javatest.regtest.tool.Option; import com.sun.javatest.util.HelpTree; import com.sun.javatest.util.I18NResourceBundle; import com.sun.javatest.util.WrapWriter; /** * Handles help options for main program */ public class Help { /** Creates a new instance of Help */ public Help(List