diff --git a/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinAction.java b/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinAction.java index 9df3b2965ae..3620ee86166 100644 --- a/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinAction.java +++ b/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinAction.java @@ -38,11 +38,11 @@ import static org.jetbrains.jet.plugin.actions.JavaToKotlinActionUtil.*; public class JavaToKotlinAction extends AnAction { @Override public void actionPerformed(final AnActionEvent e) { - final Converter converter = new Converter(); VirtualFile[] virtualFiles = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY); - final Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext()); assert virtualFiles != null; + final Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext()); assert project != null; + final Converter converter = new Converter(project); int result = Messages.showYesNoCancelDialog(project, "Would you like to backup Java files?", "Backup", diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.java b/j2k/src/org/jetbrains/jet/j2k/Converter.java index 881488bf855..ca7ee35b2d8 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.java +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.j2k; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.intellij.openapi.project.Project; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +29,7 @@ import org.jetbrains.jet.j2k.util.AstUtil; import org.jetbrains.jet.j2k.visitors.*; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.expressions.OperatorConventions; +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; @@ -59,7 +61,8 @@ public class Converter { @NotNull private final Set flags = Sets.newHashSet(); - public Converter() { + public Converter(@NotNull Project project) { + KotlinBuiltIns.initialize(project); } public boolean addFlag(@NotNull J2KConverterFlags flag) { diff --git a/j2k/src/org/jetbrains/jet/j2k/JavaToKotlinTranslator.java b/j2k/src/org/jetbrains/jet/j2k/JavaToKotlinTranslator.java index 29738fa0ada..3a52ddfac1a 100644 --- a/j2k/src/org/jetbrains/jet/j2k/JavaToKotlinTranslator.java +++ b/j2k/src/org/jetbrains/jet/j2k/JavaToKotlinTranslator.java @@ -19,6 +19,7 @@ import com.intellij.core.JavaCoreApplicationEnvironment; import com.intellij.core.JavaCoreProjectEnvironment; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.Disposable; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -46,8 +47,6 @@ public class JavaToKotlinTranslator { } }; - private static final Converter CONVERTER = new Converter(); - private JavaToKotlinTranslator() { } @@ -60,8 +59,8 @@ public class JavaToKotlinTranslator { } @Nullable - static PsiFile createFile(@NotNull JavaCoreProjectEnvironment javaCoreEnvironment, @NotNull String text) { - return PsiFileFactory.getInstance(javaCoreEnvironment.getProject()).createFileFromText( + static PsiFile createFile(@NotNull Project project, @NotNull String text) { + return PsiFileFactory.getInstance(project).createFileFromText( "test.java", JavaLanguage.INSTANCE, text ); } @@ -96,7 +95,7 @@ public class JavaToKotlinTranslator { } @Nullable - private static File findRtJar() { + public static File findRtJar() { String javaHome = System.getenv("JAVA_HOME"); File rtJar; if (javaHome == null) { @@ -135,7 +134,7 @@ public class JavaToKotlinTranslator { } @Nullable - private static File findAnnotations() { + public static File findAnnotations() { ClassLoader classLoader = JavaToKotlinTranslator.class.getClassLoader(); while (classLoader != null) { if (classLoader instanceof URLClassLoader) { @@ -192,8 +191,9 @@ public class JavaToKotlinTranslator { static String generateKotlinCode(@NotNull String javaCode) { PsiFile file = createFile(javaCode); if (file != null && file instanceof PsiJavaFile) { - setClassIdentifiers(CONVERTER, file); - return prettify(CONVERTER.fileToFile((PsiJavaFile) file).toKotlin()); + Converter converter = new Converter(file.getProject()); + setClassIdentifiers(converter, file); + return prettify(converter.fileToFile((PsiJavaFile) file).toKotlin()); } return ""; } @@ -202,8 +202,9 @@ public class JavaToKotlinTranslator { static String generateKotlinCodeWithCompatibilityImport(@NotNull String javaCode) { PsiFile file = createFile(javaCode); if (file != null && file instanceof PsiJavaFile) { - setClassIdentifiers(CONVERTER, file); - return prettify(CONVERTER.fileToFileWithCompatibilityImport((PsiJavaFile) file).toKotlin()); + Converter converter = new Converter(file.getProject()); + setClassIdentifiers(converter, file); + return prettify(converter.fileToFileWithCompatibilityImport((PsiJavaFile) file).toKotlin()); } return ""; } diff --git a/j2k/tests/j2k-tests.iml b/j2k/tests/j2k-tests.iml index 22bd0fbda23..70012990951 100644 --- a/j2k/tests/j2k-tests.iml +++ b/j2k/tests/j2k-tests.iml @@ -10,6 +10,8 @@ + + diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/StandaloneJavaToKotlinConverterTest.java b/j2k/tests/test/org/jetbrains/jet/j2k/StandaloneJavaToKotlinConverterTest.java index 0cc18807cd4..458ae5e9a2b 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/StandaloneJavaToKotlinConverterTest.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/StandaloneJavaToKotlinConverterTest.java @@ -16,7 +16,7 @@ package org.jetbrains.jet.j2k; -import com.intellij.core.JavaCoreProjectEnvironment; +import com.intellij.openapi.Disposable; import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiJavaFile; @@ -26,6 +26,9 @@ import junit.framework.TestCase; import junit.framework.TestSuite; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys; +import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; +import org.jetbrains.jet.config.CompilerConfiguration; import java.io.File; import java.io.IOException; @@ -34,10 +37,27 @@ import java.io.IOException; * @author ignatov */ public class StandaloneJavaToKotlinConverterTest extends TestCase { + private static final JetCoreEnvironment jetCoreEnvironment; + + static { + CompilerConfiguration config = new CompilerConfiguration(); + + config.add(JVMConfigurationKeys.CLASSPATH_KEY, JavaToKotlinTranslator.findRtJar()); + File annotations = JavaToKotlinTranslator.findAnnotations(); + if (annotations != null && annotations.exists()) { + config.add(JVMConfigurationKeys.CLASSPATH_KEY, annotations); + } + + Disposable disposable = new Disposable() { + @Override + public void dispose() { + } + }; + jetCoreEnvironment = new JetCoreEnvironment(disposable, config); + } + private final String myDataPath; private final String myName; - @NotNull - private final static JavaCoreProjectEnvironment myJavaCoreEnvironment = JavaToKotlinTranslator.setUpJavaCoreEnvironment(); public StandaloneJavaToKotlinConverterTest(String dataPath, String name) { myDataPath = dataPath; @@ -46,7 +66,7 @@ public class StandaloneJavaToKotlinConverterTest extends TestCase { @Override protected void runTest() throws Throwable { - Converter converter = new Converter(); + Converter converter = new Converter(jetCoreEnvironment.getProject()); String javaPath = "j2k/tests/testData/" + getTestFilePath(); String kotlinPath = javaPath.replace(".jav", ".kt"); @@ -122,7 +142,7 @@ public class StandaloneJavaToKotlinConverterTest extends TestCase { @NotNull private String fileToKotlin(Converter converter, @NotNull String text) { - return generateKotlinCode(converter, JavaToKotlinTranslator.createFile(myJavaCoreEnvironment, text)); + return generateKotlinCode(converter, JavaToKotlinTranslator.createFile(jetCoreEnvironment.getProject(), text)); } @NotNull