Skip to content

Commit c49207c

Browse files
committed
Merge pull request #246 from NumberFour/IDE-2391
IDE-2391: As an N4IDL smith I need first prototype of model version support
2 parents 386bb95 + 847e1ba commit c49207c

File tree

63 files changed

+2464
-2508
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2464
-2508
lines changed

plugins/eu.numberfour.n4js.model/emf-gen/eu/numberfour/n4js/n4JS/IdentifierRef.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
*/
88
package eu.numberfour.n4js.n4JS;
99

10+
import eu.numberfour.n4js.ts.typeRefs.Versionable;
11+
1012
import eu.numberfour.n4js.ts.types.IdentifiableElement;
1113

1214
/**
@@ -26,7 +28,7 @@
2628
* @model
2729
* @generated
2830
*/
29-
public interface IdentifierRef extends PrimaryExpression, StrictModeRelevant {
31+
public interface IdentifierRef extends PrimaryExpression, StrictModeRelevant, Versionable {
3032
/**
3133
* Returns the value of the '<em><b>Id</b></em>' reference.
3234
* <!-- begin-user-doc -->

plugins/eu.numberfour.n4js.model/emf-gen/eu/numberfour/n4js/n4JS/N4JSPackage.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4928,14 +4928,23 @@ public interface N4JSPackage extends EPackage {
49284928
*/
49294929
int IDENTIFIER_REF_FEATURE_COUNT = PRIMARY_EXPRESSION_FEATURE_COUNT + 3;
49304930

4931+
/**
4932+
* The operation id for the '<em>Get Version</em>' operation.
4933+
* <!-- begin-user-doc -->
4934+
* <!-- end-user-doc -->
4935+
* @generated
4936+
* @ordered
4937+
*/
4938+
int IDENTIFIER_REF___GET_VERSION = PRIMARY_EXPRESSION_OPERATION_COUNT + 0;
4939+
49314940
/**
49324941
* The operation id for the '<em>Is Valid Simple Assignment Target</em>' operation.
49334942
* <!-- begin-user-doc -->
49344943
* <!-- end-user-doc -->
49354944
* @generated
49364945
* @ordered
49374946
*/
4938-
int IDENTIFIER_REF___IS_VALID_SIMPLE_ASSIGNMENT_TARGET = PRIMARY_EXPRESSION_OPERATION_COUNT + 0;
4947+
int IDENTIFIER_REF___IS_VALID_SIMPLE_ASSIGNMENT_TARGET = PRIMARY_EXPRESSION_OPERATION_COUNT + 1;
49394948

49404949
/**
49414950
* The number of operations of the '<em>Identifier Ref</em>' class.
@@ -4944,7 +4953,7 @@ public interface N4JSPackage extends EPackage {
49444953
* @generated
49454954
* @ordered
49464955
*/
4947-
int IDENTIFIER_REF_OPERATION_COUNT = PRIMARY_EXPRESSION_OPERATION_COUNT + 1;
4956+
int IDENTIFIER_REF_OPERATION_COUNT = PRIMARY_EXPRESSION_OPERATION_COUNT + 2;
49484957

49494958
/**
49504959
* The meta object id for the '{@link eu.numberfour.n4js.n4JS.impl.StrictModeRelevantImpl <em>Strict Mode Relevant</em>}' class.

plugins/eu.numberfour.n4js.model/emf-gen/eu/numberfour/n4js/n4JS/impl/IdentifierRefImpl.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import eu.numberfour.n4js.n4JS.N4JSPackage;
1515
import eu.numberfour.n4js.n4JS.StrictModeRelevant;
1616

17+
import eu.numberfour.n4js.ts.typeRefs.TypeRefsPackage;
18+
import eu.numberfour.n4js.ts.typeRefs.Versionable;
19+
1720
import eu.numberfour.n4js.ts.types.IdentifiableElement;
1821

1922
import java.lang.reflect.InvocationTargetException;
@@ -205,6 +208,15 @@ public boolean isValidSimpleAssignmentTarget() {
205208
return true;
206209
}
207210

211+
/**
212+
* <!-- begin-user-doc -->
213+
* <!-- end-user-doc -->
214+
* @generated
215+
*/
216+
public int getVersion() {
217+
return 0;
218+
}
219+
208220
/**
209221
* <!-- begin-user-doc -->
210222
* <!-- end-user-doc -->
@@ -297,6 +309,11 @@ public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
297309
default: return -1;
298310
}
299311
}
312+
if (baseClass == Versionable.class) {
313+
switch (derivedFeatureID) {
314+
default: return -1;
315+
}
316+
}
300317
return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
301318
}
302319

@@ -313,6 +330,11 @@ public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
313330
default: return -1;
314331
}
315332
}
333+
if (baseClass == Versionable.class) {
334+
switch (baseFeatureID) {
335+
default: return -1;
336+
}
337+
}
316338
return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
317339
}
318340

@@ -334,6 +356,12 @@ public int eDerivedOperationID(int baseOperationID, Class<?> baseClass) {
334356
default: return -1;
335357
}
336358
}
359+
if (baseClass == Versionable.class) {
360+
switch (baseOperationID) {
361+
case TypeRefsPackage.VERSIONABLE___GET_VERSION: return N4JSPackage.IDENTIFIER_REF___GET_VERSION;
362+
default: return -1;
363+
}
364+
}
337365
return super.eDerivedOperationID(baseOperationID, baseClass);
338366
}
339367

@@ -347,6 +375,8 @@ public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTarg
347375
switch (operationID) {
348376
case N4JSPackage.IDENTIFIER_REF___IS_VALID_SIMPLE_ASSIGNMENT_TARGET:
349377
return isValidSimpleAssignmentTarget();
378+
case N4JSPackage.IDENTIFIER_REF___GET_VERSION:
379+
return getVersion();
350380
}
351381
return super.eInvoke(operationID, arguments);
352382
}

plugins/eu.numberfour.n4js.model/emf-gen/eu/numberfour/n4js/n4JS/impl/N4JSPackageImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6816,6 +6816,7 @@ public void initializePackageContents() {
68166816
parenExpressionEClass.getESuperTypes().add(this.getPrimaryExpression());
68176817
identifierRefEClass.getESuperTypes().add(this.getPrimaryExpression());
68186818
identifierRefEClass.getESuperTypes().add(this.getStrictModeRelevant());
6819+
identifierRefEClass.getESuperTypes().add(theTypeRefsPackage.getVersionable());
68196820
superLiteralEClass.getESuperTypes().add(this.getPrimaryExpression());
68206821
thisLiteralEClass.getESuperTypes().add(this.getPrimaryExpression());
68216822
thisLiteralEClass.getESuperTypes().add(this.getStrictModeRelevant());

plugins/eu.numberfour.n4js.model/emf-gen/eu/numberfour/n4js/n4JS/util/N4JSAdapterFactory.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
import eu.numberfour.n4js.n4JS.*;
1111

12+
import eu.numberfour.n4js.ts.typeRefs.Versionable;
13+
1214
import eu.numberfour.n4js.ts.types.IdentifiableElement;
1315
import eu.numberfour.n4js.ts.types.TypableElement;
1416

@@ -716,6 +718,10 @@ public Adapter caseIdentifiableElement(IdentifiableElement object) {
716718
return createIdentifiableElementAdapter();
717719
}
718720
@Override
721+
public Adapter caseVersionable(Versionable object) {
722+
return createVersionableAdapter();
723+
}
724+
@Override
719725
public Adapter defaultCase(EObject object) {
720726
return createEObjectAdapter();
721727
}
@@ -2975,6 +2981,20 @@ public Adapter createIdentifiableElementAdapter() {
29752981
return null;
29762982
}
29772983

2984+
/**
2985+
* Creates a new adapter for an object of class '{@link eu.numberfour.n4js.ts.typeRefs.Versionable <em>Versionable</em>}'.
2986+
* <!-- begin-user-doc -->
2987+
* This default implementation returns null so that we can easily ignore cases;
2988+
* it's useful to ignore a case when inheritance will catch all the cases anyway.
2989+
* <!-- end-user-doc -->
2990+
* @return the new adapter.
2991+
* @see eu.numberfour.n4js.ts.typeRefs.Versionable
2992+
* @generated
2993+
*/
2994+
public Adapter createVersionableAdapter() {
2995+
return null;
2996+
}
2997+
29782998
/**
29792999
* Creates a new adapter for the default case.
29803000
* <!-- begin-user-doc -->

plugins/eu.numberfour.n4js.model/emf-gen/eu/numberfour/n4js/n4JS/util/N4JSSwitch.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
import eu.numberfour.n4js.n4JS.*;
1111

12+
import eu.numberfour.n4js.ts.typeRefs.Versionable;
13+
1214
import eu.numberfour.n4js.ts.types.IdentifiableElement;
1315
import eu.numberfour.n4js.ts.types.TypableElement;
1416

@@ -693,6 +695,7 @@ protected T doSwitch(int classifierID, EObject theEObject) {
693695
T result = caseIdentifierRef(identifierRef);
694696
if (result == null) result = casePrimaryExpression(identifierRef);
695697
if (result == null) result = caseStrictModeRelevant(identifierRef);
698+
if (result == null) result = caseVersionable(identifierRef);
696699
if (result == null) result = caseExpression(identifierRef);
697700
if (result == null) result = caseTypableElement(identifierRef);
698701
if (result == null) result = defaultCase(theEObject);
@@ -4055,6 +4058,21 @@ public T caseIdentifiableElement(IdentifiableElement object) {
40554058
return null;
40564059
}
40574060

4061+
/**
4062+
* Returns the result of interpreting the object as an instance of '<em>Versionable</em>'.
4063+
* <!-- begin-user-doc -->
4064+
* This implementation returns null;
4065+
* returning a non-null result will terminate the switch.
4066+
* <!-- end-user-doc -->
4067+
* @param object the target of the switch.
4068+
* @return the result of interpreting the object as an instance of '<em>Versionable</em>'.
4069+
* @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
4070+
* @generated
4071+
*/
4072+
public T caseVersionable(Versionable object) {
4073+
return null;
4074+
}
4075+
40584076
/**
40594077
* Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
40604078
* <!-- begin-user-doc -->

plugins/eu.numberfour.n4js.model/model/N4JS.xcore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ class ParenExpression extends PrimaryExpression {
890890
}
891891
}
892892

893-
class IdentifierRef extends PrimaryExpression, StrictModeRelevant {
893+
class IdentifierRef extends PrimaryExpression, StrictModeRelevant, eu.numberfour.n4js.ts.typeRefs.Versionable {
894894
refers IdentifiableElement ^id
895895
transient String idAsText
896896
/**

plugins/eu.numberfour.n4js.transpiler/emf-gen/eu/numberfour/n4js/transpiler/im/ImPackage.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,15 @@ public interface ImPackage extends EPackage {
608608
*/
609609
int IDENTIFIER_REF_IM_FEATURE_COUNT = N4JSPackage.IDENTIFIER_REF_FEATURE_COUNT + 1;
610610

611+
/**
612+
* The operation id for the '<em>Get Version</em>' operation.
613+
* <!-- begin-user-doc -->
614+
* <!-- end-user-doc -->
615+
* @generated
616+
* @ordered
617+
*/
618+
int IDENTIFIER_REF_IM___GET_VERSION = N4JSPackage.IDENTIFIER_REF___GET_VERSION;
619+
611620
/**
612621
* The operation id for the '<em>Is Valid Simple Assignment Target</em>' operation.
613622
* <!-- begin-user-doc -->
@@ -1025,13 +1034,13 @@ public interface ImPackage extends EPackage {
10251034
int PARAMETERIZED_TYPE_REF_IM___GET_STRUCTURAL_MEMBERS = TypeRefsPackage.PARAMETERIZED_TYPE_REF___GET_STRUCTURAL_MEMBERS;
10261035

10271036
/**
1028-
* The operation id for the '<em>Get Referenced Version</em>' operation.
1037+
* The operation id for the '<em>Get Version</em>' operation.
10291038
* <!-- begin-user-doc -->
10301039
* <!-- end-user-doc -->
10311040
* @generated
10321041
* @ordered
10331042
*/
1034-
int PARAMETERIZED_TYPE_REF_IM___GET_REFERENCED_VERSION = TypeRefsPackage.PARAMETERIZED_TYPE_REF___GET_REFERENCED_VERSION;
1043+
int PARAMETERIZED_TYPE_REF_IM___GET_VERSION = TypeRefsPackage.PARAMETERIZED_TYPE_REF___GET_VERSION;
10351044

10361045
/**
10371046
* The operation id for the '<em>Get Modifiers As String</em>' operation.
@@ -1395,13 +1404,13 @@ public interface ImPackage extends EPackage {
13951404
int PARAMETERIZED_TYPE_REF_STRUCTURAL_IM___IS_BOTTOM_TYPE = PARAMETERIZED_TYPE_REF_IM___IS_BOTTOM_TYPE;
13961405

13971406
/**
1398-
* The operation id for the '<em>Get Referenced Version</em>' operation.
1407+
* The operation id for the '<em>Get Version</em>' operation.
13991408
* <!-- begin-user-doc -->
14001409
* <!-- end-user-doc -->
14011410
* @generated
14021411
* @ordered
14031412
*/
1404-
int PARAMETERIZED_TYPE_REF_STRUCTURAL_IM___GET_REFERENCED_VERSION = PARAMETERIZED_TYPE_REF_IM___GET_REFERENCED_VERSION;
1413+
int PARAMETERIZED_TYPE_REF_STRUCTURAL_IM___GET_VERSION = PARAMETERIZED_TYPE_REF_IM___GET_VERSION;
14051414

14061415
/**
14071416
* The operation id for the '<em>Get Modifiers As String</em>' operation.

plugins/eu.numberfour.n4js.transpiler/emf-gen/eu/numberfour/n4js/transpiler/im/util/ImAdapterFactory.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
import eu.numberfour.n4js.ts.typeRefs.StructuralTypeRef;
4949
import eu.numberfour.n4js.ts.typeRefs.TypeArgument;
5050
import eu.numberfour.n4js.ts.typeRefs.TypeRef;
51-
51+
import eu.numberfour.n4js.ts.typeRefs.Versionable;
5252
import eu.numberfour.n4js.ts.types.TypableElement;
5353

5454
import org.eclipse.emf.common.notify.Adapter;
@@ -215,6 +215,10 @@ public Adapter caseStrictModeRelevant(StrictModeRelevant object) {
215215
return createStrictModeRelevantAdapter();
216216
}
217217
@Override
218+
public Adapter caseVersionable(Versionable object) {
219+
return createVersionableAdapter();
220+
}
221+
@Override
218222
public Adapter caseIdentifierRef(IdentifierRef object) {
219223
return createIdentifierRefAdapter();
220224
}
@@ -712,6 +716,20 @@ public Adapter createStrictModeRelevantAdapter() {
712716
return null;
713717
}
714718

719+
/**
720+
* Creates a new adapter for an object of class '{@link eu.numberfour.n4js.ts.typeRefs.Versionable <em>Versionable</em>}'.
721+
* <!-- begin-user-doc -->
722+
* This default implementation returns null so that we can easily ignore cases;
723+
* it's useful to ignore a case when inheritance will catch all the cases anyway.
724+
* <!-- end-user-doc -->
725+
* @return the new adapter.
726+
* @see eu.numberfour.n4js.ts.typeRefs.Versionable
727+
* @generated
728+
*/
729+
public Adapter createVersionableAdapter() {
730+
return null;
731+
}
732+
715733
/**
716734
* Creates a new adapter for an object of class '{@link eu.numberfour.n4js.n4JS.IdentifierRef <em>Identifier Ref</em>}'.
717735
* <!-- begin-user-doc -->

plugins/eu.numberfour.n4js.transpiler/emf-gen/eu/numberfour/n4js/transpiler/im/util/ImSwitch.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
import eu.numberfour.n4js.ts.typeRefs.StructuralTypeRef;
4949
import eu.numberfour.n4js.ts.typeRefs.TypeArgument;
5050
import eu.numberfour.n4js.ts.typeRefs.TypeRef;
51-
51+
import eu.numberfour.n4js.ts.typeRefs.Versionable;
5252
import eu.numberfour.n4js.ts.types.TypableElement;
5353

5454
import org.eclipse.emf.ecore.EObject;
@@ -177,6 +177,7 @@ protected T doSwitch(int classifierID, EObject theEObject) {
177177
if (result == null) result = caseReferencingElementExpression_IM(identifierRef_IM);
178178
if (result == null) result = casePrimaryExpression(identifierRef_IM);
179179
if (result == null) result = caseStrictModeRelevant(identifierRef_IM);
180+
if (result == null) result = caseVersionable(identifierRef_IM);
180181
if (result == null) result = caseReferencingElement_IM(identifierRef_IM);
181182
if (result == null) result = caseExpression(identifierRef_IM);
182183
if (result == null) result = caseTypableElement(identifierRef_IM);
@@ -204,6 +205,7 @@ protected T doSwitch(int classifierID, EObject theEObject) {
204205
if (result == null) result = caseStaticBaseTypeRef(parameterizedTypeRef_IM);
205206
if (result == null) result = caseTypeRef(parameterizedTypeRef_IM);
206207
if (result == null) result = caseTypeArgument(parameterizedTypeRef_IM);
208+
if (result == null) result = caseVersionable(parameterizedTypeRef_IM);
207209
if (result == null) result = defaultCase(theEObject);
208210
return result;
209211
}
@@ -219,6 +221,7 @@ protected T doSwitch(int classifierID, EObject theEObject) {
219221
if (result == null) result = caseStaticBaseTypeRef(parameterizedTypeRefStructural_IM);
220222
if (result == null) result = caseTypeRef(parameterizedTypeRefStructural_IM);
221223
if (result == null) result = caseTypeArgument(parameterizedTypeRefStructural_IM);
224+
if (result == null) result = caseVersionable(parameterizedTypeRefStructural_IM);
222225
if (result == null) result = defaultCase(theEObject);
223226
return result;
224227
}
@@ -701,6 +704,21 @@ public T caseStrictModeRelevant(StrictModeRelevant object) {
701704
return null;
702705
}
703706

707+
/**
708+
* Returns the result of interpreting the object as an instance of '<em>Versionable</em>'.
709+
* <!-- begin-user-doc -->
710+
* This implementation returns null;
711+
* returning a non-null result will terminate the switch.
712+
* <!-- end-user-doc -->
713+
* @param object the target of the switch.
714+
* @return the result of interpreting the object as an instance of '<em>Versionable</em>'.
715+
* @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
716+
* @generated
717+
*/
718+
public T caseVersionable(Versionable object) {
719+
return null;
720+
}
721+
704722
/**
705723
* Returns the result of interpreting the object as an instance of '<em>Identifier Ref</em>'.
706724
* <!-- begin-user-doc -->

plugins/eu.numberfour.n4js.ts.model/emf-gen/eu/numberfour/n4js/ts/typeRefs/BoundThisTypeRef.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,16 @@ public interface BoundThisTypeRef extends ThisTypeRef, StructuralTypeRef {
172172
*/
173173
EList<TStructMember> getStructuralMembers();
174174

175+
/**
176+
* <!-- begin-user-doc -->
177+
* <!-- end-user-doc -->
178+
* <!-- begin-model-doc -->
179+
* Override VersionedElement#getVersion() to return the version of the actual this type reference.
180+
* <!-- end-model-doc -->
181+
* @model kind="operation" unique="false"
182+
* annotation="http://www.eclipse.org/emf/2002/GenModel body='<%eu.numberfour.n4js.ts.typeRefs.ParameterizedTypeRef%> _actualThisTypeRef = this.getActualThisTypeRef();\nreturn _actualThisTypeRef.getVersion();'"
183+
* @generated
184+
*/
185+
int getVersion();
186+
175187
} // BoundThisTypeRef

0 commit comments

Comments
 (0)