This commit is contained in:
Sergey Ignatov
2011-11-16 18:42:20 +04:00
parent 60f7226bd5
commit 773bc1ced2
5 changed files with 46 additions and 34 deletions
+40 -27
View File
@@ -17,13 +17,14 @@ import java.util.*;
*/
public class Converter {
@NotNull
public static File fileToFile(PsiJavaFile javaFile) {
public static File fileToFile(@NotNull PsiJavaFile javaFile) {
final PsiImportList importList = javaFile.getImportList();
List<Import> imports = importList == null ? Collections.<Import>emptyList() : importsToImportList(importList.getAllImportStatements());
return new File(quoteKeywords(javaFile.getPackageName()), imports, classesToClassList(javaFile.getClasses()));
}
private static String quoteKeywords(String packageName) {
@NotNull
private static String quoteKeywords(@NotNull String packageName) {
List<String> result = new LinkedList<String>();
for (String part : packageName.split("\\."))
result.add(new IdentifierImpl(part).toKotlin());
@@ -31,13 +32,14 @@ public class Converter {
}
@NotNull
private static List<Class> classesToClassList(PsiClass[] classes) {
private static List<Class> classesToClassList(@NotNull PsiClass[] classes) {
List<Class> result = new LinkedList<Class>();
for (PsiClass t : classes) result.add(classToClass(t));
return result;
}
public static AnonymousClass anonymousClassToAnonymousClass(PsiAnonymousClass anonymousClass) {
@NotNull
public static AnonymousClass anonymousClassToAnonymousClass(@NotNull PsiAnonymousClass anonymousClass) {
// TODO: replace by Block, use class.getChild() method
return new AnonymousClass(
classesToClassList(anonymousClass.getAllInnerClasses()),
@@ -47,7 +49,8 @@ public class Converter {
);
}
private static List<Field> getFinalOrWithEmptyInitializer(List<? extends Field> fields) {
@NotNull
private static List<Field> getFinalOrWithEmptyInitializer(@NotNull List<? extends Field> fields) {
List<Field> result = new LinkedList<Field>();
for (Field f : fields)
if (f.isFinal() || f.getInitializer().toKotlin().isEmpty())
@@ -55,13 +58,15 @@ public class Converter {
return result;
}
private static List<Parameter> createParametersFromFields(List<? extends Field> fields) {
@NotNull
private static List<Parameter> createParametersFromFields(@NotNull List<? extends Field> fields) {
List<Parameter> result = new LinkedList<Parameter>();
for (Field f : fields) result.add(new Parameter(f.getIdentifier(), f.getType()));
return result;
}
private static List<Statement> createInitStatementsFromFields(List<? extends Field> fields) {
@NotNull
private static List<Statement> createInitStatementsFromFields(@NotNull List<? extends Field> fields) {
List<Statement> result = new LinkedList<Statement>();
for (Field f : fields) {
final String identifierToKotlin = f.getIdentifier().toKotlin();
@@ -70,7 +75,8 @@ public class Converter {
return result;
}
private static String createPrimaryConstructorInvocation(String s, List<? extends Field> fields, Map<String, String> initializers) {
@NotNull
private static String createPrimaryConstructorInvocation(@NotNull String s, @NotNull List<? extends Field> fields, @NotNull Map<String, String> initializers) {
List<String> result = new LinkedList<String>();
for (Field f : fields) {
final String id = f.getIdentifier().toKotlin();
@@ -79,7 +85,8 @@ public class Converter {
return s + "(" + AstUtil.join(result, ", ") + ")";
}
private static Class classToClass(PsiClass psiClass) {
@NotNull
private static Class classToClass(@NotNull PsiClass psiClass) {
final Set<String> modifiers = modifiersListToModifiersSet(psiClass.getModifierList());
final List<Class> innerClasses = classesToClassList(psiClass.getAllInnerClasses());
final List<Function> methods = methodsToFunctionList(psiClass.getMethods());
@@ -171,7 +178,7 @@ public class Converter {
}
@NotNull
private static List<Initializer> initializersToInitializerList(PsiClassInitializer[] initializers) {
private static List<Initializer> initializersToInitializerList(@NotNull PsiClassInitializer[] initializers) {
List<Initializer> result = new LinkedList<Initializer>();
for (PsiClassInitializer i : initializers) result.add(initializerToInitializer(i));
return result;
@@ -185,7 +192,8 @@ public class Converter {
);
}
private static String getDefaultInitializer(Field f) {
@NotNull
private static String getDefaultInitializer(@NotNull Field f) {
if (f.getType().isNullable())
return "null";
else {
@@ -202,7 +210,8 @@ public class Converter {
// private int ordinal() { ... }
// private String name() { ... }
// those methods any enum class inherits from java.lang.Enum
private static List<Field> fieldsToFieldListForEnums(PsiField[] fields) {
@NotNull
private static List<Field> fieldsToFieldListForEnums(@NotNull PsiField[] fields) {
List<Field> result = new LinkedList<Field>();
for (PsiField f : fields) {
if ((f.getName().equals("ordinal")
@@ -222,13 +231,15 @@ public class Converter {
return result;
}
private static List<Field> fieldsToFieldList(PsiField[] fields) {
@NotNull
private static List<Field> fieldsToFieldList(@NotNull PsiField[] fields) {
List<Field> result = new LinkedList<Field>();
for (PsiField f : fields) result.add(fieldToField(f));
return result;
}
private static Field fieldToField(PsiField field) {
@NotNull
private static Field fieldToField(@NotNull PsiField field) {
Set<String> modifiers = modifiersListToModifiersSet(field.getModifierList());
if (field instanceof PsiEnumConstant) // TODO: remove instanceof
return new EnumConstant(
@@ -246,14 +257,14 @@ public class Converter {
}
@NotNull
private static List<Function> methodsToFunctionList(PsiMethod[] methods) {
private static List<Function> methodsToFunctionList(@NotNull PsiMethod[] methods) {
List<Function> result = new LinkedList<Function>();
for (PsiMethod t : methods) result.add(methodToFunction(t, true));
return result;
}
@Nullable
private static PsiMethod getPrimaryConstructorForThisCase(PsiClass psiClass) {
private static PsiMethod getPrimaryConstructorForThisCase(@NotNull PsiClass psiClass) {
ThisVisitor tv = new ThisVisitor();
psiClass.accept(tv);
return tv.getPrimaryConstructor();
@@ -273,7 +284,8 @@ public class Converter {
return false;
}
private static List<Statement> removeEmpty(List<Statement> statements) {
@NotNull
private static List<Statement> removeEmpty(@NotNull List<Statement> statements) {
List<Statement> result = new LinkedList<Statement>();
for (Statement s : statements)
if (s != Statement.EMPTY_STATEMENT && s != Expression.EMPTY_EXPRESSION)
@@ -282,7 +294,7 @@ public class Converter {
}
@NotNull
private static Function methodToFunction(PsiMethod method, boolean notEmpty) {
private static Function methodToFunction(@NotNull PsiMethod method, boolean notEmpty) {
final IdentifierImpl identifier = new IdentifierImpl(method.getName());
final Type type = typeToType(method.getReturnType());
final Block body = blockToBlock(method.getBody(), notEmpty);
@@ -329,7 +341,7 @@ public class Converter {
}
@NotNull
public static List<Statement> statementsToStatementList(PsiStatement[] statements) {
public static List<Statement> statementsToStatementList(@NotNull PsiStatement[] statements) {
List<Statement> result = new LinkedList<Statement>();
for (PsiStatement t : statements) result.add(statementToStatement(t));
return result;
@@ -344,7 +356,7 @@ public class Converter {
}
@NotNull
public static List<Expression> expressionsToExpressionList(PsiExpression[] expressions) {
public static List<Expression> expressionsToExpressionList(@NotNull PsiExpression[] expressions) {
List<Expression> result = new LinkedList<Expression>();
for (PsiExpression e : expressions) result.add(expressionToExpression(e));
return result;
@@ -359,7 +371,7 @@ public class Converter {
}
@NotNull
public static Element elementToElement(PsiElement e) {
public static Element elementToElement(@Nullable PsiElement e) {
if (e == null) return Element.EMPTY_ELEMENT;
final ElementVisitor elementVisitor = new ElementVisitor();
e.accept(elementVisitor);
@@ -367,7 +379,7 @@ public class Converter {
}
@NotNull
public static List<Element> elementsToElementList(PsiElement[] elements) {
public static List<Element> elementsToElementList(@NotNull PsiElement[] elements) {
List<Element> result = new LinkedList<Element>();
for (PsiElement e : elements) result.add(elementToElement(e));
return result;
@@ -382,21 +394,21 @@ public class Converter {
}
@NotNull
public static List<Type> typesToTypeList(PsiType[] types) {
public static List<Type> typesToTypeList(@NotNull PsiType[] types) {
List<Type> result = new LinkedList<Type>();
for (PsiType t : types) result.add(typeToType(t));
return result;
}
@NotNull
private static List<Type> typesToNotNullableTypeList(PsiType[] types) {
private static List<Type> typesToNotNullableTypeList(@NotNull PsiType[] types) {
List<Type> result = new LinkedList<Type>(typesToTypeList(types));
for (Type p : result) p.convertToNotNull();
return result;
}
@NotNull
private static List<Import> importsToImportList(PsiImportStatementBase[] imports) {
private static List<Import> importsToImportList(@NotNull PsiImportStatementBase[] imports) {
List<Import> result = new LinkedList<Import>();
for (PsiImportStatementBase t : imports) result.add(importToImport(t));
return result;
@@ -411,14 +423,14 @@ public class Converter {
}
@NotNull
public static List<Parameter> parametersToParameterList(PsiParameter[] parameters) {
public static List<Parameter> parametersToParameterList(@NotNull PsiParameter[] parameters) {
List<Parameter> result = new LinkedList<Parameter>();
for (PsiParameter t : parameters) result.add(parameterToParameter(t));
return result;
}
@NotNull
public static Parameter parameterToParameter(PsiParameter parameter) {
public static Parameter parameterToParameter(@NotNull PsiParameter parameter) {
return new Parameter(
new IdentifierImpl(parameter.getName()), // TODO: remove
typeToType(parameter.getType())
@@ -431,6 +443,7 @@ public class Converter {
return new IdentifierImpl(identifier.getText());
}
@NotNull
public static Set<String> modifiersListToModifiersSet(PsiModifierList modifierList) {
HashSet<String> modifiersSet = new HashSet<String>();
if (modifierList != null) {
+2 -2
View File
@@ -18,12 +18,12 @@ public class Class extends Member {
String TYPE = "class";
final Identifier myName;
private final List<Expression> myBaseClassParams;
private List<Initializer> myInitializers;
private final List<Initializer> myInitializers;
private final List<Element> myTypeParameters;
private final List<Type> myExtendsTypes;
private final List<Type> myImplementsTypes;
final List<Class> myInnerClasses;
final List<Function> myMethods;
private final List<Function> myMethods;
final List<Field> myFields;
public Class(Identifier name, Set<String> modifiers, List<Element> typeParameters, List<Type> extendsTypes,
@@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull;
* @author ignatov
*/
public class ClassObjectAccessExpression extends Expression {
private Element myTypeElement;
private final Element myTypeElement;
public ClassObjectAccessExpression(Element typeElement) {
myTypeElement = typeElement;
@@ -8,7 +8,7 @@ import java.util.Set;
* @author ignatov
*/
public class Initializer extends Member {
private Block myBlock;
private final Block myBlock;
public Initializer(Block block, Set<String> modifiers) {
myBlock = block;
@@ -194,12 +194,11 @@ public class ExpressionVisitor extends StatementVisitor {
new ExpressionList(callExpression)
);
} else { // new Class(): common case
final PsiAnonymousClass anonymousClass = expression.getAnonymousClass();
myResult = new NewClassExpression(
elementToElement(expression.getClassOrAnonymousClassReference()),
elementToElement(expression.getArgumentList()),
expression.getAnonymousClass() != null ?
anonymousClassToAnonymousClass(expression.getAnonymousClass()) :
null
anonymousClass != null ? anonymousClassToAnonymousClass(anonymousClass) : null
);
// is constructor secondary
final PsiMethod constructor = expression.resolveMethod();