Code review changes

This commit is contained in:
Yan Zhulanow
2016-03-29 22:57:31 +03:00
parent 7ed5b6c10b
commit 04e8161f1d
112 changed files with 327 additions and 357 deletions
@@ -19,7 +19,7 @@ interface UastConverter {
fun convert(element: Any?, parent: UElement): UElement?
fun convertWithParent(element: Any?): UElement?
fun isFileSupported(path: String): Boolean
fun isFileSupported(name: String): Boolean
}
interface UastLanguagePlugin {
@@ -33,7 +33,7 @@ interface UastAdditionalChecker {
object UastConverterUtils {
@JvmStatic
fun isFileSupported(converters: List<UastLanguagePlugin>, path: String): Boolean {
return converters.any { it.converter.isFileSupported(path) }
fun isFileSupported(converters: List<UastLanguagePlugin>, name: String): Boolean {
return converters.any { it.converter.isFileSupported(name) }
}
}
@@ -34,7 +34,6 @@ abstract class UastVisitor {
open fun visitQualifiedExpression(node: UQualifiedExpression): Boolean = false
open fun visitSimpleReferenceExpression(node: USimpleReferenceExpression): Boolean = false
open fun visitCallExpression(node: UCallExpression): Boolean = false
open fun visitAssignmentExpression(node: UAssignmentExpression): Boolean = false
open fun visitBinaryExpression(node: UBinaryExpression): Boolean = false
open fun visitBinaryExpressionWithType(node: UBinaryExpressionWithType): Boolean = false
open fun visitParenthesizedExpression(node: UParenthesizedExpression): Boolean = false
@@ -80,7 +79,6 @@ abstract class UastVisitor {
is UQualifiedExpression -> visitQualifiedExpression(node)
is USimpleReferenceExpression -> visitSimpleReferenceExpression(node)
is UCallExpression -> visitCallExpression(node)
is UAssignmentExpression -> visitAssignmentExpression(node)
is UBinaryExpression -> visitBinaryExpression(node)
is UBinaryExpressionWithType -> visitBinaryExpressionWithType(node)
is UParenthesizedExpression -> visitParenthesizedExpression(node)
@@ -20,7 +20,8 @@ interface UAnnotation : UElement, UNamed, UFqNamed, LeafUElement {
val valueArguments: List<UNamedExpression>
fun getValue(name: String) = valueArguments.firstOrNull { it.name == name }?.expression?.evaluate()
fun getValues() = valueArguments.map { it.expression.evaluate() }
fun getValues() = valueArguments.map { Pair(it.name, it.expression.evaluate()) }
override fun logString() = log("UAnnotation ($name)")
override fun renderString() = if (valueArguments.isEmpty()) "@$name" else "@$name(" +
@@ -17,6 +17,10 @@ package org.jetbrains.uast
interface UElement {
val parent: UElement?
open val isValid: Boolean
get() = true
fun logString(): String
fun renderString(): String = logString()
fun traverse(callback: UastCallback)
@@ -16,15 +16,11 @@
package org.jetbrains.uast
interface UExpression : UElement {
fun evaluate(): Any?
open fun evaluate(): Any? = null
fun evaluateString(): String? = evaluate() as? String
fun getExpressionType(): UType? = null
}
interface NoEvaluate : UExpression {
override fun evaluate() = null
}
interface NoAnnotations : UAnnotated {
override val annotations: List<UAnnotation>
get() = emptyList()
@@ -34,6 +30,6 @@ interface NoModifiers : UModifierOwner {
override fun hasModifier(modifier: UastModifier) = false
}
class EmptyExpression(override val parent: UElement) : UExpression, LeafUElement, NoEvaluate {
class EmptyExpression(override val parent: UElement) : UExpression, LeafUElement {
override fun logString() = "EmptyExpression"
}
@@ -16,24 +16,23 @@
package org.jetbrains.uast
interface UForEachExpression : ULoopExpression {
val variableName: String?
val variable: UVariable
val iteratedValue: UExpression
override fun traverse(callback: UastCallback) {
variable.handleTraverse(callback)
iteratedValue.handleTraverse(callback)
body.handleTraverse(callback)
}
override fun renderString() = buildString {
append("for (")
append(variableName ?: "<error name>")
append(variable.name)
append(" : ")
append(iteratedValue.renderString())
append(") ")
append(body.renderString())
}
override fun logString() = "UForEachExpression ($variableName)\n" +
iteratedValue.logString().withMargin + "\n" +
body.logString().withMargin
override fun logString() = log("UForEachExpression", variable, iteratedValue, body)
}
@@ -51,4 +51,4 @@ interface UDefaultSwitchClauseExpression : USwitchClauseExpression {
override fun renderString() = "else -> "
}
class SimpleUDefaultSwitchClauseExpression(override val parent: UElement) : UDefaultSwitchClauseExpression, NoEvaluate
class SimpleUDefaultSwitchClauseExpression(override val parent: UElement) : UDefaultSwitchClauseExpression
@@ -22,6 +22,7 @@ interface UTryExpression : UExpression {
val finallyClause: UExpression?
override fun traverse(callback: UastCallback) {
resources?.handleTraverseList(callback)
tryClause.handleTraverse(callback)
catchClauses.handleTraverseList(callback)
finallyClause?.handleTraverse(callback)
@@ -47,6 +48,8 @@ interface UCatchClause : UElement {
override fun traverse(callback: UastCallback) {
body.handleTraverse(callback)
parameters.handleTraverseList(callback)
types.handleTraverseList(callback)
}
override fun logString() = log("UCatchClause", body)
@@ -47,7 +47,7 @@ interface UClass : UDeclaration, UFqNamed, UModifierOwner, UAnnotated {
val constructors: List<UFunction>
get() = declarations.filter { it is UFunction && it.kind == UastFunctionKind.CONSTRUCTOR } as List<UFunction>
fun isSubclassOf(name: String) : Boolean
fun isSubclassOf(fqName: String) : Boolean
fun getSuperClass(context: UastContext): UClass?
@@ -81,7 +81,7 @@ object UClassNotResolved : UClass {
override val visibility = UastVisibility.PRIVATE
override val superTypes = emptyList<UType>()
override val declarations = emptyList<UDeclaration>()
override fun isSubclassOf(name: String) = false
override fun isSubclassOf(fqName: String) = false
override val companions = emptyList<UClass>()
override val defaultType = UastErrorType
override val nameElement = null
@@ -22,6 +22,9 @@ interface UImportStatement : UElement {
val isStarImport: Boolean
val kind: UastImportKind
/* Returns null if isStarImport = true */
fun resolve(context: UastContext): UDeclaration?
override fun traverse(callback: UastCallback) {}
override fun logString() = "UImport ($fqNameToImport)"
override fun renderString() = "import ${fqNameToImport ?: ""}"
@@ -35,6 +35,10 @@ interface UType : UElement, UNamed, UFqNamed, UAnnotated, UResolvable, LeafUElem
override fun resolve(context: UastContext): UClass?
override fun resolveOrEmpty(context: UastContext) = resolve(context) ?: UClassNotResolved
override fun traverse(callback: UastCallback) {
annotations.handleTraverseList(callback)
}
}
interface UTypeReference : UDeclaration, UResolvable, LeafUElement {
@@ -19,6 +19,13 @@ interface UVariable : UDeclaration, UModifierOwner, UAnnotated {
val initializer: UExpression?
val kind: UastVariableKind
val type: UType
val visibility: UastVisibility
open val getters: List<UFunction>?
get() = null
open val setters: List<UFunction>?
get() = null
override fun traverse(callback: UastCallback) {
nameElement?.handleTraverse(callback)
@@ -37,3 +44,16 @@ interface UVariable : UDeclaration, UModifierOwner, UAnnotated {
override fun logString() = "UVariable ($name, kind = ${kind.name})\n" +
(initializer?.let { it.logString().withMargin } ?: "<no initializer>")
}
object UVariableNotResolved : UVariable {
override val initializer = null
override val kind = UastVariableKind.MEMBER
override val type = UastErrorType
override val nameElement = null
override val parent = null
override val name = "<variable not resolved>"
override val visibility = UastVisibility.LOCAL
override fun hasModifier(modifier: UastModifier) = false
override val annotations = emptyList<UAnnotation>()
}
@@ -1,31 +0,0 @@
/*
* Copyright 2000-2016 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.uast
interface UAssignmentExpression : UExpression {
val reference: UExpression
val operator: String
val value: UExpression
override fun traverse(callback: UastCallback) {
reference.handleTraverse(callback)
value.handleTraverse(callback)
}
override fun logString() = "UAssignmentExpression ($operator)\n" + reference.logString().withMargin + "\n" + value.logString().withMargin
override fun renderString() = reference.renderString() + ' ' + operator + ' ' + value.renderString()
}
@@ -23,6 +23,8 @@ interface ULabeledExpression : UExpression {
expression.handleTraverse(callback)
}
override fun evaluate() = expression.evaluate()
override fun logString() = log("ULabeledExpression ($label)", expression)
override fun renderString() = "$label@ ${expression.renderString()}"
@@ -16,8 +16,6 @@
package org.jetbrains.uast
interface ULiteralExpression : UExpression {
val text: String
val value: Any?
val isNull: Boolean
@@ -28,7 +26,9 @@ interface ULiteralExpression : UExpression {
val isBoolean: Boolean
get() = evaluate() is Boolean
fun asString() = value?.toString() ?: ""
override fun traverse(callback: UastCallback) {}
override fun logString() = "ULiteralExpression ($text)"
override fun renderString() = text
override fun logString() = "ULiteralExpression (${asString()})"
override fun renderString() = asString()
}
@@ -22,6 +22,8 @@ interface UParenthesizedExpression : UExpression {
expression.handleTraverse(callback)
}
override fun evaluate() = expression.evaluate()
override fun logString() = log("UParenthesizedExpression", expression)
override fun renderString() = '(' + expression.renderString() + ')'
}
@@ -15,8 +15,7 @@
*/
package org.jetbrains.uast
interface USuperExpression : UExpression {
interface USuperExpression : UExpression, LeafUElement {
override fun logString() = "USuperExpression"
override fun renderString() = "super"
override fun traverse(callback: UastCallback) {}
}
@@ -15,8 +15,7 @@
*/
package org.jetbrains.uast
interface UThisExpression : UExpression {
interface UThisExpression : UExpression, LeafUElement {
override fun logString() = "UThisExpression"
override fun renderString() = "this"
override fun traverse(callback: UastCallback) {}
}
@@ -17,13 +17,20 @@ package org.jetbrains.uast
open class UastFunctionKind(val text: String) {
class UastInitializerKind(val name: String) : UastFunctionKind("INITIALIZER ($name)")
class UastVariableAccessor(val name: String) : UastFunctionKind(name)
companion object {
@JvmField
val FUNCTION = UastFunctionKind("function")
@JvmField
val CONSTRUCTOR = UastFunctionKind("CONSTRUCTOR")
val CONSTRUCTOR = UastFunctionKind("constructor")
@JvmField
val GETTER = UastVariableAccessor("getter")
@JvmField
val SETTER = UastVariableAccessor("setter")
}
override fun toString(): String{
@@ -24,6 +24,9 @@ class UastImportKind(val text: String) {
@JvmField
val MEMBER = UastImportKind("member")
@JvmField
val UNKNOWN = UastImportKind("unknown")
}
override fun toString(): String{