<component name="libraryTable">
<library name="kotlinc.allopen-compiler-plugin" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:allopen-compiler-plugin-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:allopen-compiler-plugin-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/allopen-compiler-plugin-for-ide/1.8.0-dev-897/allopen-compiler-plugin-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/allopen-compiler-plugin-for-ide/1.8.0-dev-1681/allopen-compiler-plugin-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/allopen-compiler-plugin-for-ide/1.8.0-dev-897/allopen-compiler-plugin-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/allopen-compiler-plugin-for-ide/1.8.0-dev-1681/allopen-compiler-plugin-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.analysis-api-providers" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:analysis-api-providers-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:analysis-api-providers-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-api-providers-for-ide/1.8.0-dev-897/analysis-api-providers-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-api-providers-for-ide/1.8.0-dev-1681/analysis-api-providers-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-api-providers-for-ide/1.8.0-dev-897/analysis-api-providers-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-api-providers-for-ide/1.8.0-dev-1681/analysis-api-providers-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.analysis-project-structure" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:analysis-project-structure-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:analysis-project-structure-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-project-structure-for-ide/1.8.0-dev-897/analysis-project-structure-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-project-structure-for-ide/1.8.0-dev-1681/analysis-project-structure-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-project-structure-for-ide/1.8.0-dev-897/analysis-project-structure-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/analysis-project-structure-for-ide/1.8.0-dev-1681/analysis-project-structure-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.android-extensions-compiler-plugin" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:android-extensions-compiler-plugin-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:android-extensions-compiler-plugin-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/android-extensions-compiler-plugin-for-ide/1.8.0-dev-897/android-extensions-compiler-plugin-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/android-extensions-compiler-plugin-for-ide/1.8.0-dev-1681/android-extensions-compiler-plugin-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/android-extensions-compiler-plugin-for-ide/1.8.0-dev-897/android-extensions-compiler-plugin-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/android-extensions-compiler-plugin-for-ide/1.8.0-dev-1681/android-extensions-compiler-plugin-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.high-level-api" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-for-ide/1.8.0-dev-897/high-level-api-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-for-ide/1.8.0-dev-1681/high-level-api-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-for-ide/1.8.0-dev-897/high-level-api-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-for-ide/1.8.0-dev-1681/high-level-api-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.high-level-api-fe10" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-fe10-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-fe10-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fe10-for-ide/1.8.0-dev-897/high-level-api-fe10-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fe10-for-ide/1.8.0-dev-1681/high-level-api-fe10-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fe10-for-ide/1.8.0-dev-897/high-level-api-fe10-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fe10-for-ide/1.8.0-dev-1681/high-level-api-fe10-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.high-level-api-fir" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-fir-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-fir-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-for-ide/1.8.0-dev-897/high-level-api-fir-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-for-ide/1.8.0-dev-1681/high-level-api-fir-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-for-ide/1.8.0-dev-897/high-level-api-fir-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-for-ide/1.8.0-dev-1681/high-level-api-fir-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.high-level-api-fir-tests" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-fir-tests-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-fir-tests-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-tests-for-ide/1.8.0-dev-897/high-level-api-fir-tests-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-tests-for-ide/1.8.0-dev-1681/high-level-api-fir-tests-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-tests-for-ide/1.8.0-dev-897/high-level-api-fir-tests-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-fir-tests-for-ide/1.8.0-dev-1681/high-level-api-fir-tests-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.high-level-api-impl-base" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-impl-base-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-impl-base-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-for-ide/1.8.0-dev-897/high-level-api-impl-base-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-for-ide/1.8.0-dev-1681/high-level-api-impl-base-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-for-ide/1.8.0-dev-897/high-level-api-impl-base-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-for-ide/1.8.0-dev-1681/high-level-api-impl-base-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.high-level-api-impl-base-tests" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-impl-base-tests-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:high-level-api-impl-base-tests-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-tests-for-ide/1.8.0-dev-897/high-level-api-impl-base-tests-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-tests-for-ide/1.8.0-dev-1681/high-level-api-impl-base-tests-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-tests-for-ide/1.8.0-dev-897/high-level-api-impl-base-tests-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/high-level-api-impl-base-tests-for-ide/1.8.0-dev-1681/high-level-api-impl-base-tests-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.incremental-compilation-impl-tests" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:incremental-compilation-impl-tests-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:incremental-compilation-impl-tests-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/incremental-compilation-impl-tests-for-ide/1.8.0-dev-897/incremental-compilation-impl-tests-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/incremental-compilation-impl-tests-for-ide/1.8.0-dev-1681/incremental-compilation-impl-tests-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/incremental-compilation-impl-tests-for-ide/1.8.0-dev-897/incremental-compilation-impl-tests-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/incremental-compilation-impl-tests-for-ide/1.8.0-dev-1681/incremental-compilation-impl-tests-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-build-common-tests" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-build-common-tests-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-build-common-tests-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-build-common-tests-for-ide/1.8.0-dev-897/kotlin-build-common-tests-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-build-common-tests-for-ide/1.8.0-dev-1681/kotlin-build-common-tests-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-build-common-tests-for-ide/1.8.0-dev-897/kotlin-build-common-tests-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-build-common-tests-for-ide/1.8.0-dev-1681/kotlin-build-common-tests-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-compiler-cli" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-cli-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-cli-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-cli-for-ide/1.8.0-dev-897/kotlin-compiler-cli-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-cli-for-ide/1.8.0-dev-1681/kotlin-compiler-cli-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-cli-for-ide/1.8.0-dev-897/kotlin-compiler-cli-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-cli-for-ide/1.8.0-dev-1681/kotlin-compiler-cli-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-compiler-common" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-common-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-common-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-common-for-ide/1.8.0-dev-897/kotlin-compiler-common-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-common-for-ide/1.8.0-dev-1681/kotlin-compiler-common-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-common-for-ide/1.8.0-dev-897/kotlin-compiler-common-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-common-for-ide/1.8.0-dev-1681/kotlin-compiler-common-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-compiler-fe10" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-fe10-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-fe10-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fe10-for-ide/1.8.0-dev-897/kotlin-compiler-fe10-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fe10-for-ide/1.8.0-dev-1681/kotlin-compiler-fe10-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fe10-for-ide/1.8.0-dev-897/kotlin-compiler-fe10-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fe10-for-ide/1.8.0-dev-1681/kotlin-compiler-fe10-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-compiler-fir" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-fir-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-fir-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fir-for-ide/1.8.0-dev-897/kotlin-compiler-fir-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fir-for-ide/1.8.0-dev-1681/kotlin-compiler-fir-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fir-for-ide/1.8.0-dev-897/kotlin-compiler-fir-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-fir-for-ide/1.8.0-dev-1681/kotlin-compiler-fir-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-compiler-ir" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-ir-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-ir-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-ir-for-ide/1.8.0-dev-897/kotlin-compiler-ir-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-ir-for-ide/1.8.0-dev-1681/kotlin-compiler-ir-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-ir-for-ide/1.8.0-dev-897/kotlin-compiler-ir-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-ir-for-ide/1.8.0-dev-1681/kotlin-compiler-ir-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-compiler-tests" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-tests-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-compiler-tests-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-tests-for-ide/1.8.0-dev-897/kotlin-compiler-tests-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-tests-for-ide/1.8.0-dev-1681/kotlin-compiler-tests-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-tests-for-ide/1.8.0-dev-897/kotlin-compiler-tests-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-compiler-tests-for-ide/1.8.0-dev-1681/kotlin-compiler-tests-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-gradle-statistics" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-gradle-statistics-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-gradle-statistics-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-gradle-statistics-for-ide/1.8.0-dev-897/kotlin-gradle-statistics-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-gradle-statistics-for-ide/1.8.0-dev-1681/kotlin-gradle-statistics-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-gradle-statistics-for-ide/1.8.0-dev-897/kotlin-gradle-statistics-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-gradle-statistics-for-ide/1.8.0-dev-1681/kotlin-gradle-statistics-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-jps-common" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-jps-common-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-jps-common-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-jps-common-for-ide/1.8.0-dev-897/kotlin-jps-common-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-jps-common-for-ide/1.8.0-dev-1681/kotlin-jps-common-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-jps-common-for-ide/1.8.0-dev-897/kotlin-jps-common-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-jps-common-for-ide/1.8.0-dev-1681/kotlin-jps-common-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-reflect" type="repository">
- <properties maven-id="org.jetbrains.kotlin:kotlin-reflect:1.8.0-dev-897">
+ <properties maven-id="org.jetbrains.kotlin:kotlin-reflect:1.8.0-dev-1681">
<exclude>
<dependency maven-id="org.jetbrains.kotlin:kotlin-stdlib" />
</exclude>
</properties>
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.8.0-dev-897/kotlin-reflect-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.8.0-dev-1681/kotlin-reflect-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.8.0-dev-897/kotlin-reflect-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.8.0-dev-1681/kotlin-reflect-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-script-runtime" type="repository">
- <properties maven-id="org.jetbrains.kotlin:kotlin-script-runtime:1.8.0-dev-897" />
+ <properties maven-id="org.jetbrains.kotlin:kotlin-script-runtime:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-script-runtime/1.8.0-dev-897/kotlin-script-runtime-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-script-runtime/1.8.0-dev-1681/kotlin-script-runtime-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-script-runtime/1.8.0-dev-897/kotlin-script-runtime-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-script-runtime/1.8.0-dev-1681/kotlin-script-runtime-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-scripting-common" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-scripting-common:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-scripting-common:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-common/1.8.0-dev-897/kotlin-scripting-common-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-common/1.8.0-dev-1681/kotlin-scripting-common-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-common/1.8.0-dev-897/kotlin-scripting-common-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-common/1.8.0-dev-1681/kotlin-scripting-common-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-scripting-compiler-impl" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-scripting-compiler-impl:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-scripting-compiler-impl:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-compiler-impl/1.8.0-dev-897/kotlin-scripting-compiler-impl-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-compiler-impl/1.8.0-dev-1681/kotlin-scripting-compiler-impl-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-compiler-impl/1.8.0-dev-897/kotlin-scripting-compiler-impl-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-compiler-impl/1.8.0-dev-1681/kotlin-scripting-compiler-impl-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-scripting-jvm" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-jvm/1.8.0-dev-897/kotlin-scripting-jvm-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-jvm/1.8.0-dev-1681/kotlin-scripting-jvm-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-jvm/1.8.0-dev-897/kotlin-scripting-jvm-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-jvm/1.8.0-dev-1681/kotlin-scripting-jvm-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-stdlib" type="repository">
- <properties maven-id="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0-dev-897">
+ <properties maven-id="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0-dev-1681">
<exclude>
<dependency maven-id="org.jetbrains:annotations" />
</exclude>
<root url="file://$PROJECT_DIR$/lib/annotations/kotlin" />
</ANNOTATIONS>
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0-dev-897/kotlin-stdlib-jdk8-1.8.0-dev-897.jar!/" />
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.0-dev-897/kotlin-stdlib-1.8.0-dev-897.jar!/" />
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0-dev-897/kotlin-stdlib-common-1.8.0-dev-897.jar!/" />
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0-dev-897/kotlin-stdlib-jdk7-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0-dev-1681/kotlin-stdlib-jdk8-1.8.0-dev-1681.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.0-dev-1681/kotlin-stdlib-1.8.0-dev-1681.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0-dev-1681/kotlin-stdlib-common-1.8.0-dev-1681.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0-dev-1681/kotlin-stdlib-jdk7-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0-dev-897/kotlin-stdlib-jdk8-1.8.0-dev-897-sources.jar!/" />
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.0-dev-897/kotlin-stdlib-1.8.0-dev-897-sources.jar!/" />
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0-dev-897/kotlin-stdlib-common-1.8.0-dev-897-sources.jar!/" />
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0-dev-897/kotlin-stdlib-jdk7-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0-dev-1681/kotlin-stdlib-jdk8-1.8.0-dev-1681-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.0-dev-1681/kotlin-stdlib-1.8.0-dev-1681-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0-dev-1681/kotlin-stdlib-common-1.8.0-dev-1681-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0-dev-1681/kotlin-stdlib-jdk7-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlin-stdlib-minimal-for-test" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-stdlib-minimal-for-test-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlin-stdlib-minimal-for-test-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-minimal-for-test-for-ide/1.8.0-dev-897/kotlin-stdlib-minimal-for-test-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-minimal-for-test-for-ide/1.8.0-dev-1681/kotlin-stdlib-minimal-for-test-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-minimal-for-test-for-ide/1.8.0-dev-897/kotlin-stdlib-minimal-for-test-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-minimal-for-test-for-ide/1.8.0-dev-1681/kotlin-stdlib-minimal-for-test-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.kotlinx-serialization-compiler-plugin" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlinx-serialization-compiler-plugin-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:kotlinx-serialization-compiler-plugin-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlinx-serialization-compiler-plugin-for-ide/1.8.0-dev-897/kotlinx-serialization-compiler-plugin-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlinx-serialization-compiler-plugin-for-ide/1.8.0-dev-1681/kotlinx-serialization-compiler-plugin-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlinx-serialization-compiler-plugin-for-ide/1.8.0-dev-897/kotlinx-serialization-compiler-plugin-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlinx-serialization-compiler-plugin-for-ide/1.8.0-dev-1681/kotlinx-serialization-compiler-plugin-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.lombok-compiler-plugin" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:lombok-compiler-plugin-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:lombok-compiler-plugin-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/lombok-compiler-plugin-for-ide/1.8.0-dev-897/lombok-compiler-plugin-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/lombok-compiler-plugin-for-ide/1.8.0-dev-1681/lombok-compiler-plugin-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/lombok-compiler-plugin-for-ide/1.8.0-dev-897/lombok-compiler-plugin-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/lombok-compiler-plugin-for-ide/1.8.0-dev-1681/lombok-compiler-plugin-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.low-level-api-fir" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:low-level-api-fir-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:low-level-api-fir-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/low-level-api-fir-for-ide/1.8.0-dev-897/low-level-api-fir-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/low-level-api-fir-for-ide/1.8.0-dev-1681/low-level-api-fir-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/low-level-api-fir-for-ide/1.8.0-dev-897/low-level-api-fir-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/low-level-api-fir-for-ide/1.8.0-dev-1681/low-level-api-fir-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.noarg-compiler-plugin" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:noarg-compiler-plugin-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:noarg-compiler-plugin-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/noarg-compiler-plugin-for-ide/1.8.0-dev-897/noarg-compiler-plugin-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/noarg-compiler-plugin-for-ide/1.8.0-dev-1681/noarg-compiler-plugin-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/noarg-compiler-plugin-for-ide/1.8.0-dev-897/noarg-compiler-plugin-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/noarg-compiler-plugin-for-ide/1.8.0-dev-1681/noarg-compiler-plugin-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.parcelize-compiler-plugin" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:parcelize-compiler-plugin-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:parcelize-compiler-plugin-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/parcelize-compiler-plugin-for-ide/1.8.0-dev-897/parcelize-compiler-plugin-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/parcelize-compiler-plugin-for-ide/1.8.0-dev-1681/parcelize-compiler-plugin-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/parcelize-compiler-plugin-for-ide/1.8.0-dev-897/parcelize-compiler-plugin-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/parcelize-compiler-plugin-for-ide/1.8.0-dev-1681/parcelize-compiler-plugin-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.sam-with-receiver-compiler-plugin" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:sam-with-receiver-compiler-plugin-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:sam-with-receiver-compiler-plugin-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/sam-with-receiver-compiler-plugin-for-ide/1.8.0-dev-897/sam-with-receiver-compiler-plugin-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/sam-with-receiver-compiler-plugin-for-ide/1.8.0-dev-1681/sam-with-receiver-compiler-plugin-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/sam-with-receiver-compiler-plugin-for-ide/1.8.0-dev-897/sam-with-receiver-compiler-plugin-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/sam-with-receiver-compiler-plugin-for-ide/1.8.0-dev-1681/sam-with-receiver-compiler-plugin-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="kotlinc.symbol-light-classes" type="repository">
- <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:symbol-light-classes-for-ide:1.8.0-dev-897" />
+ <properties include-transitive-deps="false" maven-id="org.jetbrains.kotlin:symbol-light-classes-for-ide:1.8.0-dev-1681" />
<CLASSES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/symbol-light-classes-for-ide/1.8.0-dev-897/symbol-light-classes-for-ide-1.8.0-dev-897.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/symbol-light-classes-for-ide/1.8.0-dev-1681/symbol-light-classes-for-ide-1.8.0-dev-1681.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
- <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/symbol-light-classes-for-ide/1.8.0-dev-897/symbol-light-classes-for-ide-1.8.0-dev-897-sources.jar!/" />
+ <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/symbol-light-classes-for-ide/1.8.0-dev-1681/symbol-light-classes-for-ide-1.8.0-dev-1681-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$/.." />
<option name="externalSystemIdString" value="GRADLE" />
- <option name="scriptParameters" value="publishIdeArtifacts :prepare:ide-plugin-dependencies:kotlin-dist-for-ide:publish -Ppublish.ide.plugin.dependencies=true -PdeployVersion=1.7.255 -Pbuild.number=1.7.255" />
+ <option name="scriptParameters" value="publishIdeArtifacts :prepare:ide-plugin-dependencies:kotlin-dist-for-ide:publish -Ppublish.ide.plugin.dependencies=true -PdeployVersion=1.8.255 -Pbuild.number=1.8.255" />
<option name="taskDescriptions">
<list />
</option>
import com.intellij.psi.stubs.StubIndexKey
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory
+import org.jetbrains.kotlin.idea.base.indices.names.KotlinTopLevelCallableByPackageShortNameIndex
+import org.jetbrains.kotlin.idea.base.indices.names.KotlinTopLevelClassLikeDeclarationByPackageShortNameIndex
import org.jetbrains.kotlin.idea.stubindex.*
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
}
override fun getClassLikeDeclarationByClassId(classId: ClassId): KtClassLikeDeclaration? {
- return firstMatchingOrNull(KotlinFullClassNameIndex.KEY, key = classId.asStringForIndexes()) {
- candidate -> candidate.getClassId() == classId
+ return firstMatchingOrNull(KotlinFullClassNameIndex.KEY, key = classId.asStringForIndexes()) { candidate ->
+ candidate.getClassId() == classId
} ?: getTypeAliasByClassId(classId)
}
+
override fun getAllClassesByClassId(classId: ClassId): Collection<KtClassOrObject> {
return KotlinFullClassNameIndex
.get(classId.asStringForIndexes(), project, scope)
return listOfNotNull(getTypeAliasByClassId(classId)) //todo
}
- override fun getTypeAliasNamesInPackage(packageFqName: FqName): Set<Name> {
- return KotlinTopLevelTypeAliasByPackageIndex
- .get(packageFqName.asStringForIndexes(), project, scope)
- .mapNotNullTo(mutableSetOf()) { it.nameAsName }
- }
+ override fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set<Name> {
+ return KotlinTopLevelCallableByPackageShortNameIndex.getNamesInPackage(packageFqName, scope)
- override fun getPropertyNamesInPackage(packageFqName: FqName): Set<Name> {
- return KotlinTopLevelPropertyByPackageIndex
- .get(packageFqName.asStringForIndexes(), project, scope)
- .mapNotNullTo(mutableSetOf()) { it.nameAsName }
}
- override fun getFunctionsNamesInPackage(packageFqName: FqName): Set<Name> {
- return KotlinTopLevelFunctionByPackageIndex
- .get(packageFqName.asStringForIndexes(), project, scope)
- .mapNotNullTo(mutableSetOf()) { it.nameAsName }
+ override fun getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName: FqName): Set<Name> {
+ return KotlinTopLevelClassLikeDeclarationByPackageShortNameIndex.getNamesInPackage(packageFqName, scope)
}
override fun getFacadeFilesInPackage(packageFqName: FqName): Collection<KtFile> {
override fun getTopLevelFunctions(callableId: CallableId): Collection<KtNamedFunction> =
KotlinTopLevelFunctionFqnNameIndex.get(callableId.asStringForIndexes(), project, scope)
-
- override fun getClassNamesInPackage(packageFqName: FqName): Set<Name> =
- KotlinTopLevelClassByPackageIndex
- .get(packageFqName.asStringForIndexes(), project, scope)
- .mapNotNullTo(hashSetOf()) { it.nameAsName }
-
companion object {
private fun CallableId.asStringForIndexes(): String =
(if (packageName.isRoot) callableName.asString() else toString()).replace('/', '.')
nameFilter: (Name) -> Boolean,
psiFilter: (PsiClass) -> Boolean = { true }
): Sequence<KtNamedClassOrObjectSymbol> {
+ val scope = analysisScope
val names = buildSet<Name> {
forEachNonKotlinCache { cache ->
- cache.allClassNames.forEach { nameString ->
- if (Name.isValidIdentifier(nameString)) return@forEach
+ cache.processAllClassNames({ nameString ->
+ if (!Name.isValidIdentifier(nameString)) return@processAllClassNames true
val name = Name.identifier(nameString)
- if (nameFilter(name)) {
- add(name)
- }
- }
+ if (nameFilter(name)) { add(name) }
+ true
+ }, scope, null)
}
}
import org.jetbrains.kotlin.psi.analysisContext
import org.jetbrains.kotlin.resolve.scopes.MemberScope
-open class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport() {
+class IDEKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport() {
override fun getFacadeNames(packageFqName: FqName, scope: GlobalSearchScope): Collection<String> {
val facadeFilesInPackage = project.runReadActionInSmartMode {
KotlinFileFacadeClassByPackageIndex.get(packageFqName.asString(), project, scope)
object IdeDescriptorRenderers {
@JvmField
- val APPROXIMATE_FLEXIBLE_TYPES: (KotlinType) -> KotlinType = { it.approximateFlexibleTypes(preferNotNull = false) }
+ val APPROXIMATE_FLEXIBLE_TYPES: (KotlinType) -> KotlinType = {
+ it.approximateFlexibleTypes(preferNotNull = false)
+ }
@JvmField
- val APPROXIMATE_FLEXIBLE_TYPES_NOT_NULL: (KotlinType) -> KotlinType = { it.approximateFlexibleTypes(preferNotNull = true) }
+ val APPROXIMATE_FLEXIBLE_TYPES_NOT_NULL: (KotlinType) -> KotlinType = {
+ it.approximateFlexibleTypes(preferNotNull = true)
+ }
+
+ val APPROXIMATE_FLEXIBLE_TYPES_FOR_COLLECTIONS: (KotlinType) -> KotlinType = {
+ it.approximateFlexibleTypes(preferNotNull = true, preferUpperBoundsForCollections = true )
+ }
private fun unwrapAnonymousType(type: KotlinType): KotlinType {
if (type.isDynamic()) return type
parameterNamesInFunctionalTypes = false
}
+ @JvmField
+ val SOURCE_CODE_TYPES_FOR_SAM_CONVERSION: DescriptorRenderer = BASE.withOptions {
+ classifierNamePolicy = ClassifierNamePolicy.SOURCE_CODE_QUALIFIED
+ typeNormalizer = { APPROXIMATE_FLEXIBLE_TYPES_FOR_COLLECTIONS(unwrapAnonymousType(it)) }
+ annotationFilter = { it !is BuiltInAnnotationDescriptor && it.fqName?.isRedundantJvmAnnotation != true }
+ parameterNamesInFunctionalTypes = false
+ }
+
@JvmField
val SOURCE_CODE_TYPES_WITH_SHORT_NAMES: DescriptorRenderer = BASE.withOptions {
classifierNamePolicy = ClassifierNamePolicy.SHORT
fun KotlinType.approximateFlexibleTypes(
preferNotNull: Boolean = false,
- preferStarForRaw: Boolean = false
+ preferStarForRaw: Boolean = false,
+ preferUpperBoundsForCollections: Boolean = false,
): KotlinType {
if (isDynamic()) return this
if (isDefinitelyNotNullType) return this
- return unwrapEnhancement().approximateNonDynamicFlexibleTypes(preferNotNull, preferStarForRaw)
+ return unwrapEnhancement().approximateNonDynamicFlexibleTypes(preferNotNull, preferStarForRaw, preferUpperBoundsForCollections)
}
fun KotlinType.withoutRedundantAnnotations(): KotlinType {
private fun KotlinType.approximateNonDynamicFlexibleTypes(
preferNotNull: Boolean = false,
- preferStarForRaw: Boolean = false
+ preferStarForRaw: Boolean = false,
+ preferUpperBoundsForCollections: Boolean = false,
): SimpleType {
if (this is ErrorType) return this
// Foo! -> Foo?
// Foo<Bar!>! -> Foo<Bar>?
var approximation =
- if (isCollection)
- // (Mutable)Collection<T>!
+ if (isCollection) {
+ // (Mutable)Collection<T>!
+ val bound = if (preferUpperBoundsForCollections) upperBound else lowerBound
if (lowerBound.isMarkedNullable != upperBound.isMarkedNullable)
- lowerBound.makeNullableAsSpecified(!preferNotNull)
+ bound.makeNullableAsSpecified(!preferNotNull)
else
- lowerBound
- else
- if (this is RawType && preferStarForRaw) upperBound.makeNullableAsSpecified(!preferNotNull)
+ bound
+ } else {
+ if (this is RawType && preferStarForRaw)
+ upperBound.makeNullableAsSpecified(!preferNotNull)
else
if (preferNotNull) lowerBound else upperBound
+ }
approximation = approximation.approximateNonDynamicFlexibleTypes()
modifiers = emptySet()
startFromName = true
classifierNamePolicy = ClassifierNamePolicy.SHORT
+ presentableUnresolvedTypes = true
}
@NlsSafe
--- /dev/null
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.base.indices.names
+
+import com.intellij.util.indexing.FileContent
+import com.intellij.util.indexing.ID
+import org.jetbrains.annotations.ApiStatus
+import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
+import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.psi.KtCallableDeclaration
+import org.jetbrains.kotlin.psi.KtFile
+import org.jetbrains.kotlin.serialization.deserialization.getName
+
+@ApiStatus.Internal
+object KotlinTopLevelCallableByPackageShortNameIndex : NameByPackageShortNameIndex() {
+ val KEY = ID.create<FqName, List<Name>>(KotlinTopLevelCallableByPackageShortNameIndex::class.java.name)
+
+ override fun getName(): ID<FqName, List<Name>> = KEY
+
+ override fun getDeclarationNamesByKtFile(ktFile: KtFile): List<Name> = buildList {
+ for (declaration in ktFile.declarations) {
+ if (declaration is KtCallableDeclaration) {
+ val name = declaration.nameAsName ?: continue
+ if (name.isSpecial) continue
+ add(name)
+ }
+ }
+ }
+
+ override fun getDeclarationNamesByMetadata(kotlinJvmBinaryClass: KotlinJvmBinaryClass): List<Name> {
+ if (kotlinJvmBinaryClass.classHeader.kind == KotlinClassHeader.Kind.CLASS) return emptyList()
+ if (kotlinJvmBinaryClass.classHeader.kind == KotlinClassHeader.Kind.SYNTHETIC_CLASS) return emptyList()
+ if (kotlinJvmBinaryClass.classHeader.kind == KotlinClassHeader.Kind.MULTIFILE_CLASS) {
+ // MULTIFILE_CLASS does not contain any callables, all callables are inside MULTIFILE_CLASS_PARTs
+ return emptyList()
+ }
+
+ val (nameResolver, proto) = readProtoPackageData(kotlinJvmBinaryClass) ?: return emptyList()
+
+ return buildList {
+ proto.functionList.mapTo(this) { nameResolver.getName(it.name) }
+ proto.propertyList.mapTo(this) { nameResolver.getName(it.name) }
+ }
+ }
+
+ override fun getPackageAndNamesFromBuiltIns(fileContent: FileContent): Map<FqName, List<Name>> {
+ // builtins do not contain callables
+ return emptyMap()
+ }
+}
\ No newline at end of file
--- /dev/null
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.base.indices.names
+
+import com.intellij.util.indexing.FileContent
+import com.intellij.util.indexing.ID
+import org.jetbrains.annotations.ApiStatus
+import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInDefinitionFile
+import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
+import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.psi.KtClassLikeDeclaration
+import org.jetbrains.kotlin.psi.KtFile
+import org.jetbrains.kotlin.serialization.deserialization.getClassId
+import org.jetbrains.kotlin.serialization.deserialization.getName
+
+@ApiStatus.Internal
+object KotlinTopLevelClassLikeDeclarationByPackageShortNameIndex : NameByPackageShortNameIndex() {
+ val KEY = ID.create<FqName, List<Name>>(KotlinTopLevelClassLikeDeclarationByPackageShortNameIndex::class.java.name)
+
+ override fun getName(): ID<FqName, List<Name>> = KEY
+
+ override fun getDeclarationNamesByKtFile(ktFile: KtFile): List<Name> = buildList {
+ for (declaration in ktFile.declarations) {
+ if (declaration is KtClassLikeDeclaration) {
+ val name = declaration.nameAsName ?: continue
+ if (name.isSpecial) continue
+ add(name)
+ }
+ }
+ }
+
+ override fun getDeclarationNamesByMetadata(kotlinJvmBinaryClass: KotlinJvmBinaryClass): List<Name> {
+ return when (kotlinJvmBinaryClass.classHeader.kind) {
+ KotlinClassHeader.Kind.CLASS -> {
+ val className = kotlinJvmBinaryClass.classId.relativeClassName.pathSegments().first()
+ if (className.isSpecial) return listOf()
+ listOf(className)
+ }
+
+ KotlinClassHeader.Kind.FILE_FACADE, KotlinClassHeader.Kind.MULTIFILE_CLASS, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART -> {
+ val (nameResolver, proto) = readProtoPackageData(kotlinJvmBinaryClass) ?: return listOf()
+ proto.typeAliasList.map { nameResolver.getName(it.name) }
+ }
+
+ KotlinClassHeader.Kind.UNKNOWN -> listOf()
+ KotlinClassHeader.Kind.SYNTHETIC_CLASS -> listOf()
+ }
+ }
+
+ override fun getPackageAndNamesFromBuiltIns(fileContent: FileContent): Map<FqName, List<Name>> {
+ val builtins = BuiltInDefinitionFile.read(fileContent.content, fileContent.file.parent) as? BuiltInDefinitionFile
+ ?: return emptyMap()
+
+ val names = buildList {
+ builtins.proto.class_List.forEach { klass ->
+ val classId = builtins.nameResolver.getClassId(klass.fqName)
+ if (classId.isLocal) return@forEach
+ add(classId.relativeClassName.pathSegments().first())
+ }
+ }
+
+ return mapOf(builtins.packageFqName to names.distinct())
+ }
+}
\ No newline at end of file
--- /dev/null
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.base.indices.names
+
+import com.intellij.ide.highlighter.JavaClassFileType
+import com.intellij.openapi.diagnostic.ControlFlowException
+import com.intellij.openapi.diagnostic.logger
+import com.intellij.psi.search.GlobalSearchScope
+import com.intellij.util.indexing.*
+import com.intellij.util.io.DataExternalizer
+import com.intellij.util.io.IOUtil
+import org.jetbrains.annotations.ApiStatus
+import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInFileType
+import org.jetbrains.kotlin.idea.KotlinFileType
+import org.jetbrains.kotlin.idea.vfilefinder.FqNameKeyDescriptor
+import org.jetbrains.kotlin.idea.vfilefinder.KotlinPartialPackageNamesIndex
+import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache
+import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
+import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
+import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.psi.KtFile
+import java.io.DataInput
+import java.io.DataOutput
+
+@ApiStatus.Internal
+abstract class NameByPackageShortNameIndex : FileBasedIndexExtension<FqName, List<Name>>() {
+ private val LOG = logger<KotlinPartialPackageNamesIndex>()
+
+ protected abstract fun getDeclarationNamesByKtFile(ktFile: KtFile): List<Name>
+ protected abstract fun getDeclarationNamesByMetadata(kotlinJvmBinaryClass: KotlinJvmBinaryClass): List<Name>
+ protected abstract fun getPackageAndNamesFromBuiltIns(fileContent: FileContent): Map<FqName, List<Name>>
+
+ override fun dependsOnFileContent() = true
+ override fun getVersion() = 1
+ override fun getKeyDescriptor() = FqNameKeyDescriptor
+ override fun getValueExternalizer(): DataExternalizer<List<Name>> = ListOfNamesDataExternalizer
+ override fun traceKeyHashToVirtualFileMapping(): Boolean = true
+
+ override fun getInputFilter(): DefaultFileTypeSpecificInputFilter =
+ DefaultFileTypeSpecificInputFilter(KotlinFileType.INSTANCE, JavaClassFileType.INSTANCE, KotlinBuiltInFileType)
+
+ override fun getIndexer() = DataIndexer<FqName, List<Name>, FileContent> { fileContent ->
+ try {
+ when (fileContent.fileType) {
+ JavaClassFileType.INSTANCE -> getPackageAndNamesFromMetadata(fileContent)
+ KotlinBuiltInFileType -> getPackageAndNamesFromBuiltIns(fileContent)
+ KotlinFileType.INSTANCE -> {
+ val ktFile = fileContent.psiFile as? KtFile ?: return@DataIndexer emptyMap()
+ mapOf(ktFile.packageFqName to getDeclarationNamesByKtFile(ktFile).distinct())
+ }
+ else -> emptyMap()
+ }
+ } catch (e: Throwable) {
+ if (e is ControlFlowException) throw e
+ LOG.warn("Error `(${e.javaClass.simpleName}: ${e.message})` while indexing file ${fileContent.fileName} using $name index. Probably the file is broken.")
+ emptyMap()
+ }
+ }
+
+ private fun getPackageAndNamesFromMetadata(fileContent: FileContent): Map<FqName, List<Name>> {
+ val result = KotlinBinaryClassCache.getKotlinBinaryClassOrClassFileContent(fileContent.file, fileContent.content)
+ ?: return emptyMap()
+ val kotlinClass = result as? KotlinClassFinder.Result.KotlinClass ?: return emptyMap()
+ val binaryClass = kotlinClass.kotlinJvmBinaryClass
+ val packageName = binaryClass.classHeader.packageName?.let(::FqName) ?: binaryClass.classId.packageFqName
+ if (binaryClass.classHeader.kind == KotlinClassHeader.Kind.SYNTHETIC_CLASS) return emptyMap()
+ if (binaryClass.classId.isLocal) return emptyMap()
+ return mapOf(packageName to getDeclarationNamesByMetadata(binaryClass).distinct())
+ }
+
+ fun getNamesInPackage(packageFqName: FqName, scope: GlobalSearchScope): Set<Name> = buildSet {
+ FileBasedIndex.getInstance().getValues(name, packageFqName, scope).forEach(::addAll)
+ }
+}
+
+private object ListOfNamesDataExternalizer : DataExternalizer<List<Name>> {
+ override fun read(input: DataInput): List<Name> =
+ IOUtil.readStringList(input).map(Name::identifier)
+
+ override fun save(out: DataOutput, value: List<Name>) =
+ IOUtil.writeStringList(out, value.map(Name::asString))
+}
\ No newline at end of file
--- /dev/null
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.base.indices.names
+
+import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
+import org.jetbrains.kotlin.metadata.ProtoBuf
+import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmNameResolver
+import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
+
+internal fun readProtoPackageData(kotlinJvmBinaryClass: KotlinJvmBinaryClass): Pair<JvmNameResolver, ProtoBuf.Package>? {
+ val header = kotlinJvmBinaryClass.classHeader
+ val data = header.data ?: header.incompatibleData ?: return null
+ val strings = header.strings ?: return null
+ return JvmProtoBufUtil.readPackageDataFrom(data, strings)
+}
\ No newline at end of file
+// FIR_COMPARISON
+// FIR_IDENTICAL
class Test {
val St<caret>
}
+// FIR_COMPARISON
+// FIR_IDENTICAL
fun testing() {}
fun S<caret>
+// FIR_COMPARISON
+// FIR_IDENTICAL
class Test {
val St<caret>
}
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
class StrSome {
class StrOther
+// FIR_COMPARISON
+// FIR_IDENTICAL
package Tests
import java.util.*
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
class Test {
fun test() {
val some : <caret>
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
class Test : <caret> {
fun test() {
}
+// FIR_COMPARISON
+// FIR_IDENTICAL
class SomeClass {
class SomeInternal
+// FIR_COMPARISON
+// FIR_IDENTICAL
class SomeClass {
class SomeInternal
+// FIR_COMPARISON
+// FIR_IDENTICAL
@Dep<caret>
fun foo() { }
+// FIR_COMPARISON
+// FIR_IDENTICAL
annotation class III
@I<caret>
+// FIR_COMPARISON
+// FIR_IDENTICAL
import java.lang.annotation.*
@Retention(<caret>
// FIR_IDENTICAL
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun String.forString(){}
fun Any.forAny(){}
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun String.forString(){}
fun Any.forAny(){}
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
interface A {
fun foo(): Any
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
interface A {
fun foo(): Any
+// FIR_COMPARISON
+// FIR_IDENTICAL
fun some(a : Statement<caret>)
// INVOCATION_COUNT: 1
+// FIR_COMPARISON
+// FIR_IDENTICAL
package testing
// Should show java names by short name
-// FIR_IDENTICAL
-// FIR_COMPARISON
class Host
fun foo(): Ho<caret>
+// FIR_COMPARISON
+// FIR_IDENTICAL
class Host
fun foo(): Ho<caret>
+// FIR_COMPARISON
package foo
class TestKotlin
+// FIR_COMPARISON
+// FIR_IDENTICAL
package some
fun foo(i: Int) = 1
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
val v: Boolean = run {
return@run <caret>true
-// FIR_IDENTICAL
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
val v: Boolean = run {
return<caret> true
-// FIR_IDENTICAL
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
val v: Boolean = run {
- return@run <caret>true
+ return@run<caret> true
}
// ELEMENT: "return@run"
\ No newline at end of file
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
class Outer {
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
import two.Nest
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
import three.Nest as Egg
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
import three.Nest as Egg
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
import three.Nest
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
import three.Nest
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
open class Outer {
class Nested
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
open class Outer {
class Nested
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
class Outer {
+// FIR_COMPARISON
+// FIR_IDENTICAL
package one
class Outer {
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
fun f() {
Cal<caret>
}
import java.util.concurrent.Callable
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
fun f() {
Callable<caret>
}
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
class Pair(val first: Int, val second: Int)
fun foo(p: Pair) {
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
class Pair(val first: Int, val second: Int)
fun foo(p: Pair) {
-// FIR_IDENTICAL
-// FIR_COMPARISON
-
package main.objects
class A<T>
-// FIR_IDENTICAL
-// FIR_COMPARISON
-
package main.objects
class A<T>
+++ /dev/null
-// FIR_COMPARISON
-fun main(args: Array<String>) {
- args.filterNot {<caret>it != ""}
-}
-
-// ELEMENT: filterNot
\ No newline at end of file
--- /dev/null
+// FIR_COMPARISON
+import java.util.List as UtilList
+
+/**
+ * [Util<caret>]
+ */
+fun foo(){}
+
+// ELEMENT: UtilList
import java.util.List as UtilList
/**
- * [UtilList<caret>]
+ * [Util<caret>]
*/
fun foo(){}
-// FIR_IDENTICAL
// FIR_COMPARISON
import java.util.List as UtilList
-// FIR_IDENTICAL
// FIR_COMPARISON
import java.util.List as UtilList
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
fun foo(param: String) {
val s = "$param.<caret>bla-bla-bla"
}
+// FIR_COMPARISON
+// FIR_IDENTICAL
+
fun foo(param: String) {
val s = "${param.hashCode()<caret>}bla-bla-bla"
}
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo() {
takeHandler1 {
-// FIR_IDENTICAL
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo() {
takeHandler1 {
-// FIR_IDENTICAL
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo() {
takeHandler1 {
- takeHandler2({ return@takeHandler2 <caret> })
+ takeHandler2({ return@takeHandler2<caret> })
}
}
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo() {
takeHandler1 {
-// FIR_IDENTICAL
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo() {
takeHandler1 {
-// FIR_IDENTICAL
// FIR_COMPARISON
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo() {
takeHandler1 {
- takeHandler2({ -> return@takeHandler2 <caret> })
+ takeHandler2({ -> return@takeHandler2<caret> })
}
}
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo(p: Int) {
"abc".fold(1) { <caret> }
+// FIR_COMPARISON
+// FIR_IDENTICAL
// WITH_STDLIB
// MIN_JAVA_VERSION: 6
-// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun <R> String.fold(initial: R, operation: (acc: R, Char) -> R): R = TODO()
+// FIR_COMPARISON
+// FIR_IDENTICAL
import dependency.*
import java.util.*
public final [BODY_RESOLVE] val memberProperty: R|kotlin/Int|
- public [BODY_RESOLVE] get(): R|kotlin/Int|
+ public [RAW_FIR] get(): R|kotlin/Int|
public final [BODY_RESOLVE] fun memberFunction([BODY_RESOLVE] s: R|kotlin/String|): R|kotlin/Unit|
public final [BODY_RESOLVE] val memberProperty: R|kotlin/Int|
- public [BODY_RESOLVE] get(): R|kotlin/Int|
+ public [RAW_FIR] get(): R|kotlin/Int|
public [BODY_RESOLVE] constructor([BODY_RESOLVE] s: R|kotlin/String|): R|library/TopLevelClass|
public final [BODY_RESOLVE] val topLevelProperty: R|kotlin/Int|
- public [BODY_RESOLVE] get(): R|kotlin/Int|
+ public [RAW_FIR] get(): R|kotlin/Int|
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.idea.base.analysis.api.utils.KtSymbolFromIndexProvider
import org.jetbrains.kotlin.idea.base.facet.platform.platform
+import org.jetbrains.kotlin.idea.base.projectStructure.scope.KotlinSourceFilterScope
import org.jetbrains.kotlin.idea.completion.KotlinFirCompletionParameters
import org.jetbrains.kotlin.idea.completion.LookupElementSink
import org.jetbrains.kotlin.idea.completion.lookups.factories.KotlinFirLookupElementFactory
+import org.jetbrains.kotlin.idea.completion.utils.ImportStrategyDetector
import org.jetbrains.kotlin.idea.fir.HLIndexHelper
-import org.jetbrains.kotlin.idea.base.projectStructure.scope.KotlinSourceFilterScope
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.KtFile
val targetPlatform: TargetPlatform,
val indexHelper: HLIndexHelper,
val symbolFromIndexProvider: KtSymbolFromIndexProvider,
+ val importStrategyDetector: ImportStrategyDetector,
val lookupElementFactory: KotlinFirLookupElementFactory = KotlinFirLookupElementFactory(),
) {
val visibleScope = KotlinSourceFilterScope.projectFiles(originalKtFile.resolveScope, project)
val targetPlatform = originalKtFile.platform
val project = originalKtFile.project
val indexHelper = createIndexHelper(parameters)
+
return FirBasicCompletionContext(
parameters,
LookupElementSink(result, firParameters),
targetPlatform,
indexHelper,
KtSymbolFromIndexProvider(project),
+ ImportStrategyDetector(originalKtFile, project),
)
}
import org.jetbrains.kotlin.idea.completion.lookups.CallableInsertionOptions
import org.jetbrains.kotlin.idea.completion.lookups.CallableInsertionStrategy
import org.jetbrains.kotlin.idea.completion.lookups.ImportStrategy
-import org.jetbrains.kotlin.idea.completion.lookups.detectImportStrategy
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext.Companion.createWeighingContext
import org.jetbrains.kotlin.idea.fir.HLIndexHelper
+import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.utils.addIfNotNull
}
protected fun KtAnalysisSession.getOptions(symbol: KtCallableSymbol): CallableInsertionOptions =
- CallableInsertionOptions(detectImportStrategy(symbol), getInsertionStrategy(symbol))
+ CallableInsertionOptions(importStrategyDetector.detectImportStrategy(symbol), getInsertionStrategy(symbol))
private fun KtAnalysisSession.getExtensionOptions(
symbol: KtCallableSymbol,
applicability: KtExtensionApplicabilityResult
): CallableInsertionOptions? =
- getInsertionStrategyForExtensionFunction(symbol, applicability)?.let { CallableInsertionOptions(detectImportStrategy(symbol), it) }
+ getInsertionStrategyForExtensionFunction(symbol, applicability)?.let { CallableInsertionOptions(importStrategyDetector.detectImportStrategy(symbol), it) }
protected open fun KtAnalysisSession.filter(symbol: KtCallableSymbol): Boolean = true
// Here we can't rely on deduplication in LookupElementSink because extension members can have types substituted, which won't be
// equal to the same symbols from top level without substitution.
- val extensionMembers = mutableSetOf<KtCallableSymbol>()
+ val extensionMembers = mutableSetOf<CallableId>()
extensionNonMembers.forEach { (symbol, applicabilityResult) ->
getExtensionOptions(symbol, applicabilityResult)?.let {
- extensionMembers += symbol
+ symbol.callableIdIfNonLocal?.let(extensionMembers::add)
addCallableSymbolToCompletion(
context,
symbol,
}
collectTopLevelExtensionsFromIndices(listOf(typeOfPossibleReceiver), extensionChecker, visibilityChecker)
- .filter { it !in extensionMembers && filter(it) }
+ .filter { it.callableIdIfNonLocal !in extensionMembers && filter(it) }
.forEach { addCallableSymbolToCompletion(context, it, getOptions(it), explicitReceiverTypeHint = explicitReceiverTypeHint) }
}
import org.jetbrains.kotlin.idea.completion.contributors.helpers.FirClassifierProvider.getAvailableClassifiersFromIndex
import org.jetbrains.kotlin.idea.completion.contributors.helpers.getStaticScope
import org.jetbrains.kotlin.idea.completion.lookups.ImportStrategy
-import org.jetbrains.kotlin.idea.completion.lookups.detectImportStrategy
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext.Companion.createWeighingContext
import org.jetbrains.kotlin.psi.KtExpression
protected open fun KtAnalysisSession.filterClassifiers(classifierSymbol: KtClassifierSymbol): Boolean = true
protected open fun KtAnalysisSession.getImportingStrategy(classifierSymbol: KtClassifierSymbol): ImportStrategy =
- detectImportStrategy(classifierSymbol)
+ importStrategyDetector.detectImportStrategy(classifierSymbol)
override fun KtAnalysisSession.complete(positionContext: FirNameReferencePositionContext) {
val visibilityChecker = CompletionVisibilityChecker.create(basicContext, positionContext)
package org.jetbrains.kotlin.idea.completion.contributors
import com.intellij.codeInsight.completion.CompletionParameters
-import com.intellij.codeInsight.completion.InsertionContext
import com.intellij.codeInsight.completion.PrefixMatcher
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementDecorator
import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtNamedSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.markers.KtPossibleMemberSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.idea.base.analysis.api.utils.KtSymbolFromIndexProvider
+import org.jetbrains.kotlin.idea.base.facet.platform.platform
+import org.jetbrains.kotlin.idea.base.projectStructure.compositeAnalysis.findAnalyzerServices
+import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings
+import org.jetbrains.kotlin.idea.base.utils.fqname.isImported
import org.jetbrains.kotlin.idea.completion.ItemPriority
-import org.jetbrains.kotlin.idea.completion.LookupElementFactory
import org.jetbrains.kotlin.idea.completion.LookupElementSink
import org.jetbrains.kotlin.idea.completion.context.FirBasicCompletionContext
import org.jetbrains.kotlin.idea.completion.context.FirRawPositionCompletionContext
import org.jetbrains.kotlin.idea.completion.contributors.helpers.CallableMetadataProvider.getCallableMetadata
import org.jetbrains.kotlin.idea.completion.lookups.CallableInsertionOptions
import org.jetbrains.kotlin.idea.completion.lookups.ImportStrategy
-import org.jetbrains.kotlin.idea.completion.lookups.detectImportStrategy
import org.jetbrains.kotlin.idea.completion.lookups.factories.KotlinFirLookupElementFactory
import org.jetbrains.kotlin.idea.completion.priority
+import org.jetbrains.kotlin.idea.completion.utils.ImportStrategyDetector
import org.jetbrains.kotlin.idea.completion.weighers.Weighers
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext
import org.jetbrains.kotlin.idea.fir.HLIndexHelper
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.*
+import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
internal class FirCompletionContributorOptions(
protected val indexHelper: HLIndexHelper get() = basicContext.indexHelper
protected val symbolFromIndexProvider: KtSymbolFromIndexProvider get() = basicContext.symbolFromIndexProvider
protected val lookupElementFactory: KotlinFirLookupElementFactory get() = basicContext.lookupElementFactory
+ protected val importStrategyDetector: ImportStrategyDetector get() = basicContext.importStrategyDetector
protected val visibleScope = basicContext.visibleScope
// Don't offer any hidden deprecated items.
if (symbol.deprecationStatus?.deprecationLevel == DeprecationLevelValue.HIDDEN) return
with(lookupElementFactory) {
- createLookupElement(symbol)
+ createLookupElement(symbol, importStrategyDetector)
.let(sink::addElement)
}
}
protected fun KtAnalysisSession.addClassifierSymbolToCompletion(
symbol: KtClassifierSymbol,
context: WeighingContext,
- importingStrategy: ImportStrategy = detectImportStrategy(symbol),
+ importingStrategy: ImportStrategy = importStrategyDetector.detectImportStrategy(symbol),
) {
if (symbol !is KtNamedSymbol) return
// Don't offer any deprecated items that could leads to compile errors.
val lookup = with(lookupElementFactory) {
when (symbol) {
is KtClassLikeSymbol -> createLookupElementForClassLikeSymbol(symbol, importingStrategy)
- is KtTypeParameterSymbol -> createLookupElement(symbol)
+ is KtTypeParameterSymbol -> createLookupElement(symbol, importStrategyDetector)
}
} ?: return
lookup.availableWithoutImport = importingStrategy == ImportStrategy.DoNothing
import org.jetbrains.kotlin.idea.completion.contributors.helpers.collectNonExtensions
import org.jetbrains.kotlin.idea.completion.lookups.CallableInsertionOptions
import org.jetbrains.kotlin.idea.completion.lookups.CallableInsertionStrategy
-import org.jetbrains.kotlin.idea.completion.lookups.detectImportStrategy
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext
import org.jetbrains.kotlin.idea.completion.weighers.WeighingContext.Companion.createWeighingContext
import org.jetbrains.kotlin.name.Name
context,
callableSymbol,
CallableInsertionOptions(
- detectImportStrategy(callableSymbol),
+ importStrategyDetector.detectImportStrategy(callableSymbol),
wrapWithDisambiguationIfNeeded(
getInsertionStrategy(callableSymbol),
superType,
context,
callableSymbol,
CallableInsertionOptions(
- detectImportStrategy(callableSymbol),
+ importStrategyDetector.detectImportStrategy(callableSymbol),
wrapWithDisambiguationIfNeeded(
CallableInsertionStrategy.WithCallArgs(args),
superType,
val memberPointer = memberSymbol.createPointer()
- val baseLookupElement = with(basicContext.lookupElementFactory) { createLookupElement(memberSymbol) }
+ val baseLookupElement = with(basicContext.lookupElementFactory) { createLookupElement(memberSymbol, basicContext.importStrategyDetector) }
?: error("Lookup element should be available for override completion")
return OverridesCompletionLookupElementDecorator(
baseLookupElement,
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
+import org.jetbrains.kotlin.idea.completion.utils.ImportStrategyDetector
internal data class CallableInsertionOptions(
val importingStrategy: ImportStrategy,
copy(insertionStrategy = newInsertionStrategy)
}
-internal fun KtAnalysisSession.detectCallableOptions(symbol: KtCallableSymbol): CallableInsertionOptions = CallableInsertionOptions(
- importingStrategy = detectImportStrategy(symbol),
+internal fun KtAnalysisSession.detectCallableOptions(symbol: KtCallableSymbol, importStrategyDetector: ImportStrategyDetector): CallableInsertionOptions = CallableInsertionOptions(
+ importingStrategy = importStrategyDetector.detectImportStrategy(symbol),
insertionStrategy = when (symbol) {
is KtFunctionSymbol -> CallableInsertionStrategy.AsCall
else -> CallableInsertionStrategy.AsIdentifier
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtPossibleMemberSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
-import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
data class InsertFqNameAndShorten(val fqName: FqName) : ImportStrategy()
}
-internal fun KtAnalysisSession.detectImportStrategy(symbol: KtSymbol): ImportStrategy = when (symbol) {
- is KtCallableSymbol -> detectImportStrategyForCallableSymbol(symbol)
- is KtClassLikeSymbol -> detectImportStrategyForClassLikeSymbol(symbol)
- else -> ImportStrategy.DoNothing
-}
-
-internal fun KtAnalysisSession.detectImportStrategyForCallableSymbol(symbol: KtCallableSymbol): ImportStrategy {
- if (symbol !is KtPossibleMemberSymbol || symbol.symbolKind == KtSymbolKind.CLASS_MEMBER) return ImportStrategy.DoNothing
- val propertyId = symbol.callableIdIfNonLocal?.asSingleFqName() ?: return ImportStrategy.DoNothing
-
- return if (symbol.isExtension) {
- ImportStrategy.AddImport(propertyId)
- } else {
- ImportStrategy.InsertFqNameAndShorten(propertyId)
- }
-}
-
-internal fun KtAnalysisSession.detectImportStrategyForClassLikeSymbol(symbol: KtClassLikeSymbol): ImportStrategy {
- val classId = symbol.classIdIfNonLocal ?: return ImportStrategy.DoNothing
- return ImportStrategy.InsertFqNameAndShorten(classId.asSingleFqName())
-}
internal fun addCallableImportIfRequired(targetFile: KtFile, nameToImport: FqName) {
if (!alreadyHasImport(targetFile, nameToImport)) {
internal class ClassLookupElementFactory {
fun KtAnalysisSession.createLookup(
symbol: KtClassLikeSymbol,
- importingStrategy: ImportStrategy = detectImportStrategy(symbol)
+ importingStrategy: ImportStrategy,
): LookupElementBuilder {
val name = symbol.nameOrAnonymous
return LookupElementBuilder.create(ClassifierLookupObject(name, importingStrategy), name.asString())
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementBuilder
-import org.jetbrains.kotlin.idea.completion.lookups.CallableInsertionOptions
-import org.jetbrains.kotlin.idea.completion.lookups.ImportStrategy
-import org.jetbrains.kotlin.idea.completion.lookups.detectCallableOptions
-import org.jetbrains.kotlin.idea.completion.lookups.detectImportStrategy
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtNamedSymbol
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
+import org.jetbrains.kotlin.idea.completion.lookups.CallableInsertionOptions
+import org.jetbrains.kotlin.idea.completion.lookups.ImportStrategy
+import org.jetbrains.kotlin.idea.completion.lookups.detectCallableOptions
+import org.jetbrains.kotlin.idea.completion.utils.ImportStrategyDetector
import org.jetbrains.kotlin.name.FqName
+import java.net.UnknownHostException
internal class KotlinFirLookupElementFactory {
private val classLookupElementFactory = ClassLookupElementFactory()
private val typeParameterLookupElementFactory = TypeParameterLookupElementFactory()
private val packagePartLookupElementFactory = PackagePartLookupElementFactory()
- fun KtAnalysisSession.createLookupElement(symbol: KtNamedSymbol, substitutor: KtSubstitutor = KtSubstitutor.Empty(token)): LookupElement {
+ fun KtAnalysisSession.createLookupElement(
+ symbol: KtNamedSymbol,
+ importStrategyDetector: ImportStrategyDetector,
+ importingStrategy: ImportStrategy? = null,
+ substitutor: KtSubstitutor = KtSubstitutor.Empty(token)
+ ): LookupElement {
return when (symbol) {
is KtCallableSymbol -> createCallableLookupElement(
symbol,
- detectCallableOptions(symbol),
+ detectCallableOptions(symbol, importStrategyDetector),
substitutor,
)
- is KtClassLikeSymbol -> with(classLookupElementFactory) { createLookup(symbol) }
+
+ is KtClassLikeSymbol -> with(classLookupElementFactory) { createLookup(symbol, importingStrategy ?: importStrategyDetector.detectImportStrategy(symbol)) }
is KtTypeParameterSymbol -> with(typeParameterLookupElementFactory) { createLookup(symbol) }
else -> throw IllegalArgumentException("Cannot create a lookup element for $symbol")
}
fun KtAnalysisSession.createLookupElementForClassLikeSymbol(
symbol: KtClassLikeSymbol,
- importingStrategy: ImportStrategy = detectImportStrategy(symbol)
+ importingStrategy: ImportStrategy,
): LookupElement? {
if (symbol !is KtNamedSymbol) return null
return with(classLookupElementFactory) { createLookup(symbol, importingStrategy) }
--- /dev/null
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.completion.utils
+
+import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
+import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
+import org.jetbrains.kotlin.idea.base.facet.platform.platform
+import org.jetbrains.kotlin.idea.base.projectStructure.compositeAnalysis.findAnalyzerServices
+import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings
+import org.jetbrains.kotlin.idea.base.utils.fqname.isImported
+import org.jetbrains.kotlin.idea.completion.lookups.ImportStrategy
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.psi.KtFile
+import org.jetbrains.kotlin.resolve.ImportPath
+
+internal class ImportStrategyDetector(originalKtFile: KtFile, project: Project) {
+ private val analyzerServices = originalKtFile.platform.findAnalyzerServices(project)
+ private val defaultImports = analyzerServices
+ .getDefaultImports(originalKtFile.languageVersionSettings, includeLowPriorityImports = true).toSet()
+
+ private val excludedImports = analyzerServices.excludedImports
+
+ context (KtAnalysisSession)
+ internal fun detectImportStrategy(symbol: KtSymbol): ImportStrategy = when (symbol) {
+ is KtCallableSymbol -> detectImportStrategyForCallableSymbol(symbol)
+ is KtClassLikeSymbol -> detectImportStrategyForClassLikeSymbol(symbol)
+ else -> ImportStrategy.DoNothing
+ }
+
+ context(KtAnalysisSession)
+ private fun detectImportStrategyForCallableSymbol(symbol: KtCallableSymbol): ImportStrategy {
+ if (symbol.symbolKind == KtSymbolKind.CLASS_MEMBER) return ImportStrategy.DoNothing
+
+ val callableId = symbol.callableIdIfNonLocal?.asSingleFqName() ?: return ImportStrategy.DoNothing
+ if (callableId.isAlreadyImported()) return ImportStrategy.DoNothing
+
+ return if (symbol.isExtension) {
+ ImportStrategy.AddImport(callableId)
+ } else {
+ ImportStrategy.InsertFqNameAndShorten(callableId)
+ }
+ }
+
+ context (KtAnalysisSession)
+ private fun detectImportStrategyForClassLikeSymbol(symbol: KtClassLikeSymbol): ImportStrategy {
+ val classId = symbol.classIdIfNonLocal?.asSingleFqName() ?: return ImportStrategy.DoNothing
+ if (classId.isAlreadyImported()) return ImportStrategy.DoNothing
+ return ImportStrategy.InsertFqNameAndShorten(classId)
+ }
+
+ private fun FqName.isAlreadyImported(): Boolean {
+ val importPath = ImportPath(this, isAllUnder = false)
+ return importPath.isImported(defaultImports, excludedImports)
+ }
+}
\ No newline at end of file
-// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.fir.codeInsight
import org.jetbrains.kotlin.idea.core.overrideImplement.KtClassMember
import org.jetbrains.kotlin.idea.fir.invalidateCaches
import org.jetbrains.kotlin.idea.test.runAll
-import org.jetbrains.kotlin.psi.KtFile
import org.junit.internal.runners.JUnit38ClassRunner
import org.junit.runner.RunWith
-import java.io.File
@Suppress("RedundantOverride") // overrides are for easier test debugging
@RunWith(JUnit38ClassRunner::class)
super.testUnresolvedType()
}
+ override fun testUnresolvedType2() {
+ super.testUnresolvedType()
+ }
+
override fun testImplementFromClassName() {
super.testImplementFromClassName()
}
import com.intellij.codeInsight.completion.CompletionType
import com.intellij.testFramework.LightProjectDescriptor
+import com.intellij.testFramework.common.runAll
import org.jetbrains.kotlin.idea.completion.test.KotlinFixtureCompletionBaseTestCase
+import org.jetbrains.kotlin.idea.fir.invalidateCaches
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
override val captureExceptions: Boolean = false
+ override fun tearDown() {
+ runAll(
+ { project.invalidateCaches() },
+ { super.tearDown() },
+ )
+ }
+
override fun executeTest(test: () -> Unit) {
IgnoreTests.runTestIfEnabledByFileDirective(dataFile().toPath(), IgnoreTests.DIRECTIVES.FIR_COMPARISON) {
test()
package org.jetbrains.kotlin.idea.fir.completion.test.handlers
+import com.intellij.testFramework.common.runAll
import org.jetbrains.kotlin.idea.completion.test.handlers.AbstractKeywordCompletionHandlerTest
+import org.jetbrains.kotlin.idea.fir.invalidateCaches
import org.jetbrains.kotlin.test.utils.IgnoreTests
import org.jetbrains.kotlin.test.utils.withExtension
import java.io.File
override fun handleTestPath(path: String): File =
IgnoreTests.getFirTestFileIfFirPassing(File(path), IgnoreTests.DIRECTIVES.FIR_COMPARISON, ".after")
+ override fun tearDown() {
+ runAll(
+ { project.invalidateCaches() },
+ { super.tearDown() },
+ )
+ }
+
override fun doTest(testPath: String) {
IgnoreTests.runTestIfEnabledByFileDirective(dataFilePath(), IgnoreTests.DIRECTIVES.FIR_COMPARISON, ".after") {
super.doTest(testPath)
package org.jetbrains.kotlin.idea.fir.completion.test.handlers
+import com.intellij.testFramework.common.runAll
import org.jetbrains.kotlin.idea.completion.test.handlers.AbstractBasicCompletionHandlerTest
+import org.jetbrains.kotlin.idea.fir.invalidateCaches
import org.jetbrains.kotlin.test.utils.IgnoreTests
import org.jetbrains.kotlin.test.utils.withExtension
import java.io.File
override fun isFirPlugin(): Boolean = true
+ override fun tearDown() {
+ runAll(
+ { project.invalidateCaches() },
+ { super.tearDown() },
+ )
+ }
+
override fun handleTestPath(path: String): File =
IgnoreTests.getFirTestFileIfFirPassing(File(path), IgnoreTests.DIRECTIVES.FIR_COMPARISON, ".after")
KotlinTestUtils.runTest(this::doTestWithExtraFile, this, testDataFilePath);
}
- @TestMetadata("checkArgumentTypes.test")
- public void testCheckArgumentTypes() throws Exception {
- runTest("../idea/tests/testData/quickfix/autoImports/mismatchingArgs/checkArgumentTypes.test");
- }
-
@TestMetadata("constantExpectedTypeMismatch.test")
public void testConstantExpectedTypeMismatch() throws Exception {
runTest("../idea/tests/testData/quickfix/autoImports/mismatchingArgs/constantExpectedTypeMismatch.test");
runTest("../idea/tests/testData/quickfix/autoImports/mismatchingArgs/ignoreErrorsOutsideCall.test");
}
- @TestMetadata("lambdaArgument.test")
- public void testLambdaArgument() throws Exception {
- runTest("../idea/tests/testData/quickfix/autoImports/mismatchingArgs/lambdaArgument.test");
- }
-
@TestMetadata("namedArgument.test")
public void testNamedArgument() throws Exception {
runTest("../idea/tests/testData/quickfix/autoImports/mismatchingArgs/namedArgument.test");
-FirLightClassForSymbol: A
-FirLightClassForSymbol: B
-FirLightClassForSymbol: C
\ No newline at end of file
+SymbolLightClass: A
+SymbolLightClass: B
+SymbolLightClass: C
\ No newline at end of file
-FirLightClassForSymbol: Y
-FirLightClassForSymbol: Z
\ No newline at end of file
+SymbolLightClass: Y
+SymbolLightClass: Z
\ No newline at end of file
-FirLightClassForSymbol: B
+SymbolLightClass: B
\ No newline at end of file
-FirLightClassForSymbol: B
-FirLightInterfaceClassSymbol: I2
-FirLightInterfaceClassSymbol: I3
\ No newline at end of file
+SymbolLightClass: B
+SymbolLightInterfaceClass: I2
+SymbolLightInterfaceClass: I3
\ No newline at end of file
-FirLightClassForSymbol: B
\ No newline at end of file
+SymbolLightClass: B
\ No newline at end of file
-FirLightClassForSymbol: B
+SymbolLightClass: B
-FirLightSimpleMethodForSymbol: foo
\ No newline at end of file
+SymbolLightSimpleMethod: foo
\ No newline at end of file
-FirLightSimpleMethodForSymbol: B.foo
+SymbolLightSimpleMethod: B.foo
-FirLightSimpleMethodForSymbol: B.foo
+SymbolLightSimpleMethod: B.foo
\ No newline at end of file
noInline = Random.nextBoolean()
skipMetadataVersionCheck = Random.nextBoolean()
skipPrereleaseCheck = Random.nextBoolean()
- newInference = Random.nextBoolean()
allowKotlinPackage = Random.nextBoolean()
reportOutputFiles = Random.nextBoolean()
multiPlatform = Random.nextBoolean()
"noInline",
"skipMetadataVersionCheck",
"skipPrereleaseCheck",
- "newInference",
"allowKotlinPackage",
"reportOutputFiles",
"multiPlatform",
class TestBucket : HierarchicalStructureByDefaultImportAndHighlightingTest() {
@Test
- @PluginTargetVersions(pluginVersion = "1.8.0+")
+ @PluginTargetVersions(pluginVersion = "1.7.20-rc+")
fun testCommonKlibHighlighting() {
configureByFiles()
importProject()
if (!resolutionResults.isSuccess) return false
val generatingAdditionalSamCandidateIsDisabled =
- parentCall.languageVersionSettings.supportsFeature(LanguageFeature.SamConversionPerArgument) ||
- parentCall.languageVersionSettings.supportsFeature(LanguageFeature.ProhibitVarargAsArrayAfterSamArgument)
+ parentCall.languageVersionSettings.supportsFeature(LanguageFeature.ProhibitVarargAsArrayAfterSamArgument)
val samAdapterOriginalDescriptor =
if (generatingAdditionalSamCandidateIsDisabled && resolutionResults.resultingCall is NewResolvedCallImpl<*>) {
arg.toCallExpression()?.takeIf { call -> samConversionIsPossible(arg, call) }
}
- val haveToConvertAllArguments = !functionCall.languageVersionSettings.supportsFeature(LanguageFeature.SamConversionPerArgument)
-
- val argumentsThatCanBeConverted = if (haveToConvertAllArguments) {
- argumentsWithSamConstructors.takeIf { it.values.none(::containsLabeledReturnPreventingConversion) }.orEmpty()
- } else {
- argumentsWithSamConstructors.filterValues { !containsLabeledReturnPreventingConversion(it) }
- }
+ val argumentsThatCanBeConverted = argumentsWithSamConstructors.filterValues { !containsLabeledReturnPreventingConversion(it) }
return when {
argumentsThatCanBeConverted.isEmpty() -> emptyList()
if (noBoundReferences && descriptorHasReceiver && explicitReceiver == null) return false
val callableArgumentsCount = (callableExpression as? KtCallExpression)?.valueArguments?.size ?: 0
- val enableFunctionReferenceWithDefaultValueAsOtherType =
- languageVersionSettings.supportsFeature(LanguageFeature.FunctionReferenceWithDefaultValueAsOtherType)
- if (enableFunctionReferenceWithDefaultValueAsOtherType) {
- if (calleeDescriptor.valueParameters.size != callableArgumentsCount &&
- (lambdaExpression.parentValueArgument() == null || calleeDescriptor.valueParameters.none { it.declaresDefaultValue() })
- ) return false
- } else {
- if (calleeDescriptor.valueParameters.size != callableArgumentsCount) return false
- val lambdaMustReturnUnit =
- if (lambdaParameterType?.isFunctionType == true) lambdaParameterType.getReturnTypeFromFunctionType().isUnit() else false
- if (lambdaMustReturnUnit) {
- calleeDescriptor.returnType.let {
- // If Unit required, no references to non-Unit callables
- if (it == null || !it.isUnit()) return false
- }
- }
- }
+ if (calleeDescriptor.valueParameters.size != callableArgumentsCount &&
+ (lambdaExpression.parentValueArgument() == null || calleeDescriptor.valueParameters.none { it.declaresDefaultValue() })
+ ) return false
if (!lambdaExpression.isArgument() && calleeDescriptor is FunctionDescriptor && calleeDescriptor.overloadedFunctions().size > 1) {
val property = lambdaExpression.getStrictParentOfType<KtProperty>()
if (lambdaValueParameterDescriptors.size < explicitReceiverShift + callableExpression.valueArguments.size) return false
val resolvedCall = callableExpression.getResolvedCall(context) ?: return false
resolvedCall.valueArguments.entries.forEach { (valueParameter, resolvedArgument) ->
- if (resolvedArgument is DefaultValueArgument && enableFunctionReferenceWithDefaultValueAsOtherType) return@forEach
+ if (resolvedArgument is DefaultValueArgument) return@forEach
val argument = resolvedArgument.arguments.singleOrNull() ?: return false
if (resolvedArgument is VarargValueArgument && argument.getSpreadElement() == null) return false
val argumentExpression = argument.getArgumentExpression() as? KtNameReferenceExpression ?: return false
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
+import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.bindingContextUtil.getTargetFunctionDescriptor
import org.jetbrains.kotlin.resolve.calls.util.getParameterForArgument
fun convertLambdaToFunction(
lambda: KtLambdaExpression,
functionDescriptor: FunctionDescriptor,
+ typeSourceCode: DescriptorRenderer = IdeDescriptorRenderers.SOURCE_CODE_TYPES,
functionName: String = "",
functionParameterName: (ValueParameterDescriptor, Int) -> String = { parameter, _ ->
val parameterName = parameter.name
typeParameters: Map<TypeConstructor, KotlinType> = emptyMap(),
replaceElement: (KtNamedFunction) -> KtExpression = { lambda.replaced(it) }
): KtExpression? {
- val typeSourceCode = IdeDescriptorRenderers.SOURCE_CODE_TYPES
val functionLiteral = lambda.functionLiteral
val bodyExpression = functionLiteral.bodyExpression ?: return null