Introduced JetStandardClasses.UNIT_ALIAS constant, got rid of hard-coding it in all code except for tests.

This commit is contained in:
Evgeny Gerashchenko
2012-05-15 12:40:01 +04:00
parent 151b3be99e
commit e294a8821f
6 changed files with 12 additions and 7 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.FqName; import org.jetbrains.jet.lang.resolve.FqName;
import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collection; import java.util.Collection;
@@ -307,7 +308,7 @@ public class JetPsiUtil {
return false; return false;
} }
return "Unit".equals(typeReference.getText()); return JetStandardClasses.UNIT_ALIAS.equals(typeReference.getText());
} }
public static boolean isSafeCall(@NotNull Call call) { public static boolean isSafeCall(@NotNull Call call) {
@@ -746,7 +746,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
JetType result; JetType result;
if (operationType == JetTokens.PLUSPLUS || operationType == JetTokens.MINUSMINUS) { if (operationType == JetTokens.PLUSPLUS || operationType == JetTokens.MINUSMINUS) {
if (JetTypeChecker.INSTANCE.isSubtypeOf(returnType, JetStandardClasses.getUnitType())) { if (JetTypeChecker.INSTANCE.isSubtypeOf(returnType, JetStandardClasses.getUnitType())) {
result = ErrorUtils.createErrorType("Unit"); result = ErrorUtils.createErrorType(JetStandardClasses.UNIT_ALIAS);
context.trace.report(INC_DEC_SHOULD_NOT_RETURN_UNIT.on(operationSign)); context.trace.report(INC_DEC_SHOULD_NOT_RETURN_UNIT.on(operationSign));
} }
else { else {
@@ -258,12 +258,14 @@ public class JetStandardClasses {
@NotNull @NotNull
public static final JetScope STANDARD_CLASSES; public static final JetScope STANDARD_CLASSES;
public static final String UNIT_ALIAS = "Unit";
static { static {
WritableScope writableScope = new WritableScopeImpl(JetScope.EMPTY, STANDARD_CLASSES_NAMESPACE, RedeclarationHandler.DO_NOTHING).setDebugName("JetStandardClasses.STANDARD_CLASSES"); WritableScope writableScope = new WritableScopeImpl(JetScope.EMPTY, STANDARD_CLASSES_NAMESPACE, RedeclarationHandler.DO_NOTHING).setDebugName("JetStandardClasses.STANDARD_CLASSES");
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH); writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
STANDARD_CLASSES = writableScope; STANDARD_CLASSES = writableScope;
writableScope.addClassifierAlias("Unit", getTuple(0)); writableScope.addClassifierAlias(UNIT_ALIAS, getTuple(0));
Field[] declaredFields = JetStandardClasses.class.getDeclaredFields(); Field[] declaredFields = JetStandardClasses.class.getDeclaredFields();
for (Field field : declaredFields) { for (Field field : declaredFields) {
@@ -118,7 +118,7 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
return escape("[NULL]"); return escape("[NULL]");
} }
else if (JetStandardClasses.isUnit(type)) { else if (JetStandardClasses.isUnit(type)) {
return escape("Unit" + (type.isNullable() ? "?" : "")); return escape(JetStandardClasses.UNIT_ALIAS + (type.isNullable() ? "?" : ""));
} }
else if (JetStandardClasses.isTupleType(type)) { else if (JetStandardClasses.isTupleType(type)) {
return escape(renderTupleType(type, shortNamesOnly)); return escape(renderTupleType(type, shortNamesOnly));
@@ -87,7 +87,7 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
assert tuple0 != null; assert tuple0 != null;
scope = new WritableScopeImpl(scope, jetNamespace, RedeclarationHandler.THROW_EXCEPTION).setDebugName("Builtin classes scope #2"); scope = new WritableScopeImpl(scope, jetNamespace, RedeclarationHandler.THROW_EXCEPTION).setDebugName("Builtin classes scope #2");
scope.changeLockLevel(WritableScope.LockLevel.BOTH); scope.changeLockLevel(WritableScope.LockLevel.BOTH);
scope.addClassifierAlias("Unit", tuple0); scope.addClassifierAlias(JetStandardClasses.UNIT_ALIAS, tuple0);
jetNamespace.setMemberScope(scope); jetNamespace.setMemberScope(scope);
TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet")); TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet"));
@@ -136,7 +136,8 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
} }
String renderedOriginal = DescriptorRenderer.TEXT.render(originalDescriptor); String renderedOriginal = DescriptorRenderer.TEXT.render(originalDescriptor);
for (DeclarationDescriptor member : memberScope.getAllDescriptors()) { for (DeclarationDescriptor member : memberScope.getAllDescriptors()) {
if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(), "Unit"))) { if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(),
JetStandardClasses.UNIT_ALIAS))) {
return member; return member;
} }
} }
@@ -23,6 +23,7 @@ import org.jetbrains.jet.j2k.Converter;
import org.jetbrains.jet.j2k.J2KConverterFlags; import org.jetbrains.jet.j2k.J2KConverterFlags;
import org.jetbrains.jet.j2k.ast.*; import org.jetbrains.jet.j2k.ast.*;
import org.jetbrains.jet.j2k.util.AstUtil; import org.jetbrains.jet.j2k.util.AstUtil;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -61,7 +62,7 @@ public class TypeVisitor extends PsiTypeVisitor<Type> implements J2KVisitor {
final IdentifierImpl identifier = new IdentifierImpl(name); final IdentifierImpl identifier = new IdentifierImpl(name);
if (name.equals("void")) { if (name.equals("void")) {
myResult = new PrimitiveType(new IdentifierImpl("Unit")); myResult = new PrimitiveType(new IdentifierImpl(JetStandardClasses.UNIT_ALIAS));
} }
else if (Node.PRIMITIVE_TYPES.contains(name)) { else if (Node.PRIMITIVE_TYPES.contains(name)) {
myResult = new PrimitiveType(new IdentifierImpl(AstUtil.upperFirstCharacter(name))); myResult = new PrimitiveType(new IdentifierImpl(AstUtil.upperFirstCharacter(name)));