Minor code improvements

This commit is contained in:
Andrey Breslav
2013-11-14 17:29:55 +04:00
parent d52a1b56ae
commit 81069cd213
5 changed files with 6 additions and 16 deletions
@@ -150,6 +150,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
new GlobalJavaResolverContext( new GlobalJavaResolverContext(
storageManager, storageManager,
new JavaClassFinder() { new JavaClassFinder() {
@Nullable @Nullable
@Override @Override
public JavaClass findClass(@NotNull FqName fqName) { public JavaClass findClass(@NotNull FqName fqName) {
@@ -80,7 +80,7 @@ class LazyJavaAnnotationDescriptor(
private val _allValueArguments = c.storageManager.createLazyValue { private val _allValueArguments = c.storageManager.createLazyValue {
val constructors = getAnnotationClass().getConstructors() val constructors = getAnnotationClass().getConstructors()
if (constructors.isEmpty()) if (constructors.isEmpty())
mapOf<ValueParameterDescriptor, CompileTimeConstant<out Any?>>() mapOf<ValueParameterDescriptor, CompileTimeConstant<*>>()
else else
constructors.first().getValueParameters().keysToMapExceptNulls { constructors.first().getValueParameters().keysToMapExceptNulls {
vp -> getValueArgument(vp) vp -> getValueArgument(vp)
@@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.ExternalSignatureResolver
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPropertyDescriptorForObject import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPropertyDescriptorForObject
import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorImpl import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorImpl
import org.jetbrains.jet.utils.Printer
public abstract class LazyJavaMemberScope( public abstract class LazyJavaMemberScope(
protected val c: LazyJavaResolverContextWithTypes, protected val c: LazyJavaResolverContextWithTypes,
@@ -40,26 +40,14 @@ trait TypeParameterResolver {
fun resolveTypeParameter(javaTypeParameter: JavaTypeParameter): TypeParameterDescriptor? fun resolveTypeParameter(javaTypeParameter: JavaTypeParameter): TypeParameterDescriptor?
} }
class TypeParameterResolverImpl(
_typeParameters: Collection<LazyJavaTypeParameterDescriptor>,
private val parent: TypeParameterResolver = TypeParameterResolver.EMPTY
) : TypeParameterResolver {
private val parameters = _typeParameters.valuesToMap { p -> p.javaTypeParameter }
override fun resolveTypeParameter(javaTypeParameter: JavaTypeParameter): TypeParameterDescriptor? {
return parameters[javaTypeParameter] ?: parent.resolveTypeParameter(javaTypeParameter)
}
}
class LazyJavaTypeParameterResolver( class LazyJavaTypeParameterResolver(
val c: LazyJavaResolverContextWithTypes, val c: LazyJavaResolverContextWithTypes,
private val containingDeclaration: DeclarationDescriptor, private val containingDeclaration: DeclarationDescriptor,
private val typeParameters: Set<JavaTypeParameter> private val typeParameters: Set<JavaTypeParameter>
) : TypeParameterResolver { ) : TypeParameterResolver {
private val resolve: (JavaTypeParameter) -> TypeParameterDescriptor? = c.storageManager.createMemoizedFunctionWithNullableValues { private val resolve = c.storageManager.createMemoizedFunctionWithNullableValues {
javaTypeParameter -> (javaTypeParameter: JavaTypeParameter) ->
if (javaTypeParameter in typeParameters) if (javaTypeParameter in typeParameters)
LazyJavaTypeParameterDescriptor( LazyJavaTypeParameterDescriptor(
c.withTypes(this), c.withTypes(this),
@@ -145,7 +145,7 @@ class LazyJavaTypeResolver(
private fun getConstructorTypeParameterSubstitute(): JetType { private fun getConstructorTypeParameterSubstitute(): JetType {
// If a Java-constructor declares its own type parameters, we have no way of directly expressing them in Kotlin, // If a Java-constructor declares its own type parameters, we have no way of directly expressing them in Kotlin,
// so we replace thwm by intersections of their upper bounds // so we replace thwm by intersections of their upper bounds
var supertypesJet = HashSet<JetType>() val supertypesJet = HashSet<JetType>()
for (supertype in (classifier() as JavaTypeParameter).getUpperBounds()) { for (supertype in (classifier() as JavaTypeParameter).getUpperBounds()) {
supertypesJet.add(transformJavaType(supertype, UPPER_BOUND.toAttributes())) supertypesJet.add(transformJavaType(supertype, UPPER_BOUND.toAttributes()))
} }