Clean code

This commit is contained in:
Michael Bogdanov
2015-03-12 14:52:57 +03:00
parent 3a5b55fc61
commit ac8e98572e
2 changed files with 28 additions and 46 deletions
@@ -37,7 +37,6 @@ import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder; import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder;
import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.ClassId;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.name.FqNameUnsafe;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.psi.JetFile;
@@ -45,7 +44,6 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage; import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage;
import org.jetbrains.kotlin.resolve.jvm.AsmTypes; import org.jetbrains.kotlin.resolve.jvm.AsmTypes;
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
import org.jetbrains.kotlin.serialization.ProtoBuf; import org.jetbrains.kotlin.serialization.ProtoBuf;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor; import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor;
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf; import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf;
@@ -61,7 +59,8 @@ import java.io.StringWriter;
import java.util.Arrays; import java.util.Arrays;
import java.util.ListIterator; import java.util.ListIterator;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isTrait;
public class InlineCodegenUtil { public class InlineCodegenUtil {
public static final int API = Opcodes.ASM5; public static final int API = Opcodes.ASM5;
@@ -365,22 +364,10 @@ public class InlineCodegenUtil {
return new MethodNode(API, 0, "fake", "()V", null, null); return new MethodNode(API, 0, "fake", "()V", null, null);
} }
private static boolean isLastGoto(@NotNull AbstractInsnNode insnNode, @NotNull AbstractInsnNode stopAt) {
if (insnNode.getOpcode() == Opcodes.GOTO) {
insnNode = insnNode.getNext();
while (insnNode != stopAt && isLineNumberOrLabel(insnNode)) {
insnNode = insnNode.getNext();
}
return stopAt == insnNode;
}
return false;
}
static boolean isLineNumberOrLabel(@Nullable AbstractInsnNode node) { static boolean isLineNumberOrLabel(@Nullable AbstractInsnNode node) {
return node instanceof LineNumberNode || node instanceof LabelNode; return node instanceof LineNumberNode || node instanceof LabelNode;
} }
@NotNull @NotNull
public static LabelNode firstLabelInChain(@NotNull LabelNode node) { public static LabelNode firstLabelInChain(@NotNull LabelNode node) {
LabelNode curNode = node; LabelNode curNode = node;
@@ -255,19 +255,14 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult
return myDebugProcess.getRequestsManager().createClassPrepareRequest(classPrepareRequestor, className.replace('/', '.')) return myDebugProcess.getRequestsManager().createClassPrepareRequest(classPrepareRequestor, className.replace('/', '.'))
} }
override fun createPrepareRequests(classPrepareRequestor: ClassPrepareRequestor, sourcePosition: SourcePosition): MutableList<ClassPrepareRequest> { override fun createPrepareRequests(requestor: ClassPrepareRequestor, position: SourcePosition): List<ClassPrepareRequest> {
if (sourcePosition.getFile() !is JetFile) { if (position.getFile() !is JetFile) {
throw NoDataException.INSTANCE throw NoDataException.INSTANCE
} }
val classNames = classNameForPositionAndInlinedOnes(sourcePosition)
if (classNames.isEmpty()) { return classNameForPositionAndInlinedOnes(position).map {
return Collections.emptyList() className -> myDebugProcess.getRequestsManager().createClassPrepareRequest(requestor, className.replace('/', '.'))
} }
val requests = arrayListOf<ClassPrepareRequest>()
for (className in classNames) {
requests.add(myDebugProcess.getRequestsManager().createClassPrepareRequest(classPrepareRequestor, className.replace('/', '.')))
}
return requests
} }
TestOnly TestOnly
@@ -436,36 +431,36 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult
} }
private fun findInlinedCalls(element: PsiElement?, jetFile: PsiFile?): List<String> { private fun findInlinedCalls(element: PsiElement?, jetFile: PsiFile?): List<String> {
if (element == null || jetFile !is JetFile) {
return emptyList()
}
return runReadAction { return runReadAction {
var result = emptyList<String>() val result = arrayListOf<String>()
if (element != null && jetFile is JetFile) { val isInLibrary = LibraryUtil.findLibraryEntry(jetFile.getVirtualFile(), jetFile.getProject()) != null
val isInLibrary = LibraryUtil.findLibraryEntry(jetFile.getVirtualFile(), jetFile.getProject()) != null val typeMapper = if (!isInLibrary) prepareTypeMapper(jetFile) else createTypeMapperForLibraryFile(element, jetFile)
val typeMapper = if (!isInLibrary) prepareTypeMapper(jetFile) else createTypeMapperForLibraryFile(element, jetFile) val psiElement = getInternalClassNameForElement(element, typeMapper, jetFile, isInLibrary).element;
val psiElement = getInternalClassNameForElement(element, typeMapper, jetFile, isInLibrary).element;
if (psiElement is JetNamedFunction) { if (psiElement is JetNamedFunction) {
val descriptor = typeMapper.getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, psiElement) val descriptor = typeMapper.getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, psiElement)
if (descriptor is SimpleFunctionDescriptor && descriptor.getInlineStrategy().isInline()) {
val project = myDebugProcess.getProject() if (descriptor is SimpleFunctionDescriptor && descriptor.getInlineStrategy().isInline()) {
val usagesSearchTarget = FindUsagesOptions(project).toSearchTarget(psiElement, true) val project = myDebugProcess.getProject()
val usagesSearchTarget = FindUsagesOptions(project).toSearchTarget(psiElement, true)
result = arrayListOf<String>() val usagesSearchRequest = DefaultSearchHelper<JetNamedFunction>(true).newRequest(usagesSearchTarget)
val usagesSearchRequest = DefaultSearchHelper<JetNamedFunction>(true).newRequest(usagesSearchTarget) usagesSearchRequest.search().forEach {
usagesSearchRequest.search().forEach { val psiElement = it.getElement()
val psiElement = it.getElement() if (psiElement is JetElement) {
if (psiElement is JetElement) { //TODO recursive search
//TODO recursive search val name = classNameForPosition(psiElement)
val name = classNameForPosition(psiElement) if (name != null) {
if (name != null) { result.add(name)
(result as MutableList<String>).add(name)
}
} }
} }
} }
} }
} }
result result
} }
} }