KT-12877: add JsNonModule with support on front-end
This commit is contained in:
committed by
Alexey Andreev
parent
3f2ec6871d
commit
0238b182cc
@@ -537,12 +537,18 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest {
|
||||
}
|
||||
|
||||
dependencies.add(module.getBuiltIns().getBuiltInsModule());
|
||||
dependencies.addAll(getAdditionalDependencies(module));
|
||||
module.setDependencies(dependencies);
|
||||
}
|
||||
|
||||
return modules;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected List<ModuleDescriptorImpl> getAdditionalDependencies(@NotNull ModuleDescriptorImpl module) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@SuppressWarnings("unchecked")
|
||||
protected ModuleDescriptorImpl createModule(@NotNull String moduleName, @NotNull StorageManager storageManager) {
|
||||
|
||||
+35
-3
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||
@@ -29,11 +30,13 @@ import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys;
|
||||
import org.jetbrains.kotlin.js.config.JsConfig;
|
||||
import org.jetbrains.kotlin.js.config.LibrarySourcesConfig;
|
||||
import org.jetbrains.kotlin.js.resolve.BindingContextSlicesJsKt;
|
||||
import org.jetbrains.kotlin.js.resolve.JsPlatform;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.psi.KtFile;
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||
import org.jetbrains.kotlin.serialization.js.JsModuleDescriptor;
|
||||
import org.jetbrains.kotlin.serialization.js.ModuleKind;
|
||||
import org.jetbrains.kotlin.storage.StorageManager;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
|
||||
@@ -77,9 +80,40 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
|
||||
// TODO: support LANGUAGE directive in JS diagnostic tests
|
||||
assert languageVersionSettings == null
|
||||
: BaseDiagnosticsTest.LANGUAGE_DIRECTIVE + " directive is not supported in JS diagnostic tests";
|
||||
moduleTrace.record(BindingContextSlicesJsKt.MODULE_KIND, moduleContext.getModule(), getModuleKind(ktFiles));
|
||||
return TopDownAnalyzerFacadeForJS.analyzeFilesWithGivenTrace(ktFiles, moduleTrace, moduleContext, config);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static ModuleKind getModuleKind(@NotNull List<KtFile> ktFiles) {
|
||||
ModuleKind kind = ModuleKind.PLAIN;
|
||||
for (KtFile file : ktFiles) {
|
||||
String text = file.getText();
|
||||
for (String line : StringUtil.splitByLines(text)) {
|
||||
line = line.trim();
|
||||
if (!line.startsWith("//")) continue;
|
||||
line = line.substring(2).trim();
|
||||
List<String> parts = StringUtil.split(line, ":");
|
||||
if (parts.size() != 2) continue;
|
||||
|
||||
if (!parts.get(0).trim().equals("MODULE_KIND")) continue;
|
||||
kind = ModuleKind.valueOf(parts.get(1).trim());
|
||||
}
|
||||
}
|
||||
|
||||
return kind;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected List<ModuleDescriptorImpl> getAdditionalDependencies(@NotNull ModuleDescriptorImpl module) {
|
||||
List<ModuleDescriptorImpl> dependencies = new ArrayList<ModuleDescriptorImpl>();
|
||||
for (JsModuleDescriptor<ModuleDescriptorImpl> moduleDescriptor : config.getModuleDescriptors()) {
|
||||
dependencies.add(moduleDescriptor.getData());
|
||||
}
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldSkipJvmSignatureDiagnostics(Map<TestModule, List<TestFile>> groupedByModule) {
|
||||
return true;
|
||||
@@ -99,9 +133,7 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
|
||||
List<ModuleDescriptorImpl> dependencies = new ArrayList<ModuleDescriptorImpl>();
|
||||
dependencies.add(module);
|
||||
|
||||
for (JsModuleDescriptor<ModuleDescriptorImpl> moduleDescriptor : config.getModuleDescriptors()) {
|
||||
dependencies.add(moduleDescriptor.getData());
|
||||
}
|
||||
dependencies.addAll(getAdditionalDependencies(module));
|
||||
|
||||
dependencies.add(module.getBuiltIns().getBuiltInsModule());
|
||||
module.setDependencies(dependencies);
|
||||
|
||||
+12
@@ -316,6 +316,18 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/module/prohibitedOnNonNative.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("wrongCallToModule.kt")
|
||||
public void testWrongCallToModule() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("wrongCallToNonModule.kt")
|
||||
public void testWrongCallToNonModule() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name")
|
||||
|
||||
Reference in New Issue
Block a user