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.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
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.KotlinCodeAnalyzer;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope;
|
import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
|
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
|
||||||
@@ -246,6 +247,8 @@ public class LazyTopDownAnalyzer {
|
|||||||
declarationResolver.checkRedeclarationsInPackages(resolveSession, topLevelFqNames);
|
declarationResolver.checkRedeclarationsInPackages(resolveSession, topLevelFqNames);
|
||||||
declarationResolver.checkRedeclarationsInInnerClassNames(c);
|
declarationResolver.checkRedeclarationsInInnerClassNames(c);
|
||||||
|
|
||||||
|
CallsPackage.checkTraitRequirements(c.getDeclaredClasses(), trace);
|
||||||
|
|
||||||
overrideResolver.check(c);
|
overrideResolver.check(c);
|
||||||
|
|
||||||
resolveImportsInAllFiles(c, resolveSession);
|
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");
|
doTest("idea/testData/checker/trivialHierarchyLoop.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("unmetTraitRequirements.kt")
|
||||||
|
public void testUnmetTraitRequirements() throws Exception {
|
||||||
|
doTest("idea/testData/checker/unmetTraitRequirements.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("UnreachableCode.kt")
|
@TestMetadata("UnreachableCode.kt")
|
||||||
public void testUnreachableCode() throws Exception {
|
public void testUnreachableCode() throws Exception {
|
||||||
doTest("idea/testData/checker/UnreachableCode.kt");
|
doTest("idea/testData/checker/UnreachableCode.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user