KT-1402 Create new Kotlin object from a Java public static inner class

This commit is contained in:
Svetlana Isakova
2012-03-07 12:08:55 +04:00
parent f6244f75ea
commit e9a7a909f6
3 changed files with 37 additions and 4 deletions
@@ -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);
@@ -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