Fix "rewrite at slice" problems with resolving same Java class many times over the same trace
This commit is contained in:
@@ -33,10 +33,7 @@ import org.jetbrains.jet.lang.diagnostics.*;
|
|||||||
import org.jetbrains.jet.lang.psi.JetElement;
|
import org.jetbrains.jet.lang.psi.JetElement;
|
||||||
import org.jetbrains.jet.lang.psi.JetExpression;
|
import org.jetbrains.jet.lang.psi.JetExpression;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
import org.jetbrains.jet.lang.resolve.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|
||||||
import org.jetbrains.jet.lang.resolve.Diagnostics;
|
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.MutableResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.MutableResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
||||||
@@ -62,10 +59,11 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
|||||||
);
|
);
|
||||||
|
|
||||||
CliLightClassGenerationSupport support = CliLightClassGenerationSupport.getInstanceForCli(getProject());
|
CliLightClassGenerationSupport support = CliLightClassGenerationSupport.getInstanceForCli(getProject());
|
||||||
BindingTrace trace = support.getTrace();
|
BindingTrace supportTrace = support.getTrace();
|
||||||
|
|
||||||
List<JetFile> allJetFiles = new ArrayList<JetFile>();
|
List<JetFile> allJetFiles = new ArrayList<JetFile>();
|
||||||
Map<TestModule, ModuleDescriptorImpl> modules = createModules(groupedByModule);
|
Map<TestModule, ModuleDescriptorImpl> modules = createModules(groupedByModule);
|
||||||
|
Map<TestModule, BindingContext> moduleBindings = new HashMap<TestModule, BindingContext>();
|
||||||
|
|
||||||
for (Map.Entry<TestModule, List<TestFile>> entry : groupedByModule.entrySet()) {
|
for (Map.Entry<TestModule, List<TestFile>> entry : groupedByModule.entrySet()) {
|
||||||
TestModule testModule = entry.getKey();
|
TestModule testModule = entry.getKey();
|
||||||
@@ -75,13 +73,17 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
|||||||
allJetFiles.addAll(jetFiles);
|
allJetFiles.addAll(jetFiles);
|
||||||
|
|
||||||
ModuleDescriptorImpl module = modules.get(testModule);
|
ModuleDescriptorImpl module = modules.get(testModule);
|
||||||
|
BindingTrace moduleTrace = groupedByModule.size() > 1
|
||||||
|
? new DelegatingBindingTrace(supportTrace.getBindingContext(), "Trace for module " + module)
|
||||||
|
: supportTrace;
|
||||||
|
moduleBindings.put(testModule, moduleTrace.getBindingContext());
|
||||||
|
|
||||||
// New JavaDescriptorResolver is created for each module, which is good because it emulates different Java libraries for each module,
|
// New JavaDescriptorResolver is created for each module, which is good because it emulates different Java libraries for each module,
|
||||||
// albeit with same class names
|
// albeit with same class names
|
||||||
AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
|
AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
|
||||||
getProject(),
|
getProject(),
|
||||||
jetFiles,
|
jetFiles,
|
||||||
trace,
|
moduleTrace,
|
||||||
Predicates.<PsiFile>alwaysTrue(),
|
Predicates.<PsiFile>alwaysTrue(),
|
||||||
module == null ? support.getModule() : module,
|
module == null ? support.getModule() : module,
|
||||||
MemberFilter.ALWAYS_TRUE
|
MemberFilter.ALWAYS_TRUE
|
||||||
@@ -92,14 +94,14 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
|||||||
|
|
||||||
StringBuilder actualText = new StringBuilder();
|
StringBuilder actualText = new StringBuilder();
|
||||||
for (TestFile testFile : testFiles) {
|
for (TestFile testFile : testFiles) {
|
||||||
ok &= testFile.getActualText(trace.getBindingContext(), actualText);
|
ok &= testFile.getActualText(moduleBindings.get(testFile.getModule()), actualText);
|
||||||
}
|
}
|
||||||
|
|
||||||
JetTestUtils.assertEqualsToFile(testDataFile, actualText.toString());
|
JetTestUtils.assertEqualsToFile(testDataFile, actualText.toString());
|
||||||
|
|
||||||
assertTrue("Diagnostics mismatch. See the output above", ok);
|
assertTrue("Diagnostics mismatch. See the output above", ok);
|
||||||
|
|
||||||
checkAllResolvedCallsAreCompleted(allJetFiles, trace.getBindingContext());
|
checkAllResolvedCallsAreCompleted(allJetFiles, supportTrace.getBindingContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<TestModule, ModuleDescriptorImpl> createModules(Map<TestModule, List<TestFile>> groupedByModule) {
|
private Map<TestModule, ModuleDescriptorImpl> createModules(Map<TestModule, List<TestFile>> groupedByModule) {
|
||||||
|
|||||||
Reference in New Issue
Block a user