Lazy values and memoized functions conform to Kotlin's function interfaces

This commit is contained in:
Andrey Breslav
2013-10-04 16:26:37 +04:00
committed by Alexander Udalov
parent a1e4ca2871
commit 4d28dfada6
7 changed files with 37 additions and 5 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.resolve.kotlin; package org.jetbrains.jet.lang.resolve.kotlin;
import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf; import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf;
@@ -61,7 +62,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
private final MemoizedFunctionToNotNull<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>> memberAnnotations = private final MemoizedFunctionToNotNull<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>> memberAnnotations =
storageManager.createMemoizedFunction( storageManager.createMemoizedFunction(
new MemoizedFunctionToNotNull<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>>() { new Function<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>>() {
@NotNull @NotNull
@Override @Override
public Map<MemberSignature, List<AnnotationDescriptor>> fun(@NotNull KotlinJvmBinaryClass kotlinClass) { public Map<MemberSignature, List<AnnotationDescriptor>> fun(@NotNull KotlinJvmBinaryClass kotlinClass) {
@@ -179,6 +179,11 @@ public class LockBasedStorageManager implements StorageManager {
return value != NotValue.NOT_COMPUTED && value != NotValue.COMPUTING; return value != NotValue.NOT_COMPUTED && value != NotValue.COMPUTING;
} }
@Override
public T invoke() {
return compute();
}
@Override @Override
public T compute() { public T compute() {
Object _value = value; Object _value = value;
@@ -258,6 +263,11 @@ public class LockBasedStorageManager implements StorageManager {
this.compute = compute; this.compute = compute;
} }
@Override
public V invoke(K k) {
return fun(k);
}
@Override @Override
@Nullable @Nullable
public V fun(@NotNull K input) { public V fun(@NotNull K input) {
@@ -17,10 +17,15 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.util.Function; import com.intellij.util.Function;
import jet.Function1;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public interface MemoizedFunctionToNotNull<P, R> extends Function<P, R> { public interface MemoizedFunctionToNotNull<P, R> extends Function<P, R>, Function1<P, R> {
@Override @Override
@NotNull @NotNull
R fun(P p); R fun(P p);
@Override
@NotNull
R invoke(P p);
} }
@@ -17,10 +17,15 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.util.Function; import com.intellij.util.Function;
import jet.Function1;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public interface MemoizedFunctionToNullable<P, R> extends Function<P, R> { public interface MemoizedFunctionToNullable<P, R> extends Function<P, R>, Function1<P, R> {
@Override @Override
@Nullable @Nullable
R fun(P p); R fun(P p);
@Override
@Nullable
R invoke(P p);
} }
@@ -17,13 +17,18 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Computable;
import jet.Function0;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public interface NotNullLazyValue<T> extends Computable<T> { public interface NotNullLazyValue<T> extends Computable<T>, Function0<T> {
@Override @Override
@NotNull @NotNull
T compute(); T compute();
@Override
@NotNull
T invoke();
// Needed for proper toString() behaviors // Needed for proper toString() behaviors
boolean isComputed(); boolean isComputed();
} }
@@ -17,13 +17,18 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Computable;
import jet.Function0;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public interface NullableLazyValue<T> extends Computable<T> { public interface NullableLazyValue<T> extends Computable<T>, Function0<T> {
@Override @Override
@Nullable @Nullable
T compute(); T compute();
@Override
@Nullable
T invoke();
// Needed for proper toString() behaviors // Needed for proper toString() behaviors
boolean isComputed(); boolean isComputed();
} }
+1
View File
@@ -8,6 +8,7 @@
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" scope="PROVIDED" name="intellij-core" level="project" /> <orderEntry type="library" exported="" scope="PROVIDED" name="intellij-core" level="project" />
<orderEntry type="module" module-name="runtime" exported="" />
</component> </component>
</module> </module>