Type Enhancement for Java fields and constructors supported as well
This commit is contained in:
committed by
Denis Zharkov
parent
8c78739983
commit
694af022c8
+12
@@ -16,7 +16,19 @@
|
||||
|
||||
package org.jetbrains.kotlin.load.java.descriptors;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.kotlin.types.JetType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface JavaCallableMemberDescriptor extends CallableMemberDescriptor {
|
||||
@NotNull
|
||||
JavaCallableMemberDescriptor enhance(
|
||||
@Nullable JetType enhancedReceiverType,
|
||||
@NotNull List<ValueParameterDescriptor> enhancedValueParameters,
|
||||
@NotNull JetType enhancedReturnType
|
||||
);
|
||||
}
|
||||
|
||||
+26
-4
@@ -18,12 +18,12 @@ package org.jetbrains.kotlin.load.java.descriptors;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl;
|
||||
import org.jetbrains.kotlin.types.JetType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class JavaConstructorDescriptor extends ConstructorDescriptorImpl implements JavaCallableMemberDescriptor {
|
||||
private Boolean hasStableParameterNames = null;
|
||||
@@ -92,4 +92,26 @@ public class JavaConstructorDescriptor extends ConstructorDescriptorImpl impleme
|
||||
result.setHasSynthesizedParameterNames(hasSynthesizedParameterNames());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public JavaConstructorDescriptor enhance(
|
||||
@Nullable JetType enhancedReceiverType,
|
||||
@NotNull List<ValueParameterDescriptor> enhancedValueParameters,
|
||||
@NotNull JetType enhancedReturnType
|
||||
) {
|
||||
JavaConstructorDescriptor enhanced = createSubstitutedCopy(getContainingDeclaration(), getOriginal(), getKind());
|
||||
enhanced.initialize(
|
||||
enhancedReceiverType,
|
||||
getDispatchReceiverParameter(),
|
||||
getTypeParameters(),
|
||||
enhancedValueParameters,
|
||||
enhancedReturnType,
|
||||
getModality(),
|
||||
getVisibility()
|
||||
);
|
||||
|
||||
return enhanced;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
@@ -91,6 +91,9 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public JavaMethodDescriptor enhance(
|
||||
@Nullable JetType enhancedReceiverType,
|
||||
|
||||
+36
-4
@@ -17,13 +17,14 @@
|
||||
package org.jetbrains.kotlin.load.java.descriptors;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.Modality;
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement;
|
||||
import org.jetbrains.kotlin.descriptors.Visibility;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.types.JetType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements JavaCallableMemberDescriptor {
|
||||
public JavaPropertyDescriptor(
|
||||
@@ -41,4 +42,35 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja
|
||||
public boolean hasSynthesizedParameterNames() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JavaCallableMemberDescriptor enhance(
|
||||
@Nullable JetType enhancedReceiverType,
|
||||
@NotNull List<ValueParameterDescriptor> enhancedValueParameters,
|
||||
@NotNull JetType enhancedReturnType
|
||||
) {
|
||||
JavaPropertyDescriptor enhanced = new JavaPropertyDescriptor(
|
||||
getContainingDeclaration(),
|
||||
getAnnotations(),
|
||||
getVisibility(),
|
||||
isVar(),
|
||||
getName(),
|
||||
getSource()
|
||||
);
|
||||
assert getGetter() == null : "Field must not have a getter: " + this;
|
||||
assert getSetter() == null : "Field must not have a setter: " + this;
|
||||
enhanced.initialize(null, null);
|
||||
enhanced.setSetterProjectedOut(isSetterProjectedOut());
|
||||
if (compileTimeInitializer != null) {
|
||||
enhanced.setCompileTimeInitializer(compileTimeInitializer);
|
||||
}
|
||||
enhanced.setType(
|
||||
enhancedReturnType,
|
||||
getTypeParameters(), // TODO
|
||||
getDispatchReceiverParameter(),
|
||||
enhancedReceiverType
|
||||
);
|
||||
return enhanced;
|
||||
}
|
||||
}
|
||||
|
||||
+4
-1
@@ -71,7 +71,10 @@ public class LazyJavaClassMemberScope(
|
||||
result.add(descriptor)
|
||||
result.addIfNotNull(c.samConversionResolver.resolveSamAdapter(descriptor))
|
||||
}
|
||||
result ifEmpty { emptyOrSingletonList(createDefaultConstructor()) }
|
||||
|
||||
c.externalSignatureResolver.enhanceSignatures(
|
||||
result ifEmpty { emptyOrSingletonList(createDefaultConstructor()) }
|
||||
).toReadOnlyList()
|
||||
}
|
||||
|
||||
override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) {
|
||||
|
||||
+4
-1
@@ -236,7 +236,10 @@ public abstract class LazyJavaMemberScope(
|
||||
|
||||
computeNonDeclaredProperties(name, properties)
|
||||
|
||||
properties.toReadOnlyList()
|
||||
if (DescriptorUtils.isAnnotationClass(containingDeclaration))
|
||||
properties.toReadOnlyList()
|
||||
else
|
||||
c.externalSignatureResolver.enhanceSignatures(properties).toReadOnlyList()
|
||||
}
|
||||
|
||||
private fun resolveProperty(field: JavaField): PropertyDescriptor {
|
||||
|
||||
Reference in New Issue
Block a user