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 org.jetbrains.kotlin.utils.emptyOrSingletonList
import java.lang.reflect.AnnotatedElement import java.lang.reflect.AnnotatedElement
import java.lang.reflect.Method import java.lang.reflect.Method
import java.lang.reflect.Modifier
import java.util.Arrays 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 element: AnnotatedElement get() = klass
override val modifiers: Int get() = klass.getModifiers()
override fun getInnerClasses() = klass.getDeclaredClasses() override fun getInnerClasses() = klass.getDeclaredClasses()
.stream() .stream()
.filterNot { .filterNot {
@@ -101,12 +104,6 @@ public class ReflectJavaClass(private val klass: Class<*>) : ReflectJavaElement(
override fun isAnnotationType() = klass.isAnnotation() override fun isAnnotationType() = klass.isAnnotation()
override fun isEnum() = klass.isEnum() 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 equals(other: Any?) = other is ReflectJavaClass && klass == other.klass
override fun hashCode() = klass.hashCode() override fun hashCode() = klass.hashCode()
@@ -22,25 +22,20 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
import java.lang.reflect.AnnotatedElement import java.lang.reflect.AnnotatedElement
import java.lang.reflect.Member import java.lang.reflect.Member
import java.lang.reflect.Modifier
import java.lang.reflect.Type import java.lang.reflect.Type
import java.util.ArrayList import java.util.ArrayList
public abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOwner, JavaMember { public abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOwner, ReflectJavaModifierListOwner, JavaMember {
protected abstract val member: Member protected abstract val member: Member
override val element: AnnotatedElement get() = member as AnnotatedElement 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 getName() = member.getName()?.let { Name.identifier(it) } ?: SpecialNames.NO_NAME_PROVIDED
override fun getContainingClass() = ReflectJavaClass(member.getDeclaringClass()) 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( protected fun getValueParameters(
parameterTypes: Array<Type>, parameterTypes: Array<Type>,
parameterAnnotations: Array<Array<Annotation>>, 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 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.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import java.lang.reflect.Array 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 public val Class<*>.classLoader: ClassLoader
get() = getClassLoader() ?: ClassLoader.getSystemClassLoader() get() = getClassLoader() ?: ClassLoader.getSystemClassLoader()