Remove unjustified assertions

This commit is contained in:
Alexey Sedunov
2013-12-23 18:08:18 +04:00
parent 6a9c535129
commit fbb03afc0f
20 changed files with 341 additions and 29 deletions
@@ -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);
@@ -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")