Navigation: Implement proper getOriginalElement() for Kotlin declarations.

Run find usages tests with library for both original and navigation elements. Drop duplicating tests. Simplify test class.
TODO: Some usages are not found yet since light methods built from library files do not retain original declarations
This commit is contained in:
Alexey Sedunov
2015-06-05 16:28:18 +03:00
parent ba0000dde1
commit ca8e2d4956
69 changed files with 730 additions and 293 deletions
@@ -52,16 +52,16 @@ abstract class JetDeclarationStub<T extends StubElement> extends JetModifierList
return super.getParent();
}
@Override
public PsiElement getOriginalElement() {
KotlinDeclarationNavigationPolicy navigationPolicy = ServiceManager.getService(KotlinDeclarationNavigationPolicy.class);
return navigationPolicy != null ? navigationPolicy.getOriginalElement(this) : this;
}
@NotNull
@Override
public PsiElement getNavigationElement() {
KotlinDeclarationNavigationPolicy navigationPolicy = ServiceManager.getService(KotlinDeclarationNavigationPolicy.class);
if (navigationPolicy != null) {
JetElement navigationElement = navigationPolicy.getNavigationElement(this);
if (navigationElement != null) {
return navigationElement;
}
}
return this;
return navigationPolicy != null ? navigationPolicy.getNavigationElement(this) : this;
}
}
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.psi
public trait KotlinDeclarationNavigationPolicy {
public fun getNavigationElement(declaration: JetDeclaration): JetElement?
public interface KotlinDeclarationNavigationPolicy {
public fun getOriginalElement(declaration: JetDeclaration): JetElement
public fun getNavigationElement(declaration: JetDeclaration): JetElement
}