check $$TImpl class is not visible through JavaDescriptorResolver
This commit is contained in:
+4
-1
@@ -106,7 +106,10 @@ public class JavaClassMembersScope implements JetScope {
|
|||||||
for (PsiClass innerClass : psiClass.getAllInnerClasses()) {
|
for (PsiClass innerClass : psiClass.getAllInnerClasses()) {
|
||||||
if (name.equals(innerClass.getName())) {
|
if (name.equals(innerClass.getName())) {
|
||||||
if (innerClass.hasModifierProperty(PsiModifier.STATIC) != staticMembers) return null;
|
if (innerClass.hasModifierProperty(PsiModifier.STATIC) != staticMembers) return null;
|
||||||
return semanticServices.getDescriptorResolver().resolveClass(innerClass);
|
ClassDescriptor classDescriptor = semanticServices.getDescriptorResolver().resolveClass(innerClass);
|
||||||
|
if (classDescriptor != null) {
|
||||||
|
return classDescriptor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
+15
-1
@@ -106,9 +106,14 @@ public class JavaDescriptorResolver {
|
|||||||
this.semanticServices = semanticServices;
|
this.semanticServices = semanticServices;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@Nullable
|
||||||
public ClassDescriptor resolveClass(@NotNull PsiClass psiClass) {
|
public ClassDescriptor resolveClass(@NotNull PsiClass psiClass) {
|
||||||
String qualifiedName = psiClass.getQualifiedName();
|
String qualifiedName = psiClass.getQualifiedName();
|
||||||
|
|
||||||
|
if (qualifiedName.endsWith(JvmAbi.TRAIT_IMPL_SUFFIX)) {
|
||||||
|
// TODO: only if -$$TImpl class is created by Kotlin
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
|
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
|
||||||
ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(qualifiedName);
|
ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(qualifiedName);
|
||||||
@@ -127,6 +132,12 @@ public class JavaDescriptorResolver {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public ClassDescriptor resolveClass(@NotNull String qualifiedName) {
|
public ClassDescriptor resolveClass(@NotNull String qualifiedName) {
|
||||||
|
|
||||||
|
if (qualifiedName.endsWith(JvmAbi.TRAIT_IMPL_SUFFIX)) {
|
||||||
|
// TODO: only if -$$TImpl class is created by Kotlin
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
|
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
|
||||||
ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(qualifiedName);
|
ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(qualifiedName);
|
||||||
if (kotlinClassDescriptor != null) {
|
if (kotlinClassDescriptor != null) {
|
||||||
@@ -753,6 +764,9 @@ public class JavaDescriptorResolver {
|
|||||||
return functionDescriptor;
|
return functionDescriptor;
|
||||||
}
|
}
|
||||||
DeclarationDescriptor classDescriptor = method.hasModifierProperty(PsiModifier.STATIC) ? resolveNamespace(method.getContainingClass()) : resolveClass(method.getContainingClass());
|
DeclarationDescriptor classDescriptor = method.hasModifierProperty(PsiModifier.STATIC) ? resolveNamespace(method.getContainingClass()) : resolveClass(method.getContainingClass());
|
||||||
|
if (classDescriptor == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
PsiParameter[] parameters = method.getParameterList().getParameters();
|
PsiParameter[] parameters = method.getParameterList().getParameters();
|
||||||
FunctionDescriptorImpl functionDescriptorImpl = new FunctionDescriptorImpl(
|
FunctionDescriptorImpl functionDescriptorImpl = new FunctionDescriptorImpl(
|
||||||
owner,
|
owner,
|
||||||
|
|||||||
+4
-1
@@ -94,7 +94,10 @@ public class JavaPackageScope extends JetScopeImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (psiClass.hasModifierProperty(PsiModifier.PUBLIC)) {
|
if (psiClass.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||||
allDescriptors.add(descriptorResolver.resolveClass(psiClass));
|
ClassDescriptor classDescriptor = descriptorResolver.resolveClass(psiClass);
|
||||||
|
if (classDescriptor != null) {
|
||||||
|
allDescriptors.add(classDescriptor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -94,6 +94,9 @@ public class JavaTypeTransformer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ClassDescriptor descriptor = resolver.resolveClass(psiClass);
|
ClassDescriptor descriptor = resolver.resolveClass(psiClass);
|
||||||
|
if (descriptor == null) {
|
||||||
|
return ErrorUtils.createErrorType("Unresolve java class: " + classType.getPresentableText());
|
||||||
|
}
|
||||||
|
|
||||||
List<TypeProjection> arguments = Lists.newArrayList();
|
List<TypeProjection> arguments = Lists.newArrayList();
|
||||||
if (classType.isRaw()) {
|
if (classType.isRaw()) {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
|||||||
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver;
|
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
@@ -123,6 +124,8 @@ public class ReadClassDataTest extends UsefulTestCase {
|
|||||||
if (ad instanceof ClassifierDescriptor) {
|
if (ad instanceof ClassifierDescriptor) {
|
||||||
ClassifierDescriptor bd = nsb.getMemberScope().getClassifier(ad.getName());
|
ClassifierDescriptor bd = nsb.getMemberScope().getClassifier(ad.getName());
|
||||||
compareClassifiers((ClassifierDescriptor) ad, bd);
|
compareClassifiers((ClassifierDescriptor) ad, bd);
|
||||||
|
|
||||||
|
Assert.assertNull(nsb.getMemberScope().getClassifier(ad.getName() + JvmAbi.TRAIT_IMPL_SUFFIX));
|
||||||
} else if (ad instanceof FunctionDescriptor) {
|
} else if (ad instanceof FunctionDescriptor) {
|
||||||
Set<FunctionDescriptor> functions = nsb.getMemberScope().getFunctions(ad.getName());
|
Set<FunctionDescriptor> functions = nsb.getMemberScope().getFunctions(ad.getName());
|
||||||
Assert.assertTrue(functions.size() >= 1);
|
Assert.assertTrue(functions.size() >= 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user