J2K: adding type arguments where they are needed and removing them where they are redundant
This commit is contained in:
@@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.j2k.Converter;
|
||||
import org.jetbrains.jet.j2k.ConverterSettings;
|
||||
import org.jetbrains.jet.j2k.FilesConversionScope;
|
||||
import org.jetbrains.jet.plugin.j2k.J2kPostProcessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -52,7 +53,10 @@ public class JavaToKotlinAction extends AnAction {
|
||||
return;
|
||||
}
|
||||
|
||||
final Converter converter = Converter.object$.create(project, ConverterSettings.defaultSettings, new FilesConversionScope(selectedJavaFiles));
|
||||
final Converter converter = Converter.object$.create(project,
|
||||
ConverterSettings.defaultSettings,
|
||||
new FilesConversionScope(selectedJavaFiles),
|
||||
J2kPostProcessor.instance$);
|
||||
CommandProcessor.getInstance().executeCommand(
|
||||
project,
|
||||
new Runnable() {
|
||||
|
||||
+5
-2
@@ -32,7 +32,7 @@ import org.jetbrains.jet.plugin.editor.JetEditorOptions
|
||||
import java.awt.datatransfer.Transferable
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||
import com.intellij.codeInsight.editorActions.ReferenceTransferableData
|
||||
import org.jetbrains.jet.plugin.j2k.J2kPostProcessor;
|
||||
|
||||
public class ConvertJavaCopyPastePostProcessor() : CopyPastePostProcessor<TextBlockTransferableData>() {
|
||||
|
||||
@@ -85,7 +85,10 @@ public class ConvertJavaCopyPastePostProcessor() : CopyPastePostProcessor<TextBl
|
||||
}
|
||||
|
||||
private fun convertCopiedCodeToKotlin(code: CopiedCode, file: PsiJavaFile): String {
|
||||
val converter = Converter.create(file.getProject(), ConverterSettings.defaultSettings, FilesConversionScope(listOf(file)))
|
||||
val converter = Converter.create(file.getProject(),
|
||||
ConverterSettings.defaultSettings,
|
||||
FilesConversionScope(listOf(file)),
|
||||
J2kPostProcessor)
|
||||
val startOffsets = code.getStartOffsets()
|
||||
val endOffsets = code.getEndOffsets()
|
||||
assert(startOffsets.size == endOffsets.size) { "Must have the same size" }
|
||||
|
||||
@@ -84,14 +84,9 @@ public class RemoveExplicitTypeArguments : JetSelfTargetingIntention<JetTypeArgu
|
||||
return args == newArgs
|
||||
}
|
||||
|
||||
class CallWithoutTypeArgs(call: Call) : DelegatingCall(call) {
|
||||
|
||||
override fun getTypeArguments(): MutableList<JetTypeProjection> {
|
||||
return ArrayList<JetTypeProjection>()
|
||||
}
|
||||
|
||||
private class CallWithoutTypeArgs(call: Call) : DelegatingCall(call) {
|
||||
override fun getTypeArguments(): List<JetTypeProjection> = listOf()
|
||||
override fun getTypeArgumentList() = null
|
||||
|
||||
}
|
||||
|
||||
override fun applyTo(element: JetTypeArgumentList, editor: Editor) {
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2010-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.plugin.j2k
|
||||
|
||||
import org.jetbrains.jet.j2k.PostProcessor
|
||||
import org.jetbrains.jet.lang.psi.*
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext
|
||||
import org.jetbrains.jet.plugin.intentions.RemoveExplicitTypeArguments
|
||||
import org.jetbrains.jet.plugin.caches.resolve.getAnalysisResults
|
||||
import java.util.ArrayList
|
||||
|
||||
public object J2kPostProcessor : PostProcessor {
|
||||
override fun analyzeFile(file: JetFile): BindingContext {
|
||||
return file.getAnalysisResults().getBindingContext()
|
||||
}
|
||||
|
||||
override fun doAdditionalProcessing(file: JetFile) {
|
||||
val redundantTypeArgs = ArrayList<JetTypeArgumentList>()
|
||||
file.accept(object : JetTreeVisitorVoid(){
|
||||
override fun visitTypeArgumentList(typeArgumentList: JetTypeArgumentList) {
|
||||
if (RemoveExplicitTypeArguments().isApplicableTo(typeArgumentList)) {
|
||||
redundantTypeArgs.add(typeArgumentList)
|
||||
return
|
||||
}
|
||||
|
||||
super.visitTypeArgumentList(typeArgumentList)
|
||||
}
|
||||
})
|
||||
|
||||
for (typeArgs in redundantTypeArgs) {
|
||||
typeArgs.delete()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user