NamespaceType → PackageType.

This commit is contained in:
Evgeny Gerashchenko
2014-01-09 23:29:49 +04:00
parent 1f615d08c7
commit 997d3597a9
13 changed files with 40 additions and 41 deletions
@@ -20,11 +20,11 @@ import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.resolve.name.SpecialNames;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lang.types.NamespaceType;
import org.jetbrains.jet.lang.types.PackageType;
public class JetModuleUtil {
public static NamespaceType getRootNamespaceType(JetElement expression) {
public static PackageType getRootPackageType(JetElement expression) {
// TODO: this is a stub: at least the modules' root namespaces must be indexed here
return new NamespaceType(SpecialNames.ROOT_NAMESPACE, JetScope.EMPTY, ReceiverValue.NO_RECEIVER);
return new PackageType(SpecialNames.ROOT_NAMESPACE, JetScope.EMPTY, ReceiverValue.NO_RECEIVER);
}
}
@@ -130,7 +130,7 @@ public class CallExpressionResolver {
p.println(toString(), " for ", classifier);
}
};
return new NamespaceType(referencedName, scopeForStaticMembersResolution, NO_RECEIVER);
return new PackageType(referencedName, scopeForStaticMembersResolution, NO_RECEIVER);
}
temporaryTrace.commit();
return result[0];
@@ -181,7 +181,7 @@ public class CallExpressionResolver {
JetScope scope = new ChainedScope(
classifier, "Member scope for extended class object type " + classifier, scopes.toArray(new JetScope[scopes.size()])
);
return new NamespaceType(referencedName, scope, new ExpressionReceiver(expression, classObjectType));
return new PackageType(referencedName, scope, new ExpressionReceiver(expression, classObjectType));
}
private boolean furtherNameLookup(
@@ -189,12 +189,12 @@ public class CallExpressionResolver {
@NotNull JetType[] result,
@NotNull ResolutionContext context
) {
NamespaceType namespaceType = lookupNamespaceType(expression, context);
if (namespaceType == null) {
PackageType packageType = lookupPackageType(expression, context);
if (packageType == null) {
return false;
}
if (isLHSOfDot(expression)) {
result[0] = namespaceType;
result[0] = packageType;
return true;
}
context.trace.report(EXPRESSION_EXPECTED_NAMESPACE_FOUND.on(expression));
@@ -203,26 +203,26 @@ public class CallExpressionResolver {
}
@Nullable
private NamespaceType lookupNamespaceType(@NotNull JetSimpleNameExpression expression, @NotNull ResolutionContext context) {
private PackageType lookupPackageType(@NotNull JetSimpleNameExpression expression, @NotNull ResolutionContext context) {
Name name = expression.getReferencedNameAsName();
PackageViewDescriptor namespace = context.scope.getPackage(name);
if (namespace == null) {
PackageViewDescriptor packageView = context.scope.getPackage(name);
if (packageView == null) {
return null;
}
context.trace.record(REFERENCE_TARGET, expression, namespace);
context.trace.record(REFERENCE_TARGET, expression, packageView);
// Construct a NamespaceType with everything from the namespace and with nested classes of the corresponding class (if any)
// Construct a PackageType with everything from the package and with nested classes of the corresponding class (if any)
JetScope scope;
ClassifierDescriptor classifier = context.scope.getClassifier(name);
if (classifier instanceof ClassDescriptor) {
scope = new ChainedScope(
namespace, "Namespace type member scope for " + expression.getText(), namespace.getMemberScope(), getStaticNestedClassesScope((ClassDescriptor) classifier)
packageView, "Package type member scope for " + expression.getText(), packageView.getMemberScope(), getStaticNestedClassesScope((ClassDescriptor) classifier)
);
}
else {
scope = namespace.getMemberScope();
scope = packageView.getMemberScope();
}
return new NamespaceType(name, scope, NO_RECEIVER);
return new PackageType(name, scope, NO_RECEIVER);
}
@Nullable
@@ -295,7 +295,7 @@ public class CallExpressionResolver {
JetType type = getVariableType(nameExpression, receiver, callOperationNode, context.replaceTraceAndCache(temporaryForVariable), result);
if (result[0]) {
temporaryForVariable.commit();
if (type instanceof NamespaceType && !isLHSOfDot(nameExpression)) {
if (type instanceof PackageType && !isLHSOfDot(nameExpression)) {
type = null;
}
return JetTypeInfo.create(type, context.dataFlowInfo);
@@ -452,7 +452,7 @@ public class CallExpressionResolver {
JetType selectorReturnType = selectorReturnTypeInfo.getType();
//TODO move further
if (!(receiverType instanceof NamespaceType) && expression.getOperationSign() == JetTokens.SAFE_ACCESS) {
if (!(receiverType instanceof PackageType) && expression.getOperationSign() == JetTokens.SAFE_ACCESS) {
if (selectorReturnType != null && !KotlinBuiltIns.getInstance().isUnit(selectorReturnType)) {
if (receiverType.isNullable()) {
selectorReturnType = TypeUtils.makeNullable(selectorReturnType);
@@ -156,7 +156,7 @@ public class DataFlowValueFactory {
return getIdForThisReceiver(declarationDescriptor);
}
else if (expression instanceof JetRootNamespaceExpression) {
return createPackageInfo(JetModuleUtil.getRootNamespaceType(expression));
return createPackageInfo(JetModuleUtil.getRootPackageType(expression));
}
return NO_IDENTIFIER_INFO;
}
@@ -35,7 +35,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lang.types.ErrorUtils;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.NamespaceType;
import org.jetbrains.jet.lang.types.PackageType;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import java.util.ArrayList;
@@ -87,10 +87,10 @@ public class TaskPrioritizer {
List<Pair<JetScope, ReceiverValue>> variants = new ArrayList<Pair<JetScope, ReceiverValue>>(2);
ReceiverValue explicitReceiver = context.call.getExplicitReceiver();
if (explicitReceiver.exists() && explicitReceiver.getType() instanceof NamespaceType) {
if (explicitReceiver.exists() && explicitReceiver.getType() instanceof PackageType) {
JetType receiverType = explicitReceiver.getType();
variants.add(Pair.create(receiverType.getMemberScope(), NO_RECEIVER));
ReceiverValue value = ((NamespaceType) receiverType).getReceiverValue();
ReceiverValue value = ((PackageType) receiverType).getReceiverValue();
if (value.exists()) {
variants.add(Pair.create(context.scope, value));
}
@@ -1172,7 +1172,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
@Override
public JetTypeInfo visitRootNamespaceExpression(@NotNull JetRootNamespaceExpression expression, ExpressionTypingContext context) {
if (JetPsiUtil.isLHSOfDot(expression)) {
return DataFlowUtils.checkType(JetModuleUtil.getRootNamespaceType(expression), expression, context, context.dataFlowInfo);
return DataFlowUtils.checkType(JetModuleUtil.getRootPackageType(expression), expression, context, context.dataFlowInfo);
}
context.trace.report(NAMESPACE_IS_NOT_AN_EXPRESSION.on(expression));
return JetTypeInfo.create(null, context.dataFlowInfo);
@@ -22,7 +22,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -259,7 +258,7 @@ public class ExpressionTypingUtils {
) {
JetType type = receiverArgument.getType();
if (type instanceof NamespaceType) {
if (type instanceof PackageType) {
// This fake class ruins standard algorithms
return false;
}
@@ -299,7 +299,7 @@ public class ErrorUtils {
public static boolean containsErrorType(@Nullable JetType type) {
if (type == null) return false;
if (type instanceof NamespaceType) return false;
if (type instanceof PackageType) return false;
if (type.isError()) return true;
for (TypeProjection projection : type.getArguments()) {
if (containsErrorType(projection.getType())) return true;
@@ -25,15 +25,15 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import java.util.List;
/**
* This is a fake type assigned to namespace expressions. Only member lookup is
* This is a fake type assigned to package expressions. Only member lookup is
* supposed to be done on these types.
*/
public class NamespaceType implements JetType {
public class PackageType implements JetType {
private final Name name;
private final JetScope memberScope;
private final ReceiverValue receiver;
public NamespaceType(@NotNull Name name, @NotNull JetScope memberScope, @NotNull ReceiverValue receiver) {
public PackageType(@NotNull Name name, @NotNull JetScope memberScope, @NotNull ReceiverValue receiver) {
this.name = name;
this.memberScope = memberScope;
this.receiver = receiver;
@@ -62,7 +62,7 @@ public class NamespaceType implements JetType {
}
private TypeConstructor throwException() {
throw new UnsupportedOperationException("Only member lookup is allowed on a namespace type " + name);
throw new UnsupportedOperationException("Only member lookup is allowed on a package type " + name);
}
@NotNull
@@ -528,7 +528,7 @@ public class TypeUtils {
private static boolean equalsOrContainsAsArgument(@Nullable JetType type, @NotNull Set<JetType> possibleArgumentTypes) {
if (type == null) return false;
if (possibleArgumentTypes.contains(type)) return true;
if (type instanceof NamespaceType) return false;
if (type instanceof PackageType) return false;
for (TypeProjection projection : type.getArguments()) {
if (equalsOrContainsAsArgument(projection.getType(), possibleArgumentTypes)) return true;
}
@@ -905,17 +905,17 @@ public class KotlinBuiltIns {
}
public boolean isNothingOrNullableNothing(@NotNull JetType type) {
return !(type instanceof NamespaceType)
return !(type instanceof PackageType)
&& type.getConstructor() == getNothing().getTypeConstructor();
}
public boolean isAnyOrNullableAny(@NotNull JetType type) {
return !(type instanceof NamespaceType) &&
return !(type instanceof PackageType) &&
type.getConstructor() == getAny().getTypeConstructor();
}
public boolean isUnit(@NotNull JetType type) {
return !(type instanceof NamespaceType) && type.equals(getUnitType());
return !(type instanceof PackageType) && type.equals(getUnitType());
}
public boolean isData(@NotNull ClassDescriptor classDescriptor) {
@@ -38,7 +38,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScopeUtils;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.NamespaceType;
import org.jetbrains.jet.lang.types.PackageType;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils;
import java.util.*;
@@ -60,7 +60,7 @@ public final class TipsManager {
JetType expressionType = context.get(BindingContext.EXPRESSION_TYPE, receiverExpression);
if (expressionType != null && resolutionScope != null && !expressionType.isError()) {
if (!(expressionType instanceof NamespaceType)) {
if (!(expressionType instanceof PackageType)) {
ExpressionReceiver receiverValue = new ExpressionReceiver(receiverExpression, expressionType);
Set<DeclarationDescriptor> descriptors = new HashSet<DeclarationDescriptor>();
@@ -197,7 +197,7 @@ public final class TipsManager {
) {
// It's impossible to add extension function for namespace
JetType receiverType = receiverValue.getType();
if (receiverType instanceof NamespaceType) {
if (receiverType instanceof PackageType) {
return new HashSet<DeclarationDescriptor>(descriptors);
}
@@ -41,7 +41,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.java.jetAsJava.KotlinLightMethod;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.NamespaceType;
import org.jetbrains.jet.lang.types.PackageType;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetKeywordToken;
@@ -385,7 +385,7 @@ public class JetRefactoringUtil {
JetExpression expression = (JetExpression)element;
BindingContext bindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) expression.getContainingFile()).getBindingContext();
JetType expressionType = bindingContext.get(BindingContext.EXPRESSION_TYPE, expression);
if (expressionType == null || !(expressionType instanceof NamespaceType) &&
if (expressionType == null || !(expressionType instanceof PackageType) &&
!JetTypeChecker.INSTANCE.equalTypes(KotlinBuiltIns.
getInstance().getUnitType(), expressionType)) {
expressions.add(expression);
@@ -43,7 +43,7 @@ import org.jetbrains.jet.lang.resolve.ObservableBindingTrace;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.NamespaceType;
import org.jetbrains.jet.lang.types.PackageType;
import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
@@ -132,7 +132,7 @@ public class JetIntroduceVariableHandler extends JetIntroduceHandlerBase {
noTypeInference = true;
}
}
if (expressionType instanceof NamespaceType) {
if (expressionType instanceof PackageType) {
showErrorHint(project, editor, JetRefactoringBundle.message("cannot.refactor.namespace.expression"));
return;
}