diff --git a/build.gradle b/build.gradle index 8da11d27a..2c4bcf56e 100644 --- a/build.gradle +++ b/build.gradle @@ -240,13 +240,14 @@ subprojects { targetCompatibility = 1.8 } - tasks.withType(AbstractCompile).all { + tasks.matching { it instanceof JavaCompile || it instanceof GroovyCompile }.all { // enable all warnings except for different sourceCompatibility and targetCompatibility value options.compilerArgs << '-Xlint:all' options.compilerArgs << '-Xlint:-options' - if (targetPlatformVersion >= '46') { - options.compilerArgs << '-Werror' - } +// TODO (donat) kotlin compilation currently fails with bad path error +// if (targetPlatformVersion >= '46') { +// options.compilerArgs << '-Werror' +// } options.fork = true if (OperatingSystem.current().isMacOsX()) { @@ -283,6 +284,11 @@ subprojects { // configure the repositories where the external dependencies can be found repositories { + maven { + name = 'kotlin-dev-repository' + url kotlinDevRepositoryUrl + } + maven { name = 'mavenized-target-platform' url "${eclipsebuild.Config.on(project).mavenizedTargetPlatformDir}" diff --git a/gradle.properties b/gradle.properties index f06f2ebdf..9f8514cd2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ # production library version numbers +kotlinVersion=1.0.0 toolingCommonsVersion=0.17.0 toolingApiVersion=3.3 @@ -12,6 +13,7 @@ objenesisLibVersion=2.2 gradleRemoteRepositoryUrl = https://repo.gradle.org/gradle/remote-repos gradleSnapshotsRepositoryUrl = https://repo.gradle.org/gradle/libs-snapshots gradleReleasesRepositoryUrl = https://repo.gradle.org/gradle/libs-releases +kotlinDevRepositoryUrl = https://dl.bintray.com/kotlin/kotlin-dev # default release type release.type=snapshot diff --git a/org.eclipse.buildship.core/META-INF/MANIFEST.MF b/org.eclipse.buildship.core/META-INF/MANIFEST.MF index f14227901..d6e79318e 100644 --- a/org.eclipse.buildship.core/META-INF/MANIFEST.MF +++ b/org.eclipse.buildship.core/META-INF/MANIFEST.MF @@ -21,25 +21,25 @@ Require-Bundle: org.eclipse.core.expressions, com.gradleware.tooling.client;bundle-version="[0.17.0,0.18.0)", com.gradleware.tooling.utils;bundle-version="[0.17.0,0.18.0)" Bundle-ActivationPolicy: lazy -Export-Package: org.eclipse.buildship.core;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.configuration;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.console;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.event;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.gradle;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.i18n;x-friends:="org.eclipse.buildship.ui", +Export-Package: org.eclipse.buildship.core;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.configuration;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.console;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.event;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.gradle;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.i18n;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", org.eclipse.buildship.core.invocation, - org.eclipse.buildship.core.launch;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.notification;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.preferences;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.projectimport;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.binding;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.collections;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.configuration;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.file;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.gradle;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.logging;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.preference;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.progress;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.string;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.util.variable;x-friends:="org.eclipse.buildship.ui", - org.eclipse.buildship.core.workspace;x-friends:="org.eclipse.buildship.ui" + org.eclipse.buildship.core.launch;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.notification;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.preferences;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.projectimport;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.binding;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.collections;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.configuration;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.file;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.gradle;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.logging;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.preference;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.progress;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.string;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.util.variable;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin", + org.eclipse.buildship.core.workspace;x-friends:="org.eclipse.buildship.ui,org.eclipse.buildship.kotlin" diff --git a/org.eclipse.buildship.kotlin.feature/.project b/org.eclipse.buildship.kotlin.feature/.project new file mode 100644 index 000000000..d655f2deb --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/.project @@ -0,0 +1,17 @@ + + + org.eclipse.buildship.kotlin.feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + diff --git a/org.eclipse.buildship.kotlin.feature/META-INF/MANIFEST.MF b/org.eclipse.buildship.kotlin.feature/META-INF/MANIFEST.MF new file mode 100644 index 000000000..59499bce4 --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/org.eclipse.buildship.kotlin.feature/build.gradle b/org.eclipse.buildship.kotlin.feature/build.gradle new file mode 100644 index 000000000..32bcbb57a --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/build.gradle @@ -0,0 +1 @@ +apply plugin: eclipsebuild.FeaturePlugin diff --git a/org.eclipse.buildship.kotlin.feature/build.properties b/org.eclipse.buildship.kotlin.feature/build.properties new file mode 100644 index 000000000..1b44b75c5 --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/build.properties @@ -0,0 +1,9 @@ +bin.includes = epl-v10.html,\ + feature.xml,\ + feature.properties,\ + license.html +src.includes = build.properties,\ + epl-v10.html,\ + feature.xml,\ + feature.properties,\ + license.html diff --git a/org.eclipse.buildship.kotlin.feature/epl-v10.html b/org.eclipse.buildship.kotlin.feature/epl-v10.html new file mode 100644 index 000000000..fd391227c --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/epl-v10.html @@ -0,0 +1,261 @@ + + + + + + +Eclipse Public License - Version 1.0 + + + + + + +

Eclipse Public License - v 1.0

+ +

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE +PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR +DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS +AGREEMENT.

+ +

1. DEFINITIONS

+ +

"Contribution" means:

+ +

a) in the case of the initial Contributor, the initial +code and documentation distributed under this Agreement, and

+

b) in the case of each subsequent Contributor:

