From 44d86da1cd8cf7baee388b0a57633724eb2efa08 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 3 Mar 2015 13:03:58 +0300 Subject: [PATCH] Convert DescriptorToSourceUtils to Kotlin. Auto-convert. --- .../kotlin/resolve/DescriptorToSourceUtils.kt | 139 ++++++++---------- 1 file changed, 65 insertions(+), 74 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt index ad8057ae9be..93e4e092268 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorToSourceUtils.kt @@ -14,93 +14,84 @@ * limitations under the License. */ -package org.jetbrains.kotlin.resolve; +package org.jetbrains.kotlin.resolve -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource; -import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor; -import org.jetbrains.kotlin.psi.JetFile; -import org.jetbrains.kotlin.resolve.source.SourcePackage; +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource +import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor +import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.resolve.source.* -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.ArrayList -import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION; -import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED; +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED -public final class DescriptorToSourceUtils { - private static void collectEffectiveReferencedDescriptors(@NotNull List result, @NotNull DeclarationDescriptor descriptor) { - if (descriptor instanceof CallableMemberDescriptor) { - CallableMemberDescriptor.Kind kind = ((CallableMemberDescriptor) descriptor).getKind(); - if (kind != DECLARATION && kind != SYNTHESIZED) { - for (DeclarationDescriptor overridden: ((CallableMemberDescriptor) descriptor).getOverriddenDescriptors()) { - collectEffectiveReferencedDescriptors(result, overridden.getOriginal()); +public class DescriptorToSourceUtils private() { + class object { + private fun collectEffectiveReferencedDescriptors(result: MutableList, descriptor: DeclarationDescriptor) { + if (descriptor is CallableMemberDescriptor) { + val kind = (descriptor as CallableMemberDescriptor).getKind() + if (kind != DECLARATION && kind != SYNTHESIZED) { + for (overridden in (descriptor as CallableMemberDescriptor).getOverriddenDescriptors()) { + collectEffectiveReferencedDescriptors(result, overridden.getOriginal()) + } + return } - return; } + result.add(descriptor) } - result.add(descriptor); - } - @NotNull - public static Collection getEffectiveReferencedDescriptors(@NotNull DeclarationDescriptor descriptor) { - List result = new ArrayList(); - collectEffectiveReferencedDescriptors(result, descriptor.getOriginal()); - return result; - } - - @Nullable - public static PsiElement getSourceFromDescriptor(@NotNull DeclarationDescriptor descriptor) { - if (!(descriptor instanceof DeclarationDescriptorWithSource)) { - return null; + public fun getEffectiveReferencedDescriptors(descriptor: DeclarationDescriptor): Collection { + val result = ArrayList() + collectEffectiveReferencedDescriptors(result, descriptor.getOriginal()) + return result } - return SourcePackage.getPsi(((DeclarationDescriptorWithSource) descriptor).getSource()); - } - // NOTE this is also used by KDoc - @Nullable - public static PsiElement descriptorToDeclaration(@NotNull DeclarationDescriptor descriptor) { - for (DeclarationDescriptor declarationDescriptor : getEffectiveReferencedDescriptors(descriptor.getOriginal())) { - PsiElement source = getSourceFromDescriptor(declarationDescriptor); - if (source != null) { - return source; + public fun getSourceFromDescriptor(descriptor: DeclarationDescriptor): PsiElement? { + if (!(descriptor is DeclarationDescriptorWithSource)) { + return null } + return (descriptor as DeclarationDescriptorWithSource).getSource().getPsi() } - return null; - } - @Nullable - public static JetFile getContainingFile(@NotNull DeclarationDescriptor declarationDescriptor) { - // declarationDescriptor may describe a synthesized element which doesn't have PSI - // To workaround that, we find a top-level parent (which is inside a PackageFragmentDescriptor), which is guaranteed to have PSI - DeclarationDescriptor descriptor = findTopLevelParent(declarationDescriptor); - if (descriptor == null) return null; - - PsiElement declaration = descriptorToDeclaration(descriptor); - if (declaration == null) return null; - - PsiFile containingFile = declaration.getContainingFile(); - if (!(containingFile instanceof JetFile)) return null; - return (JetFile) containingFile; - } - - @Nullable - private static DeclarationDescriptor findTopLevelParent(@NotNull DeclarationDescriptor declarationDescriptor) { - DeclarationDescriptor descriptor = declarationDescriptor; - if (declarationDescriptor instanceof PropertyAccessorDescriptor) { - descriptor = ((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty(); + // NOTE this is also used by KDoc + public fun descriptorToDeclaration(descriptor: DeclarationDescriptor): PsiElement? { + for (declarationDescriptor in getEffectiveReferencedDescriptors(descriptor.getOriginal())) { + val source = getSourceFromDescriptor(declarationDescriptor) + if (source != null) { + return source + } + } + return null } - while (!(descriptor == null || DescriptorUtils.isTopLevelDeclaration(descriptor))) { - descriptor = descriptor.getContainingDeclaration(); - } - return descriptor; - } - private DescriptorToSourceUtils() {} + public fun getContainingFile(declarationDescriptor: DeclarationDescriptor): JetFile? { + // declarationDescriptor may describe a synthesized element which doesn't have PSI + // To workaround that, we find a top-level parent (which is inside a PackageFragmentDescriptor), which is guaranteed to have PSI + val descriptor = findTopLevelParent(declarationDescriptor) + if (descriptor == null) return null + + val declaration = descriptorToDeclaration(descriptor) + if (declaration == null) return null + + val containingFile = declaration.getContainingFile() + if (!(containingFile is JetFile)) return null + return containingFile as JetFile + } + + private fun findTopLevelParent(declarationDescriptor: DeclarationDescriptor): DeclarationDescriptor? { + var descriptor: DeclarationDescriptor? = declarationDescriptor + if (declarationDescriptor is PropertyAccessorDescriptor) { + descriptor = (descriptor as PropertyAccessorDescriptor).getCorrespondingProperty() + } + while (!(descriptor == null || DescriptorUtils.isTopLevelDeclaration(descriptor))) { + descriptor = descriptor!!.getContainingDeclaration() + } + return descriptor + } + } }