Reverting pull request 240
This commit is contained in:
+1
-46
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user