From acd89855180cdee3098aaf34a49333828a6b6f3a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 24 Dec 2018 12:55:01 +0300 Subject: [PATCH] New J2K: Add JetbrainsNullableAnnotationsConverter --- .../JetbrainsNullableAnnotationsConverter.kt | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JetbrainsNullableAnnotationsConverter.kt diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JetbrainsNullableAnnotationsConverter.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JetbrainsNullableAnnotationsConverter.kt new file mode 100644 index 00000000000..f7ef30913bf --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JetbrainsNullableAnnotationsConverter.kt @@ -0,0 +1,53 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.j2k.conversions + +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.ast.Nullability +import org.jetbrains.kotlin.j2k.tree.* +import org.jetbrains.kotlin.j2k.tree.impl.JKTypeElementImpl + + +class JetbrainsNullableAnnotationsConverter(private val context: ConversionContext) : RecursiveApplicableConversionBase() { + override fun applyToElement(element: JKTreeElement): JKTreeElement { + if (element !is JKAnnotationListOwner) return recurse(element) + val nullableAnnotationSymbol = + context.symbolProvider.provideByFqName("org.jetbrains.annotations.Nullable") + val notNullAnnotationSymbol = + context.symbolProvider.provideByFqName("org.jetbrains.annotations.NotNull") + val nullableAnnotation = + element.annotationList.annotations.firstOrNull { it.classSymbol == nullableAnnotationSymbol } + val notNullAnnotation = + element.annotationList.annotations.firstOrNull { it.classSymbol == notNullAnnotationSymbol } + when (element) { + is JKField -> { + if (nullableAnnotation != null) { + element.annotationList.annotations -= nullableAnnotation + element.type = + JKTypeElementImpl(element.type.type.updateNullability(Nullability.Nullable)) + } + if (notNullAnnotation != null) { + element.annotationList.annotations -= notNullAnnotation + element.type = + JKTypeElementImpl(element.type.type.updateNullability(Nullability.NotNull)) + } + } + is JKMethod -> { + if (nullableAnnotation != null) { + element.annotationList.annotations -= nullableAnnotation + element.returnType = + JKTypeElementImpl(element.returnType.type.updateNullability(Nullability.Nullable)) + } + if (notNullAnnotation != null) { + element.annotationList.annotations -= notNullAnnotation + element.returnType = + JKTypeElementImpl(element.returnType.type.updateNullability(Nullability.NotNull)) + } + } + } + return recurse(element) + } +} \ No newline at end of file