Add support of local classes/objects declared in class constructor parameters
This commit is contained in:
@@ -1006,7 +1006,7 @@ public class JetPsiUtil {
|
|||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
JetElement container = PsiTreeUtil.getParentOfType(
|
JetElement container = PsiTreeUtil.getParentOfType(
|
||||||
declaration,
|
declaration,
|
||||||
JetBlockExpression.class, JetClassInitializer.class, JetProperty.class, JetFunction.class
|
JetBlockExpression.class, JetClassInitializer.class, JetProperty.class, JetFunction.class, JetParameter.class
|
||||||
);
|
);
|
||||||
if (container == null) return null;
|
if (container == null) return null;
|
||||||
|
|
||||||
|
|||||||
+10
-1
@@ -39,6 +39,7 @@ import com.intellij.psi.search.GlobalSearchScope;
|
|||||||
import com.intellij.psi.stubs.PsiClassHolderFileStub;
|
import com.intellij.psi.stubs.PsiClassHolderFileStub;
|
||||||
import com.intellij.psi.util.CachedValue;
|
import com.intellij.psi.util.CachedValue;
|
||||||
import com.intellij.psi.util.CachedValuesManager;
|
import com.intellij.psi.util.CachedValuesManager;
|
||||||
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import com.intellij.reference.SoftReference;
|
import com.intellij.reference.SoftReference;
|
||||||
import com.intellij.util.ArrayUtil;
|
import com.intellij.util.ArrayUtil;
|
||||||
import com.intellij.util.IncorrectOperationException;
|
import com.intellij.util.IncorrectOperationException;
|
||||||
@@ -106,9 +107,13 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
|||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
PsiElement declaration = JetPsiUtil.getTopmostParentOfTypes(
|
PsiElement declaration = JetPsiUtil.getTopmostParentOfTypes(
|
||||||
classOrObject,
|
classOrObject,
|
||||||
JetNamedFunction.class, JetProperty.class, JetClassInitializer.class
|
JetNamedFunction.class, JetProperty.class, JetClassInitializer.class, JetParameter.class
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (declaration instanceof JetParameter) {
|
||||||
|
declaration = PsiTreeUtil.getParentOfType(declaration, JetNamedDeclaration.class);
|
||||||
|
}
|
||||||
|
|
||||||
if (declaration instanceof JetNamedFunction) {
|
if (declaration instanceof JetNamedFunction) {
|
||||||
JetNamedFunction function = (JetNamedFunction) declaration;
|
JetNamedFunction function = (JetNamedFunction) declaration;
|
||||||
return getParentByPsiMethod(LightClassUtil.getLightClassMethod(function), function.getName(), false);
|
return getParentByPsiMethod(LightClassUtil.getLightClassMethod(function), function.getName(), false);
|
||||||
@@ -128,6 +133,10 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
|||||||
return LightClassUtil.getPsiClass((JetClassOrObject) grandparent);
|
return LightClassUtil.getPsiClass((JetClassOrObject) grandparent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (declaration instanceof JetClass) {
|
||||||
|
return LightClassUtil.getPsiClass((JetClass) declaration);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return classOrObject.getParent() == classOrObject.getContainingFile() ? getContainingFile() : getContainingClass();
|
return classOrObject.getParent() == classOrObject.getContainingFile() ? getContainingFile() : getContainingClass();
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ public class ResolveElementCache {
|
|||||||
JetNamedFunction.class,
|
JetNamedFunction.class,
|
||||||
JetClassInitializer.class,
|
JetClassInitializer.class,
|
||||||
JetProperty.class,
|
JetProperty.class,
|
||||||
|
JetParameter.class,
|
||||||
JetDelegationSpecifierList.class,
|
JetDelegationSpecifierList.class,
|
||||||
JetImportDirective.class,
|
JetImportDirective.class,
|
||||||
JetAnnotationEntry.class,
|
JetAnnotationEntry.class,
|
||||||
@@ -95,7 +96,7 @@ public class ResolveElementCache {
|
|||||||
JetTypeConstraint.class,
|
JetTypeConstraint.class,
|
||||||
JetNamespaceHeader.class);
|
JetNamespaceHeader.class);
|
||||||
|
|
||||||
if (elementOfAdditionalResolve != null) {
|
if (elementOfAdditionalResolve != null && !(elementOfAdditionalResolve instanceof JetParameter)) {
|
||||||
if (elementOfAdditionalResolve instanceof JetNamespaceHeader) {
|
if (elementOfAdditionalResolve instanceof JetNamespaceHeader) {
|
||||||
elementOfAdditionalResolve = jetElement;
|
elementOfAdditionalResolve = jetElement;
|
||||||
}
|
}
|
||||||
@@ -103,7 +104,7 @@ public class ResolveElementCache {
|
|||||||
return additionalResolveCache.getValue().invoke(elementOfAdditionalResolve);
|
return additionalResolveCache.getValue().invoke(elementOfAdditionalResolve);
|
||||||
}
|
}
|
||||||
|
|
||||||
JetParameter parameter = PsiTreeUtil.getTopmostParentOfType(jetElement, JetParameter.class);
|
JetParameter parameter = (JetParameter) elementOfAdditionalResolve;
|
||||||
if (parameter != null) {
|
if (parameter != null) {
|
||||||
JetClass klass = PsiTreeUtil.getParentOfType(parameter, JetClass.class);
|
JetClass klass = PsiTreeUtil.getParentOfType(parameter, JetClass.class);
|
||||||
if (klass != null && parameter.getParent() == klass.getPrimaryConstructorParameterList()) {
|
if (klass != null && parameter.getParent() == klass.getPrimaryConstructorParameterList()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user