From 800f289ba3fc7c0f31ce156c70c781ba7a64a6d8 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 26 Apr 2012 13:50:37 +0400 Subject: [PATCH 001/164] Some new icons - kotlin file icon --- .../org/jetbrains/jet/plugin/JetFileType.java | 6 +++++- .../jetbrains/jet/plugin/icons/kotlin_file.png | Bin 0 -> 1451 bytes idea/src/org/jetbrains/jet/plugin/JetIcons.java | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 idea/resources/org/jetbrains/jet/plugin/icons/kotlin_file.png diff --git a/compiler/frontend/src/org/jetbrains/jet/plugin/JetFileType.java b/compiler/frontend/src/org/jetbrains/jet/plugin/JetFileType.java index a87a177843f..0acd69cf4c0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/plugin/JetFileType.java +++ b/compiler/frontend/src/org/jetbrains/jet/plugin/JetFileType.java @@ -32,7 +32,7 @@ public class JetFileType extends LanguageFileType { @NotNull @Override protected Icon compute() { - return IconLoader.getIcon("/org/jetbrains/jet/plugin/icons/kotlin16x16.png"); + return IconLoader.getIcon("/org/jetbrains/jet/plugin/icons/kotlin_file.png"); } }; @@ -40,21 +40,25 @@ public class JetFileType extends LanguageFileType { super(JetLanguage.INSTANCE); } + @Override @NotNull public String getName() { return "Kotlin"; } + @Override @NotNull public String getDescription() { return "Kotlin"; } + @Override @NotNull public String getDefaultExtension() { return "kt"; } + @Override public Icon getIcon() { return myIcon.getValue(); } diff --git a/idea/resources/org/jetbrains/jet/plugin/icons/kotlin_file.png b/idea/resources/org/jetbrains/jet/plugin/icons/kotlin_file.png new file mode 100644 index 0000000000000000000000000000000000000000..00ca1072485284a63dbfbd0ef8a053b94c90f1a5 GIT binary patch literal 1451 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh*)icxGNo zet9uiy|1s8XI^nhVqS8pr;Du;&;-5A%oHn2S7Rq*Q)2@QS4&GnLsvs56H8YoHzRXb z3l|GBM<)}QUYGpj(%jU%5}4i;gkD3OdO=Acw*Y9fOKMSOS!#+~QGTuh*vnR#INf68 ziqkx(-V~f}F>=GHS0CsYeNesWZD5@ld~^FZv9_-N|7YsYwNK?u*~?Hke_zGfg2eMRZ`c|flH(R= zMaWOl$gnx4pp*6O&!wkpPdQAie(`GN2FurPr|;)kZ~r&3;^#|qW^;9R=a4O;&3)5; z$1a${=g90}_Mf%ww7tS(d6NpBD=w0IYDyg1V%Umw3)&dZwA4Gy{r}JL#rFL9#vx`l z?A{wU6&T;RVR@F#sI*XuVUx%j$roMw9sCyT*SfJ_zk^{mvt`?%Hpw{^u?$^T_dD<= zG3D_5Z=B`gb46m`zaOVRuxG5|2=H-@jcrO$X!^@{L{E6V(HEcl#||9&GQF|=qxRwL zUt4*e-jR&a|0I$BsPy3e{Q~Rn{8T@e@be$f;pumSB}M+}q$d3QHsRsnqy0VW9-2|5iiAGl_`I~O}OA>!D)^9SBZ95i@) zNWM+s?0=t&O~w*&4~-a>L^}5LHqLIIsMx%;sqylenFj;oS{^=neVwP?LPav|-LAvO z6m?j-PQ90iOJI5Bum8S&MxfophhL-l_wP6BNdIy2!1wEslfUm~JAeMZ_&b}l9~yec z51l(`CcBP3zU6 XUH;Xg$seD0fr?L0S3j3^P6 Date: Thu, 26 Apr 2012 14:46:04 +0400 Subject: [PATCH 002/164] Fix compiler --- idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java b/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java index b6336e54af4..a037ec1f356 100644 --- a/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java +++ b/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java @@ -327,7 +327,7 @@ public class JetCompiler implements TranslatingCompiler { try { String compilerClassName = "org.jetbrains.jet.cli.jvm.K2JVMCompiler"; Class kompiler = Class.forName(compilerClassName, true, loader); - Method exec = kompiler.getDeclaredMethod("exec", PrintStream.class, String[].class); + Method exec = kompiler.getMethod("exec", PrintStream.class, String[].class); String[] arguments = commandLineArguments(outputDir, scriptFile); @@ -337,7 +337,7 @@ public class JetCompiler implements TranslatingCompiler { Object rc = exec.invoke(kompiler.newInstance(), out, arguments); // exec() returns a K2JVMCompiler.ExitCode object, that class is not accessible here, // so we take it's contents through reflection - if ("org.jetbrains.jet.cli.jvm.K2JVMCompiler.ExitCode".equals(rc.getClass().getCanonicalName())) { + if ("org.jetbrains.jet.cli.common.ExitCode".equals(rc.getClass().getCanonicalName())) { return (Integer) rc.getClass().getMethod("getCode").invoke(rc); } else { From 136b07e7e13553a331fd07282d0fdb7cb20b7536 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 25 Apr 2012 20:08:38 +0400 Subject: [PATCH 003/164] Introduced the notion of "overriding" for value parameters Example: trait A { fun foo(a : Int) } class B : A { override fun foo(a : Int) {} } B.foo.a overrides A.foo.a --- .../lang/descriptors/FunctionDescriptorImpl.java | 5 +++-- .../jet/lang/descriptors/PropertyDescriptor.java | 5 +++-- .../descriptors/ValueParameterDescriptor.java | 12 ++++++++++++ .../ValueParameterDescriptorImpl.java | 16 +++++++++++++++- .../jet/lang/resolve/OverrideResolver.java | 8 +++----- .../jet/lang/resolve/OverridingUtil.java | 11 +++++++++++ 6 files changed, 47 insertions(+), 10 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java index 96c7cae015e..b71c09f28b6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java @@ -21,6 +21,7 @@ import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.resolve.scopes.receivers.TransientReceiver; @@ -47,7 +48,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i protected Modality modality; protected Visibility visibility; - protected final Set overriddenFunctions = Sets.newLinkedHashSet(); + protected final Set overriddenFunctions = Sets.newLinkedHashSet(); // LinkedHashSet is essential here private final FunctionDescriptor original; private final Kind kind; @@ -230,7 +231,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i ); if (copyOverrides) { for (FunctionDescriptor overriddenFunction : overriddenFunctions) { - substitutedDescriptor.addOverriddenDescriptor(overriddenFunction.substitute(substitutor)); + OverridingUtil.bindOverride(substitutedDescriptor, overriddenFunction.substitute(substitutor)); } } return substitutedDescriptor; 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 a7edd5d4ea5..fc8a496610d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.resolve.scopes.receivers.TransientReceiver; @@ -42,7 +43,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab private Visibility visibility; private final boolean isVar; private final boolean isObject; - private final Set overriddenProperties = Sets.newLinkedHashSet(); + private final Set overriddenProperties = Sets.newLinkedHashSet(); // LinkedHashSet is essential here private final PropertyDescriptor original; private final Kind kind; @@ -268,7 +269,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab if (copyOverrides) { for (PropertyDescriptor propertyDescriptor : overriddenProperties) { - substitutedDescriptor.addOverriddenDescriptor(propertyDescriptor.substitute(substitutor)); + OverridingUtil.bindOverride(substitutedDescriptor, propertyDescriptor.substitute(substitutor)); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptor.java index 5a3c4a17c52..4893e9f4598 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptor.java @@ -21,6 +21,8 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.Annotated; import org.jetbrains.jet.lang.types.JetType; +import java.util.Set; + /** * @author abreslav */ @@ -46,4 +48,14 @@ public interface ValueParameterDescriptor extends VariableDescriptor, Annotated @NotNull ValueParameterDescriptor copy(DeclarationDescriptor newOwner); + /** + * Parameter p1 overrides p2 iff + * a) their respective owners (function declarations) f1 override f2 + * b) p1 and p2 have the same indices in the owners' parameter lists + */ + @NotNull + @Override + Set getOverriddenDescriptors(); + + void addOverriddenDescriptor(@NotNull ValueParameterDescriptor overridden); } 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 09ff2883b3f..9928db66858 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ValueParameterDescriptorImpl.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.descriptors; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; @@ -24,6 +25,7 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; import java.util.List; +import java.util.Set; /** * @author abreslav @@ -34,6 +36,7 @@ public class ValueParameterDescriptorImpl extends VariableDescriptorImpl impleme private final boolean isVar; private final int index; private final ValueParameterDescriptor original; + private final Set overriddenDescriptors = Sets.newHashSet(); public ValueParameterDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, @@ -59,7 +62,7 @@ public class ValueParameterDescriptorImpl extends VariableDescriptorImpl impleme boolean isVar, @NotNull JetType outType, @Nullable JetType varargElementType - ) { + ) { super(containingDeclaration, annotations, original.getName(), outType); this.original = original; this.index = original.getIndex(); @@ -131,4 +134,15 @@ public class ValueParameterDescriptorImpl extends VariableDescriptorImpl impleme public Visibility getVisibility() { return Visibilities.LOCAL; } + + @NotNull + @Override + public Set getOverriddenDescriptors() { + return overriddenDescriptors; + } + + @Override + public void addOverriddenDescriptor(@NotNull ValueParameterDescriptor overridden) { + overriddenDescriptors.add(overridden); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index cb1e794bf8c..2884df035e7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -36,7 +36,6 @@ import javax.inject.Inject; import java.util.*; import static org.jetbrains.jet.lang.diagnostics.Errors.*; -import static org.jetbrains.jet.lang.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR; import static org.jetbrains.jet.lang.resolve.BindingContext.DELEGATED; /** @@ -176,7 +175,7 @@ public class OverrideResolver { for (CallableMemberDescriptor functionFromCurrent : functionsFromCurrent) { OverridingUtil.OverrideCompatibilityInfo.Result result = OverridingUtil.isOverridableBy(functionFromSupertype, functionFromCurrent).getResult(); if (result == OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE) { - functionFromCurrent.addOverriddenDescriptor(functionFromSupertype); + OverridingUtil.bindOverride(functionFromCurrent, functionFromSupertype); overrides = true; } else if (result == OverridingUtil.OverrideCompatibilityInfo.Result.CONFLICT) { @@ -186,14 +185,14 @@ public class OverrideResolver { for (CallableMemberDescriptor fakeOverride : fakeOverrideList) { if (OverridingUtil.isOverridableBy(functionFromSupertype, fakeOverride).getResult() == OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE) { - fakeOverride.addOverriddenDescriptor(functionFromSupertype); + OverridingUtil.bindOverride(fakeOverride, functionFromSupertype); overrides = true; } } if (!overrides) { CallableMemberDescriptor fakeOverride = functionFromSupertype.copy(current, false, CallableMemberDescriptor.Kind.FAKE_OVERRIDE, false); - fakeOverride.addOverriddenDescriptor(functionFromSupertype); + OverridingUtil.bindOverride(fakeOverride, functionFromSupertype); fakeOverrideList.add(fakeOverride); if (fakeOverrides != null) { fakeOverrides.add(fakeOverride); @@ -203,7 +202,6 @@ public class OverrideResolver { } } - private static MultiMap groupDescriptorsByName(Collection properties) { MultiMap r = new LinkedMultiMap(); for (T property : properties) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java index 4a3872c6945..d2a9429311e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -268,6 +268,17 @@ public class OverridingUtil { } } + public static void bindOverride(CallableMemberDescriptor fromCurrent, CallableMemberDescriptor fromSupertype) { + fromCurrent.addOverriddenDescriptor(fromSupertype); + + for (ValueParameterDescriptor parameterFromCurrent : fromCurrent.getValueParameters()) { + assert parameterFromCurrent.getIndex() < fromSupertype.getValueParameters().size() + : "An override relation between functions implies that they have the same number of value parameters"; + ValueParameterDescriptor parameterFromSupertype = fromSupertype.getValueParameters().get(parameterFromCurrent.getIndex()); + parameterFromCurrent.addOverriddenDescriptor(parameterFromSupertype); + } + } + public static class OverrideCompatibilityInfo { public enum Result { From 577918a11900e66638aed294327d7468ad402a7b Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 25 Apr 2012 20:19:01 +0400 Subject: [PATCH 004/164] Fixed the coding style * space after type cast * space in array initializer --- .idea/codeStyleSettings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml index b6d87385922..1a6acd9fda1 100644 --- a/.idea/codeStyleSettings.xml +++ b/.idea/codeStyleSettings.xml @@ -171,7 +171,7 @@