KT-1402 Create new Kotlin object from a Java public static inner class
This commit is contained in:
+4
-3
@@ -328,6 +328,7 @@ public class JavaDescriptorResolver {
|
||||
|
||||
PsiMethod[] psiConstructors = psiClass.getConstructors();
|
||||
|
||||
boolean isStatic = psiClass.hasModifierProperty(PsiModifier.STATIC);
|
||||
if (psiConstructors.length == 0) {
|
||||
// We need to create default constructors for classes and abstract classes.
|
||||
// Example:
|
||||
@@ -338,7 +339,7 @@ public class JavaDescriptorResolver {
|
||||
classData.classDescriptor,
|
||||
Collections.<AnnotationDescriptor>emptyList(),
|
||||
false);
|
||||
constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), classData.classDescriptor.getVisibility());
|
||||
constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), classData.classDescriptor.getVisibility(), isStatic);
|
||||
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
|
||||
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
||||
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
|
||||
@@ -379,7 +380,7 @@ public class JavaDescriptorResolver {
|
||||
}
|
||||
}
|
||||
|
||||
constructorDescriptor.initialize(typeParameters, valueParameters, classData.classDescriptor.getVisibility());
|
||||
constructorDescriptor.initialize(typeParameters, valueParameters, classData.classDescriptor.getVisibility(), isStatic);
|
||||
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
|
||||
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
||||
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
|
||||
@@ -405,7 +406,7 @@ public class JavaDescriptorResolver {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
constructorDescriptor.initialize(typeParameters, valueParameterDescriptors.descriptors,
|
||||
resolveVisibilityFromPsiModifiers(psiConstructor));
|
||||
resolveVisibilityFromPsiModifiers(psiConstructor), isStatic);
|
||||
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
|
||||
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
||||
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
|
||||
|
||||
+6
-1
@@ -46,7 +46,12 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
|
||||
}
|
||||
|
||||
public ConstructorDescriptorImpl initialize(@NotNull List<TypeParameterDescriptor> typeParameters, @NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters, Visibility visibility) {
|
||||
super.initialize(null, getExpectedThisObject(getContainingDeclaration()), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL, visibility);
|
||||
return initialize(typeParameters, unsubstitutedValueParameters, visibility, false);
|
||||
}
|
||||
|
||||
//isStatic - for java only
|
||||
public ConstructorDescriptorImpl initialize(@NotNull List<TypeParameterDescriptor> typeParameters, @NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters, Visibility visibility, boolean isStatic) {
|
||||
super.initialize(null, isStatic ? ReceiverDescriptor.NO_RECEIVER : getExpectedThisObject(getContainingDeclaration()), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL, visibility);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// FILE: a/M.java
|
||||
// +JDK
|
||||
package a;
|
||||
|
||||
public class M {
|
||||
public static class Inner {
|
||||
private int i;
|
||||
public Inner(int i) {
|
||||
this.i = i;
|
||||
}
|
||||
|
||||
public int getI() {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: b.kt
|
||||
package b
|
||||
|
||||
import a.M.Inner
|
||||
|
||||
fun foo() {
|
||||
doSmth(Inner(87))
|
||||
}
|
||||
|
||||
fun doSmth(b: Inner) = b
|
||||
Reference in New Issue
Block a user