KT-1456 ISE in JavaDescriptorResolver ...
KT-1456 ISE in JavaDescriptorResolver on attempt to create subclass with partially specifying type arguments Also add internal state checks.
This commit is contained in:
+13
-3
@@ -803,17 +803,27 @@ public class JavaDescriptorResolver {
|
|||||||
return resolveNamespace(psiPackage);
|
return resolveNamespace(psiPackage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PsiClass findClass(String qualifiedName) {
|
@Nullable
|
||||||
|
public PsiClass findClass(@NotNull String qualifiedName) {
|
||||||
PsiClass original = javaFacade.findClass(qualifiedName, javaSearchScope);
|
PsiClass original = javaFacade.findClass(qualifiedName, javaSearchScope);
|
||||||
PsiClass altClass = altClassFinder.findClass(qualifiedName);
|
PsiClass altClass = altClassFinder.findClass(qualifiedName);
|
||||||
|
PsiClass result = original;
|
||||||
if (altClass != null) {
|
if (altClass != null) {
|
||||||
if (altClass instanceof ClsClassImpl) {
|
if (altClass instanceof ClsClassImpl) {
|
||||||
altClass.putUserData(ClsClassImpl.DELEGATE_KEY, original);
|
altClass.putUserData(ClsClassImpl.DELEGATE_KEY, original);
|
||||||
}
|
}
|
||||||
|
|
||||||
return altClass;
|
result = altClass;
|
||||||
}
|
}
|
||||||
return original;
|
|
||||||
|
if (result != null) {
|
||||||
|
String actualQualifiedName = result.getQualifiedName();
|
||||||
|
if (!actualQualifiedName.equals(qualifiedName)) {
|
||||||
|
throw new IllegalStateException("requested " + qualifiedName + ", got " + actualQualifiedName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*package*/ PsiPackage findPackage(String qualifiedName) {
|
/*package*/ PsiPackage findPackage(String qualifiedName) {
|
||||||
|
|||||||
+4
-1
@@ -83,7 +83,10 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitClassType(String name, boolean nullable, boolean forceReal) {
|
public void visitClassType(String name, boolean nullable, boolean forceReal) {
|
||||||
String ourName = name.replace('/', '.');
|
String ourName = name
|
||||||
|
.replace('/', '.')
|
||||||
|
.replace('$', '.') // TODO: not sure
|
||||||
|
;
|
||||||
|
|
||||||
this.classDescriptor = null;
|
this.classDescriptor = null;
|
||||||
if (this.classDescriptor == null && !forceReal) {
|
if (this.classDescriptor == null && !forceReal) {
|
||||||
|
|||||||
Reference in New Issue
Block a user