diff --git a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index 97356add830..7d2d8fea65f 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -202,9 +202,38 @@ public class StaticContext { return null; } }; + Rule propertiesCorrespondToSpeciallyTreatedBackingFieldNames = new Rule() { + @Override + public JsName apply(@NotNull DeclarationDescriptor descriptor) { + if (!(descriptor instanceof PropertyDescriptor)) { + return null; + } + NamingScope enclosingScope = getEnclosingScope(descriptor); + return enclosingScope.declareObfuscatableName(Namer.getKotlinBackingFieldName(descriptor.getName())); + } + }; + //TODO: hack! + Rule toStringHack = new Rule() { + @Override + public JsName apply(@NotNull DeclarationDescriptor descriptor) { + if (!(descriptor instanceof FunctionDescriptor)) { + return null; + } + if (!descriptor.getName().equals("toString")) { + return null; + } + if (((FunctionDescriptor) descriptor).getValueParameters().isEmpty()) { + return getEnclosingScope(descriptor).declareUnobfuscatableName("toString"); + } + return null; + } + + }; Generator nameGenerator = new Generator(); nameGenerator.addRule(namesForStandardClasses); nameGenerator.addRule(aliasOverridesNames); + nameGenerator.addRule(toStringHack); + nameGenerator.addRule(propertiesCorrespondToSpeciallyTreatedBackingFieldNames); nameGenerator.addRule(constructorHasTheSameNameAsTheClass); nameGenerator.addRule(namesAnnotatedAsStandard); nameGenerator.addRule(namespacesShouldBeDefinedInRootScope); @@ -278,7 +307,7 @@ public class StaticContext { return getQualifierForDescriptor(containingClass); } }; - Rule annonatedObjectsHaveKotlinQualifier = new Rule() { + Rule annotatedObjectsHaveKotlinQualifier = new Rule() { //TODO: refactor by removing one annotation @Override @@ -305,7 +334,7 @@ public class StaticContext { return null; } }; - qualifierGenerator.addRule(annonatedObjectsHaveKotlinQualifier); + qualifierGenerator.addRule(annotatedObjectsHaveKotlinQualifier); qualifierGenerator.addRule(membersOfAnnotatedClassesHaveKotlinQualifier); qualifierGenerator.addRule(constructorHaveTheSameQualifierAsTheClass); qualifierGenerator.addRule(namespacesHaveNoQualifiers);