diff --git a/compiler/testData/diagnostics/tests/j+k/Simple.jet b/compiler/testData/diagnostics/tests/j+k/Simple.jet new file mode 100644 index 00000000000..322ff1fa99b --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/Simple.jet @@ -0,0 +1,9 @@ +// FILE: A.java + +class A { + void f() { } +} + +// FILE: B.kt + +fun foo(a: A) = a.f() diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java index f4716276339..510a28049e2 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java @@ -18,8 +18,16 @@ package org.jetbrains.jet.checkers; import com.google.common.base.Predicates; import com.google.common.collect.Lists; +import com.google.common.io.ByteStreams; +import com.google.common.io.CharStreams; +import com.google.common.io.Files; +import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.PsiErrorElement; import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiFileFactory; import junit.framework.Test; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -35,6 +43,8 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacade; import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; import java.util.List; /** @@ -59,17 +69,32 @@ public class JetDiagnosticsTest extends JetLiteFixture { private final String expectedText; private final String clearText; private final JetFile jetFile; + private final PsiFile javaFile; public TestFile(String fileName, String textWithMarkers) { - expectedText = textWithMarkers; - clearText = CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges); - jetFile = createCheckAndReturnPsiFile(fileName, clearText); - for (CheckerTestUtil.DiagnosedRange diagnosedRange : diagnosedRanges) { - diagnosedRange.setFile(jetFile); + if (fileName.endsWith(".java")) { + this.javaFile = PsiFileFactory.getInstance(getProject()).createFileFromText(fileName, JavaLanguage.INSTANCE, textWithMarkers); + // TODO: check there's not syntax errors + this.jetFile = null; + this.expectedText = this.clearText = textWithMarkers; + } else { + expectedText = textWithMarkers; + clearText = CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges); + this.javaFile = null; + this.jetFile = createCheckAndReturnPsiFile(fileName, clearText); + for (CheckerTestUtil.DiagnosedRange diagnosedRange : diagnosedRanges) { + diagnosedRange.setFile(jetFile); + } } } public boolean getActualText(BindingContext bindingContext, StringBuilder actualText) { + if (this.jetFile == null) { + // TODO: check java files too + actualText.append(this.clearText); + return true; + } + final boolean ok[] = { true }; CheckerTestUtil.diagnosticsDiff(diagnosedRanges, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile), new CheckerTestUtil.DiagnosticDiffCallbacks() { @NotNull @@ -99,8 +124,24 @@ public class JetDiagnosticsTest extends JetLiteFixture { } + private boolean hasJavaFiles; + private File javaFilesDir; + + private void writeJavaFile(@NotNull String fileName, @NotNull String content) { + try { + File javaFile = new File(javaFilesDir, fileName); + JetTestUtils.mkdirs(javaFile.getParentFile()); + Files.write(content, javaFile, Charset.forName("utf-8")); + hasJavaFiles = true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override public void runTest() throws Exception { + javaFilesDir = new File(FileUtil.getTempDirectory(), "java-files"); + String testFileName = name + ".jet"; String expectedText = loadFile(testFileName); @@ -108,16 +149,26 @@ public class JetDiagnosticsTest extends JetLiteFixture { List testFileFiles = JetTestUtils.createTestFiles(testFileName, expectedText, new JetTestUtils.TestFileFactory() { @Override public TestFile create(String fileName, String text) { + if (fileName.endsWith(".java")) { + writeJavaFile(fileName, text); + } return new TestFile(fileName, text); } }); boolean importJdk = expectedText.contains("+JDK"); // Configuration configuration = importJdk ? JavaBridgeConfiguration.createJavaBridgeConfiguration(getProject()) : Configuration.EMPTY; + if (hasJavaFiles) { + // According to yole@ the only way to import java files is to write them on disk + // -- stepan.koltsov@ 2012-02-29 + myEnvironment.addToClasspath(javaFilesDir); + } List jetFiles = Lists.newArrayList(); for (TestFile testFileFile : testFileFiles) { - jetFiles.add(testFileFile.jetFile); + if (testFileFile.jetFile != null) { + jetFiles.add(testFileFile.jetFile); + } } BindingContext bindingContext;