+

i) changes to the Program, and

+

ii) additions to the Program;

+

where such changes and/or additions to the Program +originate from and are distributed by that particular Contributor. A +Contribution 'originates' from a Contributor if it was added to the +Program by such Contributor itself or anyone acting on such +Contributor's behalf. Contributions do not include additions to the +Program which: (i) are separate modules of software distributed in +conjunction with the Program under their own license agreement, and (ii) +are not derivative works of the Program.

+ +

"Contributor" means any person or entity that distributes +the Program.

+ +

"Licensed Patents" mean patent claims licensable by a +Contributor which are necessarily infringed by the use or sale of its +Contribution alone or when combined with the Program.

+ +

"Program" means the Contributions distributed in accordance +with this Agreement.

+ +

"Recipient" means anyone who receives the Program under +this Agreement, including all Contributors.

+ +

2. GRANT OF RIGHTS

+ +

a) Subject to the terms of this Agreement, each +Contributor hereby grants Recipient a non-exclusive, worldwide, +royalty-free copyright license to reproduce, prepare derivative works +of, publicly display, publicly perform, distribute and sublicense the +Contribution of such Contributor, if any, and such derivative works, in +source code and object code form.

+ +

b) Subject to the terms of this Agreement, each +Contributor hereby grants Recipient a non-exclusive, worldwide, +royalty-free patent license under Licensed Patents to make, use, sell, +offer to sell, import and otherwise transfer the Contribution of such +Contributor, if any, in source code and object code form. This patent +license shall apply to the combination of the Contribution and the +Program if, at the time the Contribution is added by the Contributor, +such addition of the Contribution causes such combination to be covered +by the Licensed Patents. The patent license shall not apply to any other +combinations which include the Contribution. No hardware per se is +licensed hereunder.

+ +

c) Recipient understands that although each Contributor +grants the licenses to its Contributions set forth herein, no assurances +are provided by any Contributor that the Program does not infringe the +patent or other intellectual property rights of any other entity. Each +Contributor disclaims any liability to Recipient for claims brought by +any other entity based on infringement of intellectual property rights +or otherwise. As a condition to exercising the rights and licenses +granted hereunder, each Recipient hereby assumes sole responsibility to +secure any other intellectual property rights needed, if any. For +example, if a third party patent license is required to allow Recipient +to distribute the Program, it is Recipient's responsibility to acquire +that license before distributing the Program.

+ +

d) Each Contributor represents that to its knowledge it +has sufficient copyright rights in its Contribution, if any, to grant +the copyright license set forth in this Agreement.

+ +

3. REQUIREMENTS

+ +

A Contributor may choose to distribute the Program in object code +form under its own license agreement, provided that:

+ +

a) it complies with the terms and conditions of this +Agreement; and

+ +

b) its license agreement:

+ +

i) effectively disclaims on behalf of all Contributors +all warranties and conditions, express and implied, including warranties +or conditions of title and non-infringement, and implied warranties or +conditions of merchantability and fitness for a particular purpose;

+ +

ii) effectively excludes on behalf of all Contributors +all liability for damages, including direct, indirect, special, +incidental and consequential damages, such as lost profits;

+ +

iii) states that any provisions which differ from this +Agreement are offered by that Contributor alone and not by any other +party; and

+ +

iv) states that source code for the Program is available +from such Contributor, and informs licensees how to obtain it in a +reasonable manner on or through a medium customarily used for software +exchange.

+ +

When the Program is made available in source code form:

+ +

a) it must be made available under this Agreement; and

+ +

b) a copy of this Agreement must be included with each +copy of the Program.

+ +

Contributors may not remove or alter any copyright notices contained +within the Program.

+ +

Each Contributor must identify itself as the originator of its +Contribution, if any, in a manner that reasonably allows subsequent +Recipients to identify the originator of the Contribution.

+ +

4. COMMERCIAL DISTRIBUTION

+ +

Commercial distributors of software may accept certain +responsibilities with respect to end users, business partners and the +like. While this license is intended to facilitate the commercial use of +the Program, the Contributor who includes the Program in a commercial +product offering should do so in a manner which does not create +potential liability for other Contributors. Therefore, if a Contributor +includes the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and +indemnify every other Contributor ("Indemnified Contributor") +against any losses, damages and costs (collectively "Losses") +arising from claims, lawsuits and other legal actions brought by a third +party against the Indemnified Contributor to the extent caused by the +acts or omissions of such Commercial Contributor in connection with its +distribution of the Program in a commercial product offering. The +obligations in this section do not apply to any claims or Losses +relating to any actual or alleged intellectual property infringement. In +order to qualify, an Indemnified Contributor must: a) promptly notify +the Commercial Contributor in writing of such claim, and b) allow the +Commercial Contributor to control, and cooperate with the Commercial +Contributor in, the defense and any related settlement negotiations. The +Indemnified Contributor may participate in any such claim at its own +expense.

+ +

For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those +performance claims and warranties, and if a court requires any other +Contributor to pay any damages as a result, the Commercial Contributor +must pay those damages.

+ +

5. NO WARRANTY

+ +

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS +PROVIDED 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. Each Recipient is solely +responsible for determining the appropriateness of using and +distributing the Program and assumes all risks associated with its +exercise of rights under this Agreement , including but not limited to +the risks and costs of program errors, compliance with applicable laws, +damage to or loss of data, programs or equipment, and unavailability or +interruption of operations.

