From 1479baa86828229c7135df81e0140b525284a9f9 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Tue, 13 Dec 2011 17:02:52 +0400 Subject: [PATCH] infer nullity --- src/org/jetbrains/jet/j2k/Converter.java | 16 ++++--- .../j2k/ast/ArrayInitializerExpression.java | 5 ++- src/org/jetbrains/jet/j2k/ast/Block.java | 1 + .../jetbrains/jet/j2k/ast/CaseContainer.java | 2 +- src/org/jetbrains/jet/j2k/ast/Class.java | 13 +++++- .../jetbrains/jet/j2k/ast/Constructor.java | 2 + .../jet/j2k/ast/DeclarationStatement.java | 3 +- src/org/jetbrains/jet/j2k/ast/Element.java | 1 + .../jetbrains/jet/j2k/ast/EnumConstant.java | 2 +- src/org/jetbrains/jet/j2k/ast/Expression.java | 1 + src/org/jetbrains/jet/j2k/ast/Field.java | 1 + src/org/jetbrains/jet/j2k/ast/Function.java | 1 + src/org/jetbrains/jet/j2k/ast/Identifier.java | 3 ++ .../jetbrains/jet/j2k/ast/IdentifierImpl.java | 1 + src/org/jetbrains/jet/j2k/ast/Member.java | 3 ++ src/org/jetbrains/jet/j2k/ast/Modifier.java | 12 ++++++ .../jet/j2k/ast/NewClassExpression.java | 1 + src/org/jetbrains/jet/j2k/ast/Node.java | 17 ++++++++ .../jet/j2k/ast/ReferenceElement.java | 2 + src/org/jetbrains/jet/j2k/ast/Statement.java | 1 + src/org/jetbrains/jet/j2k/ast/Type.java | 2 + src/org/jetbrains/jet/j2k/util/AstUtil.java | 21 +++++---- .../jet/j2k/visitors/ClassVisitor.java | 4 +- .../jet/j2k/visitors/ElementVisitor.java | 14 +++--- .../jet/j2k/visitors/ExpressionVisitor.java | 43 ++++++++++--------- .../jet/j2k/visitors/StatementVisitor.java | 39 +++++++++-------- .../jet/j2k/visitors/SuperVisitor.java | 7 ++- .../jet/j2k/visitors/ThisVisitor.java | 4 +- .../jet/j2k/visitors/TypeVisitor.java | 10 ++--- .../jet/j2k/JavaToKotlinConverterTest.java | 6 ++- .../jetbrains/jet/j2k/TestCaseBuilder.java | 8 ++-- 31 files changed, 166 insertions(+), 80 deletions(-) diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 2d714e28a7b..360c7cda192 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -18,6 +18,7 @@ import java.util.*; * @author ignatov */ public class Converter { + @NotNull private final static Set NOT_NULL_ANNOTATIONS = new HashSet() { { add("org.jetbrains.annotations.NotNull"); @@ -29,10 +30,11 @@ public class Converter { @NotNull private static final Dispatcher ourDispatcher = new Dispatcher(); @Nullable private static PsiType ourMethodReturnType = null; - public static void setClassIdentifiers(Set identifiers) { + public static void setClassIdentifiers(@NotNull Set identifiers) { ourClassIdentifiers = identifiers; } + @NotNull public static Set getClassIdentifiers() { return new HashSet(ourClassIdentifiers); } @@ -82,7 +84,8 @@ public class Converter { return new AnonymousClass(getMembers(anonymousClass)); } - private static List getMembers(PsiClass psiClass) { + @NotNull + private static List getMembers(@NotNull PsiClass psiClass) { List members = new LinkedList(); for (PsiElement e : psiClass.getChildren()) { if (e instanceof PsiMethod) members.add(methodToFunction((PsiMethod) e, true)); @@ -224,7 +227,7 @@ public class Converter { } @NotNull - private static Initializer initializerToInitializer(PsiClassInitializer i) { + private static Initializer initializerToInitializer(@NotNull PsiClassInitializer i) { return new Initializer( blockToBlock(i.getBody(), true), modifiersListToModifiersSet(i.getModifierList()) @@ -345,7 +348,7 @@ public class Converter { ); } - private static boolean isNotOpenMethod(final PsiMethod method) { + private static boolean isNotOpenMethod(@NotNull final PsiMethod method) { if (method.getParent() instanceof PsiClass) { final PsiModifierList parentModifierList = ((PsiClass) method.getParent()).getModifierList(); if ((parentModifierList != null && parentModifierList.hasExplicitModifier(Modifier.FINAL)) || ((PsiClass) method.getParent()).isEnum()) @@ -454,6 +457,7 @@ public class Converter { return result; } + @NotNull public static Type typeToType(PsiType type, boolean notNull) { Type result = typeToType(type); if (notNull) @@ -516,7 +520,7 @@ public class Converter { return false; } - private static boolean isReadOnly(PsiParameter parameter) { + private static boolean isReadOnly(@NotNull PsiParameter parameter) { for (PsiReference r : (ReferencesSearch.search(parameter))) { if (r instanceof PsiExpression && PsiUtil.isAccessedForWriting((PsiExpression) r)) { return false; @@ -532,7 +536,7 @@ public class Converter { } @NotNull - public static Set modifiersListToModifiersSet(PsiModifierList modifierList) { + public static Set modifiersListToModifiersSet(@Nullable PsiModifierList modifierList) { HashSet modifiersSet = new HashSet(); if (modifierList != null) { if (modifierList.hasExplicitModifier(PsiModifier.ABSTRACT)) modifiersSet.add(Modifier.ABSTRACT); diff --git a/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.java b/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.java index e3071dc87f1..a7ca9742535 100644 --- a/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.java +++ b/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.java @@ -25,7 +25,8 @@ public class ArrayInitializerExpression extends Expression { return AstUtil.lowerFirstCharacter(type.convertedToNotNull().toKotlin()); } - private static String innerTypeStr(final Type type) { + @NotNull + private static String innerTypeStr(@NotNull final Type type) { return type.convertedToNotNull().toKotlin().replace("Array", "").toLowerCase(); } @@ -38,7 +39,7 @@ public class ArrayInitializerExpression extends Expression { } @NotNull - private static String explicitConvertIfNeeded(final Type type, @NotNull final Expression i) { + private static String explicitConvertIfNeeded(@NotNull final Type type, @NotNull final Expression i) { Set doubleOrFloatTypes = new HashSet( Arrays.asList("double", "float", "java.lang.double", "java.lang.float") ); diff --git a/src/org/jetbrains/jet/j2k/ast/Block.java b/src/org/jetbrains/jet/j2k/ast/Block.java index 8d185070527..3e22f8fb775 100644 --- a/src/org/jetbrains/jet/j2k/ast/Block.java +++ b/src/org/jetbrains/jet/j2k/ast/Block.java @@ -10,6 +10,7 @@ import java.util.List; * @author ignatov */ public class Block extends Statement { + @NotNull public final static Block EMPTY_BLOCK = new Block(); private List myStatements; diff --git a/src/org/jetbrains/jet/j2k/ast/CaseContainer.java b/src/org/jetbrains/jet/j2k/ast/CaseContainer.java index ceef2f43ce9..bd2f65ddc1a 100644 --- a/src/org/jetbrains/jet/j2k/ast/CaseContainer.java +++ b/src/org/jetbrains/jet/j2k/ast/CaseContainer.java @@ -13,7 +13,7 @@ public class CaseContainer extends Statement { private List myCaseStatement; private Block myBlock; - public CaseContainer(final List caseStatement, final List statements) { + public CaseContainer(final List caseStatement, @NotNull final List statements) { myCaseStatement = caseStatement; List newStatements = new LinkedList(); for (Statement s : statements) diff --git a/src/org/jetbrains/jet/j2k/ast/Class.java b/src/org/jetbrains/jet/j2k/ast/Class.java index 98c6680998f..c00c63a32e3 100644 --- a/src/org/jetbrains/jet/j2k/ast/Class.java +++ b/src/org/jetbrains/jet/j2k/ast/Class.java @@ -15,6 +15,7 @@ import static org.jetbrains.jet.j2k.util.AstUtil.*; * @author ignatov */ public class Class extends Member { + @NotNull String TYPE = "class"; final Identifier myName; private final List myBaseClassParams; @@ -65,6 +66,7 @@ public class Class extends Member { return false; } + @NotNull String typeParameterWhereToKotlin() { if (hasWhere()) { List wheres = new LinkedList(); @@ -118,6 +120,7 @@ public class Class extends Member { return result; } + @NotNull String typeParametersToKotlin() { return myTypeParameters.size() > 0 ? "<" + AstUtil.joinNodes(myTypeParameters, COMMA_WITH_SPACE) + ">" : EMPTY; } @@ -131,6 +134,7 @@ public class Class extends Member { return nodesToKotlin(myExtendsTypes); } + @NotNull String implementTypesToKotlin() { List allTypes = new LinkedList() { { @@ -141,6 +145,7 @@ public class Class extends Member { return allTypes.size() == 0 ? EMPTY : SPACE + COLON + SPACE + join(allTypes, COMMA_WITH_SPACE); } + @NotNull String modifiersToKotlin() { List modifierList = new LinkedList(); @@ -166,6 +171,7 @@ public class Class extends Member { return isAbstract(); } + @NotNull String bodyToKotlin() { return SPACE + "{" + N + primaryConstructorBodyToKotlin() + N + @@ -174,7 +180,8 @@ public class Class extends Member { "}"; } - private static List getStatic(List members) { + @NotNull + private static List getStatic(@NotNull List members) { List result = new LinkedList(); for (Member m : members) if (m.isStatic()) @@ -182,7 +189,8 @@ public class Class extends Member { return result; } - private static List getNonStatic(List members) { + @NotNull + private static List getNonStatic(@NotNull List members) { List result = new LinkedList(); for (Member m : members) if (!m.isStatic()) @@ -190,6 +198,7 @@ public class Class extends Member { return result; } + @NotNull private String classObjectToKotlin() { final List staticMembers = new LinkedList(secondaryConstructorsAsStaticInitFunction()); staticMembers.addAll(getStatic(membersExceptConstructors())); diff --git a/src/org/jetbrains/jet/j2k/ast/Constructor.java b/src/org/jetbrains/jet/j2k/ast/Constructor.java index 9fe6b498696..758928b7295 100644 --- a/src/org/jetbrains/jet/j2k/ast/Constructor.java +++ b/src/org/jetbrains/jet/j2k/ast/Constructor.java @@ -16,10 +16,12 @@ public class Constructor extends Function { myIsPrimary = isPrimary; } + @NotNull public String primarySignatureToKotlin() { return "(" + myParams.toKotlin() + ")"; } + @NotNull public String primaryBodyToKotlin() { return myBlock.toKotlin(); } diff --git a/src/org/jetbrains/jet/j2k/ast/DeclarationStatement.java b/src/org/jetbrains/jet/j2k/ast/DeclarationStatement.java index 756153ac13d..d9bbcb5f7d8 100644 --- a/src/org/jetbrains/jet/j2k/ast/DeclarationStatement.java +++ b/src/org/jetbrains/jet/j2k/ast/DeclarationStatement.java @@ -16,7 +16,8 @@ public class DeclarationStatement extends Statement { myElements = elements; } - private static List toStringList(List elements) { + @NotNull + private static List toStringList(@NotNull List elements) { List result = new LinkedList(); for (Element e : elements) { if (e instanceof LocalVariable) { diff --git a/src/org/jetbrains/jet/j2k/ast/Element.java b/src/org/jetbrains/jet/j2k/ast/Element.java index 16683fbdca3..56bf2c4daa5 100644 --- a/src/org/jetbrains/jet/j2k/ast/Element.java +++ b/src/org/jetbrains/jet/j2k/ast/Element.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; * @author ignatov */ public abstract class Element extends Node { + @NotNull public static final Element EMPTY_ELEMENT = new EmptyElement(); public boolean isEmpty() { diff --git a/src/org/jetbrains/jet/j2k/ast/EnumConstant.java b/src/org/jetbrains/jet/j2k/ast/EnumConstant.java index d83b2e5c85b..d80ffd3b1eb 100644 --- a/src/org/jetbrains/jet/j2k/ast/EnumConstant.java +++ b/src/org/jetbrains/jet/j2k/ast/EnumConstant.java @@ -8,7 +8,7 @@ import java.util.Set; * @author ignatov */ public class EnumConstant extends Field { - public EnumConstant(Identifier identifier, Set modifiers, Type type, Element params) { + public EnumConstant(Identifier identifier, Set modifiers, @NotNull Type type, Element params) { super(identifier, modifiers, type.convertedToNotNull(), params); } diff --git a/src/org/jetbrains/jet/j2k/ast/Expression.java b/src/org/jetbrains/jet/j2k/ast/Expression.java index 7b2528b6232..d3a98436c8b 100644 --- a/src/org/jetbrains/jet/j2k/ast/Expression.java +++ b/src/org/jetbrains/jet/j2k/ast/Expression.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; * @author ignatov */ public abstract class Expression extends Statement { + @NotNull public static final Expression EMPTY_EXPRESSION = new EmptyExpression(); /** diff --git a/src/org/jetbrains/jet/j2k/ast/Field.java b/src/org/jetbrains/jet/j2k/ast/Field.java index 94fa1596b56..8c2bbde5b94 100644 --- a/src/org/jetbrains/jet/j2k/ast/Field.java +++ b/src/org/jetbrains/jet/j2k/ast/Field.java @@ -36,6 +36,7 @@ public class Field extends Member { return myType; } + @NotNull String modifiersToKotlin() { List modifierList = new LinkedList(); diff --git a/src/org/jetbrains/jet/j2k/ast/Function.java b/src/org/jetbrains/jet/j2k/ast/Function.java index 36545c0948b..91c1b9132a4 100644 --- a/src/org/jetbrains/jet/j2k/ast/Function.java +++ b/src/org/jetbrains/jet/j2k/ast/Function.java @@ -44,6 +44,7 @@ public class Function extends Member { return myBlock; } + @NotNull private String typeParametersToKotlin() { return myTypeParameters.size() > 0 ? "<" + AstUtil.joinNodes(myTypeParameters, COMMA_WITH_SPACE) + ">" : EMPTY; } diff --git a/src/org/jetbrains/jet/j2k/ast/Identifier.java b/src/org/jetbrains/jet/j2k/ast/Identifier.java index 85b5ae1332f..e1b095fb240 100644 --- a/src/org/jetbrains/jet/j2k/ast/Identifier.java +++ b/src/org/jetbrains/jet/j2k/ast/Identifier.java @@ -1,9 +1,12 @@ package org.jetbrains.jet.j2k.ast; +import org.jetbrains.annotations.NotNull; + /** * @author ignatov */ public interface Identifier extends INode { + @NotNull public static Identifier EMPTY_IDENTIFIER = new IdentifierImpl(""); public boolean isEmpty(); diff --git a/src/org/jetbrains/jet/j2k/ast/IdentifierImpl.java b/src/org/jetbrains/jet/j2k/ast/IdentifierImpl.java index 98e94522b1d..8d01bcdf8a7 100644 --- a/src/org/jetbrains/jet/j2k/ast/IdentifierImpl.java +++ b/src/org/jetbrains/jet/j2k/ast/IdentifierImpl.java @@ -36,6 +36,7 @@ public class IdentifierImpl extends Expression implements Identifier { return myName.length() == 0; } + @NotNull private static String quote(String str) { return BACKTICK + str + BACKTICK; } diff --git a/src/org/jetbrains/jet/j2k/ast/Member.java b/src/org/jetbrains/jet/j2k/ast/Member.java index e0fff02e4c3..ade895c672c 100644 --- a/src/org/jetbrains/jet/j2k/ast/Member.java +++ b/src/org/jetbrains/jet/j2k/ast/Member.java @@ -1,5 +1,7 @@ package org.jetbrains.jet.j2k.ast; +import org.jetbrains.annotations.NotNull; + import java.util.Set; /** @@ -8,6 +10,7 @@ import java.util.Set; public abstract class Member extends Node implements IMember { Set myModifiers; + @NotNull String accessModifier() { for (String m : myModifiers) if (m.equals(Modifier.PUBLIC) || m.equals(Modifier.PROTECTED) || m.equals(Modifier.PRIVATE)) diff --git a/src/org/jetbrains/jet/j2k/ast/Modifier.java b/src/org/jetbrains/jet/j2k/ast/Modifier.java index 92920946ae2..8329fcbc02a 100644 --- a/src/org/jetbrains/jet/j2k/ast/Modifier.java +++ b/src/org/jetbrains/jet/j2k/ast/Modifier.java @@ -1,17 +1,29 @@ package org.jetbrains.jet.j2k.ast; +import org.jetbrains.annotations.NotNull; + /** * @author ignatov */ public abstract class Modifier { + @NotNull public static final String PUBLIC = "public"; + @NotNull public static final String PROTECTED = "protected"; + @NotNull public static final String PRIVATE = "private"; + @NotNull public static final String INTERNAL = "internal"; + @NotNull public static final String STATIC = "static"; + @NotNull public static final String ABSTRACT = "abstract"; + @NotNull public static final String FINAL = "final"; + @NotNull public static final String OPEN = "open"; + @NotNull public static final String NOT_OPEN = "not open"; + @NotNull public static final String OVERRIDE = "override"; } diff --git a/src/org/jetbrains/jet/j2k/ast/NewClassExpression.java b/src/org/jetbrains/jet/j2k/ast/NewClassExpression.java index 87a5a512b27..24389f2401a 100644 --- a/src/org/jetbrains/jet/j2k/ast/NewClassExpression.java +++ b/src/org/jetbrains/jet/j2k/ast/NewClassExpression.java @@ -14,6 +14,7 @@ public class NewClassExpression extends Expression { private final List myArguments; private Expression myQualifier; private List myConversions; + @Nullable private AnonymousClass myAnonymousClass = null; public NewClassExpression(Element name, List arguments) { diff --git a/src/org/jetbrains/jet/j2k/ast/Node.java b/src/org/jetbrains/jet/j2k/ast/Node.java index 80a6b85b4a4..3d3b934e603 100644 --- a/src/org/jetbrains/jet/j2k/ast/Node.java +++ b/src/org/jetbrains/jet/j2k/ast/Node.java @@ -16,28 +16,45 @@ public abstract class Node implements INode { return Kind.UNDEFINED; } + @NotNull final static Set ONLY_KOTLIN_KEYWORDS = new HashSet(Arrays.asList( "namespace", "as", "type", "val", "var", "fun", "is", "in", "object", "when", "trait", "This" )); + @NotNull public final static Set PRIMITIVE_TYPES = new HashSet(Arrays.asList( "double", "float", "long", "int", "short", "byte", "boolean", "char" )); static final String N = System.getProperty("line.separator"); + @NotNull static final String N2 = N + N; + @NotNull static final String SPACE = " "; + @NotNull static final String EQUAL = "="; + @NotNull static final String EMPTY = ""; + @NotNull static final String DOT = "."; + @NotNull static final String QUESTDOT = "?."; + @NotNull static final String COLON = ":"; + @NotNull static final String IN = "in"; + @NotNull static final String AT = "@"; + @NotNull static final String DOLLAR = "$"; + @NotNull static final String BACKTICK = "`"; + @NotNull static final String QUEST = "?"; + @NotNull static final String COMMA_WITH_SPACE = "," + SPACE; + @NotNull static final String STAR = "*"; + @NotNull public static final String ZERO = "0"; } \ No newline at end of file diff --git a/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java b/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java index c557edf4065..4be89b2db69 100644 --- a/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java +++ b/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java @@ -9,7 +9,9 @@ import java.util.List; * @author ignatov */ public class ReferenceElement extends Element { + @NotNull private final Identifier myReference; + @NotNull private final List myTypes; public ReferenceElement(@NotNull Identifier reference, @NotNull List types) { diff --git a/src/org/jetbrains/jet/j2k/ast/Statement.java b/src/org/jetbrains/jet/j2k/ast/Statement.java index 1be7eaf810b..b96d026c086 100644 --- a/src/org/jetbrains/jet/j2k/ast/Statement.java +++ b/src/org/jetbrains/jet/j2k/ast/Statement.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; * @author ignatov */ public abstract class Statement extends Element { + @NotNull public static final Statement EMPTY_STATEMENT = new EmptyStatement(); /** diff --git a/src/org/jetbrains/jet/j2k/ast/Type.java b/src/org/jetbrains/jet/j2k/ast/Type.java index 901a7b52fd5..d0182cbb633 100644 --- a/src/org/jetbrains/jet/j2k/ast/Type.java +++ b/src/org/jetbrains/jet/j2k/ast/Type.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; * @author ignatov */ public abstract class Type extends Element { + @NotNull public static final Type EMPTY_TYPE = new EmptyType(); boolean myNullable = true; @@ -15,6 +16,7 @@ public abstract class Type extends Element { return Kind.TYPE; } + @NotNull public Type convertedToNotNull() { myNullable = false; return this; diff --git a/src/org/jetbrains/jet/j2k/util/AstUtil.java b/src/org/jetbrains/jet/j2k/util/AstUtil.java index 047c96ce8f9..21c991ad932 100644 --- a/src/org/jetbrains/jet/j2k/util/AstUtil.java +++ b/src/org/jetbrains/jet/j2k/util/AstUtil.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.j2k.util; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.j2k.ast.Expression; import org.jetbrains.jet.j2k.ast.INode; @@ -15,7 +16,7 @@ public class AstUtil { private AstUtil() { } - private static String join(final String[] array, final String delimiter) { + private static String join(@NotNull final String[] array, @Nullable final String delimiter) { StringBuilder buffer = new StringBuilder(); boolean haveDelimiter = (delimiter != null); @@ -29,30 +30,34 @@ public class AstUtil { return buffer.toString(); } - public static String joinNodes(final List nodes, final String delimiter) { + public static String joinNodes(@NotNull final List nodes, final String delimiter) { return join(nodesToKotlin(nodes), delimiter); } - public static String join(final List array, final String delimiter) { + public static String join(@NotNull final List array, final String delimiter) { return join(array.toArray(new String[array.size()]), delimiter); } - public static List nodesToKotlin(List nodes) { + @NotNull + public static List nodesToKotlin(@NotNull List nodes) { List result = new LinkedList(); for (INode n : nodes) result.add(n.toKotlin()); return result; } - public static String upperFirstCharacter(String string) { + @NotNull + public static String upperFirstCharacter(@NotNull String string) { return string.substring(0, 1).toUpperCase() + string.substring(1); } - public static String lowerFirstCharacter(String string) { + @NotNull + public static String lowerFirstCharacter(@NotNull String string) { return string.substring(0, 1).toLowerCase() + string.substring(1); } - public static List createListWithEmptyString(final List arguments) { + @NotNull + public static List createListWithEmptyString(@NotNull final List arguments) { final List conversions = new LinkedList(); //noinspection UnusedDeclaration for (Expression argument : arguments) conversions.add(""); @@ -77,7 +82,7 @@ public class AstUtil { return "(" + f + ")" + s; } - public static T getOrElse(Map map, T e, T orElse) { + public static T getOrElse(@NotNull Map map, T e, T orElse) { if (map.containsKey(e)) return map.get(e); return orElse; diff --git a/src/org/jetbrains/jet/j2k/visitors/ClassVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ClassVisitor.java index 8cafaf36719..edd75c6e790 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ClassVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ClassVisitor.java @@ -2,6 +2,7 @@ package org.jetbrains.jet.j2k.visitors; import com.intellij.psi.JavaRecursiveElementVisitor; import com.intellij.psi.PsiClass; +import org.jetbrains.annotations.NotNull; import java.util.HashSet; import java.util.Set; @@ -16,12 +17,13 @@ public class ClassVisitor extends JavaRecursiveElementVisitor { myClassIdentifiers = new HashSet(); } + @NotNull public Set getClassIdentifiers() { return new HashSet(myClassIdentifiers); } @Override - public void visitClass(PsiClass aClass) { + public void visitClass(@NotNull PsiClass aClass) { myClassIdentifiers.add(aClass.getQualifiedName()); super.visitClass(aClass); } diff --git a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java index f18a5f03d43..4a39cf57ca5 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java @@ -2,6 +2,7 @@ package org.jetbrains.jet.j2k.visitors; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.j2k.Converter; import org.jetbrains.jet.j2k.ast.*; @@ -13,6 +14,7 @@ import static org.jetbrains.jet.j2k.Converter.*; * @author ignatov */ public class ElementVisitor extends JavaElementVisitor { + @Nullable private Element myResult = Element.EMPTY_ELEMENT; @NotNull @@ -21,7 +23,7 @@ public class ElementVisitor extends JavaElementVisitor { } @Override - public void visitLocalVariable(PsiLocalVariable variable) { + public void visitLocalVariable(@NotNull PsiLocalVariable variable) { super.visitLocalVariable(variable); myResult = new LocalVariable( @@ -33,7 +35,7 @@ public class ElementVisitor extends JavaElementVisitor { } @Override - public void visitExpressionList(PsiExpressionList list) { + public void visitExpressionList(@NotNull PsiExpressionList list) { super.visitExpressionList(list); myResult = new ExpressionList( expressionsToExpressionList(list.getExpressions()), @@ -42,7 +44,7 @@ public class ElementVisitor extends JavaElementVisitor { } @Override - public void visitReferenceElement(PsiJavaCodeReferenceElement reference) { + public void visitReferenceElement(@NotNull PsiJavaCodeReferenceElement reference) { super.visitReferenceElement(reference); final List types = typesToTypeList(reference.getTypeParameters()); @@ -67,13 +69,13 @@ public class ElementVisitor extends JavaElementVisitor { } @Override - public void visitTypeElement(PsiTypeElement type) { + public void visitTypeElement(@NotNull PsiTypeElement type) { super.visitTypeElement(type); myResult = new TypeElement(typeToType(type.getType())); } @Override - public void visitTypeParameter(PsiTypeParameter classParameter) { + public void visitTypeParameter(@NotNull PsiTypeParameter classParameter) { super.visitTypeParameter(classParameter); myResult = new TypeParameter( new IdentifierImpl(classParameter.getName()), // TODO @@ -82,7 +84,7 @@ public class ElementVisitor extends JavaElementVisitor { } @Override - public void visitParameterList(PsiParameterList list) { + public void visitParameterList(@NotNull PsiParameterList list) { super.visitParameterList(list); myResult = new ParameterList( parametersToParameterList(list.getParameters()) diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index deffc512a96..3cd110aa04c 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -16,6 +16,7 @@ import static org.jetbrains.jet.j2k.Converter.*; * @author ignatov */ public class ExpressionVisitor extends StatementVisitor { + @Nullable Expression myResult = Expression.EMPTY_EXPRESSION; @Override @@ -30,7 +31,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitArrayAccessExpression(PsiArrayAccessExpression expression) { + public void visitArrayAccessExpression(@NotNull PsiArrayAccessExpression expression) { super.visitArrayAccessExpression(expression); myResult = new ArrayAccessExpression( expressionToExpression(expression.getArrayExpression()), @@ -39,7 +40,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitArrayInitializerExpression(PsiArrayInitializerExpression expression) { + public void visitArrayInitializerExpression(@NotNull PsiArrayInitializerExpression expression) { super.visitArrayInitializerExpression(expression); myResult = new ArrayInitializerExpression( typeToType(expression.getType()), @@ -48,7 +49,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitAssignmentExpression(PsiAssignmentExpression expression) { + public void visitAssignmentExpression(@NotNull PsiAssignmentExpression expression) { super.visitAssignmentExpression(expression); // TODO: simplify @@ -111,7 +112,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitBinaryExpression(PsiBinaryExpression expression) { + public void visitBinaryExpression(@NotNull PsiBinaryExpression expression) { super.visitBinaryExpression(expression); if (expression.getOperationSign().getTokenType() == JavaTokenType.GTGTGT) @@ -129,13 +130,13 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitClassObjectAccessExpression(PsiClassObjectAccessExpression expression) { + public void visitClassObjectAccessExpression(@NotNull PsiClassObjectAccessExpression expression) { super.visitClassObjectAccessExpression(expression); myResult = new ClassObjectAccessExpression(elementToElement(expression.getOperand())); } @Override - public void visitConditionalExpression(PsiConditionalExpression expression) { + public void visitConditionalExpression(@NotNull PsiConditionalExpression expression) { super.visitConditionalExpression(expression); myResult = new ParenthesizedExpression( new IfStatement( @@ -147,13 +148,13 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitExpressionList(PsiExpressionList list) { + public void visitExpressionList(@NotNull PsiExpressionList list) { super.visitExpressionList(list); myResult = new ExpressionList(expressionsToExpressionList(list.getExpressions())); } @Override - public void visitInstanceOfExpression(PsiInstanceOfExpression expression) { + public void visitInstanceOfExpression(@NotNull PsiInstanceOfExpression expression) { super.visitInstanceOfExpression(expression); myResult = new IsOperator( expressionToExpression(expression.getOperand()), @@ -161,7 +162,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitLiteralExpression(PsiLiteralExpression expression) { + public void visitLiteralExpression(@NotNull PsiLiteralExpression expression) { super.visitLiteralExpression(expression); final Object value = expression.getValue(); @@ -286,7 +287,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitNewExpression(PsiNewExpression expression) { + public void visitNewExpression(@NotNull PsiNewExpression expression) { super.visitNewExpression(expression); if (expression.getArrayInitializer() != null) // new Foo[] {} @@ -343,7 +344,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitParenthesizedExpression(PsiParenthesizedExpression expression) { + public void visitParenthesizedExpression(@NotNull PsiParenthesizedExpression expression) { super.visitParenthesizedExpression(expression); myResult = new ParenthesizedExpression( expressionToExpression(expression.getExpression()) @@ -351,7 +352,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitPostfixExpression(PsiPostfixExpression expression) { + public void visitPostfixExpression(@NotNull PsiPostfixExpression expression) { super.visitPostfixExpression(expression); myResult = new PostfixOperator( getOperatorString(expression.getOperationSign().getTokenType()), @@ -360,7 +361,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitPrefixExpression(PsiPrefixExpression expression) { + public void visitPrefixExpression(@NotNull PsiPrefixExpression expression) { super.visitPrefixExpression(expression); if (expression.getOperationTokenType() == JavaTokenType.TILDE) myResult = new DummyMethodCallExpression( @@ -374,7 +375,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitReferenceExpression(PsiReferenceExpression expression) { + public void visitReferenceExpression(@NotNull PsiReferenceExpression expression) { super.visitReferenceExpression(expression); final boolean isFieldReference = isFieldReference(expression, getContainingClass(expression)); @@ -448,7 +449,7 @@ public class ExpressionVisitor extends StatementVisitor { return false; } - private static boolean isInsideSecondaryConstructor(PsiReferenceExpression expression) { + private static boolean isInsideSecondaryConstructor(@NotNull PsiReferenceExpression expression) { PsiElement context = expression.getContext(); while (context != null) { if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor()) @@ -458,7 +459,7 @@ public class ExpressionVisitor extends StatementVisitor { return false; } - private static boolean isInsidePrimaryConstructor(PsiExpression expression) { + private static boolean isInsidePrimaryConstructor(@NotNull PsiExpression expression) { PsiElement context = expression.getContext(); while (context != null) { if (context instanceof PsiMethod && ((PsiMethod) context).isConstructor()) @@ -479,7 +480,7 @@ public class ExpressionVisitor extends StatementVisitor { return null; } - private static boolean isThisExpression(PsiReferenceExpression expression) { + private static boolean isThisExpression(@NotNull PsiReferenceExpression expression) { for (PsiReference r : expression.getReferences()) if (r.getCanonicalText().equals("this")) { final PsiElement res = r.resolve(); @@ -490,7 +491,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitSuperExpression(PsiSuperExpression expression) { + public void visitSuperExpression(@NotNull PsiSuperExpression expression) { super.visitSuperExpression(expression); final PsiJavaCodeReferenceElement qualifier = expression.getQualifier(); myResult = new SuperExpression( @@ -501,7 +502,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitThisExpression(PsiThisExpression expression) { + public void visitThisExpression(@NotNull PsiThisExpression expression) { super.visitThisExpression(expression); final PsiJavaCodeReferenceElement qualifier = expression.getQualifier(); myResult = new ThisExpression( @@ -512,7 +513,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitTypeCastExpression(PsiTypeCastExpression expression) { + public void visitTypeCastExpression(@NotNull PsiTypeCastExpression expression) { super.visitTypeCastExpression(expression); final PsiTypeElement castType = expression.getCastType(); @@ -525,7 +526,7 @@ public class ExpressionVisitor extends StatementVisitor { } @Override - public void visitPolyadicExpression(PsiPolyadicExpression expression) { + public void visitPolyadicExpression(@NotNull PsiPolyadicExpression expression) { super.visitPolyadicExpression(expression); myResult = new PolyadicExpression( expressionsToExpressionList(expression.getOperands()), diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index d97185146e8..07b4689822c 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -31,7 +31,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitAssertStatement(PsiAssertStatement statement) { + public void visitAssertStatement(@NotNull PsiAssertStatement statement) { super.visitAssertStatement(statement); myResult = new AssertStatement( expressionToExpression(statement.getAssertCondition()), @@ -40,7 +40,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitBlockStatement(PsiBlockStatement statement) { + public void visitBlockStatement(@NotNull PsiBlockStatement statement) { super.visitBlockStatement(statement); myResult = new Block( statementsToStatementList(statement.getCodeBlock().getStatements()), @@ -49,7 +49,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitBreakStatement(PsiBreakStatement statement) { + public void visitBreakStatement(@NotNull PsiBreakStatement statement) { super.visitBreakStatement(statement); if (statement.getLabelIdentifier() == null) myResult = new BreakStatement(); @@ -60,7 +60,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitContinueStatement(PsiContinueStatement statement) { + public void visitContinueStatement(@NotNull PsiContinueStatement statement) { super.visitContinueStatement(statement); if (statement.getLabelIdentifier() == null) myResult = new ContinueStatement(); @@ -71,7 +71,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitDeclarationStatement(PsiDeclarationStatement statement) { + public void visitDeclarationStatement(@NotNull PsiDeclarationStatement statement) { super.visitDeclarationStatement(statement); myResult = new DeclarationStatement( elementsToElementList(statement.getDeclaredElements()) @@ -79,7 +79,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitDoWhileStatement(PsiDoWhileStatement statement) { + public void visitDoWhileStatement(@NotNull PsiDoWhileStatement statement) { super.visitDoWhileStatement(statement); myResult = new DoWhileStatement( expressionToExpression(statement.getCondition()), @@ -88,13 +88,13 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitExpressionStatement(PsiExpressionStatement statement) { + public void visitExpressionStatement(@NotNull PsiExpressionStatement statement) { super.visitExpressionStatement(statement); myResult = expressionToExpression(statement.getExpression()); } @Override - public void visitExpressionListStatement(PsiExpressionListStatement statement) { + public void visitExpressionListStatement(@NotNull PsiExpressionListStatement statement) { super.visitExpressionListStatement(statement); myResult = new ExpressionListStatement(expressionsToExpressionList(statement.getExpressionList().getExpressions())); @@ -151,7 +151,7 @@ public class StatementVisitor extends ElementVisitor { } } - private static boolean isOnceWritableIterator(PsiLocalVariable firstChild) { + private static boolean isOnceWritableIterator(@Nullable PsiLocalVariable firstChild) { int counter = 0; if (firstChild != null) for (PsiReference r : (ReferencesSearch.search(firstChild))) { @@ -164,7 +164,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitForeachStatement(PsiForeachStatement statement) { + public void visitForeachStatement(@NotNull PsiForeachStatement statement) { super.visitForeachStatement(statement); myResult = new ForeachStatement( parameterToParameter(statement.getIterationParameter()), @@ -174,7 +174,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitIfStatement(PsiIfStatement statement) { + public void visitIfStatement(@NotNull PsiIfStatement statement) { super.visitIfStatement(statement); myResult = new IfStatement( expressionToExpression(statement.getCondition()), @@ -184,7 +184,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitLabeledStatement(PsiLabeledStatement statement) { + public void visitLabeledStatement(@NotNull PsiLabeledStatement statement) { super.visitLabeledStatement(statement); myResult = new LabelStatement( identifierToIdentifier(statement.getLabelIdentifier()), @@ -193,7 +193,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitSwitchLabelStatement(PsiSwitchLabelStatement statement) { + public void visitSwitchLabelStatement(@NotNull PsiSwitchLabelStatement statement) { super.visitSwitchLabelStatement(statement); myResult = statement.isDefaultCase() ? new DefaultSwitchLabelStatement() : @@ -201,7 +201,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitSwitchStatement(PsiSwitchStatement statement) { + public void visitSwitchStatement(@NotNull PsiSwitchStatement statement) { super.visitSwitchStatement(statement); myResult = new SwitchContainer( expressionToExpression(statement.getExpression()), @@ -253,6 +253,7 @@ public class StatementVisitor extends ElementVisitor { return false; } + @NotNull private static List getAllToNextBreak(@NotNull final List allStatements, final int start) { List result = new LinkedList(); for (int i = start; i < allStatements.size(); i++) { @@ -288,7 +289,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitSynchronizedStatement(PsiSynchronizedStatement statement) { + public void visitSynchronizedStatement(@NotNull PsiSynchronizedStatement statement) { super.visitSynchronizedStatement(statement); myResult = new SynchronizedStatement( expressionToExpression(statement.getLockExpression()), @@ -297,7 +298,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitThrowStatement(PsiThrowStatement statement) { + public void visitThrowStatement(@NotNull PsiThrowStatement statement) { super.visitThrowStatement(statement); myResult = new ThrowStatement( expressionToExpression(statement.getException()) @@ -305,7 +306,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitTryStatement(PsiTryStatement statement) { + public void visitTryStatement(@NotNull PsiTryStatement statement) { super.visitTryStatement(statement); List catches = new LinkedList(); @@ -324,7 +325,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitWhileStatement(PsiWhileStatement statement) { + public void visitWhileStatement(@NotNull PsiWhileStatement statement) { super.visitWhileStatement(statement); myResult = new WhileStatement( expressionToExpression(statement.getCondition()), @@ -333,7 +334,7 @@ public class StatementVisitor extends ElementVisitor { } @Override - public void visitReturnStatement(PsiReturnStatement statement) { + public void visitReturnStatement(@NotNull PsiReturnStatement statement) { super.visitReturnStatement(statement); PsiExpression returnValue = statement.getReturnValue(); String conversion = ""; diff --git a/src/org/jetbrains/jet/j2k/visitors/SuperVisitor.java b/src/org/jetbrains/jet/j2k/visitors/SuperVisitor.java index 16fcf409892..c7a8e7bc42a 100644 --- a/src/org/jetbrains/jet/j2k/visitors/SuperVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/SuperVisitor.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.j2k.visitors; import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; import java.util.HashSet; @@ -9,24 +10,26 @@ import java.util.HashSet; * @author ignatov */ public class SuperVisitor extends JavaRecursiveElementVisitor { + @NotNull private final HashSet myResolvedSuperCallParameters; public SuperVisitor() { myResolvedSuperCallParameters = new HashSet(); } + @NotNull public HashSet getResolvedSuperCallParameters() { return myResolvedSuperCallParameters; } @Override - public void visitMethodCallExpression(PsiMethodCallExpression expression) { + public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) { super.visitMethodCallExpression(expression); if (isSuper(expression.getMethodExpression())) myResolvedSuperCallParameters.add(expression.getArgumentList()); } - static boolean isSuper(PsiReference r) { + static boolean isSuper(@NotNull PsiReference r) { if (r.getCanonicalText().equals("super")) { final PsiElement baseConstructor = r.resolve(); if (baseConstructor != null && baseConstructor instanceof PsiMethod && ((PsiMethod) baseConstructor).isConstructor()) { diff --git a/src/org/jetbrains/jet/j2k/visitors/ThisVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ThisVisitor.java index 98fff4ecca2..c077ced52b5 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ThisVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ThisVisitor.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.j2k.visitors; import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashSet; @@ -9,10 +10,11 @@ import java.util.HashSet; * @author ignatov */ public class ThisVisitor extends JavaRecursiveElementVisitor { + @NotNull private final HashSet myResolvedConstructors = new HashSet(); @Override - public void visitReferenceExpression(PsiReferenceExpression expression) { + public void visitReferenceExpression(@NotNull PsiReferenceExpression expression) { for (PsiReference r : expression.getReferences()) if (r.getCanonicalText().equals("this")) { final PsiElement res = r.resolve(); diff --git a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java index 7be5bc4b804..a24aa109cef 100644 --- a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java @@ -25,7 +25,7 @@ public class TypeVisitor extends PsiTypeVisitor { } @Override - public Type visitPrimitiveType(PsiPrimitiveType primitiveType) { + public Type visitPrimitiveType(@NotNull PsiPrimitiveType primitiveType) { final String name = primitiveType.getCanonicalText(); final IdentifierImpl identifier = new IdentifierImpl(name); @@ -39,14 +39,14 @@ public class TypeVisitor extends PsiTypeVisitor { } @Override - public Type visitArrayType(PsiArrayType arrayType) { + public Type visitArrayType(@NotNull PsiArrayType arrayType) { if (myResult == Type.EMPTY_TYPE) myResult = new ArrayType(typeToType(arrayType.getComponentType())); return super.visitArrayType(arrayType); } @Override - public Type visitClassType(PsiClassType classType) { + public Type visitClassType(@NotNull PsiClassType classType) { final IdentifierImpl identifier = constructClassTypeIdentifier(classType); final List resolvedClassTypeParams = createRawTypesForResolvedReference(classType); @@ -128,7 +128,7 @@ public class TypeVisitor extends PsiTypeVisitor { } @Override - public Type visitWildcardType(PsiWildcardType wildcardType) { + public Type visitWildcardType(@NotNull PsiWildcardType wildcardType) { if (wildcardType.isExtends()) myResult = new OutProjectionType(typeToType(wildcardType.getExtendsBound())); else if (wildcardType.isSuper()) @@ -139,7 +139,7 @@ public class TypeVisitor extends PsiTypeVisitor { } @Override - public Type visitEllipsisType(PsiEllipsisType ellipsisType) { + public Type visitEllipsisType(@NotNull PsiEllipsisType ellipsisType) { myResult = new VarArg(typeToType(ellipsisType.getComponentType())); return super.visitEllipsisType(ellipsisType); } diff --git a/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java b/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java index 6b7a168efb3..28548a78d37 100644 --- a/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java +++ b/test/org/jetbrains/jet/j2k/JavaToKotlinConverterTest.java @@ -8,6 +8,7 @@ import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.j2k.visitors.ClassVisitor; import java.io.File; @@ -64,6 +65,7 @@ public class JavaToKotlinConverterTest extends LightDaemonAnalyzerTestCase { return myDataPath + File.separator + myName + ".jav"; } + @NotNull @Override protected String getTestDataPath() { return "testData"; @@ -77,11 +79,13 @@ public class JavaToKotlinConverterTest extends LightDaemonAnalyzerTestCase { return jdkFromIdeaHome(); } + @NotNull @Override public String getName() { return "test_" + myName; } + @NotNull public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(TestCaseBuilder.suiteForDirectory(getTestDataPathBase(), "/ast", true, new TestCaseBuilder.NamedTestFactory() { @@ -143,7 +147,7 @@ public class JavaToKotlinConverterTest extends LightDaemonAnalyzerTestCase { } @NotNull - private static String prettify(String code) { + private static String prettify(@Nullable String code) { if (code == null) return ""; return code diff --git a/test/org/jetbrains/jet/j2k/TestCaseBuilder.java b/test/org/jetbrains/jet/j2k/TestCaseBuilder.java index 458376db39e..f5337dfcb24 100644 --- a/test/org/jetbrains/jet/j2k/TestCaseBuilder.java +++ b/test/org/jetbrains/jet/j2k/TestCaseBuilder.java @@ -16,6 +16,7 @@ import java.util.List; * @author ignatov */ abstract class TestCaseBuilder { + @NotNull private static final FilenameFilter emptyFilter = new FilenameFilter() { @Override public boolean accept(File file, String name) { @@ -23,6 +24,7 @@ abstract class TestCaseBuilder { } }; + @NotNull public static String getTestDataPathBase() { return "testData"; } @@ -42,13 +44,13 @@ abstract class TestCaseBuilder { } @NotNull - private static TestSuite suiteForDirectory(String baseDataDir, @NotNull final String dataPath, boolean recursive, final FilenameFilter filter, @NotNull NamedTestFactory factory) { + private static TestSuite suiteForDirectory(String baseDataDir, @NotNull final String dataPath, boolean recursive, @NotNull final FilenameFilter filter, @NotNull NamedTestFactory factory) { TestSuite suite = new TestSuite(dataPath); final String extensionJava = ".jav"; final FilenameFilter extensionFilter = new FilenameFilter() { @Override - public boolean accept(File dir, String name) { + public boolean accept(File dir, @NotNull String name) { return name.endsWith(extensionJava); } }; @@ -66,7 +68,7 @@ abstract class TestCaseBuilder { File dir = new File(baseDataDir + dataPath); FileFilter dirFilter = new FileFilter() { @Override - public boolean accept(File pathname) { + public boolean accept(@NotNull File pathname) { return pathname.isDirectory(); } };