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();
|
PsiMethod[] psiConstructors = psiClass.getConstructors();
|
||||||
|
|
||||||
|
boolean isStatic = psiClass.hasModifierProperty(PsiModifier.STATIC);
|
||||||
if (psiConstructors.length == 0) {
|
if (psiConstructors.length == 0) {
|
||||||
// We need to create default constructors for classes and abstract classes.
|
// We need to create default constructors for classes and abstract classes.
|
||||||
// Example:
|
// Example:
|
||||||
@@ -338,7 +339,7 @@ public class JavaDescriptorResolver {
|
|||||||
classData.classDescriptor,
|
classData.classDescriptor,
|
||||||
Collections.<AnnotationDescriptor>emptyList(),
|
Collections.<AnnotationDescriptor>emptyList(),
|
||||||
false);
|
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());
|
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
|
||||||
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
||||||
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
|
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());
|
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
|
||||||
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
||||||
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
|
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
|
||||||
@@ -405,7 +406,7 @@ public class JavaDescriptorResolver {
|
|||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
constructorDescriptor.initialize(typeParameters, valueParameterDescriptors.descriptors,
|
constructorDescriptor.initialize(typeParameters, valueParameterDescriptors.descriptors,
|
||||||
resolveVisibilityFromPsiModifiers(psiConstructor));
|
resolveVisibilityFromPsiModifiers(psiConstructor), isStatic);
|
||||||
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
|
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
|
||||||
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
classData.classDescriptor.addConstructor(constructorDescriptor, null);
|
||||||
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
|
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) {
|
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;
|
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