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.super.type.qualifier = Super type qualifier
|
||||||
usageType.receiver = Receiver
|
usageType.receiver = Receiver
|
||||||
usageType.selector = Selector
|
usageType.selector = Selector
|
||||||
|
usageType.delegate = Delegate
|
||||||
|
|
||||||
x.in.y={0} in {1}
|
x.in.y={0} in {1}
|
||||||
x.implements.y={0} in {1} implements {2} in {3}.
|
x.implements.y={0} in {1} implements {2} in {3}.
|
||||||
|
|||||||
@@ -112,6 +112,10 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getVariableUsageType(): UsageType? {
|
fun getVariableUsageType(): UsageType? {
|
||||||
|
if (element.getParentByTypeAndBranch(javaClass<JetDelegatorByExpressionSpecifier>()) { getDelegateExpression() } != null) {
|
||||||
|
return JetUsageTypes.DELEGATE
|
||||||
|
}
|
||||||
|
|
||||||
val dotQualifiedExpression = element.getParentByType(javaClass<JetDotQualifiedExpression>())
|
val dotQualifiedExpression = element.getParentByType(javaClass<JetDotQualifiedExpression>())
|
||||||
|
|
||||||
return if (dotQualifiedExpression != null) {
|
return if (dotQualifiedExpression != null) {
|
||||||
@@ -143,6 +147,9 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx {
|
|||||||
|
|
||||||
fun getFunctionUsageType(descriptor: FunctionDescriptor): UsageType? {
|
fun getFunctionUsageType(descriptor: FunctionDescriptor): UsageType? {
|
||||||
return when {
|
return when {
|
||||||
|
element.getParentByTypeAndBranch(javaClass<JetDelegationSpecifier>()) { getTypeReference() } != null ->
|
||||||
|
JetUsageTypes.SUPER_TYPE
|
||||||
|
|
||||||
descriptor is ConstructorDescriptor
|
descriptor is ConstructorDescriptor
|
||||||
&& element.getParentByTypeAndBranch(javaClass<JetAnnotationEntry>()) { getTypeReference() } != null ->
|
&& element.getParentByTypeAndBranch(javaClass<JetAnnotationEntry>()) { getTypeReference() } != null ->
|
||||||
JetUsageTypes.ANNOTATION_TYPE
|
JetUsageTypes.ANNOTATION_TYPE
|
||||||
@@ -178,6 +185,7 @@ public class JetUsageTypeProvider() : UsageTypeProviderEx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
object JetUsageTypes {
|
object JetUsageTypes {
|
||||||
|
// types
|
||||||
val ANNOTATION_TYPE = UsageType(JetBundle.message("usageType.annotation.type"))
|
val ANNOTATION_TYPE = UsageType(JetBundle.message("usageType.annotation.type"))
|
||||||
val TYPE_CONSTRAINT = UsageType(JetBundle.message("usageType.type.constraint"))
|
val TYPE_CONSTRAINT = UsageType(JetBundle.message("usageType.type.constraint"))
|
||||||
val TYPE_ARGUMENT = UsageType(JetBundle.message("usageType.type.argument"))
|
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 CLASS_OBJECT_ACCESS = UsageType(JetBundle.message("usageType.class.object"))
|
||||||
val EXTENSION_RECEIVER_TYPE = UsageType(JetBundle.message("usageType.extension.receiver.type"))
|
val EXTENSION_RECEIVER_TYPE = UsageType(JetBundle.message("usageType.extension.receiver.type"))
|
||||||
val SUPER_TYPE_QUALIFIER = UsageType(JetBundle.message("usageType.super.type.qualifier"))
|
val SUPER_TYPE_QUALIFIER = UsageType(JetBundle.message("usageType.super.type.qualifier"))
|
||||||
|
|
||||||
|
// functions
|
||||||
val INSTANTIATION = UsageType(JetBundle.message("usageType.instantiation"))
|
val INSTANTIATION = UsageType(JetBundle.message("usageType.instantiation"))
|
||||||
val FUNCTION_CALL = UsageType(JetBundle.message("usageType.function.call"))
|
val FUNCTION_CALL = UsageType(JetBundle.message("usageType.function.call"))
|
||||||
|
|
||||||
|
// values
|
||||||
val RECEIVER = UsageType(JetBundle.message("usageType.receiver"))
|
val RECEIVER = UsageType(JetBundle.message("usageType.receiver"))
|
||||||
val SELECTOR = UsageType(JetBundle.message("usageType.selector"))
|
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 IMPORT_DIRECTIVE = UsageType(JetBundle.message("usageType.import"))
|
||||||
val CALLABLE_REFERENCE = UsageType(JetBundle.message("usageType.callable.reference"))
|
val CALLABLE_REFERENCE = UsageType(JetBundle.message("usageType.callable.reference"))
|
||||||
}
|
}
|
||||||
@@ -19,6 +19,10 @@ class Client(name: String = Server.NAME): Server() {
|
|||||||
super<Server>.work()
|
super<Server>.work()
|
||||||
println("Client")
|
println("Client")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class object: Server() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object ClientObject: Server() {
|
object ClientObject: Server() {
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
Class/object property type (6: 21) var nextServer: Server? = new Server()
|
Class/object property type (6: 21) var nextServer: Server? = new Server()
|
||||||
Function return types (14: 26) fun getNextServer(): 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
|
Import directive (3: 15) import server.Server
|
||||||
Local variable type (10: 21) val server: Server = s
|
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 (5: 29) class Client(name: String = Server.NAME): Server() {
|
||||||
Nested class/object (7: 16) val name = Server.NAME
|
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) {
|
Parameter type (9: 16) fun foo(s: Server) {
|
||||||
Super type qualifier (19: 15) super<Server>.work()
|
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
|
Supertype (23: 19) class object: Server() {
|
||||||
Target type of 'is' operation (37: 24) return if (this is Server) this as Server else null
|
Supertype (28: 22) object ClientObject: Server() {
|
||||||
Unclassified usage (24: 22) object ClientObject: Server() {
|
Supertype (5: 43) class Client(name: String = Server.NAME): Server() {
|
||||||
Unclassified usage (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() {
|
Supertype (24: 22) object ClientObject: Server() {
|
||||||
Unclassified usage (5: 15) class Client: Server() {
|
Supertype (5: 15) class Client: Server() {
|
||||||
Reference in New Issue
Block a user