+ +

6. DISCLAIMER OF LIABILITY

+ +

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT +NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING +WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR +DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED +HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+ +

7. GENERAL

+ +

If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further action +by the parties hereto, such provision shall be reformed to the minimum +extent necessary to make such provision valid and enforceable.

+ +

If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other +software or hardware) infringes such Recipient's patent(s), then such +Recipient's rights granted under Section 2(b) shall terminate as of the +date such litigation is filed.

+ +

All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of time +after becoming aware of such noncompliance. If all Recipient's rights +under this Agreement terminate, Recipient agrees to cease use and +distribution of the Program as soon as reasonably practicable. However, +Recipient's obligations under this Agreement and any licenses granted by +Recipient relating to the Program shall continue and survive.

+ +

Everyone is permitted to copy and distribute copies of this +Agreement, but in order to avoid inconsistency the Agreement is +copyrighted and may only be modified in the following manner. The +Agreement Steward reserves the right to publish new versions (including +revisions) of this Agreement from time to time. No one other than the +Agreement Steward has the right to modify this Agreement. The Eclipse +Foundation is the initial Agreement Steward. The Eclipse Foundation may +assign the responsibility to serve as the Agreement Steward to a +suitable separate entity. Each new version of the Agreement will be +given a distinguishing version number. The Program (including +Contributions) may always be distributed subject to the version of the +Agreement under which it was received. In addition, after a new version +of the Agreement is published, Contributor may elect to distribute the +Program (including its Contributions) under the new version. Except as +expressly stated in Sections 2(a) and 2(b) above, Recipient receives no +rights or licenses to the intellectual property of any Contributor under +this Agreement, whether expressly, by implication, estoppel or +otherwise. All rights in the Program not expressly granted under this +Agreement are reserved.

+ +

This Agreement is governed by the laws of the State of New York and +the intellectual property laws of the United States of America. No party +to this Agreement will bring a legal action under this Agreement more +than one year after the cause of action arose. Each party waives its +rights to a jury trial in any resulting litigation.

+ + + + diff --git a/org.eclipse.buildship.kotlin.feature/feature.properties b/org.eclipse.buildship.kotlin.feature/feature.properties new file mode 100644 index 000000000..925255a34 --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/feature.properties @@ -0,0 +1,146 @@ +# "featureName" property - the name of the feature +featureName=\ +Buildship Kotlin Script Support (experimental) + +# "providerName" property - the name of the company providing the feature +providerName=\ +Eclipse Buildship + +# "description" property - description of the feature +description=\ +Buildship: Eclipse Plug-ins for Gradle, provided as part of the Gradle Platform.\n\n\ +Copyright (c) 2015 Gradle Inc.\n\ +For more information, visit our website https://projects.eclipse.org/projects/tools.buildship + +# "copyright" property - the copyright notice +copyright=\ +Copyright (c) 2015 Gradle Inc. + +# "license" property - the Eclipse Foundation SUA +license=\ +Eclipse Foundation Software User Agreement\n\ +April 9, 2014\n\ +\n\ +Usage Of Content\n\ +\n\ +THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\ +OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\ +USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\ +AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\ +NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\ +AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\ +AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\ +OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\ +TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\ +OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\ +BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\ +\n\ +Applicable Licenses\n\ +\n\ +Unless otherwise indicated, all Content made available by the\n\ +Eclipse Foundation is provided to you under the terms and conditions of\n\ +the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\ +provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\ +For purposes of the EPL, "Program" will mean the Content.\n\ +\n\ +Content includes, but is not limited to, source code, object code,\n\ +documentation and other files maintained in the Eclipse Foundation source code\n\ +repository ("Repository") in software modules ("Modules") and made available\n\ +as downloadable archives ("Downloads").\n\ +\n\ +\t- Content may be structured and packaged into modules to facilitate delivering,\n\ +\t extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\ +\t plug-in fragments ("Fragments"), and features ("Features").\n\ +\t- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\ +\t in a directory named "plugins".\n\ +\t- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\ +\t Each Feature may be packaged as a sub-directory in a directory named "features".\n\ +\t Within a Feature, files named "feature.xml" may contain a list of the names and version\n\ +\t numbers of the Plug-ins and/or Fragments associated with that Feature.\n\ +\t- Features may also include other Features ("Included Features"). Within a Feature, files\n\ +\t named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\ +\n\ +The terms and conditions governing Plug-ins and Fragments should be\n\ +contained in files named "about.html" ("Abouts"). The terms and\n\ +conditions governing Features and Included Features should be contained\n\ +in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\ +Licenses may be located in any directory of a Download or Module\n\ +including, but not limited to the following locations:\n\ +\n\ +\t- The top-level (root) directory\n\ +\t- Plug-in and Fragment directories\n\ +\t- Inside Plug-ins and Fragments packaged as JARs\n\ +\t- Sub-directories of the directory named "src" of certain Plug-ins\n\ +\t- Feature directories\n\ +\n\ +Note: if a Feature made available by the Eclipse Foundation is installed using the\n\ +Provisioning Technology (as defined below), you must agree to a license ("Feature \n\ +Update License") during the installation process. If the Feature contains\n\ +Included Features, the Feature Update License should either provide you\n\ +with the terms and conditions governing the Included Features or inform\n\ +you where you can locate them. Feature Update Licenses may be found in\n\ +the "license" property of files named "feature.properties" found within a Feature.\n\ +Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\ +terms and conditions (or references to such terms and conditions) that\n\ +govern your use of the associated Content in that directory.\n\ +\n\ +THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\ +TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\ +SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\ +\n\ +\t- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\ +\t- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\ +\t- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\ +\t- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\ +\t- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\ +\n\ +IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\ +TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\ +is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\ +govern that particular Content.\n\ +\n\ +\nUse of Provisioning Technology\n\ +\n\ +The Eclipse Foundation makes available provisioning software, examples of which include,\n\ +but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\ +the purpose of allowing users to install software, documentation, information and/or\n\ +other materials (collectively "Installable Software"). This capability is provided with\n\ +the intent of allowing such users to install, extend and update Eclipse-based products.\n\ +Information about packaging Installable Software is available at\n\ +http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\ +\n\ +You may use Provisioning Technology to allow other parties to install Installable Software.\n\ +You shall be responsible for enabling the applicable license agreements relating to the\n\ +Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\ +in accordance with the Specification. By using Provisioning Technology in such a manner and\n\ +making it available in accordance with the Specification, you further acknowledge your\n\ +agreement to, and the acquisition of all necessary rights to permit the following:\n\ +\n\ +\t1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\ +\t the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\ +\t extending or updating the functionality of an Eclipse-based product.\n\ +\t2. During the Provisioning Process, the Provisioning Technology may cause third party\n\ +\t Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\ +\t3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\ +\t govern the use of the Installable Software ("Installable Software Agreement") and such\n\ +\t Installable Software Agreement shall be accessed from the Target Machine in accordance\n\ +\t with the Specification. Such Installable Software Agreement must inform the user of the\n\ +\t terms and conditions that govern the Installable Software and must solicit acceptance by\n\ +\t the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\ +\t indication of agreement by the user, the provisioning Technology will complete installation\n\ +\t of the Installable Software.\n\ +\n\ +Cryptography\n\ +\n\ +Content may contain encryption software. The country in which you are\n\ +currently may have restrictions on the import, possession, and use,\n\ +and/or re-export to another country, of encryption software. BEFORE\n\ +using any encryption software, please check the country's laws,\n\ +regulations and policies concerning the import, possession, or use, and\n\ +re-export of encryption software, to see if this is permitted.\n\ +\n\ +Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n + +# "licenseURL" property - the URL pointing to the local Eclipse Foundation SUA +licenseUrl=\ +license.html diff --git a/org.eclipse.buildship.kotlin.feature/feature.xml b/org.eclipse.buildship.kotlin.feature/feature.xml new file mode 100644 index 000000000..cf3594c71 --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/feature.xml @@ -0,0 +1,28 @@ + + + + + + %description + + + + %copyright + + + + %license + + + + + diff --git a/org.eclipse.buildship.kotlin.feature/license.html b/org.eclipse.buildship.kotlin.feature/license.html new file mode 100644 index 000000000..c3d34c3c2 --- /dev/null +++ b/org.eclipse.buildship.kotlin.feature/license.html @@ -0,0 +1,107 @@ + + + + + +Eclipse Foundation Software User Agreement + + + +

