
com.netflix.rewrite.ast.Cursor.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rewrite-core Show documentation
Show all versions of rewrite-core Show documentation
Pluggable and distributed refactoring tool for Java source code
The newest version!
/**
* Copyright 2016 Netflix, Inc.
*
* 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 com.netflix.rewrite.ast
@Suppress("UNCHECKED_CAST")
data class Cursor(val path: List) {
fun plus(t: Tree): Cursor = copy(path + t)
operator fun plus(cursor: Cursor) = copy(path + cursor.path)
fun parent() = copy(path.dropLast(1))
fun last(): Tree = path.last()
companion object {
val Empty = Cursor(emptyList())
}
override fun equals(other: Any?): Boolean = other is Cursor && path.size == other.path.size && path.let { p ->
for(i in p.indices) {
if(p[i] != other.path[i])
return false
}
return true
}
override fun hashCode(): Int = path.hashCode()
fun enclosingVariableDecl(): Tr.VariableDecls? = path.filterIsInstance().lastOrNull()
fun enclosingMethod(): Tr.MethodDecl? = path.filterIsInstance().lastOrNull()
fun enclosingClass(): Tr.ClassDecl? = path.filterIsInstance().lastOrNull()
fun enclosingCompilationUnit(): Tr.CompilationUnit = path.filterIsInstance().first()
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy