Change check for function slice rewrite with explicit guard

This commit is contained in:
Nikolay Krasko
2012-09-26 22:02:18 +04:00
parent 7b60c016f9
commit f943aa48a0
@@ -53,7 +53,6 @@ import org.jetbrains.jet.rt.signature.JetSignatureAdapter;
import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter; import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter;
import org.jetbrains.jet.rt.signature.JetSignatureReader; import org.jetbrains.jet.rt.signature.JetSignatureReader;
import org.jetbrains.jet.rt.signature.JetSignatureVisitor; import org.jetbrains.jet.rt.signature.JetSignatureVisitor;
import org.jetbrains.jet.utils.ExceptionUtils;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.*; import java.util.*;
@@ -1411,13 +1410,11 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return; return;
} }
TemporaryBindingTrace tempTrace = TemporaryBindingTrace.create(trace);
final Set<FunctionDescriptor> functions = new HashSet<FunctionDescriptor>(); final Set<FunctionDescriptor> functions = new HashSet<FunctionDescriptor>();
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet(); Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
for (PsiMethodWrapper method : namedMembers.methods) { for (PsiMethodWrapper method : namedMembers.methods) {
SimpleFunctionDescriptor function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData, tempTrace); SimpleFunctionDescriptor function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData);
if (function != null) { if (function != null) {
functionsFromCurrent.add(function); functionsFromCurrent.add(function);
} }
@@ -1453,15 +1450,9 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
} }
} }
try { namedMembers.functionDescriptors = functions;
namedMembers.functionDescriptors = functions;
tempTrace.commit();
} catch (Throwable e) {
assert false : "No errors are expected while saving state";
throw ExceptionUtils.rethrow(e);
}
} }
private static Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) { private static Set<SimpleFunctionDescriptor> getFunctionsFromSupertypes(ResolverScopeData scopeData, Name methodName) {
Set<SimpleFunctionDescriptor> r = Sets.newLinkedHashSet(); Set<SimpleFunctionDescriptor> r = Sets.newLinkedHashSet();
for (JetType supertype : getSupertypes(scopeData)) { for (JetType supertype : getSupertypes(scopeData)) {
@@ -1536,7 +1527,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
@Nullable @Nullable
private SimpleFunctionDescriptor resolveMethodToFunctionDescriptor( private SimpleFunctionDescriptor resolveMethodToFunctionDescriptor(
@NotNull final PsiClass psiClass, final PsiMethodWrapper method, @NotNull final PsiClass psiClass, final PsiMethodWrapper method,
@NotNull ResolverScopeData scopeData, BindingTrace tempTrace) { @NotNull ResolverScopeData scopeData) {
getResolverScopeData(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( SimpleFunctionDescriptorImpl functionDescriptorImpl = new SimpleFunctionDescriptorImpl(
scopeData.classOrNamespaceDescriptor, scopeData.classOrNamespaceDescriptor,
resolveAnnotations(psiMethod), resolveAnnotations(psiMethod),
@@ -1605,7 +1600,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
); );
if (functionDescriptorImpl.getKind() == CallableMemberDescriptor.Kind.DECLARATION) { if (functionDescriptorImpl.getKind() == CallableMemberDescriptor.Kind.DECLARATION) {
BindingContextUtils.recordFunctionDeclarationToDescriptor(tempTrace, psiMethod, functionDescriptorImpl); BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, psiMethod, functionDescriptorImpl);
} }
if (containingClass != psiClass && !method.isStatic()) { if (containingClass != psiClass && !method.isStatic()) {