Simplified JetClsNavigationPolicy.
This commit is contained in:
@@ -27,68 +27,58 @@ public class JetClsNavigationPolicy implements ClsCustomNavigationPolicy {
|
|||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public PsiElement getNavigationElement(@NotNull ClsClassImpl clsClass) {
|
public PsiElement getNavigationElement(@NotNull ClsClassImpl clsClass) {
|
||||||
JetClassOrObject jetClassOrObject = (JetClassOrObject) getJetDeclarationByClsElement(clsClass);
|
return getNavigationElementForMember(clsClass);
|
||||||
if (jetClassOrObject != null) {
|
|
||||||
JetClassOrObject sourceClass = JetSourceNavigationHelper.getSourceClassOrObject(jetClassOrObject);
|
|
||||||
if (sourceClass != null) {
|
|
||||||
return sourceClass;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return jetClassOrObject;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public PsiElement getNavigationElement(@NotNull ClsMethodImpl clsMethod) {
|
public PsiElement getNavigationElement(@NotNull ClsMethodImpl clsMethod) {
|
||||||
JetDeclaration jetDeclaration = getJetDeclarationByClsElement(clsMethod);
|
return getNavigationElementForMember(clsMethod);
|
||||||
if (jetDeclaration instanceof JetProperty) {
|
|
||||||
JetDeclaration sourceProperty = JetSourceNavigationHelper.getSourceProperty((JetProperty) jetDeclaration);
|
|
||||||
if (sourceProperty != null) {
|
|
||||||
return sourceProperty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (jetDeclaration instanceof JetFunction) {
|
|
||||||
JetDeclaration sourceFunction = JetSourceNavigationHelper.getSourceFunction((JetFunction) jetDeclaration);
|
|
||||||
if (sourceFunction != null) {
|
|
||||||
return sourceFunction;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (jetDeclaration instanceof JetClass) {
|
|
||||||
assert clsMethod.getReturnType() == null; // constructor
|
|
||||||
JetClassOrObject sourceClass = JetSourceNavigationHelper.getSourceClassOrObject((JetClass) jetDeclaration);
|
|
||||||
if (sourceClass != null) {
|
|
||||||
return sourceClass;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return jetDeclaration;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public PsiElement getNavigationElement(@NotNull ClsFieldImpl clsField) {
|
public PsiElement getNavigationElement(@NotNull ClsFieldImpl clsField) {
|
||||||
JetDeclaration jetDeclaration = getJetDeclarationByClsElement(clsField);
|
return getNavigationElementForMember(clsField);
|
||||||
if (jetDeclaration instanceof JetProperty) {
|
|
||||||
JetDeclaration sourceProperty = JetSourceNavigationHelper.getSourceProperty((JetProperty) jetDeclaration);
|
|
||||||
if (sourceProperty != null) {
|
|
||||||
return sourceProperty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (jetDeclaration instanceof JetClassOrObject) {
|
|
||||||
JetClassOrObject sourceClass = JetSourceNavigationHelper.getSourceClassOrObject((JetClassOrObject) jetDeclaration);
|
|
||||||
if (sourceClass != null) {
|
|
||||||
return sourceClass;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return jetDeclaration;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static JetDeclaration getJetDeclarationByClsElement(ClsElementImpl clsElement) {
|
private static PsiElement getNavigationElementForMember(@NotNull ClsMemberImpl clsMember) {
|
||||||
VirtualFile virtualFile = clsElement.getContainingFile().getVirtualFile();
|
VirtualFile virtualFile = clsMember.getContainingFile().getVirtualFile();
|
||||||
if (virtualFile == null || !JetDecompiledData.isKotlinFile(clsElement.getProject(), virtualFile)) {
|
if (virtualFile == null || !JetDecompiledData.isKotlinFile(clsMember.getProject(), virtualFile)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
JetDecompiledData decompiledData = JetDecompiledData.getDecompiledData((ClsFileImpl) clsElement.getContainingFile());
|
|
||||||
return decompiledData.getJetDeclarationByClsElement(clsElement);
|
JetDecompiledData decompiledData = JetDecompiledData.getDecompiledData((ClsFileImpl) clsMember.getContainingFile());
|
||||||
|
JetDeclaration decompiledDeclaration = decompiledData.getJetDeclarationByClsElement(clsMember);
|
||||||
|
|
||||||
|
if (decompiledDeclaration == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
JetDeclaration sourceElement = decompiledDeclaration.accept(new SourceForDecompiledExtractingVisitor(), null);
|
||||||
|
return sourceElement != null ? sourceElement : decompiledDeclaration;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class SourceForDecompiledExtractingVisitor extends JetVisitor<JetDeclaration, Void> {
|
||||||
|
@Override
|
||||||
|
public JetDeclaration visitNamedFunction(JetNamedFunction function, Void data) {
|
||||||
|
return JetSourceNavigationHelper.getSourceFunction(function);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JetDeclaration visitProperty(JetProperty property, Void data) {
|
||||||
|
return JetSourceNavigationHelper.getSourceProperty(property);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JetDeclaration visitObjectDeclaration(JetObjectDeclaration declaration, Void data) {
|
||||||
|
return JetSourceNavigationHelper.getSourceClassOrObject(declaration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JetDeclaration visitClass(JetClass klass, Void data) {
|
||||||
|
return JetSourceNavigationHelper.getSourceClassOrObject(klass);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user