Report unmet trait requirements in IDE
#KT-3006 Fixed
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
open class Base {
|
||||
}
|
||||
|
||||
trait Derived: Base {
|
||||
fun foo() {
|
||||
f1(this@Derived)
|
||||
}
|
||||
}
|
||||
|
||||
class <error descr="[UNMET_TRAIT_REQUIREMENT] Super trait 'Derived' requires subclasses to extend 'Base'">DerivedImpl()</error>: Derived {}
|
||||
object <error descr="[UNMET_TRAIT_REQUIREMENT] Super trait 'Derived' requires subclasses to extend 'Base'">ObjectImpl</error>: Derived {}
|
||||
|
||||
fun f1(b: Base) = b
|
||||
|
||||
// KT-3006
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user