From 911a5fb97254b31d8f45a6828889a7acb67338be Mon Sep 17 00:00:00 2001 From: Donat Csikos Date: Fri, 26 Feb 2021 09:32:04 +0100 Subject: [PATCH 1/4] 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 | 20 +- .../eclipsebuild/jar/JarBundleUtils.groovy | 27 +- .../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 +- .../view/task/BuildInvocationsTest.groovy | 8 +- .../AddBuildshipNatureHandlerTest.groovy | 6 +- .../view/execution/OpenTestSourceFileJob.java | 11 +- .../internal/view/task/ReloadTaskViewJob.java | 5 +- org.gradle.toolingapi/.classpath | 235 +++++++++++++++++- org.gradle.toolingapi/META-INF/MANIFEST.MF | 29 ++- org.gradle.toolingapi/build.gradle | 18 +- .../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 +++ 31 files changed, 792 insertions(+), 101 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 0000000000..2d80b69a76 --- /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 a5c4c89bce..560cd8e27d 100644 --- a/buildSrc/src/main/groovy/eclipsebuild/jar/ConvertOsgiBundleTask.groovy +++ b/buildSrc/src/main/groovy/eclipsebuild/jar/ConvertOsgiBundleTask.groovy @@ -44,18 +44,20 @@ abstract class ConvertOsgiBundleTask extends DefaultTask { createNewBundle(project, JarBundleUtils.firstDependencyJar(pluginConfiguration.get())) } - 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(outputDirectory.get().asFile, "osgi_${jar.name}") + File osgiJar = new File(outputDirectory.get().asFile, "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 bc629df3dc..e7e33a3b81 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)}") } } } diff --git a/buildSrc/src/main/groovy/eclipsebuild/jar/JarBundleUtils.groovy b/buildSrc/src/main/groovy/eclipsebuild/jar/JarBundleUtils.groovy index e174dc13b6..adbf89864a 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/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 90898c52ca..b6c57fd45d 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 @@ -32,7 +32,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 { @@ -93,8 +94,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) @@ -113,8 +114,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 abb0b1076e..06b4234048 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 13fdf5f7bd..4e460bd769 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 f03606ad31..d4ed0dbf77 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; @@ -225,7 +226,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 234f093818..c1619a2387 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 0000000000..e781727251 --- /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 b7e4812a64..e5dcfd4fbf 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 d22228682e..7e3ec4f9bc 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 6521639436..d9174fbd5e 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 1cc7b27b7e..dbaa7978ce 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 0dd3f2b709..f6e34ae328 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 d30c9240dd..f4f386c5fc 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.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 2c120e4c27..04f5e994f7 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 6c20ba2a6c..4ae177bba2 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 386884e5fa..cfc2f68b25 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 703ca87e11..2c49e1a544 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 35d24f39ff..067adc5c48 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 c89aa8a8dd..7e599ef204 100644 --- a/org.gradle.toolingapi/META-INF/MANIFEST.MF +++ b/org.gradle.toolingapi/META-INF/MANIFEST.MF @@ -3,9 +3,10 @@ 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" +<<<<<<< HEAD Export-Package: org.gradle.api;version="7.4.2", org.gradle.cache;version="7.4.2", org.gradle.cli;version="7.4.2", @@ -29,3 +30,29 @@ Export-Package: org.gradle.api;version="7.4.2", org.gradle.tooling.model.java;version="7.4.2", org.gradle.tooling.model.kotlin.dsl;version="7.4.2" Bundle-Version: 7.4.2.qualifier +======= +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", + org.gradle.tooling;version="7.4.1", + org.gradle.tooling.events;version="7.4.1", + org.gradle.tooling.events.configuration;version="7.4.1", + org.gradle.tooling.events.download;version="7.4.1", + org.gradle.tooling.events.task;version="7.4.1", + org.gradle.tooling.events.task.java;version="7.4.1", + org.gradle.tooling.events.test;version="7.4.1", + org.gradle.tooling.events.transform;version="7.4.1", + org.gradle.tooling.events.work;version="7.4.1", + org.gradle.tooling.exceptions;version="7.4.1", + org.gradle.tooling.model;version="7.4.1", + org.gradle.tooling.model.build;version="7.4.1", + org.gradle.tooling.model.cpp;version="7.4.1", + org.gradle.tooling.model.eclipse;version="7.4.1", + org.gradle.tooling.model.gradle;version="7.4.1", + org.gradle.tooling.model.idea;version="7.4.1", + org.gradle.tooling.model.java;version="7.4.1", + org.gradle.tooling.model.kotlin.dsl;version="7.4.1" +Bundle-Version: 7.4.1.qualifier +>>>>>>> f689a4cf (Replace EclipseProject with custom local tooling model) diff --git a/org.gradle.toolingapi/build.gradle b/org.gradle.toolingapi/build.gradle index 392acdb02f..0bbc128bc8 100644 --- a/org.gradle.toolingapi/build.gradle +++ b/org.gradle.toolingapi/build.gradle @@ -1,6 +1,7 @@ -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") { @@ -18,3 +19,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/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java new file mode 100644 index 0000000000..a2ee8f0b51 --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * 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.Serializable; +import java.util.List; + +import org.gradle.tooling.model.eclipse.EclipseProject; + +/** + * Custom root model allowing Buildship to extract any information from a Gradle build apart from the built-in EclipseProject model. + * + * @author donat + */ +public interface ExtendedEclipseModel extends Serializable { + + /** + * @return Structural information about the project in the build. + */ + List 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 0000000000..5f1dd216ef --- /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 0000000000..8786d82bde --- /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 0000000000..d9b1d34edb --- /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 0000000000..e7c74ac13c --- /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 0000000000..e160046439 --- /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 0000000000..6a33cf102a --- /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)); + } + } +} From dcc58fa96a9e994d4f02b58e19fd2e6bc669da6a Mon Sep 17 00:00:00 2001 From: Donat Csikos Date: Tue, 19 Jul 2022 09:59:08 +0200 Subject: [PATCH 2/4] Use gradle user home to deploy init script --- .../workspace/CompositeModelQuery.java | 2 +- .../configuration/GradleArguments.java | 22 +++++++------ .../workspace/ExtendedEclipseModelUtils.java | 31 +++++++------------ .../configuration/buildshipInitScript.gradle | 1 + org.gradle.toolingapi/.classpath | 2 +- 5 files changed, 27 insertions(+), 31 deletions(-) diff --git a/org.eclipse.buildship.compat/src/main/java/org/eclipse/buildship/core/internal/workspace/CompositeModelQuery.java b/org.eclipse.buildship.compat/src/main/java/org/eclipse/buildship/core/internal/workspace/CompositeModelQuery.java index 43fb5d4a23..eb1743737f 100644 --- a/org.eclipse.buildship.compat/src/main/java/org/eclipse/buildship/core/internal/workspace/CompositeModelQuery.java +++ b/org.eclipse.buildship.compat/src/main/java/org/eclipse/buildship/core/internal/workspace/CompositeModelQuery.java @@ -64,7 +64,7 @@ private void collectRootModels(BuildController controller, GradleBuild build, Ma models.put(buildPath, controller.getModel(build.getRootProject(), this.modelType)); } - for (GradleBuild includedBuild : build.getIncludedBuilds()) { + for (GradleBuild includedBuild : build.getEditableBuilds()) { // TODO add cross-version coverage String includedBuildRootProjectName = includedBuild.getRootProject().getName(); if (!includedBuildRootProjectName.equals(rootBuildRootProjectName)) { collectRootModels(controller, includedBuild, models, includedBuildRootProjectName, rootBuildRootProjectName); 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 c1619a2387..85bf99ed2f 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 @@ -126,7 +126,7 @@ public static GradleArguments from(File rootDir, GradleDistribution gradleDistri return new GradleArguments(rootDir, gradleDistribution, gradleUserHome, javaHome, buildScansEnabled, offlineMode, arguments, jvmArguments); } - private static List collectArguments(List baseArgs, boolean buildScansEnabled, boolean offlineMode, BuildEnvironment buildEnvironment) { + private List collectArguments(List baseArgs, boolean buildScansEnabled, boolean offlineMode, BuildEnvironment buildEnvironment) { List arguments = Lists.newArrayList(baseArgs); if (buildScansEnabled) { String buildScanArgument = buildScanArgumentFor(buildEnvironment); @@ -138,7 +138,7 @@ private static List collectArguments(List baseArgs, boolean buil arguments.add("--offline"); } arguments.addAll(CorePlugin.invocationCustomizer().getExtraArguments()); - arguments.addAll(getInitScriptArguments()); + arguments.addAll(getInitScriptArguments(buildEnvironment)); return arguments; } @@ -150,13 +150,13 @@ private static String buildScanArgumentFor(BuildEnvironment environment) { } } - private static List getInitScriptArguments() { - File initScriptLocation = getEclipsePluginInitScriptLocation(); + private List getInitScriptArguments(BuildEnvironment buildEnvironment) { + File initScriptLocation = getEclipsePluginInitScriptLocation(buildEnvironment); try { String existingInitScriptText = readInitScriptContent(initScriptLocation); - String newInitScriptContent = createInitScriptContent(); + String newInitScriptContent = createInitScriptContent(buildEnvironment); if (existingInitScriptText == null || !existingInitScriptText.equals(newInitScriptContent)) { - writeInitScript(initScriptLocation, createInitScriptContent()); + writeInitScript(initScriptLocation, createInitScriptContent(buildEnvironment)); } return Arrays.asList("--init-script", initScriptLocation.getAbsolutePath()); } catch (IOException e) { @@ -188,7 +188,7 @@ private static String readInitScriptContent(File initScript) throws IOException } } - private static String createInitScriptContent() throws IOException { + private static String createInitScriptContent(BuildEnvironment buildEnvironment) throws IOException { URL resource = GradleVersion.class.getResource(INITSCRIPT_LOCATION); if (resource == null) { throw new GradlePluginsRuntimeException(String.format("Resource '%s' not found.", INITSCRIPT_LOCATION)); @@ -201,8 +201,12 @@ private static String createInitScriptContent() throws IOException { } } - private static File getEclipsePluginInitScriptLocation() { - return CorePlugin.getInstance().getStateLocation().append("init.d").append(INITSCRIPT_NAME).toFile(); + private File getEclipsePluginInitScriptLocation(BuildEnvironment buildEnvironment) { + File userHome = getGradleUserHome(buildEnvironment.getGradle()); + if (userHome == null) { + throw new GradlePluginsRuntimeException("Gradle user home is not available"); // TODO add test coverage as all supported Gradle version should have this + } + return new File(userHome, "init.d/buildship.gradle"); } } diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/ExtendedEclipseModelUtils.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/ExtendedEclipseModelUtils.java index dbaa7978ce..f6440ddfc5 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/ExtendedEclipseModelUtils.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/ExtendedEclipseModelUtils.java @@ -9,28 +9,19 @@ ******************************************************************************/ package org.eclipse.buildship.core.internal.workspace; -import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.stream.Collectors; import org.gradle.tooling.BuildAction; import org.gradle.tooling.BuildActionFailureException; import org.gradle.tooling.ProjectConnection; import org.gradle.tooling.model.build.BuildEnvironment; import org.gradle.tooling.model.eclipse.EclipseProject; -import org.gradle.tooling.model.eclipse.EclipseRuntime; -import org.gradle.tooling.model.eclipse.EclipseWorkspaceProject; import org.gradle.tooling.model.eclipse.RunClosedProjectBuildDependencies; -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; - -import org.eclipse.buildship.core.internal.CorePlugin; import org.eclipse.buildship.core.internal.UnsupportedConfigurationException; import org.eclipse.buildship.core.internal.util.gradle.GradleVersion; import org.eclipse.buildship.core.internal.util.gradle.IdeFriendlyClassLoading; @@ -78,27 +69,27 @@ public static Map runTasksAndQueryModels(ProjectCo } } - public static EclipseRuntimeConfigurer buildEclipseRuntimeConfigurer() { - ImmutableList allWorkspaceProjects = CorePlugin.workspaceOperations().getAllProjects(); - List projects = allWorkspaceProjects.stream().map(p -> new DefaultEclipseWorkspaceProject(p.getName(), p.getLocation().toFile(), p.isOpen())) - .collect(Collectors.toList()); - return new EclipseRuntimeConfigurer(new DefaultEclipseWorkspace(ResourcesPlugin.getWorkspace().getRoot().getLocation().toFile(), projects)); - } +// public static EclipseRuntimeConfigurer buildEclipseRuntimeConfigurer() { +// ImmutableList allWorkspaceProjects = CorePlugin.workspaceOperations().getAllProjects(); +// List projects = allWorkspaceProjects.stream().map(p -> new DefaultEclipseWorkspaceProject(p.getName(), p.getLocation().toFile(), p.isOpen())) +// .collect(Collectors.toList()); +// return new EclipseRuntimeConfigurer(new DefaultEclipseWorkspace(ResourcesPlugin.getWorkspace().getRoot().getLocation().toFile(), projects)); +// } private static Map runTasksAndQueryCompositeModelWithRuntimInfo(ProjectConnection connection, GradleVersion gradleVersion) { - EclipseRuntimeConfigurer buildEclipseRuntimeConfigurer = buildEclipseRuntimeConfigurer(); +// EclipseRuntimeConfigurer buildEclipseRuntimeConfigurer = buildEclipseRuntimeConfigurer(); try { BuildAction runSyncTasksAction = IdeFriendlyClassLoading.loadClass(TellGradleToRunSynchronizationTasks.class); if (gradleVersion.supportsClosedProjectDependencySubstitution()) { // use a composite query to run substitute tasks in included builds too - BuildAction runClosedProjectTasksAction = new CompositeModelQuery<>(RunClosedProjectBuildDependencies.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer); + BuildAction runClosedProjectTasksAction = new CompositeModelQuery<>(RunClosedProjectBuildDependencies.class/*, EclipseRuntime.class, buildEclipseRuntimeConfigurer*/); BuildActionSequence projectsLoadedAction = new BuildActionSequence(runSyncTasksAction, runClosedProjectTasksAction); return runPhasedModelQuery(connection, gradleVersion, projectsLoadedAction, IdeFriendlyClassLoading - .loadCompositeModelQuery(ExtendedEclipseModel.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer)); + .loadCompositeModelQuery(ExtendedEclipseModel.class/*, EclipseRuntime.class, buildEclipseRuntimeConfigurer*/)); } return runPhasedModelQuery(connection, gradleVersion, runSyncTasksAction, IdeFriendlyClassLoading - .loadCompositeModelQuery(ExtendedEclipseModel.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. @@ -124,7 +115,7 @@ private static Map runPhasedModelQuery(ProjectConn } private static Map queryCompositeModelWithRuntimInfo(ProjectConnection connection, GradleVersion gradleVersion) { - BuildAction> query = IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class, EclipseRuntime.class, buildEclipseRuntimeConfigurer()); + BuildAction> query = IdeFriendlyClassLoading.loadCompositeModelQuery(ExtendedEclipseModel.class/*, EclipseRuntime.class, buildEclipseRuntimeConfigurer()*/); return connection.action(query).run(); } diff --git a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle index f4f386c5fc..f8c38576f8 100644 --- a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle +++ b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle @@ -1,3 +1,4 @@ +// TODO only inject the init script if the org.eclipse.buildship system property is present /******************************************************************************* * Copyright (c) 2019 Gradle Inc. * diff --git a/org.gradle.toolingapi/.classpath b/org.gradle.toolingapi/.classpath index 067adc5c48..40fa81aee4 100644 --- a/org.gradle.toolingapi/.classpath +++ b/org.gradle.toolingapi/.classpath @@ -1,12 +1,12 @@ - + From a3e218375d0ecf41c9ddd48c6e116b577d990f71 Mon Sep 17 00:00:00 2001 From: Donat Csikos Date: Tue, 19 Jul 2022 16:52:28 +0200 Subject: [PATCH 3/4] Further improvements --- .../configuration/GradleArguments.java | 1 + .../gradle/CompatExtendedEclipseModel.java | 4 +- .../util/gradle/HierarchicalElementUtils.java | 1 - .../internal/workspace/BaseConfigurator.java | 49 ++++++++++++------- .../GradleClasspathContainerUpdater.java | 9 +++- .../workspace/JavaSourceSettingsUpdater.java | 12 ++++- .../configuration/buildshipInitScript.gradle | 17 ++++--- .../model/CompileJavaTaskConfiguration.java | 8 +++ .../buildship/model/ExtendedEclipseModel.java | 5 +- ...nGradleConfiguration.java => Project.java} | 6 ++- .../DefaultCompileJavaTaskConfiguration.java | 17 +++++++ .../internal/DefaultExtendedEclipseModel.java | 8 ++- ...Configuration.java => DefaultProject.java} | 17 ++++--- .../internal/ExtendedEclipseModelBuilder.java | 15 ++++-- 14 files changed, 121 insertions(+), 48 deletions(-) create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/CompileJavaTaskConfiguration.java rename org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/{ProjectInGradleConfiguration.java => Project.java} (85%) create mode 100644 org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultCompileJavaTaskConfiguration.java rename org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/{DefaultProjectInGradleConfiguration.java => DefaultProject.java} (59%) 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 85bf99ed2f..b4d75c99f2 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 @@ -116,6 +116,7 @@ public void applyTo(LongRunningOperation operation, BuildEnvironment environment this.buildScansEnabled, this.offlineMode, environment)); operation.setJavaHome(this.javaHome); operation.setJvmArguments(this.jvmArguments); + operation.addJvmArguments("-Dorg.eclipse.buildship"); } public static GradleArguments from(File rootDir, GradleDistribution gradleDistribution, 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 index e781727251..868a8c26b2 100644 --- 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 @@ -14,7 +14,7 @@ import org.gradle.tooling.model.eclipse.EclipseProject; import org.eclipse.buildship.model.ExtendedEclipseModel; -import org.eclipse.buildship.model.ProjectInGradleConfiguration; +import org.eclipse.buildship.model.Project; public class CompatExtendedEclipseModel implements ExtendedEclipseModel { @@ -30,7 +30,7 @@ public EclipseProject getEclipseProject() { } @Override - public List getProjects() { + public List getProjects() { return this.delegate.getProjects(); } diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/HierarchicalElementUtils.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/HierarchicalElementUtils.java index 0335952618..05e20f444f 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/HierarchicalElementUtils.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/util/gradle/HierarchicalElementUtils.java @@ -71,6 +71,5 @@ public int compare(EclipseProject o1, EclipseProject o2) { Path p2 = Path.from(o2.getGradleProject().getPath()); return p1.compareTo(p2); } - } } 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 7e3ec4f9bc..dba2f91863 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,11 +37,13 @@ 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.core.internal.util.gradle.Pair; import org.eclipse.buildship.model.ExtendedEclipseModel; +import org.eclipse.buildship.model.Project; public class BaseConfigurator implements ProjectConfigurator { - private Map locationToProject; + private Map> locationToProject; private GradleVersion gradleVersion; @Override @@ -49,14 +51,18 @@ 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 -> { + Collection rootModels = gradleBuild.withConnection(connection -> { this.gradleVersion = GradleVersion.version(connection.getModel(BuildEnvironment.class).getGradle().getGradleVersion()); - Map extendedEclipseModels = ExtendedEclipseModelUtils.queryModels(connection); - return ExtendedEclipseModelUtils.collectEclipseModels(extendedEclipseModels).values(); + Map model = ExtendedEclipseModelUtils.queryModels(connection); + + return model.values(); }, monitor); + Map projectModels = rootModels.stream() + .flatMap(m -> m.getProjects().stream()) + .collect(Collectors.toMap(p -> p.getLocation(), p -> p)); this.locationToProject = rootModels.stream() - .flatMap(p -> HierarchicalElementUtils.getAll(p).stream()) - .collect(Collectors.toMap(p -> p.getProjectDirectory(), p -> p)); + .flatMap(p -> HierarchicalElementUtils.getAll(p.getEclipseProject()).stream()) + .collect(Collectors.toMap(p -> p.getProjectDirectory(), p -> new Pair<>(p, projectModels.get(p.getProjectDirectory())))); } catch (Exception e) { context.error("Cannot Query Eclipse model", e); } @@ -78,6 +84,7 @@ private void configure(ProjectContext context, IProject project, IProgressMonito PersistentModelBuilder persistentModel = new PersistentModelBuilder(CorePlugin.modelPersistence().loadModel(project)); EclipseProject model = lookupEclipseModel(project); + Pair model2 = lookupEclipseModel2(project); progress.worked(1); persistentModel.gradleVersion(this.gradleVersion); @@ -91,7 +98,7 @@ private void configure(ProjectContext context, IProject project, IProgressMonito // TODO (donat) extract Java synchronization to external configurator if (isJavaProject(model)) { - synchronizeJavaProject(context, model, project, persistentModel, progress); + synchronizeJavaProject(context, model2, project, persistentModel, progress); } else { persistentModel.classpath(ImmutableList.of()); } @@ -100,28 +107,28 @@ private void configure(ProjectContext context, IProject project, IProgressMonito CorePlugin.externalLaunchConfigurationManager().updateClasspathProviders(project); // classpath provider depends on persistent model } - private void synchronizeJavaProject(final ProjectContext context, final EclipseProject model, final IProject project, final PersistentModelBuilder persistentModel, SubMonitor progress) throws CoreException { + private void synchronizeJavaProject(final ProjectContext context, final Pair model2, final IProject project, final PersistentModelBuilder persistentModel, SubMonitor progress) throws CoreException { JavaCore.run(new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) throws CoreException { SubMonitor progress = SubMonitor.convert(monitor); - synchronizeJavaProjectInTransaction(context, model, project, persistentModel, progress); + synchronizeJavaProjectInTransaction(context, model2, project, persistentModel, progress); } }, progress.newChild(1)); } - private void synchronizeJavaProjectInTransaction(final ProjectContext context, final EclipseProject model, final IProject project, PersistentModelBuilder persistentModel, SubMonitor progress) throws JavaModelException, CoreException { + private void synchronizeJavaProjectInTransaction(final ProjectContext context, final Pair model2, final IProject project, PersistentModelBuilder persistentModel, SubMonitor progress) throws JavaModelException, CoreException { progress.setWorkRemaining(7); //old Gradle versions did not expose natures, so we need to add the Java nature explicitly CorePlugin.workspaceOperations().addNature(project, JavaCore.NATURE_ID, progress.newChild(1)); IJavaProject javaProject = JavaCore.create(project); - OutputLocationUpdater.update(context, javaProject, model, progress.newChild(1)); - SourceFolderUpdater.update(javaProject, ImmutableList.copyOf(model.getSourceDirectories()), progress.newChild(1)); - LibraryFilter.update(javaProject, model, progress.newChild(1)); - ClasspathContainerUpdater.update(javaProject, model, progress.newChild(1)); - JavaSourceSettingsUpdater.update(javaProject, model, progress.newChild(1)); - GradleClasspathContainerUpdater.updateFromModel(javaProject, model, this.locationToProject.values(), persistentModel, progress.newChild(1), context); - persistentModel.hasAutoBuildTasks(model.hasAutoBuildTasks()); + OutputLocationUpdater.update(context, javaProject, model2.getFirst(), progress.newChild(1)); + SourceFolderUpdater.update(javaProject, ImmutableList.copyOf(model2.getFirst().getSourceDirectories()), progress.newChild(1)); + LibraryFilter.update(javaProject, model2.getFirst(), progress.newChild(1)); + ClasspathContainerUpdater.update(javaProject, model2.getFirst(), progress.newChild(1)); + JavaSourceSettingsUpdater.update(javaProject, model2, progress.newChild(1)); + GradleClasspathContainerUpdater.updateFromModel(javaProject, model2.getFirst(), this.locationToProject.values(), persistentModel, progress.newChild(1), context); + persistentModel.hasAutoBuildTasks(model2.getFirst().hasAutoBuildTasks()); } private boolean isJavaProject(EclipseProject model) { @@ -129,6 +136,14 @@ private boolean isJavaProject(EclipseProject model) { } private EclipseProject lookupEclipseModel(IProject project) { + IPath path = project.getLocation(); + if (path == null) { + return null; + } + return this.locationToProject.get(path.toFile()).getFirst(); + } + + private Pair lookupEclipseModel2(IProject project) { IPath path = project.getLocation(); if (path == null) { return null; diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/GradleClasspathContainerUpdater.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/GradleClasspathContainerUpdater.java index 90fad756e3..69d2778778 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/GradleClasspathContainerUpdater.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/GradleClasspathContainerUpdater.java @@ -10,11 +10,13 @@ package org.eclipse.buildship.core.internal.workspace; import java.io.File; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.gradle.tooling.model.eclipse.EclipseExternalDependency; import org.gradle.tooling.model.eclipse.EclipseProject; @@ -43,6 +45,8 @@ import org.eclipse.buildship.core.internal.preferences.ClasspathConverter; import org.eclipse.buildship.core.internal.preferences.PersistentModel; import org.eclipse.buildship.core.internal.util.classpath.ClasspathUtils; +import org.eclipse.buildship.core.internal.util.gradle.Pair; +import org.eclipse.buildship.model.Project; /** * Updates the classpath container of the target project. @@ -175,9 +179,10 @@ private List collectProjectDependencies() { * container will be persisted so it does not have to be reloaded after the workbench is * restarted. */ - public static void updateFromModel(IJavaProject eclipseProject, EclipseProject gradleProject, Iterable allGradleProjects, + public static void updateFromModel(IJavaProject eclipseProject, EclipseProject gradleProject, Collection> collection, PersistentModelBuilder persistentModel, IProgressMonitor monitor, ProjectContext context) throws JavaModelException { - GradleClasspathContainerUpdater updater = new GradleClasspathContainerUpdater(eclipseProject, gradleProject, allGradleProjects, context); + List list = collection.stream().map(e -> e.getFirst()).collect(Collectors.toList()); + GradleClasspathContainerUpdater updater = new GradleClasspathContainerUpdater(eclipseProject, gradleProject, list, context); updater.updateClasspathContainer(persistentModel, monitor); } diff --git a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/JavaSourceSettingsUpdater.java b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/JavaSourceSettingsUpdater.java index 5ab5a04c41..44128f8afd 100644 --- a/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/JavaSourceSettingsUpdater.java +++ b/org.eclipse.buildship.core/src/main/java/org/eclipse/buildship/core/internal/workspace/JavaSourceSettingsUpdater.java @@ -26,14 +26,17 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.buildship.core.internal.util.gradle.JavaVersionUtil; +import org.eclipse.buildship.core.internal.util.gradle.Pair; +import org.eclipse.buildship.model.CompileJavaTaskConfiguration; +import org.eclipse.buildship.model.Project; /** * Updates the Java source settings on the target project. */ final class JavaSourceSettingsUpdater { - public static void update(IJavaProject project, EclipseProject modelProject, IProgressMonitor monitor) throws CoreException { - EclipseJavaSourceSettings sourceSettings = modelProject.getJavaSourceSettings(); + public static void update(IJavaProject project, Pair model2, IProgressMonitor monitor) throws CoreException { + EclipseJavaSourceSettings sourceSettings = model2.getFirst().getJavaSourceSettings(); String sourceVersion = JavaVersionUtil.adaptVersionToEclipseNamingConversions(sourceSettings.getSourceLanguageLevel()); String targetVersion = JavaVersionUtil.adaptVersionToEclipseNamingConversions(sourceSettings.getTargetBytecodeVersion()); @@ -45,6 +48,11 @@ public static void update(IJavaProject project, EclipseProject modelProject, IPr if (compilerOptionChanged && isProjectAutoBuildingEnabled()) { scheduleJdtBuild(project.getProject()); } + + CompileJavaTaskConfiguration compileJavaTaskConfiguration = model2.getSecond().getCompileJavaTaskConfiguration(); + if (compileJavaTaskConfiguration != null) { + String encoding = compileJavaTaskConfiguration.getEncoding(); + } } private static boolean updateJavaProjectOptionIfNeeded(IJavaProject project, String optionKey, String newValue) { diff --git a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle index f8c38576f8..b8885cb067 100644 --- a/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle +++ b/org.eclipse.buildship.core/src/main/resources/org/eclipse/buildship/core/internal/configuration/buildshipInitScript.gradle @@ -1,4 +1,3 @@ -// TODO only inject the init script if the org.eclipse.buildship system property is present /******************************************************************************* * Copyright (c) 2019 Gradle Inc. * @@ -8,14 +7,18 @@ * * SPDX-License-Identifier: EPL-2.0 ******************************************************************************/ -initscript { - dependencies { - classpath files('IDEMODEL_CLASSPATH') +initscript { + if (System.getProperty('org.eclipse.buildship') != null) { + dependencies { + classpath files('IDEMODEL_CLASSPATH') + } } } -rootProject { - apply plugin: "eclipse" - apply plugin: org.eclipse.buildship.model.internal.ExtendedEclipseModelPlugin +if (System.getProperty('org.eclipse.buildship') != null) { + rootProject { + apply plugin: "eclipse" + apply plugin: org.eclipse.buildship.model.internal.ExtendedEclipseModelPlugin + } } diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/CompileJavaTaskConfiguration.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/CompileJavaTaskConfiguration.java new file mode 100644 index 0000000000..9f7448b858 --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/CompileJavaTaskConfiguration.java @@ -0,0 +1,8 @@ +package org.eclipse.buildship.model; + + +public interface CompileJavaTaskConfiguration { + + String getEncoding(); + +} diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java index a2ee8f0b51..a8d644ec5a 100644 --- a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ExtendedEclipseModel.java @@ -15,7 +15,8 @@ import org.gradle.tooling.model.eclipse.EclipseProject; /** - * Custom root model allowing Buildship to extract any information from a Gradle build apart from the built-in EclipseProject model. + * Custom root model allowing Buildship to extract any information from a Gradle build apart from + * the built-in EclipseProject model. * * @author donat */ @@ -24,7 +25,7 @@ public interface ExtendedEclipseModel extends Serializable { /** * @return Structural information about the project in the build. */ - List getProjects(); + List getProjects(); /** * 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/Project.java similarity index 85% rename from org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ProjectInGradleConfiguration.java rename to org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/Project.java index 5f1dd216ef..ceb2e79a63 100644 --- a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/ProjectInGradleConfiguration.java +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/Project.java @@ -12,7 +12,11 @@ import java.io.File; import java.util.List; -public interface ProjectInGradleConfiguration { +public interface Project { + File getLocation(); + List getSourceSetNames(); + + CompileJavaTaskConfiguration getCompileJavaTaskConfiguration(); } diff --git a/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultCompileJavaTaskConfiguration.java b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultCompileJavaTaskConfiguration.java new file mode 100644 index 0000000000..ce3d7b076a --- /dev/null +++ b/org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultCompileJavaTaskConfiguration.java @@ -0,0 +1,17 @@ +package org.eclipse.buildship.model.internal; + +import java.io.Serializable; + +public class DefaultCompileJavaTaskConfiguration implements Serializable { + + private final String encoding; + + public DefaultCompileJavaTaskConfiguration(String encoding) { + this.encoding = encoding; + } + + public String getEncoding() { + return this.encoding; + } + +} 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 index d9b1d34edb..23e720f626 100644 --- 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 @@ -14,20 +14,18 @@ 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 List projects; private final DefaultEclipseProject eclipseProject; - public DefaultExtendedEclipseModel(List projects, DefaultEclipseProject eclipseProject) { + public DefaultExtendedEclipseModel(List projects, DefaultEclipseProject eclipseProject) { this.projects = projects; this.eclipseProject = eclipseProject; } - public List getProjects() { + public List getProjects() { return this.projects; } 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/DefaultProject.java similarity index 59% rename from org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultProjectInGradleConfiguration.java rename to org.gradle.toolingapi/src/main/java/org/eclipse/buildship/model/internal/DefaultProject.java index e7c74ac13c..b98793d6fc 100644 --- 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/DefaultProject.java @@ -13,26 +13,31 @@ import java.io.Serializable; import java.util.List; -import org.eclipse.buildship.model.ProjectInGradleConfiguration; +public class DefaultProject implements Serializable { -public class DefaultProjectInGradleConfiguration implements ProjectInGradleConfiguration, Serializable { - + private static final long serialVersionUID = 1L; private final File location; private final List sourceSetNames; + private final DefaultCompileJavaTaskConfiguration compileJavaTaskConfiguration; - public DefaultProjectInGradleConfiguration(File location, List sourceSetNames) { + public DefaultProject(File location, + List sourceSetNames, + DefaultCompileJavaTaskConfiguration compileJavaTaskConfiguration) { this.location = location; this.sourceSetNames = sourceSetNames; + this.compileJavaTaskConfiguration = compileJavaTaskConfiguration; } - @Override public File getLocation() { return this.location; } - @Override public List getSourceSetNames() { return this.sourceSetNames; } + + public DefaultCompileJavaTaskConfiguration getCompileJavaTaskConfiguration() { + return this.compileJavaTaskConfiguration; + } } 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 index e160046439..784e5862e2 100644 --- 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 @@ -15,15 +15,16 @@ import java.util.List; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.compile.JavaCompile; 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 { @@ -47,16 +48,24 @@ public Object buildAll(String modelName, Project modelRoot) { protected DefaultExtendedEclipseModel build(DefaultEclipseProject eclipseProject, Project modelRoot) { - List projects = new ArrayList<>(); + List projects = new ArrayList<>(); for (Project project : modelRoot.getRootProject().getAllprojects()) { + // location File location = project.getProjectDir(); + // source sets ArrayList sourceSetNames = new ArrayList<>(); try { sourceSetNames.addAll(readSourceSetNamesFromJavaExtension(project)); } catch (Throwable ignore) { sourceSetNames.addAll(readSourceSetNamesFromJavaConvention(project)); } - projects.add(new DefaultProjectInGradleConfiguration(location, sourceSetNames)); + // encoding // TODO this belongs to the source sets + DefaultCompileJavaTaskConfiguration compileJavaTaskConfiguration = null; + Task compileJavaTask = project.getTasks().findByName("compileJava"); + if (compileJavaTask != null && compileJavaTask instanceof JavaCompile) { + compileJavaTaskConfiguration = new DefaultCompileJavaTaskConfiguration(((JavaCompile)compileJavaTask).getOptions().getEncoding()); + } + projects.add(new DefaultProject(location, sourceSetNames, compileJavaTaskConfiguration)); } return new DefaultExtendedEclipseModel(projects, eclipseProject); From 3f62197c7559f0346f28270d09cf00ee3d6ab22d Mon Sep 17 00:00:00 2001 From: Donat Csikos Date: Tue, 19 Jul 2022 17:11:15 +0200 Subject: [PATCH 4/4] Resolve rebase problems --- buildSrc/gradle/wrapper/gradle-wrapper.jar | Bin 54417 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - .../jar/ExistingJarBundlePlugin.groovy | 10 +- org.gradle.toolingapi/.classpath | 168 +++--------------- org.gradle.toolingapi/META-INF/MANIFEST.MF | 32 +--- org.gradle.toolingapi/build.gradle | 4 +- .../org.gradle.toolingapi_7.4.2.jar | Bin 2427810 -> 2467627 bytes 7 files changed, 29 insertions(+), 190 deletions(-) delete mode 100644 buildSrc/gradle/wrapper/gradle-wrapper.jar delete mode 100644 buildSrc/gradle/wrapper/gradle-wrapper.properties diff --git a/buildSrc/gradle/wrapper/gradle-wrapper.jar b/buildSrc/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 758de960ec7947253b058ff79c88ce51f3abe08a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54417 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 diff --git a/buildSrc/gradle/wrapper/gradle-wrapper.properties b/buildSrc/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 2d80b69a76..0000000000 --- a/buildSrc/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -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/ExistingJarBundlePlugin.groovy b/buildSrc/src/main/groovy/eclipsebuild/jar/ExistingJarBundlePlugin.groovy index e7e33a3b81..329690d4f3 100644 --- a/buildSrc/src/main/groovy/eclipsebuild/jar/ExistingJarBundlePlugin.groovy +++ b/buildSrc/src/main/groovy/eclipsebuild/jar/ExistingJarBundlePlugin.groovy @@ -75,21 +75,13 @@ class ExistingJarBundlePlugin implements Plugin { project.tasks[EclipsePlugin.ECLIPSE_CP_TASK_NAME].doLast { // copy jar file into project File depJar = JarBundleUtils.firstDependencyJar(getPluginConfiguration(project)) - File localJar = (project.tasks[TASK_NAME_CONVERT_TO_BUNDLE].target as File).listFiles()[0] + File localJar = (project.tasks[TASK_NAME_CONVERT_TO_BUNDLE].outputDirectory.get().asFile).listFiles()[0] project.copy { from localJar into project.file('.') rename { jarName(project) } } - // copy the source jar file into project - project.copy { - File sourceJar = JarBundleUtils.firstDependencySourceJar(project, getPluginConfiguration(project)) - from(sourceJar) - into project.file('.') - rename { sourceJarName(project) } - } - // update manifest file String template = project.extensions.bundleInfo.template.get() String packageFilter = project.extensions.bundleInfo.packageFilter.get() diff --git a/org.gradle.toolingapi/.classpath b/org.gradle.toolingapi/.classpath index 40fa81aee4..2f3a46370e 100644 --- a/org.gradle.toolingapi/.classpath +++ b/org.gradle.toolingapi/.classpath @@ -1,237 +1,117 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/org.gradle.toolingapi/META-INF/MANIFEST.MF b/org.gradle.toolingapi/META-INF/MANIFEST.MF index 7e599ef204..39c28a455b 100644 --- a/org.gradle.toolingapi/META-INF/MANIFEST.MF +++ b/org.gradle.toolingapi/META-INF/MANIFEST.MF @@ -3,11 +3,11 @@ Bundle-ManifestVersion: 2 Bundle-Name: Gradle Tooling API Bundle-Vendor: Gradle Inc. Bundle-SymbolicName: org.gradle.toolingapi -Bundle-ClassPath: org.gradle.toolingapi_7.4.1.jar +Bundle-ClassPath: org.gradle.toolingapi_7.4.2.jar Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.slf4j;version="1.7.2" -<<<<<<< HEAD -Export-Package: org.gradle.api;version="7.4.2", +Export-Package: org.eclipse.buildship.model;version="7.4.2", + org.gradle.api;version="7.4.2", org.gradle.cache;version="7.4.2", org.gradle.cli;version="7.4.2", org.gradle.scripts;version="7.4.2", @@ -30,29 +30,3 @@ Export-Package: org.gradle.api;version="7.4.2", org.gradle.tooling.model.java;version="7.4.2", org.gradle.tooling.model.kotlin.dsl;version="7.4.2" Bundle-Version: 7.4.2.qualifier -======= -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", - org.gradle.tooling;version="7.4.1", - org.gradle.tooling.events;version="7.4.1", - org.gradle.tooling.events.configuration;version="7.4.1", - org.gradle.tooling.events.download;version="7.4.1", - org.gradle.tooling.events.task;version="7.4.1", - org.gradle.tooling.events.task.java;version="7.4.1", - org.gradle.tooling.events.test;version="7.4.1", - org.gradle.tooling.events.transform;version="7.4.1", - org.gradle.tooling.events.work;version="7.4.1", - org.gradle.tooling.exceptions;version="7.4.1", - org.gradle.tooling.model;version="7.4.1", - org.gradle.tooling.model.build;version="7.4.1", - org.gradle.tooling.model.cpp;version="7.4.1", - org.gradle.tooling.model.eclipse;version="7.4.1", - org.gradle.tooling.model.gradle;version="7.4.1", - org.gradle.tooling.model.idea;version="7.4.1", - org.gradle.tooling.model.java;version="7.4.1", - org.gradle.tooling.model.kotlin.dsl;version="7.4.1" -Bundle-Version: 7.4.1.qualifier ->>>>>>> f689a4cf (Replace EclipseProject with custom local tooling model) diff --git a/org.gradle.toolingapi/build.gradle b/org.gradle.toolingapi/build.gradle index 0bbc128bc8..514a6196be 100644 --- a/org.gradle.toolingapi/build.gradle +++ b/org.gradle.toolingapi/build.gradle @@ -9,6 +9,7 @@ dependencies { attribute(Attribute.of('org.gradle.category', String), "library") } } + implementation gradleApi() } bundleInfo { @@ -24,9 +25,6 @@ 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. diff --git a/org.gradle.toolingapi/org.gradle.toolingapi_7.4.2.jar b/org.gradle.toolingapi/org.gradle.toolingapi_7.4.2.jar index df97998f35613cc47022214162550e07ca1ad379..af5ebcadf292ad651cd81868edcd1f914173bbf4 100644 GIT binary patch delta 217611 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

ma-Kiw7C)uf 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

