Added firstOrNullIsInstance and firstIsInstance methods
This commit is contained in:
@@ -24,12 +24,12 @@ import org.jetbrains.jet.lang.psi.JetPsiFactory
|
|||||||
import com.intellij.psi.PsiWhiteSpace
|
import com.intellij.psi.PsiWhiteSpace
|
||||||
import com.intellij.psi.PsiErrorElement
|
import com.intellij.psi.PsiErrorElement
|
||||||
import org.jetbrains.jet.lang.psi.JetCallableDeclaration
|
import org.jetbrains.jet.lang.psi.JetCallableDeclaration
|
||||||
|
import org.jetbrains.jet.utils.addToStdlib.firstOrNullIsInstance
|
||||||
|
|
||||||
fun getTypeReference(declaration: JetCallableDeclaration): JetTypeReference? {
|
fun getTypeReference(declaration: JetCallableDeclaration): JetTypeReference? {
|
||||||
return declaration.getFirstChild()!!.siblings(forward = true)
|
return declaration.getFirstChild()!!.siblings(forward = true)
|
||||||
.dropWhile { it.getNode()!!.getElementType() != JetTokens.COLON }
|
.dropWhile { it.getNode()!!.getElementType() != JetTokens.COLON }
|
||||||
.filterIsInstance(javaClass<JetTypeReference>())
|
.firstOrNullIsInstance<JetTypeReference>()
|
||||||
.firstOrNull()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setTypeReference(declaration: JetCallableDeclaration, addAfter: PsiElement?, typeRef: JetTypeReference?): JetTypeReference? {
|
fun setTypeReference(declaration: JetCallableDeclaration, addAfter: PsiElement?, typeRef: JetTypeReference?): JetTypeReference? {
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvi
|
|||||||
import kotlin.platform.platformStatic
|
import kotlin.platform.platformStatic
|
||||||
import org.jetbrains.jet.storage.StorageManager
|
import org.jetbrains.jet.storage.StorageManager
|
||||||
import org.jetbrains.jet.context.LazinessToken
|
import org.jetbrains.jet.context.LazinessToken
|
||||||
import javax.inject.Inject
|
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity
|
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil
|
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil
|
||||||
|
import org.jetbrains.jet.utils.addToStdlib.firstOrNullIsInstance
|
||||||
|
|
||||||
public class TypeResolver(
|
public class TypeResolver(
|
||||||
private val annotationResolver: AnnotationResolver,
|
private val annotationResolver: AnnotationResolver,
|
||||||
@@ -276,7 +276,7 @@ public class TypeResolver(
|
|||||||
|
|
||||||
public fun resolveClass(scope: JetScope, userType: JetUserType, trace: BindingTrace): ClassifierDescriptor? {
|
public fun resolveClass(scope: JetScope, userType: JetUserType, trace: BindingTrace): ClassifierDescriptor? {
|
||||||
val classifierDescriptor = qualifiedExpressionResolver.lookupDescriptorsForUserType(userType, scope, trace)
|
val classifierDescriptor = qualifiedExpressionResolver.lookupDescriptorsForUserType(userType, scope, trace)
|
||||||
.filterIsInstance(javaClass<ClassifierDescriptor>()).firstOrNull()
|
.firstOrNullIsInstance<ClassifierDescriptor>()
|
||||||
if (classifierDescriptor != null) {
|
if (classifierDescriptor != null) {
|
||||||
ImportsResolver.reportPlatformClassMappedToKotlin(moduleDescriptor, trace, userType, classifierDescriptor)
|
ImportsResolver.reportPlatformClassMappedToKotlin(moduleDescriptor, trace, userType, classifierDescriptor)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package org.jetbrains.jet.utils.addToStdlib
|
|||||||
|
|
||||||
import java.util.HashMap
|
import java.util.HashMap
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
|
import java.util.NoSuchElementException
|
||||||
|
|
||||||
deprecated("Replace with filterKeys when bootstrapped")
|
deprecated("Replace with filterKeys when bootstrapped")
|
||||||
public fun <K, V> Map<K, V>.filterKeys_tmp(predicate: (K)->Boolean): Map<K, V> {
|
public fun <K, V> Map<K, V>.filterKeys_tmp(predicate: (K)->Boolean): Map<K, V> {
|
||||||
@@ -33,3 +34,39 @@ public fun <K, V> Map<K, V>.filterKeys_tmp(predicate: (K)->Boolean): Map<K, V> {
|
|||||||
public fun <T: Any> T?.singletonOrEmptyList(): List<T> = if (this != null) Collections.singletonList(this) else Collections.emptyList()
|
public fun <T: Any> T?.singletonOrEmptyList(): List<T> = if (this != null) Collections.singletonList(this) else Collections.emptyList()
|
||||||
|
|
||||||
public fun <T: Any> T?.singletonOrEmptySet(): Set<T> = if (this != null) Collections.singleton(this) else Collections.emptySet()
|
public fun <T: Any> T?.singletonOrEmptySet(): Set<T> = if (this != null) Collections.singleton(this) else Collections.emptySet()
|
||||||
|
|
||||||
|
[suppress("NOTHING_TO_INLINE")]
|
||||||
|
public inline fun <reified T : Any> Stream<*>.firstOrNullIsInstance(): T? {
|
||||||
|
for (element in this) if (element is T) return element
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
[suppress("NOTHING_TO_INLINE")]
|
||||||
|
public inline fun <reified T : Any> Iterable<*>.firstOrNullIsInstance(): T? {
|
||||||
|
for (element in this) if (element is T) return element
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
[suppress("NOTHING_TO_INLINE")]
|
||||||
|
public inline fun <reified T : Any> Array<*>.firstOrNullIsInstance(): T? {
|
||||||
|
for (element in this) if (element is T) return element
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
[suppress("NOTHING_TO_INLINE")]
|
||||||
|
public inline fun <reified T> Stream<*>.firstIsInstance(): T {
|
||||||
|
for (element in this) if (element is T) return element
|
||||||
|
throw NoSuchElementException("No element of given type found")
|
||||||
|
}
|
||||||
|
|
||||||
|
[suppress("NOTHING_TO_INLINE")]
|
||||||
|
public inline fun <reified T> Iterable<*>.firstIsInstance(): T {
|
||||||
|
for (element in this) if (element is T) return element
|
||||||
|
throw NoSuchElementException("No element of given type found")
|
||||||
|
}
|
||||||
|
|
||||||
|
[suppress("NOTHING_TO_INLINE")]
|
||||||
|
public inline fun <reified T> Array<*>.firstIsInstance(): T {
|
||||||
|
for (element in this) if (element is T) return element
|
||||||
|
throw NoSuchElementException("No element of given type found")
|
||||||
|
}
|
||||||
@@ -27,6 +27,7 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.jet.JetNodeTypes
|
import org.jetbrains.jet.JetNodeTypes
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.isAncestor
|
import org.jetbrains.jet.lang.psi.psiUtil.isAncestor
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.isProbablyNothing
|
import org.jetbrains.jet.lang.psi.psiUtil.isProbablyNothing
|
||||||
|
import org.jetbrains.jet.utils.addToStdlib.firstOrNullIsInstance
|
||||||
|
|
||||||
//TODO: do resolve anonymous object's body
|
//TODO: do resolve anonymous object's body
|
||||||
|
|
||||||
@@ -402,6 +403,6 @@ class PartialBodyResolveFilter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun JetBlockExpression.lastStatement(): JetExpression?
|
private fun JetBlockExpression.lastStatement(): JetExpression?
|
||||||
= getLastChild()?.siblings(forward = false)?.filterIsInstance<JetExpression>()?.firstOrNull()
|
= getLastChild()?.siblings(forward = false)?.firstOrNullIsInstance<JetExpression>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,14 +21,14 @@ import com.intellij.psi.PsiMethod
|
|||||||
import com.intellij.psi.PsiField
|
import com.intellij.psi.PsiField
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import org.jetbrains.jet.plugin.stubindex.PackageIndexUtil
|
import org.jetbrains.jet.plugin.stubindex.PackageIndexUtil
|
||||||
|
import org.jetbrains.jet.utils.addToStdlib.firstIsInstance
|
||||||
|
|
||||||
// used in Upsource, what's why in idea-analysis module
|
// used in Upsource, what's why in idea-analysis module
|
||||||
public class JetShortNamesCache(private val project: com.intellij.openapi.project.Project) : com.intellij.psi.search.PsiShortNamesCache() {
|
public class JetShortNamesCache(private val project: com.intellij.openapi.project.Project) : com.intellij.psi.search.PsiShortNamesCache() {
|
||||||
class object {
|
class object {
|
||||||
public fun getKotlinInstance(project: com.intellij.openapi.project.Project): org.jetbrains.jet.plugin.caches.JetShortNamesCache
|
public fun getKotlinInstance(project: com.intellij.openapi.project.Project): org.jetbrains.jet.plugin.caches.JetShortNamesCache
|
||||||
= com.intellij.openapi.extensions.Extensions.getArea(project).getExtensionPoint<com.intellij.psi.search.PsiShortNamesCache>(com.intellij.psi.search.PsiShortNamesCache.EP_NAME).getExtensions()
|
= com.intellij.openapi.extensions.Extensions.getArea(project).getExtensionPoint<com.intellij.psi.search.PsiShortNamesCache>(com.intellij.psi.search.PsiShortNamesCache.EP_NAME).getExtensions()
|
||||||
.filterIsInstance(javaClass<org.jetbrains.jet.plugin.caches.JetShortNamesCache>())
|
.firstIsInstance<JetShortNamesCache>()
|
||||||
.first()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptorKi
|
|||||||
import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter
|
||||||
import org.jetbrains.jet.lang.resolve.calls.smartcasts.SmartCastUtils
|
import org.jetbrains.jet.lang.resolve.calls.smartcasts.SmartCastUtils
|
||||||
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo
|
import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo
|
||||||
|
import org.jetbrains.jet.utils.addToStdlib.firstOrNullIsInstance
|
||||||
|
|
||||||
class CompletionSessionConfiguration(
|
class CompletionSessionConfiguration(
|
||||||
val completeNonImportedDeclarations: Boolean,
|
val completeNonImportedDeclarations: Boolean,
|
||||||
|
|||||||
Reference in New Issue
Block a user