Fix "Virtual pointer hasn't been disposed" exception in tests. Add sdk to ProjectJdkTable.
This commit is contained in:
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.android;
|
||||
import com.android.sdklib.IAndroidTarget;
|
||||
import com.android.tools.idea.res.ResourceHelper;
|
||||
import com.android.tools.idea.startup.ExternalAnnotationsSupport;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -56,6 +57,8 @@ public abstract class AndroidTestBase extends UsefulTestCase {
|
||||
|
||||
protected JavaCodeInsightTestFixture myFixture;
|
||||
|
||||
protected static final String ANDROID_SDK_NAME = "android_test_sdk";
|
||||
|
||||
protected AndroidTestBase() {
|
||||
// IDEA14 seems to be stricter regarding validating accesses against known roots. By default, it contains the entire idea folder,
|
||||
// but it doesn't seem to include our custom structure tools/idea/../adt/idea where the android plugin is placed.
|
||||
@@ -100,7 +103,7 @@ public abstract class AndroidTestBase extends UsefulTestCase {
|
||||
String sdkPath = TestUtils.getSdk().toString();
|
||||
String platformDir = TestUtils.getLatestAndroidPlatform();
|
||||
|
||||
Sdk sdk = ProjectJdkTable.getInstance().createSdk("android_test_sdk", AndroidSdkType.getInstance());
|
||||
Sdk sdk = ProjectJdkTable.getInstance().createSdk(ANDROID_SDK_NAME, AndroidSdkType.getInstance());
|
||||
SdkModificator sdkModificator = sdk.getSdkModificator();
|
||||
sdkModificator.setHomePath(sdkPath);
|
||||
|
||||
@@ -131,6 +134,9 @@ public abstract class AndroidTestBase extends UsefulTestCase {
|
||||
sdkModificator.setSdkAdditionalData(data);
|
||||
ExternalAnnotationsSupport.attachJdkAnnotations(sdkModificator);
|
||||
sdkModificator.commitChanges();
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(() -> ProjectJdkTable.getInstance().addJdk(sdk));
|
||||
|
||||
return sdk;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ import com.intellij.facet.ModifiableFacetModel;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.ProjectJdkTable;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
@@ -153,6 +155,11 @@ public abstract class AndroidTestCase extends AndroidTestBase {
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
try {
|
||||
Sdk androidSdk = ProjectJdkTable.getInstance().findJdk(ANDROID_SDK_NAME);
|
||||
if (androidSdk != null) {
|
||||
ApplicationManager.getApplication().runWriteAction(() -> ProjectJdkTable.getInstance().removeJdk(androidSdk));
|
||||
}
|
||||
|
||||
CodeStyleSettingsManager.getInstance(getProject()).dropTemporarySettings();
|
||||
myModule = null;
|
||||
myAdditionalModules = null;
|
||||
|
||||
Reference in New Issue
Block a user