mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
project model: allow marking custom source root types as tests roots (IDEA-203651)
This commit is contained in:
@@ -30,6 +30,11 @@ public class JavaModuleSourceRootTypes {
|
||||
public static final Set<? extends JpsModuleSourceRootType<?>> PRODUCTION = ContainerUtilRt.newHashSet(JavaSourceRootType.SOURCE, JavaResourceRootType.RESOURCE);
|
||||
public static final Set<? extends JpsModuleSourceRootType<?>> TESTS = ContainerUtilRt.newHashSet(JavaSourceRootType.TEST_SOURCE, JavaResourceRootType.TEST_RESOURCE);
|
||||
|
||||
/**
|
||||
* @deprecated in order to check that a source root is a java-specific tests root, use {@link #TESTS} set, for arbitrary roots use
|
||||
* {@link JpsModuleSourceRootType#isForTests()} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public static boolean isTestSourceOrResource(@Nullable JpsModuleSourceRootType<?> type) {
|
||||
return JavaSourceRootType.TEST_SOURCE.equals(type) || JavaResourceRootType.TEST_RESOURCE.equals(type);
|
||||
}
|
||||
|
||||
@@ -24,10 +24,18 @@ import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
*/
|
||||
public class JavaResourceRootType extends JpsElementTypeBase<JavaResourceRootProperties> implements
|
||||
JpsModuleSourceRootType<JavaResourceRootProperties> {
|
||||
public static final JavaResourceRootType RESOURCE = new JavaResourceRootType();
|
||||
public static final JavaResourceRootType TEST_RESOURCE = new JavaResourceRootType();
|
||||
public static final JavaResourceRootType RESOURCE = new JavaResourceRootType(false);
|
||||
public static final JavaResourceRootType TEST_RESOURCE = new JavaResourceRootType(true);
|
||||
|
||||
private JavaResourceRootType() {
|
||||
private final boolean myForTests;
|
||||
|
||||
private JavaResourceRootType(boolean isForTests) {
|
||||
myForTests = isForTests;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isForTests() {
|
||||
return myForTests;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -23,10 +23,18 @@ import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
* @author nik
|
||||
*/
|
||||
public class JavaSourceRootType extends JpsElementTypeBase<JavaSourceRootProperties> implements JpsModuleSourceRootType<JavaSourceRootProperties> {
|
||||
public static final JavaSourceRootType SOURCE = new JavaSourceRootType();
|
||||
public static final JavaSourceRootType TEST_SOURCE = new JavaSourceRootType();
|
||||
public static final JavaSourceRootType SOURCE = new JavaSourceRootType(false);
|
||||
public static final JavaSourceRootType TEST_SOURCE = new JavaSourceRootType(true);
|
||||
|
||||
private JavaSourceRootType() {
|
||||
private final boolean myForTests;
|
||||
|
||||
private JavaSourceRootType(boolean isForTests) {
|
||||
myForTests = isForTests;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isForTests() {
|
||||
return myForTests;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -28,4 +28,12 @@ import org.jetbrains.jps.model.JpsElementTypeWithDefaultProperties;
|
||||
* @author nik
|
||||
*/
|
||||
public interface JpsModuleSourceRootType<P extends JpsElement> extends JpsElementType<P>, JpsElementTypeWithDefaultProperties<P> {
|
||||
|
||||
/**
|
||||
* Returns {@code true} if roots of this type are supposed to contain test sources only. This information is used by the IDE to show files
|
||||
* accordingly, process them during analysis only if 'Include test source' option is enabled, etc.
|
||||
*/
|
||||
default boolean isForTests() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-4
@@ -4,8 +4,6 @@ package org.jetbrains.intellij.build.images.sync
|
||||
import org.jetbrains.intellij.build.images.ImageExtension
|
||||
import org.jetbrains.intellij.build.images.imageSize
|
||||
import org.jetbrains.intellij.build.images.isImage
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.jps.model.serialization.JpsSerializationManager
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
@@ -224,8 +222,9 @@ private fun searchTestRoots(devRepoDir: String) = try {
|
||||
JpsSerializationManager.getInstance()
|
||||
.loadModel(devRepoDir, null)
|
||||
.project.modules.flatMap {
|
||||
it.getSourceRoots(JavaSourceRootType.TEST_SOURCE) +
|
||||
it.getSourceRoots(JavaResourceRootType.TEST_RESOURCE)
|
||||
it.sourceRoots.filter { root ->
|
||||
root.rootType.isForTests
|
||||
}
|
||||
}.mapTo(mutableSetOf()) { it.file }
|
||||
}
|
||||
catch (e: IOException) {
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
/**
|
||||
* Implementations of this extension point can tell IDE whether some particular file is a test file.
|
||||
@@ -32,6 +33,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
* properly check if they are included in built-in search scopes, etc.
|
||||
*
|
||||
* @see FileIndex#isInTestSourceContent(VirtualFile)
|
||||
* @see JpsModuleSourceRootType#isForTests()
|
||||
* @since 2016.3
|
||||
* @author zolotov
|
||||
*/
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileFilter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -65,6 +66,11 @@ public abstract class FileIndexBase implements FileIndex {
|
||||
return iterateContentUnderDirectory(dir, processor, null);
|
||||
}
|
||||
|
||||
protected boolean isTestSourcesRoot(DirectoryInfo info) {
|
||||
JpsModuleSourceRootType<?> rootType = myDirectoryIndex.getSourceRootType(info);
|
||||
return rootType != null && rootType.isForTests();
|
||||
}
|
||||
|
||||
private static boolean iterateContentUnderDirectoryWithFilter(@NotNull VirtualFile dir,
|
||||
@NotNull ContentIterator iterator,
|
||||
@NotNull VirtualFileFilter filter) {
|
||||
|
||||
+1
-3
@@ -26,7 +26,6 @@ import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -99,8 +98,7 @@ public class ModuleFileIndexImpl extends FileIndexBase implements ModuleFileInde
|
||||
@Override
|
||||
public boolean isInTestSourceContent(@NotNull VirtualFile fileOrDir) {
|
||||
DirectoryInfo info = getInfoForFileOrDirectory(fileOrDir);
|
||||
return info.isInModuleSource(fileOrDir) && myModule.equals(info.getModule())
|
||||
&& JavaModuleSourceRootTypes.isTestSourceOrResource(myDirectoryIndex.getSourceRootType(info));
|
||||
return info.isInModuleSource(fileOrDir) && myModule.equals(info.getModule()) && isTestSourcesRoot(info);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-2
@@ -17,7 +17,6 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileFilter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -203,7 +202,7 @@ public class ProjectFileIndexImpl extends FileIndexBase implements ProjectFileIn
|
||||
@Override
|
||||
public boolean isInTestSourceContent(@NotNull VirtualFile fileOrDir) {
|
||||
DirectoryInfo info = getInfoForFileOrDirectory(fileOrDir);
|
||||
return info.isInModuleSource(fileOrDir) && JavaModuleSourceRootTypes.isTestSourceOrResource(myDirectoryIndex.getSourceRootType(info));
|
||||
return info.isInModuleSource(fileOrDir) && isTestSourcesRoot(info);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ public class SourceFolderImpl extends ContentFolderBaseImpl implements SourceFol
|
||||
|
||||
@Override
|
||||
public boolean isTestSource() {
|
||||
return getRootType().equals(JavaSourceRootType.TEST_SOURCE) || getRootType().equals(JavaResourceRootType.TEST_RESOURCE);
|
||||
return getRootType().isForTests();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+1
-3
@@ -19,7 +19,6 @@ import com.intellij.openapi.roots.SourceFolder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.JpsSimpleElement;
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootType;
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties;
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRoot;
|
||||
@@ -42,8 +41,7 @@ public class JpsSourceFolder extends JpsContentFolderBase implements SourceFolde
|
||||
|
||||
@Override
|
||||
public boolean isTestSource() {
|
||||
return mySourceRoot.getRootType() == JavaSourceRootType.TEST_SOURCE ||
|
||||
mySourceRoot.getRootType() == JavaResourceRootType.TEST_RESOURCE;
|
||||
return mySourceRoot.getRootType().isForTests();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user