Array test passes.
This commit is contained in:
@@ -19,14 +19,6 @@ public final class DeclarationVisitor extends DeclarationDescriptorVisitor<Void,
|
|||||||
this.declarations = declarations;
|
this.declarations = declarations;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
|
|
||||||
DeclarationContext classContext = declareClass(descriptor, context);
|
|
||||||
declareClassConstructor(descriptor, context);
|
|
||||||
declareClassMembers(descriptor, classContext);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private DeclarationContext declareClass(@NotNull ClassDescriptor descriptor,
|
private DeclarationContext declareClass(@NotNull ClassDescriptor descriptor,
|
||||||
@NotNull DeclarationContext context) {
|
@NotNull DeclarationContext context) {
|
||||||
@@ -57,6 +49,15 @@ public final class DeclarationVisitor extends DeclarationDescriptorVisitor<Void,
|
|||||||
return declareName(descriptor, context, descriptor.getName());
|
return declareName(descriptor, context, descriptor.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
|
||||||
|
DeclarationContext classContext = declareClass(descriptor, context);
|
||||||
|
declareClassConstructor(descriptor, context);
|
||||||
|
declareClassMembers(descriptor, classContext);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private void declareClassMembers(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
|
private void declareClassMembers(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
|
||||||
for (DeclarationDescriptor memberDescriptor :
|
for (DeclarationDescriptor memberDescriptor :
|
||||||
descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
|
descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
|
||||||
|
|||||||
@@ -39,11 +39,13 @@ public final class Declarations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: provide a mechanism to do intrinsics
|
//TODO: provide a mechanism to do intrinsics
|
||||||
public void extractStandardLibrary(@NotNull JetStandardLibrary standardLibrary) {
|
public void extractStandardLibrary(@NotNull JetStandardLibrary standardLibrary,
|
||||||
|
@NotNull JsNameRef standardLibraryObjectName) {
|
||||||
DeclarationVisitor visitor = new DeclarationVisitor(this);
|
DeclarationVisitor visitor = new DeclarationVisitor(this);
|
||||||
for (DeclarationDescriptor descriptor :
|
for (DeclarationDescriptor descriptor :
|
||||||
standardLibrary.getLibraryScope().getAllDescriptors()) {
|
standardLibrary.getLibraryScope().getAllDescriptors()) {
|
||||||
descriptor.accept(visitor, DeclarationContext.rootContext(rootScope, null));
|
descriptor.accept(visitor, DeclarationContext.rootContext(rootScope,
|
||||||
|
standardLibraryObjectName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,12 +68,12 @@ public final class Declarations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasQualifier(@NotNull DeclarationDescriptor descriptor) {
|
public boolean hasQualifier(@NotNull DeclarationDescriptor descriptor) {
|
||||||
return (descriptorToQualifierMap.get(descriptor) != null);
|
return (descriptorToQualifierMap.get(descriptor.getOriginal()) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsNameRef getQualifier(@NotNull DeclarationDescriptor descriptor) {
|
public JsNameRef getQualifier(@NotNull DeclarationDescriptor descriptor) {
|
||||||
JsNameRef qualifier = descriptorToQualifierMap.get(descriptor);
|
JsNameRef qualifier = descriptorToQualifierMap.get(descriptor.getOriginal());
|
||||||
assert qualifier != null : "Cannot be null. Use hasQualifier to check.";
|
assert qualifier != null : "Cannot be null. Use hasQualifier to check.";
|
||||||
return qualifier;
|
return qualifier;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ public final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @Nullable Void nothing) {
|
public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @Nullable Void nothing) {
|
||||||
intrinsics.declareIntrinsic(descriptor);
|
if (!intrinsics.isIntrinsic(descriptor)) {
|
||||||
|
intrinsics.declareIntrinsic(descriptor);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public final class Intrinsics {
|
|||||||
|
|
||||||
public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) {
|
public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) {
|
||||||
if (descriptor instanceof FunctionDescriptor) {
|
if (descriptor instanceof FunctionDescriptor) {
|
||||||
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
|
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor.getOriginal();
|
||||||
return descriptorToIntrinsicMap.containsKey(functionDescriptor);
|
return descriptorToIntrinsicMap.containsKey(functionDescriptor);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -86,10 +86,12 @@ public final class Translation {
|
|||||||
|
|
||||||
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
|
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
|
||||||
@NotNull JetNamespace namespace, @NotNull Project project) {
|
@NotNull JetNamespace namespace, @NotNull Project project) {
|
||||||
|
//TODO: move some of the code somewhere
|
||||||
JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project);
|
JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project);
|
||||||
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
|
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
|
||||||
StaticContext staticContext = StaticContext.generateStaticContext(standardLibrary, bindingContext);
|
StaticContext staticContext = StaticContext.generateStaticContext(standardLibrary, bindingContext);
|
||||||
staticContext.getDeclarations().extractStandardLibrary(standardLibrary);
|
staticContext.getDeclarations().
|
||||||
|
extractStandardLibrary(standardLibrary, staticContext.getNamer().kotlinObject());
|
||||||
staticContext.getDeclarations().extractDeclarations(descriptor);
|
staticContext.getDeclarations().extractDeclarations(descriptor);
|
||||||
JsBlock block = staticContext.getProgram().getFragmentBlock(0);
|
JsBlock block = staticContext.getProgram().getFragmentBlock(0);
|
||||||
TranslationContext context = TranslationContext.rootContext(staticContext);
|
TranslationContext context = TranslationContext.rootContext(staticContext);
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ public final class BinaryOperationTranslator extends OperationTranslator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: refactor
|
||||||
@NotNull
|
@NotNull
|
||||||
private JsExpression asBinaryOperation() {
|
private JsExpression asBinaryOperation() {
|
||||||
if (isPropertyOnTheLeft && OperatorTable.isAssignment(getOperationToken())) {
|
if (isPropertyOnTheLeft && OperatorTable.isAssignment(getOperationToken())) {
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ public class ReferenceTranslator extends AbstractTranslator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
//TODO: make this process simpler and clearer
|
||||||
public JsExpression translateSimpleName() {
|
public JsExpression translateSimpleName() {
|
||||||
tryResolveAsPropertyAccess();
|
tryResolveAsPropertyAccess();
|
||||||
tryResolveAsThisQualifiedExpression();
|
tryResolveAsThisQualifiedExpression();
|
||||||
|
|||||||
@@ -120,6 +120,11 @@ public final class Namer {
|
|||||||
return reference;
|
return reference;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JsNameRef kotlinObject() {
|
||||||
|
return kotlinName.makeRef();
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsName declareStandardClass(@NotNull String name) {
|
public JsName declareStandardClass(@NotNull String name) {
|
||||||
return kotlinScope.declareName(name);
|
return kotlinScope.declareName(name);
|
||||||
|
|||||||
Reference in New Issue
Block a user