Fix resolution of Kotlin enums' values() and valueOf() from Java

Use the code from PsiClassImpl / ClsClassImpl, which for some reason is absent
in AbstractLightClass

 #KT-5591 Fixed
This commit is contained in:
Alexander Udalov
2014-09-10 14:37:31 +04:00
parent d4b1797646
commit 70561cc539
4 changed files with 32 additions and 7 deletions
@@ -17,16 +17,14 @@
package org.jetbrains.jet.asJava;
import com.intellij.lang.Language;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiClassImplUtil;
import com.intellij.psi.impl.light.AbstractLightClass;
import com.intellij.psi.impl.light.LightField;
import com.intellij.psi.impl.light.LightMethod;
import com.intellij.psi.impl.source.ClassInnerStuffCache;
import com.intellij.psi.impl.source.PsiExtensibleClass;
import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -114,8 +112,8 @@ public abstract class KotlinWrappingLightClass extends AbstractLightClass implem
public PsiField fun(PsiField field) {
JetDeclaration declaration = ClsWrapperStubPsiFactory.getOriginalDeclaration(field);
return declaration instanceof JetProperty
? new KotlinLightField(myManager, (JetProperty) declaration, field, KotlinWrappingLightClass.this)
: new LightField(myManager, field, KotlinWrappingLightClass.this);
? new KotlinLightField(myManager, (JetProperty) declaration, field, KotlinWrappingLightClass.this)
: new LightField(myManager, field, KotlinWrappingLightClass.this);
}
});
}
@@ -134,6 +132,17 @@ public abstract class KotlinWrappingLightClass extends AbstractLightClass implem
});
}
@Override
public boolean processDeclarations(
@NotNull PsiScopeProcessor processor, @NotNull ResolveState state, PsiElement lastParent, @NotNull PsiElement place
) {
if (isEnum()) {
if (!PsiClassImplUtil.processDeclarationsInEnum(processor, state, myInnersCache)) return false;
}
return super.processDeclarations(processor, state, lastParent, place);
}
@Override
public String getText() {
JetClassOrObject origin = getOrigin();