diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index 94215905798..ce976cadba5 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -256,6 +256,7 @@ usageType.extension.receiver.type = Extension receiver type usageType.super.type.qualifier = Super type qualifier usageType.receiver = Receiver usageType.selector = Selector +usageType.delegate = Delegate x.in.y={0} in {1} x.implements.y={0} in {1} implements {2} in {3}. diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt b/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt index 4934e57adde..b37be1d6641 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/JetUsageTypeProvider.kt @@ -112,6 +112,10 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx { } fun getVariableUsageType(): UsageType? { + if (element.getParentByTypeAndBranch(javaClass()) { getDelegateExpression() } != null) { + return JetUsageTypes.DELEGATE + } + val dotQualifiedExpression = element.getParentByType(javaClass()) return if (dotQualifiedExpression != null) { @@ -143,6 +147,9 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx { fun getFunctionUsageType(descriptor: FunctionDescriptor): UsageType? { return when { + element.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> + JetUsageTypes.SUPER_TYPE + descriptor is ConstructorDescriptor && element.getParentByTypeAndBranch(javaClass()) { getTypeReference() } != null -> JetUsageTypes.ANNOTATION_TYPE @@ -178,6 +185,7 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx { } object JetUsageTypes { + // types val ANNOTATION_TYPE = UsageType(JetBundle.message("usageType.annotation.type")) val TYPE_CONSTRAINT = UsageType(JetBundle.message("usageType.type.constraint")) val TYPE_ARGUMENT = UsageType(JetBundle.message("usageType.type.argument")) @@ -192,10 +200,17 @@ object JetUsageTypes { val CLASS_OBJECT_ACCESS = UsageType(JetBundle.message("usageType.class.object")) val EXTENSION_RECEIVER_TYPE = UsageType(JetBundle.message("usageType.extension.receiver.type")) val SUPER_TYPE_QUALIFIER = UsageType(JetBundle.message("usageType.super.type.qualifier")) + + // functions val INSTANTIATION = UsageType(JetBundle.message("usageType.instantiation")) val FUNCTION_CALL = UsageType(JetBundle.message("usageType.function.call")) + + // values val RECEIVER = UsageType(JetBundle.message("usageType.receiver")) val SELECTOR = UsageType(JetBundle.message("usageType.selector")) + val DELEGATE = UsageType(JetBundle.message("usageType.delegate")) + + // common usage types val IMPORT_DIRECTIVE = UsageType(JetBundle.message("usageType.import")) val CALLABLE_REFERENCE = UsageType(JetBundle.message("usageType.callable.reference")) } \ No newline at end of file diff --git a/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.1.kt b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.1.kt index 49d6d15a4ec..de27808debe 100644 --- a/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.1.kt +++ b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.1.kt @@ -19,6 +19,10 @@ class Client(name: String = Server.NAME): Server() { super.work() println("Client") } + + class object: Server() { + + } } object ClientObject: Server() { diff --git a/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.results.txt b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.results.txt index 52cabd4e262..b2e18ef7ada 100644 --- a/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.results.txt +++ b/idea/testData/findUsages/findClassUsages/kotlinClassAllUsages.results.txt @@ -1,15 +1,16 @@ Class/object property type (6: 21) var nextServer: Server? = new Server() Function return types (14: 26) fun getNextServer(): Server? { -Function return types (36: 21) fun Any.asServer(): Server? { +Function return types (40: 21) fun Any.asServer(): Server? { Import directive (3: 15) import server.Server Local variable type (10: 21) val server: Server = s -Nested class/object (28: 28) fun Client.bar(s: Server = Server.NAME) { +Nested class/object (32: 28) fun Client.bar(s: Server = Server.NAME) { Nested class/object (5: 29) class Client(name: String = Server.NAME): Server() { Nested class/object (7: 16) val name = Server.NAME -Parameter type (28: 19) fun Client.bar(s: Server = Server.NAME) { +Parameter type (32: 19) fun Client.bar(s: Server = Server.NAME) { Parameter type (9: 16) fun foo(s: Server) { Super type qualifier (19: 15) super.work() -Target type of 'as' operation (37: 40) return if (this is Server) this as Server else null -Target type of 'is' operation (37: 24) return if (this is Server) this as Server else null -Unclassified usage (24: 22) object ClientObject: Server() { -Unclassified usage (5: 43) class Client(name: String = Server.NAME): Server() { +Supertype (23: 19) class object: Server() { +Supertype (28: 22) object ClientObject: Server() { +Supertype (5: 43) class Client(name: String = Server.NAME): Server() { +Target type of 'as' operation (41: 40) return if (this is Server) this as Server else null +Target type of 'is' operation (41: 24) return if (this is Server) this as Server else null diff --git a/idea/testData/findUsages/findClassUsages/kotlinClassConstructorUsages.results.txt b/idea/testData/findUsages/findClassUsages/kotlinClassConstructorUsages.results.txt index ef5256be8ee..55e495cc8b8 100644 --- a/idea/testData/findUsages/findClassUsages/kotlinClassConstructorUsages.results.txt +++ b/idea/testData/findUsages/findClassUsages/kotlinClassConstructorUsages.results.txt @@ -1,2 +1,2 @@ -Unclassified usage (24: 22) object ClientObject: Server() { -Unclassified usage (5: 15) class Client: Server() { \ No newline at end of file +Supertype (24: 22) object ClientObject: Server() { +Supertype (5: 15) class Client: Server() { \ No newline at end of file