From e85b36cdff76de4ac705d265eee5c315f9a72afa Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 8 Oct 2014 17:27:59 +0400 Subject: [PATCH] Store resolution context for light classes to prevent back-end fail --- .../src/org/jetbrains/jet/codegen/PackageCodegen.java | 2 +- .../caches/resolve/IDELightClassGenerationSupport.java | 2 +- idea/testData/checker/regression/BadParseForClass.kt | 5 +++++ .../jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java | 6 ++++++ 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 idea/testData/checker/regression/BadParseForClass.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index c49b88162cc..8724bc7aa1f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -366,7 +366,7 @@ public class PackageCodegen { SmartList fragments = new SmartList(); for (JetFile file : files) { PackageFragmentDescriptor fragment = state.getBindingContext().get(BindingContext.FILE_TO_PACKAGE_FRAGMENT, file); - assert fragment != null : "package fragment is null for " + file; + assert fragment != null : "package fragment is null for " + file + "\n" + file.getText(); assert expectedFqName.equals(fragment.getFqName()) : "expected package fq name: " + expectedFqName + ", actual: " + fragment.getFqName(); diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java index ef933873727..621e04044e4 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java @@ -87,7 +87,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport if (descriptor == null) { LOG.warn("No class descriptor in context for class: " + JetPsiUtil.getElementTextWithContext(classOrObject)); - return new LightClassConstructionContext(BindingContext.EMPTY, session.getModuleDescriptor()); + return new LightClassConstructionContext(bindingContext, session.getModuleDescriptor()); } ForceResolveUtil.forceResolveAllContents(descriptor); diff --git a/idea/testData/checker/regression/BadParseForClass.kt b/idea/testData/checker/regression/BadParseForClass.kt new file mode 100644 index 00000000000..297cf905bcb --- /dev/null +++ b/idea/testData/checker/regression/BadParseForClass.kt @@ -0,0 +1,5 @@ +fun main(args: Array) { + String.class +} + +// EA-56152: An attempt to build light class in checker to get diagnotics \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java index 852845fe5b2..b6949398b3c 100644 --- a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java @@ -375,6 +375,12 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest { doTest(fileName); } + @TestMetadata("BadParseForClass.kt") + public void testBadParseForClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/checker/regression/BadParseForClass.kt"); + doTest(fileName); + } + @TestMetadata("CoercionToUnit.kt") public void testCoercionToUnit() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/checker/regression/CoercionToUnit.kt");