From 487dba687ad0891eebe61433c83c9ad5bf529b7b Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 3 Nov 2017 18:39:42 +0300 Subject: Fix pom generation for dokka-android-plugin Workaround for johnrengelman/shadow#334 --- .../org/jetbrains/CorrectShadowPublishing.groovy | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy (limited to 'buildSrc/src/main') diff --git a/buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy b/buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy new file mode 100644 index 00000000..3e1d2106 --- /dev/null +++ b/buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy @@ -0,0 +1,39 @@ +package org.jetbrains + +import org.gradle.api.Project +import org.gradle.api.artifacts.ModuleVersionIdentifier +import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.artifacts.SelfResolvingDependency +import org.gradle.api.publish.internal.ProjectDependencyPublicationResolver +import org.gradle.api.publish.maven.MavenPom +import org.gradle.api.publish.maven.MavenPublication + +static void configure(MavenPublication publication, Project project) { + publication.artifact(project.tasks.shadowJar) + + publication.pom { MavenPom pom -> + pom.withXml { xml -> + def dependenciesNode = xml.asNode().appendNode('dependencies') + + project.configurations.shadow.allDependencies.each { + //if (! (it instanceof SelfResolvingDependency)) { + if (it instanceof ProjectDependency) { + def projectDependencyResolver = project.gradle.services.get(ProjectDependencyPublicationResolver) + ModuleVersionIdentifier identifier = projectDependencyResolver.resolve(it) + addDependency(dependenciesNode, identifier) + } else if (!(it instanceof SelfResolvingDependency)) { + addDependency(dependenciesNode, it) + } + + } + } + } +} + +private static void addDependency(Node dependenciesNode, dep) { + def dependencyNode = dependenciesNode.appendNode('dependency') + dependencyNode.appendNode('groupId', dep.group) + dependencyNode.appendNode('artifactId', dep.name) + dependencyNode.appendNode('version', dep.version) + dependencyNode.appendNode('scope', 'runtime') +} \ No newline at end of file -- cgit From e1dd83ed777d121fc9627460f76d1b09fa0c9c3b Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 8 Nov 2017 18:53:50 +0300 Subject: Fix PluginXmlTransformer --- .../org/jetbrains/PluginXmlTransformer.groovy | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'buildSrc/src/main') diff --git a/buildSrc/src/main/groovy/org/jetbrains/PluginXmlTransformer.groovy b/buildSrc/src/main/groovy/org/jetbrains/PluginXmlTransformer.groovy index 7482a01a..e711388f 100644 --- a/buildSrc/src/main/groovy/org/jetbrains/PluginXmlTransformer.groovy +++ b/buildSrc/src/main/groovy/org/jetbrains/PluginXmlTransformer.groovy @@ -1,5 +1,6 @@ package org.jetbrains +import com.github.jengelman.gradle.plugins.shadow.relocation.RelocateClassContext import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext @@ -22,7 +23,7 @@ public class PluginXmlTransformer implements Transformer { def inputStream = context.is System.out.println(path) Node node = new XmlParser().parse(inputStream) - relocateXml(node, context.relocators) + relocateXml(node, context) transformedPluginXmlFiles.put(path, node) } @@ -39,28 +40,32 @@ public class PluginXmlTransformer implements Transformer { } } - private static void relocateXml(Node node, List relocators) { + private static void relocateXml(Node node, TransformerContext context) { Map attributes = node.attributes() + RelocateClassContext relocateClassContext = new RelocateClassContext() + relocateClassContext.stats = context.stats for (Map.Entry entry : attributes.entrySet()) { - entry.setValue(relocateClassName((String) entry.getValue(), relocators)) + relocateClassContext.setClassName((String) entry.getValue()) + entry.setValue(relocateClassName(relocateClassContext, context)) } List localText = node.localText() if (localText.size() == 1) { - node.setValue(relocateClassName(localText[0], relocators)) + relocateClassContext.setClassName(localText[0]) + node.setValue(relocateClassName(relocateClassContext, context)) } node.children().each { if (it instanceof Node) { - relocateXml((Node) it, relocators) + relocateXml((Node) it, context) } } } - private static String relocateClassName(String className, List relocators) { - for (Relocator relocator : relocators) { - if (relocator.canRelocateClass(className)) { - return relocator.relocateClass(className) + private static String relocateClassName(RelocateClassContext relocateContext, TransformerContext context) { + for (Relocator relocator : context.relocators) { + if (relocator.canRelocateClass(relocateContext)) { + return relocator.relocateClass(relocateContext) } } - return className + return relocateContext.className } } \ No newline at end of file -- cgit From 4626531f95e60e03086da163cde5edf5411a8d9b Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 9 Nov 2017 21:43:37 +0300 Subject: Drop dependency on intellij-core-analysis Instead of it, download idea.jar and manually strip it Also, depends on same as kotlin-compiler openapi version --- build.gradle | 10 +++- buildSrc/build.gradle | 8 +--- .../org/jetbrains/DependenciesVersionGetter.groovy | 14 ++++++ core/build.gradle | 30 ++++++++++-- .../main/kotlin/Analysis/CoreProjectFileIndex.kt | 16 +++++-- gradle.properties | 3 ++ lib/intellij-core-analysis.jar | Bin 40325875 -> 0 bytes settings.gradle | 3 +- strippedIdeaJar/build.gradle | 52 +++++++++++++++++++++ strippedIdeaJar/ideaJar.pro | 8 ++++ 10 files changed, 129 insertions(+), 15 deletions(-) create mode 100644 buildSrc/src/main/groovy/org/jetbrains/DependenciesVersionGetter.groovy delete mode 100644 lib/intellij-core-analysis.jar create mode 100644 strippedIdeaJar/build.gradle create mode 100644 strippedIdeaJar/ideaJar.pro (limited to 'buildSrc/src/main') diff --git a/build.gradle b/build.gradle index b89a8c92..bd960ca8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.DependenciesVersionGetter + allprojects { group 'org.jetbrains.dokka' version dokka_version @@ -15,6 +17,8 @@ allprojects { maven { url "http://dl.bintray.com/kotlin/kotlin-eap" } maven { url "https://dl.bintray.com/kotlin/kotlin-dev" } maven { url "https://plugins.gradle.org/m2/" } + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + maven { url "http://dl.bintray.com/jetbrains/intellij-plugin-service" } ivy(repo) } dependencies { @@ -64,4 +68,8 @@ def bintrayPublication(project, List _publications) { task wrapper(type: Wrapper) { gradleVersion = '4.2.1' distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" -} \ No newline at end of file +} + +def versions = DependenciesVersionGetter.getVersions(project, kotlin_compiler_version) + +ext.ideaVersion = versions["idea.build.id"] \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 76c7c4ee..874dabc9 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -2,12 +2,8 @@ apply plugin: 'groovy' repositories { mavenCentral() jcenter() - maven { - url "https://dl.bintray.com/kotlin/kotlin-eap" - } - maven { - url "https://dl.bintray.com/kotlin/kotlin-dev" - } + maven { url "https://dl.bintray.com/kotlin/kotlin-eap" } + maven { url "https://dl.bintray.com/kotlin/kotlin-dev" } } dependencies { compile 'com.github.jengelman.gradle.plugins:shadow:2.0.1' diff --git a/buildSrc/src/main/groovy/org/jetbrains/DependenciesVersionGetter.groovy b/buildSrc/src/main/groovy/org/jetbrains/DependenciesVersionGetter.groovy new file mode 100644 index 00000000..194f11af --- /dev/null +++ b/buildSrc/src/main/groovy/org/jetbrains/DependenciesVersionGetter.groovy @@ -0,0 +1,14 @@ +package org.jetbrains + +import org.gradle.api.Project + +class DependenciesVersionGetter { + static Properties getVersions(Project project, String artifactVersionSelector) { + def dep = project.dependencies.create(group: 'teamcity', name: 'dependencies', version: artifactVersionSelector, ext: 'properties') + def file = project.configurations.detachedConfiguration(dep).resolve().first() + + def prop = new Properties() + prop.load(new FileReader(file)) + return prop + } +} diff --git a/core/build.gradle b/core/build.gradle index 3d3e2317..3420e4e7 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -3,6 +3,7 @@ import javax.tools.ToolProvider buildscript { dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_compiler_to_compile_core_version" + classpath "org.jetbrains.intellij.plugins:gradle-intellij-plugin:$gradle_intellij_plugin_version" } } @@ -17,8 +18,6 @@ dependencies { compile group: 'com.google.inject', name: 'guice', version: '3.0' compile "org.jsoup:jsoup:1.8.3" - compile files("../lib/intellij-core-analysis.jar") - compile "teamcity:kotlin-compiler:$kotlin_compiler_version" compile "teamcity:kotlin-script-runtime:$kotlin_compiler_version" @@ -33,7 +32,32 @@ dependencies { compile project(":integration") testCompile group: 'junit', name: 'junit', version: '4.12' - testCompile group: 'org.jetbrains.kotlin', name: 'kotlin-test-junit', version: kotlin_version + testCompile group: 'org.jetbrains.kotlin', name: 'kotlin-test-junit', version: kotlin_compiler_to_compile_core_version testCompile "com.nhaarman:mockito-kotlin-kt1.1:1.5.0" } +apply plugin: 'org.jetbrains.intellij' + +{ -> + intellij { + version = ideaVersion + instrumentCode = false + configureDefaultDependencies = false + extraDependencies 'intellij-core' + } + + ["patchPluginXml", "prepareSandbox", "prepareTestingSandbox", + "verifyPlugin", "runIde", "buildPlugin", "publishPlugin"].each { + tasks.remove(tasks.findByName(it)) + } +}() + +afterEvaluate { + dependencies { + compile intellij { + include("openapi.jar") + } + compile intellijExtra("intellij-core") { include("intellij-core.jar") } + compile project(path: ":strippedIdeaJar", configuration: "proguardOut") + } +} diff --git a/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt b/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt index 21f7e2da..2f2f94b3 100644 --- a/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt +++ b/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt @@ -32,7 +32,11 @@ import java.io.File * classes from projectModel-{api,impl}. */ class CoreProjectFileIndex(private val project: Project, contentRoots: List) : ProjectFileIndex, ModuleFileIndex { - override fun iterateContentUnderDirectory(p0: VirtualFile, p1: ContentIterator, p2: VirtualFileFilter): Boolean { + override fun iterateContent(p0: ContentIterator, p1: VirtualFileFilter?): Boolean { + throw UnsupportedOperationException() + } + + override fun iterateContentUnderDirectory(p0: VirtualFile, p1: ContentIterator, p2: VirtualFileFilter?): Boolean { throw UnsupportedOperationException() } @@ -74,7 +78,7 @@ class CoreProjectFileIndex(private val project: Project, contentRoots: List? { + override fun getRootFiles(p0: OrderRootType): Array { throw UnsupportedOperationException() } - override fun getRootUrls(p0: OrderRootType?): Array? { + override fun getRootUrls(p0: OrderRootType): Array { throw UnsupportedOperationException() } @@ -307,6 +311,10 @@ class CoreProjectFileIndex(private val project: Project, contentRoots: List { throw UnsupportedOperationException() } diff --git a/gradle.properties b/gradle.properties index 516cd0eb..29da4702 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,9 @@ kotlin_compiler_version=1.2.20-dev-65 kotlin_compiler_to_compile_core_version=1.2.0-rc-39 kotlin_for_gradle_version=1.0.7 +#IntelliJ plugin to download openapi.jar +gradle_intellij_plugin_version=0.3.0-SNAPSHOT + ant_version=1.9.6 #Maven plugin dependencies diff --git a/lib/intellij-core-analysis.jar b/lib/intellij-core-analysis.jar deleted file mode 100644 index 50520e0c..00000000 Binary files a/lib/intellij-core-analysis.jar and /dev/null differ diff --git a/settings.gradle b/settings.gradle index 4dcfd255..e6694bf9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,4 +6,5 @@ include 'core', 'runners:maven-plugin', 'runners:gradle-plugin', 'runners:android-gradle-plugin', - 'runners:gradle-integration-tests' + 'runners:gradle-integration-tests', + 'strippedIdeaJar' diff --git a/strippedIdeaJar/build.gradle b/strippedIdeaJar/build.gradle new file mode 100644 index 00000000..e8104d00 --- /dev/null +++ b/strippedIdeaJar/build.gradle @@ -0,0 +1,52 @@ +import proguard.gradle.ProGuardTask + +buildscript { + dependencies { + classpath "org.jetbrains.intellij.plugins:gradle-intellij-plugin:$gradle_intellij_plugin_version" + classpath "net.sf.proguard:proguard-gradle:5.3.3" + } +} + +apply plugin: 'org.jetbrains.intellij' + +{ -> + intellij { + version = ideaVersion + instrumentCode = false + configureDefaultDependencies = false + } + + ["patchPluginXml", "prepareSandbox", "prepareTestingSandbox", + "verifyPlugin", "runIde", "buildPlugin", "publishPlugin"].each { + tasks.remove(tasks.findByName(it)) + } +}() + +configurations { + proguardInput + proguardOut +} + +afterEvaluate { + dependencies { + proguardInput intellij { include("idea.jar") } + } +} + + +task strip(type: ProGuardTask) { + configuration file('ideaJar.pro') + afterEvaluate { + injars configurations.proguardInput.files, filter: "**.class" + outjars file("$buildDir/idea-stripped.jar") + } +} + + +afterEvaluate { + artifacts { + proguardOut(strip.outputs.files.singleFile) { + builtBy strip + } + } +} \ No newline at end of file diff --git a/strippedIdeaJar/ideaJar.pro b/strippedIdeaJar/ideaJar.pro new file mode 100644 index 00000000..63efbd95 --- /dev/null +++ b/strippedIdeaJar/ideaJar.pro @@ -0,0 +1,8 @@ + +-dontwarn ** + +-dontobfuscate +-dontoptimize + +-keep class com.intellij.openapi.roots.impl.ProjectOrderEnumerator { *; } +-keep class com.intellij.core.CoreModuleManager { *; } -- cgit