Accessing of default parameter value in compiled code via source (if found)
This commit is contained in:
@@ -20,18 +20,29 @@ 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.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText
|
||||
import org.jetbrains.kotlin.psi.JetDeclaration
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.descriptorToKey
|
||||
import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
|
||||
import org.jetbrains.kotlin.psi.JetCallableDeclaration
|
||||
import org.jetbrains.kotlin.psi.JetDeclaration
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
|
||||
|
||||
public abstract class KotlinClsFileBase(provider: FileViewProvider) : JetFile(provider, true) {
|
||||
protected abstract val decompiledText: LockedClearableLazyValue<DecompiledText>
|
||||
|
||||
public fun getDeclarationForDescriptor(descriptor: DeclarationDescriptor): JetDeclaration? {
|
||||
val key = descriptorToKey(descriptor.getOriginal())
|
||||
val original = descriptor.getOriginal()
|
||||
|
||||
if (original is ValueParameterDescriptor) {
|
||||
val callable = original.getContainingDeclaration() as? CallableDescriptor ?: return null
|
||||
val callableDeclaration = getDeclarationForDescriptor(callable) as? JetCallableDeclaration ?: return null
|
||||
return callableDeclaration.getValueParameters()[original.getIndex()]
|
||||
}
|
||||
|
||||
val key = descriptorToKey(original)
|
||||
|
||||
val range = decompiledText.get().renderedDescriptorsToRange[key]
|
||||
return if (range != null) {
|
||||
|
||||
+14
@@ -439,6 +439,20 @@ public class JetSourceNavigationHelper {
|
||||
public JetDeclaration visitClass(@NotNull JetClass klass, Void data) {
|
||||
return getSourceClassOrObject(klass);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JetDeclaration visitParameter(@NotNull JetParameter parameter, Void data) {
|
||||
PsiElement pparent = parameter.getParent().getParent();
|
||||
JetCallableDeclaration callableDeclaration = (JetCallableDeclaration) pparent;
|
||||
List<JetParameter> parameters = callableDeclaration.getValueParameters();
|
||||
int index = parameters.indexOf(parameter);
|
||||
|
||||
JetCallableDeclaration sourceCallable = (JetCallableDeclaration) callableDeclaration.accept(this, null);
|
||||
if (sourceCallable == null) return null;
|
||||
List<JetParameter> sourceParameters = sourceCallable.getValueParameters();
|
||||
if (sourceParameters.size() != parameters.size()) return null;
|
||||
return sourceParameters.get(index);
|
||||
}
|
||||
}
|
||||
|
||||
private static class LibrarySourcesScope extends GlobalSearchScope {
|
||||
|
||||
Reference in New Issue
Block a user