From 186a9a13a872a8ba4e4e2f724f20f3bf2369a666 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 22 Aug 2014 22:34:25 +0400 Subject: [PATCH] Report unmet trait requirements in IDE #KT-3006 Fixed --- .../jet/lang/resolve/LazyTopDownAnalyzer.java | 3 +++ idea/testData/checker/unmetTraitRequirements.kt | 15 +++++++++++++++ .../jet/checkers/JetPsiCheckerTestGenerated.java | 5 +++++ 3 files changed, 23 insertions(+) create mode 100644 idea/testData/checker/unmetTraitRequirements.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java index e24e49c6ea0..b1ac89f01ee 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.resolve.calls.CallsPackage; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; @@ -246,6 +247,8 @@ public class LazyTopDownAnalyzer { declarationResolver.checkRedeclarationsInPackages(resolveSession, topLevelFqNames); declarationResolver.checkRedeclarationsInInnerClassNames(c); + CallsPackage.checkTraitRequirements(c.getDeclaredClasses(), trace); + overrideResolver.check(c); resolveImportsInAllFiles(c, resolveSession); diff --git a/idea/testData/checker/unmetTraitRequirements.kt b/idea/testData/checker/unmetTraitRequirements.kt new file mode 100644 index 00000000000..5b19d7489a2 --- /dev/null +++ b/idea/testData/checker/unmetTraitRequirements.kt @@ -0,0 +1,15 @@ +open class Base { +} + +trait Derived: Base { + fun foo() { + f1(this@Derived) + } +} + +class DerivedImpl(): Derived {} +object ObjectImpl: Derived {} + +fun f1(b: Base) = b + +// KT-3006 \ 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 19a82b7b0e1..69e6e1c339e 100644 --- a/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/checkers/JetPsiCheckerTestGenerated.java @@ -255,6 +255,11 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest { doTest("idea/testData/checker/trivialHierarchyLoop.kt"); } + @TestMetadata("unmetTraitRequirements.kt") + public void testUnmetTraitRequirements() throws Exception { + doTest("idea/testData/checker/unmetTraitRequirements.kt"); + } + @TestMetadata("UnreachableCode.kt") public void testUnreachableCode() throws Exception { doTest("idea/testData/checker/UnreachableCode.kt");