diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java index 025adb108b5..726945858c0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java @@ -17,7 +17,6 @@ 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; @@ -27,6 +26,20 @@ import org.jetbrains.jet.lang.types.JetType; public interface DescriptorRenderer extends Renderer { 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(); diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java index b2c0ebf5464..51d534d3582 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java @@ -21,7 +21,6 @@ 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; @@ -31,6 +30,9 @@ 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 @@ -76,6 +78,21 @@ 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; @@ -93,6 +110,8 @@ public class DescriptorRendererBuilder { public DescriptorRenderer build() { return new DescriptorRendererImpl(shortNames, withDefinedIn, modifiers, startFromName, debugMode, classWithPrimaryConstructor, - verbose, valueParametersHandler, textFormat, excludedAnnotationClasses); + verbose, unitReturnType, normalizedVisibilities, showInternalKeyword, valueParametersHandler, + textFormat, excludedAnnotationClasses); } + } diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index c4f625c7e52..d5ad38309f0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -55,6 +55,9 @@ 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 @@ -70,6 +73,9 @@ 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 excludedAnnotationClasses @@ -81,6 +87,9 @@ 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); @@ -307,6 +316,10 @@ 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(" "); } @@ -325,19 +338,25 @@ 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 (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 (overridesSomething(callableMember)) { + builder.append("override "); + if (verbose) { + builder.append("/*").append(callableMember.getOverriddenDescriptors().size()).append("*/ "); } } + if (verbose && callableMember.getKind() != CallableMemberDescriptor.Kind.DECLARATION) { + builder.append("/*").append(callableMember.getKind().name().toLowerCase()).append("*/ "); + } } @NotNull @@ -443,7 +462,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer { renderName(function, builder); renderValueParameters(function, builder); JetType returnType = function.getReturnType(); - builder.append(" : ").append(returnType == null ? "[NULL]" : escape(renderType(returnType))); + if (unitReturnType || !KotlinBuiltIns.getInstance().isUnit(returnType)) { + builder.append(": ").append(returnType == null ? "[NULL]" : escape(renderType(returnType))); + } renderWhereSuffix(function.getTypeParameters(), builder); } @@ -531,7 +552,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("*/"); @@ -555,7 +576,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); } @@ -709,4 +730,4 @@ public class DescriptorRendererImpl implements DescriptorRenderer { return null; } } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java b/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java index 80b4baf9e3f..0753de9de36 100644 --- a/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java +++ b/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java @@ -32,7 +32,7 @@ import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.plugin.JetBundle; -import org.jetbrains.jet.plugin.codeInsight.OverrideUtil; +import org.jetbrains.jet.plugin.codeInsight.FunctionSignatureUtil; import org.jetbrains.jet.plugin.codeInsight.ReferenceToClassesShortening; import javax.swing.*; @@ -112,8 +112,7 @@ public class JetChangeFunctionSignatureAction implements QuestionAction { @NotNull @Override public String getTextFor(FunctionDescriptor aValue) { - return OverrideUtil.createOverridenFunctionSignatureStringFromDescriptor( - project, + return FunctionSignatureUtil.createFunctionSignatureStringFromDescriptor( aValue, /* shortTypeNames = */ true); } @@ -121,8 +120,7 @@ public class JetChangeFunctionSignatureAction implements QuestionAction { } private static void changeSignature(final JetNamedFunction element, final Project project, FunctionDescriptor signature) { - final String signatureString = OverrideUtil.createOverridenFunctionSignatureStringFromDescriptor( - project, + final String signatureString = FunctionSignatureUtil.createFunctionSignatureStringFromDescriptor( signature, /* shortTypeNames = */ false); diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/FunctionSignatureUtil.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/FunctionSignatureUtil.java new file mode 100644 index 00000000000..d05e283f292 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/FunctionSignatureUtil.java @@ -0,0 +1,36 @@ +/* + * 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.plugin.codeInsight; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; +import org.jetbrains.jet.renderer.DescriptorRenderer; + +public class FunctionSignatureUtil { + + private FunctionSignatureUtil() { + } + + @NotNull + public static String createFunctionSignatureStringFromDescriptor( + @NotNull FunctionDescriptor descriptor, + boolean shortTypeNames + ) { + DescriptorRenderer renderer = shortTypeNames ? DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES : DescriptorRenderer.SOURCE_CODE; + return renderer.render(descriptor); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index d76479eb139..1ea91a5d1db 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -30,14 +30,14 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; -import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade; +import org.jetbrains.jet.renderer.DescriptorRenderer; import java.util.ArrayList; import java.util.Collections; @@ -118,18 +118,78 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns for (DescriptorClassMember selectedElement : selectedElements) { DeclarationDescriptor descriptor = selectedElement.getDescriptor(); if (descriptor instanceof SimpleFunctionDescriptor) { - overridingMembers.add(OverrideUtil.createOverridenFunctionElementFromDescriptor(file.getProject(), - (SimpleFunctionDescriptor) descriptor, /* shortTypeNames = */ - false)); + overridingMembers.add(overrideFunction(file.getProject(), + (SimpleFunctionDescriptor) descriptor /* shortTypeNames = */ + )); } else if (descriptor instanceof PropertyDescriptor) { overridingMembers.add( - OverrideUtil.createOverridenPropertyElementFromDescriptor(file.getProject(), (PropertyDescriptor) descriptor)); + overrideProperty(file.getProject(), (PropertyDescriptor) descriptor)); } } return overridingMembers; } + @NotNull + private static JetElement overrideProperty(@NotNull Project project, @NotNull PropertyDescriptor descriptor) { + PropertyDescriptor newDescriptor = (PropertyDescriptor) descriptor.copy( + descriptor.getContainingDeclaration(), + Modality.OPEN, + descriptor.getVisibility(), + descriptor.getKind(), + /* copyOverrides = */ true); + newDescriptor.addOverriddenDescriptor(descriptor); + + StringBuilder bodyBuilder = new StringBuilder(); + String initializer = CodeInsightUtils.defaultInitializer(descriptor.getType()); + if (initializer != null) { + bodyBuilder.append(" = ").append(initializer); + } + else { + bodyBuilder.append(" = ?"); + } + return JetPsiFactory.createProperty(project, DescriptorRenderer.SOURCE_CODE.render(newDescriptor) + bodyBuilder.toString()); + } + + @NotNull + private static JetNamedFunction overrideFunction(@NotNull Project project, @NotNull FunctionDescriptor descriptor) { + FunctionDescriptor newDescriptor = descriptor.copy( + descriptor.getContainingDeclaration(), + Modality.OPEN, + descriptor.getVisibility(), + descriptor.getKind(), + /* copyOverrides = */ true); + newDescriptor.addOverriddenDescriptor(descriptor); + + boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT; + StringBuilder delegationBuilder = new StringBuilder(); + if (isAbstractFun) { + delegationBuilder.append("throw UnsupportedOperationException()"); + } + else { + delegationBuilder.append("super<").append(descriptor.getContainingDeclaration().getName()); + delegationBuilder.append(">.").append(descriptor.getName()).append("("); + } + boolean first = true; + if (!isAbstractFun) { + for (ValueParameterDescriptor parameterDescriptor : descriptor.getValueParameters()) { + if (!first) { + delegationBuilder.append(", "); + } + first = false; + delegationBuilder.append(parameterDescriptor.getName()); + } + delegationBuilder.append(")"); + } + JetType returnType = descriptor.getReturnType(); + KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); + + boolean returnsNotUnit = returnType != null && !builtIns.getUnitType().equals(returnType); + String body = "{" + (returnsNotUnit && !isAbstractFun ? "return " : "") + delegationBuilder.toString() + "}"; + + return JetPsiFactory.createFunction(project, DescriptorRenderer.SOURCE_CODE.render(newDescriptor) + body); + } + @NotNull public Set collectMethodsToGenerate(@NotNull JetClassOrObject classOrObject, BindingContext bindingContext) { DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, classOrObject); diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideUtil.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideUtil.java deleted file mode 100644 index 7d02f7b9532..00000000000 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideUtil.java +++ /dev/null @@ -1,184 +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.plugin.codeInsight; - -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.JetElement; -import org.jetbrains.jet.lang.psi.JetExpression; -import org.jetbrains.jet.lang.psi.JetNamedFunction; -import org.jetbrains.jet.lang.psi.JetPsiFactory; -import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; -import org.jetbrains.jet.renderer.DescriptorRenderer; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -public class OverrideUtil { - - private OverrideUtil() { - } - - @NotNull - public static JetElement createOverridenPropertyElementFromDescriptor(@NotNull Project project, @NotNull PropertyDescriptor descriptor) { - StringBuilder bodyBuilder = new StringBuilder(); - bodyBuilder.append(displayableVisibility(descriptor)).append("override "); - if (descriptor.isVar()) { - bodyBuilder.append("var "); - } - else { - bodyBuilder.append("val "); - } - - addReceiverParameter(descriptor, bodyBuilder); - - bodyBuilder.append(descriptor.getName()).append(" : ").append( - DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(descriptor.getType())); - String initializer = CodeInsightUtils.defaultInitializer(descriptor.getType()); - if (initializer != null) { - bodyBuilder.append(" = ").append(initializer); - } - else { - bodyBuilder.append(" = ?"); - } - return JetPsiFactory.createProperty(project, bodyBuilder.toString()); - } - - private static String displayableVisibility(MemberDescriptor descriptor) { - Visibility visibility = descriptor.getVisibility().normalize(); - return visibility != Visibilities.INTERNAL ? visibility.toString() + " ": ""; - } - - private static String renderType(JetType type, boolean shortNames) { - if (shortNames) return DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(type); - else return DescriptorRenderer.TEXT.renderType(type); - } - - private static void addReceiverParameter(CallableDescriptor descriptor, StringBuilder bodyBuilder) { - ReceiverParameterDescriptor receiverParameter = descriptor.getReceiverParameter(); - if (receiverParameter != null) { - bodyBuilder.append(receiverParameter.getType()).append("."); - } - } - - @NotNull - public static String createOverridenFunctionSignatureStringFromDescriptor( - @NotNull Project project, - @NotNull FunctionDescriptor descriptor, - boolean shortTypeNames - ) { - JetNamedFunction functionElement = createOverridenFunctionElementFromDescriptor(project, descriptor, shortTypeNames); - JetExpression bodyExpression = functionElement.getBodyExpression(); - assert bodyExpression != null : "createOverridenFunctionElementFromDescriptor should always return function with body."; - bodyExpression.replace(JetPsiFactory.createWhiteSpace(project)); - return functionElement.getText().trim(); - } - - @NotNull - public static JetNamedFunction createOverridenFunctionElementFromDescriptor( - @NotNull Project project, - @NotNull FunctionDescriptor descriptor, - boolean shortNames - ) { - StringBuilder bodyBuilder = new StringBuilder(); - bodyBuilder.append(displayableVisibility(descriptor)); - bodyBuilder.append("override fun "); - - List whereRestrictions = new ArrayList(); - if (!descriptor.getTypeParameters().isEmpty()) { - bodyBuilder.append("<"); - boolean first = true; - for (TypeParameterDescriptor param : descriptor.getTypeParameters()) { - if (!first) { - bodyBuilder.append(", "); - } - - bodyBuilder.append(param.getName()); - Set upperBounds = param.getUpperBounds(); - if (!upperBounds.isEmpty()) { - boolean firstUpperBound = true; - for (JetType upperBound : upperBounds) { - String upperBoundText = ": " + renderType(upperBound, shortNames); - if (!KotlinBuiltIns.getInstance().getDefaultBound().equals(upperBound)) { - if (firstUpperBound) { - bodyBuilder.append(upperBoundText); - } - else { - whereRestrictions.add(param.getName() + upperBoundText); - } - } - firstUpperBound = false; - } - } - - first = false; - } - bodyBuilder.append("> "); - } - - addReceiverParameter(descriptor, bodyBuilder); - - bodyBuilder.append(descriptor.getName()).append("("); - boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT; - StringBuilder delegationBuilder = new StringBuilder(); - if (isAbstractFun) { - delegationBuilder.append("throw UnsupportedOperationException()"); - } - else { - delegationBuilder.append("super<").append(descriptor.getContainingDeclaration().getName()); - delegationBuilder.append(">.").append(descriptor.getName()).append("("); - } - boolean first = true; - for (ValueParameterDescriptor parameterDescriptor : descriptor.getValueParameters()) { - if (!first) { - bodyBuilder.append(", "); - if (!isAbstractFun) { - delegationBuilder.append(", "); - } - } - first = false; - bodyBuilder.append(parameterDescriptor.getName()); - bodyBuilder.append(": "); - bodyBuilder.append(renderType(parameterDescriptor.getType(), shortNames)); - - if (!isAbstractFun) { - delegationBuilder.append(parameterDescriptor.getName()); - } - } - bodyBuilder.append(")"); - if (!isAbstractFun) { - delegationBuilder.append(")"); - } - JetType returnType = descriptor.getReturnType(); - KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); - - boolean returnsNotUnit = returnType != null && !builtIns.getUnitType().equals(returnType); - if (returnsNotUnit) { - bodyBuilder.append(": ").append(renderType(returnType, shortNames)); - } - if (!whereRestrictions.isEmpty()) { - bodyBuilder.append("\n").append("where ").append(StringUtil.join(whereRestrictions, ", ")); - } - bodyBuilder.append("{").append(returnsNotUnit && !isAbstractFun ? "return " : "").append(delegationBuilder.toString()).append("}"); - - return JetPsiFactory.createFunction(project, bodyBuilder.toString()); - } -} diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java index 71041cc5448..8517e139ff6 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java @@ -42,7 +42,7 @@ import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.actions.JetChangeFunctionSignatureAction; import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManagerUtil; -import org.jetbrains.jet.plugin.codeInsight.OverrideUtil; +import org.jetbrains.jet.plugin.codeInsight.FunctionSignatureUtil; import java.util.*; @@ -76,8 +76,8 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction> foo() - where B: Cloneable, B: Comparable { + override fun > foo() where B: Runnable, B: Cloneable, B: Comparable { throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/idea/testData/completion/basic/common/FunctionCompletionFormatting.kt b/idea/testData/completion/basic/common/FunctionCompletionFormatting.kt index fee9d01e429..e78f3533967 100644 --- a/idea/testData/completion/basic/common/FunctionCompletionFormatting.kt +++ b/idea/testData/completion/basic/common/FunctionCompletionFormatting.kt @@ -4,4 +4,4 @@ fun some() { tes } -// EXIST: test@test(a : jet.Int) \ No newline at end of file +// EXIST: test@test(a: jet.Int) \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/conflictingSubstitutions1.html b/idea/testData/diagnosticMessage/conflictingSubstitutions1.html index a18dcae0191..52cfa63ea2e 100644 --- a/idea/testData/diagnosticMessage/conflictingSubstitutions1.html +++ b/idea/testData/diagnosticMessage/conflictingSubstitutions1.html @@ -14,13 +14,13 @@ fun ( -l : MyList<in T>, +l: MyList<in T>, -t : T +t: T ) - : jet.Unit +: jet.Unit where E : java.lang.Cloneable, E : java.io.Closeable diff --git a/idea/testData/diagnosticMessage/conflictingSubstitutions2.html b/idea/testData/diagnosticMessage/conflictingSubstitutions2.html index 8e5947f6d40..61c7f6a3491 100644 --- a/idea/testData/diagnosticMessage/conflictingSubstitutions2.html +++ b/idea/testData/diagnosticMessage/conflictingSubstitutions2.html @@ -14,9 +14,9 @@ constructor ( -l : MyList<in T>, +l: MyList<in T>, -t : T +t: T ) diff --git a/idea/testData/diagnosticMessage/functionPlaceholder1.html b/idea/testData/diagnosticMessage/functionPlaceholder1.html index 9a7c9160a94..bb469c38083 100644 --- a/idea/testData/diagnosticMessage/functionPlaceholder1.html +++ b/idea/testData/diagnosticMessage/functionPlaceholder1.html @@ -12,11 +12,11 @@ fun ( -a : A<T, R> +a: A<T, R> ) - : A<T, R> +: A<T, R> diff --git a/idea/testData/diagnosticMessage/functionPlaceholder2.html b/idea/testData/diagnosticMessage/functionPlaceholder2.html index af0eba78cf3..d18f4dbc9a5 100644 --- a/idea/testData/diagnosticMessage/functionPlaceholder2.html +++ b/idea/testData/diagnosticMessage/functionPlaceholder2.html @@ -12,11 +12,11 @@ fun ( -a : A<T, R> +a: A<T, R> ) - : A<T, R> +: A<T, R> diff --git a/idea/testData/diagnosticMessage/functionPlaceholder3.html b/idea/testData/diagnosticMessage/functionPlaceholder3.html index 8a4bb1e036f..749513775b1 100644 --- a/idea/testData/diagnosticMessage/functionPlaceholder3.html +++ b/idea/testData/diagnosticMessage/functionPlaceholder3.html @@ -12,11 +12,11 @@ fun ( -a : A<T, R> +a: A<T, R> ) - : A<T, R> +: A<T, R> diff --git a/idea/testData/diagnosticMessage/upperBoundViolated1.html b/idea/testData/diagnosticMessage/upperBoundViolated1.html index 096ff9ff54d..640fe9725bf 100644 --- a/idea/testData/diagnosticMessage/upperBoundViolated1.html +++ b/idea/testData/diagnosticMessage/upperBoundViolated1.html @@ -14,13 +14,13 @@ fun ( -r : R, +r: R, -list : T +list: T ) - : jet.Unit +: jet.Unit is not satisfied: inferred type diff --git a/idea/testData/highlighter/deprecated/Function.kt b/idea/testData/highlighter/deprecated/Function.kt index f81917c2a38..bb97a13c835 100644 --- a/idea/testData/highlighter/deprecated/Function.kt +++ b/idea/testData/highlighter/deprecated/Function.kt @@ -3,7 +3,7 @@ fun test() { MyClass().test2() MyClass.test3() - test4(1, 2) + test4(1, 2) } deprecated("Use A instead") fun test1() { } diff --git a/idea/testData/highlighter/deprecated/Get.kt b/idea/testData/highlighter/deprecated/Get.kt index 8f1d3a179da..81efcb05a42 100644 --- a/idea/testData/highlighter/deprecated/Get.kt +++ b/idea/testData/highlighter/deprecated/Get.kt @@ -6,5 +6,5 @@ fun test() { val x1 = MyClass() val x2 = MyClass() - x1[x2] + x1[x2] } \ No newline at end of file diff --git a/idea/testData/highlighter/deprecated/Operation.kt b/idea/testData/highlighter/deprecated/Operation.kt index 84ef7ccff7e..f0f217e7c5f 100644 --- a/idea/testData/highlighter/deprecated/Operation.kt +++ b/idea/testData/highlighter/deprecated/Operation.kt @@ -20,19 +20,19 @@ fun test() { val x1 = MyClass() val x2 = MyClass() - x1 - x2 - x1 / x2 - x1 * x2 + x1 - x2 + x1 / x2 + x1 * x2 !x1 +x1 - x1 in x2 - x1 !in x2 + x1 in x2 + x1 !in x2 - x1 += x2 + x1 += x2 - x1 == x2 - x1 != x2 - x1 > x2 + x1 == x2 + x1 != x2 + x1 > x2 } \ No newline at end of file diff --git a/idea/testData/highlighter/deprecated/RangeTo.kt b/idea/testData/highlighter/deprecated/RangeTo.kt index 36e0141f9e0..082cfb19940 100644 --- a/idea/testData/highlighter/deprecated/RangeTo.kt +++ b/idea/testData/highlighter/deprecated/RangeTo.kt @@ -11,7 +11,7 @@ fun test() { val x1 = MyClass() val x2 = MyClass() - for (i in x1..x2) { + for (i in x1..x2) { } } diff --git a/idea/testData/libraries/decompiled/ClassWithAbstractAndOpenMembers.kt b/idea/testData/libraries/decompiled/ClassWithAbstractAndOpenMembers.kt index 7572f112f4d..9feb16bd1a3 100644 --- a/idea/testData/libraries/decompiled/ClassWithAbstractAndOpenMembers.kt +++ b/idea/testData/libraries/decompiled/ClassWithAbstractAndOpenMembers.kt @@ -4,19 +4,19 @@ package testData.libraries [[public abstract class ClassWithAbstractAndOpenMembers() { - [public abstract val abstractVal : jet.String] + [public abstract val abstractVal: jet.String] - [public abstract var abstractVar : jet.String] + [public abstract var abstractVar: jet.String] - [public open val openVal : jet.String] /* compiled code */ + [public open val openVal: jet.String] /* compiled code */ - [public open val openValWithGetter : jet.String] /* compiled code */ + [public open val openValWithGetter: jet.String] /* compiled code */ - [public open var openVar : jet.String] /* compiled code */ + [public open var openVar: jet.String] /* compiled code */ - [public open var openVarWithGetter : jet.String] /* compiled code */ + [public open var openVarWithGetter: jet.String] /* compiled code */ - [public abstract fun abstractFun() : jet.Unit] + [public abstract fun abstractFun(): jet.Unit] - [public open fun openFun() : jet.Unit { /* compiled code */ }] -}]] + [public open fun openFun(): jet.Unit { /* compiled code */ }] +}]] \ No newline at end of file diff --git a/idea/testData/libraries/decompiled/ClassWithConstructor.kt b/idea/testData/libraries/decompiled/ClassWithConstructor.kt index 71afa1ea8b9..bc875c2ce4b 100644 --- a/idea/testData/libraries/decompiled/ClassWithConstructor.kt +++ b/idea/testData/libraries/decompiled/ClassWithConstructor.kt @@ -3,6 +3,6 @@ package testData.libraries -[[public final class ClassWithConstructor(a : jet.String, b : jet.Any) { - [internal final val a : jet.String] /* compiled code */ +[[public final class ClassWithConstructor(a: jet.String, b: jet.Any) { + [internal final val a: jet.String] /* compiled code */ }]] diff --git a/idea/testData/libraries/decompiled/Color.kt b/idea/testData/libraries/decompiled/Color.kt index aea14443290..fd07142a18f 100644 --- a/idea/testData/libraries/decompiled/Color.kt +++ b/idea/testData/libraries/decompiled/Color.kt @@ -3,18 +3,18 @@ package testData.libraries -[[public final enum class Color(rgb : jet.Int) : jet.Enum { +[[public final enum class Color(rgb: jet.Int) : jet.Enum { public class object { - [public final val BLUE : testData.libraries.Color] /* compiled code */ + [public final val BLUE: testData.libraries.Color] /* compiled code */ - [public final val GREEN : testData.libraries.Color] /* compiled code */ + [public final val GREEN: testData.libraries.Color] /* compiled code */ - [public final val RED : testData.libraries.Color] /* compiled code */ + [public final val RED: testData.libraries.Color] /* compiled code */ - public final fun valueOf(value : jet.String) : testData.libraries.Color { /* compiled code */ } + public final fun valueOf(value: jet.String): testData.libraries.Color { /* compiled code */ } - public final fun values() : jet.Array { /* compiled code */ } + public final fun values(): jet.Array { /* compiled code */ } } - [internal final val rgb : jet.Int] /* compiled code */ -}]] + [internal final val rgb: jet.Int] /* compiled code */ +}]] \ No newline at end of file diff --git a/idea/testData/libraries/decompiled/LibrariesPackage.kt b/idea/testData/libraries/decompiled/LibrariesPackage.kt index 0e4546a2ac4..a358a20ce30 100644 --- a/idea/testData/libraries/decompiled/LibrariesPackage.kt +++ b/idea/testData/libraries/decompiled/LibrariesPackage.kt @@ -3,34 +3,34 @@ package testData.libraries -[public val globalVal : testData.libraries.Pair] /* compiled code */ +[public val globalVal: testData.libraries.Pair] /* compiled code */ -[public val globalValWithGetter : jet.Long] /* compiled code */ +[public val globalValWithGetter: jet.Long] /* compiled code */ -[public val jet.Int.exProp : jet.Int] /* compiled code */ +[public val jet.Int.exProp: jet.Int] /* compiled code */ -[public val jet.String.exProp : jet.String] /* compiled code */ +[public val jet.String.exProp: jet.String] /* compiled code */ -[public val testData.libraries.Pair.exProp : jet.String] /* compiled code */ +[public val testData.libraries.Pair.exProp: jet.String] /* compiled code */ -[public fun funWithTypeParam(t : T) : jet.Unit { /* compiled code */ }] +[public fun funWithTypeParam(t: T): jet.Unit { /* compiled code */ }] -[public fun funWithTypeParam(t : T) : jet.Unit { /* compiled code */ }] +[public fun funWithTypeParam(t: T): jet.Unit { /* compiled code */ }] -[public fun func() : jet.Unit { /* compiled code */ }] +[public fun func(): jet.Unit { /* compiled code */ }] -[public fun func(cs : jet.CharSequence) : jet.Unit { /* compiled code */ }] +[public fun func(cs: jet.CharSequence): jet.Unit { /* compiled code */ }] -[public fun func(a : jet.Int, b : jet.Int) : jet.Unit { /* compiled code */ }] +[public fun func(a: jet.Int, b: jet.Int): jet.Unit { /* compiled code */ }] -[public fun func(a : jet.Int, b : jet.String = /* compiled code */) : jet.Unit { /* compiled code */ }] +[public fun func(a: jet.Int, b: jet.String = /* compiled code */): jet.Unit { /* compiled code */ }] -[public fun func(str : jet.String) : jet.Unit { /* compiled code */ }] +[public fun func(str: jet.String): jet.Unit { /* compiled code */ }] -[public fun main(args : jet.Array) : jet.Unit { /* compiled code */ }] +[public fun main(args: jet.Array): jet.Unit { /* compiled code */ }] -[public fun processDouble(d : jet.Double) : jet.Unit { /* compiled code */ }] +[public fun processDouble(d: jet.Double): jet.Unit { /* compiled code */ }] -[public fun processDouble(d : testData.libraries.Double) : jet.Unit { /* compiled code */ }] +[public fun processDouble(d: testData.libraries.Double): jet.Unit { /* compiled code */ }] -[public fun T.filter(predicate : (T) -> jet.Boolean) : T? { /* compiled code */ }] \ No newline at end of file +[public fun T.filter(predicate: (T) -> jet.Boolean): T? { /* compiled code */ }] \ No newline at end of file diff --git a/idea/testData/libraries/decompiled/NamedObject.kt b/idea/testData/libraries/decompiled/NamedObject.kt index bb6b5a2bed2..d46a4ce2c7f 100644 --- a/idea/testData/libraries/decompiled/NamedObject.kt +++ b/idea/testData/libraries/decompiled/NamedObject.kt @@ -4,5 +4,5 @@ package testData.libraries [[public object NamedObject { - [public final val objectMember : jet.Int] /* compiled code */ + [public final val objectMember: jet.Int] /* compiled code */ }]] \ No newline at end of file diff --git a/idea/testData/libraries/decompiled/WithInnerAndObject.kt b/idea/testData/libraries/decompiled/WithInnerAndObject.kt index c2fc82de454..791935a9178 100644 --- a/idea/testData/libraries/decompiled/WithInnerAndObject.kt +++ b/idea/testData/libraries/decompiled/WithInnerAndObject.kt @@ -5,12 +5,12 @@ package testData.libraries [[public final class WithInnerAndObject() { public class object { - [internal final fun foo() : jet.Unit { /* compiled code */ }] + [internal final fun foo(): jet.Unit { /* compiled code */ }] } [[internal final class MyInner() { [internal trait MyInnerInner { - [internal abstract fun innerInnerMethod() : jet.Unit] + [internal abstract fun innerInnerMethod(): jet.Unit] }] }]] -}]] +}]] \ No newline at end of file diff --git a/idea/testData/quickfix/override/nothingToOverride/afterAddParameterMultiple.kt b/idea/testData/quickfix/override/nothingToOverride/afterAddParameterMultiple.kt index 65cd7fa672f..40d2ec95918 100644 --- a/idea/testData/quickfix/override/nothingToOverride/afterAddParameterMultiple.kt +++ b/idea/testData/quickfix/override/nothingToOverride/afterAddParameterMultiple.kt @@ -1,5 +1,5 @@ // "Change function signature..." "true" -// ERROR: Class 'B' must be declared abstract or implement abstract member
abstract fun f(a: jet.String): jet.Unit defined in A +// ERROR: Class 'B' must be declared abstract or implement abstract member
internal abstract fun f(a: jet.String): jet.Unit defined in A trait A { fun f(a: Int) fun f(a: String) diff --git a/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterMultiple.kt b/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterMultiple.kt index 5bdb7f456c9..ecb91dff3b5 100644 --- a/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterMultiple.kt +++ b/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterMultiple.kt @@ -1,5 +1,5 @@ // "Change function signature..." "true" -// ERROR: Class 'B' must be declared abstract or implement abstract member
abstract fun f(a: jet.String): jet.Unit defined in A +// ERROR: Class 'B' must be declared abstract or implement abstract member
internal abstract fun f(a: jet.String): jet.Unit defined in A trait A { fun f(a: Int) fun f(a: String) diff --git a/idea/testData/quickfix/override/typeMismatchOnOverride/beforeReturnTypeMismatchOnMultipleOverrideAmbiguity.kt b/idea/testData/quickfix/override/typeMismatchOnOverride/beforeReturnTypeMismatchOnMultipleOverrideAmbiguity.kt index 0065c209685..9e2d4065fde 100644 --- a/idea/testData/quickfix/override/typeMismatchOnOverride/beforeReturnTypeMismatchOnMultipleOverrideAmbiguity.kt +++ b/idea/testData/quickfix/override/typeMismatchOnOverride/beforeReturnTypeMismatchOnMultipleOverrideAmbiguity.kt @@ -1,7 +1,7 @@ // "Change 'B.foo' function return type to 'Int'" "false" // "Change 'B.foo' function return type to 'Long'" "false" // "Remove explicitly specified return type in 'B.foo' function" "false" -// ERROR: Return type is 'jet.String', which is not a subtype of overridden
internal abstract fun foo() : jet.Int defined in A +// ERROR: Return type is 'jet.String', which is not a subtype of overridden
internal abstract fun foo(): jet.Int defined in A abstract class A { abstract fun foo() : Int; }