mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
drop remote test data controller for local TestDiscoveryIndex
This commit is contained in:
-31
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-98
@@ -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;
|
||||
});
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user