Use heuristics for termination calls for java/streamex as well
This commit is contained in:
committed by
Yan Zhulanow
parent
1f9004e1ae
commit
4f722dd32d
+2
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.KotlinChainTransform
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.PackageBasedCallChecker
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.TerminatedChainBuilder
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.java.JavaStreamChainTypeExtractor
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.java.StandardLibraryCallChecker
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.JavaPeekCallFactory
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinStatementFactory
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.trace.impl.KotlinTraceExpressionBuilder
|
||||
@@ -21,7 +22,7 @@ class JavaStandardLibrarySupportProvider : LibrarySupportProvider {
|
||||
private companion object {
|
||||
val builder = TerminatedChainBuilder(
|
||||
KotlinChainTransformerImpl(JavaStreamChainTypeExtractor()),
|
||||
PackageBasedCallChecker("java.util.stream")
|
||||
StandardLibraryCallChecker(PackageBasedCallChecker("java.util.stream"))
|
||||
)
|
||||
val support = StandardLibrarySupport()
|
||||
val dsl = DslImpl(KotlinStatementFactory(JavaPeekCallFactory()))
|
||||
|
||||
+2
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.KotlinChainTransform
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.PackageBasedCallChecker
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.TerminatedChainBuilder
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.java.JavaStreamChainTypeExtractor
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.java.StreamExCallChecker
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.JavaPeekCallFactory
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinStatementFactory
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.trace.impl.KotlinTraceExpressionBuilder
|
||||
@@ -21,7 +22,7 @@ class StreamExLibrarySupportProvider : LibrarySupportProvider {
|
||||
private companion object {
|
||||
val streamChainBuilder = TerminatedChainBuilder(
|
||||
KotlinChainTransformerImpl(JavaStreamChainTypeExtractor()),
|
||||
PackageBasedCallChecker("one.util.streamex")
|
||||
StreamExCallChecker(PackageBasedCallChecker("one.util.streamex"))
|
||||
)
|
||||
val support = StreamExLibrarySupport()
|
||||
val dsl = DslImpl(KotlinStatementFactory(JavaPeekCallFactory()))
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.debugger.sequence.psi
|
||||
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.sequence.SequenceCallCheckerWithNameHeuristics
|
||||
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||
|
||||
abstract class CallCheckerWithNameHeuristics(private val nestedChecker: StreamCallChecker) : StreamCallChecker {
|
||||
override fun isIntermediateCall(expression: KtCallExpression): Boolean = nestedChecker.isIntermediateCall(expression)
|
||||
|
||||
override fun isTerminationCall(expression: KtCallExpression): Boolean {
|
||||
val name = expression.calleeExpression?.text
|
||||
if (name != null) {
|
||||
return isTerminalCallName(name) && nestedChecker.isTerminationCall(expression)
|
||||
}
|
||||
|
||||
return nestedChecker.isTerminationCall(expression)
|
||||
}
|
||||
|
||||
abstract fun isTerminalCallName(callName: String): Boolean
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.debugger.sequence.psi.java
|
||||
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.CallCheckerWithNameHeuristics
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.StreamCallChecker
|
||||
|
||||
class StandardLibraryCallChecker(nestedChecker: StreamCallChecker) : CallCheckerWithNameHeuristics(nestedChecker) {
|
||||
private companion object {
|
||||
val TERMINATION_CALLS: Set<String> = setOf(
|
||||
"forEach", "toArray", "reduce", "collect", "min", "max", "count", "sum", "anyMatch", "allMatch", "noneMatch", "findFirst",
|
||||
"findAny", "forEachOrdered", "average", "summaryStatistics"
|
||||
)
|
||||
}
|
||||
|
||||
override fun isTerminalCallName(callName: String): Boolean = TERMINATION_CALLS.contains(callName)
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.debugger.sequence.psi.java
|
||||
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.CallCheckerWithNameHeuristics
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.StreamCallChecker
|
||||
|
||||
class StreamExCallChecker(nestedChecker: StreamCallChecker): CallCheckerWithNameHeuristics(nestedChecker) {
|
||||
private companion object {
|
||||
val TERMINATION_CALLS: Set<String> = setOf(
|
||||
"forEach", "toArray", "reduce", "collect", "min", "max", "count", "sum", "anyMatch", "allMatch", "noneMatch", "findFirst",
|
||||
"findAny", "forEachOrdered", "average", "summaryStatistics", "toList", "toSet", "toCollection", "toListAndThen", "toSetAndThen",
|
||||
"toImmutableList", "toImmutableSet", "toMap", "toSortedMap", "toNavigableMap", "toImmutableMap", "toMapAndThen", "toCustomMap",
|
||||
"partitioningBy", "partitioningTo", "groupingBy", "groupingTo", "grouping", "joining", "toFlatList", "toFlatCollection",
|
||||
"maxBy", "maxByInt", "maxByLong", "maxByDouble", "minBy", "minByInt", "minByLong", "minByDouble", "has", "indexOf", "foldLeft",
|
||||
"foldRight", "scanLeft", "scanRight", "toByteArray", "toCharArray", "toShortArray", "toBitSet", "toFloatArray", "charsToString",
|
||||
"codePointsToString", "forPairs", "forKeyValue", "asByteInputStream", "into"
|
||||
)
|
||||
}
|
||||
|
||||
override fun isTerminalCallName(callName: String): Boolean = TERMINATION_CALLS.contains(callName)
|
||||
}
|
||||
+5
-15
@@ -5,11 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.debugger.sequence.psi.sequence
|
||||
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.CallCheckerWithNameHeuristics
|
||||
import org.jetbrains.kotlin.idea.debugger.sequence.psi.StreamCallChecker
|
||||
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||
|
||||
class SequenceCallCheckerWithNameHeuristics(private val nestedChecker: StreamCallChecker) : StreamCallChecker {
|
||||
class SequenceCallCheckerWithNameHeuristics(nestedChecker: StreamCallChecker) : CallCheckerWithNameHeuristics(nestedChecker) {
|
||||
private companion object {
|
||||
|
||||
val TERMINATION_CALLS: Set<String> = setOf(
|
||||
"all", "any", "associate", "associateBy", "associateByTo", "associateTo", "average", "chunked", "contains", "count", "distinct",
|
||||
"distinctBy", "elementAt", "elementAtOrElse", "elementAtOrNull", "find", "findLast", "first", "firstOrNull", "fold",
|
||||
@@ -20,16 +21,5 @@ class SequenceCallCheckerWithNameHeuristics(private val nestedChecker: StreamCal
|
||||
)
|
||||
}
|
||||
|
||||
override fun isIntermediateCall(expression: KtCallExpression): Boolean {
|
||||
return nestedChecker.isIntermediateCall(expression)
|
||||
}
|
||||
|
||||
override fun isTerminationCall(expression: KtCallExpression): Boolean {
|
||||
val name = expression.calleeExpression?.text
|
||||
if (name != null) {
|
||||
return TERMINATION_CALLS.contains(name) && nestedChecker.isTerminationCall(expression)
|
||||
}
|
||||
|
||||
return nestedChecker.isTerminationCall(expression)
|
||||
}
|
||||
}
|
||||
override fun isTerminalCallName(callName: String): Boolean = TERMINATION_CALLS.contains(callName)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user