[NI] Report diagnostic on abstract class instantiation.
This commit is contained in:
committed by
Stanislav Erokhin
parent
b012681a53
commit
5afd3e72d6
@@ -157,6 +157,9 @@ fun isInfixCall(call: Call): Boolean {
|
||||
return binaryExpression.operationReference === operationRefExpression && operationRefExpression.operationSignTokenType == null
|
||||
}
|
||||
|
||||
fun isSupertypeConstructorCall(call: Call): Boolean =
|
||||
call.calleeExpression is KtConstructorCalleeExpression
|
||||
|
||||
fun isInvokeCallOnVariable(call: Call): Boolean {
|
||||
if (call.callType !== Call.CallType.INVOKE) return false
|
||||
val dispatchReceiver = call.dispatchReceiver
|
||||
|
||||
+1
@@ -50,6 +50,7 @@ class DiagnosticReporterByTrackingStrategy(
|
||||
when (diagnostic.javaClass) {
|
||||
VisibilityError::class.java -> tracingStrategy.invisibleMember(trace, (diagnostic as VisibilityError).invisibleMember)
|
||||
NoValueForParameter::class.java -> tracingStrategy.noValueForParameter(trace, (diagnostic as NoValueForParameter).parameterDescriptor)
|
||||
InstantiationOfAbstractClass::class.java -> tracingStrategy.instantiationOfAbstractClass(trace)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.resolve.calls.model.KotlinCallKind
|
||||
import org.jetbrains.kotlin.resolve.calls.CallTransformer
|
||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isConventionCall
|
||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isInfixCall
|
||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isSupertypeConstructorCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.*
|
||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy
|
||||
@@ -59,6 +60,7 @@ class PSIKotlinCallImpl(
|
||||
) : PSIKotlinCall() {
|
||||
override val isInfixCall: Boolean get() = isInfixCall(psiCall)
|
||||
override val isOperatorCall: Boolean get() = isConventionCall(psiCall)
|
||||
override val isSupertypeConstructorCall: Boolean get() = isSupertypeConstructorCall(psiCall)
|
||||
}
|
||||
|
||||
class PSIKotlinCallForVariable(
|
||||
@@ -81,6 +83,7 @@ class PSIKotlinCallForVariable(
|
||||
|
||||
override val isInfixCall: Boolean get() = false
|
||||
override val isOperatorCall: Boolean get() = false
|
||||
override val isSupertypeConstructorCall: Boolean get() = false
|
||||
}
|
||||
|
||||
class PSIKotlinCallForInvoke(
|
||||
@@ -101,6 +104,7 @@ class PSIKotlinCallForInvoke(
|
||||
|
||||
override val isInfixCall: Boolean get() = false
|
||||
override val isOperatorCall: Boolean get() = true
|
||||
override val isSupertypeConstructorCall: Boolean get() = false
|
||||
|
||||
init {
|
||||
val variableReceiver = dispatchReceiverForInvokeExtension ?: explicitReceiver
|
||||
|
||||
Reference in New Issue
Block a user