JavacWrapper: remove code duplication around getVisibility

This commit is contained in:
Mikhail Glukhikh
2019-09-17 12:11:33 +03:00
parent 298a30d245
commit 0c662a5a34
2 changed files with 33 additions and 39 deletions
@@ -36,21 +36,22 @@ internal val Element.isStatic: Boolean
internal val Element.isFinal: Boolean
get() = modifiers.contains(Modifier.FINAL)
internal fun Element.getVisibility(): Visibility = modifiers.let { modifiers ->
internal fun Element.getVisibility(): Visibility = modifiers.getVisibility()
internal fun Set<Modifier>.getVisibility(): Visibility =
when {
Modifier.PUBLIC in modifiers -> Visibilities.PUBLIC
Modifier.PRIVATE in modifiers -> Visibilities.PRIVATE
Modifier.PROTECTED in modifiers -> {
if (Modifier.STATIC in modifiers) {
Modifier.PUBLIC in this -> Visibilities.PUBLIC
Modifier.PRIVATE in this -> Visibilities.PRIVATE
Modifier.PROTECTED in this -> {
if (Modifier.STATIC in this) {
JavaVisibilities.PROTECTED_STATIC_VISIBILITY
}
else {
} else {
JavaVisibilities.PROTECTED_AND_PACKAGE
}
}
else -> JavaVisibilities.PACKAGE_VISIBILITY
}
}
internal fun TypeElement.computeClassId(): ClassId? {
val enclosingElement = enclosingElement
@@ -63,20 +64,23 @@ internal fun TypeElement.computeClassId(): ClassId? {
}
internal fun ExecutableElement.valueParameters(javac: JavacWrapper): List<JavaValueParameter> =
parameters.let { parameters ->
val isVarArgs = isVarArgs
val lastIndex = parameters.lastIndex
parameters.mapIndexed { index, parameter ->
val simpleName = parameter.simpleName.toString()
SymbolBasedValueParameter(parameter,
if (!simpleName.contentEquals("arg$index")) simpleName else "p$index",
index == lastIndex && isVarArgs,
javac)
}
parameters.let { parameters ->
val isVarArgs = isVarArgs
val lastIndex = parameters.lastIndex
parameters.mapIndexed { index, parameter ->
val simpleName = parameter.simpleName.toString()
SymbolBasedValueParameter(
parameter,
if (!simpleName.contentEquals("arg$index")) simpleName else "p$index",
index == lastIndex && isVarArgs,
javac
)
}
}
internal fun AnnotatedConstruct.findAnnotation(fqName: FqName,
javac: JavacWrapper) =
annotationMirrors.find {
(it.annotationType.asElement() as TypeElement).qualifiedName.toString() == fqName.asString()
}?.let { SymbolBasedAnnotation(it, javac) }
internal fun AnnotatedConstruct.findAnnotation(
fqName: FqName,
javac: JavacWrapper
) = annotationMirrors.find {
(it.annotationType.asElement() as TypeElement).qualifiedName.toString() == fqName.asString()
}?.let { SymbolBasedAnnotation(it, javac) }
@@ -17,11 +17,10 @@
package org.jetbrains.kotlin.javac.wrappers.trees
import com.sun.tools.javac.tree.JCTree
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.javac.wrappers.symbols.SymbolBasedArrayAnnotationArgument
import org.jetbrains.kotlin.javac.wrappers.symbols.SymbolBasedReferenceAnnotationArgument
import org.jetbrains.kotlin.load.java.JavaVisibilities
import org.jetbrains.kotlin.javac.wrappers.symbols.getVisibility
import org.jetbrains.kotlin.load.java.structure.JavaAnnotation
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
@@ -41,17 +40,7 @@ internal val JCTree.JCModifiers.hasDefaultModifier: Boolean
get() = Modifier.DEFAULT in getFlags()
internal val JCTree.JCModifiers.visibility: Visibility
get() = getFlags().let {
when {
Modifier.PUBLIC in it -> Visibilities.PUBLIC
Modifier.PRIVATE in it -> Visibilities.PRIVATE
Modifier.PROTECTED in it -> {
if (Modifier.STATIC in it) JavaVisibilities.PROTECTED_STATIC_VISIBILITY
else JavaVisibilities.PROTECTED_AND_PACKAGE
}
else -> JavaVisibilities.PACKAGE_VISIBILITY
}
}
get() = getFlags().getVisibility()
internal fun JCTree.annotations(): Collection<JCTree.JCAnnotation> = when (this) {
is JCTree.JCMethodDecl -> mods?.annotations
@@ -71,12 +60,13 @@ fun Collection<JavaAnnotation>.filterTypeAnnotations(): Collection<JavaAnnotatio
when (elementTypeArg) {
is SymbolBasedArrayAnnotationArgument -> {
elementTypeArg.args.find { (it as? SymbolBasedReferenceAnnotationArgument)?.element?.simpleName?.contentEquals("TYPE_USE") ?: false }
?.let { filteredAnnotations.add(annotation) }
elementTypeArg.args.find {
(it as? SymbolBasedReferenceAnnotationArgument)?.element?.simpleName?.contentEquals("TYPE_USE") ?: false
}?.let { filteredAnnotations.add(annotation) }
}
is SymbolBasedReferenceAnnotationArgument -> {
elementTypeArg.element.simpleName.takeIf { it.contentEquals("TYPE_USE") }
?.let { filteredAnnotations.add(annotation) }
?.let { filteredAnnotations.add(annotation) }
}
is TreeBasedArrayAnnotationArgument -> {
elementTypeArg.args.find {