From 4b9e4b65b41ecdba61219929ed49cb28d6d09737 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Fri, 30 Dec 2011 18:45:40 +0400 Subject: [PATCH 1/2] constant for "namespace" --- .../src/org/jetbrains/jet/codegen/NamespaceCodegen.java | 7 ++++--- .../src/org/jetbrains/jet/compiler/CompileEnvironment.java | 5 +++-- .../jetbrains/jet/lang/resolve/java/JavaPackageScope.java | 4 ++-- .../src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java | 1 + .../src/org/jetbrains/jet/resolve/DescriptorRenderer.java | 3 ++- .../org/jetbrains/jet/plugin/java/JavaElementFinder.java | 7 ++++--- .../org/jetbrains/jet/plugin/java/StubClassBuilder.java | 3 ++- .../jet/plugin/run/JetRunConfigurationProducer.java | 5 +++-- 8 files changed, 21 insertions(+), 14 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index 6a07373bef3..25157eaf5b1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -7,6 +7,7 @@ import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.java.JavaClassDescriptor; +import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.types.JetStandardClasses; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeProjection; @@ -206,12 +207,12 @@ public class NamespaceCodegen { public static String getJVMClassName(String fqName) { if (fqName.length() == 0) { - return "namespace"; + return JvmAbi.PACKAGE_CLASS; } - String name = fqName.replace('.', '/') + "/namespace"; + String name = fqName.replace('.', '/') + "/" + JvmAbi.PACKAGE_CLASS; if(name.startsWith("")) { - name = name.substring("".length() + 1, name.length() - ".namespace".length()); + name = name.substring("".length() + 1, name.length() - 1 - JvmAbi.PACKAGE_CLASS.length()); } return name; } diff --git a/compiler/backend/src/org/jetbrains/jet/compiler/CompileEnvironment.java b/compiler/backend/src/org/jetbrains/jet/compiler/CompileEnvironment.java index 8a135252760..1912590b7c9 100644 --- a/compiler/backend/src/org/jetbrains/jet/compiler/CompileEnvironment.java +++ b/compiler/backend/src/org/jetbrains/jet/compiler/CompileEnvironment.java @@ -16,6 +16,7 @@ import org.jetbrains.jet.codegen.ClassFileFactory; import org.jetbrains.jet.codegen.GeneratedClassLoader; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; +import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.plugin.JetMainDetector; import java.io.*; @@ -210,7 +211,7 @@ public class CompileEnvironment { Class moduleSetBuilderClass = loader.loadClass("kotlin.modules.ModuleSetBuilder"); final IModuleSetBuilder moduleSetBuilder = (IModuleSetBuilder) moduleSetBuilderClass.newInstance(); - Class namespaceClass = loader.loadClass("namespace"); + Class namespaceClass = loader.loadClass(JvmAbi.PACKAGE_CLASS); final Field[] fields = namespaceClass.getDeclaredFields(); boolean modulesDefined = false; for (Field field : fields) { @@ -343,7 +344,7 @@ public class CompileEnvironment { String mainClass = null; for (JetFile file : session.getSourceFileNamespaces()) { if (JetMainDetector.hasMain(file.getDeclarations())) { - mainClass = JetPsiUtil.getFQName(file) + ".namespace"; + mainClass = JetPsiUtil.getFQName(file) + "." + JvmAbi.PACKAGE_CLASS; break; } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaPackageScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaPackageScope.java index f6a377fee65..4abedd07c27 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaPackageScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaPackageScope.java @@ -48,7 +48,7 @@ public class JavaPackageScope extends JetScopeImpl { } // TODO: what is GlobalSearchScope - PsiClass psiClass = semanticServices.getDescriptorResolver().javaFacade.findClass(getQualifiedName("namespace")); + PsiClass psiClass = semanticServices.getDescriptorResolver().javaFacade.findClass(getQualifiedName(JvmAbi.PACKAGE_CLASS)); if (psiClass == null) { return null; } @@ -116,7 +116,7 @@ public class JavaPackageScope extends JetScopeImpl { } for (PsiClass psiClass : javaPackage.getClasses()) { - if (isKotlinNamespace && "namespace".equals(psiClass.getName())) continue; + if (isKotlinNamespace && JvmAbi.PACKAGE_CLASS.equals(psiClass.getName())) continue; // If this is a Kotlin class, we have already taken it through a containing namespace descriptor ClassDescriptor kotlinClassDescriptor = semanticServices.getKotlinClassDescriptor(psiClass.getQualifiedName()); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java index 6ece6061f63..28ec4c6a71a 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java @@ -8,4 +8,5 @@ public class JvmAbi { public static final String DEFAULT_PARAMS_IMPL_SUFFIX = "$default"; public static final String GETTER_PREFIX = "get"; public static final String SETTER_PREFIX = "set"; + public static final String PACKAGE_CLASS = "namespace"; } diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index 43a466e428b..3b9d0eaaf25 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -7,6 +7,7 @@ import org.jetbrains.jet.lang.diagnostics.Renderer; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetStandardClasses; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lexer.JetTokens; import java.util.Collection; import java.util.Collections; @@ -268,7 +269,7 @@ public class DescriptorRenderer implements Renderer { @Override public Void visitNamespaceDescriptor(NamespaceDescriptor namespaceDescriptor, StringBuilder builder) { - builder.append(renderKeyword("namespace")).append(" "); + builder.append(renderKeyword(JetTokens.NAMESPACE_KEYWORD.getValue())).append(" "); renderName(namespaceDescriptor, builder); return super.visitNamespaceDescriptor(namespaceDescriptor, builder); } diff --git a/idea/src/org/jetbrains/jet/plugin/java/JavaElementFinder.java b/idea/src/org/jetbrains/jet/plugin/java/JavaElementFinder.java index 8371501002a..009ab41711d 100644 --- a/idea/src/org/jetbrains/jet/plugin/java/JavaElementFinder.java +++ b/idea/src/org/jetbrains/jet/plugin/java/JavaElementFinder.java @@ -17,6 +17,7 @@ import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.codegen.JetTypeMapper; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.plugin.JetFileType; import java.util.*; @@ -72,7 +73,7 @@ public class JavaElementFinder extends PsiElementFinder { for (JetFile file : filesInScope) { final String packageName = JetPsiUtil.getFQName(file); if (packageName != null && qualifiedName.startsWith(packageName)) { - if (qualifiedName.equals(fqn(packageName, "namespace"))) { + if (qualifiedName.equals(fqn(packageName, JvmAbi.PACKAGE_CLASS))) { answer.add(new JetLightClass(psiManager, file, qualifiedName)); } else { @@ -122,7 +123,7 @@ public class JavaElementFinder extends PsiElementFinder { String packageFQN = psiPackage.getQualifiedName(); for (JetFile psiFile : collectProjectJetFiles(project, GlobalSearchScope.allScope(project))) { if (packageFQN.equals(JetPsiUtil.getFQName(psiFile))) { - answer.add("namespace"); + answer.add(JvmAbi.PACKAGE_CLASS); for (JetDeclaration declaration : psiFile.getDeclarations()) { if (declaration instanceof JetClassOrObject) { answer.add(getLocalName(declaration)); @@ -160,7 +161,7 @@ public class JavaElementFinder extends PsiElementFinder { String packageFQN = psiPackage.getQualifiedName(); for (JetFile file : filesInScope) { if (packageFQN.equals(JetPsiUtil.getFQName(file))) { - answer.add(new JetLightClass(psiManager, file, fqn(packageFQN, "namespace"))); + answer.add(new JetLightClass(psiManager, file, fqn(packageFQN, JvmAbi.PACKAGE_CLASS))); for (JetDeclaration declaration : file.getDeclarations()) { if (declaration instanceof JetClassOrObject) { answer.add(new JetLightClass(psiManager, file, fqn(packageFQN, getLocalName(declaration)))); diff --git a/idea/src/org/jetbrains/jet/plugin/java/StubClassBuilder.java b/idea/src/org/jetbrains/jet/plugin/java/StubClassBuilder.java index 99112749893..c5714910e67 100644 --- a/idea/src/org/jetbrains/jet/plugin/java/StubClassBuilder.java +++ b/idea/src/org/jetbrains/jet/plugin/java/StubClassBuilder.java @@ -11,6 +11,7 @@ import com.intellij.psi.stubs.StubElement; import com.intellij.util.containers.Stack; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.ClassBuilder; +import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; @@ -52,7 +53,7 @@ public class StubClassBuilder extends ClassBuilder { v = new StubBuildingVisitor(null, EMPTY_STRATEGY, parent, access); super.defineClass(origin, version, access, name, signature, superName, interfaces); - if (name.equals("namespace") || name.endsWith("/namespace")) { + if (name.equals(JvmAbi.PACKAGE_CLASS) || name.endsWith("/" + JvmAbi.PACKAGE_CLASS)) { isNamespace = true; } else { diff --git a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java index 9a022ae678b..f0c6aa47cc1 100644 --- a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java +++ b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; +import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.plugin.JetMainDetector; /** @@ -44,7 +45,7 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im if (JetMainDetector.hasMain(jetFile.getDeclarations())) { mySourceElement = jetFile; String fqName = JetPsiUtil.getFQName(jetFile); - String className = fqName.length() == 0 ? "namespace" : fqName + ".namespace"; + String className = fqName.length() == 0 ? JvmAbi.PACKAGE_CLASS : fqName + "." + JvmAbi.PACKAGE_CLASS; return createConfigurationByQName(module, configurationContext, className); } } @@ -59,7 +60,7 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(module.getProject(), context); JetRunConfiguration configuration = (JetRunConfiguration) settings.getConfiguration(); configuration.setModule(module); - configuration.setName(StringUtil.trimEnd(fqName, ".namespace")); + configuration.setName(StringUtil.trimEnd(fqName, "." + JvmAbi.PACKAGE_CLASS)); configuration.MAIN_CLASS_NAME = fqName; return settings; } From 6446e83b2917289438380f293b4e417062e75b64 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Fri, 30 Dec 2011 18:45:49 +0400 Subject: [PATCH 2/2] remove VariableDescriptor.inType (approved by Andrey Breslav) --- .../jetbrains/jet/codegen/CodegenContext.java | 2 +- .../jetbrains/jet/codegen/JetTypeMapper.java | 8 +++-- .../resolve/java/JavaDescriptorResolver.java | 3 +- .../descriptors/FunctionDescriptorUtil.java | 2 +- .../descriptors/LocalVariableDescriptor.java | 2 +- .../lang/descriptors/PropertyDescriptor.java | 30 +++++-------------- .../descriptors/PropertySetterDescriptor.java | 2 +- .../ValueParameterDescriptorImpl.java | 19 +++++------- .../lang/descriptors/VariableDescriptor.java | 11 +------ .../VariableDescriptorBoundToReceiver.java | 5 ---- .../descriptors/VariableDescriptorImpl.java | 16 ++-------- .../jet/lang/resolve/DescriptorResolver.java | 14 ++++----- .../jetbrains/jet/lang/types/ErrorUtils.java | 4 +-- .../jet/lang/types/JetStandardClasses.java | 2 +- .../ClosureExpressionsTypingVisitor.java | 2 +- .../jet/resolve/DescriptorRenderer.java | 21 ++++--------- .../testData/diagnostics/tests/Properties.jet | 4 +-- idea/testData/checker/Properties.jet | 4 +-- 18 files changed, 46 insertions(+), 105 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java index 373ab6f0d09..98aee0c5402 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenContext.java @@ -229,7 +229,7 @@ public abstract class CodegenContext { pd.getName() + "$bridge$" + accessors.size() ); JetType receiverType = pd.getReceiverParameter().exists() ? pd.getReceiverParameter().getType() : null; - myAccessor.setType(pd.getInType(), pd.getOutType(), Collections.emptyList(), pd.getExpectedThisObject(), receiverType); + myAccessor.setType(pd.getOutType(), Collections.emptyList(), pd.getExpectedThisObject(), receiverType); PropertyGetterDescriptor pgd = new PropertyGetterDescriptor( myAccessor, Collections.emptyList(), myAccessor.getModality(), diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java index 288a75f7482..7230e27dba3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -672,9 +672,11 @@ public class JetTypeMapper { @Nullable public JvmMethodSignature mapSetterSignature(PropertyDescriptor descriptor, OwnerKind kind) { - JetType inType = descriptor.getInType(); - if(inType == null) + if (!descriptor.isVar()) { return null; + } + + JetType outType = descriptor.getOutType(); String name = PropertyCodegen.setterName(descriptor.getName()); ArrayList params = new ArrayList(); @@ -694,7 +696,7 @@ public class JetTypeMapper { } } - params.add(mapType(inType)); + params.add(mapType(outType)); // TODO: proper generic signature return new JvmMethodSignature(new Method(name, Type.VOID_TYPE, params.toArray(new Type[params.size()])), null, null, null, null); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 1cf784ea2de..d19cdebc3ef 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -743,7 +743,7 @@ public class JavaDescriptorResolver { i, Collections.emptyList(), // TODO name, - null, // TODO : review + false, changeNullable ? TypeUtils.makeNullableAsSpecified(outType, nullable) : outType, hasDefaultValue, varargElementType @@ -767,7 +767,6 @@ public class JavaDescriptorResolver { null, DescriptorUtils.getExpectedThisObjectIfNeeded(containingDeclaration), field.getName(), - isFinal ? null : type, type); semanticServices.getTrace().record(BindingContext.VARIABLE, field, propertyDescriptor); fieldDescriptorCache.put(field, propertyDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java index ca36c9b3e16..631190d57cd 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java @@ -60,7 +60,7 @@ public class FunctionDescriptorUtil { substitutedDescriptor, unsubstitutedValueParameter, unsubstitutedValueParameter.getAnnotations(), - unsubstitutedValueParameter.getInType() == null ? null : substitutedType, + unsubstitutedValueParameter.isVar(), substitutedType, substituteVarargElementType )); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LocalVariableDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LocalVariableDescriptor.java index 171bb870095..3295b000831 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LocalVariableDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/LocalVariableDescriptor.java @@ -19,7 +19,7 @@ public class LocalVariableDescriptor extends VariableDescriptorImpl { @NotNull String name, @Nullable JetType type, boolean mutable) { - super(containingDeclaration, annotations, name, mutable ? type : null, type); + super(containingDeclaration, annotations, name, type); isVar = mutable; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java index 5b1f6695436..b195b0b102e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -71,23 +71,20 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @Nullable JetType receiverType, @NotNull ReceiverDescriptor expectedThisObject, @NotNull String name, - @Nullable JetType inType, @NotNull JetType outType ) { this(containingDeclaration, annotations, modality, visibility, isVar, name); - setType(inType, outType, Collections.emptyList(), expectedThisObject, receiverType); + setType(outType, Collections.emptyList(), expectedThisObject, receiverType); } - public void setType(@Nullable JetType inType, @NotNull JetType outType, @NotNull List typeParameters, @NotNull ReceiverDescriptor expectedThisObject, @Nullable JetType receiverType) { + public void setType(@NotNull JetType outType, @NotNull List typeParameters, @NotNull ReceiverDescriptor expectedThisObject, @Nullable JetType receiverType) { ReceiverDescriptor receiver = receiverType == null ? NO_RECEIVER : new ExtensionReceiver(this, receiverType); - setType(inType, outType, typeParameters, expectedThisObject, receiver); + setType(outType, typeParameters, expectedThisObject, receiver); } - public void setType(@Nullable JetType inType, @NotNull JetType outType, @NotNull List typeParameters, @NotNull ReceiverDescriptor expectedThisObject, @NotNull ReceiverDescriptor receiver) { - assert !isVar || inType != null; - setInType(inType); + public void setType(@NotNull JetType outType, @NotNull List typeParameters, @NotNull ReceiverDescriptor expectedThisObject, @NotNull ReceiverDescriptor receiver) { setOutType(outType); this.typeParemeters = typeParameters; @@ -123,17 +120,6 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab return getOutType(); } - @Override - public JetType getInType() { - return super.getInType(); - } - - @Override - @NotNull - public JetType getOutType() { - return super.getOutType(); - } - public boolean isVar() { return isVar; } @@ -170,11 +156,9 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab List substitutedTypeParameters = Lists.newArrayList(); TypeSubstitutor substitutor = DescriptorSubstitutor.substituteTypeParameters(getTypeParameters(), originalSubstitutor, substitutedDescriptor, substitutedTypeParameters); - JetType originalInType = getInType(); - JetType inType = originalInType == null ? null : substitutor.substitute(originalInType, Variance.IN_VARIANCE); JetType originalOutType = getOutType(); JetType outType = substitutor.substitute(originalOutType, Variance.OUT_VARIANCE); - if (inType == null && outType == null) { + if (outType == null) { return null; // TODO : tell the user that the property was projected out } @@ -196,7 +180,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab substitutedReceiverType = null; } - substitutedDescriptor.setType(inType, outType, substitutedTypeParameters, substitutedExpectedThisObject, substitutedReceiverType); + substitutedDescriptor.setType(outType, substitutedTypeParameters, substitutedExpectedThisObject, substitutedReceiverType); return substitutedDescriptor; } @@ -231,7 +215,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab DescriptorUtils.convertModality(modality, makeNonAbstract), visibility, isVar, getName()); - propertyDescriptor.setType(getInType(), getOutType(), DescriptorUtils.copyTypeParameters(propertyDescriptor, getTypeParameters()), expectedThisObject, receiver.exists() ? receiver.getType() : null); + propertyDescriptor.setType(getOutType(), DescriptorUtils.copyTypeParameters(propertyDescriptor, getTypeParameters()), expectedThisObject, receiver.exists() ? receiver.getType() : null); PropertyGetterDescriptor newGetter = getter == null ? null : new PropertyGetterDescriptor( propertyDescriptor, Lists.newArrayList(getter.getAnnotations()), diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java index d2f34c8b70c..d2fcd33ffc9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java @@ -35,7 +35,7 @@ public class PropertySetterDescriptor extends PropertyAccessorDescriptor { public void initializeDefault() { assert parameter == null; - parameter = new ValueParameterDescriptorImpl(this, 0, Collections.emptyList(), "<>", null, getCorrespondingProperty().getReturnType(), false, null); + parameter = new ValueParameterDescriptorImpl(this, 0, Collections.emptyList(), "<>", false, getCorrespondingProperty().getReturnType(), false, null); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptorImpl.java index b56cf9f7ea9..9102dba27c8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptorImpl.java @@ -24,42 +24,37 @@ public class ValueParameterDescriptorImpl extends VariableDescriptorImpl impleme int index, @NotNull List annotations, @NotNull String name, - @Nullable JetType inType, + boolean isVar, @NotNull JetType outType, boolean hasDefaultValue, @Nullable JetType varargElementType) { - super(containingDeclaration, annotations, name, inType, outType); + super(containingDeclaration, annotations, name, outType); this.original = this; this.index = index; this.hasDefaultValue = hasDefaultValue; this.varargElementType = varargElementType; - this.isVar = inType != null; + this.isVar = isVar; } public ValueParameterDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, @NotNull ValueParameterDescriptor original, @NotNull List annotations, - @Nullable JetType inType, + boolean isVar, @NotNull JetType outType, @Nullable JetType varargElementType ) { - super(containingDeclaration, annotations, original.getName(), inType, outType); + super(containingDeclaration, annotations, original.getName(), outType); this.original = original; this.index = original.getIndex(); this.hasDefaultValue = original.hasDefaultValue(); this.varargElementType = varargElementType; - this.isVar = inType != null; + this.isVar = isVar; } @Override public void setType(@NotNull JetType type) { - assert getOutType() == null; setOutType(type); - if (isVar) { - assert getInType() == null; - setInType(type); - } } @Override @@ -107,6 +102,6 @@ public class ValueParameterDescriptorImpl extends VariableDescriptorImpl impleme @NotNull @Override public ValueParameterDescriptor copy(@NotNull DeclarationDescriptor newOwner) { - return new ValueParameterDescriptorImpl(newOwner, index, Lists.newArrayList(getAnnotations()), getName(), getInType(), getOutType(), hasDefaultValue, varargElementType); + return new ValueParameterDescriptorImpl(newOwner, index, Lists.newArrayList(getAnnotations()), getName(), isVar, getOutType(), hasDefaultValue, varargElementType); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptor.java index 4490b83fc96..28fa3fd67c8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptor.java @@ -9,18 +9,9 @@ import org.jetbrains.jet.lang.types.TypeSubstitutor; * @author abreslav */ public interface VariableDescriptor extends CallableDescriptor { - /** - * @return null for write-only variables (i.e. properties), variable value type otherwise - */ - @Nullable + @NotNull JetType getOutType(); - /** - * @return null for read-only variables (i.e. val's etc), or the type expected on assignment type otherwise - */ - @Nullable - JetType getInType(); - @Override @SuppressWarnings({"NullableProblems"}) @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorBoundToReceiver.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorBoundToReceiver.java index cf423deec90..2ab86415329 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorBoundToReceiver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorBoundToReceiver.java @@ -34,11 +34,6 @@ public class VariableDescriptorBoundToReceiver implements VariableDescriptor { return variableDescriptor.getOutType(); } - @Override - public JetType getInType() { - return variableDescriptor.getInType(); - } - @NotNull @Override public DeclarationDescriptor getContainingDeclaration() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java index a8038dd3bba..0766dd99f3f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java @@ -14,19 +14,15 @@ import java.util.Set; * @author abreslav */ public abstract class VariableDescriptorImpl extends DeclarationDescriptorImpl implements VariableDescriptor { - private JetType inType; private JetType outType; public VariableDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, @NotNull List annotations, @NotNull String name, - @Nullable JetType inType, - @Nullable JetType outType) { + @NotNull JetType outType) { super(containingDeclaration, annotations, name); - assert (inType != null) || (outType != null); - this.inType = inType; this.outType = outType; } @@ -44,16 +40,8 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorImpl i return outType; } - @Override - public JetType getInType() { - return inType; - } - - protected void setInType(JetType inType) { - this.inType = inType; - } - protected void setOutType(JetType outType) { + assert this.outType == null; this.outType = outType; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 740ff3ed692..5d927028693 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -264,7 +264,7 @@ public class DescriptorResolver { index, annotationResolver.createAnnotationStubs(valueParameter.getModifierList()), JetPsiUtil.safeName(valueParameter.getName()), - valueParameter.isMutable() ? variableType : null, + valueParameter.isMutable(), variableType, valueParameter.getDefaultValue() != null, varargElementType @@ -479,7 +479,7 @@ public class DescriptorResolver { JetPsiUtil.safeName(objectDeclaration.getName()) ); - propertyDescriptor.setType(null, classDescriptor.getDefaultType(), Collections.emptyList(), DescriptorUtils.getExpectedThisObjectIfNeeded(containingDeclaration), ReceiverDescriptor.NO_RECEIVER); + propertyDescriptor.setType(classDescriptor.getDefaultType(), Collections.emptyList(), DescriptorUtils.getExpectedThisObjectIfNeeded(containingDeclaration), ReceiverDescriptor.NO_RECEIVER); propertyDescriptor.initialize(null, null); JetObjectDeclarationName nameAsDeclaration = objectDeclaration.getNameAsDeclaration(); @@ -553,8 +553,7 @@ public class DescriptorResolver { JetType type = getVariableType(propertyScope, property, DataFlowInfo.EMPTY, true); - JetType inType = isVar ? type : null; - propertyDescriptor.setType(inType, type, typeParameterDescriptors, DescriptorUtils.getExpectedThisObjectIfNeeded(containingDeclaration), receiverDescriptor); + propertyDescriptor.setType(type, typeParameterDescriptors, DescriptorUtils.getExpectedThisObjectIfNeeded(containingDeclaration), receiverDescriptor); PropertyGetterDescriptor getter = resolvePropertyGetterDescriptor(scopeWithTypeParameters, property, propertyDescriptor); PropertySetterDescriptor setter = resolvePropertySetterDescriptor(scopeWithTypeParameters, property, propertyDescriptor); @@ -686,11 +685,11 @@ public class DescriptorResolver { JetType type; JetTypeReference typeReference = parameter.getTypeReference(); if (typeReference == null) { - type = propertyDescriptor.getInType(); // TODO : this maybe unknown at this point + type = propertyDescriptor.getOutType(); // TODO : this maybe unknown at this point } else { type = typeResolver.resolveType(scope, typeReference); - JetType inType = propertyDescriptor.getInType(); + JetType inType = propertyDescriptor.getOutType(); if (inType != null) { if (!TypeUtils.equalTypes(type, inType)) { // trace.getErrorHandler().genericError(typeReference.getNode(), "Setter parameter type must be equal to the type of the property, i.e. " + inType); @@ -842,8 +841,7 @@ public class DescriptorResolver { isMutable, name == null ? "" : name ); - JetType inType = isMutable ? type : null; - propertyDescriptor.setType(inType, type, Collections.emptyList(), DescriptorUtils.getExpectedThisObjectIfNeeded(classDescriptor), ReceiverDescriptor.NO_RECEIVER); + propertyDescriptor.setType(type, Collections.emptyList(), DescriptorUtils.getExpectedThisObjectIfNeeded(classDescriptor), ReceiverDescriptor.NO_RECEIVER); PropertyGetterDescriptor getter = createDefaultGetter(propertyDescriptor); PropertySetterDescriptor setter = createDefaultSetter(propertyDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java index 62c5ca24b4d..51e6dd2282d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -116,7 +116,7 @@ public class ErrorUtils { null, ReceiverDescriptor.NO_RECEIVER, "", - ERROR_PROPERTY_TYPE, ERROR_PROPERTY_TYPE); + ERROR_PROPERTY_TYPE); private static final Set ERROR_PROPERTY_GROUP = Collections.singleton(ERROR_PROPERTY); private static FunctionDescriptor createErrorFunction(List typeParameters, List positionedValueArgumentTypes) { @@ -165,7 +165,7 @@ public class ErrorUtils { i, Collections.emptyList(), "", - ERROR_PARAMETER_TYPE, + true, ERROR_PARAMETER_TYPE, false, null)); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardClasses.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardClasses.java index b795a4cea1e..3ca30d02d40 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardClasses.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardClasses.java @@ -385,7 +385,7 @@ public class JetStandardClasses { List valueParameters = Lists.newArrayList(); for (int i = first; i <= last; i++) { JetType parameterType = arguments.get(i).getType(); - ValueParameterDescriptorImpl valueParameterDescriptor = new ValueParameterDescriptorImpl(functionDescriptor, i, Collections.emptyList(), "p" + i, null, parameterType, false, null); + ValueParameterDescriptorImpl valueParameterDescriptor = new ValueParameterDescriptorImpl(functionDescriptor, i, Collections.emptyList(), "p" + i, false, parameterType, false, null); valueParameters.add(valueParameterDescriptor); } return valueParameters; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java index 24fb25be067..52622522ba4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java @@ -145,7 +145,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { if (functionTypeExpected && !hasDeclaredValueParameters && expectedValueParameters.size() == 1) { ValueParameterDescriptor valueParameterDescriptor = expectedValueParameters.get(0); ValueParameterDescriptor it = new ValueParameterDescriptorImpl( - functionDescriptor, 0, Collections.emptyList(), "it", valueParameterDescriptor.getInType(), valueParameterDescriptor.getOutType(), valueParameterDescriptor.hasDefaultValue(), valueParameterDescriptor.getVarargElementType() + functionDescriptor, 0, Collections.emptyList(), "it", false, valueParameterDescriptor.getOutType(), valueParameterDescriptor.hasDefaultValue(), valueParameterDescriptor.getVarargElementType() ); valueParameterDescriptors.add(it); context.trace.record(AUTO_CREATED_IT, it); diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index 3b9d0eaaf25..1499f8669da 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -136,7 +136,7 @@ public class DescriptorRenderer implements Renderer { @Override public Void visitVariableDescriptor(VariableDescriptor descriptor, StringBuilder builder) { - String typeString = renderPropertyPrefixAndComputeTypeString(builder, Collections.emptyList(), ReceiverDescriptor.NO_RECEIVER, descriptor.getOutType(), descriptor.getInType()); + String typeString = renderPropertyPrefixAndComputeTypeString(builder, Collections.emptyList(), ReceiverDescriptor.NO_RECEIVER, descriptor.getOutType()); renderName(descriptor, builder); builder.append(" : ").append(escape(typeString)); return super.visitVariableDescriptor(descriptor, builder); @@ -146,26 +146,16 @@ public class DescriptorRenderer implements Renderer { @NotNull StringBuilder builder, @NotNull List typeParameters, @NotNull ReceiverDescriptor receiver, - @Nullable JetType outType, - @Nullable JetType inType) { + @Nullable JetType outType) { String typeString = lt() + "no type>"; - if (inType != null && outType != null) { + if (outType != null) { builder.append(renderKeyword("var")).append(" "); - if (inType.equals(outType)) { - typeString = renderType(outType); - } - else { - typeString = "<" + renderKeyword("in") + ": " + renderType(inType) + " " + renderKeyword("out") + ": " + renderType(outType) + ">"; - } + typeString = renderType(outType); } else if (outType != null) { builder.append(renderKeyword("val")).append(" "); typeString = renderType(outType); } - else if (inType != null) { - builder.append(lt()).append("write-only> "); - typeString = renderType(inType); - } renderTypeParameters(typeParameters, builder); @@ -182,8 +172,7 @@ public class DescriptorRenderer implements Renderer { String typeString = renderPropertyPrefixAndComputeTypeString( builder, descriptor.getTypeParameters(), descriptor.getReceiverParameter(), - descriptor.getOutType(), - descriptor.getInType()); + descriptor.getOutType()); renderName(descriptor, builder); builder.append(" : ").append(escape(typeString)); return null; diff --git a/compiler/testData/diagnostics/tests/Properties.jet b/compiler/testData/diagnostics/tests/Properties.jet index ecb73643452..ee7555ba64d 100644 --- a/compiler/testData/diagnostics/tests/Properties.jet +++ b/compiler/testData/diagnostics/tests/Properties.jet @@ -7,7 +7,7 @@ var x : Int = 1 + x val xx : Int = 1 + x get() : Int = 1 - set(value : Long) {} + set(value : Long) {} val p : Int = 1 get() = 1 @@ -26,4 +26,4 @@ class Test() { a = $b } public val i = 1 -} \ No newline at end of file +} diff --git a/idea/testData/checker/Properties.jet b/idea/testData/checker/Properties.jet index 7ca6725365e..33d454e33ec 100644 --- a/idea/testData/checker/Properties.jet +++ b/idea/testData/checker/Properties.jet @@ -7,7 +7,7 @@ val xx : Int = 1 + x get() : Int = 1 - set(value : Long) {} + set(value : Long) {} val p : Int = 1 get() = 1 @@ -25,4 +25,4 @@ class Test() { $b = $a a = $b } -} \ No newline at end of file +}