Presentation for extension property to include receiver type

This commit is contained in:
Valentin Kipyatkov
2015-11-10 14:50:48 +03:00
parent 6a52cc76d0
commit f391d194de
39 changed files with 97 additions and 179 deletions
+6 -4
View File
@@ -464,16 +464,18 @@
<runLineMarkerContributor language="kotlin" implementationClass="org.jetbrains.kotlin.idea.highlighter.KotlinTestRunLineMarkerContributor"/>
<iconProvider implementation="org.jetbrains.kotlin.idea.KotlinIconProvider"/>
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtFunctionPresenter"
forClass="org.jetbrains.kotlin.psi.KtFunction"/>
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtClassPresenter"
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtDefaultDeclarationPresenter"
forClass="org.jetbrains.kotlin.psi.KtClass"/>
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtObjectPresenter"
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtDefaultDeclarationPresenter"
forClass="org.jetbrains.kotlin.psi.KtObjectDeclaration"/>
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtPropertyPresenter"
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtDefaultDeclarationPresenter"
forClass="org.jetbrains.kotlin.psi.KtProperty"/>
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtParameterPresenter"
<itemPresentationProvider implementationClass="org.jetbrains.kotlin.idea.presentation.KtDefaultDeclarationPresenter"
forClass="org.jetbrains.kotlin.psi.KtParameter"/>
<gotoTargetRendererProvider id="JetGotoTargetRenderProvider" implementation="org.jetbrains.kotlin.idea.KotlinGotoTargetRenderProvider"
order="first"/>
<elementDescriptionProvider implementation="org.jetbrains.kotlin.idea.findUsages.KotlinElementDescriptionProvider" order="first"/>
@@ -17,10 +17,12 @@
package org.jetbrains.kotlin.idea.presentation
import com.intellij.navigation.ColoredItemPresentation
import com.intellij.navigation.ItemPresentationProvider
import com.intellij.openapi.editor.colors.CodeInsightColors
import com.intellij.openapi.editor.colors.TextAttributesKey
import com.intellij.openapi.util.Iconable
import org.jetbrains.kotlin.idea.KotlinIconProvider
import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtPsiUtil
@@ -37,9 +39,22 @@ open class KotlinDefaultNamedDeclarationPresentation(private val declaration: Kt
override fun getLocationString(): String? {
val name = declaration.fqName ?: return null
return "(" + name.parent().asString() + ")"
val receiverTypeRef = (declaration as? KtCallableDeclaration)?.receiverTypeReference
if (receiverTypeRef != null) {
return "(for " + receiverTypeRef.text + " in " + name.parent() + ")"
}
else if (declaration.parent is KtFile) {
return "(" + name.parent() + ")"
}
else {
return "(in " + name.parent() + ")"
}
}
override fun getIcon(unused: Boolean)
= KotlinIconProvider.INSTANCE.getIcon(declaration, Iconable.ICON_FLAG_VISIBILITY or Iconable.ICON_FLAG_READ_STATUS)
}
class KtDefaultDeclarationPresenter : ItemPresentationProvider<KtNamedDeclaration> {
override fun getPresentation(item: KtNamedDeclaration) = KotlinDefaultNamedDeclarationPresentation(item)
}
@@ -1,24 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.presentation
import com.intellij.navigation.ItemPresentationProvider
import org.jetbrains.kotlin.psi.KtClass
class KtClassPresenter : ItemPresentationProvider<KtClass> {
override fun getPresentation(item: KtClass) = KotlinDefaultNamedDeclarationPresentation(item)
}
@@ -43,10 +43,7 @@ class KtFunctionPresenter : ItemPresentationProvider<KtFunction> {
return "(in $name)"
}
val name = function.fqName ?: return null
val receiverTypeRef = function.receiverTypeReference
val extensionLocation = if (receiverTypeRef != null) "for " + receiverTypeRef.text + " " else ""
return "(${extensionLocation}in ${name.parent()})"
return super.getLocationString()
}
}
}
@@ -1,24 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.presentation
import com.intellij.navigation.ItemPresentationProvider
import org.jetbrains.kotlin.psi.KtObjectDeclaration
class KtObjectPresenter : ItemPresentationProvider<KtObjectDeclaration> {
override fun getPresentation(item: KtObjectDeclaration) = KotlinDefaultNamedDeclarationPresentation(item)
}
@@ -1,24 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.presentation
import com.intellij.navigation.ItemPresentationProvider
import org.jetbrains.kotlin.psi.KtParameter
class KtParameterPresenter : ItemPresentationProvider<KtParameter> {
override fun getPresentation(item: KtParameter) = KotlinDefaultNamedDeclarationPresentation(item)
}
@@ -1,24 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.presentation
import com.intellij.navigation.ItemPresentationProvider
import org.jetbrains.kotlin.psi.KtProperty
class KtPropertyPresenter : ItemPresentationProvider<KtProperty> {
override fun getPresentation(item: KtProperty) = KotlinDefaultNamedDeclarationPresentation(item)
}
+1 -1
View File
@@ -5,4 +5,4 @@ fun foo() {}
fun bar() {}
// REF: (in <root>).bar()
// REF: (<root>).bar()
+4 -4
View File
@@ -15,7 +15,7 @@ class InClassObject {
}
// SEARCH_TEXT: ClassObject
// REF: (test.InClassObject.Companion).ClassObjectClass
// REF: (test.InClassObject.Companion).ClassObjectObject
// REF: (test.InClassObject.Companion).ClassObjectTrait
// REF: (test.InClassObject.Companion).ClassObjectTraitWithImpl
// REF: (in test.InClassObject.Companion).ClassObjectClass
// REF: (in test.InClassObject.Companion).ClassObjectObject
// REF: (in test.InClassObject.Companion).ClassObjectTrait
// REF: (in test.InClassObject.Companion).ClassObjectTraitWithImpl
+1 -1
View File
@@ -7,4 +7,4 @@ class A {
}
// SEARCH_TEXT: Inner
// REF: (small.A).InnerA
// REF: (in small.A).InnerA
+1 -1
View File
@@ -6,7 +6,7 @@ class Some {
}
// SEARCH_TEXT: test
// REF: (in <root>).testFunction()
// REF: (<root>).testFunction()
// REF: (in Some).testFunInClass()
+3 -3
View File
@@ -18,6 +18,6 @@ class Some() {
// SEARCH_TEXT: test
// REF: (<root>).testGlobal
// REF: (Some).testInClass
// REF: (Some.Companion).testInClassObject
// REF: (SomeTrait).testInTrait
// REF: (in Some).testInClass
// REF: (in Some.Companion).testInClassObject
// REF: (in SomeTrait).testInTrait
+1 -1
View File
@@ -1,4 +1,4 @@
// RUNTIME_WITH_SOURCES
// CHECK_BOX
// SEARCH_TEXT: arrayListOf
// REF: (in kotlin).arrayListOf(T)
// REF: (kotlin).arrayListOf(T)
@@ -1,4 +1,4 @@
// RUNTIME
// CHECK_BOX
// SEARCH_TEXT: arrayListOf
// REF: (in kotlin).arrayListOf(T)
// REF: (kotlin).arrayListOf(T)
+22 -22
View File
@@ -1,25 +1,25 @@
// RUNTIME_WITH_SOURCES
// CHECK_BOX
// SEARCH_TEXT: joinToString
// REF: (for Array<out T> in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((T) -> CharSequence)?)
// REF: (for Array<out T> in kotlin).joinToString(String,String,String,Int,String,((T) -> String)?)
// REF: (for BooleanArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Boolean) -> CharSequence)?)
// REF: (for BooleanArray in kotlin).joinToString(String,String,String,Int,String,((Boolean) -> String)?)
// REF: (for ByteArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Byte) -> CharSequence)?)
// REF: (for ByteArray in kotlin).joinToString(String,String,String,Int,String,((Byte) -> String)?)
// REF: (for CharArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Char) -> CharSequence)?)
// REF: (for CharArray in kotlin).joinToString(String,String,String,Int,String,((Char) -> String)?)
// REF: (for DoubleArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Double) -> CharSequence)?)
// REF: (for DoubleArray in kotlin).joinToString(String,String,String,Int,String,((Double) -> String)?)
// REF: (for FloatArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Float) -> CharSequence)?)
// REF: (for FloatArray in kotlin).joinToString(String,String,String,Int,String,((Float) -> String)?)
// REF: (for IntArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Int) -> CharSequence)?)
// REF: (for IntArray in kotlin).joinToString(String,String,String,Int,String,((Int) -> String)?)
// REF: (for Iterable<T> in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((T) -> CharSequence)?)
// REF: (for Iterable<T> in kotlin).joinToString(String,String,String,Int,String,((T) -> String)?)
// REF: (for LongArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Long) -> CharSequence)?)
// REF: (for LongArray in kotlin).joinToString(String,String,String,Int,String,((Long) -> String)?)
// REF: (for Sequence<T> in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((T) -> CharSequence)?)
// REF: (for Sequence<T> in kotlin).joinToString(String,String,String,Int,String,((T) -> String)?)
// REF: (for ShortArray in kotlin).joinToString(CharSequence,CharSequence,CharSequence,Int,CharSequence,((Short) -> CharSequence)?)
// REF: (for ShortArray in kotlin).joinToString(String,String,String,Int,String,((Short) -> String)?)
// REF: (for Array<out T> in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((T) -> CharSequence)?)
// REF: (for Array<out T> in kotlin).joinToString(String, String, String, Int, String, ((T) -> String)?)
// REF: (for BooleanArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Boolean) -> CharSequence)?)
// REF: (for BooleanArray in kotlin).joinToString(String, String, String, Int, String, ((Boolean) -> String)?)
// REF: (for ByteArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Byte) -> CharSequence)?)
// REF: (for ByteArray in kotlin).joinToString(String, String, String, Int, String, ((Byte) -> String)?)
// REF: (for CharArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Char) -> CharSequence)?)
// REF: (for CharArray in kotlin).joinToString(String, String, String, Int, String, ((Char) -> String)?)
// REF: (for DoubleArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Double) -> CharSequence)?)
// REF: (for DoubleArray in kotlin).joinToString(String, String, String, Int, String, ((Double) -> String)?)
// REF: (for FloatArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Float) -> CharSequence)?)
// REF: (for FloatArray in kotlin).joinToString(String, String, String, Int, String, ((Float) -> String)?)
// REF: (for IntArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Int) -> CharSequence)?)
// REF: (for IntArray in kotlin).joinToString(String, String, String, Int, String, ((Int) -> String)?)
// REF: (for Iterable<T> in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((T) -> CharSequence)?)
// REF: (for Iterable<T> in kotlin).joinToString(String, String, String, Int, String, ((T) -> String)?)
// REF: (for LongArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Long) -> CharSequence)?)
// REF: (for LongArray in kotlin).joinToString(String, String, String, Int, String, ((Long) -> String)?)
// REF: (for Sequence<T> in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((T) -> CharSequence)?)
// REF: (for Sequence<T> in kotlin).joinToString(String, String, String, Int, String, ((T) -> String)?)
// REF: (for ShortArray in kotlin).joinToString(CharSequence, CharSequence, CharSequence, Int, CharSequence, ((Short) -> CharSequence)?)
// REF: (for ShortArray in kotlin).joinToString(String, String, String, Int, String, ((Short) -> String)?)
@@ -8,5 +8,5 @@ class OtherTestInBody(some: Int, other: String): Test(some) {
override var some: Int = some
}
// REF: (testing.OtherTestInConstructor).some
// REF: (testing.OtherTestInBody).some
// REF: (in testing.OtherTestInConstructor).some
// REF: (in testing.OtherTestInBody).some
@@ -12,5 +12,5 @@ enum class <caret>E {
open fun foo(n: Int): Int = n
}
// REF: (E).A
// REF: (E).B
// REF: (in E).A
// REF: (in E).B
@@ -43,11 +43,11 @@ class NoOverride: Foo<String, Any, String>() {
override fun bar(t: Any, u: String): String = ""
}
// REF: "(in AllTypes).bar(Int,Double)"
// REF: "(in NoPrimitives).bar(String,Any)"
// REF: "(in ParameterStillGeneric).bar(Int,Z)"
// REF: "(in ReturnStillGeneric).bar(Int,Int)"
// REF: "(in ReturnType).bar(Any,String)"
// REF: "(in SomeParameters).bar(Double,Any)"
// REF: "(in ThroughProxyAllGenericsImpl).bar(Double,Int)"
// REF: "(in ThroughProxySomeGenericsImpl).bar(Double,Int)"
// REF: "(in AllTypes).bar(Int, Double)"
// REF: "(in NoPrimitives).bar(String, Any)"
// REF: "(in ParameterStillGeneric).bar(Int, Z)"
// REF: "(in ReturnStillGeneric).bar(Int, Int)"
// REF: "(in ReturnType).bar(Any, String)"
// REF: "(in SomeParameters).bar(Double, Any)"
// REF: "(in ThroughProxyAllGenericsImpl).bar(Double, Int)"
// REF: "(in ThroughProxySomeGenericsImpl).bar(Double, Int)"
@@ -13,5 +13,5 @@ class SubSubBase: SubBase() {
}
// REF: (testing.SubBase).test
// REF: (testing.SubSubBase).test
// REF: (in testing.SubBase).test
// REF: (in testing.SubSubBase).test
@@ -2,4 +2,4 @@
public class Class {
}
// REF: (k.KAnno).d
// REF: (in k.KAnno).d
@@ -4,4 +4,4 @@ public class AutoGeneratedOverloads {
}
}
// REF: (in k).withJvmOverloads(Int,Boolean,String)
// REF: (k).withJvmOverloads(Int, Boolean, String)
@@ -6,4 +6,4 @@ public class ClassObjectField {
}
}
// REF: (k.StaticFieldInClassObjectInTrait.Companion).XX
// REF: (in k.StaticFieldInClassObjectInTrait.Companion).XX
+1 -1
View File
@@ -4,4 +4,4 @@ public class EnumEntry {
}
}
// REF: (k.EnumClass).ENTRY
// REF: (in k.EnumClass).ENTRY
+1 -1
View File
@@ -4,4 +4,4 @@ public class Getter {
}
}
// REF: (k.Class).prop
// REF: (in k.Class).prop
+1 -1
View File
@@ -5,4 +5,4 @@ val tl = <caret>topLevel()
// CONTEXT: return <ref-caret>local()
// WITH_LIBRARY: /resolve/referenceInLib/inLibrarySource
// REF: .local()
// REF: local()
@@ -9,5 +9,5 @@ class B {
}
// MULTIRESOLVE
// REF: (for T in dependency).getValue(R,kotlin.reflect.KProperty<*>)
// REF: (for T in dependency).setValue(R,kotlin.reflect.KProperty<*>,kotlin.Int)
// REF: (for T in dependency).getValue(R, kotlin.reflect.KProperty<*>)
// REF: (for T in dependency).setValue(R, kotlin.reflect.KProperty<*>, kotlin.Int)
@@ -4,4 +4,4 @@ import dependency.*
val a: Outer.<caret>Inner? = null
// REF: (dependency.Outer).Inner
// REF: (in dependency.Outer).Inner
@@ -4,4 +4,4 @@ import dependency.*
val a: Outer.<caret>Nested? = null
// REF: (dependency.Outer).Nested
// REF: (in dependency.Outer).Nested
@@ -6,4 +6,4 @@ fun foo(a: List<Int>) {
a[<caret>"bar"] = 3
}
// REF: (for kotlin.List<T> in dependency).set(kotlin.String,T)
// REF: (for kotlin.List<T> in dependency).set(kotlin.String, T)
+1 -1
View File
@@ -2,4 +2,4 @@
package foo
// REF: (in kotlin.Deprecated).Deprecated(kotlin.String,kotlin.ReplaceWith,kotlin.DeprecationLevel)
// REF: (in kotlin.Deprecated).Deprecated(kotlin.String, kotlin.ReplaceWith, kotlin.DeprecationLevel)
@@ -4,4 +4,4 @@ package foo
import kotlin.Deprecated as D
// REF: (in kotlin.Deprecated).Deprecated(kotlin.String,kotlin.ReplaceWith,kotlin.DeprecationLevel)
// REF: (in kotlin.Deprecated).Deprecated(kotlin.String, kotlin.ReplaceWith, kotlin.DeprecationLevel)
@@ -4,5 +4,5 @@ class Foo
fun Foo.getValue(_this: Any?, p: Any?): Int = 1
// REF: (for Foo in <root>).getValue(Any?,Any?)
// REF: (for Foo in <root>).getValue(Any?, Any?)
@@ -4,5 +4,5 @@ class Foo {
fun getValue(_this: Any?, p: Any?): Int = 1
}
// REF: (in Foo).getValue(Any?,Any?)
// REF: (in Foo).getValue(Any?, Any?)
@@ -15,6 +15,6 @@ interface Zoo {
class Baz: Foo, Bar, Zoo
// MULTIRESOLVE
// REF: (in Bar).getValue(Any?,Any?)
// REF: (in Foo).getValue(Any?,Any?)
// REF: (in Zoo).setValue(Any?,Any?,Any?)
// REF: (in Bar).getValue(Any?, Any?)
// REF: (in Foo).getValue(Any?, Any?)
// REF: (in Zoo).setValue(Any?, Any?, Any?)
@@ -6,4 +6,4 @@ interface Foo {
class Baz: Foo
// REF: (in Foo).getValue(Any?,Any?)
// REF: (in Foo).getValue(Any?, Any?)
@@ -7,7 +7,7 @@ fun Foo.setValue(_this: Any?, p: Any?, val: Any?) {}
fun Foo.propertyDelegated(p: Any?) {}
// MULTIRESOLVE
// REF: (for Foo in <root>).getValue(Any?,Any?)
// REF: (for Foo in <root>).setValue(Any?,Any?,Any?)
// REF: (for Foo in <root>).getValue(Any?, Any?)
// REF: (for Foo in <root>).setValue(Any?, Any?, Any?)
// REF: (for Foo in <root>).propertyDelegated(Any?)
@@ -7,7 +7,7 @@ class Foo {
}
// MULTIRESOLVE
// REF: (in Foo).getValue(Any?,Any?)
// REF: (in Foo).setValue(Any?,Any?,Any?)
// REF: (in Foo).getValue(Any?, Any?)
// REF: (in Foo).setValue(Any?, Any?, Any?)
// REF: (in Foo).propertyDelegated(Any?)
@@ -1,3 +1,3 @@
val x: Int <caret>by lazy {1}
// REF: (for kotlin.Lazy<T> in kotlin).getValue(kotlin.Any?,kotlin.reflect.KProperty<*>)
// REF: (for kotlin.Lazy<T> in kotlin).getValue(kotlin.Any?, kotlin.reflect.KProperty<*>)
@@ -3,5 +3,5 @@ import kotlin.properties.Delegates
var x: Int <caret>by Delegates.notNull()
// MULTIRESOLVE
// REF: (in kotlin.properties.ReadWriteProperty).getValue(R,kotlin.reflect.KProperty<*>)
// REF: (in kotlin.properties.ReadWriteProperty).setValue(R,kotlin.reflect.KProperty<*>,T)
// REF: (in kotlin.properties.ReadWriteProperty).getValue(R, kotlin.reflect.KProperty<*>)
// REF: (in kotlin.properties.ReadWriteProperty).setValue(R, kotlin.reflect.KProperty<*>, T)