#KT-27389 : Change JavaSourceRoot usages to Kotlin analogs
This commit is contained in:
committed by
Igor Yakovlev
parent
895b49c0b9
commit
91d603292c
@@ -22,4 +22,6 @@ object ResourceKotlinRootType : KotlinResourceRootType()
|
|||||||
|
|
||||||
object TestResourceKotlinRootType : KotlinResourceRootType() {
|
object TestResourceKotlinRootType : KotlinResourceRootType() {
|
||||||
override fun isForTests() = true
|
override fun isForTests() = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val ALL_KOTLIN_RESOURCE_ROOT_TYPES = setOf(ResourceKotlinRootType, TestResourceKotlinRootType)
|
||||||
@@ -23,4 +23,6 @@ sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase<Ja
|
|||||||
}
|
}
|
||||||
|
|
||||||
object ResourceKotlinRootType : KotlinResourceRootType(false)
|
object ResourceKotlinRootType : KotlinResourceRootType(false)
|
||||||
object TestResourceKotlinRootType : KotlinResourceRootType(true)
|
object TestResourceKotlinRootType : KotlinResourceRootType(true)
|
||||||
|
|
||||||
|
val ALL_KOTLIN_RESOURCE_ROOT_TYPES = setOf(ResourceKotlinRootType, TestResourceKotlinRootType)
|
||||||
@@ -25,4 +25,6 @@ sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase<Ja
|
|||||||
}
|
}
|
||||||
|
|
||||||
object ResourceKotlinRootType : KotlinResourceRootType(false)
|
object ResourceKotlinRootType : KotlinResourceRootType(false)
|
||||||
object TestResourceKotlinRootType : KotlinResourceRootType(true)
|
object TestResourceKotlinRootType : KotlinResourceRootType(true)
|
||||||
|
|
||||||
|
val ALL_KOTLIN_RESOURCE_ROOT_TYPES = setOf(ResourceKotlinRootType, TestResourceKotlinRootType)
|
||||||
@@ -23,4 +23,6 @@ sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase<Ja
|
|||||||
}
|
}
|
||||||
|
|
||||||
object ResourceKotlinRootType : KotlinResourceRootType(false)
|
object ResourceKotlinRootType : KotlinResourceRootType(false)
|
||||||
object TestResourceKotlinRootType : KotlinResourceRootType(true)
|
object TestResourceKotlinRootType : KotlinResourceRootType(true)
|
||||||
|
|
||||||
|
val ALL_KOTLIN_RESOURCE_ROOT_TYPES = setOf(ResourceKotlinRootType, TestResourceKotlinRootType)
|
||||||
@@ -6,7 +6,6 @@ package org.jetbrains.kotlin.idea.refactoring.copy
|
|||||||
|
|
||||||
import com.intellij.ide.util.DirectoryChooser
|
import com.intellij.ide.util.DirectoryChooser
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil
|
|
||||||
import com.intellij.openapi.ui.DialogWrapper
|
import com.intellij.openapi.ui.DialogWrapper
|
||||||
import com.intellij.openapi.ui.Messages
|
import com.intellij.openapi.ui.Messages
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
@@ -30,6 +29,7 @@ import org.jetbrains.kotlin.idea.core.getPackage
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.Pass
|
import org.jetbrains.kotlin.idea.refactoring.Pass
|
||||||
import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly
|
import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly
|
||||||
import org.jetbrains.kotlin.idea.refactoring.ui.KotlinDestinationFolderComboBox
|
import org.jetbrains.kotlin.idea.refactoring.ui.KotlinDestinationFolderComboBox
|
||||||
|
import org.jetbrains.kotlin.idea.roots.getSuitableDestinationSourceRoots
|
||||||
import org.jetbrains.kotlin.idea.util.sourceRoot
|
import org.jetbrains.kotlin.idea.util.sourceRoot
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
@@ -94,7 +94,7 @@ class CopyKotlinDeclarationDialog(
|
|||||||
packageLabel.labelFor = packageNameField
|
packageLabel.labelFor = packageNameField
|
||||||
|
|
||||||
val label = JLabel(RefactoringBundle.message("target.destination.folder"))
|
val label = JLabel(RefactoringBundle.message("target.destination.folder"))
|
||||||
val isMultipleSourceRoots = JavaProjectRootsUtil.getSuitableDestinationSourceRoots(project).size > 1
|
val isMultipleSourceRoots = getSuitableDestinationSourceRoots(project).size > 1
|
||||||
destinationComboBox.isVisible = isMultipleSourceRoots
|
destinationComboBox.isVisible = isMultipleSourceRoots
|
||||||
label.isVisible = isMultipleSourceRoots
|
label.isVisible = isMultipleSourceRoots
|
||||||
label.labelFor = destinationComboBox
|
label.labelFor = destinationComboBox
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.intellij.openapi.editor.markup.RangeHighlighter
|
|||||||
import com.intellij.openapi.editor.markup.TextAttributes
|
import com.intellij.openapi.editor.markup.TextAttributes
|
||||||
import com.intellij.openapi.options.ConfigurationException
|
import com.intellij.openapi.options.ConfigurationException
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil
|
|
||||||
import com.intellij.openapi.ui.DialogWrapper
|
import com.intellij.openapi.ui.DialogWrapper
|
||||||
import com.intellij.openapi.ui.Messages
|
import com.intellij.openapi.ui.Messages
|
||||||
import com.intellij.openapi.ui.popup.*
|
import com.intellij.openapi.ui.popup.*
|
||||||
@@ -75,6 +74,7 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinValVar
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.toValVar
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.toValVar
|
||||||
import org.jetbrains.kotlin.idea.refactoring.memberInfo.KtPsiClassWrapper
|
import org.jetbrains.kotlin.idea.refactoring.memberInfo.KtPsiClassWrapper
|
||||||
import org.jetbrains.kotlin.idea.refactoring.rename.canonicalRender
|
import org.jetbrains.kotlin.idea.refactoring.rename.canonicalRender
|
||||||
|
import org.jetbrains.kotlin.idea.roots.isOutsideKotlinAwareSourceRoot
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.util.actualsForExpected
|
import org.jetbrains.kotlin.idea.util.actualsForExpected
|
||||||
@@ -138,8 +138,8 @@ fun PsiElement.getUsageContext(): PsiElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiElement.isInJavaSourceRoot(): Boolean =
|
fun PsiElement.isInKotlinAwareSourceRoot(): Boolean =
|
||||||
!JavaProjectRootsUtil.isOutsideJavaSourceRoot(containingFile)
|
!isOutsideKotlinAwareSourceRoot(containingFile)
|
||||||
|
|
||||||
fun KtFile.createTempCopy(text: String? = null): KtFile {
|
fun KtFile.createTempCopy(text: String? = null): KtFile {
|
||||||
val tmpFile = KtPsiFactory(this).createAnalyzableFile(name, text ?: this.text ?: "", this)
|
val tmpFile = KtPsiFactory(this).createAnalyzableFile(name, text ?: this.text ?: "", this)
|
||||||
|
|||||||
+2
-2
@@ -10,7 +10,6 @@ import com.intellij.codeInspection.LocalQuickFix
|
|||||||
import com.intellij.codeInspection.ProblemDescriptor
|
import com.intellij.codeInspection.ProblemDescriptor
|
||||||
import com.intellij.codeInspection.ProblemsHolder
|
import com.intellij.codeInspection.ProblemsHolder
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil
|
|
||||||
import com.intellij.openapi.ui.Messages
|
import com.intellij.openapi.ui.Messages
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
@@ -25,6 +24,7 @@ import org.jetbrains.kotlin.idea.core.packageMatchesDirectoryOrImplicit
|
|||||||
import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection
|
import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection
|
||||||
import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly
|
import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly
|
||||||
import org.jetbrains.kotlin.idea.refactoring.isInjectedFragment
|
import org.jetbrains.kotlin.idea.refactoring.isInjectedFragment
|
||||||
|
import org.jetbrains.kotlin.idea.roots.getSuitableDestinationSourceRoots
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -75,7 +75,7 @@ class PackageDirectoryMismatchInspection : AbstractKotlinInspection() {
|
|||||||
val file = descriptor.psiElement as? KtFile ?: return
|
val file = descriptor.psiElement as? KtFile ?: return
|
||||||
val directive = file.packageDirective ?: return
|
val directive = file.packageDirective ?: return
|
||||||
|
|
||||||
val sourceRoots = JavaProjectRootsUtil.getSuitableDestinationSourceRoots(project)
|
val sourceRoots = getSuitableDestinationSourceRoots(project)
|
||||||
val packageWrapper = PackageWrapper(PsiManager.getInstance(project), directive.qualifiedName)
|
val packageWrapper = PackageWrapper(PsiManager.getInstance(project), directive.qualifiedName)
|
||||||
val fileToMove = directive.containingFile
|
val fileToMove = directive.containingFile
|
||||||
val chosenRoot =
|
val chosenRoot =
|
||||||
|
|||||||
+3
-2
@@ -33,7 +33,7 @@ import com.intellij.util.ui.FormBuilder
|
|||||||
import com.intellij.util.ui.UIUtil
|
import com.intellij.util.ui.UIUtil
|
||||||
import org.jetbrains.kotlin.idea.core.packageMatchesDirectoryOrImplicit
|
import org.jetbrains.kotlin.idea.core.packageMatchesDirectoryOrImplicit
|
||||||
import org.jetbrains.kotlin.idea.core.util.onTextChange
|
import org.jetbrains.kotlin.idea.core.util.onTextChange
|
||||||
import org.jetbrains.kotlin.idea.refactoring.isInJavaSourceRoot
|
import org.jetbrains.kotlin.idea.refactoring.isInKotlinAwareSourceRoot
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -131,7 +131,8 @@ class KotlinAwareMoveFilesOrDirectoriesDialog(
|
|||||||
this.helpID = helpID
|
this.helpID = helpID
|
||||||
|
|
||||||
with(updatePackageDirectiveCb) {
|
with(updatePackageDirectiveCb) {
|
||||||
val jetFiles = psiElements.filterIsInstance<KtFile>().filter(KtFile::isInJavaSourceRoot)
|
val jetFiles = psiElements.filterIsInstance<KtFile>().filter(KtFile::isInKotlinAwareSourceRoot)
|
||||||
|
|
||||||
if (jetFiles.isEmpty()) {
|
if (jetFiles.isEmpty()) {
|
||||||
parent.remove(updatePackageDirectiveCb)
|
parent.remove(updatePackageDirectiveCb)
|
||||||
return
|
return
|
||||||
|
|||||||
+4
-2
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui;
|
|||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.options.ConfigurationException;
|
import com.intellij.openapi.options.ConfigurationException;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil;
|
|
||||||
import com.intellij.openapi.roots.ProjectRootManager;
|
import com.intellij.openapi.roots.ProjectRootManager;
|
||||||
import com.intellij.openapi.util.Comparing;
|
import com.intellij.openapi.util.Comparing;
|
||||||
import com.intellij.openapi.util.NullableComputable;
|
import com.intellij.openapi.util.NullableComputable;
|
||||||
@@ -52,6 +51,7 @@ import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
import org.jetbrains.kotlin.types.KotlinType;
|
||||||
|
import static org.jetbrains.kotlin.idea.roots.ProjectRootUtilsKt.getSuitableDestinationSourceRoots;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -244,9 +244,11 @@ public class MoveKotlinNestedClassesToUpperLevelDialog extends MoveDialogBase {
|
|||||||
String targetName = packageNameField.getText();
|
String targetName = packageNameField.getText();
|
||||||
if (!Comparing.equal(oldPackageFqName != null ? oldPackageFqName.asString() : null, targetName)) {
|
if (!Comparing.equal(oldPackageFqName != null ? oldPackageFqName.asString() : null, targetName)) {
|
||||||
ProjectRootManager projectRootManager = ProjectRootManager.getInstance(project);
|
ProjectRootManager projectRootManager = ProjectRootManager.getInstance(project);
|
||||||
List<VirtualFile> contentSourceRoots = JavaProjectRootsUtil.getSuitableDestinationSourceRoots(project);
|
|
||||||
|
List<VirtualFile> contentSourceRoots = getSuitableDestinationSourceRoots(project);
|
||||||
PackageWrapper newPackage = new PackageWrapper(PsiManager.getInstance(project), targetName);
|
PackageWrapper newPackage = new PackageWrapper(PsiManager.getInstance(project), targetName);
|
||||||
VirtualFile targetSourceRoot;
|
VirtualFile targetSourceRoot;
|
||||||
|
|
||||||
if (contentSourceRoots.size() > 1) {
|
if (contentSourceRoots.size() > 1) {
|
||||||
PsiDirectory initialDir = null;
|
PsiDirectory initialDir = null;
|
||||||
PsiPackage oldPackage = oldPackageFqName != null
|
PsiPackage oldPackage = oldPackageFqName != null
|
||||||
|
|||||||
+2
-2
@@ -13,7 +13,6 @@ import com.intellij.openapi.editor.event.DocumentListener;
|
|||||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||||
import com.intellij.openapi.options.ConfigurationException;
|
import com.intellij.openapi.options.ConfigurationException;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil;
|
|
||||||
import com.intellij.openapi.ui.Messages;
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
|
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
|
||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
@@ -61,6 +60,7 @@ import org.jetbrains.kotlin.psi.KtFile;
|
|||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration;
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration;
|
||||||
import org.jetbrains.kotlin.psi.KtPureElement;
|
import org.jetbrains.kotlin.psi.KtPureElement;
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
|
import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
|
||||||
|
import static org.jetbrains.kotlin.idea.roots.ProjectRootUtilsKt.getSuitableDestinationSourceRoots;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -396,7 +396,7 @@ public class MoveKotlinTopLevelDeclarationsDialog extends RefactoringDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasAnySourceRoots() {
|
private boolean hasAnySourceRoots() {
|
||||||
return !JavaProjectRootsUtil.getSuitableDestinationSourceRoots(myProject).isEmpty();
|
return !getSuitableDestinationSourceRoots(myProject).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveRefactoringSettings() {
|
private void saveRefactoringSettings() {
|
||||||
|
|||||||
+2
-2
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.idea.refactoring.move.moveFilesOrDirectories
|
package org.jetbrains.kotlin.idea.refactoring.move.moveFilesOrDirectories
|
||||||
|
|
||||||
import com.intellij.openapi.module.ModuleUtilCore
|
import com.intellij.openapi.module.ModuleUtilCore
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil
|
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.psi.PsiCompiledElement
|
import com.intellij.psi.PsiCompiledElement
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
@@ -25,6 +24,7 @@ import org.jetbrains.kotlin.idea.refactoring.move.ContainerChangeInfo
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.move.ContainerInfo
|
import org.jetbrains.kotlin.idea.refactoring.move.ContainerInfo
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.*
|
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.*
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.updatePackageDirective
|
import org.jetbrains.kotlin.idea.refactoring.move.updatePackageDirective
|
||||||
|
import org.jetbrains.kotlin.idea.roots.isOutsideKotlinAwareSourceRoot
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.UserDataProperty
|
import org.jetbrains.kotlin.psi.UserDataProperty
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ class MoveKotlinFileHandler : MoveFileHandler() {
|
|||||||
|
|
||||||
override fun canProcessElement(element: PsiFile?): Boolean {
|
override fun canProcessElement(element: PsiFile?): Boolean {
|
||||||
if (element is PsiCompiledElement || element !is KtFile) return false
|
if (element is PsiCompiledElement || element !is KtFile) return false
|
||||||
return !JavaProjectRootsUtil.isOutsideJavaSourceRoot(element)
|
return !isOutsideKotlinAwareSourceRoot(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun findUsages(
|
override fun findUsages(
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import com.intellij.refactoring.move.MoveHandler
|
|||||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil
|
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil
|
||||||
import com.intellij.refactoring.util.CommonRefactoringUtil
|
import com.intellij.refactoring.util.CommonRefactoringUtil
|
||||||
import com.intellij.util.IncorrectOperationException
|
import com.intellij.util.IncorrectOperationException
|
||||||
import org.jetbrains.kotlin.idea.refactoring.isInJavaSourceRoot
|
import org.jetbrains.kotlin.idea.refactoring.isInKotlinAwareSourceRoot
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.KotlinAwareMoveFilesOrDirectoriesProcessor
|
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.KotlinAwareMoveFilesOrDirectoriesProcessor
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.KotlinAwareMoveFilesOrDirectoriesDialog
|
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.KotlinAwareMoveFilesOrDirectoriesDialog
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
||||||
@@ -71,7 +71,7 @@ fun invokeMoveFilesOrDirectoriesRefactoring(
|
|||||||
|
|
||||||
elementsToMove.forEach {
|
elementsToMove.forEach {
|
||||||
MoveFilesOrDirectoriesUtil.checkMove(it, selectedDir)
|
MoveFilesOrDirectoriesUtil.checkMove(it, selectedDir)
|
||||||
if (it is KtFile && it.isInJavaSourceRoot()) {
|
if (it is KtFile && it.isInKotlinAwareSourceRoot()) {
|
||||||
it.updatePackageDirective = updatePackageDirective
|
it.updatePackageDirective = updatePackageDirective
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import com.intellij.openapi.application.WriteAction;
|
|||||||
import com.intellij.openapi.command.CommandProcessor;
|
import com.intellij.openapi.command.CommandProcessor;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil;
|
|
||||||
import com.intellij.openapi.ui.DialogWrapper;
|
import com.intellij.openapi.ui.DialogWrapper;
|
||||||
import com.intellij.openapi.ui.Messages;
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.openapi.util.Pass;
|
import com.intellij.openapi.util.Pass;
|
||||||
@@ -39,6 +38,7 @@ import com.intellij.util.ui.JBUI;
|
|||||||
import org.jetbrains.annotations.NonNls;
|
import org.jetbrains.annotations.NonNls;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import static org.jetbrains.kotlin.idea.roots.ProjectRootUtilsKt.getSuitableDestinationSourceRoots;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.event.DocumentEvent;
|
import javax.swing.event.DocumentEvent;
|
||||||
@@ -198,7 +198,7 @@ public class CreateKotlinClassDialog extends DialogWrapper {
|
|||||||
gbConstraints.insets.top = 4;
|
gbConstraints.insets.top = 4;
|
||||||
panel.add(myDestinationCB, gbConstraints);
|
panel.add(myDestinationCB, gbConstraints);
|
||||||
|
|
||||||
boolean isMultipleSourceRoots = JavaProjectRootsUtil.getSuitableDestinationSourceRoots(myProject).size() > 1;
|
boolean isMultipleSourceRoots = getSuitableDestinationSourceRoots(myProject).size() > 1;
|
||||||
myDestinationCB.setVisible(isMultipleSourceRoots);
|
myDestinationCB.setVisible(isMultipleSourceRoots);
|
||||||
label.setVisible(isMultipleSourceRoots);
|
label.setVisible(isMultipleSourceRoots);
|
||||||
label.setLabelFor(myDestinationCB);
|
label.setLabelFor(myDestinationCB);
|
||||||
|
|||||||
@@ -9,19 +9,23 @@ import com.intellij.openapi.module.Module
|
|||||||
import com.intellij.openapi.module.ModuleManager
|
import com.intellij.openapi.module.ModuleManager
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.project.rootManager
|
import com.intellij.openapi.project.rootManager
|
||||||
import com.intellij.openapi.roots.JavaProjectRootsUtil.isForGeneratedSources
|
|
||||||
import com.intellij.openapi.roots.ModifiableRootModel
|
import com.intellij.openapi.roots.ModifiableRootModel
|
||||||
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
|
import com.intellij.openapi.roots.ProjectRootManager
|
||||||
|
import com.intellij.openapi.roots.SourceFolder
|
||||||
|
import com.intellij.openapi.vfs.NonPhysicalFileSystem
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import com.intellij.psi.PsiCodeFragment
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
|
import com.intellij.util.containers.ContainerUtil
|
||||||
import org.jetbrains.jps.model.JpsElement
|
import org.jetbrains.jps.model.JpsElement
|
||||||
import org.jetbrains.jps.model.ex.JpsElementBase
|
import org.jetbrains.jps.model.ex.JpsElementBase
|
||||||
import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes
|
import org.jetbrains.jps.model.java.*
|
||||||
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.JpsModuleSourceRoot
|
||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
|
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
|
||||||
|
import java.util.ArrayList
|
||||||
|
|
||||||
private fun JpsModuleSourceRoot.getOrCreateProperties() =
|
private fun JpsModuleSourceRoot.getOrCreateProperties() =
|
||||||
getProperties(rootType)?.also { (it as? JpsElementBase<*>)?.setParent(null) } ?: rootType.createDefaultProperties()
|
getProperties(rootType)?.also { (it as? JpsElementBase<*>)?.setParent(null) } ?: rootType.createDefaultProperties()
|
||||||
@@ -66,4 +70,46 @@ private fun Module.collectKotlinAwareDestinationSourceRoots(): List<VirtualFile>
|
|||||||
.filterNot { isForGeneratedSources(it) }
|
.filterNot { isForGeneratedSources(it) }
|
||||||
.mapNotNull { it.file }
|
.mapNotNull { it.file }
|
||||||
.toList()
|
.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isOutsideSourceRootSet(psiFile : PsiFile?, sourceRootTypes: Set<JpsModuleSourceRootType<*>>): Boolean {
|
||||||
|
if (psiFile == null) return false
|
||||||
|
if (psiFile is PsiCodeFragment) return false
|
||||||
|
val file = psiFile.getVirtualFile()
|
||||||
|
if (file == null) return false
|
||||||
|
if (file.getFileSystem() is NonPhysicalFileSystem) return false
|
||||||
|
val projectFileIndex = ProjectRootManager.getInstance(psiFile.getProject()).getFileIndex()
|
||||||
|
return !projectFileIndex.isUnderSourceRootOfType(file, sourceRootTypes) && !projectFileIndex.isInLibrary(file)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isOutsideKotlinAwareSourceRoot(psiFile : PsiFile?) = isOutsideSourceRootSet(psiFile, KOTLIN_AWARE_SOURCE_ROOT_TYPES)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return list of all java source roots in the project which can be suggested as a target directory for a class created by user
|
||||||
|
*/
|
||||||
|
fun getSuitableDestinationSourceRoots(project: Project): List<VirtualFile> {
|
||||||
|
val roots = ArrayList<VirtualFile>()
|
||||||
|
for (module in ModuleManager.getInstance(project).modules) {
|
||||||
|
collectSuitableDestinationSourceRoots(module, roots)
|
||||||
|
}
|
||||||
|
return roots
|
||||||
|
}
|
||||||
|
|
||||||
|
fun collectSuitableDestinationSourceRoots(module: Module, result: MutableList<VirtualFile>) {
|
||||||
|
for (entry in ModuleRootManager.getInstance(module).contentEntries) {
|
||||||
|
for (sourceFolder in entry.getSourceFolders(KOTLIN_AWARE_SOURCE_ROOT_TYPES)) {
|
||||||
|
if (!isForGeneratedSources(sourceFolder)) {
|
||||||
|
ContainerUtil.addIfNotNull(result, sourceFolder.file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isForGeneratedSources(sourceFolder: SourceFolder): Boolean {
|
||||||
|
val properties = sourceFolder.jpsElement.getProperties(KOTLIN_AWARE_SOURCE_ROOT_TYPES)
|
||||||
|
val javaResourceProperties = sourceFolder.jpsElement.getProperties(JavaModuleSourceRootTypes.RESOURCES)
|
||||||
|
val kotlinResourceProperties = sourceFolder.jpsElement.getProperties(ALL_KOTLIN_RESOURCE_ROOT_TYPES)
|
||||||
|
return properties != null && properties.isForGeneratedSources
|
||||||
|
|| (javaResourceProperties != null && javaResourceProperties.isForGeneratedSources)
|
||||||
|
|| (kotlinResourceProperties != null && kotlinResourceProperties.isForGeneratedSources)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user