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:
+15
-6
@@ -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();
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package test;
|
||||
|
||||
class EnumAutoGeneratedMethods {
|
||||
void foo() {
|
||||
TestEnum.values();
|
||||
assert TestEnum.valueOf("first") == TestEnum.first;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package test
|
||||
|
||||
enum class TestEnum {
|
||||
first second third
|
||||
}
|
||||
@@ -19,7 +19,6 @@ package org.jetbrains.jet.checkers;
|
||||
import com.intellij.codeInspection.LocalInspectionTool;
|
||||
import com.intellij.codeInspection.nullable.NullableStuffInspection;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.VirtualDirectoryImpl;
|
||||
import com.siyeh.ig.bugs.StaticCallOnSubclassInspection;
|
||||
import com.siyeh.ig.bugs.StaticFieldReferenceOnSubclassInspection;
|
||||
import org.jetbrains.jet.JetTestCaseBuilder;
|
||||
@@ -73,4 +72,8 @@ public class KotlinAndJavaCheckerTest extends KotlinDaemonAnalyzerTestCase {
|
||||
public void testImplementedMethodsFromTraits() throws Exception {
|
||||
doTest(true, true, "ImplementedMethodsFromTraits.java", "ImplementedMethodsFromTraits.kt");
|
||||
}
|
||||
|
||||
public void testEnumAutoGeneratedMethods() throws Exception {
|
||||
doTest(true, true, "EnumAutoGeneratedMethods.java", "EnumAutoGeneratedMethods.kt");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user