Code review changes
This commit is contained in:
@@ -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"
|
||||
}
|
||||
+4
-5
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user