Eclipse Foundation Software User Agreement

+

April 9, 2014

+ +

Usage Of Content

+ +

THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS + (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND + CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE + OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR + NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND + CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.

+ +

Applicable Licenses

+ +

Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0 + ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html. + For purposes of the EPL, "Program" will mean the Content.

+ +

Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code + repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").

+ + + +

The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and +Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module +including, but not limited to the following locations:

+ + + +

Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the +installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or +inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. +Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in +that directory.

+ +

THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE +OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):

+ + + +

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please +contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.

+ + +

Use of Provisioning Technology

+ +

The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse + Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or + other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to + install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html + ("Specification").

+ +

You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the + applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology + in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the + Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:

+ +
    +
  1. A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology + on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based + product.
  2. +
  3. During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be + accessed and copied to the Target Machine.
  4. +
  5. Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable + Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target + Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern + the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such + indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.
  6. +
+ +

Cryptography

+ +

Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to + another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, + possession, or use, and re-export of encryption software, to see if this is permitted.

+ +

Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.

+ + diff --git a/org.eclipse.buildship.kotlin/.classpath b/org.eclipse.buildship.kotlin/.classpath new file mode 100644 index 000000000..12f32c7fc --- /dev/null +++ b/org.eclipse.buildship.kotlin/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/org.eclipse.buildship.kotlin/.project b/org.eclipse.buildship.kotlin/.project new file mode 100644 index 000000000..e30a4a794 --- /dev/null +++ b/org.eclipse.buildship.kotlin/.project @@ -0,0 +1,41 @@ + + + org.eclipse.buildship.kotlin + + + + + + org.jetbrains.kotlin.ui.kotlinBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + org.jetbrains.kotlin.core.kotlinNature + + + + kotlin_bin + 2 + org.jetbrains.kotlin.core.filesystem:/org.eclipse.buildship.kotlin/kotlin_bin + + + diff --git a/org.eclipse.buildship.kotlin/META-INF/MANIFEST.MF b/org.eclipse.buildship.kotlin/META-INF/MANIFEST.MF new file mode 100644 index 000000000..bcf420b4c --- /dev/null +++ b/org.eclipse.buildship.kotlin/META-INF/MANIFEST.MF @@ -0,0 +1,26 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Buildship, Eclipse Plug-ins for Gradle - Kotlin script support +Bundle-SymbolicName: org.eclipse.buildship.kotlin;singleton:=true +Bundle-Version: 2.0.1.qualifier +Bundle-Vendor: Eclipse Buildship +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-Activator: org.eclipse.buildship.kotlin.KotlinPlugin +Bundle-ActivationPolicy: lazy +Bundle-ClassPath: ., + gradle-core-3.3.jar, + gradle-script-kotlin-0.7.0.jar +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.core.resources, + org.eclipse.jdt.core, + org.eclipse.jdt.launching, + org.eclipse.ui, + org.eclipse.jface.text, + org.eclipse.buildship.core, + org.slf4j.api;bundle-version="1.7.2", + org.jetbrains.kotlin.bundled-compiler;bundle-version="[0.8.0,0.9.0)", + org.jetbrains.kotlin.ui;bundle-version="[0.8.0,0.9.0)", + org.jetbrains.kotlin.core;bundle-version="[0.8.0,0.9.0)", + com.gradleware.tooling.model;bundle-version="[0.17.0,0.18.0)", + com.gradleware.tooling.client;bundle-version="[0.17.0,0.18.0)", + com.gradleware.tooling.utils;bundle-version="[0.17.0,0.18.0)" diff --git a/org.eclipse.buildship.kotlin/about.html b/org.eclipse.buildship.kotlin/about.html new file mode 100644 index 000000000..c258ef55d --- /dev/null +++ b/org.eclipse.buildship.kotlin/about.html @@ -0,0 +1,28 @@ + + + + +About + + +

