From 5e8b0d39dbb04023dc50e87e525548cc62938e1a Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Tue, 17 Apr 2012 16:03:31 +0400 Subject: [PATCH] class containigDeclaration cannot be null --- .../resolve/java/JavaDescriptorResolver.java | 18 +++++++++++++++--- .../MutableClassDescriptorLite.java | 2 +- .../MutableDeclarationDescriptor.java | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 4697ec71d1a..e53c9031ffb 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -734,13 +734,25 @@ public class JavaDescriptorResolver { return jetSignatureTypeParametersVisitor.r; } - private ClassOrNamespaceDescriptor resolveParentDescriptor(PsiClass psiClass) { + @NotNull + private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull PsiClass psiClass) { + FqName fqName = new FqName(psiClass.getQualifiedName()); + PsiClass containingClass = psiClass.getContainingClass(); if (containingClass != null) { - return resolveClass(new FqName(containingClass.getQualifiedName()), DescriptorSearchRule.INCLUDE_KOTLIN); + FqName containerFqName = new FqName(containingClass.getQualifiedName()); + ClassDescriptor clazz = resolveClass(containerFqName, DescriptorSearchRule.INCLUDE_KOTLIN); + if (clazz == null) { + throw new IllegalStateException("PsiClass not found by name " + containerFqName + ", required to be container declaration of " + fqName); + } + return clazz; } - return resolveNamespace(new FqName(psiClass.getQualifiedName()).parent(), DescriptorSearchRule.INCLUDE_KOTLIN); + NamespaceDescriptor ns = resolveNamespace(fqName.parent(), DescriptorSearchRule.INCLUDE_KOTLIN); + if (ns == null) { + throw new IllegalStateException("cannot resolve namespace " + fqName.parent() + ", required to be container for " + fqName); + } + return ns; } private List makeUninitializedTypeParameters(@NotNull DeclarationDescriptor containingDeclaration, @NotNull PsiTypeParameter[] typeParameters) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java index c755b35b754..100305afe9e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptorLite.java @@ -60,7 +60,7 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp private ClassReceiver implicitReceiver; - public MutableClassDescriptorLite(DeclarationDescriptor containingDeclaration, ClassKind kind) { + public MutableClassDescriptorLite(@NotNull DeclarationDescriptor containingDeclaration, ClassKind kind) { super(containingDeclaration); this.kind = kind; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableDeclarationDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableDeclarationDescriptor.java index 53170720883..ed4945cc602 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableDeclarationDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableDeclarationDescriptor.java @@ -25,7 +25,7 @@ public abstract class MutableDeclarationDescriptor implements DeclarationDescrip private String name; private final DeclarationDescriptor containingDeclaration; - public MutableDeclarationDescriptor(DeclarationDescriptor containingDeclaration) { + public MutableDeclarationDescriptor(@NotNull DeclarationDescriptor containingDeclaration) { this.containingDeclaration = containingDeclaration; }