From f943aa48a02b72745d88f3ad1a0df8d4d80c1bfe Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 26 Sep 2012 22:02:18 +0400 Subject: [PATCH] Change check for function slice rewrite with explicit guard --- .../resolve/java/JavaDescriptorResolver.java | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index aa861e838e5..f69406f5b86 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -53,7 +53,6 @@ import org.jetbrains.jet.rt.signature.JetSignatureAdapter; import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter; import org.jetbrains.jet.rt.signature.JetSignatureReader; import org.jetbrains.jet.rt.signature.JetSignatureVisitor; -import org.jetbrains.jet.utils.ExceptionUtils; import javax.inject.Inject; import java.util.*; @@ -1411,13 +1410,11 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return; } - TemporaryBindingTrace tempTrace = TemporaryBindingTrace.create(trace); - final Set functions = new HashSet(); Set functionsFromCurrent = Sets.newHashSet(); for (PsiMethodWrapper method : namedMembers.methods) { - SimpleFunctionDescriptor function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData, tempTrace); + SimpleFunctionDescriptor function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData); if (function != null) { functionsFromCurrent.add(function); } @@ -1453,15 +1450,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } } - try { - namedMembers.functionDescriptors = functions; - tempTrace.commit(); - } catch (Throwable e) { - assert false : "No errors are expected while saving state"; - throw ExceptionUtils.rethrow(e); - } + namedMembers.functionDescriptors = functions; } - + private static Set getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) { Set r = Sets.newLinkedHashSet(); for (JetType supertype : getSupertypes(scopeData)) { @@ -1536,7 +1527,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes @Nullable private SimpleFunctionDescriptor resolveMethodToFunctionDescriptor( @NotNull final PsiClass psiClass, final PsiMethodWrapper method, - @NotNull ResolverScopeData scopeData, BindingTrace tempTrace) { + @NotNull ResolverScopeData scopeData) { getResolverScopeData(scopeData); @@ -1561,6 +1552,10 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes } } + if (trace.get(BindingContext.FUNCTION, psiMethod) != null) { + return trace.get(BindingContext.FUNCTION, psiMethod); + } + SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl( scopeData.classOrNamespaceDescriptor, resolveAnnotations(psiMethod), @@ -1605,7 +1600,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes ); if (functionDescriptorImpl.getKind() == CallableMemberDescriptor.Kind.DECLARATION) { - BindingContextUtils.recordFunctionDeclarationToDescriptor(tempTrace, psiMethod, functionDescriptorImpl); + BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, psiMethod, functionDescriptorImpl); } if (containingClass != psiClass && !method.isStatic()) {