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
import org.jetbrains.org.objectweb.asm.tree.analysis.*
import org.jetbrains.org.objectweb.asm.Handle
import org.jetbrains.org.objectweb.asm.Opcodes.*
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode
import org.jetbrains.org.objectweb.asm.tree.FieldInsnNode
import org.jetbrains.org.objectweb.asm.tree.IntInsnNode
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
import org.jetbrains.org.objectweb.asm.tree.*
import org.jetbrains.org.objectweb.asm.tree.analysis.AnalyzerException
import org.jetbrains.org.objectweb.asm.tree.analysis.Interpreter
class UnsupportedByteCodeException(message: String) : RuntimeException(message)
public trait Eval {
public interface Eval {
public fun loadClass(classType: Type): Value
public fun loadString(str: String): Value
public fun newInstance(classType: Type): Value
@@ -97,7 +90,7 @@ class SingleInstructionInterpreter(private val eval: Eval) : Interpreter<Value>(
is Double -> double(cst)
is String -> eval.loadString(cst)
is Type -> {
val sort = (cst as Type).getSort()
val sort = cst.getSort()
when (sort) {
Type.OBJECT, Type.ARRAY -> eval.loadClass(cst)
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 java.util.ArrayList
public trait InterpreterResult {
public interface InterpreterResult {
override fun toString(): String
}
@@ -46,7 +46,7 @@ public class AbnormalTermination(public val message: String): InterpreterResult
override fun toString(): String = "Terminated abnormally: $message"
}
public trait InterpretationEventHandler {
public interface InterpretationEventHandler {
object NONE : InterpretationEventHandler {
override fun instructionProcessed(insn: AbstractInsnNode): 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()
if (firstInsn == null) throw IllegalArgumentException("Empty method")
var currentInsn = firstInsn!!
var currentInsn = firstInsn
fun goto(nextInsn: AbstractInsnNode?) {
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.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 valid: Boolean
override fun getSize(): Int = asmType.getSize()
@@ -53,7 +53,7 @@ public fun JetScope.getImplicitReceiversWithInstanceToExpression(): Map<Receiver
val classDescriptor = current as? ClassDescriptor
if (classDescriptor != null && !classDescriptor.isInner() && !DescriptorUtils.isLocal(classDescriptor)) break
current = current!!.getContainingDeclaration()
current = current.getContainingDeclaration()
}
val result = LinkedHashMap<ReceiverParameterDescriptor, ReceiverExpressionFactory?>()
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.resolve.lazy
public trait ProbablyNothingCallableNames {
public interface ProbablyNothingCallableNames {
public fun functionNames(): 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.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
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.psi.*
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.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.types.TypeUtils
import java.util.HashMap
public trait CacheExtension<T> {
public interface CacheExtension<T> {
public val platform: TargetPlatform
public fun getData(resolverProvider: ModuleResolverProvider): T
}
@@ -129,8 +123,8 @@ private class PerFileAnalysisCache(val file: JetFile, val resolveSession: Resolv
descendantsOfCurrent.clear()
}
descendantsOfCurrent.add(current!!)
current = current!!.getParent()
descendantsOfCurrent.add(current)
current = current.getParent()
}
cache.keySet().removeAll(toRemove)
@@ -111,7 +111,7 @@ private fun collectAllModuleInfosFromIdeaModel(project: Project): List<IdeaModul
return collectAllModuleInfos
}
trait ModuleResolverProvider {
interface ModuleResolverProvider {
val exceptionTracker: ExceptionTracker
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.scopes.JetScope
public trait ResolutionFacade {
public interface ResolutionFacade {
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 {
return synchronized(cachedValue) {
cachedValue.getValue() as V
cachedValue.getValue()
}
}
}
@@ -59,7 +59,7 @@ private fun Project.getOrCreateElementsToShorten(): MutableSet<ShorteningRequest
elementsToShorten = elements
}
return elements!!
return elements
}
public fun JetElement.addToShorteningWaitSet(options: Options = Options.DEFAULT) {
@@ -17,10 +17,8 @@
package org.jetbrains.kotlin.idea.decompiler
import com.intellij.openapi.util.TextRange
import com.intellij.psi.FileViewProvider
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
@@ -39,7 +37,7 @@ public abstract class KotlinClsFileBase(val provider: KotlinClassFileViewProvide
val original = descriptor.getOriginal()
if (original is ValueParameterDescriptor) {
val callable = original.getContainingDeclaration() as? CallableDescriptor ?: return null
val callable = original.getContainingDeclaration()
val callableDeclaration = getDeclarationForDescriptor(callable) as? JetCallableDeclaration ?: return null
return callableDeclaration.getValueParameters()[original.getIndex()]
}
@@ -107,7 +107,7 @@ private class ClassClsStubBuilder(
val superTypeRefs = supertypeIds.filterNot {
//TODO: filtering function types should go away
KotlinBuiltIns.isNumberedFunctionClassFqName(it.asSingleFqName().toUnsafe())
}.map { it.getShortClassName().ref()!! }.toTypedArray()
}.map { it.getShortClassName().ref() }.toTypedArray()
return when (classKind) {
ProtoBuf.Class.Kind.OBJECT, ProtoBuf.Class.Kind.CLASS_OBJECT -> {
KotlinObjectStubImpl(
@@ -23,12 +23,11 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
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.ErrorReporter
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
import org.jetbrains.kotlin.serialization.deserialization.AnnotationAndConstantLoader
class ClsStubBuilderComponents(
val classDataFinder: ClassDataFinder,
@@ -42,7 +41,7 @@ class ClsStubBuilderComponents(
}
}
trait TypeParameters {
interface TypeParameters {
fun get(id: Int): Name
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)
for ((name, type) in protosForTypeConstraintList) {
val typeConstraintStub = KotlinPlaceHolderStubImpl<JetTypeConstraint>(typeConstraintListStub, JetStubElementTypes.TYPE_CONSTRAINT)
KotlinNameReferenceExpressionStubImpl(typeConstraintStub, name.ref()!!)
KotlinNameReferenceExpressionStubImpl(typeConstraintStub, name.ref())
createTypeReferenceStub(typeConstraintStub, type)
}
}
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.name.ClassId
public trait ResolverForDecompiler {
public interface ResolverForDecompiler {
public fun resolveTopLevelClass(classId: ClassId): ClassDescriptor?
public fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor>
@@ -173,7 +173,7 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
@Override
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) {
builder.append(",");
}
@@ -16,16 +16,16 @@
package org.jetbrains.kotlin.idea.highlighter
import com.intellij.codeInspection.SuppressIntentionAction
import com.intellij.codeInspection.SuppressableProblemGroup
import com.intellij.psi.PsiElement
import com.intellij.codeInspection.SuppressIntentionAction
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
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.psi.*
import org.jetbrains.kotlin.idea.quickfix.AnnotationHostKind
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import java.util.Collections
class KotlinSuppressableWarningProblemGroup(
private val diagnosticFactory: DiagnosticFactory<*>
@@ -55,7 +55,7 @@ fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: Diagnos
var suppressAtStatementAllowed = true
while (current != null) {
if (current is JetDeclaration) {
val declaration = current as JetDeclaration
val declaration = current
val kind = DeclarationKindDetector.detect(declaration)
if (kind != null) {
actions.add(KotlinSuppressIntentionAction(declaration, diagnosticFactory, kind))
@@ -64,15 +64,14 @@ fun createSuppressWarningActions(element: PsiElement, diagnosticFactory: Diagnos
}
else if (current is JetExpression && suppressAtStatementAllowed) {
// Add suppress action at first statement
if ((current as PsiElement).getParent() is JetBlockExpression) {
val expression = current as JetExpression
actions.add(KotlinSuppressIntentionAction(expression, diagnosticFactory,
if (current.getParent() is JetBlockExpression) {
actions.add(KotlinSuppressIntentionAction(current, diagnosticFactory,
AnnotationHostKind("statement", "", true)))
suppressAtStatementAllowed = false
}
}
current = current?.getParent()
current = current.getParent()
}
return actions
}
@@ -29,12 +29,12 @@ import java.util.HashSet
import com.intellij.openapi.progress.ProgressIndicatorProvider
import org.jetbrains.kotlin.psi.psiUtil.contains
trait DeclarationSearchRequest<in T> {
interface DeclarationSearchRequest<in T> {
val project: Project
val searchScope: SearchScope
}
public trait SearchRequestWithElement<T : PsiElement> : DeclarationSearchRequest<T> {
public interface SearchRequestWithElement<T : PsiElement> : DeclarationSearchRequest<T> {
val originalElement: T
override val project: Project get() = originalElement.getProject()
}
@@ -65,7 +65,7 @@ public class HierarchySearchRequest<T: PsiElement> (
HierarchySearchRequest(newOriginalElement, searchScope, searchDeeply)
}
trait HierarchyTraverser<T> {
interface HierarchyTraverser<T> {
protected fun nextElements(current: T): Iterable<T>
protected fun shouldDescend(element: T): Boolean
@@ -16,29 +16,29 @@
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.PsiReference
import com.intellij.util.Processor
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.kotlin.asJava.LightClassUtil
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.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.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.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.utils.addToStdlib.singletonOrEmptyList
import java.util.ArrayList
import java.util.Collections
val isTargetUsage = (PsiReference::matchesTarget).searchFilter
@@ -130,7 +130,7 @@ public abstract class UsagesSearchHelper<T : PsiNamedElement> {
val isNotImportUsage = !((PsiReference::isImportUsage).searchFilter)
trait ImportAwareSearchHelper {
interface ImportAwareSearchHelper {
public val skipImports: Boolean
protected val isFilteredImport: UsagesSearchFilter
@@ -206,7 +206,7 @@ class ClassDeclarationsUsagesSearchHelper(
val isOverrideUsage = (PsiReference::isCallableOverrideUsage).searchFilter
trait OverrideSearchHelper {
interface OverrideSearchHelper {
public val selfUsages: 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
}
public trait UsagesSearchFilter {
public interface UsagesSearchFilter {
object False: UsagesSearchFilter {
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 org.jetbrains.kotlin.psi.JetPsiFactory
public trait SimpleNameReferenceExtension {
public interface SimpleNameReferenceExtension {
companion object {
public val EP_NAME: ExtensionPointName<SimpleNameReferenceExtension> = ExtensionPointName.create("org.jetbrains.kotlin.simpleNameReferenceExtension")!!
}