Simplify checks that stream chain exists
This commit is contained in:
committed by
Yan Zhulanow
parent
6d395dffbb
commit
5fe0f167ca
+2
-1
@@ -29,7 +29,8 @@ abstract class KotlinChainBuilderBase(private val transformer: ChainTransformer<
|
|||||||
protected abstract val existenceChecker: ExistenceChecker
|
protected abstract val existenceChecker: ExistenceChecker
|
||||||
|
|
||||||
override fun isChainExists(startElement: PsiElement): Boolean {
|
override fun isChainExists(startElement: PsiElement): Boolean {
|
||||||
var element: PsiElement? = PsiUtil.ignoreWhiteSpaces(startElement)
|
var element: PsiElement? = getLatestElementInScope(PsiUtil.ignoreWhiteSpaces(startElement))
|
||||||
|
existenceChecker.reset()
|
||||||
while (element != null && !existenceChecker.isFound()) {
|
while (element != null && !existenceChecker.isFound()) {
|
||||||
existenceChecker.reset()
|
existenceChecker.reset()
|
||||||
element.accept(existenceChecker)
|
element.accept(existenceChecker)
|
||||||
|
|||||||
+10
-13
@@ -13,28 +13,25 @@ import org.jetbrains.kotlin.types.KotlinType
|
|||||||
*/
|
*/
|
||||||
class PackageBasedCallChecker(private val supportedPackage: String) : StreamCallChecker {
|
class PackageBasedCallChecker(private val supportedPackage: String) : StreamCallChecker {
|
||||||
override fun isIntermediateCall(expression: KtCallExpression): Boolean {
|
override fun isIntermediateCall(expression: KtCallExpression): Boolean {
|
||||||
return checkCallSupported(expression, true, true)
|
return checkReceiverSupported(expression) && checkResultSupported(expression, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isTerminationCall(expression: KtCallExpression): Boolean {
|
override fun isTerminationCall(expression: KtCallExpression): Boolean {
|
||||||
return checkCallSupported(expression, true, false)
|
return checkReceiverSupported(expression) && checkResultSupported(expression, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkCallSupported(expression: KtCallExpression,
|
private fun checkResultSupported(expression: KtCallExpression,
|
||||||
shouldSupportReceiver: Boolean,
|
shouldSupportResult: Boolean): Boolean {
|
||||||
shouldSupportResult: Boolean): Boolean {
|
|
||||||
val receiverType = expression.receiverType()
|
|
||||||
val resultType = expression.resolveType()
|
val resultType = expression.resolveType()
|
||||||
|
return shouldSupportResult == isSupportedType(resultType)
|
||||||
return (receiverType == null || // there is no producer or producer is a static method
|
|
||||||
shouldSupportReceiver == isSupportedType(receiverType)) && shouldSupportResult == isSupportedType(resultType)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isSupportedType(type: KotlinType?): Boolean {
|
private fun checkReceiverSupported(expression: KtCallExpression): Boolean {
|
||||||
if (type == null) {
|
val receiverType = expression.receiverType()
|
||||||
return false
|
return receiverType != null && isSupportedType(receiverType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isSupportedType(type: KotlinType): Boolean {
|
||||||
val typeName = type.getJetTypeFqName(false)
|
val typeName = type.getJetTypeFqName(false)
|
||||||
return StringUtil.getPackageName(typeName).startsWith(supportedPackage)
|
return StringUtil.getPackageName(typeName).startsWith(supportedPackage)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user