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
|
||||
JetElement container = PsiTreeUtil.getParentOfType(
|
||||
declaration,
|
||||
JetBlockExpression.class, JetClassInitializer.class, JetProperty.class, JetFunction.class
|
||||
JetBlockExpression.class, JetClassInitializer.class, JetProperty.class, JetFunction.class, JetParameter.class
|
||||
);
|
||||
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.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.reference.SoftReference;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -106,9 +107,13 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
//noinspection unchecked
|
||||
PsiElement declaration = JetPsiUtil.getTopmostParentOfTypes(
|
||||
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) {
|
||||
JetNamedFunction function = (JetNamedFunction) declaration;
|
||||
return getParentByPsiMethod(LightClassUtil.getLightClassMethod(function), function.getName(), false);
|
||||
@@ -128,6 +133,10 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
return LightClassUtil.getPsiClass((JetClassOrObject) grandparent);
|
||||
}
|
||||
}
|
||||
|
||||
if (declaration instanceof JetClass) {
|
||||
return LightClassUtil.getPsiClass((JetClass) declaration);
|
||||
}
|
||||
}
|
||||
|
||||
return classOrObject.getParent() == classOrObject.getContainingFile() ? getContainingFile() : getContainingClass();
|
||||
|
||||
@@ -88,6 +88,7 @@ public class ResolveElementCache {
|
||||
JetNamedFunction.class,
|
||||
JetClassInitializer.class,
|
||||
JetProperty.class,
|
||||
JetParameter.class,
|
||||
JetDelegationSpecifierList.class,
|
||||
JetImportDirective.class,
|
||||
JetAnnotationEntry.class,
|
||||
@@ -95,7 +96,7 @@ public class ResolveElementCache {
|
||||
JetTypeConstraint.class,
|
||||
JetNamespaceHeader.class);
|
||||
|
||||
if (elementOfAdditionalResolve != null) {
|
||||
if (elementOfAdditionalResolve != null && !(elementOfAdditionalResolve instanceof JetParameter)) {
|
||||
if (elementOfAdditionalResolve instanceof JetNamespaceHeader) {
|
||||
elementOfAdditionalResolve = jetElement;
|
||||
}
|
||||
@@ -103,7 +104,7 @@ public class ResolveElementCache {
|
||||
return additionalResolveCache.getValue().invoke(elementOfAdditionalResolve);
|
||||
}
|
||||
|
||||
JetParameter parameter = PsiTreeUtil.getTopmostParentOfType(jetElement, JetParameter.class);
|
||||
JetParameter parameter = (JetParameter) elementOfAdditionalResolve;
|
||||
if (parameter != null) {
|
||||
JetClass klass = PsiTreeUtil.getParentOfType(parameter, JetClass.class);
|
||||
if (klass != null && parameter.getParent() == klass.getPrimaryConstructorParameterList()) {
|
||||
|
||||
Reference in New Issue
Block a user