diff --git a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/JdkAndMockLibraryProjectDescriptor.java b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/JdkAndMockLibraryProjectDescriptor.java index 64ad613989d..ff9fa1c1a73 100644 --- a/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/JdkAndMockLibraryProjectDescriptor.java +++ b/idea/idea-test-framework/src/org/jetbrains/kotlin/idea/test/JdkAndMockLibraryProjectDescriptor.java @@ -1,3 +1,4 @@ +/* /* * Copyright 2010-2015 JetBrains s.r.o. * @@ -23,6 +24,7 @@ import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.util.io.FileUtilRt; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.test.MockLibraryUtil; +import org.jetbrains.kotlin.utils.PathUtil; import java.io.File; @@ -31,31 +33,41 @@ public class JdkAndMockLibraryProjectDescriptor extends KotlinLightProjectDescri private final String sourcesPath; private final boolean withSources; + private final boolean withRuntime; private final boolean isJsLibrary; public JdkAndMockLibraryProjectDescriptor(String sourcesPath, boolean withSources) { - this(sourcesPath, withSources, false); + this(sourcesPath, withSources, false, false); } - public JdkAndMockLibraryProjectDescriptor(String sourcesPath, boolean withSources, boolean isJsLibrary) { + public JdkAndMockLibraryProjectDescriptor(String sourcesPath, boolean withSources, boolean withRuntime, boolean isJsLibrary) { this.sourcesPath = sourcesPath; this.withSources = withSources; + this.withRuntime = withRuntime; this.isJsLibrary = isJsLibrary; } @Override public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model) { File libraryJar = MockLibraryUtil.compileLibraryToJar(sourcesPath, LIBRARY_NAME, withSources, isJsLibrary); - String jarUrl = "jar://" + FileUtilRt.toSystemIndependentName(libraryJar.getAbsolutePath()) + "!/"; + String jarUrl = getJarUrl(libraryJar); Library.ModifiableModel libraryModel = model.getModuleLibraryTable().getModifiableModel().createLibrary(LIBRARY_NAME).getModifiableModel(); libraryModel.addRoot(jarUrl, OrderRootType.CLASSES); + if (withRuntime) { + libraryModel.addRoot(getJarUrl(PathUtil.getKotlinPathsForDistDirectory().getRuntimePath()), OrderRootType.CLASSES); + } if (withSources) { libraryModel.addRoot(jarUrl + "src/", OrderRootType.SOURCES); } + libraryModel.commit(); } + @NotNull + private static String getJarUrl(@NotNull File libraryJar) { + return "jar://" + FileUtilRt.toSystemIndependentName(libraryJar.getAbsolutePath()) + "!/"; + } @Override public boolean equals(Object o) { @@ -65,15 +77,19 @@ public class JdkAndMockLibraryProjectDescriptor extends KotlinLightProjectDescri JdkAndMockLibraryProjectDescriptor that = (JdkAndMockLibraryProjectDescriptor) o; if (withSources != that.withSources) return false; - if (sourcesPath != null ? !sourcesPath.equals(that.sourcesPath) : that.sourcesPath != null) return false; + if (withRuntime != that.withRuntime) return false; + if (isJsLibrary != that.isJsLibrary) return false; + if (!sourcesPath.equals(that.sourcesPath)) return false; return true; } @Override public int hashCode() { - int result = sourcesPath != null ? sourcesPath.hashCode() : 0; + int result = sourcesPath.hashCode(); result = 31 * result + (withSources ? 1 : 0); + result = 31 * result + (withRuntime ? 1 : 0); + result = 31 * result + (isJsLibrary ? 1 : 0); return result; } } diff --git a/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithLibClassQualifier.kt b/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithLibClassQualifier.kt index 6e1591b7ba4..35222bd794c 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithLibClassQualifier.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/callExpression/callWithLibClassQualifier.kt @@ -2,6 +2,7 @@ // ACTION: Create extension function 'Foo' // ACTION: Rename reference // ERROR: Unresolved reference: Foo +// WITH_RUNTIME fun test() { val a = 2.Foo(1) diff --git a/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/extension.kt b/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/extension.kt index 09813943bff..36215629ae5 100644 --- a/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/extension.kt +++ b/idea/testData/quickfix/createFromUsage/createClass/callExpression/typeArguments/extension.kt @@ -2,6 +2,7 @@ // ACTION: Create extension function 'Foo' // ACTION: Rename reference // ERROR: Unresolved reference: Foo +// WITH_RUNTIME class A(val items: List) { fun test() = items.Foo(2, "2") diff --git a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt index 6a52cbdec52..a989ddfba52 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt @@ -1,4 +1,5 @@ // "Create extension function 'plus'" "true" +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt.after index f9193e54dd4..ea002cdcc59 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/plusOnLibType.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'plus'" "true" +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt index 3012c524131..8c9c0cf1621 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt @@ -1,4 +1,5 @@ // "Create extension function '!u00A0'" "true" +// WITH_RUNTIME fun test() { val t: Int = 1 `!u00A0` 2 diff --git a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt.after index 35197019a18..cd77d0f297c 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/binaryOperations/quotedName.kt.after @@ -1,4 +1,5 @@ // "Create extension function '!u00A0'" "true" +// WITH_RUNTIME fun test() { val t: Int = 1 `!u00A0` 2 diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt index fb7b0673fb5..f855070c18d 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME fun test() { val a: Int = Unit.foo(2) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt.after index e5a4efe2462..42f2dc239c8 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibObject.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME fun test() { val a: Int = Unit.foo(2) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt index 69e0e9f049a..e85188bc490 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt.after index 51c92879905..bf3390db23c 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/funOnLibType.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt index dd08cad29ce..193d1b4dc2e 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt.after index 24c360ebac0..f27fb8a5b0b 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extension.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt index be9d1fe223c..99222741007 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt.after index a25b786eb38..7cd7196a86c 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionPartialSubstitution.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt index cd4c11bffd0..389d365e35f 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt.after index 24c360ebac0..f27fb8a5b0b 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/typeArguments/extensionWithReceiverArg.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME class A(val items: List) { fun test(): Int { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt b/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt index a3ee990a22b..675074c0eca 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME fun T.map(f: T.() -> U) = f() fun consume(s: String) {} diff --git a/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt.after index c2ccef32380..58922ba709c 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/callableReferences/extensionWithReceiverInCallableRef.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'foo'" "true" +// WITH_RUNTIME fun T.map(f: T.() -> U) = f() fun consume(s: String) {} diff --git a/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt b/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt index c31b754a2e7..2044476e3ff 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt @@ -1,4 +1,5 @@ // "Create extension function 'component2'" "true" +// WITH_RUNTIME class FooIterator { operator fun hasNext(): Boolean { return false } operator fun next(): Any { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt.after index 21ae481f8d0..d6cdfdce231 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/component/createComponentFromUsage3.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'component2'" "true" +// WITH_RUNTIME class FooIterator { operator fun hasNext(): Boolean { return false } operator fun next(): Any { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt b/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt index 57f88d229f3..63857ce259f 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt @@ -1,4 +1,5 @@ // "Create extension function 'get'" "true" +// WITH_RUNTIME fun x (y: Any) { val z: Any = y[""] diff --git a/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt.after index c0dca349275..2806733b1e8 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/get/createGetFromUsage2.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'get'" "true" +// WITH_RUNTIME fun x (y: Any) { val z: Any = y[""] diff --git a/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt index 7e0b9720dee..d355eb4b675 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt @@ -1,4 +1,5 @@ // "Create extension function 'invoke'" "true" +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt.after index 1bb62af108e..b1c40b968c6 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/invoke/invokeOnLibType.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'invoke'" "true" +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt b/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt index 5cfb1848508..0fdd4d0290f 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt @@ -1,4 +1,5 @@ // "Create extension function 'set'" "true" +// WITH_RUNTIME class Foo { fun x (y: Any, w: java.util.ArrayList) { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt.after index 21a12da8b76..2f4f589cca8 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/set/createSetFromUsage2.kt.after @@ -1,6 +1,7 @@ import java.util.ArrayList // "Create extension function 'set'" "true" +// WITH_RUNTIME class Foo { fun x (y: Any, w: java.util.ArrayList) { diff --git a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt index d5549371ec8..b99111990ca 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt @@ -1,4 +1,5 @@ // "Create extension function 'unaryMinus'" "true" +// WITH_RUNTIME fun test() { val a = -false diff --git a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt.after index 473b11230e6..cd26a3da5d6 100644 --- a/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createFunction/unaryOperations/minusOnLibType.kt.after @@ -1,4 +1,5 @@ // "Create extension function 'unaryMinus'" "true" +// WITH_RUNTIME fun test() { val a = -false diff --git a/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/superCallNoClass.kt b/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/superCallNoClass.kt index 86239476cdd..e82afcef257 100644 --- a/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/superCallNoClass.kt +++ b/idea/testData/quickfix/createFromUsage/createSecondaryConstructor/superCallNoClass.kt @@ -1,5 +1,6 @@ // "Create secondary constructor" "false" // ERROR: Too many arguments for public constructor Any() defined in kotlin.Any +// WITH_RUNTIME interface T { diff --git a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/inBinaryOperation.kt b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/inBinaryOperation.kt index d3e4bc27f6b..e9c46371c1a 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/inBinaryOperation.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/inBinaryOperation.kt @@ -2,6 +2,7 @@ // ERROR: Unresolved reference: foo // ACTION: Create extension function 'foo' // ACTION: Replace infix call with ordinary call +// WITH_RUNTIME fun refer() { 1 foo 2 } \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/inBinaryOperation.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/inBinaryOperation.kt index 8c8e9890fb3..09d5e62775a 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/parameter/inBinaryOperation.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/inBinaryOperation.kt @@ -2,6 +2,7 @@ // ERROR: Unresolved reference: foo // ACTION: Create extension function 'foo' // ACTION: Replace infix call with ordinary call +// WITH_RUNTIME fun refer() { 1 foo 2 } \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/primaryParameter/valOnLibType.kt b/idea/testData/quickfix/createFromUsage/createVariable/primaryParameter/valOnLibType.kt index 3cd42fd4f6d..5734f61fea6 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/primaryParameter/valOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/primaryParameter/valOnLibType.kt @@ -2,6 +2,7 @@ // ACTION: Create extension property 'foo' // ACTION: Rename reference // ERROR: Unresolved reference: foo +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/inBinaryOperation.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/inBinaryOperation.kt index 417f0795498..aa28aab5038 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/inBinaryOperation.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/inBinaryOperation.kt @@ -2,6 +2,7 @@ // ERROR: Unresolved reference: foo // ACTION: Create extension function 'foo' // ACTION: Replace infix call with ordinary call +// WITH_RUNTIME fun refer() { 1 foo 2 } \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt index d4b581f458f..77b570bd08d 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt @@ -1,5 +1,6 @@ // "Create extension property 'foo'" "true" // ERROR: Property must be initialized +// WITH_RUNTIME fun test() { val a: Int = Unit.foo diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after index d84c592e297..ad6fcac2940 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibObject.kt.after @@ -1,5 +1,6 @@ // "Create extension property 'foo'" "true" // ERROR: Property must be initialized +// WITH_RUNTIME val Unit.foo: Int diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt index 18025491d5c..f8294fcfd10 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt @@ -1,5 +1,6 @@ // "Create extension property 'foo'" "true" // ERROR: Property must be initialized +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after index 2cd1ad44a64..61d294aad33 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/valOnLibType.kt.after @@ -1,5 +1,6 @@ // "Create extension property 'foo'" "true" // ERROR: Property must be initialized +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt index 595ff30cc60..9127c47d553 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt @@ -1,5 +1,6 @@ // "Create extension property 'foo'" "true" // ERROR: Property must be initialized +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after index 448726f1efb..8edd15fc522 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/varOnLibType.kt.after @@ -1,5 +1,6 @@ // "Create extension property 'foo'" "true" // ERROR: Property must be initialized +// WITH_RUNTIME class A(val n: T) diff --git a/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt b/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt index c65d064a7e8..02461dfbf99 100644 --- a/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt +++ b/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt @@ -1,5 +1,6 @@ // PARAM_DESCRIPTOR: public fun Bar.foo(): kotlin.Unit defined in root package // PARAM_TYPES: Bar, Foo, kotlin.Any +// WITH_RUNTIME open class Foo class Bar : Foo() diff --git a/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt.after b/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt.after index 1d2ae2eba86..b10aa01ba33 100644 --- a/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt.after +++ b/idea/testData/refactoring/extractFunction/parameters/candidateTypes/receiverCandidateTypes.kt.after @@ -1,5 +1,6 @@ // PARAM_DESCRIPTOR: public fun Bar.foo(): kotlin.Unit defined in root package // PARAM_TYPES: Bar, Foo, kotlin.Any +// WITH_RUNTIME open class Foo class Bar : Foo() diff --git a/idea/testData/resolve/referenceInLib/builtInNumber.kt b/idea/testData/resolve/referenceInLib/builtInNumber.kt index be77cca86d1..7bfbc893e0d 100644 --- a/idea/testData/resolve/referenceInLib/builtInNumber.kt +++ b/idea/testData/resolve/referenceInLib/builtInNumber.kt @@ -1,6 +1,6 @@ val a: Number? = null // CONTEXT: public abstract fun toDouble(): Double -// RUNTIME +// RUNTIME_WITH_SOURCES // REF: (kotlin).Double diff --git a/idea/tests/org/jetbrains/kotlin/idea/KotlinHierarchyViewTestBase.java b/idea/tests/org/jetbrains/kotlin/idea/KotlinHierarchyViewTestBase.java index 7003b9c6170..12f2a139444 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/KotlinHierarchyViewTestBase.java +++ b/idea/tests/org/jetbrains/kotlin/idea/KotlinHierarchyViewTestBase.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea; import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess; import com.intellij.testFramework.codeInsight.hierarchy.HierarchyViewTestBase; +import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil; import org.jetbrains.kotlin.test.KotlinTestUtils; public abstract class KotlinHierarchyViewTestBase extends HierarchyViewTestBase { @@ -25,10 +26,12 @@ public abstract class KotlinHierarchyViewTestBase extends HierarchyViewTestBase protected void setUp() throws Exception { super.setUp(); VfsRootAccess.allowRootAccess(KotlinTestUtils.getHomeDirectory()); + ConfigLibraryUtil.configureKotlinRuntime(myModule); } @Override protected void tearDown() throws Exception { + ConfigLibraryUtil.unConfigureKotlinRuntime(myModule); VfsRootAccess.disallowRootAccess(KotlinTestUtils.getHomeDirectory()); super.tearDown(); } diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateFromLibrarySourcesTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateFromLibrarySourcesTest.kt index 77ad28b51c4..d1a4ad35a55 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateFromLibrarySourcesTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateFromLibrarySourcesTest.kt @@ -73,7 +73,7 @@ public class NavigateFromLibrarySourcesTest: LightCodeInsightFixtureTestCase() { } override fun getProjectDescriptor(): LightProjectDescriptor { - return JdkAndMockLibraryProjectDescriptor(PluginTestCaseBase.getTestDataPathBase() + "/decompiler/navigation/fromLibSource", true) + return JdkAndMockLibraryProjectDescriptor(PluginTestCaseBase.getTestDataPathBase() + "/decompiler/navigation/fromLibSource", true, true, false) } private fun checkNavigationElement(element: PsiElement, expectedFqName: String) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt index 72bf24be7cd..1a280205db6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt @@ -54,7 +54,7 @@ public abstract class AbstractDecompiledTextBaseTest( if (isAllFilesPresentInTest()) { return KotlinLightProjectDescriptor.INSTANCE } - return JdkAndMockLibraryProjectDescriptor(TEST_DATA_PATH + "/" + getTestName(false), false, isJsLibrary) + return JdkAndMockLibraryProjectDescriptor(TEST_DATA_PATH + "/" + getTestName(false), false, false, isJsLibrary) } private fun checkThatFileWasParsedCorrectly(clsFile: PsiFile) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/javaFacade/KotlinJavaFacadeTest.java b/idea/tests/org/jetbrains/kotlin/idea/javaFacade/KotlinJavaFacadeTest.java index 25c0e3307bc..ff809f7e673 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/javaFacade/KotlinJavaFacadeTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/javaFacade/KotlinJavaFacadeTest.java @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.asJava.KtLightClass; import org.jetbrains.kotlin.asJava.KtLightMethod; import org.jetbrains.kotlin.asJava.LightClassUtil; import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase; -import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor; +import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor; import org.jetbrains.kotlin.idea.test.PluginTestCaseBase; import org.jetbrains.kotlin.name.SpecialNames; import org.jetbrains.kotlin.psi.*; @@ -34,7 +34,7 @@ public class KotlinJavaFacadeTest extends KotlinLightCodeInsightFixtureTestCase @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { - return KotlinLightProjectDescriptor.INSTANCE; + return KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE; } @Override diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java index 5c58cce97de..cbb53e5aad5 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixTest.java @@ -39,7 +39,6 @@ import kotlin.CollectionsKt; import kotlin.StringsKt; import kotlin.jvm.functions.Function1; import org.apache.commons.lang.SystemUtils; -import org.codehaus.plexus.util.FileUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.KotlinLightQuickFixTestCase; @@ -167,23 +166,25 @@ public abstract class AbstractQuickFixTest extends KotlinLightQuickFixTestCase { } //endregion - private static void configureRuntimeIfNeeded(@NotNull String beforeFileName) { + private static void configureRuntimeIfNeeded(@NotNull String beforeFileName) throws IOException { if (beforeFileName.endsWith("JsRuntime.kt")) { // Without the following line of code subsequent tests with js-runtime will be prone to failure due "outdated stub in index" error. FileBasedIndex.getInstance().requestRebuild(StubUpdatingIndex.INDEX_ID); ConfigLibraryUtil.configureKotlinJsRuntimeAndSdk(getModule(), getFullJavaJDK()); } - else if (beforeFileName.endsWith("Runtime.kt")) { + else if (beforeFileName.endsWith("Runtime.kt") || + InTextDirectivesUtils.isDirectiveDefined(FileUtil.loadFile(new File(beforeFileName)), "WITH_RUNTIME")) { ConfigLibraryUtil.configureKotlinRuntimeAndSdk(getModule(), getFullJavaJDK()); } } - private void unConfigureRuntimeIfNeeded(@NotNull String beforeFileName) { + private void unConfigureRuntimeIfNeeded(@NotNull String beforeFileName) throws IOException { if (beforeFileName.endsWith("JsRuntime.kt")) { ConfigLibraryUtil.unConfigureKotlinJsRuntimeAndSdk(getModule(), getProjectJDK()); } - else if (beforeFileName.endsWith("Runtime.kt")) { + else if (beforeFileName.endsWith("Runtime.kt") || + InTextDirectivesUtils.isDirectiveDefined(FileUtil.loadFile(new File(beforeFileName)), "WITH_RUNTIME")) { ConfigLibraryUtil.unConfigureKotlinRuntimeAndSdk(getModule(), getProjectJDK()); } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveWithLibTest.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveWithLibTest.java index 66cc77ff683..2d037b1464c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveWithLibTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveWithLibTest.java @@ -28,6 +28,6 @@ public abstract class AbstractReferenceResolveWithLibTest extends AbstractRefere if (PluginTestCaseBase.isAllFilesPresentTest(getTestName(true))) { return null; } - return new JdkAndMockLibraryProjectDescriptor(TEST_DATA_PATH + "/" + getTestName(true) + "Src", false); + return new JdkAndMockLibraryProjectDescriptor(TEST_DATA_PATH + "/" + getTestName(true) + "Src", false, true, false); } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/structureView/AbstractKotlinFileStructureTest.kt b/idea/tests/org/jetbrains/kotlin/idea/structureView/AbstractKotlinFileStructureTest.kt index 30f069d1912..143a6932c38 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/structureView/AbstractKotlinFileStructureTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/structureView/AbstractKotlinFileStructureTest.kt @@ -28,11 +28,15 @@ import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.InTextDirectivesUtils import com.intellij.openapi.ui.Queryable.PrintInfo +import com.intellij.testFramework.LightProjectDescriptor +import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.test.util.configureWithExtraFile public abstract class AbstractKotlinFileStructureTest : KotlinLightCodeInsightFixtureTestCase() { override fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/structureView/fileStructure" + override fun getProjectDescriptor() = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE + public fun doTest(path: String) { myFixture.configureWithExtraFile(path)