From 5a0cdd6e2615638d9fb8a2785732bbb4916e1dd9 Mon Sep 17 00:00:00 2001
From: Snjezana Peco <snjezana.peco@redhat.com>
Date: Sat, 1 Dec 2018 21:38:04 +0100
Subject: [PATCH] Migrate to Buildship 3.0

Signed-off-by: Snjezana Peco <snjezana.peco@redhat.com>
---
 org.eclipse.jdt.ls.core/META-INF/MANIFEST.MF  |  4 ---
 .../jdt/ls/core/internal/ProjectUtils.java    |  2 +-
 .../internal/managers/GradleBuildSupport.java | 20 ++++++-------
 .../managers/GradleProjectImporter.java       | 30 ++++++++-----------
 .../org.eclipse.jdt.ls.tp.target              |  9 +++---
 .../managers/GradleProjectImporterTest.java   |  2 +-
 6 files changed, 29 insertions(+), 38 deletions(-)

diff --git a/org.eclipse.jdt.ls.core/META-INF/MANIFEST.MF b/org.eclipse.jdt.ls.core/META-INF/MANIFEST.MF
index a9bc78060e..cf121ca3c7 100644
--- a/org.eclipse.jdt.ls.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.ls.core/META-INF/MANIFEST.MF
@@ -19,10 +19,6 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.12.0",
  org.eclipse.core.filebuffers;bundle-version="3.6.0",
  org.eclipse.m2e.maven.runtime,
  org.eclipse.buildship.core;bundle-version="1.0.18",
- com.gradleware.tooling.client;bundle-version="0.14.0",
- com.gradleware.tooling.model;bundle-version="0.14.0",
- com.gradleware.tooling.utils;bundle-version="0.14.0",
- org.gradle.toolingapi,
  org.eclipse.jdt.launching,
  org.eclipse.jdt.core.manipulation;bundle-version="1.8.0",
  org.apache.log4j;bundle-version="1.2.15",
diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java
index 0350f113d8..33e81074df 100644
--- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java
+++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/ProjectUtils.java
@@ -15,7 +15,7 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import org.eclipse.buildship.core.configuration.GradleProjectNature;
+import org.eclipse.buildship.core.internal.configuration.GradleProjectNature;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java
index 79a6267c7c..ff78e61a92 100644
--- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java
+++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleBuildSupport.java
@@ -11,12 +11,13 @@
 package org.eclipse.jdt.ls.core.internal.managers;
 
 import java.io.File;
+import java.util.Optional;
 
-import org.eclipse.buildship.core.CorePlugin;
-import org.eclipse.buildship.core.util.file.FileUtils;
-import org.eclipse.buildship.core.workspace.GradleBuild;
-import org.eclipse.buildship.core.workspace.NewProjectHandler;
-import org.eclipse.buildship.core.workspace.WorkbenchShutdownEvent;
+import org.eclipse.buildship.core.GradleBuild;
+import org.eclipse.buildship.core.internal.CorePlugin;
+import org.eclipse.buildship.core.internal.util.file.FileUtils;
+import org.eclipse.buildship.core.internal.workspace.DefaultGradleWorkspace;
+import org.eclipse.buildship.core.internal.workspace.WorkbenchShutdownEvent;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -29,8 +30,6 @@
 import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
 import org.eclipse.jdt.ls.core.internal.ProjectUtils;
 
