Reverting pull request 240

This commit is contained in:
Andrey Breslav
2013-04-12 15:25:52 +04:00
parent d875bf80cb
commit c422e4194d
73 changed files with 208 additions and 1160 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.TraceBasedRedeclarationHandler;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
@@ -48,9 +49,6 @@ public class FunctionDescriptorUtil {
}
});
private FunctionDescriptorUtil() {
}
public static Map<TypeConstructor, TypeProjection> createSubstitutionContext(@NotNull FunctionDescriptor functionDescriptor, List<JetType> typeArguments) {
if (functionDescriptor.getTypeParameters().isEmpty()) return Collections.emptyMap();
@@ -139,47 +137,4 @@ public class FunctionDescriptorUtil {
public static <D extends CallableDescriptor> D alphaConvertTypeParameters(D candidate) {
return (D) candidate.substitute(MAKE_TYPE_PARAMETERS_FRESH);
}
/**
* Returns function's copy with new parameter list. Note that parameters may belong to other methods or have incorrect "index" property
* -- it will be fixed by this function.
*/
@NotNull
public static FunctionDescriptor replaceFunctionParameters(
@NotNull FunctionDescriptor function,
@NotNull List<ValueParameterDescriptor> newParameters
) {
FunctionDescriptorImpl descriptor = new SimpleFunctionDescriptorImpl(
function.getContainingDeclaration(),
function.getAnnotations(),
function.getName(),
function.getKind());
List<ValueParameterDescriptor> parameters = new ArrayList<ValueParameterDescriptor>(newParameters.size());
int idx = 0;
for (ValueParameterDescriptor parameter : newParameters) {
JetType returnType = parameter.getReturnType();
assert returnType != null;
parameters.add(new ValueParameterDescriptorImpl(
descriptor,
idx,
parameter.getAnnotations(),
parameter.getName(),
returnType,
parameter.declaresDefaultValue(),
parameter.getVarargElementType())
);
idx++;
}
ReceiverParameterDescriptor receiver = function.getReceiverParameter();
descriptor.initialize(
receiver == null ? null : receiver.getType(),
function.getExpectedThisObject(),
function.getTypeParameters(),
parameters,
function.getReturnType(),
function.getModality(),
function.getVisibility());
return descriptor;
}
}
@@ -240,12 +240,24 @@ public class OverrideResolver {
) {
Queue<CallableMemberDescriptor> fromSuperQueue = new LinkedList<CallableMemberDescriptor>(notOverridden);
while (!fromSuperQueue.isEmpty()) {
CallableMemberDescriptor notOverriddenFromSuper = VisibilityUtil.findMemberWithMaxVisibility(fromSuperQueue);
CallableMemberDescriptor notOverriddenFromSuper = findMemberWithMaxVisibility(fromSuperQueue);
Collection<CallableMemberDescriptor> overridables = extractMembersOverridableBy(notOverriddenFromSuper, fromSuperQueue, sink);
createAndBindFakeOverride(notOverriddenFromSuper, overridables, current, sink);
}
}
@NotNull
private static CallableMemberDescriptor findMemberWithMaxVisibility(@NotNull Queue<CallableMemberDescriptor> descriptors) {
CallableMemberDescriptor descriptor = descriptors.element();
for (CallableMemberDescriptor candidate : descriptors) {
Integer result = Visibilities.compare(descriptor.getVisibility(), candidate.getVisibility());
if (result != null && result < 0) {
descriptor = candidate;
}
}
return descriptor;
}
private static void createAndBindFakeOverride(
@NotNull CallableMemberDescriptor notOverriddenFromSuper,
@NotNull Collection<CallableMemberDescriptor> overridables,
@@ -1,37 +0,0 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.resolve;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.descriptors.Visibilities;
import java.util.Queue;
public class VisibilityUtil {
@NotNull
public static CallableMemberDescriptor findMemberWithMaxVisibility(@NotNull Queue<CallableMemberDescriptor> descriptors) {
CallableMemberDescriptor descriptor = descriptors.element();
for (CallableMemberDescriptor candidate : descriptors) {
Integer result = Visibilities.compare(descriptor.getVisibility(), candidate.getVisibility());
if (result != null && result < 0) {
descriptor = candidate;
}
}
return descriptor;
}
}
@@ -17,6 +17,7 @@
package org.jetbrains.jet.renderer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
@@ -26,20 +27,6 @@ import org.jetbrains.jet.lang.types.JetType;
public interface DescriptorRenderer extends Renderer<DeclarationDescriptor> {
DescriptorRenderer COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder().setWithDefinedIn(false).build();
DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder()
.setNormalizedVisibilities(true)
.setWithDefinedIn(false)
.setShortNames(false)
.setShowInternalKeyword(false)
.setUnitReturnType(false).build();
DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder()
.setNormalizedVisibilities(true)
.setWithDefinedIn(false)
.setShortNames(true)
.setShowInternalKeyword(false)
.setUnitReturnType(false).build();
DescriptorRenderer COMPACT = new DescriptorRendererBuilder()
.setWithDefinedIn(false)
.setModifiers(false).build();
@@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
public class DescriptorRendererBuilder {
private boolean shortNames = false;
@@ -30,9 +31,6 @@ public class DescriptorRendererBuilder {
private boolean debugMode = false;
private boolean classWithPrimaryConstructor = false;
private boolean verbose = false;
private boolean unitReturnType = true;
private boolean normalizedVisibilities = false;
private boolean showInternalKeyword = true;
@NotNull
private DescriptorRenderer.ValueParametersHandler valueParametersHandler = new DescriptorRenderer.DefaultValueParameterHandler();
@NotNull
@@ -78,21 +76,6 @@ public class DescriptorRendererBuilder {
return this;
}
public DescriptorRendererBuilder setUnitReturnType(boolean unitReturnType) {
this.unitReturnType = unitReturnType;
return this;
}
public DescriptorRendererBuilder setNormalizedVisibilities(boolean normalizedVisibilities) {
this.normalizedVisibilities = normalizedVisibilities;
return this;
}
public DescriptorRendererBuilder setShowInternalKeyword(boolean showInternalKeyword) {
this.showInternalKeyword = showInternalKeyword;
return this;
}
public DescriptorRendererBuilder setValueParametersHandler(@NotNull DescriptorRenderer.ValueParametersHandler valueParametersHandler) {
this.valueParametersHandler = valueParametersHandler;
return this;
@@ -110,7 +93,6 @@ public class DescriptorRendererBuilder {
public DescriptorRenderer build() {
return new DescriptorRendererImpl(shortNames, withDefinedIn, modifiers, startFromName, debugMode, classWithPrimaryConstructor,
verbose, unitReturnType, normalizedVisibilities, showInternalKeyword, valueParametersHandler,
textFormat, excludedAnnotationClasses);
verbose, valueParametersHandler, textFormat, excludedAnnotationClasses);
}
}
@@ -55,9 +55,6 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
private final boolean debugMode;
private final boolean classWithPrimaryConstructor;
private final boolean verbose;
private final boolean unitReturnType;
private final boolean normalizedVisibilities;
private final boolean showInternalKeyword;
@NotNull
private final ValueParametersHandler handler;
@NotNull
@@ -73,9 +70,6 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
boolean debugMode,
boolean classWithPrimaryConstructor,
boolean verbose,
boolean unitReturnType,
boolean normalizedVisibilities,
boolean showInternalKeyword,
@NotNull ValueParametersHandler handler,
@NotNull TextFormat textFormat,
@NotNull Collection<FqName> excludedAnnotationClasses
@@ -87,9 +81,6 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
this.handler = handler;
this.classWithPrimaryConstructor = classWithPrimaryConstructor;
this.verbose = verbose;
this.unitReturnType = unitReturnType;
this.normalizedVisibilities = normalizedVisibilities;
this.showInternalKeyword = showInternalKeyword;
this.debugMode = debugMode;
this.textFormat = textFormat;
this.excludedAnnotationClasses = Sets.newHashSet(excludedAnnotationClasses);
@@ -316,10 +307,6 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
private void renderVisibility(@NotNull Visibility visibility, @NotNull StringBuilder builder) {
if (!modifiers) return;
if (normalizedVisibilities) {
visibility = visibility.normalize();
}
if (!showInternalKeyword && visibility == Visibilities.INTERNAL) return;
builder.append(renderKeyword(visibility.toString())).append(" ");
}
@@ -338,24 +325,18 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
private void renderModalityForCallable(@NotNull CallableMemberDescriptor callable, @NotNull StringBuilder builder) {
if (!DescriptorUtils.isTopLevelDeclaration(callable) || callable.getModality() != Modality.FINAL) {
if (overridesSomething(callable) && callable.getModality() == Modality.OPEN) return;
renderModality(callable.getModality(), builder);
}
}
private boolean overridesSomething(CallableMemberDescriptor callable) {
return !callable.getOverriddenDescriptors().isEmpty();
}
private void renderOverrideAndMemberKind(@NotNull CallableMemberDescriptor callableMember, @NotNull StringBuilder builder) {
if (overridesSomething(callableMember)) {
builder.append("override ");
if (verbose) {
builder.append("/*").append(callableMember.getOverriddenDescriptors().size()).append("*/ ");
if (verbose) {
if (!callableMember.getOverriddenDescriptors().isEmpty()) {
builder.append("override /*").append(callableMember.getOverriddenDescriptors().size()).append("*/ ");
}
if (callableMember.getKind() != CallableMemberDescriptor.Kind.DECLARATION) {
builder.append("/*").append(callableMember.getKind().name().toLowerCase()).append("*/ ");
}
}
if (verbose && callableMember.getKind() != CallableMemberDescriptor.Kind.DECLARATION) {
builder.append("/*").append(callableMember.getKind().name().toLowerCase()).append("*/ ");
}
}
@@ -390,7 +371,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
builder.append(renderKeyword(variance)).append(" ");
}
renderName(typeParameter, builder);
if (typeParameter.getUpperBounds().size() >= 1) {
if (typeParameter.getUpperBounds().size() == 1) {
JetType upperBound = typeParameter.getUpperBounds().iterator().next();
if (!KotlinBuiltIns.getInstance().getDefaultBound().equals(upperBound)) {
builder.append(" : ").append(renderType(upperBound));
@@ -462,9 +443,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
renderName(function, builder);
renderValueParameters(function, builder);
JetType returnType = function.getReturnType();
if (unitReturnType || !KotlinBuiltIns.getInstance().isUnit(returnType)) {
builder.append(": ").append(returnType == null ? "[NULL]" : escape(renderType(returnType)));
}
builder.append(" : ").append(returnType == null ? "[NULL]" : escape(renderType(returnType)));
renderWhereSuffix(function.getTypeParameters(), builder);
}
@@ -486,13 +465,8 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
for (TypeParameterDescriptor typeParameter : typeParameters) {
if (typeParameter.getUpperBounds().size() > 1) {
boolean first = true;
for (JetType upperBound : typeParameter.getUpperBounds()) {
// first parameter is rendered by renderTypeParameter:
if (!first) {
upperBoundStrings.add(renderName(typeParameter.getName()) + " : " + escape(renderType(upperBound)));
}
first = false;
upperBoundStrings.add(renderName(typeParameter.getName()) + " : " + escape(renderType(upperBound)));
}
}
}
@@ -557,7 +531,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
}
renderName(variable, builder);
builder.append(": ").append(escape(renderType(typeToRender)));
builder.append(" : ").append(escape(renderType(typeToRender)));
if (verbose && varargElementType != null) {
builder.append(" /*").append(escape(renderType(realType))).append("*/");
@@ -581,7 +555,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
builder.append(escape(renderType(receiver.getType()))).append(".");
}
renderName(property, builder);
builder.append(": ").append(escape(renderType(property.getType())));
builder.append(" : ").append(escape(renderType(property.getType())));
renderWhereSuffix(property.getTypeParameters(), builder);
}