From 6db9874a9a6cecd1b90793edfd2f8bfa8142c8f6 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Wed, 9 Jul 2014 20:23:27 +0400 Subject: more on IDEA-126591 Android Support NPE (IDEA-CR-336) --- .../jetbrains/android/database/AndroidDataSourcePropertiesDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'android/ultimate') diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java index 4a1207f9468..d762a247dba 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java @@ -7,6 +7,7 @@ import com.android.ddmlib.MultiLineReceiver; import com.android.tools.idea.ddms.DeviceComboBoxRenderer; import com.intellij.database.dataSource.AbstractDataSourceConfigurable; import com.intellij.database.dataSource.DatabaseDriver; +import com.intellij.database.util.DbImplUtil; import com.intellij.facet.ProjectFacetManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; @@ -357,8 +358,7 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu public void apply() { saveData(myDataSource); - boolean canConnect = StringUtil.isNotEmpty(myDataSource.getState().getDeviceId()); - if (canConnect) { + if (DbImplUtil.canConnectTo(myDataSource)) { AndroidSynchronizeHandler.doSynchronize(myProject, Collections.singletonList(myDataSource)); } -- cgit v1.2.3 From 249d2179af6fba3b2a1faebb5f85c94ccb2a5556 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Wed, 9 Jul 2014 20:32:02 +0400 Subject: NotNull assertion fix --- android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'android/ultimate') diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java index 89826a7e0cc..23d8ad291a6 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java @@ -374,7 +374,8 @@ class AndroidDbUtil { @Nullable public static String getDeviceId(@NotNull IDevice device) { if (device.isEmulator()) { - return DEVICE_ID_EMULATOR_PREFIX + replaceByDirAllowedName(device.getAvdName()); + String avdName = device.getAvdName(); + return avdName == null ? null : DEVICE_ID_EMULATOR_PREFIX + replaceByDirAllowedName(avdName); } else { final String serialNumber = device.getSerialNumber(); -- cgit v1.2.3 From 35d76101f9342836c2c4f394f22895769aac13f0 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Fri, 11 Jul 2014 16:52:36 +0400 Subject: fix IAE --- .../android/database/AndroidDataSourceProjectComponent.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'android/ultimate') diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java index 70718e499f0..fdaed29898e 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java @@ -45,7 +45,12 @@ public class AndroidDataSourceProjectComponent extends AbstractProjectComponent for (AndroidDataSource source : AndroidDataSourceStorage.getInstance(myProject).getDataSources()) { final AndroidDataSource.State s = source.getState(); - result.add(new AndroidRemoteDbInfo(s.getDeviceId(), s.getPackageName(), s.getDatabaseName(), s.isExternal())); + String deviceId = s.getDeviceId(); + + if (deviceId == null) { + deviceId = ""; + } + result.add(new AndroidRemoteDbInfo(deviceId, s.getPackageName(), s.getDatabaseName(), s.isExternal())); } return result; } -- cgit v1.2.3 From 069cebe18401335cfa87e996b9f18545f181c824 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 18 Jul 2014 03:12:23 +0400 Subject: cleanup --- .../android/database/AndroidDataSource.java | 109 +++++++-------------- .../AndroidDataSourceProjectComponent.java | 4 +- .../AndroidDataSourcePropertiesDialog.java | 18 ++-- .../android/database/AndroidDataSourceStorage.java | 2 +- .../android/database/AndroidDbManager.java | 2 +- .../jetbrains/android/database/AndroidDbUtil.java | 13 ++- 6 files changed, 54 insertions(+), 94 deletions(-) (limited to 'android/ultimate') diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java index 8d51dc19a4e..37e9cc026fa 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java @@ -14,7 +14,6 @@ import com.intellij.util.xmlb.annotations.Tag; import icons.AndroidIcons; import org.jdom.Element; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.io.IOException; @@ -30,8 +29,8 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif private State myState = new State(); - public AndroidDataSource(@Nullable String name) { - super(name, "org.sqlite.JDBC", "", null, null); + public AndroidDataSource() { + super("", "org.sqlite.JDBC", "", null, null); } @NotNull @@ -41,14 +40,17 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif @NotNull public State buildFullState() { - myState.setName(getName()); - myState.setClasspathElements(serializeClasspathElements()); + myState.name = getName(); + //myState.uuid = getUniqueId(); + myState.classpathElements = serializeClasspathElements(); return myState; } public void loadState(@NotNull State state) { myState = state; - setName(state.getName()); + setName(state.name); + // todo persist uuid must be preserved between sessions + //setUniqueId(state.uuid); setClasspathElements(deserializeClasspathElements()); resetUrl(); } @@ -78,7 +80,7 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif @NotNull private List deserializeClasspathElements() { - final Element[] serializedElements = myState.getClasspathElements(); + final Element[] serializedElements = myState.classpathElements; if (serializedElements == null || serializedElements.length == 0) { return Collections.emptyList(); @@ -105,7 +107,7 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif public String buildLocalDbFileOsPath() { final State state = getState(); return AndroidRemoteDataBaseManager.buildLocalDbFileOsPath( - state.getDeviceId(), state.getPackageName(), state.getDatabaseName(), state.isExternal()); + state.deviceId, state.packageName, state.databaseName, state.external); } @Override @@ -115,15 +117,16 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif @NotNull public AndroidDataSource copy() { - final AndroidDataSource newSource = new AndroidDataSource(getName()); - final State newState = newSource.getState(); - final State state = buildFullState(); - newState.setName(state.getName()); - newState.setDeviceId(state.getDeviceId()); - newState.setPackageName(state.getPackageName()); - newState.setDatabaseName(state.getDatabaseName()); - newState.setExternal(state.isExternal()); - newState.setClasspathElements(cloneElementsArray(state.getClasspathElements())); + AndroidDataSource newSource = new AndroidDataSource(); + newSource.setName(getName()); + State newState = newSource.getState(); + State state = buildFullState(); + newState.name = state.name; + newState.deviceId = state.deviceId; + newState.packageName = state.packageName; + newState.databaseName = state.databaseName; + newState.external = state.external; + newState.classpathElements = cloneElementsArray(state.classpathElements); newSource.resetUrl(); return newSource; } @@ -153,71 +156,25 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif if (!(o instanceof AndroidDataSource)) return super.equalConfiguration(o); State s = ((AndroidDataSource)o).getState(); - if (!Comparing.equal(myState.myDeviceId, s.myDeviceId)) return false; - if (!Comparing.equal(myState.myPackageName, s.myPackageName)) return false; - if (!Comparing.equal(myState.myDatabaseName, s.myDatabaseName)) return false; - if (!Comparing.equal(myState.myExternal, s.myExternal)) return false; - if (!Comparing.equal(myState.myExternal, s.myExternal)) return false; + if (!Comparing.equal(myState.deviceId, s.deviceId)) return false; + if (!Comparing.equal(myState.packageName, s.packageName)) return false; + if (!Comparing.equal(myState.databaseName, s.databaseName)) return false; + if (!Comparing.equal(myState.external, s.external)) return false; + if (!Comparing.equal(myState.external, s.external)) return false; return true; } @Tag("data-source") public static class State { - private String myName = ""; - private String myDeviceId = ""; - private String myPackageName = ""; - private String myDatabaseName = ""; - private boolean myExternal = false; - private Element[] myClasspathElements = new Element[0]; - - public String getDeviceId() { - return myDeviceId; - } - - public String getDatabaseName() { - return myDatabaseName; - } - - public String getPackageName() { - return myPackageName; - } - - public String getName() { - return myName; - } - - public boolean isExternal() { - return myExternal; - } - + //@Attribute + //public String uuid = ""; + public String deviceId = ""; + public String name = ""; + public String packageName = ""; + public String databaseName = ""; + public boolean external = false; @Tag("classpath-elements") - public Element[] getClasspathElements() { - return myClasspathElements; - } - - public void setDeviceId(String deviceId) { - myDeviceId = deviceId; - } - - public void setDatabaseName(String databaseName) { - myDatabaseName = databaseName; - } - - public void setPackageName(String packageName) { - myPackageName = packageName; - } - - public void setExternal(boolean external) { - myExternal = external; - } - - public void setName(String name) { - myName = name; - } - - public void setClasspathElements(Element[] classpathElements) { - myClasspathElements = classpathElements; - } + public Element[] classpathElements = new Element[0]; } } \ No newline at end of file diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java index fdaed29898e..17d77f098e2 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceProjectComponent.java @@ -45,12 +45,12 @@ public class AndroidDataSourceProjectComponent extends AbstractProjectComponent for (AndroidDataSource source : AndroidDataSourceStorage.getInstance(myProject).getDataSources()) { final AndroidDataSource.State s = source.getState(); - String deviceId = s.getDeviceId(); + String deviceId = s.deviceId; if (deviceId == null) { deviceId = ""; } - result.add(new AndroidRemoteDbInfo(deviceId, s.getPackageName(), s.getDatabaseName(), s.isExternal())); + result.add(new AndroidRemoteDbInfo(deviceId, s.packageName, s.databaseName, s.external)); } return result; } diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java index d762a247dba..5f37a6ca4f0 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java @@ -184,7 +184,7 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu private void loadDevices() { final AndroidDebugBridge bridge = AndroidSdkUtils.getDebugBridge(myProject); final IDevice[] devices = bridge != null ? getDevicesWithValidDeviceId(bridge) : new IDevice[0]; - final String deviceId = myDataSource.getState().getDeviceId(); + final String deviceId = myDataSource.getState().deviceId; final DefaultComboBoxModel model = new DefaultComboBoxModel(devices); Object selectedItem = null; @@ -347,10 +347,10 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu public void saveData(@NotNull AndroidDataSource dataSource) { dataSource.setName(getNameValue()); AndroidDataSource.State state = dataSource.getState(); - state.setDeviceId(getSelectedDeviceId()); - state.setPackageName(getSelectedPackage()); - state.setDatabaseName(getSelectedDatabase()); - state.setExternal(myExternalStorageRadioButton.isSelected()); + state.deviceId = getSelectedDeviceId(); + state.packageName = getSelectedPackage(); + state.databaseName = getSelectedDatabase(); + state.external = myExternalStorageRadioButton.isSelected(); dataSource.resetUrl(); } @@ -372,11 +372,11 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu AndroidDataSource.State state = myDataSource.getState(); myNameField.setText(StringUtil.notNullize(myDataSource.getName())); - myInternalStorageRadioButton.setSelected(!state.isExternal()); - myExternalStorageRadioButton.setSelected(state.isExternal()); + myInternalStorageRadioButton.setSelected(!state.external); + myExternalStorageRadioButton.setSelected(state.external); - myPackageNameComboBox.getEditor().setItem(StringUtil.notNullize(state.getPackageName())); - myDataBaseComboBox.getEditor().setItem(StringUtil.notNullize(state.getDatabaseName())); + myPackageNameComboBox.getEditor().setItem(StringUtil.notNullize(state.packageName)); + myDataBaseComboBox.getEditor().setItem(StringUtil.notNullize(state.databaseName)); } private void registerDeviceListener() { diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceStorage.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceStorage.java index ff7f387487e..7875fec70aa 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceStorage.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourceStorage.java @@ -35,7 +35,7 @@ public class AndroidDataSourceStorage implements PersistentStateComponent { result = ((AndroidDataSource)copyFrom).copy(); } else { - result = new AndroidDataSource(""); + result = new AndroidDataSource(); } result.setName(StringUtil.notNullize(newName, getName())); result.resolveDriver(); diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java index 23d8ad291a6..b2d703046f0 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDbUtil.java @@ -1,6 +1,9 @@ package org.jetbrains.android.database; -import com.android.ddmlib.*; +import com.android.ddmlib.AndroidDebugBridge; +import com.android.ddmlib.IDevice; +import com.android.ddmlib.MultiLineReceiver; +import com.android.ddmlib.SyncService; import com.android.tools.idea.ddms.DevicePropertyUtil; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; @@ -166,7 +169,7 @@ class AndroidDbUtil { @NotNull AndroidDebugBridge debugBridge, @NotNull AndroidDbErrorReporter errorReporter) { final AndroidDataSource.State state = dataSource.getState(); - final String deviceId = state.getDeviceId(); + final String deviceId = state.deviceId; if (deviceId == null) { errorReporter.reportError("device is not specified"); @@ -182,19 +185,19 @@ class AndroidDbUtil { errorReporter.reportError("the device is not online"); return null; } - final String packageName = dataSource.getState().getPackageName(); + final String packageName = dataSource.getState().packageName; if (packageName == null || packageName.length() == 0) { errorReporter.reportError("package name is not specified"); return null; } - final String dbName = dataSource.getState().getDatabaseName(); + final String dbName = dataSource.getState().databaseName; if (dbName == null || dbName.length() == 0) { errorReporter.reportError("database name is not specified"); return null; } - return new AndroidDbConnectionInfo(device, packageName, dbName, dataSource.getState().isExternal()); + return new AndroidDbConnectionInfo(device, packageName, dbName, dataSource.getState().external); } @Nullable -- cgit v1.2.3