-import com.google.common.base.Optional;
-
 /**
  * @author Fred Bricon
  *
@@ -50,9 +49,10 @@ public void update(IProject project, boolean force, IProgressMonitor monitor) th
 			return;
 		}
 		JavaLanguageServerPlugin.logInfo("Starting Gradle update for "+project.getName());
-		Optional<GradleBuild> build = CorePlugin.gradleWorkspaceManager().getGradleBuild(project);
-		if (build.isPresent()){
-			build.get().synchronize(NewProjectHandler.IMPORT_AND_MERGE);
+		DefaultGradleWorkspace gradleWorkspace = (DefaultGradleWorkspace) CorePlugin.internalGradleWorkspace();
+		Optional<GradleBuild> build = gradleWorkspace.getBuild(project);
+		if (build.isPresent()) {
+			build.get().synchronize(monitor);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java
index a05a097f35..447d9199e4 100644
--- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java
+++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporter.java
@@ -19,13 +19,11 @@
 import java.util.Map;
 import java.util.Properties;
 
-import org.eclipse.buildship.core.CorePlugin;
-import org.eclipse.buildship.core.configuration.BuildConfiguration;
-import org.eclipse.buildship.core.preferences.PersistentModel;
-import org.eclipse.buildship.core.util.gradle.GradleDistributionWrapper;
-import org.eclipse.buildship.core.util.gradle.GradleDistributionWrapper.DistributionType;
-import org.eclipse.buildship.core.workspace.GradleBuild;
-import org.eclipse.buildship.core.workspace.NewProjectHandler;
+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.preferences.PersistentModel;
+import org.eclipse.buildship.core.internal.workspace.InternalGradleBuild;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -34,10 +32,6 @@
 import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
 import org.eclipse.jdt.ls.core.internal.ProjectUtils;
 import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager;
-import org.gradle.tooling.GradleConnector;
-
-import com.gradleware.tooling.toolingclient.GradleDistribution;
-import com.gradleware.tooling.toolingmodel.repository.FetchStrategy;
 
 /**
  * @author Fred Bricon
@@ -85,9 +79,10 @@ public void importToWorkspace(IProgressMonitor monitor) throws CoreException {
 			return;
 		}
 		int projectSize = directories.size();
-		SubMonitor subMonitor = SubMonitor.convert(monitor, projectSize);
+		SubMonitor subMonitor = SubMonitor.convert(monitor, projectSize + 1);
 		subMonitor.setTaskName(IMPORTING_GRADLE_PROJECTS);
 		JavaLanguageServerPlugin.logInfo(IMPORTING_GRADLE_PROJECTS);
+		subMonitor.worked(1);
 		directories.forEach(d -> importDir(d, subMonitor.newChild(1)));
 		subMonitor.done();
 	}
@@ -102,7 +97,7 @@ private void importDir(Path rootFolder, IProgressMonitor monitor) {
 	public static GradleDistribution getGradleDistribution(Path rootFolder) {
 		GradleDistribution distribution = DEFAULT_DISTRIBUTION;
 		if (Files.exists(rootFolder.resolve("gradlew"))) {
-			distribution = GradleDistributionWrapper.from(DistributionType.WRAPPER, null).toGradleDistribution();
+			distribution = GradleDistribution.fromBuild();
 		} else {
 			File gradleHomeFile = getGradleHomeFile();
 			if (gradleHomeFile != null) {
@@ -147,10 +142,11 @@ protected void startSynchronization(Path rootFolder, IProgressMonitor monitor) {
 		if (shouldSynchronize) {
 			boolean overrideWorkspaceSettings = getGradleHomeFile() != null;
 			GradleDistribution distribution = getGradleDistribution(rootFolder);
-			BuildConfiguration configuration = CorePlugin.configurationManager().createBuildConfiguration(location, overrideWorkspaceSettings, distribution, null, false, false, false);
-			GradleBuild build = CorePlugin.gradleWorkspaceManager().getGradleBuild(configuration);
-			build.getModelProvider().fetchEclipseGradleProjects(FetchStrategy.LOAD_IF_NOT_CACHED, GradleConnector.newCancellationTokenSource().token(), monitor);
-			build.synchronize(NewProjectHandler.IMPORT_AND_MERGE);
+			String javaHomeStr = JavaLanguageServerPlugin.getPreferencesManager().getPreferences().getJavaHome();
+			File javaHome = javaHomeStr == null ? null : new File(javaHomeStr);
+			BuildConfiguration configuration = CorePlugin.configurationManager().createBuildConfiguration(location, overrideWorkspaceSettings, distribution, getGradleHomeFile(), javaHome, false, false, false, null, null, false, false);
+			InternalGradleBuild build = CorePlugin.internalGradleWorkspace().getGradleBuild(configuration);
+			build.synchronize(monitor);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target b/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target
index 7c152a13cf..67031b46ad 100644
--- a/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target
+++ b/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Java Language Server Target Definition" sequenceNumber="113">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><?pde version="3.8"?><target name="Java Language Server Target Definition" sequenceNumber="113">
     <locations>
         <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
             <unit id="org.mockito.mockito-all" version="1.9.5"/>
@@ -15,8 +14,8 @@
             <repository location="http://download.eclipse.org/tools/orbit/R-builds/R20170516192513/repository"/>
         </location>
         <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-            <unit id="org.eclipse.buildship.feature.group" version="2.2.2.v20181003-1021"/>
-            <repository location="https://download.eclipse.org/buildship/updates/e47/releases/2.x/2.2.2.v20181003-1021/"/>
+            <unit id="org.eclipse.buildship.feature.group" version="0.0.0"/>
+            <repository location="https://download.eclipse.org/buildship/updates/e49/snapshots/3.x/"/>
         </location>
         <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
             <unit id="org.eclipse.m2e.feature.feature.group" version="1.10.0.20181127-2120"/>
@@ -47,4 +46,4 @@
         </location>
     </locations>
     <targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-</target>
+</target>
\ No newline at end of file
diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java
index 35db000d5f..cba7df5a69 100644
--- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java
+++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/managers/GradleProjectImporterTest.java
@@ -24,7 +24,7 @@
 import java.util.Map;
 import java.util.Properties;
 
-import org.eclipse.buildship.core.CorePlugin;
+import org.eclipse.buildship.core.internal.CorePlugin;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IWorkspaceRoot;