KT-639 Collect all classes for convertation and only for those classes use mechanism with static init functions invocation
This commit is contained in:
@@ -16,6 +16,20 @@ import java.util.*;
|
|||||||
* @author ignatov
|
* @author ignatov
|
||||||
*/
|
*/
|
||||||
public class Converter {
|
public class Converter {
|
||||||
|
private static Set<String> ourClassIdentifiers = new HashSet<String>();
|
||||||
|
|
||||||
|
public static void setClassIdentifiers(Set<String> identifiers) {
|
||||||
|
ourClassIdentifiers = identifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<String> getClassIdentifiers() {
|
||||||
|
return new HashSet<String>(ourClassIdentifiers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clearClassIdentifiers() {
|
||||||
|
ourClassIdentifiers.clear();
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static File fileToFile(@NotNull PsiJavaFile javaFile) {
|
public static File fileToFile(@NotNull PsiJavaFile javaFile) {
|
||||||
final PsiImportList importList = javaFile.getImportList();
|
final PsiImportList importList = javaFile.getImportList();
|
||||||
@@ -122,7 +136,7 @@ public class Converter {
|
|||||||
for (final Member m : members) {
|
for (final Member m : members) {
|
||||||
// and modify secondaries
|
// and modify secondaries
|
||||||
if (m.getKind() == INode.Kind.CONSTRUCTOR) {
|
if (m.getKind() == INode.Kind.CONSTRUCTOR) {
|
||||||
Function f = (Function)m;
|
Function f = (Function) m;
|
||||||
if (!((Constructor) f).isPrimary()) {
|
if (!((Constructor) f).isPrimary()) {
|
||||||
for (Field fo : finalOrWithEmptyInitializer) {
|
for (Field fo : finalOrWithEmptyInitializer) {
|
||||||
String init = getDefaultInitializer(fo);
|
String init = getDefaultInitializer(fo);
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package org.jetbrains.jet.j2k.visitors;
|
||||||
|
|
||||||
|
import com.intellij.psi.JavaRecursiveElementVisitor;
|
||||||
|
import com.intellij.psi.PsiClass;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ignatov
|
||||||
|
*/
|
||||||
|
public class ClassVisitor extends JavaRecursiveElementVisitor {
|
||||||
|
private Set<String> myClassIdentifiers;
|
||||||
|
|
||||||
|
public ClassVisitor() {
|
||||||
|
myClassIdentifiers = new HashSet<String>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getClassIdentifiers() {
|
||||||
|
return new HashSet<String>(myClassIdentifiers);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitClass(PsiClass aClass) {
|
||||||
|
myClassIdentifiers.add(aClass.getQualifiedName());
|
||||||
|
super.visitClass(aClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@ package org.jetbrains.jet.j2k.visitors;
|
|||||||
|
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.j2k.Converter;
|
|
||||||
import org.jetbrains.jet.j2k.ast.*;
|
import org.jetbrains.jet.j2k.ast.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -85,7 +84,7 @@ public class ElementVisitor extends JavaElementVisitor {
|
|||||||
public void visitParameterList(PsiParameterList list) {
|
public void visitParameterList(PsiParameterList list) {
|
||||||
super.visitParameterList(list);
|
super.visitParameterList(list);
|
||||||
myResult = new ParameterList(
|
myResult = new ParameterList(
|
||||||
Converter.parametersToParameterList(list.getParameters())
|
parametersToParameterList(list.getParameters())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,10 +211,12 @@ public class ExpressionVisitor extends StatementVisitor {
|
|||||||
private static Expression createNewClassExpression(@NotNull PsiNewExpression expression) {
|
private static Expression createNewClassExpression(@NotNull PsiNewExpression expression) {
|
||||||
final PsiAnonymousClass anonymousClass = expression.getAnonymousClass();
|
final PsiAnonymousClass anonymousClass = expression.getAnonymousClass();
|
||||||
final PsiMethod constructor = expression.resolveMethod();
|
final PsiMethod constructor = expression.resolveMethod();
|
||||||
if (constructor == null || isConstructorPrimary(constructor)) {
|
PsiJavaCodeReferenceElement classReference = expression.getClassOrAnonymousClassReference();
|
||||||
|
final boolean isNotConvertedClass = classReference != null && !Converter.getClassIdentifiers().contains(classReference.getQualifiedName());
|
||||||
|
if (constructor == null || isConstructorPrimary(constructor) || isNotConvertedClass) {
|
||||||
return new NewClassExpression(
|
return new NewClassExpression(
|
||||||
expressionToExpression(expression.getQualifier()),
|
expressionToExpression(expression.getQualifier()),
|
||||||
elementToElement(expression.getClassOrAnonymousClassReference()),
|
elementToElement(classReference),
|
||||||
elementToElement(expression.getArgumentList()),
|
elementToElement(expression.getArgumentList()),
|
||||||
anonymousClass != null ? anonymousClassToAnonymousClass(anonymousClass) : null
|
anonymousClass != null ? anonymousClassToAnonymousClass(anonymousClass) : null
|
||||||
);
|
);
|
||||||
@@ -336,7 +338,7 @@ public class ExpressionVisitor extends StatementVisitor {
|
|||||||
PsiElement context = expression.getContext();
|
PsiElement context = expression.getContext();
|
||||||
while (context != null) {
|
while (context != null) {
|
||||||
if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor())
|
if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor())
|
||||||
return !Converter.isConstructorPrimary((PsiMethod) context);
|
return !isConstructorPrimary((PsiMethod) context);
|
||||||
context = context.getContext();
|
context = context.getContext();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -346,7 +348,7 @@ public class ExpressionVisitor extends StatementVisitor {
|
|||||||
PsiElement context = expression.getContext();
|
PsiElement context = expression.getContext();
|
||||||
while (context != null) {
|
while (context != null) {
|
||||||
if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor())
|
if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor())
|
||||||
return Converter.isConstructorPrimary((PsiMethod) context);
|
return isConstructorPrimary((PsiMethod) context);
|
||||||
context = context.getContext();
|
context = context.getContext();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -417,10 +419,3 @@ public class ExpressionVisitor extends StatementVisitor {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Test {
|
|
||||||
void test() {
|
|
||||||
char c1 = 'c';
|
|
||||||
Character c2 = 'C';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -126,7 +126,7 @@ public class StatementVisitor extends ElementVisitor {
|
|||||||
) {
|
) {
|
||||||
final Expression end = expressionToExpression(((PsiBinaryExpression) condition).getROperand());
|
final Expression end = expressionToExpression(((PsiBinaryExpression) condition).getROperand());
|
||||||
final Expression endExpression = operationTokenType == JavaTokenType.LT ?
|
final Expression endExpression = operationTokenType == JavaTokenType.LT ?
|
||||||
new BinaryExpression(end, new IdentifierImpl("1"), "-"):
|
new BinaryExpression(end, new IdentifierImpl("1"), "-") :
|
||||||
end;
|
end;
|
||||||
myResult = new ForeachWithRangeStatement(
|
myResult = new ForeachWithRangeStatement(
|
||||||
new IdentifierImpl(firstChild.getName()),
|
new IdentifierImpl(firstChild.getName()),
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import junit.framework.Assert;
|
|||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.j2k.visitors.ClassVisitor;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -96,9 +97,16 @@ public class JavaToKotlinConverterTest extends LightDaemonAnalyzerTestCase {
|
|||||||
configureFromFileText("test.java", text);
|
configureFromFileText("test.java", text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void setClassIdentifiers() {
|
||||||
|
ClassVisitor c = new ClassVisitor();
|
||||||
|
myFile.accept(c);
|
||||||
|
Converter.setClassIdentifiers(c.getClassIdentifiers());
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static String fileToKotlin(String text) throws IOException {
|
private static String fileToKotlin(String text) throws IOException {
|
||||||
configureFromText(text);
|
configureFromText(text);
|
||||||
|
setClassIdentifiers();
|
||||||
return prettify(Converter.fileToFile((PsiJavaFile) myFile).toKotlin());
|
return prettify(Converter.fileToFile((PsiJavaFile) myFile).toKotlin());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,8 @@ abstract class TestCaseBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface NamedTestFactory {
|
public interface NamedTestFactory {
|
||||||
@NotNull Test createTest(@NotNull String dataPath, @NotNull String name);
|
@NotNull
|
||||||
|
Test createTest(@NotNull String dataPath, @NotNull String name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -59,8 +60,7 @@ abstract class TestCaseBuilder {
|
|||||||
return extensionFilter.accept(file, s) && filter.accept(file, s);
|
return extensionFilter.accept(file, s) && filter.accept(file, s);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
resultFilter = extensionFilter;
|
resultFilter = extensionFilter;
|
||||||
}
|
}
|
||||||
File dir = new File(baseDataDir + dataPath);
|
File dir = new File(baseDataDir + dataPath);
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package demo;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
Test() { }
|
||||||
|
Test(String s) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
class User {
|
||||||
|
void main() {
|
||||||
|
HashMap m = new HashMap(1);
|
||||||
|
HashMap m2 = new HashMap(10);
|
||||||
|
|
||||||
|
Test t1 = new Test();
|
||||||
|
Test t2 = new Test("");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
namespace demo
|
||||||
|
import java.util.HashMap
|
||||||
|
open class Test() {
|
||||||
|
class object {
|
||||||
|
open fun init() : Test {
|
||||||
|
val __ = Test()
|
||||||
|
return __
|
||||||
|
}
|
||||||
|
open fun init(s : String?) : Test {
|
||||||
|
val __ = Test()
|
||||||
|
return __
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open class User() {
|
||||||
|
open fun main() : Unit {
|
||||||
|
var m : HashMap<*, *>? = HashMap(1)
|
||||||
|
var m2 : HashMap<*, *>? = HashMap(10)
|
||||||
|
var t1 : Test? = Test.init()
|
||||||
|
var t2 : Test? = Test.init("")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package demo;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
void main() {
|
||||||
|
HashMap<String, Integer> commonMap = new HashMap<String, Integer>();
|
||||||
|
HashMap rawMap = new HashMap<String, Integer>();
|
||||||
|
HashMap superRawMap = new HashMap();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace demo
|
||||||
|
import java.util.HashMap
|
||||||
|
open class Test() {
|
||||||
|
open fun main() : Unit {
|
||||||
|
var commonMap : HashMap<String?, Int?>? = HashMap<String?, Int?>()
|
||||||
|
var rawMap : HashMap<*, *>? = HashMap<String?, Int?>()
|
||||||
|
var superRawMap : HashMap<*, *>? = HashMap()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user