Use light element origin instead of getNavigationElement()

This commit is contained in:
Alexey Sedunov
2014-01-22 20:12:41 +04:00
parent 9eac148555
commit bb04c5fd95
8 changed files with 29 additions and 17 deletions
@@ -21,7 +21,6 @@ import com.intellij.psi.impl.light.AbstractLightClass;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetTypeParameter;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetTypeParameterListOwner;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightElement;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightMethod;
@@ -52,7 +51,10 @@ public class KotlinLightTypeParameter
@NotNull
@Override
public JetTypeParameter getOrigin() {
return ((JetTypeParameterListOwner) owner.getNavigationElement()).getTypeParameters().get(index);
JetTypeParameterListOwner jetOwner = (JetTypeParameterListOwner) AsJavaPackage.getUnwrapped(owner);
assert (jetOwner != null) : "Invalid type parameter owner: " + owner;
return jetOwner.getTypeParameters().get(index);
}
@NotNull
@@ -34,6 +34,8 @@ import com.intellij.psi.PsiTypeParameter
import java.util.ArrayList
import org.jetbrains.jet.lang.psi.JetTypeParameterList
import com.intellij.psi.PsiTypeParameterListOwner
import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightElement
import com.intellij.psi.PsiNamedElement
import com.intellij.psi.PsiNamedElement
import org.jetbrains.jet.lang.psi.JetCallableDeclaration
import org.jetbrains.jet.lang.psi.psiUtil.isExtensionDeclaration
@@ -104,4 +106,11 @@ fun JetTypeParameter.toPsiTypeParameters(): List<PsiTypeParameter> {
return lightOwners?.map { lightOwner -> (lightOwner as PsiTypeParameterListOwner).getTypeParameters()[paramIndex] }
?: Collections.emptyList()
}
}
// Returns original declaration if given PsiElement is a Kotlin light element, and element itself otherwise
val PsiElement.unwrapped: PsiElement?
get() = if (this is KotlinLightElement<*, *>) origin else this
val PsiElement.namedUnwrappedElement: PsiNamedElement?
get() = unwrapped?.getParentByType(javaClass<PsiNamedElement>())