From ec6b006bbb3a5615341c813f996c34abed716c61 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Sun, 12 Feb 2012 18:55:20 +0400 Subject: [PATCH] refactor qualifier generation logic --- .../k2js/translate/context/StaticContext.java | 70 +++++++++++++------ 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index 578ebf998df..b98e5fd932e 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -66,6 +66,8 @@ public class StaticContext { private final Generator scopes = new ScopeGenerator(); @NotNull private final Generator qualifiers = new QualifierGenerator(); + @NotNull + private final Generator qualifierIsNull = new QualifierIsNullGenerator(); //TODO: too many parameters in constructor @@ -124,23 +126,6 @@ public class StaticContext { return namingScope; } - @Nullable - public JsNameRef getQualifierForDescriptor(@NotNull DeclarationDescriptor descriptor) { - - //TODO: refactor - if (descriptor instanceof PropertyDescriptor) { - return null; - } - if (isVariableAsFunction(descriptor)) { - return null; - } - //TODO: hack! - if (AnnotationsUtils.isNativeObject(descriptor)) { - return null; - } - - return qualifiers.get(descriptor.getOriginal()); - } @NotNull public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) { @@ -150,7 +135,7 @@ public class StaticContext { } - private class NameGenerator extends Generator { + private final class NameGenerator extends Generator { public NameGenerator() { Rule aliasOverridesNames = new Rule() { @Override @@ -306,7 +291,7 @@ public class StaticContext { } - private class ScopeGenerator extends Generator { + private final class ScopeGenerator extends Generator { public ScopeGenerator() { Rule generateNewScopesForNamespaceDescriptors = new Rule() { @@ -328,11 +313,17 @@ public class StaticContext { addRule(generateNewScopesForNamespaceDescriptors); addRule(generateInnerScopesForMembers); } - } + @Nullable + public JsNameRef getQualifierForDescriptor(@NotNull DeclarationDescriptor descriptor) { + if (qualifierIsNull.get(descriptor) != null) { + return null; + } + return qualifiers.get(descriptor.getOriginal()); + } - private class QualifierGenerator extends Generator { + private final class QualifierGenerator extends Generator { public QualifierGenerator() { Rule namespacesHaveNoQualifiers = new Rule() { @Override @@ -395,4 +386,41 @@ public class StaticContext { addRule(namespaceLevelDeclarationsHaveEnclosingNamespacesNamesAsQualifier); } } + + private class QualifierIsNullGenerator extends Generator { + + private QualifierIsNullGenerator() { + Rule propertiesHaveNoQualifiers = new Rule() { + @Override + public Boolean apply(@NotNull DeclarationDescriptor descriptor) { + if (!(descriptor instanceof PropertyDescriptor)) { + return null; + } + return true; + } + }; + Rule variableAsFunctionsHaveNoQualifiers = new Rule() { + @Override + public Boolean apply(@NotNull DeclarationDescriptor descriptor) { + if (!isVariableAsFunction(descriptor)) { + return null; + } + return true; + } + }; + //TODO: hack! + Rule nativeObjectsHaveNoQualifiers = new Rule() { + @Override + public Boolean apply(@NotNull DeclarationDescriptor descriptor) { + if (!AnnotationsUtils.isNativeObject(descriptor)) { + return null; + } + return true; + } + }; + addRule(propertiesHaveNoQualifiers); + addRule(variableAsFunctionsHaveNoQualifiers); + addRule(nativeObjectsHaveNoQualifiers); + } + } } \ No newline at end of file