From 92e11ccec7742df058ba8ef8fd8bb727e5912475 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 2 Mar 2020 15:49:26 +0300 Subject: [PATCH] IDEA-136712 Optimize imports on module should not process files from test data GitOrigin-RevId: d9488d96ed4cd7a888d5b8e5366356df28ec331d --- .../lang/java/JavaImportOptimizer.java | 6 ++- .../psi/optimizeImports/testData/X.java | 6 +++ .../psi/OptimizeImportsMultiFileTest.java | 50 +++++++++++++++++++ .../java/psi/OptimizeImportsTest.java | 2 +- 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/psi/optimizeImports/testData/X.java create mode 100644 java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsMultiFileTest.java diff --git a/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java b/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java index 6686b02e2331..b80f090bbc5a 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java @@ -8,6 +8,7 @@ import com.intellij.lang.ImportOptimizer; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.EmptyRunnable; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; @@ -90,6 +91,9 @@ public class JavaImportOptimizer implements ImportOptimizer { @Override public boolean supports(@NotNull PsiFile file) { - return file instanceof PsiJavaFile && !TemplateLanguageUtil.isTemplateDataFile(file); + return file instanceof PsiJavaFile + && !TemplateLanguageUtil.isTemplateDataFile(file) + && ProjectRootManager.getInstance(file.getProject()).getFileIndex().isInSource(file.getViewProvider().getVirtualFile()) + ; } } diff --git a/java/java-tests/testData/psi/optimizeImports/testData/X.java b/java/java-tests/testData/psi/optimizeImports/testData/X.java new file mode 100644 index 000000000000..db9d12826023 --- /dev/null +++ b/java/java-tests/testData/psi/optimizeImports/testData/X.java @@ -0,0 +1,6 @@ +package testData; +import java.util.*; +import java.lang.String; +class X { + +} diff --git a/java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsMultiFileTest.java b/java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsMultiFileTest.java new file mode 100644 index 000000000000..5030c9ece5c7 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsMultiFileTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.psi; + +import com.intellij.codeInsight.actions.OptimizeImportsProcessor; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.roots.ModuleRootModificationUtil; +import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.impl.source.PostprocessReformattingAspect; +import com.intellij.testFramework.HeavyPlatformTestCase; +import com.intellij.testFramework.JavaPsiTestCase; +import com.intellij.testFramework.PsiTestUtil; + +@HeavyPlatformTestCase.WrapInCommand +public class OptimizeImportsMultiFileTest extends JavaPsiTestCase { + public void testOptimizeImportInPackageIgnoresFilesOutsideSourceRootsForExampleTestData() throws Exception { + VirtualFile root = + PsiTestUtil.createTestProjectStructure(myProject, myModule, OptimizeImportsTest.BASE_PATH + "/testData", myFilesToDelete, false); + ModuleRootModificationUtil.addContentRoot(getModule(), root); + VirtualFile x = root.findChild("X.java"); + String textBefore = VfsUtilCore.loadText(x); + PsiDirectory directory = myPsiManager.findDirectory(root); + assertNotNull(directory); + WriteCommandAction.runWriteCommandAction(null, () -> { + new OptimizeImportsProcessor(getProject(), directory, true).run(); + PostprocessReformattingAspect.getInstance(getProject()).doPostponedFormatting(); + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); + ApplicationManager.getApplication().saveAll(); + }); + String textAfter = VfsUtilCore.loadText(x); + assertEquals(textBefore, textAfter); + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsTest.java b/java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsTest.java index 0ff427648674..22aafe873912 100644 --- a/java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/psi/OptimizeImportsTest.java @@ -28,7 +28,7 @@ import com.intellij.psi.codeStyle.modifier.CodeStyleSettingsModifier; import com.intellij.testFramework.ServiceContainerUtil; public class OptimizeImportsTest extends OptimizeImportsTestCase { - private static final String BASE_PATH = PathManagerEx.getTestDataPath() + "/psi/optimizeImports"; + static final String BASE_PATH = PathManagerEx.getTestDataPath() + "/psi/optimizeImports"; @Override protected String getTestDataPath() {