Fix detection of constructor calls and delegates in supertype specifiers

This commit is contained in:
Alexey Sedunov
2013-10-18 15:10:00 +04:00
parent 38660dd9a8
commit cf8555349e
5 changed files with 30 additions and 9 deletions
@@ -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() {