working on type type from class importer, properly initialize TypeParameterDescriptor
This commit is contained in:
+16
-7
@@ -145,11 +145,8 @@ public class JavaDescriptorResolver {
|
|||||||
classDescriptorCache.put(psiClass.getQualifiedName(), classDescriptor);
|
classDescriptorCache.put(psiClass.getQualifiedName(), classDescriptor);
|
||||||
classDescriptor.setUnsubstitutedMemberScope(new JavaClassMembersScope(classDescriptor, psiClass, semanticServices, false));
|
classDescriptor.setUnsubstitutedMemberScope(new JavaClassMembersScope(classDescriptor, psiClass, semanticServices, false));
|
||||||
|
|
||||||
// TODO: initialize
|
// UGLY HACK (Andrey Breslav is not sure what did he mean)
|
||||||
if (psiClass.getModifierList().findAnnotation(StdlibNames.JET_CLASS.getFqName()) == null) {
|
initializeTypeParameters(psiClass);
|
||||||
// UGLY HACK (Andrey Breslav is not sure what did he mean)
|
|
||||||
initializeTypeParameters(psiClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
supertypes.addAll(getSupertypes(psiClass));
|
supertypes.addAll(getSupertypes(psiClass));
|
||||||
if (psiClass.isInterface()) {
|
if (psiClass.isInterface()) {
|
||||||
@@ -208,7 +205,7 @@ public class JavaDescriptorResolver {
|
|||||||
if (attributeValue != null) {
|
if (attributeValue != null) {
|
||||||
String typeParametersString = (String) attributeValue.getValue();
|
String typeParametersString = (String) attributeValue.getValue();
|
||||||
if (typeParametersString != null) {
|
if (typeParametersString != null) {
|
||||||
return resolveClassTypeParametersFromJetSignature(typeParametersString, classDescriptor);
|
return resolveClassTypeParametersFromJetSignature(typeParametersString, psiClass, classDescriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -216,10 +213,20 @@ public class JavaDescriptorResolver {
|
|||||||
return makeUninitializedTypeParameters(classDescriptor, psiClass.getTypeParameters());
|
return makeUninitializedTypeParameters(classDescriptor, psiClass.getTypeParameters());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private PsiTypeParameter getPsiTypeParameterByName(PsiTypeParameterListOwner clazz, String ownerName, String name) {
|
||||||
|
for (PsiTypeParameter typeParameter : clazz.getTypeParameters()) {
|
||||||
|
if (typeParameter.getName().equals(name)) {
|
||||||
|
return typeParameter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalStateException("PsiTypeParameter '" + name + "' is not found in '" + ownerName + "'");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #resolveMethodTypeParametersFromJetSignature(String, FunctionDescriptor)
|
* @see #resolveMethodTypeParametersFromJetSignature(String, FunctionDescriptor)
|
||||||
*/
|
*/
|
||||||
private List<TypeParameterDescriptor> resolveClassTypeParametersFromJetSignature(String jetSignature, final JavaClassDescriptor classDescriptor) {
|
private List<TypeParameterDescriptor> resolveClassTypeParametersFromJetSignature(String jetSignature, final PsiClass clazz, final JavaClassDescriptor classDescriptor) {
|
||||||
final List<TypeParameterDescriptor> r = new ArrayList<TypeParameterDescriptor>();
|
final List<TypeParameterDescriptor> r = new ArrayList<TypeParameterDescriptor>();
|
||||||
new JetSignatureReader(jetSignature).accept(new JetSignatureExceptionsAdapter() {
|
new JetSignatureReader(jetSignature).accept(new JetSignatureExceptionsAdapter() {
|
||||||
@Override
|
@Override
|
||||||
@@ -256,6 +263,8 @@ public class JavaDescriptorResolver {
|
|||||||
JetSignatureUtils.translateVariance(variance),
|
JetSignatureUtils.translateVariance(variance),
|
||||||
name,
|
name,
|
||||||
++index);
|
++index);
|
||||||
|
PsiTypeParameter psiTypeParameter = getPsiTypeParameterByName(clazz, clazz.getQualifiedName(), name);
|
||||||
|
typeParameterDescriptorCache.put(psiTypeParameter, typeParameter);
|
||||||
r.add(typeParameter);
|
r.add(typeParameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user