From f689a4cf8ef6ab131cbe5bb24dbd1ffb742c48cd Mon Sep 17 00:00:00 2001 From: Donat Csikos Date: Fri, 26 Feb 2021 09:32:04 +0100 Subject: [PATCH] Replace EclipseProject with custom local tooling model --- buildSrc/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54417 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + .../jar/ConvertOsgiBundleTask.groovy | 10 +- .../jar/ExistingJarBundlePlugin.groovy | 22 +- .../eclipsebuild/jar/JarBundleUtils.groovy | 27 +- gradle/config/checkstyle/required-header.txt | 2 +- .../GradleBuildConnectionCachingTest.groovy | 11 +- .../eclipse/buildship/core/GradleBuild.java | 2 +- .../buildship/core/internal/CorePlugin.java | 13 + .../core/internal/DefaultGradleBuild.java | 4 +- .../configuration/GradleArguments.java | 67 +++-- .../gradle/CompatExtendedEclipseModel.java | 37 +++ .../util/gradle/CompatProjectConnection.java | 17 +- .../internal/workspace/BaseConfigurator.java | 5 +- .../workspace/DefaultModelProvider.java | 2 +- ...ls.java => ExtendedEclipseModelUtils.java} | 47 ++-- .../internal/workspace/WtpConfigurator.java | 2 +- ...ugin.gradle => buildshipInitScript.gradle} | 12 +- .../gradle/buildship-runtime.properties | 2 +- .../view/task/BuildInvocationsTest.groovy | 8 +- .../AddBuildshipNatureHandlerTest.groovy | 6 +- .../view/execution/OpenTestSourceFileJob.java | 11 +- .../internal/view/task/ReloadTaskViewJob.java | 5 +- org.gradle.toolingapi/.classpath | 233 +++++++++++++++++- org.gradle.toolingapi/META-INF/MANIFEST.MF | 5 +- org.gradle.toolingapi/build.gradle | 19 +- .../org.gradle.toolingapi_7.4.1.jar | Bin 2427810 -> 2466506 bytes .../buildship/model/ExtendedEclipseModel.java | 34 +++ .../model/ProjectInGradleConfiguration.java | 18 ++ ...ustomToolingModelBuilderWithParameter.java | 57 +++++ .../internal/DefaultExtendedEclipseModel.java | 37 +++ .../DefaultProjectInGradleConfiguration.java | 38 +++ .../internal/ExtendedEclipseModelBuilder.java | 80 ++++++ .../internal/ExtendedEclipseModelPlugin.java | 36 +++ 34 files changed, 770 insertions(+), 104 deletions(-) create mode 100644 buildSrc/gradle/wrapper/gradle-wrapper.jar create mode 100644 buildSrc/gradle/wrapper/gradle-wrapper.properties create mode 100644 org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatExtendedEclipseModel.java rename org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/{EclipseModelUtils.java => ExtendedEclipseModelUtils.java} (70%) rename org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/{eclipsePlugin.gradle => buildshipInitScript.gradle} (69%) create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ProjectInGradleConfiguration.java create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/CustomToolingModelBuilderWithParameter.java create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultExtendedEclipseModel.java create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultProjectInGradleConfiguration.java create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelBuilder.java create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelPlugin.java diff --git a/buildSrc/gradle/wrapper/gradle-wrapper.jar b/buildSrc/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..758de960ec7947253b058ff79c88ce51f3abe08a GIT binary patch literal 54417 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 literal 0 HcmV?d00001 diff --git a/buildSrc/gradle/wrapper/gradle-wrapper.properties b/buildSrc/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..2d80b69a7 --- /dev/null +++ b/buildSrc/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/buildSrc/src/main/groovy/eclipsebuild/jar/ConvertOsgiBundleTask.groovy b/buildSrc/src/main/groovy/eclipsebuild/jar/ConvertOsgiBundleTask.groovy index 150a0a21a..43d33cd68 100644 --- a/buildSrc/src/main/groovy/eclipsebuild/jar/ConvertOsgiBundleTask.groovy +++ b/buildSrc/src/main/groovy/eclipsebuild/jar/ConvertOsgiBundleTask.groovy @@ -41,18 +41,20 @@ class ConvertOsgiBundleTask extends DefaultTask { createNewBundle(project, JarBundleUtils.firstDependencyJar(pluginConfiguration)) } - void createNewBundle(Project project, File jar) { + void createNewBundle(Project project, File depJar) { String sourceReference = PluginUtils.sourceReference(project) - String manifest = JarBundleUtils.manifestContent(jar, template.get(), packageFilter.get(), bundleVersion.get(), qualifier.get(), sourceReference) + Iterable localJars = project.tasks['jar'].outputs.files + String manifest = JarBundleUtils.manifestContent([depJar] + localJars, template.get(), packageFilter.get(), bundleVersion.get(), qualifier.get(), sourceReference) File extraResources = project.file("${project.buildDir}/tmp/bundle-resources") File manifestFile = new File(extraResources, '/META-INF/MANIFEST.MF') manifestFile.parentFile.mkdirs() manifestFile.text = manifest - File osgiJar = new File(target, "osgi_${jar.name}") + File osgiJar = new File(target, "osgi_${project.name}.jar") project.ant.zip(destfile: osgiJar) { - zipfileset(src: jar, excludes: 'META-INF/MANIFEST.MF') + localJars.each { jar -> zipfileset(src: jar, excludes: 'META-INF/MANIFEST.MF')} + zipfileset(src: depJar, excludes: 'META-INF/MANIFEST.MF') } project.ant.zip(update: 'true', destfile: osgiJar) { diff --git a/buildSrc/src/main/groovy/eclipsebuild/jar/ExistingJarBundlePlugin.groovy b/buildSrc/src/main/groovy/eclipsebuild/jar/ExistingJarBundlePlugin.groovy index 9008685dc..327171ff1 100644 --- a/buildSrc/src/main/groovy/eclipsebuild/jar/ExistingJarBundlePlugin.groovy +++ b/buildSrc/src/main/groovy/eclipsebuild/jar/ExistingJarBundlePlugin.groovy @@ -6,14 +6,10 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ConfigurationContainer -import org.gradle.api.artifacts.Dependency -import org.gradle.api.artifacts.ResolvedArtifact -import org.gradle.api.artifacts.ResolvedDependency import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.FileCollection -import org.gradle.api.plugins.BasePlugin +import org.gradle.api.plugins.JavaPlugin import org.gradle.api.provider.Property -import org.gradle.api.specs.Specs import org.gradle.plugins.ide.eclipse.EclipsePlugin import org.gradle.plugins.ide.eclipse.model.Library @@ -51,7 +47,7 @@ class ExistingJarBundlePlugin implements Plugin { @Override public void apply(Project project) { - project.getPluginManager().apply(BasePlugin.class) + project.getPluginManager().apply(JavaPlugin.class) configureExtensions(project) configureConfigurations(project) @@ -75,15 +71,15 @@ class ExistingJarBundlePlugin implements Plugin { lib.sourcePath = fileReference(sourceJarName(project)) entries += lib } - + project.tasks[EclipsePlugin.ECLIPSE_CP_TASK_NAME].dependsOn TASK_NAME_CONVERT_TO_BUNDLE project.tasks[EclipsePlugin.ECLIPSE_CP_TASK_NAME].doLast { // copy jar file into project - File jar = JarBundleUtils.firstDependencyJar(getPluginConfiguration(project)) - String jarName = jarName(project) + File depJar = JarBundleUtils.firstDependencyJar(getPluginConfiguration(project)) + File localJar = (project.tasks[TASK_NAME_CONVERT_TO_BUNDLE].target as File).listFiles()[0] project.copy { - from jar + from localJar into project.file('.') - rename { jarName } + rename { jarName(project) } } // copy the source jar file into project @@ -100,7 +96,7 @@ class ExistingJarBundlePlugin implements Plugin { String bundleVersion = project.extensions.bundleInfo.bundleVersion.get() String qualifier = 'qualifier' project.file('META-INF').mkdirs() - project.file('META-INF/MANIFEST.MF').text = JarBundleUtils.manifestContent(jar, template, packageFilter, bundleVersion, qualifier) + project.file('META-INF/MANIFEST.MF').text = JarBundleUtils.manifestContent([depJar, localJar], template, packageFilter, bundleVersion, qualifier).replace("Bundle-ClassPath: .", "Bundle-ClassPath: ${jarName(project)}") } } } @@ -109,7 +105,6 @@ class ExistingJarBundlePlugin implements Plugin { project.tasks.create(TASK_NAME_CONVERT_TO_BUNDLE, ConvertOsgiBundleTask) { group = Constants.gradleTaskGroupName dependsOn project.getConfigurations().getByName(PLUGIN_CONFIGURATION_NAME) - bundleName = project.extensions.bundleInfo.bundleName bundleVersion = project.extensions.bundleInfo.bundleVersion qualifier = project.extensions.bundleInfo.qualifier @@ -118,6 +113,7 @@ class ExistingJarBundlePlugin implements Plugin { resources = project.extensions.bundleInfo.resources target = new File(project.buildDir, "$BUNDLES_STAGING_FOLDER/plugins") pluginConfiguration = getPluginConfiguration(project) + dependsOn 'jar' } } diff --git a/buildSrc/src/main/groovy/eclipsebuild/jar/JarBundleUtils.groovy b/buildSrc/src/main/groovy/eclipsebuild/jar/JarBundleUtils.groovy index e174dc13b..adbf89864 100644 --- a/buildSrc/src/main/groovy/eclipsebuild/jar/JarBundleUtils.groovy +++ b/buildSrc/src/main/groovy/eclipsebuild/jar/JarBundleUtils.groovy @@ -47,26 +47,27 @@ class JarBundleUtils { dependency.moduleArtifacts.find { it.classifier == 'sources' } } - - static String manifestContent(File jar, String template, String packageFilter, String bundleVersion, String qualifier, String sourceReference = null) { - List packageNames = packageNames(jar, packageFilter) as List + static String manifestContent(Iterable jars, String template, String packageFilter, String bundleVersion, String qualifier, String sourceReference = null) { + List packageNames = packageNames(jars, packageFilter) as List packageNames.sort() String fullVersion = "${bundleVersion}.${qualifier}" manifestFor(template, packageNames, bundleVersion, fullVersion, sourceReference) } - private static Set packageNames(File jar, String filteredPackagesPattern) { + private static Set packageNames(Iterable jars, String filteredPackagesPattern) { def result = [] as Set Pattern filteredPackages = Pattern.compile(filteredPackagesPattern) - new ZipInputStream(new FileInputStream(jar)).withCloseable { zip -> - ZipEntry e - while (e = zip.nextEntry) { - if (!e.directory && e.name.endsWith(".class")) { - int index = e.name.lastIndexOf('/') - if (index < 0) index = e.name.length() - String packageName = e.name.substring(0, index).replace('/', '.') - if (!packageName.matches(filteredPackages)) { - result.add(packageName) + jars.each { jar-> + new ZipInputStream(new FileInputStream(jar)).withCloseable { zip -> + ZipEntry e + while (e = zip.nextEntry) { + if (!e.directory && e.name.endsWith(".class")) { + int index = e.name.lastIndexOf('/') + if (index < 0) index = e.name.length() + String packageName = e.name.substring(0, index).replace('/', '.') + if (!packageName.matches(filteredPackages)) { + result.add(packageName) + } } } } diff --git a/gradle/config/checkstyle/required-header.txt b/gradle/config/checkstyle/required-header.txt index 28c13bc00..1cfe15bc8 100644 --- a/gradle/config/checkstyle/required-header.txt +++ b/gradle/config/checkstyle/required-header.txt @@ -1,5 +1,5 @@ ^/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*$ -^ \* Copyright \(c\) (2019|2020) Gradle Inc\.$ +^ \* Copyright \(c\) (2019|2020|2021|2022) Gradle Inc\.$ ^ \*$ ^ \* This program and the accompanying materials are made$ ^ \* available under the terms of the Eclipse Public License 2.0$ diff --git a/org.eclipse.buildship.core.test/src/main/groovy/org/eclipse/buildship/core/GradleBuildConnectionCachingTest.groovy b/org.eclipse.buildship.core.test/src/main/groovy/org/eclipse/buildship/core/GradleBuildConnectionCachingTest.groovy index ef2327943..d2ebcca8e 100644 --- a/org.eclipse.buildship.core.test/src/main/groovy/org/eclipse/buildship/core/GradleBuildConnectionCachingTest.groovy +++ b/org.eclipse.buildship.core.test/src/main/groovy/org/eclipse/buildship/core/GradleBuildConnectionCachingTest.groovy @@ -28,7 +28,8 @@ import org.eclipse.buildship.core.internal.CorePlugin import org.eclipse.buildship.core.internal.console.ProcessStreamsProvider import org.eclipse.buildship.core.internal.test.fixtures.TestProcessStreamProvider import org.eclipse.buildship.core.internal.util.gradle.IdeFriendlyClassLoading -import org.eclipse.buildship.core.internal.workspace.EclipseModelUtils +import org.eclipse.buildship.core.internal.workspace.ExtendedEclipseModelUtils +import org.eclipse.buildship.model.ExtendedEclipseModel class GradleBuildConnectionCachingTest extends BaseProjectConfiguratorTest { @@ -88,8 +89,8 @@ class GradleBuildConnectionCachingTest extends BaseProjectConfiguratorTest { def "Build action loads value from cache during synchronization"() { setup: ResultHandler> resultHandler = Mock(ResultHandler) - Function firstAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(EclipseProject.class)).run() } - Function secondAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(EclipseProject.class)).run(resultHandler) } + Function firstAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class)).run() } + Function secondAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class)).run(resultHandler) } TestConfigurator firstConfigurator = new TestConfigurator(firstAction) TestConfigurator secondConfigurator = new TestConfigurator(secondAction) registerConfigurator(firstConfigurator) @@ -108,8 +109,8 @@ class GradleBuildConnectionCachingTest extends BaseProjectConfiguratorTest { def "Build action loads value from cache during synchronization while supplying eclipseRuntime"() { setup: ResultHandler> resultHandler = Mock(ResultHandler) - Function firstAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(EclipseProject.class, EclipseRuntime.class, EclipseModelUtils.buildEclipseRuntimeConfigurer())).run() } - Function secondAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(EclipseProject.class, EclipseRuntime.class, EclipseModelUtils.buildEclipseRuntimeConfigurer())).run(resultHandler) } + Function firstAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class, EclipseRuntime.class, ExtendedEclipseModelUtils.buildEclipseRuntimeConfigurer())).run() } + Function secondAction = { ProjectConnection p -> p.action(IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class, EclipseRuntime.class, ExtendedEclipseModelUtils.buildEclipseRuntimeConfigurer())).run(resultHandler) } TestConfigurator firstConfigurator = new TestConfigurator(firstAction) TestConfigurator secondConfigurator = new TestConfigurator(secondAction) registerConfigurator(firstConfigurator) diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/GradleBuild.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/GradleBuild.java index abb0b1076..06b423404 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/GradleBuild.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/GradleBuild.java @@ -87,7 +87,7 @@ public interface GradleBuild { * You can load the default models. * Also, You can load custom models provided by Gradle plugins or even inject your own with an init script: *

-     *     connection.model(CustomModel.class).withArguments("--init-script", "/path/to/init-script/with/model").get();
+     *     connection.model(ExtendedEclipseModel.class).withArguments("--init-script", "/path/to/init-script/with/model").get();
      * 
* An example project with custom model loading is available at https://github.com/eclipse/buildship/tree/master/samples/custom-model. * diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/CorePlugin.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/CorePlugin.java index 13fdf5f7b..4e460bd76 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/CorePlugin.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/CorePlugin.java @@ -9,6 +9,8 @@ ******************************************************************************/ package org.eclipse.buildship.core.internal; +import java.io.File; +import java.util.Arrays; import java.util.Dictionary; import java.util.Hashtable; import java.util.Map; @@ -23,6 +25,7 @@ import com.google.common.collect.Maps; import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; @@ -309,4 +312,14 @@ public static ToolingApiOperationManager operationManager() { public static ExtensionManager extensionManager() { return getInstance().extensionManager; } + + public static File pluginLocation(String pluginId) { + try { + BundleContext bundleContext = getInstance().getBundle().getBundleContext(); + Bundle bundle = Arrays.stream(bundleContext.getBundles()).filter(b -> b.getSymbolicName().equals(pluginId)).findFirst().get(); + return FileLocator.getBundleFile(bundle); + } catch (Exception e) { + throw new GradlePluginsRuntimeException("Cannot retrieve location of plugin " + pluginId, e); + } + } } diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/DefaultGradleBuild.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/DefaultGradleBuild.java index 9a27a7db2..33efcab62 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/DefaultGradleBuild.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/DefaultGradleBuild.java @@ -53,6 +53,7 @@ import org.eclipse.buildship.core.internal.util.gradle.IdeAttachedProjectConnection; import org.eclipse.buildship.core.internal.workspace.ConnectionAwareLauncherProxy; import org.eclipse.buildship.core.internal.workspace.DefaultModelProvider; +import org.eclipse.buildship.core.internal.workspace.ExtendedEclipseModelUtils; import org.eclipse.buildship.core.internal.workspace.ImportRootProjectOperation; import org.eclipse.buildship.core.internal.workspace.InternalGradleBuild; import org.eclipse.buildship.core.internal.workspace.ModelProvider; @@ -223,7 +224,8 @@ public void runInToolingApi(CancellationTokenSource tokenSource, IProgressMonito SubMonitor progress = SubMonitor.convert(monitor, 5); progress.setTaskName((String.format("Synchronizing Gradle build at %s with workspace", this.gradleBuild.getBuildConfig().getRootProjectDirectory()))); new ImportRootProjectOperation(this.gradleBuild.getBuildConfig(), this.newProjectHandler).run(progress.newChild(1)); - Set allProjects = collectAll(this.gradleBuild.modelProvider.fetchEclipseProjectAndRunSyncTasks(tokenSource, progress.newChild(1))); + Map result = this.gradleBuild.withConnection(connection -> ExtendedEclipseModelUtils.collectEclipseModels(ExtendedEclipseModelUtils.runTasksAndQueryModels(connection)), progress.newChild(1)); + Set allProjects = collectAll(result); new ValidateProjectLocationOperation(allProjects).run(progress.newChild(1)); new RunOnImportTasksOperation(allProjects, this.gradleBuild.getBuildConfig()).run(progress.newChild(1), tokenSource); this.failures = new SynchronizeGradleBuildOperation(allProjects, this.gradleBuild, this.newProjectHandler, diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/configuration/GradleArguments.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/configuration/GradleArguments.java index 234f09381..c1619a238 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/configuration/GradleArguments.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/configuration/GradleArguments.java @@ -14,6 +14,7 @@ import java.io.InputStream; import java.net.URL; import java.net.URLConnection; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; @@ -27,8 +28,11 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import com.google.common.io.ByteStreams; import com.google.common.io.Files; +import org.eclipse.core.runtime.Platform; + import org.eclipse.buildship.core.GradleDistribution; import org.eclipse.buildship.core.internal.CorePlugin; import org.eclipse.buildship.core.internal.GradlePluginsRuntimeException; @@ -45,7 +49,8 @@ */ public final class GradleArguments { - private static final String INITSCRIPT_LOCATION="/org/eclipse/buildship/core/internal/configuration/eclipsePlugin.gradle"; + private static final String INITSCRIPT_NAME = "buildshipInitScript.gradle"; + private static final String INITSCRIPT_LOCATION="/org/eclipse/buildship/core/internal/configuration/" + INITSCRIPT_NAME; private final File rootDir; private final GradleDistribution gradleDistribution; @@ -146,30 +151,58 @@ private static String buildScanArgumentFor(BuildEnvironment environment) { } private static List getInitScriptArguments() { - File initScript = getEclipsePluginInitScriptLocation(); + File initScriptLocation = getEclipsePluginInitScriptLocation(); try { - if (!initScript.exists()) { - Files.createParentDirs(initScript); - Files.touch(initScript); - URL resource = GradleVersion.class.getResource(INITSCRIPT_LOCATION); - if (resource == null) { - throw new GradlePluginsRuntimeException(String.format("Resource '%s' not found.", INITSCRIPT_LOCATION)); - } - - URLConnection connection = resource.openConnection(); - try (InputStream inputStream = connection.getInputStream()) { - Files.asByteSink(initScript).writeFrom(inputStream); - } - + String existingInitScriptText = readInitScriptContent(initScriptLocation); + String newInitScriptContent = createInitScriptContent(); + if (existingInitScriptText == null || !existingInitScriptText.equals(newInitScriptContent)) { + writeInitScript(initScriptLocation, createInitScriptContent()); } - return Arrays.asList("--init-script", initScript.getAbsolutePath()); + return Arrays.asList("--init-script", initScriptLocation.getAbsolutePath()); } catch (IOException e) { throw new GradlePluginsRuntimeException("Failed to create init script", e); } } + + + private static void writeInitScript(File initScript, String content) throws IOException { + Files.createParentDirs(initScript); + Files.touch(initScript); + URL resource = GradleVersion.class.getResource(INITSCRIPT_LOCATION); + if (resource == null) { + throw new GradlePluginsRuntimeException(String.format("Resource '%s' not found.", INITSCRIPT_LOCATION)); + } + + URLConnection connection = resource.openConnection(); + try (InputStream inputStream = connection.getInputStream()) { + Files.asByteSink(initScript).write(content.getBytes()); + } + } + + private static String readInitScriptContent(File initScript) throws IOException { + if (initScript.exists() && initScript.isFile()) { + return Files.asCharSource(initScript, StandardCharsets.UTF_8).read(); + } else { + return null; + } + } + + private static String createInitScriptContent() throws IOException { + URL resource = GradleVersion.class.getResource(INITSCRIPT_LOCATION); + if (resource == null) { + throw new GradlePluginsRuntimeException(String.format("Resource '%s' not found.", INITSCRIPT_LOCATION)); + } + + URLConnection connection = resource.openConnection(); + try (InputStream inputStream = connection.getInputStream()) { + String ideModelClassapth = CorePlugin.pluginLocation("org.gradle.toolingapi").getAbsolutePath() + (Platform.inDevelopmentMode() ? "/bin/main" : ""); + return new String(ByteStreams.toByteArray(inputStream)).replace("IDEMODEL_CLASSPATH", ideModelClassapth.replaceAll("\\\\", "/")); + } + } + private static File getEclipsePluginInitScriptLocation() { - return CorePlugin.getInstance().getStateLocation().append("init.d").append("eclipsePlugin.gradle").toFile(); + return CorePlugin.getInstance().getStateLocation().append("init.d").append(INITSCRIPT_NAME).toFile(); } } diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatExtendedEclipseModel.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatExtendedEclipseModel.java new file mode 100644 index 000000000..e78172725 --- /dev/null +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatExtendedEclipseModel.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2022 Gradle Inc. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************/ +package org.eclipse.buildship.core.internal.util.gradle; + +import java.util.List; + +import org.gradle.tooling.model.eclipse.EclipseProject; + +import org.eclipse.buildship.model.ExtendedEclipseModel; +import org.eclipse.buildship.model.ProjectInGradleConfiguration; + +public class CompatExtendedEclipseModel implements ExtendedEclipseModel { + + private final ExtendedEclipseModel delegate; + + public CompatExtendedEclipseModel(ExtendedEclipseModel delegate) { + this.delegate = delegate; + } + + @Override + public EclipseProject getEclipseProject() { + return new CompatEclipseProject(this.delegate.getEclipseProject()); + } + + @Override + public List getProjects() { + return this.delegate.getProjects(); + } + +} diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatProjectConnection.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatProjectConnection.java index b7e4812a6..e5dcfd4fb 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatProjectConnection.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/CompatProjectConnection.java @@ -31,12 +31,13 @@ import org.gradle.tooling.ResultHandler; import org.gradle.tooling.TestLauncher; import org.gradle.tooling.events.OperationType; -import org.gradle.tooling.model.eclipse.EclipseProject; import com.google.common.collect.Maps; +import org.eclipse.buildship.model.ExtendedEclipseModel; + /** - * Injects {@link CompatEclipseProject} into all model queries requesting the {@link EclipseProject} + * Injects {@link CompatEclipseProject} into all model queries requesting the {@link ExtendedEclipseModel} * model. * * @author Donat Csikos @@ -96,17 +97,17 @@ public void notifyDaemonsAboutChangedPaths(List changedPaths) { @SuppressWarnings("unchecked") private static T injectCompatibilityModel(T model) { - if (model instanceof EclipseProject) { - return (T) new CompatEclipseProject((EclipseProject) model); + if (model instanceof ExtendedEclipseModel) { + return (T) new CompatExtendedEclipseModel((ExtendedEclipseModel) model); } else if (model instanceof Map) { - Map compatModel = Maps.newLinkedHashMap(); + Map compatModel = Maps.newLinkedHashMap(); for (Entry entry : ((Map)model).entrySet()) { - if (!(entry.getKey() instanceof String) || !(entry.getValue() instanceof EclipseProject)) { + if (!(entry.getKey() instanceof String) || !(entry.getValue() instanceof ExtendedEclipseModel)) { return model; } String buildPath = (String) entry.getKey(); - EclipseProject eclipseProject = (EclipseProject) entry.getValue(); - compatModel.put(buildPath, (EclipseProject) injectCompatibilityModel(eclipseProject)); + ExtendedEclipseModel extendedEclipseModel = (ExtendedEclipseModel) entry.getValue(); + compatModel.put(buildPath, (ExtendedEclipseModel) injectCompatibilityModel(extendedEclipseModel)); } return (T) compatModel; } else { diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/BaseConfigurator.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/BaseConfigurator.java index d22228682..7e3ec4f9b 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/BaseConfigurator.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/BaseConfigurator.java @@ -37,6 +37,8 @@ import org.eclipse.buildship.core.internal.CorePlugin; import org.eclipse.buildship.core.internal.util.gradle.GradleVersion; import org.eclipse.buildship.core.internal.util.gradle.HierarchicalElementUtils; +import org.eclipse.buildship.model.ExtendedEclipseModel; + public class BaseConfigurator implements ProjectConfigurator { private Map locationToProject; @@ -49,7 +51,8 @@ public void init(InitializationContext context, IProgressMonitor monitor) { try { Collection rootModels = gradleBuild.withConnection(connection -> { this.gradleVersion = GradleVersion.version(connection.getModel(BuildEnvironment.class).getGradle().getGradleVersion()); - return EclipseModelUtils.queryModels(connection).values(); + Map extendedEclipseModels = ExtendedEclipseModelUtils.queryModels(connection); + return ExtendedEclipseModelUtils.collectEclipseModels(extendedEclipseModels).values(); }, monitor); this.locationToProject = rootModels.stream() .flatMap(p -> HierarchicalElementUtils.getAll(p).stream()) diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/DefaultModelProvider.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/DefaultModelProvider.java index 652163943..d9174fbd5 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/DefaultModelProvider.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/DefaultModelProvider.java @@ -72,7 +72,7 @@ public Map fetchEclipseProjectAndRunSyncTasks(final Can return executeOperation(() -> // TODO (donat) Right now, project configurators can only get cached model query results if they invoke the same exact actions // used below. We should fix this by letting configurators declare their required models. - DefaultModelProvider.this.gradleBuild.withConnection(connection -> EclipseModelUtils.runTasksAndQueryModels(connection), tokenSource, monitor), + DefaultModelProvider.this.gradleBuild.withConnection(connection -> ExtendedEclipseModelUtils.collectEclipseModels(ExtendedEclipseModelUtils.runTasksAndQueryModels(connection)), tokenSource, monitor), FetchStrategy.FORCE_RELOAD, EclipseProject.class); } diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/EclipseModelUtils.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/ExtendedEclipseModelUtils.java similarity index 70% rename from org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/EclipseModelUtils.java rename to org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/ExtendedEclipseModelUtils.java index 1cc7b27b7..dbaa7978c 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/EclipseModelUtils.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/ExtendedEclipseModelUtils.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.stream.Collectors; import org.gradle.tooling.BuildAction; @@ -24,6 +25,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; @@ -33,27 +35,36 @@ import org.eclipse.buildship.core.internal.util.gradle.GradleVersion; import org.eclipse.buildship.core.internal.util.gradle.IdeFriendlyClassLoading; import org.eclipse.buildship.core.internal.util.gradle.SimpleIntermediateResultHandler; +import org.eclipse.buildship.model.ExtendedEclipseModel; -public final class EclipseModelUtils { +public final class ExtendedEclipseModelUtils { private static final String EXCEPTION_DUPLICATE_ROOT_ELEMENT_TEXT = "Duplicate root element "; - private EclipseModelUtils() { + private ExtendedEclipseModelUtils() { } - public static Map queryModels(ProjectConnection connection) { + public static Map collectEclipseModels(Map input) { + Builder result = ImmutableMap.builder(); + for (Entry entry : input.entrySet()) { + result.put(entry.getKey(), entry.getValue().getEclipseProject()); + } + return result.build(); + } + + public static Map queryModels(ProjectConnection connection) { BuildEnvironment buildEnvironment = connection.getModel(BuildEnvironment.class); GradleVersion gradleVersion = GradleVersion.version(buildEnvironment.getGradle().getGradleVersion()); if (gradleVersion.supportsSendingReservedProjects()) { return queryCompositeModelWithRuntimInfo(connection, gradleVersion); } else if (gradleVersion.supportsCompositeBuilds()) { - return queryCompositeModel(EclipseProject.class, connection); + return queryCompositeModel(ExtendedEclipseModel.class, connection); } else { - return ImmutableMap.of(":", queryModel(EclipseProject.class, connection)); + return ImmutableMap.of(":", queryModel(ExtendedEclipseModel.class, connection)); } } - public static Map runTasksAndQueryModels(ProjectConnection connection) { + public static Map runTasksAndQueryModels(ProjectConnection connection) { BuildEnvironment buildEnvironment = connection.getModel(BuildEnvironment.class); GradleVersion gradleVersion = GradleVersion.version(buildEnvironment.getGradle().getGradleVersion()); if (gradleVersion.supportsSendingReservedProjects()) { @@ -61,9 +72,9 @@ public static Map runTasksAndQueryModels(ProjectConnecti } else if (gradleVersion.supportsSyncTasksInEclipsePluginConfig()) { return runTasksAndQueryCompositeModel(connection, gradleVersion); } else if (gradleVersion.supportsCompositeBuilds()) { - return queryCompositeModel(EclipseProject.class, connection); + return queryCompositeModel(ExtendedEclipseModel.class, connection); } else { - return ImmutableMap.of(":", queryModel(EclipseProject.class, connection)); + return ImmutableMap.of(":", queryModel(ExtendedEclipseModel.class, connection)); } } @@ -75,7 +86,7 @@ public static EclipseRuntimeConfigurer buildEclipseRuntimeConfigurer() { } - private static Map runTasksAndQueryCompositeModelWithRuntimInfo(ProjectConnection connection, GradleVersion gradleVersion) { + private static Map runTasksAndQueryCompositeModelWithRuntimInfo(ProjectConnection connection, GradleVersion gradleVersion) { EclipseRuntimeConfigurer buildEclipseRuntimeConfigurer = buildEclipseRuntimeConfigurer(); try { BuildAction runSyncTasksAction = IdeFriendlyClassLoading.loadClass(TellGradleToRunSynchronizationTasks.class); @@ -84,10 +95,10 @@ private static Map runTasksAndQueryCompositeModelWithRun BuildAction runClosedProjectTasksAction = new CompositeModelQuery<>(RunClosedProjectBuildDependencies.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer); BuildActionSequence projectsLoadedAction = new BuildActionSequence(runSyncTasksAction, runClosedProjectTasksAction); return runPhasedModelQuery(connection, gradleVersion, projectsLoadedAction, IdeFriendlyClassLoading - .loadCompositeModelQuery(EclipseProject.class, EclipseRuntime.class,buildEclipseRuntimeConfigurer)); + .loadCompositeModelQuery(ExtendedEclipseModel.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer)); } return runPhasedModelQuery(connection, gradleVersion, runSyncTasksAction, IdeFriendlyClassLoading - .loadCompositeModelQuery(EclipseProject.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer)); + .loadCompositeModelQuery(ExtendedEclipseModel.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer)); } catch (BuildActionFailureException e) { // For gradle >= 5.5 project name deduplication happens in gradle. In case gradle can't deduplicate then create an UnsupportedConfigurationException // to match the behaviour with previous gradle versions. @@ -101,19 +112,19 @@ private static Map runTasksAndQueryCompositeModelWithRun } } - private static Map runTasksAndQueryCompositeModel(ProjectConnection connection, GradleVersion gradleVersion) { - return runPhasedModelQuery(connection, gradleVersion, IdeFriendlyClassLoading.loadClass(TellGradleToRunSynchronizationTasks.class), IdeFriendlyClassLoading.loadCompositeModelQuery(EclipseProject.class)); + private static Map runTasksAndQueryCompositeModel(ProjectConnection connection, GradleVersion gradleVersion) { + return runPhasedModelQuery(connection, gradleVersion, IdeFriendlyClassLoading.loadClass(TellGradleToRunSynchronizationTasks.class), IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class)); } - private static Map runPhasedModelQuery(ProjectConnection connection, GradleVersion gradleVersion, - BuildAction projectsLoadedAction, BuildAction> query) { - SimpleIntermediateResultHandler> resultHandler = new SimpleIntermediateResultHandler<>(); + private static Map runPhasedModelQuery(ProjectConnection connection, GradleVersion gradleVersion, + BuildAction projectsLoadedAction, BuildAction> query) { + SimpleIntermediateResultHandler> resultHandler = new SimpleIntermediateResultHandler<>(); connection.action().projectsLoaded(projectsLoadedAction, new SimpleIntermediateResultHandler()).buildFinished(query, resultHandler).build().forTasks().run(); return resultHandler.getValue(); } - private static Map queryCompositeModelWithRuntimInfo(ProjectConnection connection, GradleVersion gradleVersion) { - BuildAction> query = IdeFriendlyClassLoading.loadCompositeModelQuery(EclipseProject.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer()); + private static Map queryCompositeModelWithRuntimInfo(ProjectConnection connection, GradleVersion gradleVersion) { + BuildAction> query = IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer()); return connection.action(query).run(); } diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/WtpConfigurator.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/WtpConfigurator.java index 0dd3f2b70..f6e34ae32 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/WtpConfigurator.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/WtpConfigurator.java @@ -63,7 +63,7 @@ public void init(InitializationContext context, IProgressMonitor monitor) { // TODO (donat) add required model declarations to the project configurator extension point GradleBuild gradleBuild = context.getGradleBuild(); try { - Collection rootModels = gradleBuild.withConnection(connection -> EclipseModelUtils.queryModels(connection).values(), monitor); + Collection rootModels = gradleBuild.withConnection(connection -> ExtendedEclipseModelUtils.collectEclipseModels(ExtendedEclipseModelUtils.queryModels(connection)).values(), monitor); this.locationToProject = rootModels.stream() .flatMap(p -> HierarchicalElementUtils.getAll(p).stream()) .collect(Collectors.toMap(p -> p.getProjectDirectory(), p -> p)); diff --git a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/eclipsePlugin.gradle b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle similarity index 69% rename from org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/eclipsePlugin.gradle rename to org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle index d30c9240d..f4f386c5f 100644 --- a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/eclipsePlugin.gradle +++ b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle @@ -8,7 +8,13 @@ * SPDX-License-Identifier: EPL-2.0 ******************************************************************************/ initscript { - allprojects { - apply plugin: "eclipse" + + dependencies { + classpath files('IDEMODEL_CLASSPATH') } -} \ No newline at end of file +} + +rootProject { + apply plugin: "eclipse" + apply plugin: org.eclipse.buildship.model.internal.ExtendedEclipseModelPlugin +} diff --git a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/gradle/buildship-runtime.properties b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/gradle/buildship-runtime.properties index 392116b9a..537ed6488 100644 --- a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/gradle/buildship-runtime.properties +++ b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/gradle/buildship-runtime.properties @@ -1 +1 @@ -ToolingApiVersion=7.1.1 \ No newline at end of file +ToolingApiVersion=7.4.1 \ No newline at end of file diff --git a/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/view/task/BuildInvocationsTest.groovy b/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/view/task/BuildInvocationsTest.groovy index 2c120e4c2..04f5e994f 100644 --- a/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/view/task/BuildInvocationsTest.groovy +++ b/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/view/task/BuildInvocationsTest.groovy @@ -18,8 +18,10 @@ import org.eclipse.core.runtime.NullProgressMonitor import org.eclipse.buildship.core.internal.CorePlugin import org.eclipse.buildship.core.internal.util.gradle.Path +import org.eclipse.buildship.core.internal.workspace.ExtendedEclipseModelUtils import org.eclipse.buildship.core.internal.workspace.FetchStrategy import org.eclipse.buildship.core.internal.workspace.ModelProvider +import org.eclipse.buildship.model.ExtendedEclipseModel import org.eclipse.buildship.ui.internal.test.fixtures.ProjectSynchronizationSpecification class BuildInvocationsTest extends ProjectSynchronizationSpecification { @@ -73,7 +75,8 @@ class BuildInvocationsTest extends ProjectSynchronizationSpecification { IProject project = findProject('project-with-subtasks') ModelProvider modelProvider = CorePlugin.internalGradleWorkspace().getBuild(project).get().modelProvider - Map eclipseProjects = modelProvider.fetchModels(EclipseProject, FetchStrategy.LOAD_IF_NOT_CACHED, GradleConnector.newCancellationTokenSource(), new NullProgressMonitor()) + Map models = modelProvider.fetchModels(ExtendedEclipseModel, FetchStrategy.LOAD_IF_NOT_CACHED, GradleConnector.newCancellationTokenSource(), new NullProgressMonitor()) + Map eclipseProjects = ExtendedEclipseModelUtils.collectEclipseModels(models) GradleProject gradleProject = eclipseProjects[':'].gradleProject Map pathToBuildInvocations = BuildInvocations.collectAll(gradleProject) @@ -153,7 +156,8 @@ class BuildInvocationsTest extends ProjectSynchronizationSpecification { IProject project = findProject('project-without-tasks') ModelProvider modelProvider = CorePlugin.internalGradleWorkspace().getBuild(project).get().modelProvider - Map eclipseProjects = modelProvider.fetchModels(EclipseProject, FetchStrategy.LOAD_IF_NOT_CACHED, GradleConnector.newCancellationTokenSource(), new NullProgressMonitor()) + Map models = modelProvider.fetchModels(ExtendedEclipseModel, FetchStrategy.LOAD_IF_NOT_CACHED, GradleConnector.newCancellationTokenSource(), new NullProgressMonitor()) + Map eclipseProjects = ExtendedEclipseModelUtils.collectEclipseModels(models) GradleProject gradleProject = eclipseProjects[':'].gradleProject Map pathToBuildInvocations = BuildInvocations.collectAll(gradleProject) diff --git a/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/workspace/AddBuildshipNatureHandlerTest.groovy b/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/workspace/AddBuildshipNatureHandlerTest.groovy index 6c20ba2a6..4ae177bba 100644 --- a/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/workspace/AddBuildshipNatureHandlerTest.groovy +++ b/org.eclipse.buildship.ui.test/src/main/groovy/org/eclipse/buildship/ui/internal/workspace/AddBuildshipNatureHandlerTest.groovy @@ -12,7 +12,6 @@ package org.eclipse.buildship.ui.internal.workspace import org.gradle.api.JavaVersion import org.gradle.tooling.CancellationTokenSource import org.gradle.tooling.GradleConnector -import org.gradle.tooling.model.eclipse.EclipseProject import spock.lang.IgnoreIf import org.eclipse.core.commands.Command @@ -23,14 +22,15 @@ import org.eclipse.core.runtime.IProgressMonitor import org.eclipse.core.runtime.NullProgressMonitor import org.eclipse.jface.viewers.StructuredSelection +import org.eclipse.buildship.core.GradleDistribution import org.eclipse.buildship.core.internal.CorePlugin import org.eclipse.buildship.core.internal.configuration.BuildConfiguration import org.eclipse.buildship.core.internal.configuration.WorkspaceConfiguration import org.eclipse.buildship.core.internal.event.Event import org.eclipse.buildship.core.internal.event.EventListener -import org.eclipse.buildship.core.GradleDistribution import org.eclipse.buildship.core.internal.workspace.FetchStrategy import org.eclipse.buildship.core.internal.workspace.GradleNatureAddedEvent +import org.eclipse.buildship.model.ExtendedEclipseModel import org.eclipse.buildship.ui.internal.test.fixtures.EclipseProjects import org.eclipse.buildship.ui.internal.test.fixtures.WorkspaceSpecification @@ -91,7 +91,7 @@ class AddBuildshipNatureHandlerTest extends WorkspaceSpecification { BuildConfiguration buildConfig = createInheritingBuildConfiguration(projectLocation) CancellationTokenSource tokenSource = GradleConnector.newCancellationTokenSource() IProgressMonitor monitor = new NullProgressMonitor() - return CorePlugin.internalGradleWorkspace().getGradleBuild(buildConfig).getModelProvider().fetchModels(EclipseProject.class, FetchStrategy.FROM_CACHE_ONLY, tokenSource, monitor) != null + return CorePlugin.internalGradleWorkspace().getGradleBuild(buildConfig).getModelProvider().fetchModels(ExtendedEclipseModel.class, FetchStrategy.FROM_CACHE_ONLY, tokenSource, monitor) != null } private class TestEventListener implements EventListener { diff --git a/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/execution/OpenTestSourceFileJob.java b/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/execution/OpenTestSourceFileJob.java index 386884e5f..cfc2f68b2 100644 --- a/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/execution/OpenTestSourceFileJob.java +++ b/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/execution/OpenTestSourceFileJob.java @@ -69,6 +69,7 @@ import org.eclipse.buildship.core.internal.util.gradle.Path; import org.eclipse.buildship.core.internal.workspace.FetchStrategy; import org.eclipse.buildship.core.internal.workspace.ModelProvider; +import org.eclipse.buildship.model.ExtendedEclipseModel; import org.eclipse.buildship.ui.internal.UiPlugin; import org.eclipse.buildship.ui.internal.util.editor.EditorUtils; @@ -169,7 +170,7 @@ private List findProjectContainingTest(Path projectPath, CancellationT BuildConfiguration buildConfig = CorePlugin.configurationManager().loadProjectConfiguration(project.get()).getBuildConfiguration(); ModelProvider modelProvider = CorePlugin.internalGradleWorkspace().getGradleBuild(buildConfig).getModelProvider(); - Collection eclipseProjects = collectAll(modelProvider.fetchModels(EclipseProject.class, FetchStrategy.LOAD_IF_NOT_CACHED, tokenSource, monitor).values()); + Collection eclipseProjects = collectFromModel(modelProvider.fetchModels(ExtendedEclipseModel.class, FetchStrategy.LOAD_IF_NOT_CACHED, tokenSource, monitor).values()); List result = new ArrayList<>(); for (EclipseProject eclipseProject : eclipseProjects) { @@ -185,11 +186,11 @@ private List findProjectContainingTest(Path projectPath, CancellationT return result; } - private static Collection collectAll(Collection projects) { + private static Collection collectFromModel(Collection models) { Collection result = Lists.newArrayList(); - for (EclipseProject eclipseProject : projects) { - result.add(eclipseProject); - collectAll(eclipseProject.getChildren(), result); + for (ExtendedEclipseModel model : models) { + result.add(model.getEclipseProject()); + collectAll(model.getEclipseProject().getChildren(), result); } return result; } diff --git a/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/task/ReloadTaskViewJob.java b/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/task/ReloadTaskViewJob.java index 703ca87e1..2c49e1a54 100644 --- a/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/task/ReloadTaskViewJob.java +++ b/org.eclipse.buildship.ui/src/main/java/org/eclipse/buildship/ui/internal/view/task/ReloadTaskViewJob.java @@ -31,8 +31,10 @@ import org.eclipse.buildship.core.internal.operation.ToolingApiJob; import org.eclipse.buildship.core.internal.operation.ToolingApiJobResultHandler; import org.eclipse.buildship.core.internal.operation.ToolingApiStatus; +import org.eclipse.buildship.core.internal.workspace.ExtendedEclipseModelUtils; import org.eclipse.buildship.core.internal.workspace.FetchStrategy; import org.eclipse.buildship.core.internal.workspace.InternalGradleBuild; +import org.eclipse.buildship.model.ExtendedEclipseModel; /** * Loads the tasks for all projects into the cache and refreshes the task view afterwards. @@ -61,7 +63,8 @@ private TaskViewContent loadContent(CancellationTokenSource tokenSource, IProgre for (InternalGradleBuild gradleBuild : CorePlugin.internalGradleWorkspace().getGradleBuilds()) { try { BuildEnvironment buildEnvironment = gradleBuild.getModelProvider().fetchModel(BuildEnvironment.class, this.modelFetchStrategy, tokenSource, monitor); - Map models = gradleBuild.getModelProvider().fetchModels(EclipseProject.class, this.modelFetchStrategy, tokenSource, monitor); + Map extendedEclipseModel = gradleBuild.getModelProvider().fetchModels(ExtendedEclipseModel.class, this.modelFetchStrategy, tokenSource, monitor); + Map models = ExtendedEclipseModelUtils.collectEclipseModels(extendedEclipseModel); allModels.put(gradleBuild.getBuildConfig().getRootProjectDirectory(), models); environments.put(gradleBuild.getBuildConfig().getRootProjectDirectory(), buildEnvironment); } catch (RuntimeException e) { diff --git a/org.gradle.toolingapi/.classpath b/org.gradle.toolingapi/.classpath index 829274b7e..067adc5c4 100644 --- a/org.gradle.toolingapi/.classpath +++ b/org.gradle.toolingapi/.classpath @@ -1,6 +1,237 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.gradle.toolingapi/META-INF/MANIFEST.MF b/org.gradle.toolingapi/META-INF/MANIFEST.MF index 11f657bd9..61d47fa78 100644 --- a/org.gradle.toolingapi/META-INF/MANIFEST.MF +++ b/org.gradle.toolingapi/META-INF/MANIFEST.MF @@ -3,10 +3,11 @@ Bundle-ManifestVersion: 2 Bundle-Name: Gradle Tooling API Bundle-Vendor: Gradle Inc. Bundle-SymbolicName: org.gradle.toolingapi -Bundle-ClassPath: . +Bundle-ClassPath: org.gradle.toolingapi_7.4.1.jar Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.slf4j;version="1.7.2" -Export-Package: org.gradle.api;version="7.4.1", +Export-Package: org.eclipse.buildship.model;version="7.4.1", + org.gradle.api;version="7.4.1", org.gradle.cache;version="7.4.1", org.gradle.cli;version="7.4.1", org.gradle.scripts;version="7.4.1", diff --git a/org.gradle.toolingapi/build.gradle b/org.gradle.toolingapi/build.gradle index 3b539c790..acf6d778c 100644 --- a/org.gradle.toolingapi/build.gradle +++ b/org.gradle.toolingapi/build.gradle @@ -1,9 +1,11 @@ -apply plugin: eclipsebuild.jar.ExistingJarBundlePlugin -apply plugin: 'java' +// TODO rename project to org.eclipse.buildship.idemodel +// TODO assembleTargetPlatform should not be up-to-date when custom model project changes apply plugin: 'eclipse' +apply plugin: eclipsebuild.jar.ExistingJarBundlePlugin dependencies { plugin "org.gradle:gradle-tooling-api:$toolingApiVersion" + implementation "dev.gradleplugins:gradle-api:$toolingApiVersion" // should be implementation gradleApi(), but we need the API from the current Gradle } bundleInfo { @@ -14,3 +16,16 @@ bundleInfo { packageFilter = ".c*jarjar.*|.*impldep.*|.*internal.*|org.gradle(|.concurrent.*|.groovy.*|.initialization.*|.api.+|.wrapper|.util)" resources = files('resources/extra_resources') } + +eclipse.classpath.file.whenMerged { + entries.removeAll { it.path.endsWith('.pom') } +} + +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 + +// Note: due to a classloading issue, Eclipse won't be able to query a Custom tooling API model in development mode (i.e. when you use Run -> Eclipse Application) +// if the custom model classes are not loaded from jars. To work around the problem, project descriptors are configured such that org.gradle.toolingapi.jar is +// used in development mode. This means you have to call the eclipse task after changing the the sources in this project. +// +// tl;dr before clicking Run -> Eclipse Application run :org.gradle.toolingapi:jar if you changed the sources. \ No newline at end of file diff --git a/org.gradle.toolingapi/org.gradle.toolingapi_7.4.1.jar b/org.gradle.toolingapi/org.gradle.toolingapi_7.4.1.jar index c52f0cddc8b08b28b970e3fe2405d6fd3698d27b..a0fef6d48fc619b11cf14e6672f14f8c244409a5 100644 GIT binary patch delta 216349 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%0AK^`>!#3u)wS!5 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 G;r{^Q getProjects(); + + /** + * + * @return the EclipseProject model built into Gradle. + */ + EclipseProject getEclipseProject(); +} diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ProjectInGradleConfiguration.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ProjectInGradleConfiguration.java new file mode 100644 index 000000000..5f1dd216e --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ProjectInGradleConfiguration.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2022 Gradle Inc. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************/ +package org.eclipse.buildship.model; + +import java.io.File; +import java.util.List; + +public interface ProjectInGradleConfiguration { + File getLocation(); + List getSourceSetNames(); +} diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/CustomToolingModelBuilderWithParameter.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/CustomToolingModelBuilderWithParameter.java new file mode 100644 index 000000000..8786d82bd --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/CustomToolingModelBuilderWithParameter.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2022 Gradle Inc. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************/ +package org.eclipse.buildship.model.internal; + +import java.lang.reflect.Field; + +import org.gradle.api.Project; +import org.gradle.plugins.ide.internal.tooling.EclipseModelBuilder; +import org.gradle.plugins.ide.internal.tooling.eclipse.DefaultEclipseProject; +import org.gradle.tooling.model.eclipse.EclipseRuntime; +import org.gradle.tooling.provider.model.ParameterizedToolingModelBuilder; +import org.gradle.tooling.provider.model.ToolingModelBuilder; +import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry; + +import org.eclipse.buildship.model.ExtendedEclipseModel; + +public class CustomToolingModelBuilderWithParameter extends ExtendedEclipseModelBuilder implements ParameterizedToolingModelBuilder { + + public CustomToolingModelBuilderWithParameter(ToolingModelBuilderRegistry registry) { + super(registry); + } + + @Override + public boolean canBuild(String modelName) { + return modelName.equals(ExtendedEclipseModel.class.getName()); + } + + @Override + public Object buildAll(String modelName, EclipseRuntime eclipseRuntime, Project modelRoot) { + ToolingModelBuilder modelBuilder = this.registry.getBuilder("org.gradle.tooling.model.eclipse.EclipseProject"); + + EclipseModelBuilder eclipseModelBuilder = null; + try { + // Gradle 7.x returns LenientModelBuilder which cannot be invoked with a parameter + Field field = modelBuilder.getClass().getDeclaredField("delegate"); + field.setAccessible(true); + eclipseModelBuilder = (EclipseModelBuilder) field.get(modelBuilder); + } catch (Exception e) { + eclipseModelBuilder = (EclipseModelBuilder) modelBuilder; + } + + DefaultEclipseProject eclipseProject = (DefaultEclipseProject) eclipseModelBuilder.buildAll("org.gradle.tooling.model.eclipse.EclipseProject", eclipseRuntime, modelRoot); + return build(eclipseProject, modelRoot); + } + + @Override + public Class getParameterType() { + return EclipseRuntime.class; + } +} diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultExtendedEclipseModel.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultExtendedEclipseModel.java new file mode 100644 index 000000000..d9b1d34ed --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultExtendedEclipseModel.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2022 Gradle Inc. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************/ +package org.eclipse.buildship.model.internal; + +import java.io.Serializable; +import java.util.List; + +import org.gradle.plugins.ide.internal.tooling.eclipse.DefaultEclipseProject; + +import org.eclipse.buildship.model.ProjectInGradleConfiguration; + +public class DefaultExtendedEclipseModel implements Serializable { + + private static final long serialVersionUID = 1L; + private final List projects; + private final DefaultEclipseProject eclipseProject; + + public DefaultExtendedEclipseModel(List projects, DefaultEclipseProject eclipseProject) { + this.projects = projects; + this.eclipseProject = eclipseProject; + } + + public List getProjects() { + return this.projects; + } + + public DefaultEclipseProject getEclipseProject() { + return this.eclipseProject; + } +} diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultProjectInGradleConfiguration.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultProjectInGradleConfiguration.java new file mode 100644 index 000000000..e7c74ac13 --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultProjectInGradleConfiguration.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2022 Gradle Inc. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************/ +package org.eclipse.buildship.model.internal; + +import java.io.File; +import java.io.Serializable; +import java.util.List; + +import org.eclipse.buildship.model.ProjectInGradleConfiguration; + + +public class DefaultProjectInGradleConfiguration implements ProjectInGradleConfiguration, Serializable { + + private final File location; + private final List sourceSetNames; + + public DefaultProjectInGradleConfiguration(File location, List sourceSetNames) { + this.location = location; + this.sourceSetNames = sourceSetNames; + } + + @Override + public File getLocation() { + return this.location; + } + + @Override + public List getSourceSetNames() { + return this.sourceSetNames; + } +} diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelBuilder.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelBuilder.java new file mode 100644 index 000000000..e16004643 --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelBuilder.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2022 Gradle Inc. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************/ +package org.eclipse.buildship.model.internal; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.gradle.api.Project; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.plugins.ide.internal.tooling.eclipse.DefaultEclipseProject; +import org.gradle.tooling.provider.model.ToolingModelBuilder; +import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry; + +import org.eclipse.buildship.model.ExtendedEclipseModel; +import org.eclipse.buildship.model.ProjectInGradleConfiguration; + +class ExtendedEclipseModelBuilder implements ToolingModelBuilder { + + protected final ToolingModelBuilderRegistry registry; + + public ExtendedEclipseModelBuilder(ToolingModelBuilderRegistry registry) { + this.registry = registry; + } + + @Override + public boolean canBuild(String modelName) { + return modelName.equals(ExtendedEclipseModel.class.getName()); + } + + @Override + public Object buildAll(String modelName, Project modelRoot) { + ToolingModelBuilder eclipseModelBuilder = this.registry.getBuilder("org.gradle.tooling.model.eclipse.EclipseProject"); + DefaultEclipseProject eclipseProject = (DefaultEclipseProject) eclipseModelBuilder.buildAll(modelName, modelRoot); + return build(eclipseProject, modelRoot); + } + + + protected DefaultExtendedEclipseModel build(DefaultEclipseProject eclipseProject, Project modelRoot) { + List projects = new ArrayList<>(); + for (Project project : modelRoot.getRootProject().getAllprojects()) { + File location = project.getProjectDir(); + ArrayList sourceSetNames = new ArrayList<>(); + try { + sourceSetNames.addAll(readSourceSetNamesFromJavaExtension(project)); + } catch (Throwable ignore) { + sourceSetNames.addAll(readSourceSetNamesFromJavaConvention(project)); + } + projects.add(new DefaultProjectInGradleConfiguration(location, sourceSetNames)); + } + + return new DefaultExtendedEclipseModel(projects, eclipseProject); + } + + private List readSourceSetNamesFromJavaExtension(Project project) throws Throwable { + JavaPluginExtension javaPluginExtension = project.getExtensions().findByType(JavaPluginExtension.class); + return new ArrayList<>(javaPluginExtension.getSourceSets().getAsMap().keySet()); + } + + @SuppressWarnings("deprecation") + private List readSourceSetNamesFromJavaConvention(Project project) { + JavaPluginConvention convention = project.getConvention().findByType(JavaPluginConvention.class); + if (convention != null) { + SourceSetContainer sourceSets = convention.getSourceSets(); + return new ArrayList<>(sourceSets.getAsMap().keySet()); + } else { + return Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelPlugin.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelPlugin.java new file mode 100644 index 000000000..6a33cf102 --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/ExtendedEclipseModelPlugin.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2022 Gradle Inc. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************/ +package org.eclipse.buildship.model.internal; + + +import javax.inject.Inject; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry; +import org.gradle.util.GradleVersion; + +public class ExtendedEclipseModelPlugin implements Plugin { + private final ToolingModelBuilderRegistry registry; + + @Inject + public ExtendedEclipseModelPlugin(ToolingModelBuilderRegistry registry) { + this.registry = registry; + } + + @Override + public void apply(Project project) { + if (GradleVersion.current().compareTo(GradleVersion.version("4.4")) < 0) { + this.registry.register(new ExtendedEclipseModelBuilder(this.registry)); + } else { + this.registry.register(new CustomToolingModelBuilderWithParameter(this.registry)); + } + } +}