diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt index 79d1fe0770c..4c74b6f33cd 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt @@ -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() diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaMember.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaMember.kt index 1607d31abce..034a502f1b9 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaMember.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaMember.kt @@ -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, parameterAnnotations: Array>, diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaModifierListOwner.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaModifierListOwner.kt new file mode 100644 index 00000000000..7cd9431e5df --- /dev/null +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaModifierListOwner.kt @@ -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 + } + } +} diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectStructureUtil.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectClassUtil.kt similarity index 78% rename from core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectStructureUtil.kt rename to core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectClassUtil.kt index d867f0dba43..03df4b3f33c 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectStructureUtil.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/reflectClassUtil.kt @@ -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()