From 0f2fa6bade06b123a145d98b4da0d599bb44262b Mon Sep 17 00:00:00 2001 From: "Natalia.Ukhorskaya" Date: Fri, 11 Jan 2013 11:45:23 +0400 Subject: [PATCH] Fix completion for top level non-imported functions --- .../caches/JetFromJavaDescriptorHelper.java | 31 +++--- ...TopLevelFromStandardLibraryWithoutParam.kt | 11 +++ .../basic/TopLevelNonImportedExtFun.jar | Bin 0 -> 1205 bytes .../basic/TopLevelNonImportedExtFun.kt | 8 ++ .../basic/TopLevelNonImportedFun.jar | Bin 0 -> 1205 bytes .../basic/TopLevelNonImportedFun.kt | 8 ++ .../completion/JetBasicCompletionTest.java | 27 +++++ .../jet/completion/JetCompletionTestBase.java | 6 +- .../JetJdkAndLibraryProjectDescriptor.java | 93 ++++++++++++++++++ ...thJdkAndRuntimeLightProjectDescriptor.java | 57 +---------- .../importOptimizer/OptimizeImportsTest.java | 12 +-- .../NavigateToStdlibSourceRegressionTest.java | 2 +- .../jet/plugin/quickfix/JetQuickFixTest.java | 9 +- .../jet/search/JUnitMembersSearcherTest.java | 34 +------ ...untimeUtil.java => ConfigLibraryUtil.java} | 36 +++++-- 15 files changed, 210 insertions(+), 124 deletions(-) create mode 100644 idea/testData/completion/basic/TopLevelFromStandardLibraryWithoutParam.kt create mode 100644 idea/testData/completion/basic/TopLevelNonImportedExtFun.jar create mode 100644 idea/testData/completion/basic/TopLevelNonImportedExtFun.kt create mode 100644 idea/testData/completion/basic/TopLevelNonImportedFun.jar create mode 100644 idea/testData/completion/basic/TopLevelNonImportedFun.kt create mode 100644 idea/tests/org/jetbrains/jet/plugin/JetJdkAndLibraryProjectDescriptor.java rename idea/tests/org/jetbrains/jet/testing/{ConfigRuntimeUtil.java => ConfigLibraryUtil.java} (63%) diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java index d4f49b881be..773f72274e0 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java @@ -82,7 +82,7 @@ class JetFromJavaDescriptorHelper { Collection annotations = JavaAnnotationIndex.getInstance().get(JetClass.class.getSimpleName(), project, scope); for (PsiAnnotation annotation : annotations) { - PsiModifierList modifierList = (PsiModifierList)annotation.getParent(); + PsiModifierList modifierList = (PsiModifierList) annotation.getParent(); final PsiElement owner = modifierList.getParent(); if (owner instanceof PsiClass) { PsiClass psiClass = (PsiClass) owner; @@ -95,7 +95,7 @@ class JetFromJavaDescriptorHelper { return jetObjectClasses; } - + static Collection getTopExtensionFunctionNames(Project project, GlobalSearchScope scope) { // Extension function should have an parameter of type JetValueParameter with explicit receiver parameter. @@ -127,11 +127,12 @@ class JetFromJavaDescriptorHelper { static Collection getTopExtensionFunctionPrototypesByName(String name, Project project, GlobalSearchScope scope) { return filterJetJavaPrototypesByName( name, project, scope, - new Predicate() { + new Predicate() { @Override - public boolean apply(@Nullable JetValueParameterAnnotation jetValueParameterAnnotation) { - assert jetValueParameterAnnotation != null; - return jetValueParameterAnnotation.receiver(); + public boolean apply(@Nullable PsiMethod psiMethod) { + assert psiMethod != null; + PsiParameter[] parameters = psiMethod.getParameterList().getParameters(); + return parameters.length > 0 && JetValueParameterAnnotation.get(parameters[0]).receiver(); } }); } @@ -139,11 +140,12 @@ class JetFromJavaDescriptorHelper { static Collection getTopLevelFunctionPrototypesByName(String name, Project project, GlobalSearchScope scope) { return filterJetJavaPrototypesByName( name, project, scope, - new Predicate() { + new Predicate() { @Override - public boolean apply(@Nullable JetValueParameterAnnotation jetValueParameterAnnotation) { - assert jetValueParameterAnnotation != null; - return !jetValueParameterAnnotation.receiver(); + public boolean apply(@Nullable PsiMethod psiMethod) { + assert psiMethod != null; + PsiParameter[] parameters = psiMethod.getParameterList().getParameters(); + return parameters.length == 0 || !JetValueParameterAnnotation.get(parameters[0]).receiver(); } }); } @@ -169,7 +171,8 @@ class JetFromJavaDescriptorHelper { private static Collection filterJetJavaPrototypesByName( String name, Project project, GlobalSearchScope scope, - Predicate filterPredicate) { + Predicate filterPredicate + ) { Set selectedMethods = new HashSet(); Collection psiMethods = JavaMethodNameIndex.getInstance().get(name, project, scope); @@ -185,10 +188,8 @@ class JetFromJavaDescriptorHelper { } // Should be parameter with JetValueParameter.receiver == true - for (PsiParameter parameter : psiMethod.getParameterList().getParameters()) { - if (filterPredicate.apply(JetValueParameterAnnotation.get(parameter))) { - selectedMethods.add(psiMethod); - } + if (filterPredicate.apply(psiMethod)) { + selectedMethods.add(psiMethod); } } diff --git a/idea/testData/completion/basic/TopLevelFromStandardLibraryWithoutParam.kt b/idea/testData/completion/basic/TopLevelFromStandardLibraryWithoutParam.kt new file mode 100644 index 00000000000..30079d1d389 --- /dev/null +++ b/idea/testData/completion/basic/TopLevelFromStandardLibraryWithoutParam.kt @@ -0,0 +1,11 @@ +package testing + +fun someFun() { + defaultDocumentBuilderFa +} + +// Important: This test checks that completion will find top level functions from jars. +// If you going to update it make sure that methods are not auto-imported + +// RUNTIME: 1 +// EXIST: defaultDocumentBuilderFactory \ No newline at end of file diff --git a/idea/testData/completion/basic/TopLevelNonImportedExtFun.jar b/idea/testData/completion/basic/TopLevelNonImportedExtFun.jar new file mode 100644 index 0000000000000000000000000000000000000000..ea3886e9efb31c04581767c10caa7175a459b714 GIT binary patch literal 1205 zcmWIWW@h1H0DN`!#}2+>su166}mJA z{1kU+$;-d5zFBUlv|tH;8x!s1_+_u#;*ZS_u57P8^sI3H+H|&wSIytt{2hJmqU#&k zjek#m(|RW>uuRXXbf!g8q?!ot?Z(b?E*=W?E;(kicRvbzzvRTP)gJM!%>UN*e96Aa zamzPayl>j#vlHeDZn~QFR&d#VX}*a28z+AFF=LyPa^&v2_oj=zp1W}C?XGI3m2*>` z?ei-!f8r)`G%QlqopWK447=8ssTaM1(qB6LFpKKCNl zqIXX3owvVxgWZ>TA2zl%&@WMKHigdCxfXweQz48_SsnFS?!*(Jqmr+Vk# zHsCq_{+~#b|6S#eT4hgR7WfNUY1NU%;?yfy`^>fn2_J@(ZZhiAs z&TsWf-y%1a+g<0WpDf?;c|4n{KKe~vp8r);dE-AOrhAU1SJx;NGD}~O*FAL9BX#f5 z47J6qmswZ2ow5zgE`8OwlR5IO>*nCHKA~*S3#<6`T-Vwklq$)c9e#E8tBQZWBCfaG z+Wr34ng)s1)lw^LW~6QWTsXNsRQ+(jPvKQIIsw(Kt(rLCTC*+CJ{$i&5fJI5oJ0Fayw$^VQ@A`FNU068gvN&o~<12VCc2Ow)< k27po=vXdZ=ff?}~=ukxZ3-D%T1IaK0;d&tbff>XD0NW +} + +// EXIST: abcdCCC3, abcdDDD4 +// ABSENT: abcdAAA1, abcdBBB2 diff --git a/idea/testData/completion/basic/TopLevelNonImportedFun.jar b/idea/testData/completion/basic/TopLevelNonImportedFun.jar new file mode 100644 index 0000000000000000000000000000000000000000..ea3886e9efb31c04581767c10caa7175a459b714 GIT binary patch literal 1205 zcmWIWW@h1H0DN`!#}2+>su166}mJA z{1kU+$;-d5zFBUlv|tH;8x!s1_+_u#;*ZS_u57P8^sI3H+H|&wSIytt{2hJmqU#&k zjek#m(|RW>uuRXXbf!g8q?!ot?Z(b?E*=W?E;(kicRvbzzvRTP)gJM!%>UN*e96Aa zamzPayl>j#vlHeDZn~QFR&d#VX}*a28z+AFF=LyPa^&v2_oj=zp1W}C?XGI3m2*>` z?ei-!f8r)`G%QlqopWK447=8ssTaM1(qB6LFpKKCNl zqIXX3owvVxgWZ>TA2zl%&@WMKHigdCxfXweQz48_SsnFS?!*(Jqmr+Vk# zHsCq_{+~#b|6S#eT4hgR7WfNUY1NU%;?yfy`^>fn2_J@(ZZhiAs z&TsWf-y%1a+g<0WpDf?;c|4n{KKe~vp8r);dE-AOrhAU1SJx;NGD}~O*FAL9BX#f5 z47J6qmswZ2ow5zgE`8OwlR5IO>*nCHKA~*S3#<6`T-Vwklq$)c9e#E8tBQZWBCfaG z+Wr34ng)s1)lw^LW~6QWTsXNsRQ+(jPvKQIIsw(Kt(rLCTC*+CJ{$i&5fJI5oJ0Fayw$^VQ@A`FNU068gvN&o~<12VCc2Ow)< k27po=vXdZ=ff?}~=ukxZ3-D%T1IaK0;d&tbff>XD0NW +} + +// EXIST: abcdAAA1, abcdBBB2 +// ABSENT: abcdCCC3, abcdDDD4 diff --git a/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java b/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java index 6bfe73fbb4b..40d5356d94d 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java +++ b/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java @@ -17,7 +17,9 @@ package org.jetbrains.jet.completion; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.plugin.JetJdkAndLibraryProjectDescriptor; import org.jetbrains.jet.plugin.PluginTestCaseBase; +import org.jetbrains.jet.testing.ConfigLibraryUtil; import java.io.File; @@ -242,6 +244,10 @@ public class JetBasicCompletionTest extends JetCompletionTestBase { doTest(); } + public void testTopLevelFromStandardLibraryWithoutParam() { + doTest(); + } + public void testVariableClassName() { doTest(); } @@ -282,6 +288,27 @@ public class JetBasicCompletionTest extends JetCompletionTestBase { doTest(); } + public void testTopLevelNonImportedFun() { + doTestWithJar(); + } + + public void testTopLevelNonImportedExtFun() { + doTestWithJar(); + } + + public void doTestWithJar() { + File libraryFile = new File(getTestDataPath() + "/" + getTestName(false) + ".jar"); + JetJdkAndLibraryProjectDescriptor projectDescriptor = new JetJdkAndLibraryProjectDescriptor(libraryFile); + + try { + ConfigLibraryUtil.configureLibrary(getModule(), getFullJavaJDK(), projectDescriptor); + doTest(); + } + finally { + ConfigLibraryUtil.unConfigureLibrary(getModule(), getFullJavaJDK(), projectDescriptor); + } + } + @NotNull @Override protected String getTestDataPath() { diff --git a/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java b/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java index b36423d4021..e33b52cb1cb 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java +++ b/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java @@ -26,7 +26,7 @@ import com.intellij.openapi.projectRoots.JavaSdk; import com.intellij.openapi.projectRoots.Sdk; import org.apache.commons.lang.SystemUtils; import org.jetbrains.jet.plugin.PluginTestCaseBase; -import org.jetbrains.jet.testing.ConfigRuntimeUtil; +import org.jetbrains.jet.testing.ConfigLibraryUtil; import org.jetbrains.jet.InTextDirectivesUtils; import org.jetbrains.jet.utils.ExceptionUtils; @@ -51,7 +51,7 @@ public abstract class JetCompletionTestBase extends LightCompletionTestCase { try { if (withKotlinRuntime) { - ConfigRuntimeUtil.configureKotlinRuntime(getModule(), getFullJavaJDK()); + ConfigLibraryUtil.configureKotlinRuntime(getModule(), getFullJavaJDK()); } Integer completionTime = completionUtils.getExecutionTime(fileText); @@ -82,7 +82,7 @@ public abstract class JetCompletionTestBase extends LightCompletionTestCase { } finally { if (withKotlinRuntime) { - ConfigRuntimeUtil.unConfigureKotlinRuntime(getModule(), getProjectJDK()); + ConfigLibraryUtil.unConfigureKotlinRuntime(getModule(), getProjectJDK()); } } } diff --git a/idea/tests/org/jetbrains/jet/plugin/JetJdkAndLibraryProjectDescriptor.java b/idea/tests/org/jetbrains/jet/plugin/JetJdkAndLibraryProjectDescriptor.java new file mode 100644 index 00000000000..e5811fe3738 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/plugin/JetJdkAndLibraryProjectDescriptor.java @@ -0,0 +1,93 @@ +/* + * Copyright 2010-2013 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 org.jetbrains.jet.plugin; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleType; +import com.intellij.openapi.module.StdModuleTypes; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.roots.*; +import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.testFramework.LightProjectDescriptor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; + +public class JetJdkAndLibraryProjectDescriptor implements LightProjectDescriptor { + + private final String libraryName = "myLibrary"; + private final File libraryFile; + private final OrderRootType libraryRootType; + + public JetJdkAndLibraryProjectDescriptor(File libraryFile, OrderRootType libraryRootType) { + assert libraryFile.exists() : "Library file doesn't exist: " + libraryFile.getAbsolutePath(); + this.libraryFile = libraryFile; + this.libraryRootType = libraryRootType; + } + + public JetJdkAndLibraryProjectDescriptor(File libraryFile) { + assert libraryFile.exists() : "Library file doesn't exist: " + libraryFile.getAbsolutePath(); + this.libraryFile = libraryFile; + this.libraryRootType = OrderRootType.CLASSES; + } + + @Override + public ModuleType getModuleType() { + return StdModuleTypes.JAVA; + } + + @Override + public Sdk getSdk() { + return PluginTestCaseBase.jdkFromIdeaHome(); + } + + @Override + public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @Nullable ContentEntry contentEntry) { + Library library = model.getModuleLibraryTable().createLibrary(libraryName); + Library.ModifiableModel modifiableModel = library.getModifiableModel(); + modifiableModel.addRoot(VfsUtil.getUrlForLibraryRoot(libraryFile), libraryRootType); + modifiableModel.commit(); + } + + public void unConfigureModule(@NotNull ModifiableRootModel model) { + for (OrderEntry orderEntry : model.getOrderEntries()) { + if (orderEntry instanceof LibraryOrderEntry) { + LibraryOrderEntry libraryOrderEntry = (LibraryOrderEntry) orderEntry; + + Library library = libraryOrderEntry.getLibrary(); + if (library != null) { + String libraryName = library.getName(); + if (libraryName != null && libraryName.equals(this.libraryName)) { + + // Dispose attached roots + Library.ModifiableModel modifiableModel = library.getModifiableModel(); + for (String rootUrl : library.getRootProvider().getUrls(OrderRootType.CLASSES)) { + modifiableModel.removeRoot(rootUrl, OrderRootType.CLASSES); + } + modifiableModel.commit(); + + model.getModuleLibraryTable().removeLibrary(library); + + break; + } + } + } + } + } +} diff --git a/idea/tests/org/jetbrains/jet/plugin/JetWithJdkAndRuntimeLightProjectDescriptor.java b/idea/tests/org/jetbrains/jet/plugin/JetWithJdkAndRuntimeLightProjectDescriptor.java index 00c54103c6c..97ad16fe06f 100644 --- a/idea/tests/org/jetbrains/jet/plugin/JetWithJdkAndRuntimeLightProjectDescriptor.java +++ b/idea/tests/org/jetbrains/jet/plugin/JetWithJdkAndRuntimeLightProjectDescriptor.java @@ -16,65 +16,12 @@ package org.jetbrains.jet.plugin; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.module.StdModuleTypes; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.*; -import com.intellij.openapi.roots.libraries.Library; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.testFramework.LightProjectDescriptor; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime; -public class JetWithJdkAndRuntimeLightProjectDescriptor implements LightProjectDescriptor { +public class JetWithJdkAndRuntimeLightProjectDescriptor extends JetJdkAndLibraryProjectDescriptor { protected JetWithJdkAndRuntimeLightProjectDescriptor() { + super(ForTestCompileRuntime.runtimeJarForTests()); } public static final JetWithJdkAndRuntimeLightProjectDescriptor INSTANCE = new JetWithJdkAndRuntimeLightProjectDescriptor(); - - @Override - public ModuleType getModuleType() { - return StdModuleTypes.JAVA; - } - - @Override - public Sdk getSdk() { - return PluginTestCaseBase.jdkFromIdeaHome(); - } - - @Override - public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @Nullable ContentEntry contentEntry) { - Library library = model.getModuleLibraryTable().createLibrary("ktl"); - Library.ModifiableModel modifiableModel = library.getModifiableModel(); - modifiableModel.addRoot(VfsUtil.getUrlForLibraryRoot(ForTestCompileRuntime.runtimeJarForTests()), OrderRootType.CLASSES); - modifiableModel.commit(); - } - - public static void unConfigureModule(@NotNull ModifiableRootModel model) { - for (OrderEntry orderEntry : model.getOrderEntries()) { - if (orderEntry instanceof LibraryOrderEntry) { - LibraryOrderEntry libraryOrderEntry = (LibraryOrderEntry) orderEntry; - - Library library = libraryOrderEntry.getLibrary(); - if (library != null) { - String libraryName = library.getName(); - if (libraryName != null && libraryName.equals("ktl")) { - - // Dispose attached roots - Library.ModifiableModel modifiableModel = library.getModifiableModel(); - for (String rootUrl : library.getRootProvider().getUrls(OrderRootType.CLASSES)) { - modifiableModel.removeRoot(rootUrl, OrderRootType.CLASSES); - } - modifiableModel.commit(); - - model.getModuleLibraryTable().removeLibrary(library); - - break; - } - } - } - } - } } diff --git a/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsTest.java b/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsTest.java index 579b2b86ece..bf7643446ee 100644 --- a/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/importOptimizer/OptimizeImportsTest.java @@ -24,7 +24,7 @@ import com.intellij.testFramework.LightCodeInsightTestCase; import org.apache.commons.lang.SystemUtils; import org.jetbrains.jet.plugin.PluginTestCaseBase; import org.jetbrains.jet.plugin.editor.importOptimizer.JetImportOptimizer; -import org.jetbrains.jet.testing.ConfigRuntimeUtil; +import org.jetbrains.jet.testing.ConfigLibraryUtil; import java.io.File; @@ -56,7 +56,7 @@ public class OptimizeImportsTest extends LightCodeInsightTestCase { public void testKt1850FullQualified() throws Exception { doTest(); } - + public void testKt1850InnerClass() throws Exception { doTest(); } @@ -77,7 +77,7 @@ public class OptimizeImportsTest extends LightCodeInsightTestCase { public void doTestWithKotlinRuntime() { try { - ConfigRuntimeUtil.configureKotlinRuntime(getModule(), getFullJavaJDK()); + ConfigLibraryUtil.configureKotlinRuntime(getModule(), getFullJavaJDK()); configureByFile(fileName()); invokeFormatFile(); @@ -85,7 +85,7 @@ public class OptimizeImportsTest extends LightCodeInsightTestCase { checkResultByFile(null, checkFileName(), false); } finally { - ConfigRuntimeUtil.unConfigureKotlinRuntime(getModule(), getProjectJDK()); + ConfigLibraryUtil.unConfigureKotlinRuntime(getModule(), getProjectJDK()); } } @@ -114,7 +114,7 @@ public class OptimizeImportsTest extends LightCodeInsightTestCase { private static void invokeFormatFile() { CommandProcessor.getInstance().executeCommand( - getProject(), new JetImportOptimizer().processFile(getFile()), - "Optimize Imports", null, UndoConfirmationPolicy.DO_NOT_REQUEST_CONFIRMATION); + getProject(), new JetImportOptimizer().processFile(getFile()), + "Optimize Imports", null, UndoConfirmationPolicy.DO_NOT_REQUEST_CONFIRMATION); } } diff --git a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToStdlibSourceRegressionTest.java b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToStdlibSourceRegressionTest.java index 101c5835611..30697320344 100644 --- a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToStdlibSourceRegressionTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToStdlibSourceRegressionTest.java @@ -68,7 +68,7 @@ public class NavigateToStdlibSourceRegressionTest extends NavigateToLibraryRegre public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @Nullable ContentEntry contentEntry) { super.configureModule(module, model, contentEntry); - Library library = model.getModuleLibraryTable().getLibraryByName("ktl"); + Library library = model.getModuleLibraryTable().getLibraryByName("myLibrary"); assert library != null; Library.ModifiableModel modifiableModel = library.getModifiableModel(); modifiableModel.addRoot(VfsUtil.getUrlForLibraryRoot(new File("libraries/stdlib/src")), OrderRootType.SOURCES); diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java index 17c37c0b525..19647c95ba6 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java @@ -29,7 +29,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.plugin.PluginTestCaseBase; -import org.jetbrains.jet.testing.ConfigRuntimeUtil; +import org.jetbrains.jet.testing.ConfigLibraryUtil; import java.io.File; import java.io.FilenameFilter; @@ -85,7 +85,8 @@ public class JetQuickFixTest extends LightQuickFixTestCase { List subDirs = Arrays.asList(quickFixTestsFilter != null ? dir.list(quickFixTestsFilter) : dir.list()); Collections.sort(subDirs); for (String subDirName : subDirs) { - final TestSuite singleFileTestSuite = JetTestCaseBuilder.suiteForDirectory(getTestDataPathBase(), subDirName, true, singleFileNameFilter, singleFileNamedTestFactory); + final TestSuite singleFileTestSuite = JetTestCaseBuilder + .suiteForDirectory(getTestDataPathBase(), subDirName, true, singleFileNameFilter, singleFileNamedTestFactory); if (singleFileTestSuite.countTestCases() != 0) { suite.addTest(singleFileTestSuite); } @@ -107,7 +108,7 @@ public class JetQuickFixTest extends LightQuickFixTestCase { boolean isWithRuntime = name.endsWith("Runtime"); if (isWithRuntime) { - ConfigRuntimeUtil.configureKotlinRuntime(getModule(), getFullJavaJDK()); + ConfigLibraryUtil.configureKotlinRuntime(getModule(), getFullJavaJDK()); } try { @@ -117,7 +118,7 @@ public class JetQuickFixTest extends LightQuickFixTestCase { } finally { if (isWithRuntime) { - ConfigRuntimeUtil.unConfigureKotlinRuntime(getModule(), getProjectJDK()); + ConfigLibraryUtil.unConfigureKotlinRuntime(getModule(), getProjectJDK()); } } } diff --git a/idea/tests/org/jetbrains/jet/search/JUnitMembersSearcherTest.java b/idea/tests/org/jetbrains/jet/search/JUnitMembersSearcherTest.java index 4e8a30d8eae..8a750ba0ea7 100644 --- a/idea/tests/org/jetbrains/jet/search/JUnitMembersSearcherTest.java +++ b/idea/tests/org/jetbrains/jet/search/JUnitMembersSearcherTest.java @@ -17,21 +17,13 @@ package org.jetbrains.jet.search; import com.intellij.openapi.application.PathManager; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.module.StdModuleTypes; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.ContentEntry; -import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.VfsUtil; import com.intellij.psi.PsiClass; import com.intellij.psi.search.searches.AnnotatedMembersSearch; import com.intellij.psi.search.searches.ClassInheritorsSearch; import com.intellij.testFramework.LightProjectDescriptor; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.plugin.JetJdkAndLibraryProjectDescriptor; import org.jetbrains.jet.plugin.PluginTestCaseBase; import org.jetbrains.jet.InTextDirectivesUtils; @@ -40,27 +32,8 @@ import java.io.IOException; import java.util.List; public class JUnitMembersSearcherTest extends AbstractSearcherTest { - private static final LightProjectDescriptor junitProjectDescriptor = new LightProjectDescriptor() { - @Override - public ModuleType getModuleType() { - return StdModuleTypes.JAVA; - } - - @Override - public Sdk getSdk() { - return PluginTestCaseBase.jdkFromIdeaHome(); - } - - @Override - public void configureModule(Module module, ModifiableRootModel model, ContentEntry contentEntry) { - Library library = model.getModuleLibraryTable().createLibrary("junit"); - Library.ModifiableModel modifiableModel = library.getModifiableModel(); - modifiableModel.addRoot(VfsUtil.getUrlForLibraryRoot( - new File(PathManager.getHomePath().replace(File.separatorChar, '/') + "/lib/junit-4.10.jar")), - OrderRootType.CLASSES); - modifiableModel.commit(); - } - }; + private static final LightProjectDescriptor junitProjectDescriptor = + new JetJdkAndLibraryProjectDescriptor(new File(PathManager.getHomePath().replace(File.separatorChar, '/') + "/lib/junit-4.10.jar")); public void testJunit3() throws IOException { doJUnit3test(); @@ -100,7 +73,6 @@ public class JUnitMembersSearcherTest extends AbstractSearcherTest { @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { - return junitProjectDescriptor; } } diff --git a/idea/tests/org/jetbrains/jet/testing/ConfigRuntimeUtil.java b/idea/tests/org/jetbrains/jet/testing/ConfigLibraryUtil.java similarity index 63% rename from idea/tests/org/jetbrains/jet/testing/ConfigRuntimeUtil.java rename to idea/tests/org/jetbrains/jet/testing/ConfigLibraryUtil.java index 3a5415b90b8..5ff81699609 100644 --- a/idea/tests/org/jetbrains/jet/testing/ConfigRuntimeUtil.java +++ b/idea/tests/org/jetbrains/jet/testing/ConfigLibraryUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2012 JetBrains s.r.o. + * Copyright 2010-2013 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. @@ -21,16 +21,31 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.testFramework.LightProjectDescriptor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.plugin.JetJdkAndLibraryProjectDescriptor; import org.jetbrains.jet.plugin.JetWithJdkAndRuntimeLightProjectDescriptor; /** * Helper for configuring kotlin runtime in tested project. */ -public class ConfigRuntimeUtil { - private ConfigRuntimeUtil() { +public class ConfigLibraryUtil { + private ConfigLibraryUtil() { } public static void configureKotlinRuntime(final Module module, final Sdk sdk) { + configureLibrary(module, sdk, JetWithJdkAndRuntimeLightProjectDescriptor.INSTANCE); + } + + public static void unConfigureKotlinRuntime(final Module module, final Sdk sdk) { + unConfigureLibrary(module, sdk, JetWithJdkAndRuntimeLightProjectDescriptor.INSTANCE); + } + + public static void configureLibrary( + @NotNull final Module module, + @NotNull final Sdk sdk, + @NotNull final LightProjectDescriptor projectDescriptor + ) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { @@ -39,24 +54,27 @@ public class ConfigRuntimeUtil { final ModifiableRootModel rootModel = rootManager.getModifiableModel(); rootModel.setSdk(sdk); - JetWithJdkAndRuntimeLightProjectDescriptor.INSTANCE.configureModule(module, rootModel, null); - + projectDescriptor.configureModule(module, rootModel, null); rootModel.commit(); } }); } - public static void unConfigureKotlinRuntime(final Module module, final Sdk sdk) { + public static void unConfigureLibrary( + @NotNull final Module module, + @NotNull final Sdk sdk, + @NotNull final LightProjectDescriptor projectDescriptor + ) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - final ModuleRootManager rootManager = ModuleRootManager.getInstance(module); final ModifiableRootModel rootModel = rootManager.getModifiableModel(); rootModel.setSdk(sdk); - JetWithJdkAndRuntimeLightProjectDescriptor.unConfigureModule(rootModel); - + if (projectDescriptor instanceof JetJdkAndLibraryProjectDescriptor) { + ((JetJdkAndLibraryProjectDescriptor) projectDescriptor).unConfigureModule(rootModel); + } rootModel.commit(); } });