Fix detection of constructor calls and delegates in supertype specifiers
This commit is contained in:
@@ -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}.
|
||||
|
||||
@@ -112,6 +112,10 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx {
|
||||
}
|
||||
|
||||
fun getVariableUsageType(): UsageType? {
|
||||
if (element.getParentByTypeAndBranch(javaClass<JetDelegatorByExpressionSpecifier>()) { getDelegateExpression() } != null) {
|
||||
return JetUsageTypes.DELEGATE
|
||||
}
|
||||
|
||||
val dotQualifiedExpression = element.getParentByType(javaClass<JetDotQualifiedExpression>())
|
||||
|
||||
return if (dotQualifiedExpression != null) {
|
||||
@@ -143,6 +147,9 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx {
|
||||
|
||||
fun getFunctionUsageType(descriptor: FunctionDescriptor): UsageType? {
|
||||
return when {
|
||||
element.getParentByTypeAndBranch(javaClass<JetDelegationSpecifier>()) { getTypeReference() } != null ->
|
||||
JetUsageTypes.SUPER_TYPE
|
||||
|
||||
descriptor is ConstructorDescriptor
|
||||
&& element.getParentByTypeAndBranch(javaClass<JetAnnotationEntry>()) { 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"))
|
||||
}
|
||||
@@ -19,6 +19,10 @@ class Client(name: String = Server.NAME): Server() {
|
||||
super<Server>.work()
|
||||
println("Client")
|
||||
}
|
||||
|
||||
class object: Server() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
object ClientObject: Server() {
|
||||
|
||||
@@ -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<Server>.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
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
Unclassified usage (24: 22) object ClientObject: Server() {
|
||||
Unclassified usage (5: 15) class Client: Server() {
|
||||
Supertype (24: 22) object ClientObject: Server() {
|
||||
Supertype (5: 15) class Client: Server() {
|
||||
Reference in New Issue
Block a user