About This Content

+ +

June 5, 2006

+

License

+ +

The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at http://www.eclipse.org/legal/epl-v10.html. +For purposes of the EPL, "Program" will mean the Content.

+ +

If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at http://www.eclipse.org.

+ + + \ No newline at end of file diff --git a/org.eclipse.buildship.kotlin/about.ini b/org.eclipse.buildship.kotlin/about.ini new file mode 100644 index 000000000..19e85f06c --- /dev/null +++ b/org.eclipse.buildship.kotlin/about.ini @@ -0,0 +1,7 @@ +# Icon on the about page +featureImage=icons/about.png + +# Text on the about page +aboutText= Buildship: Eclipse Plug-ins for Gradle, provided as part of the Gradle Platform.\n\n\ +Copyright (c) 2016 Gradle Inc.\n\ +For more information, visit our website https://projects.eclipse.org/projects/tools.buildship diff --git a/org.eclipse.buildship.kotlin/build.gradle b/org.eclipse.buildship.kotlin/build.gradle new file mode 100644 index 000000000..50c7799e3 --- /dev/null +++ b/org.eclipse.buildship.kotlin/build.gradle @@ -0,0 +1,21 @@ +buildscript { + ext.kotlin_version = '1.0.4' + repositories.jcenter() + dependencies.classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" +} + +apply plugin: eclipsebuild.BundlePlugin +apply plugin: 'kotlin' + +dependencies { + compile "org.gradle:gradle-core:$toolingApiVersion" + compile "org.gradle:gradle-process-services:$toolingApiVersion" + compile "org.gradle:gradle-tooling-api:$toolingApiVersion" + compile "org.gradle:gradle-script-kotlin:0.7.0" +} + +task updateBundledJars(type: Copy) { + into 'lib' + from configurations.compile.filter { it.name.startsWith('gradle-script-kotlin') } + from configurations.compile.filter { it.name.startsWith('gradle-core') } +} \ No newline at end of file diff --git a/org.eclipse.buildship.kotlin/build.properties b/org.eclipse.buildship.kotlin/build.properties new file mode 100644 index 000000000..1cf2f43b9 --- /dev/null +++ b/org.eclipse.buildship.kotlin/build.properties @@ -0,0 +1,9 @@ +source.. = src/main/java/,\ + src/main/kotlin/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + about.html,\ + about.ini,\ + gradle-script-kotlin-0.7.0.jar,\ + gradle-core-3.3.jar diff --git a/org.eclipse.buildship.kotlin/gradle-core-3.3.jar b/org.eclipse.buildship.kotlin/gradle-core-3.3.jar new file mode 100644 index 000000000..e415e2e3f Binary files /dev/null and b/org.eclipse.buildship.kotlin/gradle-core-3.3.jar differ diff --git a/org.eclipse.buildship.kotlin/gradle-script-kotlin-0.7.0.jar b/org.eclipse.buildship.kotlin/gradle-script-kotlin-0.7.0.jar new file mode 100644 index 000000000..4e8486cd2 Binary files /dev/null and b/org.eclipse.buildship.kotlin/gradle-script-kotlin-0.7.0.jar differ diff --git a/org.eclipse.buildship.kotlin/plugin.xml b/org.eclipse.buildship.kotlin/plugin.xml new file mode 100644 index 000000000..4d3a9402a --- /dev/null +++ b/org.eclipse.buildship.kotlin/plugin.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/GradleKotlinScriptTemplateProvider.java b/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/GradleKotlinScriptTemplateProvider.java new file mode 100644 index 000000000..230025edc --- /dev/null +++ b/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/GradleKotlinScriptTemplateProvider.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2017 the original author or authors. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.eclipse.buildship.kotlin; + +import java.io.File; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.jetbrains.kotlin.core.model.ScriptTemplateProviderEx; +import org.jetbrains.kotlin.script.ScriptDependenciesResolver; + +import org.eclipse.core.resources.IFile; +import org.eclipse.jdt.launching.JavaRuntime; + +import org.eclipse.buildship.core.CorePlugin; +import org.eclipse.buildship.core.configuration.ProjectConfiguration; +import org.eclipse.buildship.core.configuration.WorkspaceConfiguration; +import org.eclipse.buildship.core.util.gradle.GradleDistributionSerializer; + +/** + * Contributes the Gradle Kotlin Script template to the Kotlin Eclipse integration. + * + * @author Donat Csikos + */ +public class GradleKotlinScriptTemplateProvider implements ScriptTemplateProviderEx { + + @Override + public Iterable getTemplateClassClasspath() { + return KotlinPlugin.templateClasspath(); + } + + @Override + public Map getEnvironment(IFile file) { + HashMap environment = new HashMap(); + + WorkspaceConfiguration workspaceConfig = CorePlugin.workspaceConfigurationManager().loadWorkspaceConfiguration(); + ProjectConfiguration projectConfig = CorePlugin.projectConfigurationManager().readProjectConfiguration(file.getProject()); + + environment.put("rtPath", rtPath()); + environment.put("rootProject", projectConfig.getRootProjectDirectory()); + environment.put("distribution", GradleDistributionSerializer.INSTANCE.serializeToString(projectConfig.getGradleDistribution())); + environment.put("gradleUserHome", workspaceConfig.getGradleUserHome()); + environment.put("isOffline", workspaceConfig.isOffline()); + + return environment; + } + + @Override + public String getTemplateClassName() { + return "org.eclipse.buildship.kotlin.KotlinBuildScript"; + } + + @Override + public ScriptDependenciesResolver getResolver() { + // NOTE: This resolver will be executed in Eclipse, but it doesn't work now. + return null; + } + + @Override + public boolean isApplicable(IFile file) { + return CorePlugin.projectConfigurationManager().tryReadProjectConfiguration(file.getProject()).isPresent(); + } + + private static List rtPath() { + File rtJar = new File(JavaRuntime.getDefaultVMInstall().getInstallLocation(), "jre/lib/rt.jar"); + return rtJar.exists() ? Arrays.asList(rtJar) : Collections.emptyList(); + } + +} \ No newline at end of file diff --git a/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/KotlinModelQuery.java b/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/KotlinModelQuery.java new file mode 100644 index 000000000..d9fc1d774 --- /dev/null +++ b/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/KotlinModelQuery.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2017 the original author or authors. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.eclipse.buildship.kotlin; + +import java.io.File; +import java.net.URI; +import java.net.URISyntaxException; + +import org.gradle.script.lang.kotlin.support.KotlinBuildScriptModel; +import org.gradle.tooling.GradleConnector; +import org.gradle.tooling.ProjectConnection; + +/** + * Query {@link KotlinBuildScriptModel}. + * + * @author Donat Csikos + */ +public class KotlinModelQuery { + + public static KotlinBuildScriptModel execute(File projectDir, String distributionString, File gradleUserHome, boolean isOffline) { + ProjectConnection connection = null; + try { + GradleConnector connector = GradleConnector.newConnector().forProjectDirectory(projectDir); + applyGradleDistribution(connector, distributionString); + connection = connector.connect(); + return connection.model(KotlinBuildScriptModel.class) + .setJvmArguments("-Dorg.gradle.script.lang.kotlin.provider.mode=classpath") // from KotlinScriptPluginFactory + .withArguments(isOffline ? "--offline" : "") + .get(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + if (connection != null) { + connection.close(); + } + } + } + + /* + * TODO (donat) the plugin dependencies are not visible when called from GradleKotlinScriptDependenciesResolver + * so the GradleDistributionSerializer class is copied here. + */ + private static void applyGradleDistribution(GradleConnector connector, String distributionString) { + String localInstallationPrefix = "GRADLE_DISTRIBUTION(LOCAL_INSTALLATION("; + if (distributionString.startsWith(localInstallationPrefix) && distributionString.endsWith("))")) { + String localInstallationDir = distributionString.substring(localInstallationPrefix.length(), distributionString.length() - 2); + connector.useInstallation(new File(localInstallationDir)); + return; + } + + String remoteDistributionPrefix = "GRADLE_DISTRIBUTION(REMOTE_DISTRIBUTION("; + if (distributionString.startsWith(remoteDistributionPrefix) && distributionString.endsWith("))")) { + String remoteDistributionUri = distributionString.substring(remoteDistributionPrefix.length(), distributionString.length() - 2); + connector.useDistribution(createURI(remoteDistributionUri)); + return; + } + + String versionPrefix = "GRADLE_DISTRIBUTION(VERSION("; + if (distributionString.startsWith(versionPrefix) && distributionString.endsWith("))")) { + String version = distributionString.substring(versionPrefix.length(), distributionString.length() - 2); + connector.useGradleVersion(version); + return; + } + + String wrapperString = "GRADLE_DISTRIBUTION(WRAPPER)"; + if (distributionString.equals(wrapperString)) { + connector.useBuildDistribution(); + return; + } + } + + private static URI createURI(String uri) { + try { + return new URI(uri); + } catch (URISyntaxException e) { + throw new RuntimeException(e.getMessage()); + } + } +} diff --git a/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/KotlinPlugin.java b/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/KotlinPlugin.java new file mode 100644 index 000000000..fd13f5b17 --- /dev/null +++ b/org.eclipse.buildship.kotlin/src/main/java/org/eclipse/buildship/kotlin/KotlinPlugin.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2017 the original author or authors. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.eclipse.buildship.kotlin; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.List; + +import org.gradle.script.lang.kotlin.support.KotlinBuildScriptModel; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; + +import com.google.common.collect.Lists; +import com.google.common.io.Files; + +import com.gradleware.tooling.toolingclient.GradleDistribution; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.eclipse.ui.plugin.AbstractUIPlugin; + +import org.eclipse.buildship.core.CorePlugin; +import org.eclipse.buildship.core.configuration.WorkspaceConfiguration; +import org.eclipse.buildship.core.util.gradle.GradleDistributionSerializer; + +/** + * The activator class controls the plug-in life cycle. + */ +public class KotlinPlugin extends AbstractUIPlugin { + public static final String PLUGIN_ID = "org.eclipse.buildship.kotlin"; //$NON-NLS-1$ + + private static KotlinPlugin plugin; + private List templateClasspath; + + public KotlinPlugin() { + } + + @Override + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + @Override + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + public static KotlinPlugin getInstance() { + return plugin; + } + + public static List templateClasspath() { + return getInstance().getTemplateClasspath(); + } + + private List getTemplateClasspath() { + if (this.templateClasspath == null) { + this.templateClasspath = loadTemplateClasspath(); + } + return this.templateClasspath; + } + + private static List loadTemplateClasspath() { + List classpath = Lists.newArrayList(templateClasspathFor(Files.createTempDir())); + // classes from this plugin after installation + appendPluginResourceIfExists(classpath, "/"); + // java classes from this plugin for development time + appendPluginResourceIfExists(classpath, "/bin"); + // Kotlin classes can't be loaded from the IDE as they're compiled into memory + // therefore we can only load them from the Gradle build folder + appendPluginResourceIfExists(classpath, "/build/kotlin-classes/main"); + return classpath; + } + + private static List templateClasspathFor(File projectDir) { + WorkspaceConfiguration config = CorePlugin.workspaceConfigurationManager().loadWorkspaceConfiguration(); + KotlinBuildScriptModel model = KotlinModelQuery.execute(projectDir, GradleDistributionSerializer.INSTANCE.serializeToString(GradleDistribution.fromBuild()), config.getGradleUserHome(), config.isOffline()); + List classpath = Lists.newArrayList(); + for (File entry : model.getClassPath()) { + // an incompatible version of Groovy is already used in the compiler + if (!entry.getName().startsWith("groovy")) { + classpath.add(entry.getAbsolutePath()); + } + } + return classpath; + } + + private static void appendPluginResourceIfExists(List classpath, String path) { + try { + Bundle pluginBundle = Platform.getBundle(PLUGIN_ID); + URL entry = pluginBundle.getEntry(path); + if (entry != null) { + classpath.add(FileLocator.toFileURL(entry).getFile()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/org.eclipse.buildship.kotlin/src/main/kotlin/org/eclipse/buildship/kotlin/GradleKotlinScriptDependenciesResolver.kt b/org.eclipse.buildship.kotlin/src/main/kotlin/org/eclipse/buildship/kotlin/GradleKotlinScriptDependenciesResolver.kt new file mode 100644 index 000000000..30e162222 --- /dev/null +++ b/org.eclipse.buildship.kotlin/src/main/kotlin/org/eclipse/buildship/kotlin/GradleKotlinScriptDependenciesResolver.kt @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2017 the original author or authors. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.eclipse.buildship.kotlin + +import org.gradle.script.lang.kotlin.support.KotlinBuildScriptModel +import org.jetbrains.kotlin.script.KotlinScriptExternalDependencies +import org.jetbrains.kotlin.script.ScriptContents +import org.jetbrains.kotlin.script.ScriptDependenciesResolver +import org.jetbrains.kotlin.script.asFuture +import java.io.File +import java.util.concurrent.Future +import java.util.concurrent.FutureTask +import java.util.concurrent.Callable +import org.gradle.script.lang.kotlin.support.KotlinBuildScriptDependenciesResolver +import org.gradle.script.lang.kotlin.support.ImplicitImports +import org.eclipse.buildship.core.util.gradle.GradleDistributionWrapper +import org.eclipse.buildship.core.util.gradle.GradleDistributionWrapper.DistributionType + +class GradleKotlinScriptDependenciesResolver : ScriptDependenciesResolver { + + override fun resolve(script: ScriptContents, + environment: Map?, + report: (ScriptDependenciesResolver.ReportSeverity, String, ScriptContents.Position?) -> Unit, + previousDependencies: KotlinScriptExternalDependencies?) : Future { + if (environment == null) { + return makeDependencies(emptyList()).asFuture() + } else { + return retrieveDependenciesFromProject(environment).asFuture() + } + } + + @Suppress("UNCHECKED_CAST") + private fun retrieveDependenciesFromProject(environment: Map): KotlinScriptExternalDependencies { + val rtPath = environment["rtPath"] as List + val projectRoot = environment["rootProject"] as File + val distribution = environment["distribution"] as String + val gradleUserHome = environment["gradleUserHome"] as File? + val isOffline = environment["isOffline"] as Boolean + val classpath = KotlinModelQuery.execute(projectRoot, distribution, gradleUserHome, isOffline).classPath + val gradleKotlinJar = classpath.filter { cp -> cp.name.startsWith("gradle-script-kotlin-") } + val gradleInstallation = classpath.find { it.absolutePath.contains("dists") && it.parentFile.name.equals("lib") }!!.parentFile.parentFile + val sources = gradleKotlinJar + buildSrcRootsOf(projectRoot) + sourceRootsOf(gradleInstallation) + return makeDependencies(rtPath + classpath, sources) + } + + /** + * Returns all conventional source directories under buildSrc if any. + * This won't work for buildSrc projects with a custom source directory layout + * but should account for the majority of cases and it's cheap. + */ + private fun buildSrcRootsOf(projectRoot: File): Collection = + subDirsOf(File(projectRoot, "buildSrc/src/main")) + + private fun sourceRootsOf(gradleInstallation: File): Collection = + subDirsOf(File(gradleInstallation, "src")) + + private fun subDirsOf(dir: File): Collection = + if (dir.isDirectory) + dir.listFiles().filter { it.isDirectory } + else + emptyList() + + private fun makeDependencies(classPath: Iterable, sources: Iterable = emptyList()): KotlinScriptExternalDependencies = + object : KotlinScriptExternalDependencies { + override val classpath = classPath + override val imports = implicitImports + override val sources = sources + } + + companion object { + val implicitImports = ImplicitImports.list + } +} diff --git a/org.eclipse.buildship.kotlin/src/main/kotlin/org/eclipse/buildship/kotlin/KotlinBuildScript.kt b/org.eclipse.buildship.kotlin/src/main/kotlin/org/eclipse/buildship/kotlin/KotlinBuildScript.kt new file mode 100644 index 000000000..076059e72 --- /dev/null +++ b/org.eclipse.buildship.kotlin/src/main/kotlin/org/eclipse/buildship/kotlin/KotlinBuildScript.kt @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2017 the original author or authors. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.eclipse.buildship.kotlin + +import org.gradle.api.Project +import org.gradle.api.plugins.ObjectConfigurationAction +import org.gradle.script.lang.kotlin.KotlinScriptHandler +import org.jetbrains.kotlin.script.ScriptTemplateDefinition + +@ScriptTemplateDefinition( + resolver = GradleKotlinScriptDependenciesResolver::class, + scriptFilePattern = ".*\\.gradle\\.kts") +abstract class KotlinBuildScript(project: Project) : Project by project { + /** + * Configures the build script classpath for this project. + * + * @see [Project.buildscript] + */ + @Suppress("unused") + open fun buildscript(@Suppress("unused_parameter") configuration: KotlinScriptHandler.() -> Unit) = Unit + + inline fun apply(crossinline configuration: ObjectConfigurationAction.() -> Unit) = + project.apply({ it.configuration() }) +} diff --git a/org.eclipse.buildship.site/build.gradle b/org.eclipse.buildship.site/build.gradle index 71fe46935..1a601ed9f 100644 --- a/org.eclipse.buildship.site/build.gradle +++ b/org.eclipse.buildship.site/build.gradle @@ -38,6 +38,11 @@ dependencies { localPlugin project(':org.eclipse.buildship.stsmigration') localFeature project(':org.eclipse.buildship.feature') + if (findProperty('include.experimental.features') == 'true') { + localPlugin project(':org.eclipse.buildship.kotlin') + localFeature project(':org.eclipse.buildship.kotlin.feature') + } + // include 3rd party dependencies in the update site externalPlugin withEclipseBundle('com.gradleware.tooling.model') diff --git a/org.eclipse.buildship.site/category.xml b/org.eclipse.buildship.site/category.xml index efafb23de..da9baee39 100644 --- a/org.eclipse.buildship.site/category.xml +++ b/org.eclipse.buildship.site/category.xml @@ -1,9 +1,11 @@ - - - - + + + + + + + + diff --git a/settings.gradle b/settings.gradle index 7cb2f4761..a4c58a146 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,3 +7,5 @@ include ':org.eclipse.buildship.core.test' include ':org.eclipse.buildship.ui.test' include ':org.eclipse.buildship.stsmigration' include ':org.eclipse.buildship.stsmigration.test' +include ':org.eclipse.buildship.kotlin' +include ':org.eclipse.buildship.kotlin.feature' \ No newline at end of file diff --git a/tooling-e42.target b/tooling-e42.target index 574201d6a..f78dbdefe 100644 --- a/tooling-e42.target +++ b/tooling-e42.target @@ -3,6 +3,7 @@ + @@ -13,6 +14,10 @@ + + + + diff --git a/tooling-e43.target b/tooling-e43.target index 2a188341b..c933c4d7f 100644 --- a/tooling-e43.target +++ b/tooling-e43.target @@ -3,6 +3,7 @@ + @@ -13,6 +14,10 @@ + + + + diff --git a/tooling-e44.target b/tooling-e44.target index 2ae422c72..8fd318067 100644 --- a/tooling-e44.target +++ b/tooling-e44.target @@ -3,6 +3,7 @@ + @@ -13,6 +14,10 @@ + + + + diff --git a/tooling-e45.target b/tooling-e45.target index 1f8af09cb..18dafbe86 100644 --- a/tooling-e45.target +++ b/tooling-e45.target @@ -3,6 +3,7 @@ + @@ -13,6 +14,10 @@ + + + + diff --git a/tooling-e46.target b/tooling-e46.target index 13f10a220..d74cdd3bc 100644 --- a/tooling-e46.target +++ b/tooling-e46.target @@ -3,6 +3,7 @@ + @@ -13,6 +14,10 @@ + + + +