Support nested classes in annotation classes

#KT-16962 In Progress
This commit is contained in:
Alexander Udalov
2017-12-28 16:51:42 +01:00
parent 5947b4eb8e
commit a46a2b9b1c
20 changed files with 207 additions and 34 deletions
@@ -23,14 +23,13 @@ import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.checkers.SimpleDeclarationChecker
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.checkers.SimpleDeclarationChecker
import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmFieldAnnotation
import org.jetbrains.kotlin.resolve.jvm.checkers.JvmFieldApplicabilityChecker.Problem.*
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
class JvmFieldApplicabilityChecker : SimpleDeclarationChecker {
internal enum class Problem(val errorMessage: String) {
@@ -83,7 +82,7 @@ class JvmFieldApplicabilityChecker : SimpleDeclarationChecker {
val containingClass = containingDeclaration as? ClassDescriptor ?: return false
if (!DescriptorUtils.isCompanionObject(containingClass)) return false
val outerClassForObject = containingClass.containingDeclaration as? ClassDescriptor ?: return false
return DescriptorUtils.isInterface(outerClassForObject)
val outerClassKind = (containingClass.containingDeclaration as? ClassDescriptor)?.kind
return outerClassKind == ClassKind.INTERFACE || outerClassKind == ClassKind.ANNOTATION_CLASS
}
}