J2K to not generate obsolete syntax for accessing java class
This commit is contained in:
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.j2k
|
|||||||
import com.intellij.codeInsight.NullableNotNullManager
|
import com.intellij.codeInsight.NullableNotNullManager
|
||||||
import com.intellij.openapi.util.text.StringUtil
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.javadoc.PsiDocTag
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
||||||
import org.jetbrains.kotlin.j2k.ast.*
|
import org.jetbrains.kotlin.j2k.ast.*
|
||||||
import org.jetbrains.kotlin.j2k.ast.Annotation
|
import org.jetbrains.kotlin.j2k.ast.Annotation
|
||||||
@@ -178,8 +177,8 @@ class AnnotationConverter(private val converter: Converter) {
|
|||||||
|
|
||||||
private fun convertExpressionValue(codeConverter: CodeConverter, value: PsiExpression, expectedType: PsiType?): Expression {
|
private fun convertExpressionValue(codeConverter: CodeConverter, value: PsiExpression, expectedType: PsiType?): Expression {
|
||||||
val expression = if (value is PsiClassObjectAccessExpression) {
|
val expression = if (value is PsiClassObjectAccessExpression) {
|
||||||
val typeElement = converter.convertTypeElement(value.getOperand())
|
val type = converter.convertTypeElement(value.getOperand(), Nullability.NotNull)
|
||||||
ClassLiteralExpression(typeElement.type.toNotNullType())
|
ClassLiteralExpression(type)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
codeConverter.convertExpression(value, expectedType)
|
codeConverter.convertExpression(value, expectedType)
|
||||||
|
|||||||
@@ -23,10 +23,8 @@ import com.intellij.psi.util.PsiMethodUtil
|
|||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.j2k.ast.*
|
import org.jetbrains.kotlin.j2k.ast.*
|
||||||
import org.jetbrains.kotlin.j2k.ast.Annotation
|
import org.jetbrains.kotlin.j2k.ast.Annotation
|
||||||
import org.jetbrains.kotlin.j2k.ast.Class
|
|
||||||
import org.jetbrains.kotlin.j2k.ast.Enum
|
import org.jetbrains.kotlin.j2k.ast.Enum
|
||||||
import org.jetbrains.kotlin.j2k.ast.Function
|
import org.jetbrains.kotlin.j2k.ast.Function
|
||||||
import org.jetbrains.kotlin.j2k.ast.Object
|
|
||||||
import org.jetbrains.kotlin.j2k.usageProcessing.FieldToPropertyProcessing
|
import org.jetbrains.kotlin.j2k.usageProcessing.FieldToPropertyProcessing
|
||||||
import org.jetbrains.kotlin.j2k.usageProcessing.UsageProcessing
|
import org.jetbrains.kotlin.j2k.usageProcessing.UsageProcessing
|
||||||
import org.jetbrains.kotlin.j2k.usageProcessing.UsageProcessingExpressionConverter
|
import org.jetbrains.kotlin.j2k.usageProcessing.UsageProcessingExpressionConverter
|
||||||
@@ -532,8 +530,8 @@ class Converter private constructor(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun convertTypeElement(element: PsiTypeElement?): TypeElement
|
public fun convertTypeElement(element: PsiTypeElement?, nullability: Nullability): Type
|
||||||
= TypeElement(if (element == null) ErrorType().assignNoPrototype() else typeConverter.convertType(element.getType())).assignPrototype(element)
|
= (if (element == null) ErrorType() else typeConverter.convertType(element.type, nullability)).assignPrototype(element)
|
||||||
|
|
||||||
private fun convertToNotNullableTypes(types: Array<out PsiType?>): List<Type>
|
private fun convertToNotNullableTypes(types: Array<out PsiType?>): List<Type>
|
||||||
= types.map { typeConverter.convertType(it, Nullability.NotNull) }
|
= types.map { typeConverter.convertType(it, Nullability.NotNull) }
|
||||||
|
|||||||
@@ -182,8 +182,8 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
FqName("java.lang.Void")
|
FqName("java.lang.Void")
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val typeElement = converter.convertTypeElement(operand)
|
val type = converter.convertTypeElement(operand, Nullability.NotNull)
|
||||||
result = MethodCallExpression.buildNotNull(null, "javaClass", listOf(), listOf(typeElement.type.toNotNullType()))
|
result = QualifiedExpression(ClassLiteralExpression(type).assignNoPrototype(), Identifier("java").assignNoPrototype())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +213,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
override fun visitInstanceOfExpression(expression: PsiInstanceOfExpression) {
|
override fun visitInstanceOfExpression(expression: PsiInstanceOfExpression) {
|
||||||
val checkType = expression.getCheckType()
|
val checkType = expression.getCheckType()
|
||||||
result = IsOperator(codeConverter.convertExpression(expression.getOperand()),
|
result = IsOperator(codeConverter.convertExpression(expression.getOperand()),
|
||||||
converter.convertTypeElement(checkType))
|
converter.convertTypeElement(checkType, Nullability.NotNull))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLiteralExpression(expression: PsiLiteralExpression) {
|
override fun visitLiteralExpression(expression: PsiLiteralExpression) {
|
||||||
@@ -661,7 +661,7 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter {
|
|||||||
private fun convertMethodReferenceQualifier(qualifier: PsiElement): String {
|
private fun convertMethodReferenceQualifier(qualifier: PsiElement): String {
|
||||||
return when(qualifier) {
|
return when(qualifier) {
|
||||||
is PsiExpression -> codeConverter.convertExpression(qualifier).canonicalCode()
|
is PsiExpression -> codeConverter.convertExpression(qualifier).canonicalCode()
|
||||||
is PsiTypeElement -> converter.convertTypeElement(qualifier).type.canonicalCode()
|
is PsiTypeElement -> converter.convertTypeElement(qualifier, Nullability.NotNull).canonicalCode()
|
||||||
else -> qualifier.text
|
else -> qualifier.text
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.ast
|
package org.jetbrains.kotlin.j2k.ast
|
||||||
|
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
import org.jetbrains.kotlin.j2k.CodeBuilder
|
||||||
import org.jetbrains.kotlin.j2k.*
|
import org.jetbrains.kotlin.j2k.append
|
||||||
|
|
||||||
class ArrayAccessExpression(val expression: Expression, val index: Expression, val lvalue: Boolean) : Expression() {
|
class ArrayAccessExpression(val expression: Expression, val index: Expression, val lvalue: Boolean) : Expression() {
|
||||||
override fun generateCode(builder: CodeBuilder) {
|
override fun generateCode(builder: CodeBuilder) {
|
||||||
@@ -54,9 +54,9 @@ class BinaryExpression(val left: Expression, val right: Expression, val op: Stri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class IsOperator(val expression: Expression, val typeElement: TypeElement) : Expression() {
|
class IsOperator(val expression: Expression, val type: Type) : Expression() {
|
||||||
override fun generateCode(builder: CodeBuilder) {
|
override fun generateCode(builder: CodeBuilder) {
|
||||||
builder.appendOperand(this, expression).append(" is ").append(typeElement.type.toNotNullType())
|
builder.appendOperand(this, expression).append(" is ").append(type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.ast
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.j2k.*
|
|
||||||
|
|
||||||
class TypeElement(val type: Type) : Element() {
|
|
||||||
override fun generateCode(builder: CodeBuilder) {
|
|
||||||
builder.append(type)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +1 @@
|
|||||||
val constrArgTypes = arrayOf(javaClass<Array<String>>(), javaClass<String>())
|
val constrArgTypes = arrayOf(Array<String>::class.java, String::class.java)
|
||||||
@@ -1 +1 @@
|
|||||||
javaClass<Any>()
|
Any::class.java
|
||||||
@@ -3,8 +3,8 @@ public object A {
|
|||||||
println(Void.TYPE)
|
println(Void.TYPE)
|
||||||
println(Integer.TYPE)
|
println(Integer.TYPE)
|
||||||
println(java.lang.Double.TYPE)
|
println(java.lang.Double.TYPE)
|
||||||
println(javaClass<IntArray>())
|
println(IntArray::class.java)
|
||||||
println(javaClass<Array<Any>>())
|
println(Array<Any>::class.java)
|
||||||
println(javaClass<Array<Array<Any>>>())
|
println(Array<Array<Any>>::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
javaClass<String>()
|
String::class.java
|
||||||
Reference in New Issue
Block a user