From 681627033b45b7541ef71cd497ffa3c47babf59a Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 31 Aug 2018 16:40:35 -0400 Subject: [PATCH] Issue #63 - Corrected finding Impl constructor. --- .../impl/InstanceCreationExpressionImpl.java | 8 ++++--- .../tests/Package_Library_Impl.alf | 22 ++++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/org.modeldriven.alf/src/org/modeldriven/alf/syntax/expressions/impl/InstanceCreationExpressionImpl.java b/org.modeldriven.alf/src/org/modeldriven/alf/syntax/expressions/impl/InstanceCreationExpressionImpl.java index f898ced37..179454b86 100644 --- a/org.modeldriven.alf/src/org/modeldriven/alf/syntax/expressions/impl/InstanceCreationExpressionImpl.java +++ b/org.modeldriven.alf/src/org/modeldriven/alf/syntax/expressions/impl/InstanceCreationExpressionImpl.java @@ -171,17 +171,19 @@ protected ElementReference deriveReferent() { // "Impl" inserted and resolving it makes sure // that all template bindings are handled // correctly. - implConstructor = qualification.getQualification(); + implConstructor = + qualification.getImpl().copy().getQualification(); if (implConstructor == null) { implConstructor = new QualifiedName(); implConstructor.getImpl(). setCurrentScope(namespaceDefinition); } implConstructor.getImpl().addName("Impl"). - addNameBinding(qualification.getUnqualifiedName()); + addNameBinding(qualification.getUnqualifiedName()); } - implConstructor.addNameBinding(unqualifiedName); + implConstructor.addNameBinding(unqualifiedName); + implConstructor.getImpl().setIsVisibleOnly(false); ElementReference implOperationReferent = implConstructor.getImpl().getOperationReferent(); diff --git a/org.modeldriven.alf/tests/Package_Library_Impl.alf b/org.modeldriven.alf/tests/Package_Library_Impl.alf index 80181c785..5124990dd 100644 --- a/org.modeldriven.alf/tests/Package_Library_Impl.alf +++ b/org.modeldriven.alf/tests/Package_Library_Impl.alf @@ -1,15 +1,17 @@ -package Library { - public abstract class Class { - @Create public Class() { } - } - - private package Impl { - public class Class specializes Library::Class { - @Create public Class() redefines Library::Class::Class { } +package Library_Impl { + public package Library { + public abstract class Class { + @Create public Class() { } } + + private package Impl { + public class Class specializes Library::Class { + @Create public Class() redefines Library::Class::Class { } + } + } } - public activity Instantiate(): Class { - return new Class(); + public activity Instantiate(): Library::Class { + return new Library::Class(); } } \ No newline at end of file