Use original descriptor when trying to obtain source

Also refine `getOriginal` of `DeclarationDescriptorWithSource` for comfortable use
This commit is contained in:
Denis Zharkov
2015-06-17 17:44:38 +03:00
parent 0375e45936
commit a551f21e9f
5 changed files with 14 additions and 3 deletions
@@ -21,4 +21,8 @@ import org.jetbrains.annotations.NotNull;
public interface DeclarationDescriptorWithSource extends DeclarationDescriptor { public interface DeclarationDescriptorWithSource extends DeclarationDescriptor {
@NotNull @NotNull
SourceElement getSource(); SourceElement getSource();
@Override
@NotNull
DeclarationDescriptorWithSource getOriginal();
} }
@@ -66,7 +66,7 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor {
@NotNull @NotNull
@Override @Override
public DeclarationDescriptor getOriginal() { public DeclarationDescriptorWithSource getOriginal() {
return this; return this;
} }
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.descriptors.impl;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorNonRoot; import org.jetbrains.kotlin.descriptors.DeclarationDescriptorNonRoot;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource;
import org.jetbrains.kotlin.descriptors.SourceElement; import org.jetbrains.kotlin.descriptors.SourceElement;
import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
@@ -45,6 +46,12 @@ public abstract class DeclarationDescriptorNonRootImpl
this.source = source; this.source = source;
} }
@NotNull
@Override
public DeclarationDescriptorWithSource getOriginal() {
return (DeclarationDescriptorWithSource) super.getOriginal();
}
@Override @Override
@NotNull @NotNull
public DeclarationDescriptor getContainingDeclaration() { public DeclarationDescriptor getContainingDeclaration() {
@@ -146,7 +146,7 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor {
@NotNull @NotNull
@Override @Override
public DeclarationDescriptor getOriginal() { public DeclarationDescriptorWithSource getOriginal() {
return original.getOriginal(); return original.getOriginal();
} }
@@ -104,7 +104,7 @@ private fun JavaDescriptorResolver.getContainingScope(member: JavaMember): JetSc
private fun <T : DeclarationDescriptorWithSource> Collection<T>.findByJavaElement(javaElement: JavaElement): T? { private fun <T : DeclarationDescriptorWithSource> Collection<T>.findByJavaElement(javaElement: JavaElement): T? {
return firstOrNull { member -> return firstOrNull { member ->
val memberJavaElement = (member.getSource() as? JavaSourceElement)?.javaElement val memberJavaElement = (member.getOriginal().getSource() as? JavaSourceElement)?.javaElement
when { when {
memberJavaElement == javaElement -> memberJavaElement == javaElement ->
true true