Minor, move common logic to ReflectJavaModifierListOwner

This commit is contained in:
Alexander Udalov
2015-04-01 18:20:18 +03:00
parent 4cea9ecca4
commit 57be11a7e6
4 changed files with 49 additions and 30 deletions
@@ -24,12 +24,15 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.emptyOrSingletonList
import java.lang.reflect.AnnotatedElement
import java.lang.reflect.Method
import java.lang.reflect.Modifier
import java.util.Arrays
public class ReflectJavaClass(private val klass: Class<*>) : ReflectJavaElement(), ReflectJavaAnnotationOwner, JavaClass {
public class ReflectJavaClass(
private val klass: Class<*>
) : ReflectJavaElement(), ReflectJavaAnnotationOwner, ReflectJavaModifierListOwner, JavaClass {
override val element: AnnotatedElement get() = klass
override val modifiers: Int get() = klass.getModifiers()
override fun getInnerClasses() = klass.getDeclaredClasses()
.stream()
.filterNot {
@@ -101,12 +104,6 @@ public class ReflectJavaClass(private val klass: Class<*>) : ReflectJavaElement(
override fun isAnnotationType() = klass.isAnnotation()
override fun isEnum() = klass.isEnum()
override fun isAbstract() = Modifier.isAbstract(klass.getModifiers())
override fun isStatic() = Modifier.isStatic(klass.getModifiers())
override fun isFinal() = Modifier.isFinal(klass.getModifiers())
override fun getVisibility() = calculateVisibility(klass.getModifiers())
override fun equals(other: Any?) = other is ReflectJavaClass && klass == other.klass
override fun hashCode() = klass.hashCode()
@@ -22,25 +22,20 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import java.lang.reflect.AnnotatedElement
import java.lang.reflect.Member
import java.lang.reflect.Modifier
import java.lang.reflect.Type
import java.util.ArrayList
public abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOwner, JavaMember {
public abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOwner, ReflectJavaModifierListOwner, JavaMember {
protected abstract val member: Member
override val element: AnnotatedElement get() = member as AnnotatedElement
override val modifiers: Int get() = member.getModifiers()
override fun getName() = member.getName()?.let { Name.identifier(it) } ?: SpecialNames.NO_NAME_PROVIDED
override fun getContainingClass() = ReflectJavaClass(member.getDeclaringClass())
override fun isAbstract() = Modifier.isAbstract(member.getModifiers())
override fun isStatic() = Modifier.isStatic(member.getModifiers())
override fun isFinal() = Modifier.isFinal(member.getModifiers())
override fun getVisibility() = calculateVisibility(member.getModifiers())
protected fun getValueParameters(
parameterTypes: Array<Type>,
parameterAnnotations: Array<Array<Annotation>>,
@@ -0,0 +1,41 @@
/*
* Copyright 2010-2015 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.kotlin.load.java.structure.reflect
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.load.java.JavaVisibilities
import org.jetbrains.kotlin.load.java.structure.JavaModifierListOwner
import java.lang.reflect.Modifier
public trait ReflectJavaModifierListOwner : JavaModifierListOwner {
/* protected // KT-3029 */ val modifiers: Int
override fun isAbstract() = Modifier.isAbstract(modifiers)
override fun isStatic() = Modifier.isStatic(modifiers)
override fun isFinal() = Modifier.isFinal(modifiers)
override fun getVisibility() = modifiers.let { modifiers ->
when {
Modifier.isPublic(modifiers) -> Visibilities.PUBLIC
Modifier.isPrivate(modifiers) -> Visibilities.PRIVATE
Modifier.isProtected(modifiers) ->
if (Modifier.isStatic(modifiers)) JavaVisibilities.PROTECTED_STATIC_VISIBILITY
else JavaVisibilities.PROTECTED_AND_PACKAGE
else -> JavaVisibilities.PACKAGE_VISIBILITY
}
}
}
@@ -16,24 +16,10 @@
package org.jetbrains.kotlin.load.java.structure.reflect
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.load.java.JavaVisibilities
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import java.lang.reflect.Array
import java.lang.reflect.Modifier
private fun calculateVisibility(modifiers: Int): Visibility {
return when {
Modifier.isPublic(modifiers) -> Visibilities.PUBLIC
Modifier.isPrivate(modifiers) -> Visibilities.PRIVATE
Modifier.isProtected(modifiers) ->
if (Modifier.isStatic(modifiers)) JavaVisibilities.PROTECTED_STATIC_VISIBILITY else JavaVisibilities.PROTECTED_AND_PACKAGE
else -> JavaVisibilities.PACKAGE_VISIBILITY
}
}
public val Class<*>.classLoader: ClassLoader
get() = getClassLoader() ?: ClassLoader.getSystemClassLoader()