Release original Java descriptors while enhancing

It's both more correct and helps to release memory retained by
descriptor before enhancement
This commit is contained in:
Denis Zharkov
2016-02-01 17:24:12 +03:00
parent beea2d5d10
commit 924d706e79
8 changed files with 80 additions and 25 deletions
@@ -17,6 +17,9 @@
package org.jetbrains.kotlin.load.java.sam;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.load.java.descriptors.JavaConstructorDescriptor;
import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
@@ -31,6 +34,30 @@ import org.jetbrains.kotlin.load.java.descriptors.SamAdapterDescriptor;
setHasSynthesizedParameterNames(declaration.hasSynthesizedParameterNames());
}
private SamAdapterConstructorDescriptor(
@NotNull ClassDescriptor containingDeclaration,
@Nullable JavaConstructorDescriptor original,
@NotNull Annotations annotations,
boolean isPrimary,
@NotNull Kind kind,
@NotNull SourceElement source,
@NotNull JavaConstructorDescriptor declaration
) {
super(containingDeclaration, original, annotations, isPrimary, kind, source);
this.declaration = declaration;
}
@NotNull
@Override
protected JavaConstructorDescriptor createDescriptor(
@NotNull ClassDescriptor newOwner,
@Nullable JavaConstructorDescriptor original,
@NotNull Kind kind,
@NotNull SourceElement sourceElement
) {
return new SamAdapterConstructorDescriptor(newOwner, original, getAnnotations(), isPrimary, kind, sourceElement, declaration);
}
@NotNull
@Override
public JavaConstructorDescriptor getOriginForSam() {
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.load.java.sam.SingleAbstractMethodUtils
import org.jetbrains.kotlin.load.java.typeEnhancement.enhanceSignature
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf
@@ -47,9 +46,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : SyntheticScope
if (!function.hasJavaOriginInHierarchy()) return null //TODO: should we go into base at all?
if (!SingleAbstractMethodUtils.isSamAdapterNecessary(function)) return null
if (function.returnType == null) return null
//TODO: it's a temporary hack while original returns a function with platform types
val enhancedFunction = function.enhanceSignature()
return MyFunctionDescriptor.create(enhancedFunction)
return MyFunctionDescriptor.create(function)
}
override fun getSyntheticExtensionFunctions(receiverTypes: Collection<KotlinType>, name: Name, location: LookupLocation): Collection<FunctionDescriptor> {