mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-220832 Create File intention: don't suggest generated sources root as possible target
GitOrigin-RevId: 302317ca1cb6bbcb71604d58db3b1d2f7c5480ee
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a982e6f7d6
commit
947520872e
+26
@@ -30,6 +30,28 @@ class CreateFilePathFixTest : CreateFileQuickFixTestCase() {
|
||||
"/main/java/pkg/ClassWithFileReference.java")
|
||||
}
|
||||
|
||||
fun testCreatePathExcludesGeneratedSources() {
|
||||
myFixture.configureFromTempProjectFile("/main/java/pkg/ClassWithFileReference.java")
|
||||
myFixture.testHighlighting(true, false, true)
|
||||
|
||||
withFileReferenceInStringLiteral {
|
||||
val ref = myFixture.getReferenceAtCaretPosition()
|
||||
val fileReference = (ref as PsiMultiReference).references.filterIsInstance<FileReference>()[0]
|
||||
|
||||
assertEquals("my.properties", fileReference.fileNameToCreate)
|
||||
val intention = fileReference.quickFixes!![0]
|
||||
|
||||
val options = (intention as CreateFilePathFix).myDirectories
|
||||
|
||||
assertEquals(4, options.size)
|
||||
|
||||
assertEquals("/src/main/resources", getPresentableText(options[0]))
|
||||
assertEquals("/src/test/resources", getPresentableText(options[1]))
|
||||
assertEquals("/src/main/java", getPresentableText(options[2]))
|
||||
assertEquals("/src/test/java", getPresentableText(options[3]))
|
||||
}
|
||||
}
|
||||
|
||||
fun testCreatePathInSources() {
|
||||
ApplicationManager.getApplication().runWriteAction {
|
||||
// only src/main/java and /src/test/java will be available for new files
|
||||
@@ -91,4 +113,8 @@ class CreateFilePathFixTest : CreateFileQuickFixTestCase() {
|
||||
myFixture.checkResult("", true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPresentableText(dir: TargetDirectory) : String {
|
||||
return dir.directory!!.virtualFile.presentableUrl
|
||||
}
|
||||
}
|
||||
+5
@@ -17,6 +17,7 @@ import com.intellij.testFramework.LightProjectDescriptor;
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootType;
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties;
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType;
|
||||
|
||||
public abstract class CreateFileQuickFixTestCase extends LightJavaCodeInsightFixtureTestCase {
|
||||
@@ -38,6 +39,10 @@ public abstract class CreateFileQuickFixTestCase extends LightJavaCodeInsightFix
|
||||
contentEntry.addSourceFolder(contentEntryUrl + "/main/java", JavaSourceRootType.SOURCE);
|
||||
contentEntry.addSourceFolder(contentEntryUrl + "/main/resources", JavaResourceRootType.RESOURCE);
|
||||
|
||||
JavaSourceRootProperties generatedProperties = JavaSourceRootType.SOURCE.createDefaultProperties();
|
||||
generatedProperties.setForGeneratedSources(true);
|
||||
contentEntry.addSourceFolder(contentEntryUrl + "/main/gen", JavaSourceRootType.SOURCE, generatedProperties);
|
||||
|
||||
contentEntry.addSourceFolder(contentEntryUrl + "/test/java", JavaSourceRootType.TEST_SOURCE);
|
||||
contentEntry.addSourceFolder(contentEntryUrl + "/test/resources", JavaResourceRootType.TEST_RESOURCE);
|
||||
}
|
||||
|
||||
+29
-8
@@ -11,8 +11,11 @@ import com.intellij.psi.PsiFileSystemItem;
|
||||
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.java.JavaResourceRootType;
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties;
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRoot;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -22,6 +25,9 @@ public final class JpsFileTargetContextSorter {
|
||||
private JpsFileTargetContextSorter() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts target contexts depending on their {@link JpsModuleSourceRootType} and filters out generated source directories.
|
||||
*/
|
||||
public static Collection<FileTargetContext> sortTargetContextsResourceFirst(@NotNull Project project,
|
||||
@NotNull VirtualFile file,
|
||||
@NotNull Collection<FileTargetContext> targetContexts) {
|
||||
@@ -30,7 +36,18 @@ public final class JpsFileTargetContextSorter {
|
||||
return targetContexts;
|
||||
}
|
||||
|
||||
List<FileTargetContextWrapper> targetContextWrappers = findSourceRootTypes(targetContexts);
|
||||
List<FileTargetContextWrapper> targetContextWrappers = ContainerUtil.filter(findSourceRootTypes(targetContexts), tc -> {
|
||||
if (tc.getJpsModuleSourceRoot() == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
JavaSourceRootProperties srcProperties = tc.getJpsModuleSourceRoot().getProperties(JavaModuleSourceRootTypes.SOURCES);
|
||||
if (srcProperties == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return !srcProperties.isForGeneratedSources();
|
||||
});
|
||||
|
||||
// sort only if we have different source root types
|
||||
if (hasEqualSourceRootTypes(targetContextWrappers)) {
|
||||
@@ -81,7 +98,7 @@ public final class JpsFileTargetContextSorter {
|
||||
sourceFolder = getSourceFolder(project, file);
|
||||
}
|
||||
|
||||
return new FileTargetContextWrapper(c, sourceFolder != null ? sourceFolder.getRootType() : null);
|
||||
return new FileTargetContextWrapper(c, sourceFolder);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -165,20 +182,24 @@ public final class JpsFileTargetContextSorter {
|
||||
|
||||
private static class FileTargetContextWrapper {
|
||||
private final FileTargetContext myTargetContext;
|
||||
private final JpsModuleSourceRootType<?> myRootType;
|
||||
private final SourceFolder mySourceFolder;
|
||||
|
||||
private FileTargetContextWrapper(FileTargetContext context, @Nullable JpsModuleSourceRootType<?> type) {
|
||||
private FileTargetContextWrapper(FileTargetContext context, @Nullable SourceFolder sourceFolder) {
|
||||
myTargetContext = context;
|
||||
myRootType = type;
|
||||
mySourceFolder = sourceFolder;
|
||||
}
|
||||
|
||||
private FileTargetContext getTargetContext() {
|
||||
public FileTargetContext getTargetContext() {
|
||||
return myTargetContext;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private JpsModuleSourceRootType<?> getSourceRootType() {
|
||||
return myRootType;
|
||||
public JpsModuleSourceRootType<?> getSourceRootType() {
|
||||
return mySourceFolder != null ? mySourceFolder.getRootType() : null;
|
||||
}
|
||||
|
||||
private JpsModuleSourceRoot getJpsModuleSourceRoot() {
|
||||
return mySourceFolder != null ? mySourceFolder.getJpsElement() : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user