mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
do not suggest to create class in source directory if base directory was test one (implement test interface, wrap test method, etc - IDEA-59925)
This commit is contained in:
@@ -39,6 +39,7 @@ import com.intellij.ui.ReferenceEditorComboWithBrowseButton;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
@@ -175,9 +176,8 @@ public class CreateClassDialog extends DialogWrapper {
|
||||
CommandProcessor.getInstance().executeCommand(myProject, new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
final PsiDirectory baseDir = myModule == null? null : PackageUtil.findPossiblePackageDirectoryInModule(myModule, packageName);
|
||||
myTargetDirectory = myModule == null? PackageUtil.findOrCreateDirectoryForPackage(myProject, packageName, baseDir, true)
|
||||
: PackageUtil.findOrCreateDirectoryForPackage(myModule, packageName, baseDir, true);
|
||||
myTargetDirectory = myModule == null? PackageUtil.findOrCreateDirectoryForPackage(myProject, packageName, getBaseDir(packageName), true)
|
||||
: PackageUtil.findOrCreateDirectoryForPackage(myModule, packageName, getBaseDir(packageName), true, true);
|
||||
if (myTargetDirectory == null) {
|
||||
errorString[0] = ""; // message already reported by PackageUtil
|
||||
return;
|
||||
@@ -199,6 +199,11 @@ public class CreateClassDialog extends DialogWrapper {
|
||||
super.doOKAction();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected PsiDirectory getBaseDir(String packageName) {
|
||||
return myModule == null? null : PackageUtil.findPossiblePackageDirectoryInModule(myModule, packageName);
|
||||
}
|
||||
|
||||
public String getClassName() {
|
||||
if (myClassNameEditable) {
|
||||
return myTfClassName.getText();
|
||||
|
||||
+7
-4
@@ -26,14 +26,12 @@ package com.intellij.codeInsight.intention.impl;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.CodeInsightUtil;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightNamesUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.CreateConstructorMatchingSuperFix;
|
||||
import com.intellij.codeInsight.generation.OverrideImplementUtil;
|
||||
import com.intellij.codeInsight.generation.PsiMethodMember;
|
||||
import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
|
||||
import com.intellij.ide.util.MemberChooser;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -118,14 +116,19 @@ public class CreateSubclassAction extends PsiElementBaseIntentionAction {
|
||||
|
||||
@Nullable
|
||||
public static CreateClassDialog chooseSubclassToCreate(PsiClass psiClass) {
|
||||
PsiDirectory sourceDir = psiClass.getContainingFile().getContainingDirectory();
|
||||
final PsiDirectory sourceDir = psiClass.getContainingFile().getContainingDirectory();
|
||||
|
||||
final PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(sourceDir);
|
||||
final CreateClassDialog dialog = new CreateClassDialog(
|
||||
psiClass.getProject(), getTitle(psiClass),
|
||||
psiClass.getName() + IMPL_SUFFIX,
|
||||
aPackage != null ? aPackage.getQualifiedName() : "",
|
||||
CreateClassKind.CLASS, true, ModuleUtil.findModuleForPsiElement(psiClass));
|
||||
CreateClassKind.CLASS, true, ModuleUtil.findModuleForPsiElement(psiClass)){
|
||||
@Override
|
||||
protected PsiDirectory getBaseDir(String packageName) {
|
||||
return sourceDir;
|
||||
}
|
||||
};
|
||||
dialog.show();
|
||||
if (!dialog.isOK()) return null;
|
||||
final PsiDirectory targetDirectory = dialog.getTargetDirectory();
|
||||
|
||||
@@ -26,6 +26,8 @@ import com.intellij.openapi.project.ProjectBundle;
|
||||
import com.intellij.openapi.projectRoots.impl.ProjectRootUtil;
|
||||
import com.intellij.openapi.roots.ModulePackageIndex;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.roots.ui.configuration.CommonContentEntriesEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
@@ -162,6 +164,14 @@ public class PackageUtil {
|
||||
String packageName,
|
||||
PsiDirectory baseDir,
|
||||
boolean askUserToCreate) throws IncorrectOperationException {
|
||||
return findOrCreateDirectoryForPackage(module, packageName, baseDir, askUserToCreate, false);
|
||||
}
|
||||
|
||||
public static PsiDirectory findOrCreateDirectoryForPackage(@NotNull Module module,
|
||||
String packageName,
|
||||
PsiDirectory baseDir,
|
||||
boolean askUserToCreate,
|
||||
boolean filterSourceDirsForBaseTestDirectory) throws IncorrectOperationException {
|
||||
final Project project = module.getProject();
|
||||
PsiDirectory psiDirectory = null;
|
||||
if (!"".equals(packageName)) {
|
||||
@@ -174,6 +184,9 @@ public class PackageUtil {
|
||||
postfixToShow = File.separatorChar + postfixToShow;
|
||||
}
|
||||
PsiDirectory[] moduleDirectories = getPackageDirectoriesInModule(rootPackage, module);
|
||||
if (filterSourceDirsForBaseTestDirectory) {
|
||||
moduleDirectories = filterSourceDirectories(baseDir, project, moduleDirectories);
|
||||
}
|
||||
psiDirectory = DirectoryChooserUtil.selectDirectory(project, moduleDirectories, baseDir, postfixToShow);
|
||||
if (psiDirectory == null) return null;
|
||||
}
|
||||
@@ -240,6 +253,20 @@ public class PackageUtil {
|
||||
return psiDirectory;
|
||||
}
|
||||
|
||||
private static PsiDirectory[] filterSourceDirectories(PsiDirectory baseDir, Project project, PsiDirectory[] moduleDirectories) {
|
||||
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
if (fileIndex.isInTestSourceContent(baseDir.getVirtualFile())) {
|
||||
List<PsiDirectory> result = new ArrayList<PsiDirectory>();
|
||||
for (PsiDirectory moduleDirectory : moduleDirectories) {
|
||||
if (fileIndex.isInTestSourceContent(moduleDirectory.getVirtualFile())) {
|
||||
result.add(moduleDirectory);
|
||||
}
|
||||
}
|
||||
moduleDirectories = result.toArray(new PsiDirectory[result.size()]);
|
||||
}
|
||||
return moduleDirectories;
|
||||
}
|
||||
|
||||
private static PsiDirectory[] getPackageDirectoriesInModule(PsiPackage rootPackage, Module module) {
|
||||
return rootPackage.getDirectories(GlobalSearchScope.moduleScope(module));
|
||||
}
|
||||
|
||||
@@ -689,7 +689,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
final PsiDirectory containingDirectory = containingFile.getContainingDirectory();
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(containingFile);
|
||||
assert module != null;
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, newPackageName, containingDirectory, false);
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, newPackageName, containingDirectory, false, true);
|
||||
if (directory != null) {
|
||||
final PsiFile newFile = PsiFileFactory.getInstance(project).createFileFromText(newClassName + ".java", classString);
|
||||
final PsiElement addedFile = directory.add(newFile);
|
||||
|
||||
+1
-1
@@ -275,7 +275,7 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
|
||||
final PsiFile containingFile = method.getContainingFile();
|
||||
final PsiDirectory containingDirectory = containingFile.getContainingDirectory();
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(containingFile);
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, packageName, containingDirectory, true);
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, packageName, containingDirectory, true, true);
|
||||
|
||||
if (directory != null) {
|
||||
|
||||
|
||||
+1
-1
@@ -110,7 +110,7 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto
|
||||
final PsiDirectory containingDirectory = containingFile.getContainingDirectory();
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(containingFile);
|
||||
assert module != null;
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, myPackageName, containingDirectory, true);
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, myPackageName, containingDirectory, true, true);
|
||||
|
||||
if (directory != null) {
|
||||
|
||||
|
||||
+1
-1
@@ -269,7 +269,7 @@ public class WrapReturnValueProcessor extends FixableUsagesRefactoringProcessor
|
||||
|
||||
final PsiDirectory containingDirectory = containingFile.getContainingDirectory();
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(containingFile);
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, packageName, containingDirectory, true);
|
||||
final PsiDirectory directory = PackageUtil.findOrCreateDirectoryForPackage(module, packageName, containingDirectory, true, true);
|
||||
|
||||
if (directory != null) {
|
||||
final PsiElement shortenedFile = JavaCodeStyleManager.getInstance(project).shortenClassReferences(psiFile);
|
||||
|
||||
Reference in New Issue
Block a user