mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
remove obsolete code: merge AndroidSdk and AndroidSdkImpl classes
This commit is contained in:
@@ -324,8 +324,8 @@ public class AndroidFacet extends Facet<AndroidFacetConfiguration> {
|
||||
AndroidPlatform platform = getConfiguration().getAndroidPlatform();
|
||||
AndroidSdk sdk = platform != null ? platform.getSdk() : null;
|
||||
Project project = getModule().getProject();
|
||||
if (sdk instanceof AndroidSdkImpl) {
|
||||
SdkManager sdkManager = ((AndroidSdkImpl)sdk).getSdkManager();
|
||||
if (sdk != null) {
|
||||
SdkManager sdkManager = sdk.getSdkManager();
|
||||
myAvdManager = new AvdManager(sdkManager, AndroidUtils.getSdkLog(project));
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -391,22 +391,20 @@ public class AndroidModuleWizardStep extends ModuleWizardStep {
|
||||
@NotNull
|
||||
private static String[] getAvds(@NotNull AndroidPlatform androidPlatform) {
|
||||
final AndroidSdk sdkObject = androidPlatform.getSdk();
|
||||
if (sdkObject instanceof AndroidSdkImpl) {
|
||||
final SdkManager sdkManager = ((AndroidSdkImpl)sdkObject).getSdkManager();
|
||||
try {
|
||||
final AvdManager avdManager = new AvdManager(sdkManager, new MessageBuildingSdkLog());
|
||||
final AvdInfo[] validAvds = avdManager.getValidAvds();
|
||||
final SdkManager sdkManager = sdkObject.getSdkManager();
|
||||
try {
|
||||
final AvdManager avdManager = new AvdManager(sdkManager, new MessageBuildingSdkLog());
|
||||
final AvdInfo[] validAvds = avdManager.getValidAvds();
|
||||
|
||||
final String[] avdNames = new String[validAvds.length];
|
||||
for (int i = 0; i < validAvds.length; i++) {
|
||||
avdNames[i] = validAvds[i].getName();
|
||||
}
|
||||
return avdNames;
|
||||
}
|
||||
catch (AndroidLocation.AndroidLocationException e) {
|
||||
LOG.info(e);
|
||||
final String[] avdNames = new String[validAvds.length];
|
||||
for (int i = 0; i < validAvds.length; i++) {
|
||||
avdNames[i] = validAvds[i].getName();
|
||||
}
|
||||
return avdNames;
|
||||
}
|
||||
catch (AndroidLocation.AndroidLocationException e) {
|
||||
LOG.info(e);
|
||||
return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
}
|
||||
return ArrayUtil.EMPTY_STRING_ARRAY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,8 +51,6 @@ import org.jetbrains.android.facet.AndroidFacetConfiguration;
|
||||
import org.jetbrains.android.logcat.AndroidLogFilterModel;
|
||||
import org.jetbrains.android.logcat.AndroidLogcatFiltersPreferences;
|
||||
import org.jetbrains.android.sdk.AndroidPlatform;
|
||||
import org.jetbrains.android.sdk.AndroidSdk;
|
||||
import org.jetbrains.android.sdk.AndroidSdkImpl;
|
||||
import org.jetbrains.android.util.AndroidBundle;
|
||||
import org.jetbrains.android.util.AndroidUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -108,22 +106,17 @@ public abstract class AndroidRunConfigurationBase extends ModuleBasedConfigurati
|
||||
if (PREFERRED_AVD.length() > 0) {
|
||||
AvdManager avdManager = facet.getAvdManagerSilently();
|
||||
if (avdManager == null) {
|
||||
AndroidSdk sdk = facet.getConfiguration().getAndroidSdk();
|
||||
if (sdk instanceof AndroidSdkImpl) {
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.cannot.be.loaded.error"));
|
||||
}
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.cannot.be.loaded.error"));
|
||||
}
|
||||
if (avdManager != null) {
|
||||
AvdInfo avdInfo = avdManager.getAvd(PREFERRED_AVD, false);
|
||||
if (avdInfo == null) {
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.not.found.error", PREFERRED_AVD));
|
||||
}
|
||||
if (!facet.isCompatibleAvd(avdInfo)) {
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.not.compatible.error", PREFERRED_AVD));
|
||||
}
|
||||
if (avdInfo.getStatus() != AvdInfo.AvdStatus.OK) {
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.not.valid.error", PREFERRED_AVD));
|
||||
}
|
||||
AvdInfo avdInfo = avdManager.getAvd(PREFERRED_AVD, false);
|
||||
if (avdInfo == null) {
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.not.found.error", PREFERRED_AVD));
|
||||
}
|
||||
if (!facet.isCompatibleAvd(avdInfo)) {
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.not.compatible.error", PREFERRED_AVD));
|
||||
}
|
||||
if (avdInfo.getStatus() != AvdInfo.AvdStatus.OK) {
|
||||
throw new RuntimeConfigurationError(AndroidBundle.message("avd.not.valid.error", PREFERRED_AVD));
|
||||
}
|
||||
}
|
||||
checkConfiguration(facet);
|
||||
|
||||
@@ -54,7 +54,6 @@ import com.intellij.xdebugger.DefaultDebugProcessHandler;
|
||||
import org.jetbrains.android.actions.AndroidEnableDdmsAction;
|
||||
import org.jetbrains.android.facet.AndroidFacet;
|
||||
import org.jetbrains.android.facet.AvdsNotSupportedException;
|
||||
import org.jetbrains.android.sdk.AndroidSdkImpl;
|
||||
import org.jetbrains.android.util.AndroidBundle;
|
||||
import org.jetbrains.android.util.AndroidOutputReceiver;
|
||||
import org.jetbrains.android.util.AndroidUtils;
|
||||
@@ -426,22 +425,17 @@ public abstract class AndroidRunningState implements RunProfileState, AndroidDeb
|
||||
myTargetDevices = targetDevices;
|
||||
}
|
||||
else if (myTargetChooser instanceof EmulatorTargetChooser) {
|
||||
if (isAndroidSdk15OrHigher()) {
|
||||
if (myAvdName == null) {
|
||||
chooseAvd();
|
||||
}
|
||||
if (myAvdName != null) {
|
||||
myFacet.launchEmulator(myAvdName, myCommandLine, getProcessHandler());
|
||||
}
|
||||
else if (getProcessHandler().isStartNotified()) {
|
||||
message("Canceled", STDERR);
|
||||
getProcessHandler().destroyProcess();
|
||||
return false;
|
||||
}
|
||||
if (myAvdName == null) {
|
||||
chooseAvd();
|
||||
}
|
||||
else {
|
||||
if (myAvdName != null) {
|
||||
myFacet.launchEmulator(myAvdName, myCommandLine, getProcessHandler());
|
||||
}
|
||||
else if (getProcessHandler().isStartNotified()) {
|
||||
message("Canceled", STDERR);
|
||||
getProcessHandler().destroyProcess();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
message("USB device not found", STDERR);
|
||||
@@ -485,10 +479,6 @@ public abstract class AndroidRunningState implements RunProfileState, AndroidDeb
|
||||
getProcessHandler().notifyTextAvailable(message + '\n', outputKey);
|
||||
}
|
||||
|
||||
private boolean isAndroidSdk15OrHigher() {
|
||||
return myFacet.getConfiguration().getAndroidSdk() instanceof AndroidSdkImpl;
|
||||
}
|
||||
|
||||
public void clientChanged(Client client, int changeMask) {
|
||||
synchronized (myDebugLock) {
|
||||
if (myDebugLauncher == null) {
|
||||
@@ -529,10 +519,6 @@ public abstract class AndroidRunningState implements RunProfileState, AndroidDeb
|
||||
|
||||
@Nullable
|
||||
private Boolean isCompatibleDevice(@NotNull IDevice device) {
|
||||
if (!isAndroidSdk15OrHigher()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (myTargetChooser instanceof EmulatorTargetChooser) {
|
||||
if (device.isEmulator()) {
|
||||
String avdName = device.isEmulator() ? device.getAvdName() : null;
|
||||
|
||||
@@ -18,10 +18,8 @@ package org.jetbrains.android.sdk;
|
||||
|
||||
import com.android.ddmlib.AndroidDebugBridge;
|
||||
import com.android.ddmlib.DdmPreferences;
|
||||
import com.android.sdklib.IAndroidTarget;
|
||||
import com.android.sdklib.ISdkLog;
|
||||
import com.android.sdklib.SdkConstants;
|
||||
import com.android.sdklib.SdkManager;
|
||||
import com.android.sdklib.*;
|
||||
import com.android.sdklib.internal.project.ProjectProperties;
|
||||
import com.intellij.CommonBundle;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -33,8 +31,10 @@ import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.reference.SoftReference;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import gnu.trove.TIntObjectHashMap;
|
||||
import org.jetbrains.android.actions.AndroidEnableDdmsAction;
|
||||
import org.jetbrains.android.util.AndroidUtils;
|
||||
import org.jetbrains.android.util.BufferingFileWrapper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -45,13 +45,9 @@ import java.util.Map;
|
||||
import static org.jetbrains.android.util.AndroidUtils.ADB;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: Eugene.Kudelevsky
|
||||
* Date: Jun 2, 2009
|
||||
* Time: 2:35:49 PM
|
||||
* To change this template use File | Settings | File Templates.
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
public abstract class AndroidSdk {
|
||||
public class AndroidSdk {
|
||||
private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.sdk.AndroidSdk");
|
||||
|
||||
private static volatile boolean myDdmLibInitialized = false;
|
||||
@@ -63,11 +59,58 @@ public abstract class AndroidSdk {
|
||||
private final Map<IAndroidTarget, SoftReference<AndroidTargetData>> myTargetDatas =
|
||||
new HashMap<IAndroidTarget, SoftReference<AndroidTargetData>>();
|
||||
|
||||
@NotNull
|
||||
public abstract String getLocation();
|
||||
private final SdkManager mySdkManager;
|
||||
private IAndroidTarget[] myTargets = null;
|
||||
|
||||
private final int myPlatformToolsRevision;
|
||||
|
||||
public AndroidSdk(@NotNull SdkManager sdkManager, @NotNull String sdkDirOsPath) {
|
||||
mySdkManager = sdkManager;
|
||||
|
||||
final File platformToolsPropFile =
|
||||
new File(sdkDirOsPath + File.separatorChar + SdkConstants.FD_PLATFORM_TOOLS + File.separatorChar + SdkConstants.FN_SOURCE_PROP);
|
||||
int platformToolsRevision = -1;
|
||||
if (platformToolsPropFile.exists() && platformToolsPropFile.isFile()) {
|
||||
final Map<String, String> map =
|
||||
ProjectProperties.parsePropertyFile(new BufferingFileWrapper(platformToolsPropFile), new MessageBuildingSdkLog());
|
||||
final String revision = map.get("Pkg.Revision");
|
||||
if (revision != null) {
|
||||
try {
|
||||
platformToolsRevision = Integer.parseInt(revision);
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
LOG.info(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
myPlatformToolsRevision = platformToolsRevision > 0 ? platformToolsRevision : -1;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public abstract IAndroidTarget[] getTargets();
|
||||
public String getLocation() {
|
||||
String location = mySdkManager.getLocation();
|
||||
if (location.length() > 0) {
|
||||
char lastChar = location.charAt(location.length() - 1);
|
||||
if (lastChar == '/' || lastChar == File.separatorChar) {
|
||||
return location.substring(0, location.length() - 1);
|
||||
}
|
||||
}
|
||||
return location;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public IAndroidTarget[] getTargets() {
|
||||
if (myTargets == null) {
|
||||
IAndroidTarget[] targets = mySdkManager.getTargets();
|
||||
if (targets != null) {
|
||||
myTargets = new IAndroidTarget[targets.length];
|
||||
for (int i = 0; i < targets.length; i++) {
|
||||
myTargets[i] = new MyTargetWrapper(targets[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return myTargets;
|
||||
}
|
||||
|
||||
// be careful! target name is NOT unique
|
||||
|
||||
@@ -108,18 +151,19 @@ public abstract class AndroidSdk {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract IAndroidTarget findTargetByHashString(@NotNull String hashString);
|
||||
public IAndroidTarget findTargetByHashString(@NotNull String hashString) {
|
||||
final IAndroidTarget target = mySdkManager.getTargetFromHashString(hashString);
|
||||
return target != null ? new MyTargetWrapper(target) : null;
|
||||
}
|
||||
|
||||
public abstract int getPlatformToolsRevision();
|
||||
public int getPlatformToolsRevision() {
|
||||
return myPlatformToolsRevision;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static AndroidSdk parse(@NotNull String path, @NotNull ISdkLog log) {
|
||||
final SdkManager manager = AndroidSdkUtils.createSdkManager(path, log);
|
||||
|
||||
if (manager != null) {
|
||||
return new AndroidSdkImpl(manager, path);
|
||||
}
|
||||
return null;
|
||||
return manager != null ? new AndroidSdk(manager, path) : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -181,8 +225,9 @@ public abstract class AndroidSdk {
|
||||
|
||||
if (!finished) {
|
||||
int result = Messages
|
||||
.showOkCancelDialog(project, "ADB not responding. Please, kill \"" + SdkConstants.FN_ADB + "\" process manually and click 'Retry'",
|
||||
CommonBundle.getErrorTitle(), "&Retry", "&Cancel", Messages.getErrorIcon());
|
||||
.showOkCancelDialog(project,
|
||||
"ADB not responding. Please, kill \"" + SdkConstants.FN_ADB + "\" process manually and click 'Retry'",
|
||||
CommonBundle.getErrorTitle(), "&Retry", "&Cancel", Messages.getErrorIcon());
|
||||
|
||||
if (result == 1) {
|
||||
forceInterrupt(t);
|
||||
@@ -286,6 +331,11 @@ public abstract class AndroidSdk {
|
||||
return AndroidDebugBridge.getBridge();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SdkManager getSdkManager() {
|
||||
return mySdkManager;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public AndroidTargetData getTargetData(@NotNull IAndroidTarget target) {
|
||||
final SoftReference<AndroidTargetData> targetDataRef = myTargetDatas.get(target);
|
||||
@@ -356,4 +406,206 @@ public abstract class AndroidSdk {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyTargetWrapper implements IAndroidTarget {
|
||||
private final TIntObjectHashMap<String> myAlternativePaths;
|
||||
private final IAndroidTarget myWrapee;
|
||||
|
||||
private MyTargetWrapper(@NotNull IAndroidTarget wrapee) {
|
||||
myWrapee = wrapee;
|
||||
myAlternativePaths = new TIntObjectHashMap<String>();
|
||||
String oldPlatformToolsFolderPath = getOldPlatformToolsFolderPath();
|
||||
if (!canFindTool(AAPT)) {
|
||||
myAlternativePaths.put(AAPT, oldPlatformToolsFolderPath + SdkConstants.FN_AAPT);
|
||||
}
|
||||
if (!canFindTool(AIDL)) {
|
||||
myAlternativePaths.put(AIDL, oldPlatformToolsFolderPath + SdkConstants.FN_AIDL);
|
||||
}
|
||||
if (!canFindTool(DX)) {
|
||||
myAlternativePaths.put(DX, oldPlatformToolsFolderPath + SdkConstants.FN_DX);
|
||||
}
|
||||
if (!canFindTool(DX_JAR)) {
|
||||
myAlternativePaths.put(DX_JAR, oldPlatformToolsFolderPath + SdkConstants.FD_LIB + File.separator + SdkConstants.FN_DX_JAR);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getOldPlatformToolsFolderPath() {
|
||||
String platformLocation;
|
||||
if (myWrapee.isPlatform()) {
|
||||
platformLocation = myWrapee.getLocation();
|
||||
}
|
||||
else {
|
||||
IAndroidTarget parent = myWrapee.getParent();
|
||||
platformLocation = parent != null ? parent.getLocation() : null;
|
||||
}
|
||||
if (platformLocation == null) {
|
||||
return null;
|
||||
}
|
||||
return platformLocation + SdkConstants.FD_TOOLS + File.separator;
|
||||
}
|
||||
|
||||
private boolean canFindTool(int pathId) {
|
||||
String path = myWrapee.getPath(pathId);
|
||||
return path != null && new File(path).exists();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocation() {
|
||||
return myWrapee.getLocation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVendor() {
|
||||
return myWrapee.getVendor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return myWrapee.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFullName() {
|
||||
return myWrapee.getFullName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClasspathName() {
|
||||
return myWrapee.getClasspathName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getShortClasspathName() {
|
||||
return myWrapee.getShortClasspathName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return myWrapee.getDescription();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AndroidVersion getVersion() {
|
||||
return myWrapee.getVersion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersionName() {
|
||||
return myWrapee.getVersionName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRevision() {
|
||||
return myWrapee.getRevision();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlatform() {
|
||||
return myWrapee.isPlatform();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IAndroidTarget getParent() {
|
||||
return myWrapee.getParent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPath(int pathId) {
|
||||
String path = myAlternativePaths.get(pathId);
|
||||
if (path != null) {
|
||||
return path;
|
||||
}
|
||||
return myWrapee.getPath(pathId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasRenderingLibrary() {
|
||||
return myWrapee.hasRenderingLibrary();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getSkins() {
|
||||
return myWrapee.getSkins();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultSkin() {
|
||||
return myWrapee.getDefaultSkin();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IOptionalLibrary[] getOptionalLibraries() {
|
||||
return myWrapee.getOptionalLibraries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getPlatformLibraries() {
|
||||
return myWrapee.getPlatformLibraries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProperty(String name) {
|
||||
return myWrapee.getProperty(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getProperty(String name, Integer defaultValue) {
|
||||
return myWrapee.getProperty(name, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean getProperty(String name, Boolean defaultValue) {
|
||||
return myWrapee.getProperty(name, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getProperties() {
|
||||
return myWrapee.getProperties();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUsbVendorId() {
|
||||
return myWrapee.getUsbVendorId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ISystemImage[] getSystemImages() {
|
||||
return myWrapee.getSystemImages();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ISystemImage getSystemImage(String abiType) {
|
||||
return myWrapee.getSystemImage(abiType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRunOn(IAndroidTarget target) {
|
||||
return myWrapee.canRunOn(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String hashString() {
|
||||
return myWrapee.hashString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(IAndroidTarget o) {
|
||||
return myWrapee.compareTo(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof MyTargetWrapper)) {
|
||||
return false;
|
||||
}
|
||||
MyTargetWrapper other = (MyTargetWrapper)obj;
|
||||
return myWrapee.equals(other.myWrapee);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return myWrapee.hashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,308 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.android.sdk;
|
||||
|
||||
import com.android.sdklib.*;
|
||||
import com.android.sdklib.internal.project.ProjectProperties;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import gnu.trove.TIntObjectHashMap;
|
||||
import org.jetbrains.android.util.BufferingFileWrapper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: Eugene.Kudelevsky
|
||||
* Date: Jun 2, 2009
|
||||
* Time: 2:37:00 PM
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class AndroidSdkImpl extends AndroidSdk {
|
||||
private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.sdk.AndroidSdkImpl");
|
||||
private final SdkManager mySdkManager;
|
||||
private IAndroidTarget[] myTargets = null;
|
||||
|
||||
private final int myPlatformToolsRevision;
|
||||
|
||||
public AndroidSdkImpl(@NotNull SdkManager sdkManager, @NotNull String sdkDirOsPath) {
|
||||
mySdkManager = sdkManager;
|
||||
|
||||
final File platformToolsPropFile =
|
||||
new File(sdkDirOsPath + File.separatorChar + SdkConstants.FD_PLATFORM_TOOLS + File.separatorChar + SdkConstants.FN_SOURCE_PROP);
|
||||
int platformToolsRevision = -1;
|
||||
if (platformToolsPropFile.exists() && platformToolsPropFile.isFile()) {
|
||||
final Map<String, String> map =
|
||||
ProjectProperties.parsePropertyFile(new BufferingFileWrapper(platformToolsPropFile), new MessageBuildingSdkLog());
|
||||
final String revision = map.get("Pkg.Revision");
|
||||
if (revision != null) {
|
||||
try {
|
||||
platformToolsRevision = Integer.parseInt(revision);
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
LOG.info(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
myPlatformToolsRevision = platformToolsRevision > 0 ? platformToolsRevision : -1;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getLocation() {
|
||||
String location = mySdkManager.getLocation();
|
||||
if (location.length() > 0) {
|
||||
char lastChar = location.charAt(location.length() - 1);
|
||||
if (lastChar == '/' || lastChar == File.separatorChar) {
|
||||
return location.substring(0, location.length() - 1);
|
||||
}
|
||||
}
|
||||
return location;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public IAndroidTarget[] getTargets() {
|
||||
if (myTargets == null) {
|
||||
IAndroidTarget[] targets = mySdkManager.getTargets();
|
||||
if (targets != null) {
|
||||
myTargets = new IAndroidTarget[targets.length];
|
||||
for (int i = 0; i < targets.length; i++) {
|
||||
myTargets[i] = new MyTargetWrapper(targets[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return myTargets;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IAndroidTarget findTargetByHashString(@NotNull String hashString) {
|
||||
final IAndroidTarget target = mySdkManager.getTargetFromHashString(hashString);
|
||||
return target != null ? new MyTargetWrapper(target) : null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public SdkManager getSdkManager() {
|
||||
return mySdkManager;
|
||||
}
|
||||
|
||||
public int getPlatformToolsRevision() {
|
||||
return myPlatformToolsRevision;
|
||||
}
|
||||
|
||||
private static class MyTargetWrapper implements IAndroidTarget {
|
||||
private final TIntObjectHashMap<String> myAlternativePaths;
|
||||
private final IAndroidTarget myWrapee;
|
||||
|
||||
private MyTargetWrapper(@NotNull IAndroidTarget wrapee) {
|
||||
myWrapee = wrapee;
|
||||
myAlternativePaths = new TIntObjectHashMap<String>();
|
||||
String oldPlatformToolsFolderPath = getOldPlatformToolsFolderPath();
|
||||
if (!canFindTool(AAPT)) {
|
||||
myAlternativePaths.put(AAPT, oldPlatformToolsFolderPath + SdkConstants.FN_AAPT);
|
||||
}
|
||||
if (!canFindTool(AIDL)) {
|
||||
myAlternativePaths.put(AIDL, oldPlatformToolsFolderPath + SdkConstants.FN_AIDL);
|
||||
}
|
||||
if (!canFindTool(DX)) {
|
||||
myAlternativePaths.put(DX, oldPlatformToolsFolderPath + SdkConstants.FN_DX);
|
||||
}
|
||||
if (!canFindTool(DX_JAR)) {
|
||||
myAlternativePaths.put(DX_JAR, oldPlatformToolsFolderPath + SdkConstants.FD_LIB + File.separator + SdkConstants.FN_DX_JAR);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getOldPlatformToolsFolderPath() {
|
||||
String platformLocation;
|
||||
if (myWrapee.isPlatform()) {
|
||||
platformLocation = myWrapee.getLocation();
|
||||
}
|
||||
else {
|
||||
IAndroidTarget parent = myWrapee.getParent();
|
||||
platformLocation = parent != null ? parent.getLocation() : null;
|
||||
}
|
||||
if (platformLocation == null) {
|
||||
return null;
|
||||
}
|
||||
return platformLocation + SdkConstants.FD_TOOLS + File.separator;
|
||||
}
|
||||
|
||||
private boolean canFindTool(int pathId) {
|
||||
String path = myWrapee.getPath(pathId);
|
||||
return path != null && new File(path).exists();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocation() {
|
||||
return myWrapee.getLocation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVendor() {
|
||||
return myWrapee.getVendor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return myWrapee.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFullName() {
|
||||
return myWrapee.getFullName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClasspathName() {
|
||||
return myWrapee.getClasspathName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getShortClasspathName() {
|
||||
return myWrapee.getShortClasspathName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return myWrapee.getDescription();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AndroidVersion getVersion() {
|
||||
return myWrapee.getVersion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersionName() {
|
||||
return myWrapee.getVersionName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRevision() {
|
||||
return myWrapee.getRevision();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlatform() {
|
||||
return myWrapee.isPlatform();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IAndroidTarget getParent() {
|
||||
return myWrapee.getParent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPath(int pathId) {
|
||||
String path = myAlternativePaths.get(pathId);
|
||||
if (path != null) {
|
||||
return path;
|
||||
}
|
||||
return myWrapee.getPath(pathId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasRenderingLibrary() {
|
||||
return myWrapee.hasRenderingLibrary();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getSkins() {
|
||||
return myWrapee.getSkins();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultSkin() {
|
||||
return myWrapee.getDefaultSkin();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IOptionalLibrary[] getOptionalLibraries() {
|
||||
return myWrapee.getOptionalLibraries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getPlatformLibraries() {
|
||||
return myWrapee.getPlatformLibraries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProperty(String name) {
|
||||
return myWrapee.getProperty(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getProperty(String name, Integer defaultValue) {
|
||||
return myWrapee.getProperty(name, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean getProperty(String name, Boolean defaultValue) {
|
||||
return myWrapee.getProperty(name, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getProperties() {
|
||||
return myWrapee.getProperties();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUsbVendorId() {
|
||||
return myWrapee.getUsbVendorId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ISystemImage[] getSystemImages() {
|
||||
return myWrapee.getSystemImages();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ISystemImage getSystemImage(String abiType) {
|
||||
return myWrapee.getSystemImage(abiType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRunOn(IAndroidTarget target) {
|
||||
return myWrapee.canRunOn(target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String hashString() {
|
||||
return myWrapee.hashString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(IAndroidTarget o) {
|
||||
return myWrapee.compareTo(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof MyTargetWrapper)) {
|
||||
return false;
|
||||
}
|
||||
MyTargetWrapper other = (MyTargetWrapper)obj;
|
||||
return myWrapee.equals(other.myWrapee);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return myWrapee.hashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user