code cleanup: eval4j, ide-common, idea-analysis

This commit is contained in:
Dmitry Jemerov
2015-07-20 18:50:27 +02:00
parent 9e7a67fabf
commit 9142d48e81
21 changed files with 54 additions and 71 deletions
+5 -12
View File
@@ -16,23 +16,16 @@
package org.jetbrains.eval4j package org.jetbrains.eval4j
import org.jetbrains.org.objectweb.asm.tree.analysis.*
import org.jetbrains.org.objectweb.asm.Handle import org.jetbrains.org.objectweb.asm.Handle
import org.jetbrains.org.objectweb.asm.Opcodes.* import org.jetbrains.org.objectweb.asm.Opcodes.*
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode import org.jetbrains.org.objectweb.asm.tree.*
import org.jetbrains.org.objectweb.asm.tree.FieldInsnNode import org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException
import org.jetbrains.org.objectweb.asm.tree.IntInsnNode import org.jetbrains.org.objectweb.asm.tree.analysis.Interpreter
import org.jetbrains.org.objectweb.asm.tree.LdcInsnNode
import org.jetbrains.org.objectweb.asm.tree.MethodInsnNode
import org.jetbrains.org.objectweb.asm.tree.MultiANewArrayInsnNode
import org.jetbrains.org.objectweb.asm.tree.TypeInsnNode
import org.jetbrains.org.objectweb.asm.tree.JumpInsnNode
import org.jetbrains.org.objectweb.asm.tree.IincInsnNode
class UnsupportedByteCodeException(message: String) : RuntimeException(message) class UnsupportedByteCodeException(message: String) : RuntimeException(message)
public trait Eval { public interface Eval {
public fun loadClass(classType: Type): Value public fun loadClass(classType: Type): Value
public fun loadString(str: String): Value public fun loadString(str: String): Value
public fun newInstance(classType: Type): Value public fun newInstance(classType: Type): Value
@@ -97,7 +90,7 @@ class SingleInstructionInterpreter(private val eval: Eval) : Interpreter<Value>(
is Double -> double(cst) is Double -> double(cst)
is String -> eval.loadString(cst) is String -> eval.loadString(cst)
is Type -> { is Type -> {
val sort = (cst as Type).getSort() val sort = cst.getSort()
when (sort) { when (sort) {
Type.OBJECT, Type.ARRAY -> eval.loadClass(cst) Type.OBJECT, Type.ARRAY -> eval.loadClass(cst)
Type.METHOD -> throw UnsupportedByteCodeException("Mothod handles are not supported") Type.METHOD -> throw UnsupportedByteCodeException("Mothod handles are not supported")
@@ -24,7 +24,7 @@ import org.jetbrains.org.objectweb.asm.tree.analysis.Frame
import org.jetbrains.org.objectweb.asm.util.Printer import org.jetbrains.org.objectweb.asm.util.Printer
import java.util.ArrayList import java.util.ArrayList
public trait InterpreterResult { public interface InterpreterResult {
override fun toString(): String override fun toString(): String
} }
@@ -46,7 +46,7 @@ public class AbnormalTermination(public val message: String): InterpreterResult
override fun toString(): String = "Terminated abnormally: $message" override fun toString(): String = "Terminated abnormally: $message"
} }
public trait InterpretationEventHandler { public interface InterpretationEventHandler {
object NONE : InterpretationEventHandler { object NONE : InterpretationEventHandler {
override fun instructionProcessed(insn: AbstractInsnNode): InterpreterResult? = null override fun instructionProcessed(insn: AbstractInsnNode): InterpreterResult? = null
override fun exceptionThrown(currentState: Frame<Value>, currentInsn: AbstractInsnNode, exception: Value): InterpreterResult? = null override fun exceptionThrown(currentState: Frame<Value>, currentInsn: AbstractInsnNode, exception: Value): InterpreterResult? = null
@@ -80,7 +80,7 @@ public fun interpreterLoop(
val firstInsn = m.instructions.getFirst() val firstInsn = m.instructions.getFirst()
if (firstInsn == null) throw IllegalArgumentException("Empty method") if (firstInsn == null) throw IllegalArgumentException("Empty method")
var currentInsn = firstInsn!! var currentInsn = firstInsn
fun goto(nextInsn: AbstractInsnNode?) { fun goto(nextInsn: AbstractInsnNode?) {
if (nextInsn == null) throw IllegalArgumentException("Instruction flow ended with no RETURN") if (nextInsn == null) throw IllegalArgumentException("Instruction flow ended with no RETURN")
+1 -1
View File
@@ -19,7 +19,7 @@ package org.jetbrains.eval4j
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.tree.LabelNode import org.jetbrains.org.objectweb.asm.tree.LabelNode
public trait Value : org.jetbrains.org.objectweb.asm.tree.analysis.Value { public interface Value : org.jetbrains.org.objectweb.asm.tree.analysis.Value {
public val asmType: Type public val asmType: Type
public val valid: Boolean public val valid: Boolean
override fun getSize(): Int = asmType.getSize() override fun getSize(): Int = asmType.getSize()
@@ -53,7 +53,7 @@ public fun JetScope.getImplicitReceiversWithInstanceToExpression(): Map<Receiver
val classDescriptor = current as? ClassDescriptor val classDescriptor = current as? ClassDescriptor
if (classDescriptor != null && !classDescriptor.isInner() && !DescriptorUtils.isLocal(classDescriptor)) break if (classDescriptor != null && !classDescriptor.isInner() && !DescriptorUtils.isLocal(classDescriptor)) break
current = current!!.getContainingDeclaration() current = current.getContainingDeclaration()
} }
val result = LinkedHashMap<ReceiverParameterDescriptor, ReceiverExpressionFactory?>() val result = LinkedHashMap<ReceiverParameterDescriptor, ReceiverExpressionFactory?>()
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.resolve.lazy package org.jetbrains.kotlin.resolve.lazy
public trait ProbablyNothingCallableNames { public interface ProbablyNothingCallableNames {
public fun functionNames(): Collection<String> public fun functionNames(): Collection<String>
public fun propertyNames(): Collection<String> public fun propertyNames(): Collection<String>
} }
@@ -21,7 +21,6 @@ import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.IndexNotReadyException import com.intellij.openapi.project.IndexNotReadyException
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker import com.intellij.psi.util.PsiModificationTracker
@@ -42,17 +41,12 @@ import org.jetbrains.kotlin.idea.project.TargetPlatform
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.resolve.util.getScopeAndDataFlowForAnalyzeFragment import org.jetbrains.kotlin.resolve.util.getScopeAndDataFlowForAnalyzeFragment
import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.TypeUtils
import java.util.HashMap import java.util.HashMap
public trait CacheExtension<T> { public interface CacheExtension<T> {
public val platform: TargetPlatform public val platform: TargetPlatform
public fun getData(resolverProvider: ModuleResolverProvider): T public fun getData(resolverProvider: ModuleResolverProvider): T
} }
@@ -129,8 +123,8 @@ private class PerFileAnalysisCache(val file: JetFile, val resolveSession: Resolv
descendantsOfCurrent.clear() descendantsOfCurrent.clear()
} }
descendantsOfCurrent.add(current!!) descendantsOfCurrent.add(current)
current = current!!.getParent() current = current.getParent()
} }
cache.keySet().removeAll(toRemove) cache.keySet().removeAll(toRemove)
@@ -111,7 +111,7 @@ private fun collectAllModuleInfosFromIdeaModel(project: Project): List<IdeaModul
return collectAllModuleInfos return collectAllModuleInfos
} }
trait ModuleResolverProvider { interface ModuleResolverProvider {
val exceptionTracker: ExceptionTracker val exceptionTracker: ExceptionTracker
fun resolverByModule(module: IdeaModuleInfo): ResolverForModule = resolverForProject.resolverForModule(module) fun resolverByModule(module: IdeaModuleInfo): ResolverForModule = resolverForProject.resolverForModule(module)
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.JetScope
public trait ResolutionFacade { public interface ResolutionFacade {
public fun analyze(element: JetElement, bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): BindingContext public fun analyze(element: JetElement, bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): BindingContext
@@ -28,7 +28,7 @@ class SynchronizedCachedValue<V>(project: Project, provider: () -> CachedValuePr
public fun getValue(): V { public fun getValue(): V {
return synchronized(cachedValue) { return synchronized(cachedValue) {
cachedValue.getValue() as V cachedValue.getValue()
} }
} }
} }
@@ -59,7 +59,7 @@ private fun Project.getOrCreateElementsToShorten(): MutableSet<ShorteningRequest
elementsToShorten = elements elementsToShorten = elements
} }
return elements!! return elements
} }
public fun JetElement.addToShorteningWaitSet(options: Options = Options.DEFAULT) { public fun JetElement.addToShorteningWaitSet(options: Options = Options.DEFAULT) {
@@ -17,10 +17,8 @@
package org.jetbrains.kotlin.idea.decompiler package org.jetbrains.kotlin.idea.decompiler
import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.TextRange
import com.intellij.psi.FileViewProvider
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
@@ -39,7 +37,7 @@ public abstract class KotlinClsFileBase(val provider: KotlinClassFileViewProvide
val original = descriptor.getOriginal() val original = descriptor.getOriginal()
if (original is ValueParameterDescriptor) { if (original is ValueParameterDescriptor) {
val callable = original.getContainingDeclaration() as? CallableDescriptor ?: return null val callable = original.getContainingDeclaration()
val callableDeclaration = getDeclarationForDescriptor(callable) as? JetCallableDeclaration ?: return null val callableDeclaration = getDeclarationForDescriptor(callable) as? JetCallableDeclaration ?: return null
return callableDeclaration.getValueParameters()[original.getIndex()] return callableDeclaration.getValueParameters()[original.getIndex()]
} }
@@ -107,7 +107,7 @@ private class ClassClsStubBuilder(
val superTypeRefs = supertypeIds.filterNot { val superTypeRefs = supertypeIds.filterNot {
//TODO: filtering function types should go away //TODO: filtering function types should go away
KotlinBuiltIns.isNumberedFunctionClassFqName(it.asSingleFqName().toUnsafe()) KotlinBuiltIns.isNumberedFunctionClassFqName(it.asSingleFqName().toUnsafe())
}.map { it.getShortClassName().ref()!! }.toTypedArray() }.map { it.getShortClassName().ref() }.toTypedArray()
return when (classKind) { return when (classKind) {
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> { ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> {
KotlinObjectStubImpl( KotlinObjectStubImpl(
@@ -23,12 +23,11 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.AnnotationAndConstantLoader
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter
import org.jetbrains.kotlin.serialization.deserialization.NameResolver import org.jetbrains.kotlin.serialization.deserialization.NameResolver
import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
import org.jetbrains.kotlin.serialization.deserialization.AnnotationAndConstantLoader
class ClsStubBuilderComponents( class ClsStubBuilderComponents(
val classDataFinder: ClassDataFinder, val classDataFinder: ClassDataFinder,
@@ -42,7 +41,7 @@ class ClsStubBuilderComponents(
} }
} }
trait TypeParameters { interface TypeParameters {
fun get(id: Int): Name fun get(id: Int): Name
fun child(nameResolver: NameResolver, innerTypeParameters: List<ProtoBuf.TypeParameter>) fun child(nameResolver: NameResolver, innerTypeParameters: List<ProtoBuf.TypeParameter>)
@@ -216,7 +216,7 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) {
val typeConstraintListStub = KotlinPlaceHolderStubImpl<JetTypeConstraintList>(parent, JetStubElementTypes.TYPE_CONSTRAINT_LIST) val typeConstraintListStub = KotlinPlaceHolderStubImpl<JetTypeConstraintList>(parent, JetStubElementTypes.TYPE_CONSTRAINT_LIST)
for ((name, type) in protosForTypeConstraintList) { for ((name, type) in protosForTypeConstraintList) {
val typeConstraintStub = KotlinPlaceHolderStubImpl<JetTypeConstraint>(typeConstraintListStub, JetStubElementTypes.TYPE_CONSTRAINT) val typeConstraintStub = KotlinPlaceHolderStubImpl<JetTypeConstraint>(typeConstraintListStub, JetStubElementTypes.TYPE_CONSTRAINT)
KotlinNameReferenceExpressionStubImpl(typeConstraintStub, name.ref()!!) KotlinNameReferenceExpressionStubImpl(typeConstraintStub, name.ref())
createTypeReferenceStub(typeConstraintStub, type) createTypeReferenceStub(typeConstraintStub, type)
} }
} }
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
public trait ResolverForDecompiler { public interface ResolverForDecompiler {
public fun resolveTopLevelClass(classId: ClassId): ClassDescriptor? public fun resolveTopLevelClass(classId: ClassId): ClassDescriptor?
public fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> public fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor>
@@ -173,7 +173,7 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
@Override @Override
public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder builder) { public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder builder) {
boolean last = ((FunctionDescriptor) parameter.getContainingDeclaration()).getValueParameters().size() - 1 == parameter.getIndex(); boolean last = parameter.getContainingDeclaration().getValueParameters().size() - 1 == parameter.getIndex();
if (!last) { if (!last) {
builder.append(","); builder.append(",");
} }
@@ -16,16 +16,16 @@
package org.jetbrains.kotlin.idea.highlighter package org.jetbrains.kotlin.idea.highlighter
import com.intellij.codeInspection.SuppressIntentionAction
import com.intellij.codeInspection.SuppressableProblemGroup import com.intellij.codeInspection.SuppressableProblemGroup
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.codeInspection.SuppressIntentionAction import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import java.util.Collections import org.jetbrains.kotlin.idea.quickfix.AnnotationHostKind
import org.jetbrains.kotlin.idea.quickfix.KotlinSuppressIntentionAction import org.jetbrains.kotlin.idea.quickfix.KotlinSuppressIntentionAction
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.idea.quickfix.AnnotationHostKind
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import java.util.Collections
class KotlinSuppressableWarningProblemGroup( class KotlinSuppressableWarningProblemGroup(
private val diagnosticFactory: DiagnosticFactory<*> private val diagnosticFactory: DiagnosticFactory<*>
@@ -55,7 +55,7 @@ fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: Diagnos
var suppressAtStatementAllowed = true var suppressAtStatementAllowed = true
while (current != null) { while (current != null) {
if (current is JetDeclaration) { if (current is JetDeclaration) {
val declaration = current as JetDeclaration val declaration = current
val kind = DeclarationKindDetector.detect(declaration) val kind = DeclarationKindDetector.detect(declaration)
if (kind != null) { if (kind != null) {
actions.add(KotlinSuppressIntentionAction(declaration, diagnosticFactory, kind)) actions.add(KotlinSuppressIntentionAction(declaration, diagnosticFactory, kind))
@@ -64,15 +64,14 @@ fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: Diagnos
} }
else if (current is JetExpression && suppressAtStatementAllowed) { else if (current is JetExpression && suppressAtStatementAllowed) {
// Add suppress action at first statement // Add suppress action at first statement
if ((current as PsiElement).getParent() is JetBlockExpression) { if (current.getParent() is JetBlockExpression) {
val expression = current as JetExpression actions.add(KotlinSuppressIntentionAction(current, diagnosticFactory,
actions.add(KotlinSuppressIntentionAction(expression, diagnosticFactory,
AnnotationHostKind("statement", "", true))) AnnotationHostKind("statement", "", true)))
suppressAtStatementAllowed = false suppressAtStatementAllowed = false
} }
} }
current = current?.getParent() current = current.getParent()
} }
return actions return actions
} }
@@ -29,12 +29,12 @@ import java.util.HashSet
import com.intellij.openapi.progress.ProgressIndicatorProvider import com.intellij.openapi.progress.ProgressIndicatorProvider
import org.jetbrains.kotlin.psi.psiUtil.contains import org.jetbrains.kotlin.psi.psiUtil.contains
trait DeclarationSearchRequest<in T> { interface DeclarationSearchRequest<in T> {
val project: Project val project: Project
val searchScope: SearchScope val searchScope: SearchScope
} }
public trait SearchRequestWithElement<T : PsiElement> : DeclarationSearchRequest<T> { public interface SearchRequestWithElement<T : PsiElement> : DeclarationSearchRequest<T> {
val originalElement: T val originalElement: T
override val project: Project get() = originalElement.getProject() override val project: Project get() = originalElement.getProject()
} }
@@ -65,7 +65,7 @@ public class HierarchySearchRequest<T: PsiElement> (
HierarchySearchRequest(newOriginalElement, searchScope, searchDeeply) HierarchySearchRequest(newOriginalElement, searchScope, searchDeeply)
} }
trait HierarchyTraverser<T> { interface HierarchyTraverser<T> {
protected fun nextElements(current: T): Iterable<T> protected fun nextElements(current: T): Iterable<T>
protected fun shouldDescend(element: T): Boolean protected fun shouldDescend(element: T): Boolean
@@ -16,29 +16,29 @@
package org.jetbrains.kotlin.idea.search.usagesSearch package org.jetbrains.kotlin.idea.search.usagesSearch
import com.intellij.psi.PsiReference
import org.jetbrains.kotlin.idea.search.usagesSearch.*
import org.jetbrains.kotlin.idea.search.usagesSearch.UsagesSearchFilter.*
import java.util.Collections
import java.util.ArrayList
import com.intellij.psi.PsiNamedElement import com.intellij.psi.PsiNamedElement
import com.intellij.psi.PsiReference
import com.intellij.util.Processor import com.intellij.util.Processor
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.kotlin.asJava.LightClassUtil import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.LightClassUtil.PropertyAccessorsPsiMethods import org.jetbrains.kotlin.asJava.LightClassUtil.PropertyAccessorsPsiMethods
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.lexer.JetSingleValueToken
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.idea.references.*
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.idea.references.matchesTarget
import org.jetbrains.kotlin.idea.search.usagesSearch.UsagesSearchFilter.False
import org.jetbrains.kotlin.idea.search.usagesSearch.UsagesSearchFilter.True
import org.jetbrains.kotlin.lexer.JetSingleValueToken
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.psi.psiUtil.effectiveDeclarations
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
import java.util.ArrayList
import java.util.Collections
val isTargetUsage = (PsiReference::matchesTarget).searchFilter val isTargetUsage = (PsiReference::matchesTarget).searchFilter
@@ -130,7 +130,7 @@ public abstract class UsagesSearchHelper<T : PsiNamedElement> {
val isNotImportUsage = !((PsiReference::isImportUsage).searchFilter) val isNotImportUsage = !((PsiReference::isImportUsage).searchFilter)
trait ImportAwareSearchHelper { interface ImportAwareSearchHelper {
public val skipImports: Boolean public val skipImports: Boolean
protected val isFilteredImport: UsagesSearchFilter protected val isFilteredImport: UsagesSearchFilter
@@ -206,7 +206,7 @@ class ClassDeclarationsUsagesSearchHelper(
val isOverrideUsage = (PsiReference::isCallableOverrideUsage).searchFilter val isOverrideUsage = (PsiReference::isCallableOverrideUsage).searchFilter
trait OverrideSearchHelper { interface OverrideSearchHelper {
public val selfUsages: Boolean public val selfUsages: Boolean
public val overrideUsages: Boolean public val overrideUsages: Boolean
@@ -88,7 +88,7 @@ public data class UsagesSearchTarget<out T : PsiElement>(
get() = if (restrictByTargetScope) scope and element.effectiveScope else scope get() = if (restrictByTargetScope) scope and element.effectiveScope else scope
} }
public trait UsagesSearchFilter { public interface UsagesSearchFilter {
object False: UsagesSearchFilter { object False: UsagesSearchFilter {
override fun accepts(ref: PsiReference, item: UsagesSearchRequestItem): Boolean = false override fun accepts(ref: PsiReference, item: UsagesSearchRequestItem): Boolean = false
} }
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.psi.JetPsiFactory
public trait SimpleNameReferenceExtension { public interface SimpleNameReferenceExtension {
companion object { companion object {
public val EP_NAME: ExtensionPointName<SimpleNameReferenceExtension> = ExtensionPointName.create("org.jetbrains.kotlin.simpleNameReferenceExtension")!! public val EP_NAME: ExtensionPointName<SimpleNameReferenceExtension> = ExtensionPointName.create("org.jetbrains.kotlin.simpleNameReferenceExtension")!!
} }