drop remote test data controller for local TestDiscoveryIndex

This commit is contained in:
Dmitry Batkovich
2018-02-22 12:41:38 +03:00
parent c4b2dccbe5
commit 34c531a018
3 changed files with 5 additions and 132 deletions
@@ -1,31 +0,0 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.execution.testDiscovery;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vfs.VirtualFile;
import java.nio.file.Paths;
public class ConfigureTestDiscoveryAction extends AnAction {
@Override
public void update(AnActionEvent e) {
e.getPresentation().setEnabledAndVisible(Registry.is(TestDiscoveryExtension.TEST_DISCOVERY_REGISTRY_KEY) && e.getProject() != null);
}
@Override
public void actionPerformed(AnActionEvent e) {
final FileChooserDescriptor folderDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor();
folderDescriptor.setTitle("Choose External Discovery Index Directory");
folderDescriptor.setDescription("Local directory with indices retrieved from CI \n" +
"to be replaced within TeamCity IDEA plugin");
final VirtualFile virtualFile = FileChooser.chooseFile(folderDescriptor, e.getProject(), null);
if (virtualFile != null) {
TestDiscoveryIndex.getInstance(e.getProject()).setRemoteTestRunDataPath(Paths.get(virtualFile.getPath()));
}
}
}
@@ -6,11 +6,9 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.util.Ref;
import com.intellij.util.ThrowableConvertor;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.io.PathKt;
import gnu.trove.THashSet;
import gnu.trove.TIntArrayList;
import gnu.trove.TIntObjectHashMap;
import org.jetbrains.annotations.NotNull;
@@ -28,7 +26,6 @@ public class TestDiscoveryIndex implements Disposable {
static final Logger LOG = Logger.getInstance(TestDiscoveryIndex.class);
private final TestDataController myLocalTestRunDataController;
private final TestDataController myRemoteTestRunDataController;
public TestDiscoveryIndex(Project project) {
this(project, TestDiscoveryExtension.baseTestDiscoveryPathForProject(project));
@@ -36,7 +33,6 @@ public class TestDiscoveryIndex implements Disposable {
public TestDiscoveryIndex(final Project project, @NotNull Path basePath) {
myLocalTestRunDataController = new TestDataController(basePath, false);
myRemoteTestRunDataController = new TestDataController(null, true);
if (Files.exists(basePath)) {
StartupManager.getInstance(project).registerPostStartupActivity(() -> ApplicationManager.getApplication().executeOnPooledThread(() -> {
@@ -46,17 +42,10 @@ public class TestDiscoveryIndex implements Disposable {
}
public boolean hasTestTrace(@NotNull String testClassName, @NotNull String testMethodName, byte frameworkId) throws IOException {
String testName = testClassName + "-" + testMethodName;
Boolean result = myLocalTestRunDataController.withTestDataHolder(localHolder -> {
TestInfoHolder.TestId testId = localHolder.createTestId(testClassName, testMethodName, frameworkId);
final int testNameId = localHolder.myTestEnumerator.tryEnumerate(testId);
if (testNameId == 0) {
return myRemoteTestRunDataController.withTestDataHolder(remoteHolder -> {
final int testNameId1 = remoteHolder.myTestEnumerator.tryEnumerate(testId);
return testNameId1 != 0 && remoteHolder.myTestNameToUsedClassesAndMethodMap.get(testNameId1) != null;
}) != null;
}
return localHolder.myTestNameToUsedClassesAndMethodMap.get(testNameId) != null;
return testNameId != 0 && localHolder.myTestNameToUsedClassesAndMethodMap.get(testNameId) != null;
});
return result == Boolean.TRUE;
}
@@ -74,17 +63,8 @@ public class TestDiscoveryIndex implements Disposable {
});
}
public void setRemoteTestRunDataPath(@NotNull Path path) {
if (!TestInfoHolder.isValidPath(path)) {
path = null;
}
myRemoteTestRunDataController.init(path);
// todo: should we remove our local run data ?
}
@NotNull
public MultiMap<String, String> getTestsByMethodName(@NotNull String classFQName, @NotNull String methodName, byte frameworkId) throws IOException {
//TODO support framework prefix again
return myLocalTestRunDataController.withTestDataHolder(new ThrowableConvertor<TestInfoHolder, MultiMap<String, String>, IOException>() {
@Override
public MultiMap<String, String> convert(TestInfoHolder localHolder) throws IOException {
@@ -102,46 +82,12 @@ public class TestDiscoveryIndex implements Disposable {
}
private Collection<TestInfoHolder.TestId> getTestIdsByMethod(TestInfoHolder localHolder) throws IOException {
TIntArrayList remoteList = myRemoteTestRunDataController.withTestDataHolder(
remoteHolder -> remoteHolder.myMethodQNameToTestNames.get(
TestInfoHolder.createKey(
remoteHolder.myClassEnumerator.enumerate(classFQName),
remoteHolder.myMethodEnumerator.enumerate(methodName)
)
)
);
final TIntArrayList localList = localHolder.myMethodQNameToTestNames.get(
TestInfoHolder.createKey(
localHolder.myClassEnumerator.enumerate(classFQName),
localHolder.myMethodEnumerator.enumerate(methodName)
)
);
if (remoteList == null) {
return testIdsToTestNames(localList, localHolder);
}
Collection<TestInfoHolder.TestId> testsFromRemote =
myRemoteTestRunDataController.withTestDataHolder(
remoteHolder -> testIdsToTestNames(remoteList, remoteHolder)
);
if (localList == null) return testsFromRemote;
THashSet<TestInfoHolder.TestId> setOfStrings = new THashSet<>(testsFromRemote);
for (int testNameId : localList.toNativeArray()) {
if (testNameId < 0) {
setOfStrings.remove(localHolder.myTestEnumerator.valueOf(-testNameId));
continue;
}
setOfStrings.add(localHolder.myTestEnumerator.valueOf(testNameId));
}
return setOfStrings;
}
private Collection<TestInfoHolder.TestId> testIdsToTestNames(TIntArrayList localList, TestInfoHolder localHolder) throws IOException {
if (localList == null) return Collections.emptyList();
final ArrayList<TestInfoHolder.TestId> result = new ArrayList<>(localList.size());
@@ -160,26 +106,16 @@ public class TestDiscoveryIndex implements Disposable {
return myLocalTestRunDataController.withTestDataHolder(new ThrowableConvertor<TestInfoHolder, Collection<String>, IOException>() {
@Override
public Collection<String> convert(TestInfoHolder localHolder) throws IOException {
List<String> modules = getTestModules(localHolder);
List<String> modulesFromRemote = myRemoteTestRunDataController.withTestDataHolder(
this::getTestModules);
THashSet<String> modulesSet = new THashSet<>(modules);
if (modulesFromRemote != null) modulesSet.addAll(modulesFromRemote);
return modulesSet;
}
private List<String> getTestModules(TestInfoHolder holder) throws IOException {
// todo merging with remote
final TIntArrayList list = holder.myTestNameToNearestModule.get(
final TIntArrayList list = localHolder.myTestNameToNearestModule.get(
TestInfoHolder.createKey(
holder.myClassEnumerator.enumerate(classFQName),
holder.myMethodEnumerator.enumerate(methodName)
localHolder.myClassEnumerator.enumerate(classFQName),
localHolder.myMethodEnumerator.enumerate(methodName)
)
);
if (list == null) return Collections.emptyList();
final ArrayList<String> result = new ArrayList<>(list.size());
for (int moduleNameId : list.toNativeArray()) {
final TestInfoHolder.ModuleId moduleNameWithPrefix = holder.myModuleEnumerator.valueOf(moduleNameId);
final TestInfoHolder.ModuleId moduleNameWithPrefix = localHolder.myModuleEnumerator.valueOf(moduleNameId);
if (moduleNameWithPrefix != null && moduleNameWithPrefix.getFrameworkId() == frameworkId) {
result.add(moduleNameWithPrefix.getModuleName());
}
@@ -261,7 +197,6 @@ public class TestDiscoveryIndex implements Disposable {
@Override
public void dispose() {
myLocalTestRunDataController.dispose();
myRemoteTestRunDataController.dispose();
}
public void updateFromData(@NotNull String testClassName,
@@ -281,34 +216,6 @@ public class TestDiscoveryIndex implements Disposable {
}
}
TIntObjectHashMap<TIntArrayList> previousClassData = localHolder.myTestNameToUsedClassesAndMethodMap.get(testNameId);
if (previousClassData == null) {
previousClassData = myRemoteTestRunDataController.withTestDataHolder(
remoteDataHolder -> {
TIntObjectHashMap<TIntArrayList> remoteClassData = remoteDataHolder.myTestNameToUsedClassesAndMethodMap.get(testNameId);
if (remoteClassData == null) return null;
TIntObjectHashMap<TIntArrayList> result1 = new TIntObjectHashMap<>(remoteClassData.size());
Ref<IOException> exceptionRef = new Ref<>();
boolean processingResult = remoteClassData.forEachEntry((remoteClassKey, remoteClassMethodIds) -> {
try {
int localClassKey =
localHolder.myClassEnumeratorCache.enumerate(remoteDataHolder.myClassEnumeratorCache.valueOf(remoteClassKey));
TIntArrayList localClassIds = new TIntArrayList(remoteClassMethodIds.size());
for (int methodId : remoteClassMethodIds.toNativeArray()) {
localClassIds
.add(localHolder.myMethodEnumeratorCache.enumerate(remoteDataHolder.myMethodEnumeratorCache.valueOf(methodId)));
}
result1.put(localClassKey, localClassIds);
return true;
} catch (IOException ex) {
exceptionRef.set(ex);
return false;
}
});
if (!processingResult) throw exceptionRef.get();
return result1;
});
}
localHolder.doUpdateFromDiff(testNameId, result, previousClassData, moduleName != null ? localHolder.myModuleEnumerator.enumerate(new TestInfoHolder.ModuleId(moduleName, frameworkId)) : null);
return null;
});
-3
View File
@@ -395,9 +395,6 @@
<action id="ShowRecentTests" class="com.intellij.testIntegration.ShowRecentTests">
<keyboard-shortcut first-keystroke="control shift SEMICOLON" keymap="$default"/>
</action>
<action class="com.intellij.execution.testDiscovery.ConfigureTestDiscoveryAction" internal="true" id="TestDiscoveryIndexChooser" text="Choose external test discovery indices">
<add-to-group group-id="Internal" anchor="last"/>
</action>
<action class="com.intellij.execution.testDiscovery.ShowDiscoveredTestsAction" internal="true" id="ShowDiscoveredTests" text="Show Discovered Tests">
<add-to-group group-id="Internal" anchor="last"/>