reordered name generation rules properly
This commit is contained in:
@@ -180,14 +180,14 @@ public class StaticContext {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Rule<JsName> namesAnnotatedAsStandard = new Rule<JsName>() {
|
Rule<JsName> namesAnnotatedAsLibraryHasUnobfuscatableNames = new Rule<JsName>() {
|
||||||
@Override
|
@Override
|
||||||
public JsName apply(@NotNull DeclarationDescriptor descriptor) {
|
public JsName apply(@NotNull DeclarationDescriptor descriptor) {
|
||||||
//TODO: refactor
|
//TODO: refactor
|
||||||
String name = null;
|
String name = null;
|
||||||
AnnotationDescriptor annotation = getAnnotationByName(descriptor, LIBRARY_FUNCTION_ANNOTATION_FQNAME);
|
AnnotationDescriptor annotation = getAnnotationByName(descriptor, LIBRARY_FUNCTION_ANNOTATION_FQNAME);
|
||||||
if (annotation != null) {
|
if (annotation != null) {
|
||||||
name = AnnotationsUtils.annotationStringParameter(descriptor, LIBRARY_FUNCTION_ANNOTATION_FQNAME);
|
name = AnnotationsUtils.getAnnotationStringParameter(descriptor, LIBRARY_FUNCTION_ANNOTATION_FQNAME);
|
||||||
name = (!name.isEmpty()) ? name : descriptor.getName();
|
name = (!name.isEmpty()) ? name : descriptor.getName();
|
||||||
} else {
|
} else {
|
||||||
ClassDescriptor containingClass = getContainingClass(descriptor);
|
ClassDescriptor containingClass = getContainingClass(descriptor);
|
||||||
@@ -229,20 +229,43 @@ public class StaticContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Rule<JsName> namesForNativeObjectsAreUnobfuscatable = new Rule<JsName>() {
|
||||||
|
@Override
|
||||||
|
public JsName apply(@NotNull DeclarationDescriptor descriptor) {
|
||||||
|
String name = null;
|
||||||
|
AnnotationDescriptor annotation = getAnnotationByName(descriptor, NATIVE_ANNOTATION_FQNAME);
|
||||||
|
if (annotation != null) {
|
||||||
|
name = AnnotationsUtils.getAnnotationStringParameter(descriptor, NATIVE_ANNOTATION_FQNAME);
|
||||||
|
name = (!name.isEmpty()) ? name : descriptor.getName();
|
||||||
|
} else {
|
||||||
|
ClassDescriptor containingClass = getContainingClass(descriptor);
|
||||||
|
if (containingClass == null) return null;
|
||||||
|
if (getAnnotationByName(containingClass, NATIVE_ANNOTATION_FQNAME) != null) {
|
||||||
|
name = descriptor.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (name != null) {
|
||||||
|
return getEnclosingScope(descriptor).declareUnobfuscatableName(name);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
Generator<JsName> nameGenerator = new Generator<JsName>();
|
Generator<JsName> nameGenerator = new Generator<JsName>();
|
||||||
nameGenerator.addRule(namesForStandardClasses);
|
nameGenerator.addRule(namesForStandardClasses);
|
||||||
nameGenerator.addRule(aliasOverridesNames);
|
nameGenerator.addRule(aliasOverridesNames);
|
||||||
|
nameGenerator.addRule(constructorHasTheSameNameAsTheClass);
|
||||||
|
nameGenerator.addRule(namesAnnotatedAsLibraryHasUnobfuscatableNames);
|
||||||
|
nameGenerator.addRule(namesForNativeObjectsAreUnobfuscatable);
|
||||||
nameGenerator.addRule(toStringHack);
|
nameGenerator.addRule(toStringHack);
|
||||||
nameGenerator.addRule(propertiesCorrespondToSpeciallyTreatedBackingFieldNames);
|
nameGenerator.addRule(propertiesCorrespondToSpeciallyTreatedBackingFieldNames);
|
||||||
nameGenerator.addRule(constructorHasTheSameNameAsTheClass);
|
|
||||||
nameGenerator.addRule(namesAnnotatedAsStandard);
|
|
||||||
nameGenerator.addRule(namespacesShouldBeDefinedInRootScope);
|
nameGenerator.addRule(namespacesShouldBeDefinedInRootScope);
|
||||||
nameGenerator.addRule(accessorsHasNamesWithSpecialPrefixes);
|
nameGenerator.addRule(accessorsHasNamesWithSpecialPrefixes);
|
||||||
nameGenerator.addRule(memberDeclarationsInsideParentsScope);
|
nameGenerator.addRule(memberDeclarationsInsideParentsScope);
|
||||||
return nameGenerator;
|
return nameGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
private NamingScope getEnclosingScope(DeclarationDescriptor descriptor) {
|
private NamingScope getEnclosingScope(@NotNull DeclarationDescriptor descriptor) {
|
||||||
DeclarationDescriptor containingDeclaration = getContainingDeclaration(descriptor);
|
DeclarationDescriptor containingDeclaration = getContainingDeclaration(descriptor);
|
||||||
return getScopeForDescriptor(containingDeclaration.getOriginal());
|
return getScopeForDescriptor(containingDeclaration.getOriginal());
|
||||||
}
|
}
|
||||||
@@ -275,7 +298,6 @@ public class StaticContext {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private Generator<JsNameRef> qualifierGenerator() {
|
private Generator<JsNameRef> qualifierGenerator() {
|
||||||
Generator<JsNameRef> qualifierGenerator = new Generator<JsNameRef>();
|
|
||||||
Rule<JsNameRef> namespacesHaveNoQualifiers = new Rule<JsNameRef>() {
|
Rule<JsNameRef> namespacesHaveNoQualifiers = new Rule<JsNameRef>() {
|
||||||
@Override
|
@Override
|
||||||
public JsNameRef apply(@NotNull DeclarationDescriptor descriptor) {
|
public JsNameRef apply(@NotNull DeclarationDescriptor descriptor) {
|
||||||
@@ -307,7 +329,7 @@ public class StaticContext {
|
|||||||
return getQualifierForDescriptor(containingClass);
|
return getQualifierForDescriptor(containingClass);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Rule<JsNameRef> annotatedObjectsHaveKotlinQualifier = new Rule<JsNameRef>() {
|
Rule<JsNameRef> libraryObjectsHaveKotlinQualifier = new Rule<JsNameRef>() {
|
||||||
|
|
||||||
//TODO: refactor by removing one annotation
|
//TODO: refactor by removing one annotation
|
||||||
@Override
|
@Override
|
||||||
@@ -334,7 +356,8 @@ public class StaticContext {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
qualifierGenerator.addRule(annotatedObjectsHaveKotlinQualifier);
|
Generator<JsNameRef> qualifierGenerator = new Generator<JsNameRef>();
|
||||||
|
qualifierGenerator.addRule(libraryObjectsHaveKotlinQualifier);
|
||||||
qualifierGenerator.addRule(membersOfAnnotatedClassesHaveKotlinQualifier);
|
qualifierGenerator.addRule(membersOfAnnotatedClassesHaveKotlinQualifier);
|
||||||
qualifierGenerator.addRule(constructorHaveTheSameQualifierAsTheClass);
|
qualifierGenerator.addRule(constructorHaveTheSameQualifierAsTheClass);
|
||||||
qualifierGenerator.addRule(namespacesHaveNoQualifiers);
|
qualifierGenerator.addRule(namespacesHaveNoQualifiers);
|
||||||
@@ -352,6 +375,11 @@ public class StaticContext {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public JsNameRef getQualifierForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
public JsNameRef getQualifierForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
||||||
|
//TODO: hack!
|
||||||
|
if (AnnotationsUtils.isNativeObject(descriptor)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return qualifiers.get(descriptor.getOriginal());
|
return qualifiers.get(descriptor.getOriginal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-2
@@ -2,11 +2,14 @@ package org.jetbrains.k2js.translate.context.declaration;
|
|||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
|
|
||||||
|
import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getContainingClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Pavel Talanov
|
* @author Pavel Talanov
|
||||||
*/
|
*/
|
||||||
@@ -28,8 +31,8 @@ public final class AnnotationsUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static String annotationStringParameter(@NotNull DeclarationDescriptor declarationDescriptor,
|
public static String getAnnotationStringParameter(@NotNull DeclarationDescriptor declarationDescriptor,
|
||||||
@NotNull String annotationFQName) {
|
@NotNull String annotationFQName) {
|
||||||
AnnotationDescriptor annotationDescriptor =
|
AnnotationDescriptor annotationDescriptor =
|
||||||
getAnnotationByName(declarationDescriptor, annotationFQName);
|
getAnnotationByName(declarationDescriptor, annotationFQName);
|
||||||
assert annotationDescriptor != null;
|
assert annotationDescriptor != null;
|
||||||
@@ -66,4 +69,15 @@ public final class AnnotationsUtils {
|
|||||||
assert annotationDeclaration != null : "Annotation supposed to have a declaration";
|
assert annotationDeclaration != null : "Annotation supposed to have a declaration";
|
||||||
return DescriptorUtils.getFQName(annotationDeclaration);
|
return DescriptorUtils.getFQName(annotationDeclaration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isNativeObject(@NotNull DeclarationDescriptor descriptor) {
|
||||||
|
if (getAnnotationByName(descriptor, NATIVE_ANNOTATION_FQNAME) != null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
ClassDescriptor containingClass = getContainingClass(descriptor);
|
||||||
|
if (containingClass == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return (getAnnotationByName(containingClass, NATIVE_ANNOTATION_FQNAME) != null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,9 +10,8 @@ import org.jetbrains.jet.lang.psi.JetQualifiedExpression;
|
|||||||
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
|
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
|
||||||
import org.jetbrains.k2js.translate.context.TranslationContext;
|
import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||||
import org.jetbrains.k2js.translate.context.declaration.AnnotationsUtils;
|
|
||||||
|
|
||||||
import static org.jetbrains.k2js.translate.context.declaration.AnnotationsUtils.getAnnotationByName;
|
import static org.jetbrains.k2js.translate.context.declaration.AnnotationsUtils.isNativeObject;
|
||||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForReferenceExpression;
|
import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForReferenceExpression;
|
||||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getResolvedCall;
|
import static org.jetbrains.k2js.translate.utils.BindingUtils.getResolvedCall;
|
||||||
import static org.jetbrains.k2js.translate.utils.PsiUtils.getSelectorAsSimpleName;
|
import static org.jetbrains.k2js.translate.utils.PsiUtils.getSelectorAsSimpleName;
|
||||||
@@ -27,7 +26,7 @@ public abstract class PropertyAccessTranslator extends AccessTranslator {
|
|||||||
public static PropertyAccessTranslator newInstance(@NotNull PropertyDescriptor descriptor,
|
public static PropertyAccessTranslator newInstance(@NotNull PropertyDescriptor descriptor,
|
||||||
@NotNull ResolvedCall<?> resolvedCall,
|
@NotNull ResolvedCall<?> resolvedCall,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
if (isNativeProperty(descriptor, context)) {
|
if (isNativeObject(descriptor)) {
|
||||||
return new NativePropertyAccessTranslator(descriptor, /*qualifier = */ null, context);
|
return new NativePropertyAccessTranslator(descriptor, /*qualifier = */ null, context);
|
||||||
} else {
|
} else {
|
||||||
return new KotlinPropertyAccessTranslator(descriptor, /*qualifier = */ null, /*backingFieldAccess = */ false,
|
return new KotlinPropertyAccessTranslator(descriptor, /*qualifier = */ null, /*backingFieldAccess = */ false,
|
||||||
@@ -40,7 +39,7 @@ public abstract class PropertyAccessTranslator extends AccessTranslator {
|
|||||||
@Nullable JsExpression qualifier,
|
@Nullable JsExpression qualifier,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
PropertyDescriptor propertyDescriptor = getPropertyDescriptor(expression, context);
|
PropertyDescriptor propertyDescriptor = getPropertyDescriptor(expression, context);
|
||||||
if (isNativeProperty(propertyDescriptor, context)) {
|
if (isNativeObject(propertyDescriptor)) {
|
||||||
return new NativePropertyAccessTranslator(propertyDescriptor, qualifier, context);
|
return new NativePropertyAccessTranslator(propertyDescriptor, qualifier, context);
|
||||||
}
|
}
|
||||||
ResolvedCall<?> resolvedCall = getResolvedCall(context.bindingContext(), expression);
|
ResolvedCall<?> resolvedCall = getResolvedCall(context.bindingContext(), expression);
|
||||||
@@ -109,11 +108,6 @@ public abstract class PropertyAccessTranslator extends AccessTranslator {
|
|||||||
return canBePropertyGetterCall(expression, context);
|
return canBePropertyGetterCall(expression, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isNativeProperty(@NotNull PropertyDescriptor propertyDescriptor,
|
|
||||||
@NotNull TranslationContext context) {
|
|
||||||
return getAnnotationByName(propertyDescriptor, AnnotationsUtils.NATIVE_ANNOTATION_FQNAME) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected PropertyAccessTranslator(@NotNull TranslationContext context) {
|
protected PropertyAccessTranslator(@NotNull TranslationContext context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user