Remove unjustified assertions
This commit is contained in:
+6
-1
@@ -124,7 +124,12 @@ public class KotlinJavaFileStubProvider implements CachedValueProvider<LightClas
|
||||
@Override
|
||||
public LightClassStubWithData createLightClassStubWithData(PsiJavaFileStub javaFileStub, BindingContext bindingContext) {
|
||||
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, classOrObject);
|
||||
assert (classDescriptor != null);
|
||||
if (classDescriptor == null) {
|
||||
return new LightClassStubWithData(
|
||||
javaFileStub,
|
||||
new OutermostKotlinClassLightClassData("", classOrObject, null, Collections.<JetClassOrObject, LightClassDataForKotlinClass>emptyMap())
|
||||
);
|
||||
}
|
||||
|
||||
String jvmInternalName = CodegenBinding.getJvmInternalName(bindingContext, classDescriptor);
|
||||
Collection<ClassDescriptor> allInnerClasses = CodegenBinding.getAllInnerClasses(bindingContext, classDescriptor);
|
||||
|
||||
+17
-13
@@ -90,7 +90,8 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
|
||||
private static String getJvmInternalName(JetClassOrObject classOrObject) {
|
||||
if (JetPsiUtil.isLocal(classOrObject)) {
|
||||
return getLightClassDataExactly(classOrObject).getJvmInternalName();
|
||||
LightClassData data = getLightClassDataExactly(classOrObject);
|
||||
return data != null ? data.getJvmInternalName() : "";
|
||||
}
|
||||
return PsiCodegenPredictor.getPredefinedJvmInternalName(classOrObject);
|
||||
}
|
||||
@@ -255,9 +256,10 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
return getLightClassStubWithData().getJavaFileStub();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Nullable
|
||||
protected final ClassDescriptor getDescriptor() {
|
||||
return getLightClassDataExactly(classOrObject).getDescriptor();
|
||||
LightClassDataForKotlinClass data = getLightClassDataExactly(classOrObject);
|
||||
return data != null ? data.getDescriptor() : null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -276,16 +278,11 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Nullable
|
||||
private static LightClassDataForKotlinClass getLightClassDataExactly(JetClassOrObject classOrObject) {
|
||||
OutermostKotlinClassLightClassData data =
|
||||
(OutermostKotlinClassLightClassData) getLightClassStubWithData(classOrObject).getClassData();
|
||||
|
||||
if (data.getClassOrObject().equals(classOrObject)) return data;
|
||||
|
||||
LightClassDataForKotlinClass innerClassData = data.getAllInnerClasses().get(classOrObject);
|
||||
assert innerClassData != null;
|
||||
return innerClassData;
|
||||
return data.getClassOrObject().equals(classOrObject) ? data : data.getAllInnerClasses().get(classOrObject);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -523,13 +520,17 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
public boolean isInheritor(@NotNull PsiClass baseClass, boolean checkDeep) {
|
||||
String qualifiedName;
|
||||
if (baseClass instanceof KotlinLightClassForExplicitDeclaration) {
|
||||
qualifiedName = DescriptorUtils.getFqName(((KotlinLightClassForExplicitDeclaration) baseClass).getDescriptor()).asString();
|
||||
ClassDescriptor baseDescriptor = ((KotlinLightClassForExplicitDeclaration) baseClass).getDescriptor();
|
||||
qualifiedName = baseDescriptor != null ? DescriptorUtils.getFqName(baseDescriptor).asString() : null;
|
||||
}
|
||||
else {
|
||||
qualifiedName = baseClass.getQualifiedName();
|
||||
}
|
||||
|
||||
return ResolvePackage.checkSuperTypeByFQName(getDescriptor(), qualifiedName, checkDeep);
|
||||
ClassDescriptor thisDescriptor = getDescriptor();
|
||||
return qualifiedName != null
|
||||
&& thisDescriptor != null
|
||||
&& ResolvePackage.checkSuperTypeByFQName(thisDescriptor, qualifiedName, checkDeep);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -573,7 +574,10 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC
|
||||
}
|
||||
|
||||
private String getFirstSupertypeFQName() {
|
||||
Collection<JetType> superTypes = getDescriptor().getTypeConstructor().getSupertypes();
|
||||
ClassDescriptor descriptor = getDescriptor();
|
||||
if (descriptor == null) return CommonClassNames.JAVA_LANG_OBJECT;
|
||||
|
||||
Collection<JetType> superTypes = descriptor.getTypeConstructor().getSupertypes();
|
||||
|
||||
if (superTypes.isEmpty()) return CommonClassNames.JAVA_LANG_OBJECT;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ trait LightClassData {
|
||||
|
||||
trait LightClassDataForKotlinClass: LightClassData {
|
||||
val classOrObject: JetClassOrObject
|
||||
val descriptor: ClassDescriptor
|
||||
val descriptor: ClassDescriptor?
|
||||
}
|
||||
|
||||
object KotlinPackageLightClassData: LightClassData {
|
||||
@@ -36,13 +36,13 @@ object KotlinPackageLightClassData: LightClassData {
|
||||
data class InnerKotlinClassLightClassData(
|
||||
override val jvmInternalName: String,
|
||||
override val classOrObject: JetClassOrObject,
|
||||
override val descriptor: ClassDescriptor
|
||||
override val descriptor: ClassDescriptor?
|
||||
): LightClassDataForKotlinClass
|
||||
|
||||
data class OutermostKotlinClassLightClassData(
|
||||
override val jvmInternalName: String,
|
||||
override val classOrObject: JetClassOrObject,
|
||||
override val descriptor: ClassDescriptor,
|
||||
override val descriptor: ClassDescriptor?,
|
||||
val allInnerClasses: Map<JetClassOrObject, LightClassDataForKotlinClass>
|
||||
): LightClassDataForKotlinClass
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="B ()">
|
||||
<node text="C ()">
|
||||
<node text="O3 ()"/>
|
||||
</node>
|
||||
<node text="O2 ()"/>
|
||||
</node>
|
||||
<node text="T ()">
|
||||
<node text="U ()">
|
||||
<node text="O5 ()"/>
|
||||
</node>
|
||||
<node text="O4 ()"/>
|
||||
</node>
|
||||
<node text="O1 ()"/>
|
||||
</node>
|
||||
@@ -0,0 +1,19 @@
|
||||
open class <caret>A
|
||||
|
||||
open class B: A()
|
||||
|
||||
trait T: A
|
||||
|
||||
open class C: B()
|
||||
|
||||
trait U: T
|
||||
|
||||
object O1: A()
|
||||
|
||||
object O2: B()
|
||||
|
||||
object O3: C()
|
||||
|
||||
object O4: T
|
||||
|
||||
object O5: U
|
||||
@@ -0,0 +1,15 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="B ()">
|
||||
<node text="C ()">
|
||||
<node text="O3 ()"/>
|
||||
</node>
|
||||
<node text="O2 ()"/>
|
||||
</node>
|
||||
<node text="T ()">
|
||||
<node text="U ()">
|
||||
<node text="O5 ()"/>
|
||||
</node>
|
||||
<node text="O4 ()"/>
|
||||
</node>
|
||||
<node text="O1 ()"/>
|
||||
</node>
|
||||
@@ -0,0 +1,19 @@
|
||||
trait <caret>A
|
||||
|
||||
open class B: A
|
||||
|
||||
trait T: A
|
||||
|
||||
open class C: B()
|
||||
|
||||
trait U: T
|
||||
|
||||
object O1: A
|
||||
|
||||
object O2: B()
|
||||
|
||||
object O3: C()
|
||||
|
||||
object O4: T
|
||||
|
||||
object O5: U
|
||||
@@ -1,3 +1,12 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="MyClass ()"/>
|
||||
</node>
|
||||
<node text="B ()"/>
|
||||
<node text="X in MyClass ()"/>
|
||||
<node text="Anonymous in MyClass ()"/>
|
||||
<node text="G in MyClass ()"/>
|
||||
<node text="C in MyClass ()"/>
|
||||
<node text="X in foo() in MyClass ()"/>
|
||||
<node text="Anonymous in foo() in MyClass ()"/>
|
||||
<node text="F in foo() in MyClass ()"/>
|
||||
<node text="D in foo() in MyClass ()"/>
|
||||
<node text="E in bar() in main.kt ()"/>
|
||||
</node>
|
||||
|
||||
@@ -1,3 +1,26 @@
|
||||
class MyClass: A()
|
||||
open class <caret>A
|
||||
|
||||
open class <caret>A
|
||||
class B: A() {}
|
||||
|
||||
class MyClass(a: A = run { class X: A(); object: A() {} }) {
|
||||
inner class G: A() {}
|
||||
|
||||
{
|
||||
class C: A()
|
||||
}
|
||||
|
||||
fun foo(a: A = run { class X: A(); object: A() {} }) {
|
||||
val t = object {
|
||||
inner class F: A()
|
||||
}
|
||||
|
||||
class D: A()
|
||||
}
|
||||
}
|
||||
|
||||
val bar: Int
|
||||
get() {
|
||||
class E: A()
|
||||
|
||||
return 0
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="B ()"/>
|
||||
<node text="X in MyClass ()"/>
|
||||
<node text="Anonymous in MyClass ()"/>
|
||||
<node text="G in MyClass ()"/>
|
||||
<node text="C in MyClass ()"/>
|
||||
<node text="X in foo() in MyClass ()"/>
|
||||
<node text="Anonymous in foo() in MyClass ()"/>
|
||||
<node text="F in foo() in MyClass ()"/>
|
||||
<node text="D in foo() in MyClass ()"/>
|
||||
<node text="E in bar() in main.kt ()"/>
|
||||
</node>
|
||||
@@ -0,0 +1,26 @@
|
||||
trait <caret>A
|
||||
|
||||
class B: A
|
||||
|
||||
class MyClass(a: A = run { class X: A; object: A {} }) {
|
||||
inner class G: A {}
|
||||
|
||||
{
|
||||
class C: A
|
||||
}
|
||||
|
||||
fun foo(a: A = run { class X: A; object: A {} }) {
|
||||
val t = object {
|
||||
inner class F: A
|
||||
}
|
||||
|
||||
class D: A
|
||||
}
|
||||
}
|
||||
|
||||
val bar: Int
|
||||
get() {
|
||||
class E: A
|
||||
|
||||
return 0
|
||||
}
|
||||
@@ -1,3 +1,10 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="O ()"/>
|
||||
</node>
|
||||
<node text="B ()"/>
|
||||
<node text="Anonymous in MyClass ()"/>
|
||||
<node text="C in MyClass ()"/>
|
||||
<node text="Anonymous in foo() in MyClass ()"/>
|
||||
<node text="D in foo() in MyClass ()"/>
|
||||
<node text="F in t() in MyClass ()"/>
|
||||
<node text="E in bar() in main.kt ()"/>
|
||||
<node text="Anonymous in x() in main.kt ()"/>
|
||||
</node>
|
||||
|
||||
@@ -1,3 +1,28 @@
|
||||
object O: A()
|
||||
open class <caret>A
|
||||
|
||||
open class <caret>A
|
||||
object B: A()
|
||||
|
||||
class MyClass(a: A = run { object: A() {} }) {
|
||||
{
|
||||
object C: A()
|
||||
}
|
||||
|
||||
fun foo(a: A = run { object: A() {} }) {
|
||||
object D: A()
|
||||
}
|
||||
|
||||
val t = object {
|
||||
object F: A()
|
||||
}
|
||||
}
|
||||
|
||||
val bar: Int
|
||||
get() {
|
||||
object E: A()
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
val x = object: A() {
|
||||
|
||||
}
|
||||
@@ -1,3 +1,10 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="O ()"/>
|
||||
</node>
|
||||
<node text="B ()"/>
|
||||
<node text="Anonymous in MyClass ()"/>
|
||||
<node text="C in MyClass ()"/>
|
||||
<node text="Anonymous in foo() in MyClass ()"/>
|
||||
<node text="D in foo() in MyClass ()"/>
|
||||
<node text="F in t() in MyClass ()"/>
|
||||
<node text="E in bar() in main.kt ()"/>
|
||||
<node text="Anonymous in x() in main.kt ()"/>
|
||||
</node>
|
||||
|
||||
@@ -1,3 +1,28 @@
|
||||
object O: A
|
||||
trait <caret>A
|
||||
|
||||
trait <caret>A
|
||||
object B: A
|
||||
|
||||
class MyClass(a: A = run { object: A {} }) {
|
||||
{
|
||||
object C: A
|
||||
}
|
||||
|
||||
fun foo(a: A = run { object: A {} }) {
|
||||
object D: A
|
||||
}
|
||||
|
||||
val t = object {
|
||||
object F: A
|
||||
}
|
||||
}
|
||||
|
||||
val bar: Int
|
||||
get() {
|
||||
object E: A
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
val x = object: A {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="B ()"/>
|
||||
<node text="X in MyClass ()"/>
|
||||
<node text="Anonymous in MyClass ()"/>
|
||||
<node text="G in MyClass ()"/>
|
||||
<node text="C in MyClass ()"/>
|
||||
<node text="X in foo() in MyClass ()"/>
|
||||
<node text="Anonymous in foo() in MyClass ()"/>
|
||||
<node text="D in foo() in MyClass ()"/>
|
||||
<node text="F in foo() in MyClass ()"/>
|
||||
<node text="E in bar() in main.kt ()"/>
|
||||
</node>
|
||||
@@ -0,0 +1,26 @@
|
||||
open class <caret>A
|
||||
|
||||
trait B: A()
|
||||
|
||||
class MyClass(a: A = run { trait X: A(); object: A() {} }) {
|
||||
inner trait G: A() {}
|
||||
|
||||
{
|
||||
trait C: A()
|
||||
}
|
||||
|
||||
fun foo(a: A = run { trait X: A(); object: A() {} }) {
|
||||
trait D: A()
|
||||
|
||||
val t = object {
|
||||
inner trait F: A()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val bar: Int
|
||||
get() {
|
||||
trait E: A()
|
||||
|
||||
return 0
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<node text="A ()" base="true">
|
||||
<node text="B ()"/>
|
||||
<node text="X in MyClass ()"/>
|
||||
<node text="Anonymous in MyClass ()"/>
|
||||
<node text="G in MyClass ()"/>
|
||||
<node text="C in MyClass ()"/>
|
||||
<node text="X in foo() in MyClass ()"/>
|
||||
<node text="Anonymous in foo() in MyClass ()"/>
|
||||
<node text="D in foo() in MyClass ()"/>
|
||||
<node text="F in foo() in MyClass ()"/>
|
||||
<node text="E in bar() in main.kt ()"/>
|
||||
</node>
|
||||
@@ -0,0 +1,26 @@
|
||||
trait <caret>A
|
||||
|
||||
trait B: A
|
||||
|
||||
class MyClass(a: A = run { trait X: A; object: A {} }) {
|
||||
inner trait G: A {}
|
||||
|
||||
{
|
||||
trait C: A
|
||||
}
|
||||
|
||||
fun foo(a: A = run { trait X: A; object: A {} }) {
|
||||
trait D: A
|
||||
|
||||
val t = object {
|
||||
inner trait F: A
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val bar: Int
|
||||
get() {
|
||||
trait E: A
|
||||
|
||||
return 0
|
||||
}
|
||||
@@ -184,11 +184,26 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/hierarchy/class/sub"), Pattern.compile("^([^\\.]+)$"), false);
|
||||
}
|
||||
|
||||
@TestMetadata("AllFromClass")
|
||||
public void testAllFromClass() throws Exception {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/AllFromClass");
|
||||
}
|
||||
|
||||
@TestMetadata("AllFromTrait")
|
||||
public void testAllFromTrait() throws Exception {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/AllFromTrait");
|
||||
}
|
||||
|
||||
@TestMetadata("ClassFromClass")
|
||||
public void testClassFromClass() throws Exception {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/ClassFromClass");
|
||||
}
|
||||
|
||||
@TestMetadata("ClassFromTrait")
|
||||
public void testClassFromTrait() throws Exception {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/ClassFromTrait");
|
||||
}
|
||||
|
||||
@TestMetadata("ObjectFromClass")
|
||||
public void testObjectFromClass() throws Exception {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/ObjectFromClass");
|
||||
@@ -199,6 +214,16 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/ObjectFromTrait");
|
||||
}
|
||||
|
||||
@TestMetadata("TraitFromClass")
|
||||
public void testTraitFromClass() throws Exception {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/TraitFromClass");
|
||||
}
|
||||
|
||||
@TestMetadata("TraitFromTrait")
|
||||
public void testTraitFromTrait() throws Exception {
|
||||
doSubClassHierarchyTest("idea/testData/hierarchy/class/sub/TraitFromTrait");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/hierarchy/calls/callers")
|
||||
|
||||
Reference in New Issue
Block a user