j2k: cleanup 'public', property access syntax
This commit is contained in:
@@ -20,8 +20,8 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
public class AfterConversionPass(val project: Project, val postProcessor: PostProcessor) {
|
||||
public fun run(kotlinFile: KtFile, range: TextRange?) {
|
||||
class AfterConversionPass(val project: Project, val postProcessor: PostProcessor) {
|
||||
fun run(kotlinFile: KtFile, range: TextRange?) {
|
||||
val rangeMarker = if (range != null) {
|
||||
val document = kotlinFile.viewProvider.document!!
|
||||
val marker = document.createRangeMarker(range.startOffset, range.endOffset)
|
||||
|
||||
@@ -31,11 +31,11 @@ class AnnotationConverter(private val converter: Converter) {
|
||||
+ NullableNotNullManager.getInstance(converter.project).nullables
|
||||
+ listOf(CommonClassNames.JAVA_LANG_OVERRIDE, ElementType::class.java.name)).toSet()
|
||||
|
||||
public fun isImportNotRequired(annotationName: String): Boolean {
|
||||
fun isImportNotRequired(annotationName: String): Boolean {
|
||||
return annotationName in annotationsToRemove || annotationName == Target::class.java.name
|
||||
}
|
||||
|
||||
public fun convertAnnotations(owner: PsiModifierListOwner): Annotations
|
||||
fun convertAnnotations(owner: PsiModifierListOwner): Annotations
|
||||
= convertAnnotationsOnly(owner) + convertModifiersToAnnotations(owner)
|
||||
|
||||
private fun convertAnnotationsOnly(owner: PsiModifierListOwner): Annotations {
|
||||
@@ -99,7 +99,7 @@ class AnnotationConverter(private val converter: Converter) {
|
||||
return expr.referenceName?.let { JavaAnnotationTargetMapper.mapJavaTargetArgumentByName(it) } ?: emptySet()
|
||||
}
|
||||
|
||||
public fun convertAnnotation(annotation: PsiAnnotation, newLineAfter: Boolean): Annotation? {
|
||||
fun convertAnnotation(annotation: PsiAnnotation, newLineAfter: Boolean): Annotation? {
|
||||
val qualifiedName = annotation.qualifiedName
|
||||
if (qualifiedName == CommonClassNames.JAVA_LANG_DEPRECATED && annotation.parameterList.attributes.isEmpty()) {
|
||||
val deferredExpression = converter.deferredElement<Expression> { LiteralExpression("\"\"").assignNoPrototype() }
|
||||
@@ -151,7 +151,7 @@ class AnnotationConverter(private val converter: Converter) {
|
||||
return Annotation(name, arguments, newLineAfter).assignPrototype(annotation)
|
||||
}
|
||||
|
||||
public fun convertAnnotationMethodDefault(method: PsiAnnotationMethod): DeferredElement<Expression>? {
|
||||
fun convertAnnotationMethodDefault(method: PsiAnnotationMethod): DeferredElement<Expression>? {
|
||||
val value = method.defaultValue ?: return null
|
||||
return converter.deferredElement(convertAttributeValue(value, method.returnType, false, false).single())
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ class ClassBodyConverter(private val psiClass: PsiClass,
|
||||
) {
|
||||
private val fieldsToDrop = HashSet<PsiField>()
|
||||
|
||||
public fun convertBody(): ClassBody {
|
||||
fun convertBody(): ClassBody {
|
||||
val memberToPropertyInfo = converter.propertyDetectionCache[psiClass]
|
||||
|
||||
for ((member, propertyInfo) in memberToPropertyInfo) {
|
||||
|
||||
@@ -58,10 +58,10 @@ class CodeBuilder(private val topElement: PsiElement?, private var docConverter:
|
||||
|
||||
private val imports = LinkedHashSet<FqName>()
|
||||
|
||||
public infix fun append(text: String): CodeBuilder
|
||||
infix fun append(text: String): CodeBuilder
|
||||
= append(text, false)
|
||||
|
||||
public fun addImport(fqName: FqName) {
|
||||
fun addImport(fqName: FqName) {
|
||||
imports.add(fqName)
|
||||
}
|
||||
|
||||
@@ -92,13 +92,13 @@ class CodeBuilder(private val topElement: PsiElement?, private var docConverter:
|
||||
return this
|
||||
}
|
||||
|
||||
public val resultText: String
|
||||
val resultText: String
|
||||
get() = builder.toString()
|
||||
|
||||
public val importsToAdd: Set<FqName>
|
||||
val importsToAdd: Set<FqName>
|
||||
get() = imports
|
||||
|
||||
public infix fun append(element: Element): CodeBuilder {
|
||||
infix fun append(element: Element): CodeBuilder {
|
||||
if (element.isEmpty) return this // do not insert comment and spaces for empty elements to avoid multiple blank lines
|
||||
|
||||
if (element.prototypes == null && topElement != null) {
|
||||
|
||||
@@ -22,28 +22,28 @@ import org.jetbrains.kotlin.j2k.ast.*
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.check
|
||||
|
||||
class CodeConverter(
|
||||
public val converter: Converter,
|
||||
val converter: Converter,
|
||||
private val expressionConverter: ExpressionConverter,
|
||||
private val statementConverter: StatementConverter,
|
||||
public val methodReturnType: PsiType?
|
||||
val methodReturnType: PsiType?
|
||||
) {
|
||||
|
||||
public val typeConverter: TypeConverter = converter.typeConverter
|
||||
public val settings: ConverterSettings = converter.settings
|
||||
val typeConverter: TypeConverter = converter.typeConverter
|
||||
val settings: ConverterSettings = converter.settings
|
||||
|
||||
public fun withSpecialExpressionConverter(specialConverter: SpecialExpressionConverter): CodeConverter
|
||||
fun withSpecialExpressionConverter(specialConverter: SpecialExpressionConverter): CodeConverter
|
||||
= CodeConverter(converter, expressionConverter.withSpecialConverter(specialConverter), statementConverter, methodReturnType)
|
||||
|
||||
public fun withSpecialStatementConverter(specialConverter: SpecialStatementConverter): CodeConverter
|
||||
fun withSpecialStatementConverter(specialConverter: SpecialStatementConverter): CodeConverter
|
||||
= CodeConverter(converter, expressionConverter, statementConverter.withSpecialConverter(specialConverter), methodReturnType)
|
||||
|
||||
public fun withMethodReturnType(methodReturnType: PsiType?): CodeConverter
|
||||
fun withMethodReturnType(methodReturnType: PsiType?): CodeConverter
|
||||
= CodeConverter(converter, expressionConverter, statementConverter, methodReturnType)
|
||||
|
||||
public fun withConverter(converter: Converter): CodeConverter
|
||||
fun withConverter(converter: Converter): CodeConverter
|
||||
= CodeConverter(converter, expressionConverter, statementConverter, methodReturnType)
|
||||
|
||||
public fun convertBlock(block: PsiCodeBlock?, notEmpty: Boolean = true, statementFilter: (PsiStatement) -> Boolean = { true }): Block {
|
||||
fun convertBlock(block: PsiCodeBlock?, notEmpty: Boolean = true, statementFilter: (PsiStatement) -> Boolean = { true }): Block {
|
||||
if (block == null) return Block.Empty
|
||||
|
||||
val lBrace = LBrace().assignPrototype(block.lBrace)
|
||||
@@ -51,19 +51,19 @@ class CodeConverter(
|
||||
return Block(block.statements.filter(statementFilter).map { convertStatement(it) }, lBrace, rBrace, notEmpty).assignPrototype(block)
|
||||
}
|
||||
|
||||
public fun convertStatement(statement: PsiStatement?): Statement {
|
||||
fun convertStatement(statement: PsiStatement?): Statement {
|
||||
if (statement == null) return Statement.Empty
|
||||
|
||||
return statementConverter.convertStatement(statement, this).assignPrototype(statement)
|
||||
}
|
||||
|
||||
public fun convertExpressions(expressions: Array<PsiExpression>): List<Expression>
|
||||
fun convertExpressions(expressions: Array<PsiExpression>): List<Expression>
|
||||
= expressions.map { convertExpression(it) }
|
||||
|
||||
public fun convertExpressions(expressions: List<PsiExpression>): List<Expression>
|
||||
fun convertExpressions(expressions: List<PsiExpression>): List<Expression>
|
||||
= expressions.map { convertExpression(it) }
|
||||
|
||||
public fun convertExpression(expression: PsiExpression?, shouldParenthesize: Boolean = false): Expression {
|
||||
fun convertExpression(expression: PsiExpression?, shouldParenthesize: Boolean = false): Expression {
|
||||
if (expression == null) return Expression.Empty
|
||||
|
||||
val converted = expressionConverter.convertExpression(expression, this).assignPrototype(expression)
|
||||
@@ -73,7 +73,7 @@ class CodeConverter(
|
||||
return converted
|
||||
}
|
||||
|
||||
public fun convertLocalVariable(variable: PsiLocalVariable): LocalVariable {
|
||||
fun convertLocalVariable(variable: PsiLocalVariable): LocalVariable {
|
||||
val isVal = variable.hasModifierProperty(PsiModifier.FINAL) ||
|
||||
variable.initializer == null/* we do not know actually and prefer val until we have better analysis*/ ||
|
||||
!variable.hasWriteAccesses(converter.referenceSearcher, variable.getContainingMethod())
|
||||
@@ -87,7 +87,7 @@ class CodeConverter(
|
||||
isVal).assignPrototype(variable)
|
||||
}
|
||||
|
||||
public fun convertExpression(expression: PsiExpression?, expectedType: PsiType?): Expression {
|
||||
fun convertExpression(expression: PsiExpression?, expectedType: PsiType?): Expression {
|
||||
if (expression == null) return Identifier.Empty
|
||||
|
||||
var convertedExpression = convertExpression(expression)
|
||||
@@ -136,7 +136,7 @@ class CodeConverter(
|
||||
return convertedExpression.assignPrototype(expression)
|
||||
}
|
||||
|
||||
public fun convertedExpressionType(expression: PsiExpression, expectedType: PsiType): Type {
|
||||
fun convertedExpressionType(expression: PsiExpression, expectedType: PsiType): Type {
|
||||
var convertedExpression = convertExpression(expression)
|
||||
val actualType = expression.type ?: return ErrorType()
|
||||
var resultType = typeConverter.convertType(actualType, if (convertedExpression.isNullable) Nullability.Nullable else Nullability.NotNull)
|
||||
|
||||
@@ -69,10 +69,10 @@ class ConstructorConverter(
|
||||
return toTargetConstructorMap
|
||||
}
|
||||
|
||||
public var baseClassParams: List<DeferredElement<Expression>>? = if (constructors.isEmpty()) emptyList() else null
|
||||
var baseClassParams: List<DeferredElement<Expression>>? = if (constructors.isEmpty()) emptyList() else null
|
||||
private set
|
||||
|
||||
public fun convertConstructor(constructor: PsiMethod,
|
||||
fun convertConstructor(constructor: PsiMethod,
|
||||
annotations: Annotations,
|
||||
modifiers: Modifiers,
|
||||
fieldsToDrop: MutableSet<PsiField>,
|
||||
|
||||
@@ -49,44 +49,44 @@ class Converter private constructor(
|
||||
}
|
||||
|
||||
// state which may differ in different converter's
|
||||
public class PersonalState(val specialContext: PsiElement?)
|
||||
class PersonalState(val specialContext: PsiElement?)
|
||||
|
||||
public val project: Project = elementToConvert.project
|
||||
public val typeConverter: TypeConverter = TypeConverter(this)
|
||||
public val annotationConverter: AnnotationConverter = AnnotationConverter(this)
|
||||
val project: Project = elementToConvert.project
|
||||
val typeConverter: TypeConverter = TypeConverter(this)
|
||||
val annotationConverter: AnnotationConverter = AnnotationConverter(this)
|
||||
|
||||
public val specialContext: PsiElement? = personalState.specialContext
|
||||
val specialContext: PsiElement? = personalState.specialContext
|
||||
|
||||
public val referenceSearcher: ReferenceSearcher = CachingReferenceSearcher(services.referenceSearcher)
|
||||
val referenceSearcher: ReferenceSearcher = CachingReferenceSearcher(services.referenceSearcher)
|
||||
|
||||
public val propertyDetectionCache = PropertyDetectionCache(this)
|
||||
val propertyDetectionCache = PropertyDetectionCache(this)
|
||||
|
||||
companion object {
|
||||
public fun create(elementToConvert: PsiElement, settings: ConverterSettings, services: JavaToKotlinConverterServices,
|
||||
fun create(elementToConvert: PsiElement, settings: ConverterSettings, services: JavaToKotlinConverterServices,
|
||||
inConversionScope: (PsiElement) -> Boolean, usageProcessingsCollector: (UsageProcessing) -> Unit): Converter {
|
||||
return Converter(elementToConvert, settings, inConversionScope,
|
||||
services, CommonState(usageProcessingsCollector), PersonalState(null))
|
||||
}
|
||||
}
|
||||
|
||||
public fun withSpecialContext(context: PsiElement): Converter = withState(PersonalState(context))
|
||||
fun withSpecialContext(context: PsiElement): Converter = withState(PersonalState(context))
|
||||
|
||||
private fun withState(state: PersonalState): Converter
|
||||
= Converter(elementToConvert, settings, inConversionScope, services, commonState, state)
|
||||
|
||||
private fun createDefaultCodeConverter() = CodeConverter(this, DefaultExpressionConverter(), DefaultStatementConverter(), null)
|
||||
|
||||
public data class IntermediateResult(
|
||||
data class IntermediateResult(
|
||||
val codeGenerator: (Map<PsiElement, Collection<UsageProcessing>>) -> Result,
|
||||
val parseContext: ParseContext
|
||||
)
|
||||
|
||||
public data class Result(
|
||||
data class Result(
|
||||
val text: String,
|
||||
val importsToAdd: Set<FqName>
|
||||
)
|
||||
|
||||
public fun convert(): IntermediateResult? {
|
||||
fun convert(): IntermediateResult? {
|
||||
val element = convertTopElement(elementToConvert) ?: return null
|
||||
val parseContext = when (elementToConvert) {
|
||||
is PsiStatement, is PsiExpression -> ParseContext.CODE_BLOCK
|
||||
@@ -137,17 +137,17 @@ class Converter private constructor(
|
||||
commonState.postUnfoldActions.forEach { it() }
|
||||
}
|
||||
|
||||
public fun<TResult : Element> deferredElement(generator: (CodeConverter) -> TResult): DeferredElement<TResult> {
|
||||
fun<TResult : Element> deferredElement(generator: (CodeConverter) -> TResult): DeferredElement<TResult> {
|
||||
val element = DeferredElement(generator, personalState)
|
||||
commonState.deferredElements.add(element)
|
||||
return element
|
||||
}
|
||||
|
||||
public fun addUsageProcessing(processing: UsageProcessing) {
|
||||
fun addUsageProcessing(processing: UsageProcessing) {
|
||||
commonState.usageProcessingsCollector(processing)
|
||||
}
|
||||
|
||||
public fun addPostUnfoldDeferredElementsAction(action: () -> Unit) {
|
||||
fun addPostUnfoldDeferredElementsAction(action: () -> Unit) {
|
||||
commonState.postUnfoldActions.add(action)
|
||||
}
|
||||
|
||||
@@ -156,10 +156,10 @@ class Converter private constructor(
|
||||
return File(convertedChildren).assignPrototype(javaFile)
|
||||
}
|
||||
|
||||
public fun convertAnnotations(owner: PsiModifierListOwner): Annotations
|
||||
fun convertAnnotations(owner: PsiModifierListOwner): Annotations
|
||||
= annotationConverter.convertAnnotations(owner)
|
||||
|
||||
public fun convertClass(psiClass: PsiClass): Class {
|
||||
fun convertClass(psiClass: PsiClass): Class {
|
||||
if (psiClass.isAnnotationType) {
|
||||
return convertAnnotationType(psiClass)
|
||||
}
|
||||
@@ -206,7 +206,7 @@ class Converter private constructor(
|
||||
}.assignPrototype(psiClass)
|
||||
}
|
||||
|
||||
public fun needOpenModifier(psiClass: PsiClass): Boolean {
|
||||
fun needOpenModifier(psiClass: PsiClass): Boolean {
|
||||
return if (psiClass.hasModifierProperty(PsiModifier.FINAL) || psiClass.hasModifierProperty(PsiModifier.ABSTRACT))
|
||||
false
|
||||
else
|
||||
@@ -294,12 +294,12 @@ class Converter private constructor(
|
||||
classBody).assignPrototype(psiClass)
|
||||
}
|
||||
|
||||
public fun convertInitializer(initializer: PsiClassInitializer): Initializer {
|
||||
fun convertInitializer(initializer: PsiClassInitializer): Initializer {
|
||||
return Initializer(deferredElement { codeConverter -> codeConverter.convertBlock(initializer.body) },
|
||||
convertModifiers(initializer, false)).assignPrototype(initializer)
|
||||
}
|
||||
|
||||
public fun convertProperty(propertyInfo: PropertyInfo, classKind: ClassKind): Member {
|
||||
fun convertProperty(propertyInfo: PropertyInfo, classKind: ClassKind): Member {
|
||||
val field = propertyInfo.field
|
||||
val getMethod = propertyInfo.getMethod
|
||||
val setMethod = propertyInfo.setMethod
|
||||
@@ -442,7 +442,7 @@ class Converter private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
public fun shouldDeclareVariableType(variable: PsiVariable, type: Type, canChangeType: Boolean): Boolean {
|
||||
fun shouldDeclareVariableType(variable: PsiVariable, type: Type, canChangeType: Boolean): Boolean {
|
||||
val initializer = variable.initializer
|
||||
if (initializer == null || initializer.isNullLiteral()) return true
|
||||
if (initializer.type is PsiPrimitiveType && type is PrimitiveType) {
|
||||
@@ -458,7 +458,7 @@ class Converter private constructor(
|
||||
return type != initializerType
|
||||
}
|
||||
|
||||
public fun convertMethod(
|
||||
fun convertMethod(
|
||||
method: PsiMethod,
|
||||
fieldsToDrop: MutableSet<PsiField>?,
|
||||
constructorConverter: ConstructorConverter?,
|
||||
@@ -583,7 +583,7 @@ class Converter private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
public fun convertCodeReferenceElement(element: PsiJavaCodeReferenceElement, hasExternalQualifier: Boolean, typeArgsConverted: List<Element>? = null): ReferenceElement {
|
||||
fun convertCodeReferenceElement(element: PsiJavaCodeReferenceElement, hasExternalQualifier: Boolean, typeArgsConverted: List<Element>? = null): ReferenceElement {
|
||||
val typeArgs = typeArgsConverted ?: typeConverter.convertTypes(element.typeParameters)
|
||||
|
||||
if (element.isQualified) {
|
||||
@@ -623,13 +623,13 @@ class Converter private constructor(
|
||||
return null
|
||||
}
|
||||
|
||||
public fun convertTypeElement(element: PsiTypeElement?, nullability: Nullability): Type
|
||||
fun convertTypeElement(element: PsiTypeElement?, nullability: Nullability): Type
|
||||
= (if (element == null) ErrorType() else typeConverter.convertType(element.type, nullability)).assignPrototype(element)
|
||||
|
||||
private fun convertToNotNullableTypes(types: Array<out PsiType?>): List<Type>
|
||||
= types.map { typeConverter.convertType(it, Nullability.NotNull) }
|
||||
|
||||
public fun convertParameter(
|
||||
fun convertParameter(
|
||||
parameter: PsiParameter,
|
||||
nullability: Nullability = Nullability.Default,
|
||||
varValModifier: FunctionParameter.VarValModifier = FunctionParameter.VarValModifier.None,
|
||||
@@ -645,13 +645,13 @@ class Converter private constructor(
|
||||
convertAnnotations(parameter), modifiers, defaultValue).assignPrototype(parameter, CommentsAndSpacesInheritance.LINE_BREAKS)
|
||||
}
|
||||
|
||||
public fun convertIdentifier(identifier: PsiIdentifier?): Identifier {
|
||||
fun convertIdentifier(identifier: PsiIdentifier?): Identifier {
|
||||
if (identifier == null) return Identifier.Empty
|
||||
|
||||
return Identifier(identifier.text!!).assignPrototype(identifier)
|
||||
}
|
||||
|
||||
public fun convertModifiers(owner: PsiModifierListOwner, isMethodInOpenClass: Boolean): Modifiers {
|
||||
fun convertModifiers(owner: PsiModifierListOwner, isMethodInOpenClass: Boolean): Modifiers {
|
||||
var modifiers = Modifiers(MODIFIERS_MAP.filter { owner.hasModifierProperty(it.first) }.map { it.second })
|
||||
.assignPrototype(owner.modifierList, CommentsAndSpacesInheritance.NO_SPACES)
|
||||
|
||||
@@ -685,7 +685,7 @@ class Converter private constructor(
|
||||
return without(Modifier.INTERNAL).with(Modifier.PUBLIC)
|
||||
}
|
||||
|
||||
public fun convertAnonymousClassBody(anonymousClass: PsiAnonymousClass): AnonymousClassBody {
|
||||
fun convertAnonymousClassBody(anonymousClass: PsiAnonymousClass): AnonymousClassBody {
|
||||
return AnonymousClassBody(ClassBodyConverter(anonymousClass, ClassKind.ANONYMOUS_OBJECT, this).convertBody(),
|
||||
anonymousClass.baseClassType.resolve()?.isInterface ?: false).assignPrototype(anonymousClass)
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.j2k
|
||||
|
||||
public data class ConverterSettings(
|
||||
data class ConverterSettings(
|
||||
var forceNotNullTypes: Boolean,
|
||||
var specifyLocalVariableTypeByDefault: Boolean,
|
||||
var specifyFieldTypeByDefault: Boolean,
|
||||
@@ -24,7 +24,7 @@ public data class ConverterSettings(
|
||||
) {
|
||||
|
||||
companion object {
|
||||
public val defaultSettings: ConverterSettings = ConverterSettings(
|
||||
val defaultSettings: ConverterSettings = ConverterSettings(
|
||||
forceNotNullTypes = true,
|
||||
specifyLocalVariableTypeByDefault = false,
|
||||
specifyFieldTypeByDefault = false,
|
||||
|
||||
@@ -36,7 +36,7 @@ class ForConverter(
|
||||
private val condition = statement.condition
|
||||
private val body = statement.body
|
||||
|
||||
public fun execute(): Statement {
|
||||
fun execute(): Statement {
|
||||
val foreach = convertToForeach()
|
||||
if (foreach != null) return foreach
|
||||
|
||||
@@ -114,13 +114,13 @@ class ForConverter(
|
||||
return WhileWithInitializationPseudoStatement(initializationConverted, whileStatement, kind)
|
||||
}
|
||||
|
||||
public class WhileWithInitializationPseudoStatement(
|
||||
public val initialization: Statement,
|
||||
public val loop: Statement,
|
||||
public val kind: WhileWithInitializationPseudoStatement.Kind
|
||||
class WhileWithInitializationPseudoStatement(
|
||||
val initialization: Statement,
|
||||
val loop: Statement,
|
||||
val kind: WhileWithInitializationPseudoStatement.Kind
|
||||
) : Statement() {
|
||||
|
||||
public enum class Kind {
|
||||
enum class Kind {
|
||||
SIMPLE,
|
||||
WITH_BLOCK,
|
||||
WITH_RUN_BLOCK
|
||||
|
||||
@@ -34,35 +34,35 @@ import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||
import java.util.*
|
||||
|
||||
public interface PostProcessor {
|
||||
public fun insertImport(file: KtFile, fqName: FqName)
|
||||
interface PostProcessor {
|
||||
fun insertImport(file: KtFile, fqName: FqName)
|
||||
|
||||
public fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?)
|
||||
fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?)
|
||||
}
|
||||
|
||||
public enum class ParseContext {
|
||||
enum class ParseContext {
|
||||
TOP_LEVEL,
|
||||
CODE_BLOCK
|
||||
}
|
||||
|
||||
public class JavaToKotlinConverter(
|
||||
class JavaToKotlinConverter(
|
||||
private val project: Project,
|
||||
private val settings: ConverterSettings,
|
||||
private val services: JavaToKotlinConverterServices
|
||||
) {
|
||||
private val LOG = Logger.getInstance("#org.jetbrains.kotlin.j2k.JavaToKotlinConverter")
|
||||
|
||||
public interface ExternalCodeProcessing {
|
||||
public fun prepareWriteOperation(progress: ProgressIndicator): () -> Unit
|
||||
interface ExternalCodeProcessing {
|
||||
fun prepareWriteOperation(progress: ProgressIndicator): () -> Unit
|
||||
}
|
||||
|
||||
public data class ElementResult(val text: String, val importsToAdd: Set<FqName>, val parseContext: ParseContext)
|
||||
data class ElementResult(val text: String, val importsToAdd: Set<FqName>, val parseContext: ParseContext)
|
||||
|
||||
public data class Result(val results: List<ElementResult?>, val externalCodeProcessing: ExternalCodeProcessing?)
|
||||
data class Result(val results: List<ElementResult?>, val externalCodeProcessing: ExternalCodeProcessing?)
|
||||
|
||||
public data class FilesResult(val results: List<String>, val externalCodeProcessing: ExternalCodeProcessing?)
|
||||
data class FilesResult(val results: List<String>, val externalCodeProcessing: ExternalCodeProcessing?)
|
||||
|
||||
public fun filesToKotlin(files: List<PsiJavaFile>, postProcessor: PostProcessor, progress: ProgressIndicator = EmptyProgressIndicator()): FilesResult {
|
||||
fun filesToKotlin(files: List<PsiJavaFile>, postProcessor: PostProcessor, progress: ProgressIndicator = EmptyProgressIndicator()): FilesResult {
|
||||
val withProgressProcessor = WithProgressProcessor(progress, files)
|
||||
|
||||
val (results, externalCodeProcessing) = elementsToKotlin(files, withProgressProcessor)
|
||||
@@ -90,7 +90,7 @@ public class JavaToKotlinConverter(
|
||||
return FilesResult(texts, externalCodeProcessing)
|
||||
}
|
||||
|
||||
public fun elementsToKotlin(inputElements: List<PsiElement>): Result {
|
||||
fun elementsToKotlin(inputElements: List<PsiElement>): Result {
|
||||
return elementsToKotlin(inputElements, WithProgressProcessor.DEFAULT)
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ public class JavaToKotlinConverter(
|
||||
}
|
||||
|
||||
private class WithProgressProcessor(private val progress: ProgressIndicator?, private val files: List<PsiJavaFile>?) {
|
||||
public companion object {
|
||||
companion object {
|
||||
val DEFAULT = WithProgressProcessor(null, null)
|
||||
}
|
||||
|
||||
@@ -303,11 +303,11 @@ public class JavaToKotlinConverter(
|
||||
private open class DelegatingProgressIndicator : WrappedProgressIndicator, StandardProgressIndicator {
|
||||
protected val delegate: ProgressIndicator
|
||||
|
||||
public constructor(indicator: ProgressIndicator) {
|
||||
constructor(indicator: ProgressIndicator) {
|
||||
delegate = indicator
|
||||
}
|
||||
|
||||
public constructor() {
|
||||
constructor() {
|
||||
val indicator = ProgressManager.getInstance().progressIndicator
|
||||
delegate = indicator ?: EmptyProgressIndicator()
|
||||
}
|
||||
|
||||
@@ -22,12 +22,12 @@ import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiFileFactory
|
||||
import com.intellij.psi.PsiJavaFile
|
||||
|
||||
public object JavaToKotlinTranslator {
|
||||
object JavaToKotlinTranslator {
|
||||
private fun createFile(text: String, project: Project): PsiFile? {
|
||||
return PsiFileFactory.getInstance(project).createFileFromText("test.java", JavaLanguage.INSTANCE, text)
|
||||
}
|
||||
|
||||
public fun prettify(code: String?): String {
|
||||
fun prettify(code: String?): String {
|
||||
if (code == null) {
|
||||
return ""
|
||||
}
|
||||
@@ -42,7 +42,7 @@ public object JavaToKotlinTranslator {
|
||||
.trim()
|
||||
}
|
||||
|
||||
public fun generateKotlinCode(javaCode: String, project: Project): String {
|
||||
fun generateKotlinCode(javaCode: String, project: Project): String {
|
||||
val file = createFile(javaCode, project)
|
||||
if (file is PsiJavaFile) {
|
||||
val converter = JavaToKotlinConverter(file.project, ConverterSettings.defaultSettings, EmptyJavaToKotlinServices)
|
||||
@@ -53,6 +53,6 @@ public object JavaToKotlinTranslator {
|
||||
}
|
||||
|
||||
//used in Kotlin Web Demo
|
||||
public fun translateToKotlin(code: String, project: Project): String {
|
||||
fun translateToKotlin(code: String, project: Project): String {
|
||||
return JavaToKotlinTranslator.generateKotlinCode(code, project)
|
||||
}
|
||||
|
||||
@@ -33,9 +33,9 @@ class OverloadReducer(
|
||||
dropOverloadsForDefaultValues(map)
|
||||
}
|
||||
|
||||
public fun shouldDropMethod(method: PsiMethod): Boolean = method in methodsToDrop
|
||||
fun shouldDropMethod(method: PsiMethod): Boolean = method in methodsToDrop
|
||||
|
||||
public fun parameterDefault(method: PsiMethod, parameterIndex: Int): PsiExpression? {
|
||||
fun parameterDefault(method: PsiMethod, parameterIndex: Int): PsiExpression? {
|
||||
val defaults = methodToLastParameterDefaults[method] ?: return null
|
||||
val index = method.parameterList.parametersCount - parameterIndex - 1
|
||||
return if (index < defaults.size) defaults[index] else null
|
||||
@@ -173,7 +173,7 @@ class OverloadReducer(
|
||||
}
|
||||
}
|
||||
|
||||
public fun Converter.convertParameterList(
|
||||
fun Converter.convertParameterList(
|
||||
method: PsiMethod,
|
||||
overloadReducer: OverloadReducer?,
|
||||
convertParameter: (parameter: PsiParameter, default: DeferredElement<Expression>?) -> FunctionParameter = { parameter, default -> convertParameter(parameter, defaultValue = default) },
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.j2k
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.util.PsiUtil
|
||||
|
||||
public interface ReferenceSearcher {
|
||||
interface ReferenceSearcher {
|
||||
fun findLocalUsages(element: PsiElement, scope: PsiElement): Collection<PsiReference>
|
||||
fun hasInheritors(`class`: PsiClass): Boolean
|
||||
fun hasOverrides(method: PsiMethod): Boolean
|
||||
@@ -27,10 +27,10 @@ public interface ReferenceSearcher {
|
||||
fun findUsagesForExternalCodeProcessing(element: PsiElement, searchJava: Boolean, searchKotlin: Boolean): Collection<PsiReference>
|
||||
}
|
||||
|
||||
public fun ReferenceSearcher.findVariableUsages(variable: PsiVariable, scope: PsiElement): Collection<PsiReferenceExpression>
|
||||
fun ReferenceSearcher.findVariableUsages(variable: PsiVariable, scope: PsiElement): Collection<PsiReferenceExpression>
|
||||
= findLocalUsages(variable, scope).filterIsInstance<PsiReferenceExpression>()
|
||||
|
||||
public fun ReferenceSearcher.findMethodCalls(method: PsiMethod, scope: PsiElement): Collection<PsiMethodCallExpression> {
|
||||
fun ReferenceSearcher.findMethodCalls(method: PsiMethod, scope: PsiElement): Collection<PsiMethodCallExpression> {
|
||||
return findLocalUsages(method, scope).mapNotNull {
|
||||
if (it is PsiReferenceExpression) {
|
||||
val methodCall = it.parent as? PsiMethodCallExpression
|
||||
@@ -42,7 +42,7 @@ public fun ReferenceSearcher.findMethodCalls(method: PsiMethod, scope: PsiElemen
|
||||
}
|
||||
}
|
||||
|
||||
public fun PsiField.isVar(searcher: ReferenceSearcher): Boolean {
|
||||
fun PsiField.isVar(searcher: ReferenceSearcher): Boolean {
|
||||
if (hasModifierProperty(PsiModifier.FINAL)) return false
|
||||
if (!hasModifierProperty(PsiModifier.PRIVATE)) return true
|
||||
val containingClass = containingClass ?: return true
|
||||
@@ -64,10 +64,10 @@ public fun PsiField.isVar(searcher: ReferenceSearcher): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
public fun PsiVariable.hasWriteAccesses(searcher: ReferenceSearcher, scope: PsiElement?): Boolean
|
||||
fun PsiVariable.hasWriteAccesses(searcher: ReferenceSearcher, scope: PsiElement?): Boolean
|
||||
= if (scope != null) searcher.findVariableUsages(this, scope).any { PsiUtil.isAccessedForWriting(it) } else false
|
||||
|
||||
public object EmptyReferenceSearcher: ReferenceSearcher {
|
||||
object EmptyReferenceSearcher: ReferenceSearcher {
|
||||
override fun findLocalUsages(element: PsiElement, scope: PsiElement): Collection<PsiReference> = emptyList()
|
||||
override fun hasInheritors(`class`: PsiClass) = false
|
||||
override fun hasOverrides(method: PsiMethod) = false
|
||||
|
||||
@@ -19,8 +19,8 @@ package org.jetbrains.kotlin.j2k
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
|
||||
public interface ResolverForConverter {
|
||||
public fun resolveToDescriptor(declaration: KtDeclaration): DeclarationDescriptor?
|
||||
interface ResolverForConverter {
|
||||
fun resolveToDescriptor(declaration: KtDeclaration): DeclarationDescriptor?
|
||||
}
|
||||
|
||||
object EmptyResolverForConverter : ResolverForConverter {
|
||||
|
||||
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.j2k.ast.*
|
||||
import java.util.*
|
||||
|
||||
class SwitchConverter(private val codeConverter: CodeConverter) {
|
||||
public fun convert(statement: PsiSwitchStatement): WhenStatement
|
||||
fun convert(statement: PsiSwitchStatement): WhenStatement
|
||||
= WhenStatement(codeConverter.convertExpression(statement.expression), switchBodyToWhenEntries(statement.body))
|
||||
|
||||
private class Case(val label: PsiSwitchLabelStatement?, val statements: List<PsiStatement>)
|
||||
|
||||
@@ -30,7 +30,7 @@ import java.util.*
|
||||
class TypeConverter(val converter: Converter) {
|
||||
private val typesBeingConverted = HashSet<PsiType>()
|
||||
|
||||
public fun convertType(
|
||||
fun convertType(
|
||||
type: PsiType?,
|
||||
nullability: Nullability = Nullability.Default,
|
||||
mutability: Mutability = Mutability.Default,
|
||||
@@ -53,10 +53,10 @@ class TypeConverter(val converter: Converter) {
|
||||
}
|
||||
}
|
||||
|
||||
public fun convertTypes(types: Array<PsiType>): List<Type>
|
||||
fun convertTypes(types: Array<PsiType>): List<Type>
|
||||
= types.map { convertType(it) }
|
||||
|
||||
public fun convertVariableType(variable: PsiVariable): Type {
|
||||
fun convertVariableType(variable: PsiVariable): Type {
|
||||
val result = if (variable.isMainMethodParameter()) {
|
||||
ArrayType(ClassType(ReferenceElement(Identifier("String").assignNoPrototype(), listOf()).assignNoPrototype(), Nullability.NotNull, converter.settings).assignNoPrototype(),
|
||||
Nullability.NotNull,
|
||||
@@ -68,19 +68,19 @@ class TypeConverter(val converter: Converter) {
|
||||
return result.assignPrototype(variable.typeElement)
|
||||
}
|
||||
|
||||
public fun convertMethodReturnType(method: PsiMethod): Type
|
||||
fun convertMethodReturnType(method: PsiMethod): Type
|
||||
= convertType(method.returnType, methodNullability(method), methodMutability(method)).assignPrototype(method.returnTypeElement)
|
||||
|
||||
public fun variableNullability(variable: PsiVariable): Nullability
|
||||
fun variableNullability(variable: PsiVariable): Nullability
|
||||
= nullabilityFlavor.forVariableType(variable)
|
||||
|
||||
public fun methodNullability(method: PsiMethod): Nullability
|
||||
fun methodNullability(method: PsiMethod): Nullability
|
||||
= nullabilityFlavor.forMethodReturnType(method)
|
||||
|
||||
public fun variableMutability(variable: PsiVariable): Mutability
|
||||
fun variableMutability(variable: PsiVariable): Mutability
|
||||
= mutabilityFlavor.forVariableType(variable)
|
||||
|
||||
public fun methodMutability(method: PsiMethod): Mutability
|
||||
fun methodMutability(method: PsiMethod): Mutability
|
||||
= mutabilityFlavor.forMethodReturnType(method)
|
||||
|
||||
private fun PsiVariable.isMainMethodParameter() = this is PsiParameter && (declarationScope as? PsiMethod)?.isMainMethod() ?: false
|
||||
|
||||
@@ -144,7 +144,7 @@ class TypeVisitor(
|
||||
CommonClassNames.JAVA_UTIL_MAP to "kotlin.Map"
|
||||
)
|
||||
|
||||
public val toKotlinMutableTypesMap: Map<String, String> = mapOf(
|
||||
val toKotlinMutableTypesMap: Map<String, String> = mapOf(
|
||||
CommonClassNames.JAVA_UTIL_LIST to "kotlin.MutableList",
|
||||
CommonClassNames.JAVA_UTIL_COLLECTION to "kotlin.MutableCollection",
|
||||
CommonClassNames.JAVA_UTIL_SET to "kotlin.MutableSet",
|
||||
|
||||
@@ -39,10 +39,10 @@ class PrimaryConstructor(
|
||||
|
||||
override fun generateCode(builder: CodeBuilder) { throw IncorrectOperationException() }
|
||||
|
||||
public fun initializer(): Initializer
|
||||
fun initializer(): Initializer
|
||||
= Initializer(body!!, Modifiers.Empty).assignPrototypesFrom(this, CommentsAndSpacesInheritance(commentsBefore = false))
|
||||
|
||||
public fun createSignature(converter: Converter): PrimaryConstructorSignature {
|
||||
fun createSignature(converter: Converter): PrimaryConstructorSignature {
|
||||
val signature = PrimaryConstructorSignature(annotations, modifiers, parameterList)
|
||||
|
||||
// assign prototypes later because we don't know yet whether the body is empty or not
|
||||
@@ -56,7 +56,7 @@ class PrimaryConstructor(
|
||||
}
|
||||
|
||||
class PrimaryConstructorSignature(val annotations: Annotations, private val modifiers: Modifiers, val parameterList: ParameterList) : Element() {
|
||||
public val accessModifier: Modifier? = run {
|
||||
val accessModifier: Modifier? = run {
|
||||
val modifier = modifiers.accessModifier()
|
||||
if (modifier != Modifier.PUBLIC) modifier else null
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ fun Element.canonicalCode(): String {
|
||||
}
|
||||
|
||||
abstract class Element {
|
||||
public var prototypes: List<PrototypeInfo>? = null
|
||||
var prototypes: List<PrototypeInfo>? = null
|
||||
set(value) {
|
||||
// do not assign prototypes to singleton instances
|
||||
if (canBeSingleton) {
|
||||
@@ -84,18 +84,18 @@ abstract class Element {
|
||||
protected open val canBeSingleton: Boolean
|
||||
get() = isEmpty
|
||||
|
||||
public var createdAt: String?
|
||||
var createdAt: String?
|
||||
= if (saveCreationStacktraces)
|
||||
Exception().stackTrace.joinToString("\n")
|
||||
else
|
||||
null
|
||||
|
||||
/** This method should not be used anywhere except for CodeBuilder! Use CodeBuilder.append instead. */
|
||||
public abstract fun generateCode(builder: CodeBuilder)
|
||||
abstract fun generateCode(builder: CodeBuilder)
|
||||
|
||||
public open fun postGenerateCode(builder: CodeBuilder) { }
|
||||
open fun postGenerateCode(builder: CodeBuilder) { }
|
||||
|
||||
public open val isEmpty: Boolean get() = false
|
||||
open val isEmpty: Boolean get() = false
|
||||
|
||||
object Empty : Element() {
|
||||
override fun generateCode(builder: CodeBuilder) { }
|
||||
@@ -110,7 +110,7 @@ abstract class Element {
|
||||
// this class should never be created directly - Converter.deferredElement() should be used!
|
||||
class DeferredElement<TResult : Element>(
|
||||
private val generator: (CodeConverter) -> TResult,
|
||||
public val converterState: Converter.PersonalState
|
||||
val converterState: Converter.PersonalState
|
||||
) : Element() {
|
||||
|
||||
private var result: TResult? = null
|
||||
@@ -123,7 +123,7 @@ class DeferredElement<TResult : Element>(
|
||||
override val canBeSingleton: Boolean
|
||||
get() = false
|
||||
|
||||
public fun unfold(codeConverter: CodeConverter) {
|
||||
fun unfold(codeConverter: CodeConverter) {
|
||||
assert(result == null)
|
||||
result = generator(codeConverter)
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ class Function(
|
||||
override val parameterList: ParameterList
|
||||
get() = super.parameterList!!
|
||||
|
||||
protected override fun presentationModifiers(): Modifiers {
|
||||
override fun presentationModifiers(): Modifiers {
|
||||
var modifiers = this.modifiers
|
||||
if (isInInterface) {
|
||||
modifiers = modifiers.without(Modifier.ABSTRACT)
|
||||
|
||||
@@ -31,7 +31,7 @@ class Import(val name: String) : Element() {
|
||||
}
|
||||
}
|
||||
|
||||
class ImportList(public var imports: List<Import>) : Element() {
|
||||
class ImportList(var imports: List<Import>) : Element() {
|
||||
override val isEmpty: Boolean
|
||||
get() = imports.isEmpty()
|
||||
|
||||
@@ -40,10 +40,10 @@ class ImportList(public var imports: List<Import>) : Element() {
|
||||
}
|
||||
}
|
||||
|
||||
public fun Converter.convertImportList(importList: PsiImportList): ImportList =
|
||||
fun Converter.convertImportList(importList: PsiImportList): ImportList =
|
||||
ImportList(importList.allImportStatements.mapNotNull { convertImport(it, true) }).assignPrototype(importList)
|
||||
|
||||
public fun Converter.convertImport(anImport: PsiImportStatementBase, filter: Boolean): Import? {
|
||||
fun Converter.convertImport(anImport: PsiImportStatementBase, filter: Boolean): Import? {
|
||||
fun doConvert(): Import? {
|
||||
val reference = anImport.importReference ?: return null
|
||||
val qualifiedName = quoteKeywords(reference.qualifiedName!!)
|
||||
|
||||
@@ -32,19 +32,19 @@ class MethodCallExpression(
|
||||
}
|
||||
|
||||
companion object {
|
||||
public fun buildNotNull(receiver: Expression?,
|
||||
fun buildNotNull(receiver: Expression?,
|
||||
methodName: String,
|
||||
arguments: List<Expression> = listOf(),
|
||||
typeArguments: List<Type> = listOf()): MethodCallExpression
|
||||
= build(receiver, methodName, arguments, typeArguments, false)
|
||||
|
||||
public fun buildNullable(receiver: Expression?,
|
||||
fun buildNullable(receiver: Expression?,
|
||||
methodName: String,
|
||||
arguments: List<Expression> = listOf(),
|
||||
typeArguments: List<Type> = listOf()): MethodCallExpression
|
||||
= build(receiver, methodName, arguments, typeArguments, true)
|
||||
|
||||
public fun build(receiver: Expression?,
|
||||
fun build(receiver: Expression?,
|
||||
methodName: String,
|
||||
arguments: List<Expression>,
|
||||
typeArguments: List<Type>,
|
||||
|
||||
@@ -29,7 +29,7 @@ enum class Modifier(private val str: String) {
|
||||
OVERRIDE("override"),
|
||||
INNER("inner");
|
||||
|
||||
public fun toKotlin(): String = str
|
||||
fun toKotlin(): String = str
|
||||
}
|
||||
|
||||
val ACCESS_MODIFIERS = setOf(Modifier.PUBLIC, Modifier.PROTECTED, Modifier.PRIVATE, Modifier.INTERNAL)
|
||||
|
||||
@@ -27,7 +27,7 @@ class FunctionParameter(identifier: Identifier,
|
||||
val modifiers: Modifiers,
|
||||
val defaultValue: DeferredElement<Expression>? = null
|
||||
): Parameter(identifier, type) {
|
||||
public enum class VarValModifier {
|
||||
enum class VarValModifier {
|
||||
None,
|
||||
Val,
|
||||
Var
|
||||
|
||||
@@ -98,7 +98,7 @@ private class PropertyDetector(
|
||||
) {
|
||||
private val isOpenClass = converter.needOpenModifier(psiClass)
|
||||
|
||||
public fun detectProperties(): Map<PsiMember, PropertyInfo> {
|
||||
fun detectProperties(): Map<PsiMember, PropertyInfo> {
|
||||
val methodsToCheck = ArrayList<Pair<PsiMethod, SuperInfo.Property?>>()
|
||||
for (method in psiClass.methods) {
|
||||
val name = method.name
|
||||
|
||||
@@ -20,6 +20,6 @@ import com.intellij.psi.PsiReference
|
||||
|
||||
class ElementRenamedCodeProcessor(private val newName: String) : ExternalCodeProcessor {
|
||||
override fun processUsage(reference: PsiReference): Array<PsiReference>? {
|
||||
return reference.handleElementRename(newName).getReferences()
|
||||
return reference.handleElementRename(newName).references
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.j2k.usageProcessing
|
||||
|
||||
import com.intellij.psi.*
|
||||
|
||||
public class MethodIntoObjectProcessing(private val method: PsiMethod, private val objectName: String) : UsageProcessing {
|
||||
class MethodIntoObjectProcessing(private val method: PsiMethod, private val objectName: String) : UsageProcessing {
|
||||
override val targetElement: PsiElement get() = method
|
||||
|
||||
override val convertedCodeProcessor: ConvertedCodeProcessor? get() = null
|
||||
|
||||
@@ -44,10 +44,10 @@ import org.jetbrains.kotlin.utils.PathUtil
|
||||
import java.io.File
|
||||
import java.net.URLClassLoader
|
||||
|
||||
public abstract class AbstractJavaToKotlinConverterForWebDemoTest : TestCase() {
|
||||
abstract class AbstractJavaToKotlinConverterForWebDemoTest : TestCase() {
|
||||
val DISPOSABLE = Disposer.newDisposable()
|
||||
|
||||
public fun doTest(javaPath: String) {
|
||||
fun doTest(javaPath: String) {
|
||||
try {
|
||||
val fileContents = FileUtil.loadFile(File(javaPath), true)
|
||||
val javaCoreEnvironment: JavaCoreProjectEnvironment = setUpJavaCoreEnvironment()
|
||||
|
||||
@@ -31,8 +31,8 @@ import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
public abstract class AbstractJavaToKotlinConverterMultiFileTest : AbstractJavaToKotlinConverterTest() {
|
||||
public fun doTest(dirPath: String) {
|
||||
abstract class AbstractJavaToKotlinConverterMultiFileTest : AbstractJavaToKotlinConverterTest() {
|
||||
fun doTest(dirPath: String) {
|
||||
val project = LightPlatformTestCase.getProject()!!
|
||||
val psiManager = PsiManager.getInstance(project)
|
||||
|
||||
|
||||
@@ -31,10 +31,10 @@ import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import java.io.File
|
||||
import java.util.regex.Pattern
|
||||
|
||||
public abstract class AbstractJavaToKotlinConverterSingleFileTest : AbstractJavaToKotlinConverterTest() {
|
||||
abstract class AbstractJavaToKotlinConverterSingleFileTest : AbstractJavaToKotlinConverterTest() {
|
||||
val testHeaderPattern = Pattern.compile("//(element|expression|statement|method|class|file|comp)\n")
|
||||
|
||||
public fun doTest(javaPath: String) {
|
||||
fun doTest(javaPath: String) {
|
||||
val project = LightPlatformTestCase.getProject()!!
|
||||
val javaFile = File(javaPath)
|
||||
val fileContents = FileUtil.loadFile(javaFile, true)
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import java.io.File
|
||||
|
||||
public abstract class AbstractJavaToKotlinConverterTest : LightCodeInsightFixtureTestCase() {
|
||||
abstract class AbstractJavaToKotlinConverterTest : LightCodeInsightFixtureTestCase() {
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user