diff --git a/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java b/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java index 4a52c85229b..3d263154199 100644 --- a/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java +++ b/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java @@ -138,14 +138,19 @@ public class LibrarySourcesConfig extends Config { return result; } - private static JetFile getJetFileByVirtualFile(VirtualFile file, String moduleName, PsiManager psiManager) { + protected JetFile getJetFileByVirtualFile(VirtualFile file, String moduleName, PsiManager psiManager) { PsiFile psiFile = psiManager.findFile(file); assert psiFile != null; - psiFile.putUserData(EXTERNAL_MODULE_NAME, moduleName); + + setupPsiFile(psiFile, moduleName); return (JetFile) psiFile; } - private static class JetFileCollector extends VirtualFileVisitor { + protected static void setupPsiFile(PsiFile psiFile, String moduleName) { + psiFile.putUserData(EXTERNAL_MODULE_NAME, moduleName); + } + + private class JetFileCollector extends VirtualFileVisitor { private final List jetFiles; private final String moduleName; private final PsiManager psiManager; diff --git a/js/js.tests/test/org/jetbrains/k2js/test/config/LibrarySourcesConfigWithCaching.java b/js/js.tests/test/org/jetbrains/k2js/test/config/LibrarySourcesConfigWithCaching.java index 62d89140223..a991227f643 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/config/LibrarySourcesConfigWithCaching.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/config/LibrarySourcesConfigWithCaching.java @@ -18,12 +18,15 @@ package org.jetbrains.k2js.test.config; import com.google.common.base.Predicates; import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.k2js.analyze.TopDownAnalyzerFacadeForJS; @@ -31,6 +34,7 @@ import org.jetbrains.k2js.config.Config; import org.jetbrains.k2js.config.EcmaVersion; import org.jetbrains.k2js.config.LibrarySourcesConfig; +import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -98,6 +102,22 @@ public class LibrarySourcesConfigWithCaching extends LibrarySourcesConfig { return isUnitTestConfig; } + @Override + protected JetFile getJetFileByVirtualFile(VirtualFile file, String moduleName, PsiManager psiManager) { + JetFile jetFile; + try { + String text = new String(file.contentsToByteArray(false), file.getCharset()); + jetFile = new JetPsiFactory(getProject()).createPhysicalFile(file.getName(), text); + } + catch (IOException e) { + JetFile jetFileByVirtualFile = super.getJetFileByVirtualFile(file, moduleName, psiManager); + jetFile = new JetPsiFactory(getProject()).createPhysicalFile(file.getPath(), jetFileByVirtualFile.getText()); + } + + setupPsiFile(jetFile, moduleName); + return jetFile; + } + private AnalyzeExhaust getExhaust() { if (exhaust == null) { //noinspection AssignmentToStaticFieldFromInstanceMethod