KT-14376 ClassCastException from object with vals

#KT-14376 Fixed
This commit is contained in:
Valentin Kipyatkov
2016-10-26 20:06:11 +03:00
parent 3fb64f4fa6
commit 3d5d2d8258
2 changed files with 12 additions and 2 deletions

View File

@@ -300,7 +300,7 @@ class ResolveElementCache(
is KtAnonymousInitializer -> initializerAdditionalResolve(resolveSession, resolveElement, file, createStatementFilter(), bodyResolveMode.bindingTraceFilter)
is KtPrimaryConstructor -> constructorAdditionalResolve(resolveSession, resolveElement.parent as KtClass, file, bodyResolveMode.bindingTraceFilter)
is KtPrimaryConstructor -> constructorAdditionalResolve(resolveSession, resolveElement.parent as KtClassOrObject, file, bodyResolveMode.bindingTraceFilter)
is KtSecondaryConstructor -> secondaryConstructorAdditionalResolve(resolveSession, resolveElement, file, createStatementFilter(), bodyResolveMode.bindingTraceFilter)
@@ -523,7 +523,7 @@ class ResolveElementCache(
return trace
}
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: KtClass, file: KtFile, filter : BindingTraceFilter): BindingTrace {
private fun constructorAdditionalResolve(resolveSession: ResolveSession, klass: KtClassOrObject, file: KtFile, filter : BindingTraceFilter): BindingTrace {
val trace = createDelegatingTrace(klass, filter)
val scope = resolveSession.declarationScopeProvider.getResolutionScopeForDeclaration(klass)

View File

@@ -24,13 +24,16 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.search.usagesSearch.constructor
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
class ResolveElementCacheTest : KotlinLightCodeInsightFixtureTestCase() {
@@ -501,6 +504,13 @@ class C(param1: String = "", param2: Int = 0) {
}
}
fun testKT14376() {
val file = myFixture.configureByText("Test.kt", "object Obj(val x: Int)") as KtFile
val nameRef = file.findDescendantOfType<KtNameReferenceExpression>()!!
val bindingContext = nameRef.analyze(BodyResolveMode.PARTIAL)
assert(bindingContext[BindingContext.REFERENCE_TARGET, nameRef]?.fqNameSafe?.asString() == "kotlin.Int")
}
private fun checkResolveMultiple(mode: BodyResolveMode, vararg expressions: KtExpression): BindingContext {
val resolutionFacade = expressions.first().getResolutionFacade()
val bindingContext = resolutionFacade.analyze(expressions.asList(), mode)