@@ -389,6 +389,31 @@ open class KotlinUsesExtractor(
389389 return id
390390 }
391391
392+ fun useSimpleTypeClass (c : IrClass , args : List <IrTypeArgument >, hasQuestionMark : Boolean ): TypeResults {
393+ val classInstanceResult = useClassInstance(c, args)
394+ val javaClassId = classInstanceResult.classLabel
395+ val kotlinQualClassName = getUnquotedClassLabel(c, args)
396+ val javaQualClassName = classInstanceResult.javaClass.fqNameForIrSerialization.asString()
397+ val javaSignature = javaQualClassName // TODO: Is this right?
398+ val javaResult = TypeResult (javaClassId, javaSignature)
399+ val kotlinResult = if (hasQuestionMark) {
400+ val kotlinSignature = " $kotlinQualClassName ?" // TODO: Is this right?
401+ val kotlinLabel = " @\" kt_type;nullable;$kotlinQualClassName \" "
402+ val kotlinId: Label <DbKt_nullable_type > = tw.getLabelFor(kotlinLabel, {
403+ tw.writeKt_nullable_types(it, javaClassId)
404+ })
405+ TypeResult (kotlinId, kotlinSignature)
406+ } else {
407+ val kotlinSignature = kotlinQualClassName // TODO: Is this right?
408+ val kotlinLabel = " @\" kt_type;notnull;$kotlinQualClassName \" "
409+ val kotlinId: Label <DbKt_notnull_type > = tw.getLabelFor(kotlinLabel, {
410+ tw.writeKt_notnull_types(it, javaClassId)
411+ })
412+ TypeResult (kotlinId, kotlinSignature)
413+ }
414+ return TypeResults (javaResult, kotlinResult)
415+ }
416+
392417 fun useSimpleType (s : IrSimpleType , canReturnPrimitiveTypes : Boolean ): TypeResults {
393418 // We use this when we don't actually have an IrClass for a class
394419 // we want to refer to
@@ -514,28 +539,7 @@ class X {
514539 val classifier: IrClassifierSymbol = s.classifier
515540 val cls: IrClass = classifier.owner as IrClass
516541
517- val classInstanceResult = useClassInstance(cls, s.arguments)
518- val javaClassId = classInstanceResult.classLabel
519- val kotlinQualClassName = getUnquotedClassLabel(cls, s.arguments)
520- val javaQualClassName = classInstanceResult.javaClass.fqNameForIrSerialization.asString()
521- val javaSignature = javaQualClassName // TODO: Is this right?
522- val javaResult = TypeResult (javaClassId, javaSignature)
523- val kotlinResult = if (s.hasQuestionMark) {
524- val kotlinSignature = " $kotlinQualClassName ?" // TODO: Is this right?
525- val kotlinLabel = " @\" kt_type;nullable;$kotlinQualClassName \" "
526- val kotlinId: Label <DbKt_nullable_type > = tw.getLabelFor(kotlinLabel, {
527- tw.writeKt_nullable_types(it, javaClassId)
528- })
529- TypeResult (kotlinId, kotlinSignature)
530- } else {
531- val kotlinSignature = kotlinQualClassName // TODO: Is this right?
532- val kotlinLabel = " @\" kt_type;notnull;$kotlinQualClassName \" "
533- val kotlinId: Label <DbKt_notnull_type > = tw.getLabelFor(kotlinLabel, {
534- tw.writeKt_notnull_types(it, javaClassId)
535- })
536- TypeResult (kotlinId, kotlinSignature)
537- }
538- return TypeResults (javaResult, kotlinResult)
542+ return useSimpleTypeClass(cls, s.arguments, s.hasQuestionMark)
539543 }
540544 s.classifier.owner is IrTypeParameter -> {
541545 val javaId = useTypeParameter(s.classifier.owner as IrTypeParameter )
@@ -1006,17 +1010,25 @@ open class KotlinFileExtractor(
10061010 } else {
10071011 val id = useProperty(p)
10081012 val locId = tw.getLocation(p)
1009- val typeId = useTypeOld (bf.type)
1010- tw.writeFields(id, p.name.asString(), typeId , parentId, id)
1013+ val type = useType (bf.type)
1014+ tw.writeFields(id, p.name.asString(), type.javaResult.id, type.kotlinResult.id , parentId, id)
10111015 tw.writeHasLocation(id, locId)
10121016 }
10131017 }
10141018
10151019 fun extractEnumEntry (ee : IrEnumEntry , parentId : Label <out DbReftype >) {
10161020 val id = useEnumEntry(ee)
10171021 val locId = tw.getLocation(ee)
1018- tw.writeFields(id, ee.name.asString(), parentId, parentId, id)
1019- tw.writeHasLocation(id, locId)
1022+ val parent = ee.parent
1023+ if (parent !is IrClass ) {
1024+ logger.warnElement(Severity .ErrorSevere , " Enum entry with unexpected parent: " + parent.javaClass, ee)
1025+ } else if (! parent.typeParameters.isEmpty()) {
1026+ logger.warnElement(Severity .ErrorSevere , " Enum entry parent class has type parameters: " + parent.name, ee)
1027+ } else {
1028+ val type = useSimpleTypeClass(parent, emptyList(), false )
1029+ tw.writeFields(id, ee.name.asString(), type.javaResult.id, type.kotlinResult.id, parentId, id)
1030+ tw.writeHasLocation(id, locId)
1031+ }
10201032 }
10211033
10221034 fun extractBody (b : IrBody , callable : Label <out DbCallable >) {
0 commit comments