remove obsolete code: merge AndroidSdk and AndroidSdkImpl classes

This commit is contained in:
Eugene Kudelevsky
2012-02-06 15:27:58 +04:00
parent ab29eecad0
commit 382d28e522
6 changed files with 306 additions and 385 deletions
@@ -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();
}
}
}