am 93c19203: am b185a0e1: Merge "Fixed bug where SDK created for android-L pointed to android-20 folder." into idea133 automerge: 97db606
* commit '93c192031375f7bffcb73622719f399c5b00956a':
Fixed bug where SDK created for android-L pointed to android-20 folder.
diff --git a/android/src/com/android/tools/idea/sdk/DefaultSdks.java b/android/src/com/android/tools/idea/sdk/DefaultSdks.java
index fea9d04..0fd94fb 100644
--- a/android/src/com/android/tools/idea/sdk/DefaultSdks.java
+++ b/android/src/com/android/tools/idea/sdk/DefaultSdks.java
@@ -16,6 +16,7 @@
package com.android.tools.idea.sdk;
import com.android.SdkConstants;
+import com.android.sdklib.AndroidVersion;
import com.android.sdklib.IAndroidTarget;
import com.android.tools.idea.gradle.project.GradleProjectImporter;
import com.android.tools.idea.gradle.util.LocalProperties;
@@ -30,7 +31,6 @@
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.projectRoots.*;
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil;
-import com.intellij.openapi.roots.libraries.ui.OrderRoot;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
@@ -49,11 +49,12 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.regex.Pattern;
+
+import static org.jetbrains.android.sdk.AndroidSdkUtils.chooseNameForNewLibrary;
+import static org.jetbrains.android.sdk.AndroidSdkUtils.createNewAndroidPlatform;
public final class DefaultSdks {
private static final Logger LOG = Logger.getInstance(DefaultSdks.class);
- private static final Pattern SDK_NAME_PATTERN = Pattern.compile(".*\\(\\d+\\)");
private static final String ERROR_DIALOG_TITLE = "Project SDK Update";
@@ -221,13 +222,7 @@
// Iterate over all current existing IJ Android SDKs
for (Sdk sdk : AndroidSdkUtils.getAllAndroidSdks()) {
if (sdk.getName().startsWith(AndroidSdkUtils.SDK_NAME_PREFIX)) {
- // Try to set the path in the IntelliJ SDK to this Android SDK.
- if (!setAndroidSdkPath(sdkData, sdk, resolvedPath)) {
- // There wasn't a target in the Android SDK for this IntelliJ SDK. Maybe it
- // points to an API target that doesn't exist in this Android SDK. Delete the
- // IntelliJ SDK.
- sdksToDelete.add(sdk);
- }
+ sdksToDelete.add(sdk);
}
}
}
@@ -266,17 +261,21 @@
*/
@NotNull
private static List<Sdk> createAndroidSdksForAllTargets(@NotNull File androidHome, @Nullable Sdk javaSdk) {
- List<Sdk> sdks = Lists.newArrayList();
AndroidSdkData sdkData = AndroidSdkData.getSdkData(androidHome);
- if (sdkData != null) {
- IAndroidTarget[] targets = sdkData.getTargets();
- Sdk defaultJdk = javaSdk != null ? javaSdk : getDefaultJdk();
- for (IAndroidTarget target : targets) {
- if (target.isPlatform() && !doesDefaultAndroidSdkExist(target)) {
- String name = AndroidSdkUtils.chooseNameForNewLibrary(target);
- Sdk platform = AndroidSdkUtils.createNewAndroidPlatform(target, sdkData.getLocation().getPath(), name, defaultJdk, true);
- sdks.add(platform);
- }
+ if (sdkData == null) {
+ return Collections.emptyList();
+ }
+ IAndroidTarget[] targets = sdkData.getTargets();
+ if (targets.length == 0) {
+ return Collections.emptyList();
+ }
+ List<Sdk> sdks = Lists.newArrayList();
+ Sdk defaultJdk = javaSdk != null ? javaSdk : getDefaultJdk();
+ for (IAndroidTarget target : targets) {
+ if (target.isPlatform() && !doesDefaultAndroidSdkExist(target)) {
+ String name = chooseNameForNewLibrary(target);
+ Sdk sdk = createNewAndroidPlatform(target, sdkData.getLocation().getPath(), name, defaultJdk, true);
+ sdks.add(sdk);
}
}
return sdks;
@@ -288,7 +287,9 @@
private static boolean doesDefaultAndroidSdkExist(@NotNull IAndroidTarget target) {
for (Sdk sdk : getEligibleAndroidSdks()) {
IAndroidTarget platformTarget = getTarget(sdk);
- if (platformTarget.getVersion().equals(target.getVersion())) {
+ AndroidVersion version = target.getVersion();
+ AndroidVersion existingVersion = platformTarget.getVersion();
+ if (existingVersion.equals(version)) {
return true;
}
}
@@ -400,43 +401,6 @@
}
/**
- * Sets the given Android SDK's home path to the given path, and resets all of its content roots.
- */
- private static boolean setAndroidSdkPath(@NotNull AndroidSdkData sdkData, @NotNull Sdk sdk, @NotNull String path) {
- String name = sdk.getName();
- if (!name.startsWith(AndroidSdkUtils.SDK_NAME_PREFIX) || SDK_NAME_PATTERN.matcher(name).matches()) {
- return false;
- }
-
- SdkAdditionalData data = sdk.getSdkAdditionalData();
- if (!(data instanceof AndroidSdkAdditionalData)) {
- return false;
- }
-
- AndroidSdkAdditionalData androidSdkData = (AndroidSdkAdditionalData)data;
- AndroidPlatform androidPlatform = androidSdkData.getAndroidPlatform();
- if (androidPlatform == null) {
- return false;
- }
-
- IAndroidTarget target = sdkData.findTargetByApiLevel(Integer.toString(androidPlatform.getApiLevel()));
- if (target == null) {
- return false;
- }
-
- SdkModificator sdkModificator = sdk.getSdkModificator();
- sdkModificator.setHomePath(path);
- sdkModificator.removeAllRoots();
- for (OrderRoot orderRoot : AndroidSdkUtils.getLibraryRootsForTarget(target, path, true)) {
- sdkModificator.addRoot(orderRoot.getFile(), orderRoot.getType());
- }
- ExternalAnnotationsSupport.attachJdkAnnotations(sdkModificator);
-
- sdkModificator.commitChanges();
- return true;
- }
-
- /**
* @return the JDK with the default naming convention, creating one if it is not set up.
*/
@Nullable