diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 6299628cde0..ef82396192c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -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; diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java index 509c7352cf0..2fb8ff86550 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java @@ -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(); diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java index 775afe5fb9b..ace2ce42bbb 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java @@ -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()) {