Java to Kotlin converter: no usage search and body analysis for members out of conversion scope
This commit is contained in:
@@ -26,9 +26,11 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiJavaFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.j2k.Converter;
|
||||
import org.jetbrains.jet.j2k.ConverterSettings;
|
||||
import org.jetbrains.jet.j2k.FilesConversionScope;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -43,7 +45,7 @@ public class JavaToKotlinAction extends AnAction {
|
||||
assert virtualFiles != null;
|
||||
final Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
|
||||
assert project != null;
|
||||
final List<PsiFile> selectedJavaFiles = getAllJavaFiles(virtualFiles, project);
|
||||
final List<PsiJavaFile> selectedJavaFiles = getAllJavaFiles(virtualFiles, project);
|
||||
if (selectedJavaFiles.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -77,8 +79,8 @@ public class JavaToKotlinAction extends AnAction {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Converter prepareConverter(@NotNull Project project, @NotNull List<PsiFile> selectedJavaFiles) {
|
||||
Converter converter = new Converter(project, ConverterSettings.defaultSettings);
|
||||
private static Converter prepareConverter(@NotNull Project project, @NotNull List<PsiJavaFile> selectedJavaFiles) {
|
||||
Converter converter = new Converter(project, ConverterSettings.defaultSettings, new FilesConversionScope(selectedJavaFiles));
|
||||
converter.clearClassIdentifiers();
|
||||
for (PsiFile f : selectedJavaFiles) {
|
||||
if (f.getFileType() instanceof JavaFileType) {
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.jetbrains.jet.plugin.actions;
|
||||
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.ex.MessagesEx;
|
||||
@@ -53,14 +52,14 @@ public class JavaToKotlinActionUtil {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
/*package*/ static List<PsiFile> getAllJavaFiles(@NotNull VirtualFile[] vFiles, Project project) {
|
||||
/*package*/ static List<PsiJavaFile> getAllJavaFiles(@NotNull VirtualFile[] vFiles, Project project) {
|
||||
Set<VirtualFile> filesSet = allVirtualFiles(vFiles);
|
||||
PsiManager manager = PsiManager.getInstance(project);
|
||||
List<PsiFile> res = new ArrayList<PsiFile>();
|
||||
List<PsiJavaFile> res = new ArrayList<PsiJavaFile>();
|
||||
for (VirtualFile file : filesSet) {
|
||||
PsiFile psiFile = manager.findFile(file);
|
||||
if (psiFile != null && psiFile.getFileType() instanceof JavaFileType) {
|
||||
res.add(psiFile);
|
||||
if (psiFile != null && psiFile instanceof PsiJavaFile) {
|
||||
res.add((PsiJavaFile)psiFile);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
@@ -92,7 +91,7 @@ public class JavaToKotlinActionUtil {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static List<VirtualFile> convertFiles(final Converter converter, List<PsiFile> allJavaFilesNear) {
|
||||
static List<VirtualFile> convertFiles(final Converter converter, List<PsiJavaFile> allJavaFilesNear) {
|
||||
final List<VirtualFile> result = new LinkedList<VirtualFile>();
|
||||
for (final PsiFile f : allJavaFilesNear) {
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@@ -108,7 +107,7 @@ public class JavaToKotlinActionUtil {
|
||||
return result;
|
||||
}
|
||||
|
||||
static void deleteFiles(List<PsiFile> allJavaFilesNear) {
|
||||
static void deleteFiles(List<PsiJavaFile> allJavaFilesNear) {
|
||||
for (final PsiFile f : allJavaFilesNear) {
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
@@ -150,7 +149,7 @@ public class JavaToKotlinActionUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
static void renameFiles(@NotNull List<PsiFile> psiFiles) {
|
||||
static void renameFiles(@NotNull List<PsiJavaFile> psiFiles) {
|
||||
for (final PsiFile f : psiFiles) {
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
|
||||
+11
-17
@@ -48,44 +48,38 @@ public class ConvertJavaCopyPastePostProcessor() : CopyPastePostProcessor<TextBl
|
||||
}
|
||||
|
||||
public override fun collectTransferableData(file: PsiFile, editor: Editor, startOffsets: IntArray, endOffsets: IntArray): TextBlockTransferableData? {
|
||||
if (!(file is PsiJavaFile)) {
|
||||
return null
|
||||
}
|
||||
if (file !is PsiJavaFile) return null
|
||||
|
||||
val lightFile = PsiFileFactory.getInstance(file.getProject())!!.createFileFromText(file.getText()!!, file)
|
||||
return CopiedCode(lightFile as? PsiJavaFile, startOffsets, endOffsets)
|
||||
}
|
||||
|
||||
public override fun processTransferableData(project: Project, editor: Editor, bounds: RangeMarker, caretOffset: Int, indented: Ref<Boolean>, value: TextBlockTransferableData) {
|
||||
if (value !is CopiedCode)
|
||||
return
|
||||
if (value !is CopiedCode) return
|
||||
val sourceFile = value.getFile() ?: return
|
||||
|
||||
if (value.getFile() == null)
|
||||
return
|
||||
|
||||
val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument())
|
||||
if (file !is JetFile)
|
||||
return
|
||||
val targetFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument())
|
||||
if (targetFile !is JetFile) return
|
||||
|
||||
val jetEditorOptions = JetEditorOptions.getInstance()!!
|
||||
val needConvert = jetEditorOptions.isEnableJavaToKotlinConversion() && (jetEditorOptions.isDonTShowConversionDialog() || okFromDialog(project))
|
||||
if (needConvert) {
|
||||
val text = convertCopiedCodeToKotlin(value, file.getProject())
|
||||
val text = convertCopiedCodeToKotlin(value, sourceFile)
|
||||
if (text.isNotEmpty()) {
|
||||
ApplicationManager.getApplication()!!.runWriteAction {
|
||||
val startOffset = bounds.getStartOffset()
|
||||
editor.getDocument().replaceString(bounds.getStartOffset(), bounds.getEndOffset(), text)
|
||||
val endOffsetAfterCopy = startOffset + text.length()
|
||||
editor.getCaretModel().moveToOffset(endOffsetAfterCopy)
|
||||
CodeStyleManager.getInstance(project)!!.reformatText(file, startOffset, endOffsetAfterCopy)
|
||||
PsiDocumentManager.getInstance(file.getProject()).commitDocument(editor.getDocument())
|
||||
CodeStyleManager.getInstance(project)!!.reformatText(targetFile, startOffset, endOffsetAfterCopy)
|
||||
PsiDocumentManager.getInstance(targetFile.getProject()).commitDocument(editor.getDocument())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun convertCopiedCodeToKotlin(code: CopiedCode, project: Project): String {
|
||||
val converter = Converter(project, ConverterSettings.defaultSettings)
|
||||
private fun convertCopiedCodeToKotlin(code: CopiedCode, file: PsiJavaFile): String {
|
||||
val converter = Converter(file.getProject(), ConverterSettings.defaultSettings, FilesConversionScope(listOf(file)))
|
||||
val startOffsets = code.getStartOffsets()
|
||||
val endOffsets = code.getEndOffsets()
|
||||
assert(startOffsets.size == endOffsets.size) { "Must have the same size" }
|
||||
@@ -93,7 +87,7 @@ public class ConvertJavaCopyPastePostProcessor() : CopyPastePostProcessor<TextBl
|
||||
for (i in startOffsets.indices) {
|
||||
val startOffset = startOffsets[i]
|
||||
val endOffset = endOffsets[i]
|
||||
result.append(convertRangeToKotlin(code.getFile()!!, TextRange(startOffset, endOffset), converter))
|
||||
result.append(convertRangeToKotlin(file, TextRange(startOffset, endOffset), converter))
|
||||
}
|
||||
return StringUtil.convertLineSeparators(result.toString())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user