S2xdeC;UL(gu|VHgVH zD4D19Gt`s+#RS53^*X9+QVYp&3?t%XNVY%B6bkW!Nt!hxvnv4+|I*5a0eos z8gT<`h{G@x#8J#MV~#4yrc#!|X+UZR^B zKoW|ySgGc6+MK&jnE7cwb;PgS>&1|9K-~;~u=OcyvM-P^5CsV+=6R9IuXdXI&N7kn z>-63>BVW+3t9-jbA^1aWmIkA^bW9n@&X6$-1#y(jJ_CEGg_Osfu?#(?pP)|&pD1OZ zn|Z`w)sJ<@d&HdQugBS|(P%?M-%de)R z!sji1*bwl#8n!g66}G6va1^bvkiKeTDZ0Dk=aWDP2BKJ9qzt6Vh;7uNU$<20suyxl zkdIT#8HrolG(22 z4{GIo4T$K3%f2XJVA;1zGLp1~dJpMf0U;D^by%gGx;h*bd3_)O0&Y2A1K>7TD-`<> zNI)@vt1@57OW@D-vc3Ya0HVQ30kq9etFv#(F$@K96tiQE97VbP?+q%<0stLl99$12 zv%yt3&WNFyKP0PLC{oxfp2J1>gS|gUD!UDg{~ty3Dpn`iTnsB#Y}aU$n(p%?-`wwDWGv~Q1l@7lI6q1XMj zaS5y}beeH7({75ME&7EQt<|I{Nc-N|(M1=JX`PayjRwkH@X$Qt%fE^|!aI=NhM z8ZaMh?rr<}c>!~JYunFAa_QT|V^ct{kxmUQBzn~9? zTP<{EXc?pXMy<68r*UK^&e>ch*~a>Hk1sRRbyv#w-n~8~B+DhN2(?#nP#h z>pSakgK3yK#_jS!fZJgwWd_)sh5;xDqFDBJas6E^W3o5U^At#Mere)a)rnE-8`!^= ztKD217_{*pqx;9@NFi)j$!_eS!_Fc3dHD}YibW_gP)KlI{c^3*q5k4O zi}~R9lvkm7;e|Jdm66K;It72Y z|AeWZlRu6vD=`oS2`HqyzkY?H{Pl0v$XWTem1d%C5ECP1I3cLFLs~x zSpm$vXOVXqgP{$MgA&9YENWoOkyuuJ7>a@n6wApYu|w5Xdb*+aZ|ecN0e=R~Ks5ht zDhx$I1`639t>38RU|`SqRefP_8V6-0^o=!p_aD%%XHQcRYllG`1-U5jCa=D~^(jlt zOSMmi=V_4AFvzZ!mt#35mKO{~K?aItim!gOxO_YMiwSp+Y3_G_F)?S-n8279gV?{8 z>BnRL3gXV^Ijcr&ojzTa@n6ieun*t2Ti@#;2f#X?B!N4dz8g7mJW;LBLH`;8C^ z(oif(FJl+0g%O|ewM7I(78wYBlt>0xVJjvKML`CNrBRSR%Dt`5A<)qSUTlDozSkAS zZ{a+k`sI3A303M={jpMf&3e_qeGzJI)ZJN7Vw(;fz|T-)JR0QZS~)r|X*FISk|ryR z=ryFlDg(dN%5)4e#2Edb?DhGwSOlm+4dO*Di_RfWC)8)XwuWM{$0DJ{)Y`I{zzei zmRibpjr8i%u@m~K)`~6$e(nArPd!`#7B0eHl4c1Dank>?)(U){bmYHqfO5(7nA^5j{z$9+pl~hbG4*gzESt6?rhAoPYojO)!Wmp$e&PEa2 z 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 ItB3#ff5(&pDF6Tf delta 187885 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

I$DPcOR+lqj1}iCinT0W%F| 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