Getting rid of Computable and Function in lazy values and memoized functions

This commit is contained in:
Andrey Breslav
2013-10-04 19:17:10 +04:00
committed by Alexander Udalov
parent 4d28dfada6
commit 7d1c46ed2c
27 changed files with 103 additions and 131 deletions
@@ -58,7 +58,7 @@ public abstract class AbstractDescriptorFinder implements DescriptorFinder {
@Nullable @Nullable
@Override @Override
public ClassDescriptor findClass(@NotNull ClassId classId) { public ClassDescriptor findClass(@NotNull ClassId classId) {
return findClass.fun(classId); return findClass.invoke(classId);
} }
@Nullable @Nullable
@@ -136,7 +136,7 @@ public class TypeDeserializer {
private TypeConstructor typeConstructor(@NotNull ProtoBuf.Type.Constructor proto) { private TypeConstructor typeConstructor(@NotNull ProtoBuf.Type.Constructor proto) {
switch (proto.getKind()) { switch (proto.getKind()) {
case CLASS: case CLASS:
ClassDescriptor classDescriptor = classDescriptors.fun(proto.getId()); ClassDescriptor classDescriptor = classDescriptors.invoke(proto.getId());
if (classDescriptor == null) return null; if (classDescriptor == null) return null;
return classDescriptor.getTypeConstructor(); return classDescriptor.getTypeConstructor();
@@ -227,7 +227,7 @@ public class TypeDeserializer {
@NotNull @NotNull
@Override @Override
public TypeConstructor getConstructor() { public TypeConstructor getConstructor() {
return constructor.compute(); return constructor.invoke();
} }
@NotNull @NotNull
@@ -254,7 +254,7 @@ public class TypeDeserializer {
@NotNull @NotNull
@Override @Override
public JetScope getMemberScope() { public JetScope getMemberScope() {
return memberScope.compute(); return memberScope.invoke();
} }
@Override @Override
@@ -151,7 +151,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
@NotNull @NotNull
@Override @Override
public DeclarationDescriptor getContainingDeclaration() { public DeclarationDescriptor getContainingDeclaration() {
return containingDeclaration.compute(); return containingDeclaration.invoke();
} }
@NotNull @NotNull
@@ -201,7 +201,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
@Override @Override
public List<AnnotationDescriptor> getAnnotations() { public List<AnnotationDescriptor> getAnnotations() {
return annotations.compute(); return annotations.invoke();
} }
@Override @Override
@@ -226,7 +226,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
@Nullable @Nullable
@Override @Override
public ConstructorDescriptor getUnsubstitutedPrimaryConstructor() { public ConstructorDescriptor getUnsubstitutedPrimaryConstructor() {
return primaryConstructor.compute(); return primaryConstructor.invoke();
} }
@NotNull @NotNull
@@ -306,7 +306,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
@Nullable @Nullable
@Override @Override
public ClassDescriptor getClassObjectDescriptor() { public ClassDescriptor getClassObjectDescriptor() {
return classObjectDescriptor.compute(); return classObjectDescriptor.invoke();
} }
@NotNull @NotNull
@@ -463,7 +463,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
@Nullable @Nullable
@Override @Override
protected ClassifierDescriptor getClassDescriptor(@NotNull Name name) { protected ClassifierDescriptor getClassDescriptor(@NotNull Name name) {
return classDescriptor.nestedClasses.findClass.fun(name); return classDescriptor.nestedClasses.findClass.invoke(name);
} }
@Override @Override
@@ -474,7 +474,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
@Nullable @Nullable
@Override @Override
public ClassDescriptor getObjectDescriptor(@NotNull Name name) { public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
return classDescriptor.nestedObjects.findClass.fun(name); return classDescriptor.nestedObjects.findClass.invoke(name);
} }
@NotNull @NotNull
@@ -504,7 +504,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
public Collection<ClassDescriptor> getAllDescriptors() { public Collection<ClassDescriptor> getAllDescriptors() {
Collection<ClassDescriptor> result = new ArrayList<ClassDescriptor>(declaredNames.size()); Collection<ClassDescriptor> result = new ArrayList<ClassDescriptor>(declaredNames.size());
for (Name name : declaredNames) { for (Name name : declaredNames) {
ClassDescriptor descriptor = findClass.fun(name); ClassDescriptor descriptor = findClass.invoke(name);
if (descriptor != null) { if (descriptor != null) {
result.add(descriptor); result.add(descriptor);
} }
@@ -143,7 +143,7 @@ public abstract class DeserializedMemberScope implements JetScope {
@NotNull @NotNull
@Override @Override
public final Collection<FunctionDescriptor> getFunctions(@NotNull Name name) { public final Collection<FunctionDescriptor> getFunctions(@NotNull Name name) {
return functions.fun(name); return functions.invoke(name);
} }
@NotNull @NotNull
@@ -160,7 +160,7 @@ public abstract class DeserializedMemberScope implements JetScope {
@NotNull @NotNull
@Override @Override
public Collection<VariableDescriptor> getProperties(@NotNull Name name) { public Collection<VariableDescriptor> getProperties(@NotNull Name name) {
return properties.fun(name); return properties.invoke(name);
} }
@Nullable @Nullable
@@ -184,7 +184,7 @@ public abstract class DeserializedMemberScope implements JetScope {
@NotNull @NotNull
@Override @Override
public Collection<ClassDescriptor> getObjectDescriptors() { public Collection<ClassDescriptor> getObjectDescriptors() {
return objectDescriptors.compute(); return objectDescriptors.invoke();
} }
@Nullable @Nullable
@@ -231,7 +231,7 @@ public abstract class DeserializedMemberScope implements JetScope {
@NotNull @NotNull
@Override @Override
public final Collection<DeclarationDescriptor> getAllDescriptors() { public final Collection<DeclarationDescriptor> getAllDescriptors() {
return allDescriptors.compute(); return allDescriptors.invoke();
} }
@NotNull @NotNull
@@ -45,7 +45,7 @@ class ImportsProvider {
@NotNull @NotNull
public List<JetImportDirective> getImports(@NotNull Name name) { public List<JetImportDirective> getImports(@NotNull Name name) {
return importsCacheValue.compute().getImports(name); return importsCacheValue.invoke().getImports(name);
} }
@NotNull @NotNull
@@ -234,7 +234,7 @@ public class LazyImportScope implements JetScope {
@NotNull @NotNull
private JetScope getImportScope(JetImportDirective directive, LookupMode lookupMode) { private JetScope getImportScope(JetImportDirective directive, LookupMode lookupMode) {
return importedScopesProvider.fun(directive).scopeForMode(lookupMode); return importedScopesProvider.invoke(directive).scopeForMode(lookupMode);
} }
@Nullable @Nullable
@@ -65,7 +65,7 @@ public class ScopeProvider {
@NotNull @NotNull
public JetScope getFileScope(JetFile file) { public JetScope getFileScope(JetFile file) {
return fileScopes.fun(file); return fileScopes.invoke(file);
} }
private JetScope createFileScope(JetFile file) { private JetScope createFileScope(JetFile file) {
@@ -88,7 +88,7 @@ public class ScopeProvider {
packageDescriptor.getMemberScope(), packageDescriptor.getMemberScope(),
rootPackageDescriptor.getMemberScope(), rootPackageDescriptor.getMemberScope(),
importsScope, importsScope,
defaultImportsScope.compute()); defaultImportsScope.invoke());
} }
private JetScope createScopeWithDefaultImports() { private JetScope createScopeWithDefaultImports() {
@@ -106,7 +106,7 @@ public class FilteringClassLikeInfo implements JetClassLikeInfo {
@Override @Override
@NotNull @NotNull
public List<JetDeclaration> getDeclarations() { public List<JetDeclaration> getDeclarations() {
return filteredDeclarations.compute(); return filteredDeclarations.invoke();
} }
@Override @Override
@@ -84,24 +84,24 @@ public abstract class AbstractPsiBasedDeclarationProvider implements Declaration
@Override @Override
public List<JetDeclaration> getAllDeclarations() { public List<JetDeclaration> getAllDeclarations() {
return index.compute().allDeclarations; return index.invoke().allDeclarations;
} }
@NotNull @NotNull
@Override @Override
public List<JetNamedFunction> getFunctionDeclarations(@NotNull Name name) { public List<JetNamedFunction> getFunctionDeclarations(@NotNull Name name) {
return Lists.newArrayList(index.compute().functions.get(name)); return Lists.newArrayList(index.invoke().functions.get(name));
} }
@NotNull @NotNull
@Override @Override
public List<JetProperty> getPropertyDeclarations(@NotNull Name name) { public List<JetProperty> getPropertyDeclarations(@NotNull Name name) {
return Lists.newArrayList(index.compute().properties.get(name)); return Lists.newArrayList(index.invoke().properties.get(name));
} }
@NotNull @NotNull
@Override @Override
public Collection<JetClassOrObject> getClassOrObjectDeclarations(@NotNull Name name) { public Collection<JetClassOrObject> getClassOrObjectDeclarations(@NotNull Name name) {
return index.compute().classesAndObjects.get(name); return index.invoke().classesAndObjects.get(name);
} }
} }
@@ -102,7 +102,7 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
} }
/*package*/ boolean isPackageDeclaredExplicitly(@NotNull FqName packageFqName) { /*package*/ boolean isPackageDeclaredExplicitly(@NotNull FqName packageFqName) {
return index.compute().declaredPackages.contains(packageFqName); return index.invoke().declaredPackages.contains(packageFqName);
} }
/*package*/ boolean isPackageDeclared(@NotNull FqName packageFqName) { /*package*/ boolean isPackageDeclared(@NotNull FqName packageFqName) {
@@ -110,7 +110,7 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
} }
/*package*/ Collection<FqName> getAllDeclaredSubPackagesOf(@NotNull final FqName parent) { /*package*/ Collection<FqName> getAllDeclaredSubPackagesOf(@NotNull final FqName parent) {
return Collections2.filter(index.compute().declaredPackages, new Predicate<FqName>() { return Collections2.filter(index.invoke().declaredPackages, new Predicate<FqName>() {
@Override @Override
public boolean apply(FqName fqName) { public boolean apply(FqName fqName) {
return !fqName.isRoot() && fqName.parent().equals(parent); return !fqName.isRoot() && fqName.parent().equals(parent);
@@ -124,9 +124,9 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
} }
Collection<NavigatablePsiElement> resultElements = Lists.newArrayList(); Collection<NavigatablePsiElement> resultElements = Lists.newArrayList();
for (FqName declaredPackage : index.compute().filesByPackage.keys()) { for (FqName declaredPackage : index.invoke().filesByPackage.keys()) {
if (QualifiedNamesUtil.isSubpackageOf(declaredPackage, fqName)) { if (QualifiedNamesUtil.isSubpackageOf(declaredPackage, fqName)) {
Collection<JetFile> files = index.compute().filesByPackage.get(declaredPackage); Collection<JetFile> files = index.invoke().filesByPackage.get(declaredPackage);
resultElements.addAll(ContainerUtil.map(files, new Function<JetFile, NavigatablePsiElement>() { resultElements.addAll(ContainerUtil.map(files, new Function<JetFile, NavigatablePsiElement>() {
@Override @Override
public NavigatablePsiElement fun(JetFile file) { public NavigatablePsiElement fun(JetFile file) {
@@ -141,7 +141,7 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
@Override @Override
public PackageMemberDeclarationProvider getPackageMemberDeclarationProvider(@NotNull FqName packageFqName) { public PackageMemberDeclarationProvider getPackageMemberDeclarationProvider(@NotNull FqName packageFqName) {
return packageDeclarationProviders.fun(packageFqName); return packageDeclarationProviders.invoke(packageFqName);
} }
@Nullable @Nullable
@@ -153,13 +153,13 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
return null; return null;
} }
return new FileBasedPackageMemberDeclarationProvider(storageManager, packageFqName, this, index.compute().filesByPackage.get(packageFqName)); return new FileBasedPackageMemberDeclarationProvider(storageManager, packageFqName, this, index.invoke().filesByPackage.get(packageFqName));
} }
@NotNull @NotNull
@Override @Override
public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(@NotNull JetClassLikeInfo classLikeInfo) { public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(@NotNull JetClassLikeInfo classLikeInfo) {
if (!index.compute().filesByPackage.containsKey(classLikeInfo.getContainingPackageFqName())) { if (!index.invoke().filesByPackage.containsKey(classLikeInfo.getContainingPackageFqName())) {
throw new IllegalStateException("This factory doesn't know about this class: " + classLikeInfo); throw new IllegalStateException("This factory doesn't know about this class: " + classLikeInfo);
} }
@@ -71,7 +71,7 @@ public class FileBasedPackageMemberDeclarationProvider extends AbstractPsiBasedD
@Override @Override
public Collection<FqName> getAllDeclaredPackages() { public Collection<FqName> getAllDeclaredPackages() {
return allDeclaredPackages.compute(); return allDeclaredPackages.invoke();
} }
@NotNull @NotNull
@@ -126,12 +126,12 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
@Override @Override
public ClassifierDescriptor getClassifier(@NotNull Name name) { public ClassifierDescriptor getClassifier(@NotNull Name name) {
return first(classDescriptors.fun(name)); return first(classDescriptors.invoke(name));
} }
@Override @Override
public ClassDescriptor getObjectDescriptor(@NotNull Name name) { public ClassDescriptor getObjectDescriptor(@NotNull Name name) {
return first(objectDescriptors.fun(name)); return first(objectDescriptors.invoke(name));
} }
private static <T> T first(@NotNull List<T> list) { private static <T> T first(@NotNull List<T> list) {
@@ -142,7 +142,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
@NotNull @NotNull
@Override @Override
public Set<FunctionDescriptor> getFunctions(@NotNull Name name) { public Set<FunctionDescriptor> getFunctions(@NotNull Name name) {
return functionDescriptors.fun(name); return functionDescriptors.invoke(name);
} }
@NotNull @NotNull
@@ -175,7 +175,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
@NotNull @NotNull
@Override @Override
public Set<VariableDescriptor> getProperties(@NotNull Name name) { public Set<VariableDescriptor> getProperties(@NotNull Name name) {
return propertyDescriptors.fun(name); return propertyDescriptors.invoke(name);
} }
@NotNull @NotNull
@@ -224,7 +224,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
@NotNull @NotNull
@Override @Override
public Collection<ClassDescriptor> getObjectDescriptors() { public Collection<ClassDescriptor> getObjectDescriptors() {
return allDescriptors.compute().objects; return allDescriptors.invoke().objects;
} }
@Override @Override
@@ -248,7 +248,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
@NotNull @NotNull
@Override @Override
public Collection<DeclarationDescriptor> getAllDescriptors() { public Collection<DeclarationDescriptor> getAllDescriptors() {
return allDescriptors.compute().all; return allDescriptors.invoke().all;
} }
@NotNull @NotNull
@@ -275,7 +275,7 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
JetClassOrObject classOrObject = (JetClassOrObject) declaration; JetClassOrObject classOrObject = (JetClassOrObject) declaration;
Name name = safeNameForLazyResolve(classOrObject.getNameAsName()); Name name = safeNameForLazyResolve(classOrObject.getNameAsName());
if (name != null) { if (name != null) {
result.all.addAll(classDescriptors.fun(name)); result.all.addAll(classDescriptors.invoke(name));
} }
} }
else if (declaration instanceof JetFunction) { else if (declaration instanceof JetFunction) {
@@ -175,7 +175,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
@NotNull @NotNull
public JetScope getScopeForClassHeaderResolution() { public JetScope getScopeForClassHeaderResolution() {
return scopeForClassHeaderResolution.compute(); return scopeForClassHeaderResolution.invoke();
} }
@NotNull @NotNull
@@ -195,7 +195,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
@NotNull @NotNull
public JetScope getScopeForMemberDeclarationResolution() { public JetScope getScopeForMemberDeclarationResolution() {
return scopeForMemberDeclarationResolution.compute(); return scopeForMemberDeclarationResolution.invoke();
} }
@NotNull @NotNull
@@ -218,7 +218,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
@NotNull @NotNull
public JetScope getScopeForPropertyInitializerResolution() { public JetScope getScopeForPropertyInitializerResolution() {
return scopeForPropertyInitializerResolution.compute(); return scopeForPropertyInitializerResolution.invoke();
} }
@NotNull @NotNull
@@ -263,7 +263,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
@Override @Override
public ClassDescriptor getClassObjectDescriptor() { public ClassDescriptor getClassObjectDescriptor() {
return classObjectDescriptor.compute(); return classObjectDescriptor.invoke();
} }
@Nullable @Nullable
@@ -323,12 +323,12 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
@NotNull @NotNull
@Override @Override
public ReceiverParameterDescriptor getThisAsReceiverParameter() { public ReceiverParameterDescriptor getThisAsReceiverParameter() {
return thisAsReceiverParameter.compute(); return thisAsReceiverParameter.invoke();
} }
@Override @Override
public List<AnnotationDescriptor> getAnnotations() { public List<AnnotationDescriptor> getAnnotations() {
return annotations.compute(); return annotations.invoke();
} }
@NotNull @NotNull
@@ -427,13 +427,13 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
@NotNull @NotNull
@Override @Override
public List<TypeParameterDescriptor> getParameters() { public List<TypeParameterDescriptor> getParameters() {
return parameters.compute(); return parameters.invoke();
} }
@NotNull @NotNull
@Override @Override
public Collection<JetType> getSupertypes() { public Collection<JetType> getSupertypes() {
return supertypes.compute(); return supertypes.invoke();
} }
private void findAndDisconnectLoopsInTypeHierarchy(Collection<JetType> supertypes) { private void findAndDisconnectLoopsInTypeHierarchy(Collection<JetType> supertypes) {
@@ -348,7 +348,7 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
@Nullable @Nullable
public ConstructorDescriptor getPrimaryConstructor() { public ConstructorDescriptor getPrimaryConstructor() {
return primaryConstructor.compute(); return primaryConstructor.invoke();
} }
@Nullable @Nullable
@@ -54,7 +54,7 @@ public class LazyPackageMemberScope extends AbstractLazyMemberScope<NamespaceDes
@Override @Override
public NamespaceDescriptor getNamespace(@NotNull Name name) { public NamespaceDescriptor getNamespace(@NotNull Name name) {
return packageDescriptors.fun(name); return packageDescriptors.invoke(name);
} }
@Nullable @Nullable
@@ -54,7 +54,7 @@ public class DeferredType implements JetType {
@NotNull @NotNull
public JetType getActualType() { public JetType getActualType() {
return lazyValue.compute(); return lazyValue.invoke();
} }
@Override @Override
@@ -3,6 +3,8 @@ package org.jetbrains.jet.storage;
import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Computable;
import com.intellij.util.Consumer; import com.intellij.util.Consumer;
import com.intellij.util.Function; import com.intellij.util.Function;
import jet.Function0;
import jet.Function1;
import junit.framework.TestCase; import junit.framework.TestCase;
import java.util.ArrayList; import java.util.ArrayList;
@@ -22,23 +24,23 @@ public class StorageManagerTest extends TestCase {
m = new LockBasedStorageManager(); m = new LockBasedStorageManager();
} }
public static <T> void doTestComputesOnce(Computable<T> v, T expected, Counter counter) throws Exception { public static <T> void doTestComputesOnce(Function0<T> v, T expected, Counter counter) throws Exception {
assert 0 == counter.getCount(); assert 0 == counter.getCount();
T result1 = v.compute(); T result1 = v.invoke();
T result2 = v.compute(); T result2 = v.invoke();
assertEquals(1, counter.getCount()); assertEquals(1, counter.getCount());
assertEquals(expected, result1); assertEquals(expected, result1);
assertEquals(result1, result2); assertEquals(result1, result2);
} }
public static <T> void doTestExceptionPreserved(Computable<T> v, Class<? extends Throwable> expected, Counter counter) public static <T> void doTestExceptionPreserved(Function0<T> v, Class<? extends Throwable> expected, Counter counter)
throws Exception { throws Exception {
assert 0 == counter.getCount(); assert 0 == counter.getCount();
Throwable caught1 = null; Throwable caught1 = null;
try { try {
v.compute(); v.invoke();
fail(); fail();
} }
catch (Throwable e) { catch (Throwable e) {
@@ -46,7 +48,7 @@ public class StorageManagerTest extends TestCase {
} }
Throwable caught2 = null; Throwable caught2 = null;
try { try {
v.compute(); v.invoke();
fail(); fail();
} }
catch (Throwable e) { catch (Throwable e) {
@@ -64,14 +66,14 @@ public class StorageManagerTest extends TestCase {
public void testIsComputed() throws Exception { public void testIsComputed() throws Exception {
NotNullLazyValue<String> value = m.createLazyValue(new CounterValue()); NotNullLazyValue<String> value = m.createLazyValue(new CounterValue());
assertFalse(value.isComputed()); assertFalse(value.isComputed());
value.compute(); value.invoke();
assertTrue(value.isComputed()); assertTrue(value.isComputed());
} }
public void testIsNullableComputed() throws Exception { public void testIsNullableComputed() throws Exception {
NullableLazyValue<String> value = m.createNullableLazyValue(new CounterValueNull()); NullableLazyValue<String> value = m.createNullableLazyValue(new CounterValueNull());
assertFalse(value.isComputed()); assertFalse(value.isComputed());
value.compute(); value.invoke();
assertTrue(value.isComputed()); assertTrue(value.isComputed());
} }
@@ -80,7 +82,7 @@ public class StorageManagerTest extends TestCase {
assertFalse(value.isComputed()); assertFalse(value.isComputed());
try { try {
value.compute(); value.invoke();
} }
catch (Exception ignored) { catch (Exception ignored) {
} }
@@ -93,7 +95,7 @@ public class StorageManagerTest extends TestCase {
assertFalse(value.isComputed()); assertFalse(value.isComputed());
try { try {
value.compute(); value.invoke();
} }
catch (Exception ignored) { catch (Exception ignored) {
} }
@@ -168,13 +170,13 @@ public class StorageManagerTest extends TestCase {
NotNullLazyValue<String> rec = m.createLazyValue(new Computable<String>() { NotNullLazyValue<String> rec = m.createLazyValue(new Computable<String>() {
@Override @Override
public String compute() { public String compute() {
return rec.compute(); return rec.invoke();
} }
}); });
} }
try { try {
new C().rec.compute(); new C().rec.invoke();
fail(); fail();
} }
catch (IllegalStateException e) { catch (IllegalStateException e) {
@@ -187,13 +189,13 @@ public class StorageManagerTest extends TestCase {
NullableLazyValue<String> rec = m.createNullableLazyValue(new Computable<String>() { NullableLazyValue<String> rec = m.createNullableLazyValue(new Computable<String>() {
@Override @Override
public String compute() { public String compute() {
return rec.compute(); return rec.invoke();
} }
}); });
} }
try { try {
new C().rec.compute(); new C().rec.invoke();
fail(); fail();
} }
catch (IllegalStateException e) { catch (IllegalStateException e) {
@@ -206,13 +208,13 @@ public class StorageManagerTest extends TestCase {
NotNullLazyValue<String> rec = m.createRecursionTolerantLazyValue(new Computable<String>() { NotNullLazyValue<String> rec = m.createRecursionTolerantLazyValue(new Computable<String>() {
@Override @Override
public String compute() { public String compute() {
assertEquals("rec", rec.compute()); assertEquals("rec", rec.invoke());
return "tolerant!"; return "tolerant!";
} }
}, "rec"); }, "rec");
} }
assertEquals("tolerant!", new C().rec.compute()); assertEquals("tolerant!", new C().rec.invoke());
} }
public void testNullableRecursionTolerance() throws Exception { public void testNullableRecursionTolerance() throws Exception {
@@ -220,13 +222,13 @@ public class StorageManagerTest extends TestCase {
NullableLazyValue<String> rec = m.createRecursionTolerantNullableLazyValue(new Computable<String>() { NullableLazyValue<String> rec = m.createRecursionTolerantNullableLazyValue(new Computable<String>() {
@Override @Override
public String compute() { public String compute() {
assertEquals(null, rec.compute()); assertEquals(null, rec.invoke());
return "tolerant!"; return "tolerant!";
} }
}, null); }, null);
} }
assertEquals("tolerant!", new C().rec.compute()); assertEquals("tolerant!", new C().rec.invoke());
} }
public void testRecursionIntoleranceWithPostCompute() throws Exception { public void testRecursionIntoleranceWithPostCompute() throws Exception {
@@ -236,7 +238,7 @@ public class StorageManagerTest extends TestCase {
new Computable<String>() { new Computable<String>() {
@Override @Override
public String compute() { public String compute() {
return rec.compute(); return rec.invoke();
} }
}, },
null, null,
@@ -245,7 +247,7 @@ public class StorageManagerTest extends TestCase {
} }
try { try {
new C().rec.compute(); new C().rec.invoke();
fail(); fail();
} }
catch (IllegalStateException e) { catch (IllegalStateException e) {
@@ -260,7 +262,7 @@ public class StorageManagerTest extends TestCase {
new Computable<String>() { new Computable<String>() {
@Override @Override
public String compute() { public String compute() {
return rec.compute(); return rec.invoke();
} }
}, },
new Function<Boolean, String>() { new Function<Boolean, String>() {
@@ -280,8 +282,8 @@ public class StorageManagerTest extends TestCase {
} }
C c = new C(); C c = new C();
assertEquals("tolerant", c.rec.compute()); assertEquals("tolerant", c.rec.invoke());
c.rec.compute(); c.rec.invoke();
assertEquals("postCompute() called more than once", 1, counter.getCount()); assertEquals("postCompute() called more than once", 1, counter.getCount());
} }
@@ -306,8 +308,8 @@ public class StorageManagerTest extends TestCase {
} }
); );
assertEquals(Arrays.asList("first", "postComputed"), v.compute()); assertEquals(Arrays.asList("first", "postComputed"), v.invoke());
v.compute(); v.invoke();
assertEquals(1, counter.getCount()); assertEquals(1, counter.getCount());
} }
@@ -331,8 +333,8 @@ public class StorageManagerTest extends TestCase {
} }
); );
assertEquals(Arrays.asList("first", "postComputed"), v.compute()); assertEquals(Arrays.asList("first", "postComputed"), v.invoke());
v.compute(); v.invoke();
assertEquals(1, counter.getCount()); assertEquals(1, counter.getCount());
} }
@@ -343,7 +345,7 @@ public class StorageManagerTest extends TestCase {
new Computable<String>() { new Computable<String>() {
@Override @Override
public String compute() { public String compute() {
return rec.compute(); return rec.invoke();
} }
}, },
new Function<Boolean, String>() { new Function<Boolean, String>() {
@@ -366,23 +368,23 @@ public class StorageManagerTest extends TestCase {
C c = new C(); C c = new C();
try { try {
c.rec.compute(); c.rec.invoke();
fail(); fail();
} }
catch (ReenteringLazyValueComputationException e) { catch (ReenteringLazyValueComputationException e) {
// OK // OK
} }
assertEquals("second", c.rec.compute()); assertEquals("second", c.rec.invoke());
} }
// Utilities // Utilities
private static <K, V> Computable<V> apply(final Function<K, V> f, final K x) { private static <K, V> Function0<V> apply(final Function1<K, V> f, final K x) {
return new Computable<V>() { return new Function0<V>() {
@Override @Override
public V compute() { public V invoke() {
return f.fun(x); return f.invoke(x);
} }
}; };
} }
@@ -237,7 +237,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
errorReporter.reportAnnotationLoadingError("Kotlin class for loading member annotations is not found: " + container, null); errorReporter.reportAnnotationLoadingError("Kotlin class for loading member annotations is not found: " + container, null);
} }
List<AnnotationDescriptor> annotations = memberAnnotations.fun(kotlinClass).get(signature); List<AnnotationDescriptor> annotations = memberAnnotations.invoke(kotlinClass).get(signature);
return annotations == null ? Collections.<AnnotationDescriptor>emptyList() : annotations; return annotations == null ? Collections.<AnnotationDescriptor>emptyList() : annotations;
} }
@@ -105,7 +105,7 @@ public abstract class AbstractLazyTypeParameterDescriptor implements TypeParamet
@NotNull @NotNull
@Override @Override
public Set<JetType> getUpperBounds() { public Set<JetType> getUpperBounds() {
return upperBounds.compute(); return upperBounds.invoke();
} }
@NotNull @NotNull
@@ -114,7 +114,7 @@ public abstract class AbstractLazyTypeParameterDescriptor implements TypeParamet
@NotNull @NotNull
@Override @Override
public JetType getUpperBoundsAsType() { public JetType getUpperBoundsAsType() {
return upperBoundsAsType.compute(); return upperBoundsAsType.invoke();
} }
@NotNull @NotNull
@@ -144,7 +144,7 @@ public abstract class AbstractLazyTypeParameterDescriptor implements TypeParamet
@NotNull @NotNull
@Override @Override
public TypeConstructor getTypeConstructor() { public TypeConstructor getTypeConstructor() {
return typeConstructor.compute(); return typeConstructor.invoke();
} }
@NotNull @NotNull
@@ -192,7 +192,7 @@ public abstract class AbstractLazyTypeParameterDescriptor implements TypeParamet
@NotNull @NotNull
@Override @Override
public JetType getDefaultType() { public JetType getDefaultType() {
return defaultType.compute(); return defaultType.invoke();
} }
@NotNull @NotNull
@@ -30,6 +30,6 @@ public class LazyScopeAdapter extends AbstractScopeAdapter {
@NotNull @NotNull
@Override @Override
protected JetScope getWorkerScope() { protected JetScope getWorkerScope() {
return scope.compute(); return scope.invoke();
} }
} }
@@ -143,7 +143,7 @@ class BuiltinsNamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl {
@NotNull @NotNull
@Override @Override
public Collection<Name> getClassNames(@NotNull FqName packageName) { public Collection<Name> getClassNames(@NotNull FqName packageName) {
return packageName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) ? classNames.compute() : Collections.<Name>emptyList(); return packageName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) ? classNames.invoke() : Collections.<Name>emptyList();
} }
} }
} }
@@ -181,11 +181,6 @@ public class LockBasedStorageManager implements StorageManager {
@Override @Override
public T invoke() { public T invoke() {
return compute();
}
@Override
public T compute() {
Object _value = value; Object _value = value;
if (!(value instanceof NotValue)) return WrappedValues.unescapeThrowable(_value); if (!(value instanceof NotValue)) return WrappedValues.unescapeThrowable(_value);
@@ -245,8 +240,8 @@ public class LockBasedStorageManager implements StorageManager {
@Override @Override
@NotNull @NotNull
public T compute() { public T invoke() {
T result = super.compute(); T result = super.invoke();
assert result != null : "compute() returned null"; assert result != null : "compute() returned null";
return result; return result;
} }
@@ -263,14 +258,9 @@ 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 invoke(@NotNull K input) {
Object value = cache.get(input); Object value = cache.get(input);
if (value != null) return WrappedValues.unescapeExceptionOrNull(value); if (value != null) return WrappedValues.unescapeExceptionOrNull(value);
@@ -311,8 +301,8 @@ public class LockBasedStorageManager implements StorageManager {
@NotNull @NotNull
@Override @Override
public V fun(@NotNull K input) { public V invoke(@NotNull K input) {
V result = super.fun(input); V result = super.invoke(input);
assert result != null : "compute() returned null"; assert result != null : "compute() returned null";
return result; return result;
} }
@@ -16,15 +16,10 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.util.Function;
import jet.Function1; import jet.Function1;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public interface MemoizedFunctionToNotNull<P, R> extends Function<P, R>, Function1<P, R> { public interface MemoizedFunctionToNotNull<P, R> extends Function1<P, R> {
@Override
@NotNull
R fun(P p);
@Override @Override
@NotNull @NotNull
R invoke(P p); R invoke(P p);
@@ -16,15 +16,10 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.util.Function;
import jet.Function1; import jet.Function1;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public interface MemoizedFunctionToNullable<P, R> extends Function<P, R>, Function1<P, R> { public interface MemoizedFunctionToNullable<P, R> extends Function1<P, R> {
@Override
@Nullable
R fun(P p);
@Override @Override
@Nullable @Nullable
R invoke(P p); R invoke(P p);
@@ -16,15 +16,10 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.openapi.util.Computable;
import jet.Function0; import jet.Function0;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public interface NotNullLazyValue<T> extends Computable<T>, Function0<T> { public interface NotNullLazyValue<T> extends Function0<T> {
@Override
@NotNull
T compute();
@Override @Override
@NotNull @NotNull
T invoke(); T invoke();
@@ -16,15 +16,10 @@
package org.jetbrains.jet.storage; package org.jetbrains.jet.storage;
import com.intellij.openapi.util.Computable;
import jet.Function0; import jet.Function0;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public interface NullableLazyValue<T> extends Computable<T>, Function0<T> { public interface NullableLazyValue<T> extends Function0<T> {
@Override
@Nullable
T compute();
@Override @Override
@Nullable @Nullable
T invoke(); T invoke();
@@ -99,7 +99,7 @@ public class ResolveElementCache {
elementOfAdditionalResolve = jetElement; elementOfAdditionalResolve = jetElement;
} }
return additionalResolveCache.getValue().fun(elementOfAdditionalResolve); return additionalResolveCache.getValue().invoke(elementOfAdditionalResolve);
} }
JetParameter parameter = PsiTreeUtil.getTopmostParentOfType(jetElement, JetParameter.class); JetParameter parameter = PsiTreeUtil.getTopmostParentOfType(jetElement, JetParameter.class);