From d69739a3d20c659ce5a3086896d829d2f3643ef1 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Thu, 9 Feb 2012 16:34:30 +0400 Subject: [PATCH] temp hack against KT-1214 --- .../resolve/java/JavaDescriptorResolver.java | 16 ++++++++++++++++ .../lang/resolve/java/JavaTypeTransformer.java | 14 +++++++++++++- .../resolve/java/TypeVariableByPsiResolver.java | 4 ++++ .../java/TypeVariableByPsiResolverImpl.java | 13 +++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index a186b20a28c..dd817e41513 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -1367,6 +1367,22 @@ public class JavaDescriptorResolver { throw new IllegalStateException("unresolved PsiTypeParameter " + psiTypeParameter.getName() + " in method " + method.getName() + " in class " + psiClass.getQualifiedName()); // TODO: report properly } + @NotNull + @Override + public TypeParameterDescriptor getTypeVariableByPsiByName(@NotNull String name) { + for (TypeParameterDescriptorInitialization typeParameter : methodTypeParametersInitialization) { + if (typeParameter.psiTypeParameter.getName().equals(name)) { + return typeParameter.descriptor; + } + } + for (TypeParameterDescriptorInitialization typeParameter : classTypeParameterDescriptorsInitialization) { + if (typeParameter.psiTypeParameter.getName().equals(name)) { + return typeParameter.descriptor; + } + } + throw new IllegalStateException("unresolved PsiTypeParameter " + name + " in method " + method.getName() + " in class " + psiClass.getQualifiedName()); // TODO: report properly + } + @NotNull @Override public TypeParameterDescriptor getTypeVariable(@NotNull String name) { diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java index 0e8899008a8..ddb3ee51a45 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java @@ -142,13 +142,25 @@ public class JavaTypeTransformer { return typeParameter; } } - throw new IllegalStateException(); + return typeVariableByPsiResolver.getTypeVariableByPsiByName(psiTypeParameter.getName()); } else if (classData instanceof JavaDescriptorResolver.ResolverBinaryClassData) { return new TypeVariableByPsiResolverImpl(((JavaDescriptorResolver.ResolverBinaryClassData) classData).typeParameters, typeVariableByPsiResolver).getTypeVariable(psiTypeParameter); } else { throw new IllegalStateException(); } } + + @NotNull + @Override + public TypeParameterDescriptor getTypeVariableByPsiByName(@NotNull String name) { + for (TypeParameterDescriptor typeParameter : classData.getClassDescriptor().getTypeConstructor().getParameters()) { + if (typeParameter.getName().equals(name)) { + // TODO? + return typeParameter; + } + } + throw new IllegalStateException(); + } }; arguments.add(transformToTypeProjection(psiArgument, typeParameterDescriptor, typeVariableByPsiResolver2)); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolver.java index 4615f626fed..faad6af659f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolver.java @@ -12,4 +12,8 @@ import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; public interface TypeVariableByPsiResolver { @NotNull TypeParameterDescriptor getTypeVariable(@NotNull PsiTypeParameter psiTypeParameter); + + /** @deprecated */ + @NotNull + TypeParameterDescriptor getTypeVariableByPsiByName(@NotNull String name); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolverImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolverImpl.java index d533b5d3b25..62c9d7c5090 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolverImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/TypeVariableByPsiResolverImpl.java @@ -36,4 +36,17 @@ public class TypeVariableByPsiResolverImpl implements TypeVariableByPsiResolver throw new RuntimeException("type parameter not found by PsiTypeParameter " + psiTypeParameter.getName()); // TODO report properly } + @NotNull + @Override + public TypeParameterDescriptor getTypeVariableByPsiByName(@NotNull String name) { + for (JavaDescriptorResolver.TypeParameterDescriptorInitialization typeParameter : typeParameters) { + if (typeParameter.psiTypeParameter.getName().equals(name)) { + return typeParameter.descriptor; + } + } + if (parent != null) { + return parent.getTypeVariableByPsiByName(name); + } + throw new RuntimeException("type parameter not found by PsiTypeParameter " + name); // TODO report properly + } }