Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 146263 Details for
Bug 288040
[parser] OCL 2.1 grammar precedence rule changes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Fix for Xor, Or, And precedence
XorAndOr.patch (text/plain), 39.25 KB, created by
Ed Willink
on 2009-09-02 04:16:57 EDT
(
hide
)
Description:
Fix for Xor, Or, And precedence
Filename:
MIME Type:
Creator:
Ed Willink
Created:
2009-09-02 04:16:57 EDT
Size:
39.25 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ocl.uml.tests >Index: src/org/eclipse/ocl/uml/tests/PrecedenceTest.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/tests/org.eclipse.ocl.uml.tests/src/org/eclipse/ocl/uml/tests/PrecedenceTest.java,v >retrieving revision 1.5 >diff -u -r1.5 PrecedenceTest.java >--- src/org/eclipse/ocl/uml/tests/PrecedenceTest.java 28 Sep 2008 17:32:44 -0000 1.5 >+++ src/org/eclipse/ocl/uml/tests/PrecedenceTest.java 2 Sep 2009 08:13:44 -0000 >@@ -1,7 +1,7 @@ > /** > * <copyright> > * >- * Copyright (c) 2005, 2008 IBM Corporation, Zeligsoft Inc., and others. >+ * Copyright (c) 2005, 2009 IBM Corporation, Zeligsoft Inc., and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -10,6 +10,7 @@ > * Contributors: > * IBM - Initial API and implementation > * Zeligsoft - Bug 248869 >+ * E.D.Willink - Bug 288040 xor/or/and > * > * </copyright> > * >@@ -24,10 +25,15 @@ > import org.eclipse.emf.common.util.URI; > import org.eclipse.emf.ecore.resource.Resource; > import org.eclipse.emf.ecore.resource.impl.ResourceImpl; >+import org.eclipse.ocl.ParserException; >+import org.eclipse.ocl.SemanticException; > import org.eclipse.ocl.expressions.LetExp; > import org.eclipse.ocl.expressions.OCLExpression; > import org.eclipse.ocl.expressions.OperationCallExp; > import org.eclipse.ocl.expressions.PropertyCallExp; >+import org.eclipse.ocl.internal.l10n.OCLMessages; >+import org.eclipse.ocl.options.ParsingOptions; >+import org.eclipse.ocl.util.OCLUtil; > import org.eclipse.uml2.uml.Class; > import org.eclipse.uml2.uml.Classifier; > import org.eclipse.uml2.uml.Operation; >@@ -174,6 +180,40 @@ > fail("Failed to parse: " + e.getLocalizedMessage()); //$NON-NLS-1$ > } > } >+ >+ public void test_or_and_precedence() throws ParserException { >+ helper.setContext(class1); >+ assertTrue(check(helper, class1, "((true or false) and false) = false")); //$NON-NLS-1$ >+//1.x assertTrue(check(helper, class1, "(true or false and false) = false")); //$NON-NLS-1$ >+ helper.createInvariant("(true or false and false) = true"); //$NON-NLS-1$ >+ try { >+ OCLUtil.checkForErrorsOrWarnings(helper.getEnvironment()); >+ fail("Expected warning not found"); //$NON-NLS-1$ >+ } catch (SemanticException e) { >+ System.out.println("Got expected warning: " + e.getLocalizedMessage()); //$NON-NLS-1$ >+ assertEquals(OCLMessages.XorOrAndPrecedence_WARNING, e.getMessage()); >+ } >+ ParsingOptions.setOption(helper.getEnvironment(), ParsingOptions.WARN_OF_XOR_OR_AND_PRECEDENCE_CHANGE, false); >+ helper.createInvariant("(true or false and false) = true"); //$NON-NLS-1$ >+ OCLUtil.checkForErrorsOrWarnings(helper.getEnvironment()); >+ } >+ >+ public void test_xor_or_precedence() throws ParserException { >+ helper.setContext(class1); >+ assertTrue(check(helper, class1, "((true xor false) or true) = true")); //$NON-NLS-1$ >+//1.x assertTrue(check(helper, class1, "(true xor false or true) = true")); //$NON-NLS-1$ >+ helper.createInvariant("(true xor false or true) = false"); //$NON-NLS-1$ >+ try { >+ OCLUtil.checkForErrorsOrWarnings(helper.getEnvironment()); >+ fail("Expected warning not found"); //$NON-NLS-1$ >+ } catch (SemanticException e) { >+ System.out.println("Got expected warning: " + e.getLocalizedMessage()); //$NON-NLS-1$ >+ assertEquals(OCLMessages.XorOrAndPrecedence_WARNING, e.getMessage()); >+ } >+ ParsingOptions.setOption(helper.getEnvironment(), ParsingOptions.WARN_OF_XOR_OR_AND_PRECEDENCE_CHANGE, false); >+ helper.createInvariant("(true xor false or true) = false"); //$NON-NLS-1$ >+ OCLUtil.checkForErrorsOrWarnings(helper.getEnvironment()); >+ } > > // > // Framework methods >#P org.eclipse.ocl >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/META-INF/MANIFEST.MF,v >retrieving revision 1.14 >diff -u -r1.14 MANIFEST.MF >--- META-INF/MANIFEST.MF 25 Aug 2009 20:30:37 -0000 1.14 >+++ META-INF/MANIFEST.MF 2 Sep 2009 08:13:49 -0000 >@@ -15,6 +15,7 @@ > org.eclipse.ocl.expressions.operations, > org.eclipse.ocl.expressions.util, > org.eclipse.ocl.helper, >+ org.eclipse.ocl.internal.l10n;x-friends:="org.eclipse.ocl.ecore.tests,org.eclipse.ocl.uml.tests", > org.eclipse.ocl.lpg, > org.eclipse.ocl.options, > org.eclipse.ocl.parser, >Index: src/org/eclipse/ocl/cst/OperationCallExpCS.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/cst/OperationCallExpCS.java,v >retrieving revision 1.3 >diff -u -r1.3 OperationCallExpCS.java >--- src/org/eclipse/ocl/cst/OperationCallExpCS.java 30 Nov 2008 22:11:38 -0000 1.3 >+++ src/org/eclipse/ocl/cst/OperationCallExpCS.java 2 Sep 2009 08:13:54 -0000 >@@ -22,6 +22,12 @@ > * A representation of the model object '<em><b>Operation Call Exp CS</b></em>'. > * <!-- end-user-doc --> > * >+ * <p> >+ * The following features are supported: >+ * <ul> >+ * <li>{@link org.eclipse.ocl.cst.OperationCallExpCS#getIsParenthesized <em>Is Parenthesized</em>}</li> >+ * </ul> >+ * </p> > * > * @see org.eclipse.ocl.cst.CSTPackage#getOperationCallExpCS() > * @model >@@ -31,4 +37,33 @@ > */ > public interface OperationCallExpCS > extends FeatureCallExpCS { >+ >+ /** >+ * Returns the value of the '<em><b>Is Parenthesized</b></em>' attribute. >+ * The default value is <code>"false"</code>. >+ * <!-- begin-user-doc --> >+ * <p> >+ * If the meaning of the '<em>Is Parenthesized</em>' attribute isn't clear, >+ * there really should be more of a description here... >+ * </p> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @return the value of the '<em>Is Parenthesized</em>' attribute. >+ * @see #setIsParenthesized(Boolean) >+ * @see org.eclipse.ocl.cst.CSTPackage#getOperationCallExpCS_IsParenthesized() >+ * @model default="false" >+ * @generated >+ */ >+ Boolean getIsParenthesized(); >+ >+ /** >+ * Sets the value of the '{@link org.eclipse.ocl.cst.OperationCallExpCS#getIsParenthesized <em>Is Parenthesized</em>}' attribute. >+ * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @param value the new value of the '<em>Is Parenthesized</em>' attribute. >+ * @see #getIsParenthesized() >+ * @generated >+ */ >+ void setIsParenthesized(Boolean value); > } // OperationCallExpCS >Index: src/org/eclipse/ocl/cst/CSTPackage.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/cst/CSTPackage.java,v >retrieving revision 1.7 >diff -u -r1.7 CSTPackage.java >--- src/org/eclipse/ocl/cst/CSTPackage.java 5 Mar 2009 14:12:13 -0000 1.7 >+++ src/org/eclipse/ocl/cst/CSTPackage.java 2 Sep 2009 08:13:54 -0000 >@@ -4707,6 +4707,16 @@ > int OPERATION_CALL_EXP_CS__IS_MARKED_PRE_CS = FEATURE_CALL_EXP_CS__IS_MARKED_PRE_CS; > > /** >+ * The feature id for the '<em><b>Is Parenthesized</b></em>' attribute. >+ * <!-- begin-user-doc --> >+ * <!-- end-user-doc --> >+ * @generated >+ * @ordered >+ * @noreference This field is not intended to be referenced by clients. >+ */ >+ int OPERATION_CALL_EXP_CS__IS_PARENTHESIZED = FEATURE_CALL_EXP_CS_FEATURE_COUNT + 0; >+ >+ /** > * The number of structural features of the '<em>Operation Call Exp CS</em>' class. > * <!-- begin-user-doc --> > * <!-- end-user-doc --> >@@ -4714,7 +4724,7 @@ > * @ordered > * @noreference This field is not intended to be referenced by clients. > */ >- int OPERATION_CALL_EXP_CS_FEATURE_COUNT = FEATURE_CALL_EXP_CS_FEATURE_COUNT + 0; >+ int OPERATION_CALL_EXP_CS_FEATURE_COUNT = FEATURE_CALL_EXP_CS_FEATURE_COUNT + 1; > > /** > * The meta object id for the '{@link org.eclipse.ocl.cst.impl.StateExpCSImpl <em>State Exp CS</em>}' class. >@@ -6331,6 +6341,18 @@ > EClass getOperationCallExpCS(); > > /** >+ * Returns the meta object for the attribute '{@link org.eclipse.ocl.cst.OperationCallExpCS#getIsParenthesized <em>Is Parenthesized</em>}'. >+ * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @return the meta object for the attribute '<em>Is Parenthesized</em>'. >+ * @see org.eclipse.ocl.cst.OperationCallExpCS#getIsParenthesized() >+ * @see #getOperationCallExpCS() >+ * @generated >+ */ >+ EAttribute getOperationCallExpCS_IsParenthesized(); >+ >+ /** > * Returns the meta object for class '{@link org.eclipse.ocl.cst.StateExpCS <em>State Exp CS</em>}'. > * <!-- begin-user-doc --> > * <!-- end-user-doc --> >@@ -7670,6 +7692,16 @@ > EClass OPERATION_CALL_EXP_CS = eINSTANCE.getOperationCallExpCS(); > > /** >+ * The meta object literal for the '<em><b>Is Parenthesized</b></em>' attribute feature. >+ * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ EAttribute OPERATION_CALL_EXP_CS__IS_PARENTHESIZED = eINSTANCE >+ .getOperationCallExpCS_IsParenthesized(); >+ >+ /** > * The meta object literal for the '{@link org.eclipse.ocl.cst.impl.StateExpCSImpl <em>State Exp CS</em>}' class. > * <!-- begin-user-doc --> > * <!-- end-user-doc --> >Index: src/org/eclipse/ocl/cst/impl/CSTPackageImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/cst/impl/CSTPackageImpl.java,v >retrieving revision 1.7 >diff -u -r1.7 CSTPackageImpl.java >--- src/org/eclipse/ocl/cst/impl/CSTPackageImpl.java 26 May 2009 20:06:32 -0000 1.7 >+++ src/org/eclipse/ocl/cst/impl/CSTPackageImpl.java 2 Sep 2009 08:13:56 -0000 >@@ -1526,6 +1526,17 @@ > > /** > * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ public EAttribute getOperationCallExpCS_IsParenthesized() { >+ return (EAttribute) operationCallExpCSEClass.getEStructuralFeatures() >+ .get(0); >+ } >+ >+ /** >+ * <!-- begin-user-doc --> > * <!-- end-user-doc --> > * @generated > */ >@@ -2109,6 +2120,8 @@ > FEATURE_CALL_EXP_CS__IS_MARKED_PRE_CS); > > operationCallExpCSEClass = createEClass(OPERATION_CALL_EXP_CS); >+ createEAttribute(operationCallExpCSEClass, >+ OPERATION_CALL_EXP_CS__IS_PARENTHESIZED); > > stateExpCSEClass = createEClass(STATE_EXP_CS); > createEAttribute(stateExpCSEClass, STATE_EXP_CS__SEQUENCE_OF_NAMES); >@@ -2836,6 +2849,10 @@ > operationCallExpCSEClass, > OperationCallExpCS.class, > "OperationCallExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$ >+ initEAttribute( >+ getOperationCallExpCS_IsParenthesized(), >+ ecorePackage.getEBooleanObject(), >+ "isParenthesized", "false", 0, 1, OperationCallExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$ > > initEClass( > stateExpCSEClass, >Index: src/org/eclipse/ocl/cst/impl/OperationCallExpCSImpl.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/cst/impl/OperationCallExpCSImpl.java,v >retrieving revision 1.3 >diff -u -r1.3 OperationCallExpCSImpl.java >--- src/org/eclipse/ocl/cst/impl/OperationCallExpCSImpl.java 30 Nov 2008 22:11:37 -0000 1.3 >+++ src/org/eclipse/ocl/cst/impl/OperationCallExpCSImpl.java 2 Sep 2009 08:13:56 -0000 >@@ -17,7 +17,9 @@ > */ > package org.eclipse.ocl.cst.impl; > >+import org.eclipse.emf.common.notify.Notification; > import org.eclipse.emf.ecore.EClass; >+import org.eclipse.emf.ecore.impl.ENotificationImpl; > import org.eclipse.ocl.cst.CSTPackage; > import org.eclipse.ocl.cst.OperationCallExpCS; > >@@ -26,6 +28,10 @@ > * An implementation of the model object '<em><b>Operation Call Exp CS</b></em>'. > * <!-- end-user-doc --> > * <p> >+ * The following features are implemented: >+ * <ul> >+ * <li>{@link org.eclipse.ocl.cst.impl.OperationCallExpCSImpl#getIsParenthesized <em>Is Parenthesized</em>}</li> >+ * </ul> > * </p> > * > * @generated >@@ -35,6 +41,28 @@ > implements OperationCallExpCS { > > /** >+ * The default value of the '{@link #getIsParenthesized() <em>Is Parenthesized</em>}' attribute. >+ * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @see #getIsParenthesized() >+ * @generated >+ * @ordered >+ */ >+ protected static final Boolean IS_PARENTHESIZED_EDEFAULT = Boolean.FALSE; >+ >+ /** >+ * The cached value of the '{@link #getIsParenthesized() <em>Is Parenthesized</em>}' attribute. >+ * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @see #getIsParenthesized() >+ * @generated >+ * @ordered >+ */ >+ protected Boolean isParenthesized = IS_PARENTHESIZED_EDEFAULT; >+ >+ /** > * <!-- begin-user-doc --> > * <!-- end-user-doc --> > * @generated >@@ -53,4 +81,106 @@ > return CSTPackage.Literals.OPERATION_CALL_EXP_CS; > } > >+ /** >+ * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ public Boolean getIsParenthesized() { >+ return isParenthesized; >+ } >+ >+ /** >+ * <!-- begin-user-doc --> >+ * @since 3.0 >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ public void setIsParenthesized(Boolean newIsParenthesized) { >+ Boolean oldIsParenthesized = isParenthesized; >+ isParenthesized = newIsParenthesized; >+ if (eNotificationRequired()) >+ eNotify(new ENotificationImpl(this, Notification.SET, >+ CSTPackage.OPERATION_CALL_EXP_CS__IS_PARENTHESIZED, >+ oldIsParenthesized, isParenthesized)); >+ } >+ >+ /** >+ * <!-- begin-user-doc --> >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ @Override >+ public Object eGet(int featureID, boolean resolve, boolean coreType) { >+ switch (featureID) { >+ case CSTPackage.OPERATION_CALL_EXP_CS__IS_PARENTHESIZED : >+ return getIsParenthesized(); >+ } >+ return super.eGet(featureID, resolve, coreType); >+ } >+ >+ /** >+ * <!-- begin-user-doc --> >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ @Override >+ public void eSet(int featureID, Object newValue) { >+ switch (featureID) { >+ case CSTPackage.OPERATION_CALL_EXP_CS__IS_PARENTHESIZED : >+ setIsParenthesized((Boolean) newValue); >+ return; >+ } >+ super.eSet(featureID, newValue); >+ } >+ >+ /** >+ * <!-- begin-user-doc --> >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ @Override >+ public void eUnset(int featureID) { >+ switch (featureID) { >+ case CSTPackage.OPERATION_CALL_EXP_CS__IS_PARENTHESIZED : >+ setIsParenthesized(IS_PARENTHESIZED_EDEFAULT); >+ return; >+ } >+ super.eUnset(featureID); >+ } >+ >+ /** >+ * <!-- begin-user-doc --> >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ @Override >+ public boolean eIsSet(int featureID) { >+ switch (featureID) { >+ case CSTPackage.OPERATION_CALL_EXP_CS__IS_PARENTHESIZED : >+ return IS_PARENTHESIZED_EDEFAULT == null >+ ? isParenthesized != null >+ : !IS_PARENTHESIZED_EDEFAULT.equals(isParenthesized); >+ } >+ return super.eIsSet(featureID); >+ } >+ >+ /** >+ * <!-- begin-user-doc --> >+ * <!-- end-user-doc --> >+ * @generated >+ */ >+ @Override >+ public String toString() { >+ if (eIsProxy()) >+ return super.toString(); >+ >+ StringBuffer result = new StringBuffer(super.toString()); >+ result.append(" (isParenthesized: "); //$NON-NLS-1$ >+ result.append(isParenthesized); >+ result.append(')'); >+ return result.toString(); >+ } >+ > } //OperationCallExpCSImpl >Index: src/org/eclipse/ocl/options/ParsingOptions.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/options/ParsingOptions.java,v >retrieving revision 1.5 >diff -u -r1.5 ParsingOptions.java >--- src/org/eclipse/ocl/options/ParsingOptions.java 12 Feb 2009 00:04:09 -0000 1.5 >+++ src/org/eclipse/ocl/options/ParsingOptions.java 2 Sep 2009 08:13:58 -0000 >@@ -68,6 +68,35 @@ > > /** > * <p> >+ * Parsing option indicating whether to generate a warning when the >+ * OCL 2.1 parsing of distinct xor, or, and precedences leads to a different >+ * parse to the OCL 2.0 specification of all levels equal. >+ * The default value of this option is <tt>true</tt>. To ignore >+ * compatibility with the OCL 2.0 behaviour in the MDT-OCL 1.x release, >+ * set this option <tt>false</tt>. >+ * </p> >+ * @since 3.0 >+ */ >+ public static final Option<Boolean> WARN_OF_XOR_OR_AND_PRECEDENCE_CHANGE = >+ new BasicOption<Boolean>("warn.of.xor.or.and.precedence.change", true); //$NON-NLS-1$ >+ >+ /** >+ * <p> >+ * Parsing option indicating whether to generate a warning when the >+ * OCL 2.1 parsing of distinct message precedences leads to a different >+ * parse to the MDT-OCL 1.x release where message and dot and arrow shared >+ * the same precedence. >+ * The default value of this option is <tt>true</tt>. To ignore >+ * compatibility with the DT-OCL 1.x release, >+ * set this option <tt>false</tt>. >+ * </p> >+ * @since 3.0 >+ */ >+ public static final Option<Boolean> WARN_OF_MESSAGE_PRECEDENCE_CHANGE = >+ new BasicOption<Boolean>("warn.of.message.precedence.change", true); //$NON-NLS-1$ >+ >+ /** >+ * <p> > * Static instance for the implicit-root-class option token. It is returned > * via an unchecked cast by the {@link #implicitRootClass()} method. > * </p> >Index: src/org/eclipse/ocl/parser/AbstractOCLAnalyzer.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/parser/AbstractOCLAnalyzer.java,v >retrieving revision 1.27 >diff -u -r1.27 AbstractOCLAnalyzer.java >--- src/org/eclipse/ocl/parser/AbstractOCLAnalyzer.java 1 Sep 2009 20:11:22 -0000 1.27 >+++ src/org/eclipse/ocl/parser/AbstractOCLAnalyzer.java 2 Sep 2009 08:14:01 -0000 >@@ -3982,6 +3982,10 @@ > OperationCallExpCS operationCallExpCS, > Environment<PK, C, O, P, EL, PM, S, COA, SSA, CT, CLS, E> env) { > >+ if (ParsingOptions.getValue(env, ParsingOptions.WARN_OF_XOR_OR_AND_PRECEDENCE_CHANGE)) { >+ checkForXorOrAndPrecedenceHazard(operationCallExpCS); >+ } >+ > OperationCallExp<C, O> astNode = null; > > List<OCLExpression<C>> args = new java.util.ArrayList<OCLExpression<C>>(); >@@ -4142,6 +4146,28 @@ > return result; > } > >+ private void checkForXorOrAndPrecedenceHazard(OperationCallExpCS operationCallExpCS) { >+ String parentOperationName = operationCallExpCS.getSimpleNameCS().getValue(); >+ if ("xor".equals(parentOperationName)) { //$NON-NLS-1$ >+ OCLExpressionCS childExpression = operationCallExpCS.getArguments().get(0); >+ if (childExpression instanceof OperationCallExpCS) { >+ String childOperationName = ((OperationCallExpCS)childExpression).getSimpleNameCS().getValue(); >+ if ("or".equals(childOperationName) || "and".equals(childOperationName)) { //$NON-NLS-1$ //$NON-NLS-2$ >+ getEnvironment().analyzerWarning(OCLMessages.XorOrAndPrecedence_WARNING, "operationCallExpCS", operationCallExpCS); //$NON-NLS-1$ >+ } >+ } >+ } >+ else if ("or".equals(parentOperationName)) { //$NON-NLS-1$ >+ OCLExpressionCS childExpression = operationCallExpCS.getArguments().get(0); >+ if (childExpression instanceof OperationCallExpCS) { >+ String childOperationName = ((OperationCallExpCS)childExpression).getSimpleNameCS().getValue(); >+ if ("and".equals(childOperationName)) { //$NON-NLS-1$ >+ getEnvironment().analyzerWarning(OCLMessages.XorOrAndPrecedence_WARNING, "operationCallExpCS", operationCallExpCS); //$NON-NLS-1$ >+ } >+ } >+ } >+ } >+ > /** > * MessageExpCS > * >Index: src/org/eclipse/ocl/parser/EssentialOCL.g >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/parser/EssentialOCL.g,v >retrieving revision 1.8 >diff -u -r1.8 EssentialOCL.g >--- src/org/eclipse/ocl/parser/EssentialOCL.g 1 Sep 2009 20:11:22 -0000 1.8 >+++ src/org/eclipse/ocl/parser/EssentialOCL.g 2 Sep 2009 08:14:02 -0000 >@@ -11,7 +11,7 @@ > -- * IBM - Initial API and implementation > -- * E.D.Willink - Elimination of some shift-reduce conflicts > -- * E.D.Willink - Remove unnecessary warning suppression >--- * E.D.Willink - Bugs 225493, 243976, 259818 >+-- * E.D.Willink - Bugs 225493, 243976, 259818, 288040, 282882 > -- * Zeligsoft - Bug 243976 > -- * Borland - Bug 242880 > -- * >@@ -551,86 +551,44 @@ > oclExpressionCS -> impliesExpCS > oclExpressionCS -> impliesWithLet > >- impliesExpCS -> andOrXorExpCS >- impliesWithLet -> andOrXorWithLet >- impliesExpCS ::= impliesExpCS implies andOrXorExpCS >+ impliesExpCS -> xorExpCS >+ impliesWithLet -> xorWithLet >+ impliesExpCS ::= impliesExpCS implies xorExpCS > /.$NewCase./ >- impliesWithLet ::= impliesExpCS implies andOrXorWithLet >+ impliesWithLet ::= impliesExpCS implies xorWithLet > /.$NewCase./ > >- andOrXorExpCS -> equalityExpCS >- andOrXorWithLet -> equalityWithLet >- andOrXorExpCS ::= andOrXorExpCS and equalityExpCS >+ xorExpCS -> orExpCS >+ xorWithLet -> orWithLet >+ xorExpCS ::= xorExpCS xor orExpCS > /.$NewCase./ >- andOrXorExpCS ::= andOrXorExpCS or equalityExpCS >+ xorWithLet ::= xorExpCS xor orWithLet > /.$NewCase./ >- andOrXorExpCS ::= andOrXorExpCS xor equalityExpCS >+ >+ orExpCS -> andExpCS >+ orWithLet -> andWithLet >+ orExpCS ::= orExpCS or andExpCS > /.$NewCase./ >- andOrXorWithLet ::= andOrXorExpCS and equalityWithLet >+ orWithLet ::= orExpCS or andWithLet > /.$NewCase./ >- andOrXorWithLet ::= andOrXorExpCS or equalityWithLet >+ >+ andExpCS -> equalityExpCS >+ andWithLet -> equalityWithLet >+ andExpCS ::= andExpCS and equalityExpCS >+ /.$NewCase./ >+ andWithLet ::= andExpCS and equalityWithLet > /.$NewCase./ >- andOrXorWithLet ::= andOrXorExpCS xor equalityWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- getTokenText($getToken(2)) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ > > equalityExpCS -> relationalExpCS > equalityWithLet -> relationalWithLet > equalityExpCS ::= equalityExpCS '=' relationalExpCS > /.$NewCase./ > equalityWithLet ::= equalityExpCS '=' relationalWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.EQUAL) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > equalityExpCS ::= equalityExpCS '<>' relationalExpCS > /.$NewCase./ > equalityWithLet ::= equalityExpCS '<>' relationalWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.NOT_EQUAL) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > > relationalExpCS -> ifExpCSPrec > -- Note that ifExp already embeds let, so we needn't deal with it here >@@ -638,83 +596,19 @@ > relationalExpCS ::= relationalExpCS '>' ifExpCSPrec > /.$NewCase./ > relationalWithLet ::= relationalExpCS '>' additiveWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.GREATER_THAN) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > relationalExpCS ::= relationalExpCS '<' ifExpCSPrec > /.$NewCase./ > relationalWithLet ::= relationalExpCS '<' additiveWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.LESS_THAN) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > relationalExpCS ::= relationalExpCS '>=' ifExpCSPrec > /.$NewCase./ > relationalWithLet ::= relationalExpCS '>=' additiveWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.GREATER_THAN_EQUAL) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > relationalExpCS ::= relationalExpCS '<=' ifExpCSPrec > /.$NewCase./ > relationalWithLet ::= relationalExpCS '<=' additiveWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.LESS_THAN_EQUAL) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > > ifExpCSPrec -> additiveExpCS > ifExpCSPrec -> ifExpCS >@@ -724,73 +618,25 @@ > additiveExpCS ::= additiveExpCS '+' multiplicativeExpCS > /.$NewCase./ > additiveWithLet ::= additiveExpCS '+' multiplicativeWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.PLUS) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > additiveExpCS ::= additiveExpCS '-' multiplicativeExpCS > /.$NewCase./ > additiveWithLet ::= additiveExpCS '-' multiplicativeWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.MINUS) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > > multiplicativeExpCS -> unaryExpCS > multiplicativeWithLet -> unaryWithLet > multiplicativeExpCS ::= multiplicativeExpCS '*' unaryExpCS > /.$NewCase./ > multiplicativeWithLet ::= multiplicativeExpCS '*' unaryWithLet >- /.$BeginJava >- SimpleNameCS simpleNameCS = createSimpleNameCS( >- SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.TIMES) >- ); >- setOffsets(simpleNameCS, getIToken($getToken(2))); >- EList args = new BasicEList(); >- args.add($getSym(3)); >- CSTNode result = createOperationCallExpCS( >- (OCLExpressionCS)$getSym(1), >- simpleNameCS, >- args >- ); >- setOffsets(result, (CSTNode)$getSym(1), (CSTNode)$getSym(3)); >- $setResult(result); >- $EndJava >- ./ >+ /.$NewCase./ > multiplicativeExpCS ::= multiplicativeExpCS '/' unaryExpCS > /.$NewCase./ > multiplicativeWithLet ::= multiplicativeExpCS '/' unaryWithLet > /.$BeginJava > SimpleNameCS simpleNameCS = createSimpleNameCS( > SimpleTypeEnum.STRING_LITERAL, >- OCLStandardLibraryUtil.getOperationName(PredefinedType.DIVIDE) >+ getTokenText($getToken(2)) > ); > setOffsets(simpleNameCS, getIToken($getToken(2))); > EList args = new BasicEList(); >@@ -923,6 +769,9 @@ > oclExpCS ::= '(' oclExpressionCS ')' > /.$BeginJava > CSTNode result = (CSTNode)$getSym(2); >+ if (result instanceof OperationCallExpCS) { >+ ((OperationCallExpCS)result).setIsParenthesized(true); >+ } > setOffsets(result, getIToken($getToken(1)), getIToken($getToken(3))); > $setResult(result); > $EndJava >Index: model/OCLCST.genmodel >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/model/OCLCST.genmodel,v >retrieving revision 1.8 >diff -u -r1.8 OCLCST.genmodel >--- model/OCLCST.genmodel 5 Mar 2009 14:12:13 -0000 1.8 >+++ model/OCLCST.genmodel 2 Sep 2009 08:13:49 -0000 >@@ -295,7 +295,9 @@ > <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true" > createChild="true" ecoreFeature="ecore:EReference OCLCST.ecore#//cst/FeatureCallExpCS/isMarkedPreCS"/> > </genClasses> >- <genClasses xsi:type="genmodel:GenClass" ecoreClass="OCLCST.ecore#//cst/OperationCallExpCS"/> >+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="OCLCST.ecore#//cst/OperationCallExpCS"> >+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute OCLCST.ecore#//cst/OperationCallExpCS/isParenthesized"/> >+ </genClasses> > <genClasses xsi:type="genmodel:GenClass" ecoreClass="OCLCST.ecore#//cst/StateExpCS"> > <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute OCLCST.ecore#//cst/StateExpCS/sequenceOfNames"/> > </genClasses> >Index: model/OCLCST.uml >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/model/OCLCST.uml,v >retrieving revision 1.5 >diff -u -r1.5 OCLCST.uml >--- model/OCLCST.uml 5 Mar 2009 14:12:13 -0000 1.5 >+++ model/OCLCST.uml 2 Sep 2009 08:13:49 -0000 >@@ -666,6 +666,11 @@ > </packagedElement> > <packagedElement xmi:type="uml:Class" xmi:id="_qdx-Vf8fEduhWtVvKtiQ7w" name="OperationCallExpCS"> > <generalization xmi:id="_qdx-Vv8fEduhWtVvKtiQ7w" general="_qdx-Sv8fEduhWtVvKtiQ7w"/> >+ <ownedAttribute xmi:id="_306UMJXiEd6Wx-S3aeq4Aw" name="isParenthesized" visibility="public" isOrdered="true"> >+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EBooleanObject"/> >+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_306UMZXiEd6Wx-S3aeq4Aw"/> >+ <defaultValue xmi:type="uml:LiteralString" xmi:id="_8lGFsJXiEd6Wx-S3aeq4Aw" value="false"/> >+ </ownedAttribute> > </packagedElement> > <packagedElement xmi:type="uml:Class" xmi:id="_qdx-V_8fEduhWtVvKtiQ7w" name="StateExpCS"> > <generalization xmi:id="_qdx-WP8fEduhWtVvKtiQ7w" general="_qdx8xP8fEduhWtVvKtiQ7w"/> >Index: model/OCLCST.ecore >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/model/OCLCST.ecore,v >retrieving revision 1.8 >diff -u -r1.8 OCLCST.ecore >--- model/OCLCST.ecore 5 Mar 2009 14:12:13 -0000 1.8 >+++ model/OCLCST.ecore 2 Sep 2009 08:13:49 -0000 >@@ -306,7 +306,10 @@ > <eStructuralFeatures xsi:type="ecore:EReference" name="isMarkedPreCS" eType="#//cst/IsMarkedPreCS" > containment="true"/> > </eClassifiers> >- <eClassifiers xsi:type="ecore:EClass" name="OperationCallExpCS" eSuperTypes="#//cst/FeatureCallExpCS"/> >+ <eClassifiers xsi:type="ecore:EClass" name="OperationCallExpCS" eSuperTypes="#//cst/FeatureCallExpCS"> >+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isParenthesized" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject" >+ defaultValueLiteral="false"/> >+ </eClassifiers> > <eClassifiers xsi:type="ecore:EClass" name="StateExpCS" eSuperTypes="#//cst/TypeCS"> > <eStructuralFeatures xsi:type="ecore:EAttribute" name="sequenceOfNames" upperBound="-1" > eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> >Index: src/org/eclipse/ocl/internal/l10n/OCLMessages.properties >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/internal/l10n/OCLMessages.properties,v >retrieving revision 1.9 >diff -u -r1.9 OCLMessages.properties >--- src/org/eclipse/ocl/internal/l10n/OCLMessages.properties 12 Feb 2009 00:04:09 -0000 1.9 >+++ src/org/eclipse/ocl/internal/l10n/OCLMessages.properties 2 Sep 2009 08:13:58 -0000 >@@ -1,5 +1,5 @@ > ############################################################################### >-# Copyright (c) 2003, 2008 IBM Corporation, Borland Software Corp., and others. >+# Copyright (c) 2003, 2009 IBM Corporation, Borland Software Corp., and others. > # All rights reserved. This program and the accompanying materials > # are made available under the terms of the Eclipse Public License v1.0 > # which accompanies this distribution, and is available at >@@ -1343,4 +1343,9 @@ > # > # Indicates that a string literal contains an invalid escape sequence > # >-InvalidEscapeSequence_ERROR = Invalid escape sequence (valid ones are \\b \\t \\n \\f \\r \\\" \\\' \\\\) >\ No newline at end of file >+InvalidEscapeSequence_ERROR = Invalid escape sequence (valid ones are \\b \\t \\n \\f \\r \\\" \\\' \\\\) >+ >+# >+# Indicates that an xor,or,and expression is parsed differently for OCL 2.1 than its predecessors. >+# >+XorOrAndPrecedence_WARNING = Precedence of xor,or,and changed for OCL 2.1. >Index: src/org/eclipse/ocl/internal/l10n/OCLMessages.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/internal/l10n/OCLMessages.java,v >retrieving revision 1.9 >diff -u -r1.9 OCLMessages.java >--- src/org/eclipse/ocl/internal/l10n/OCLMessages.java 12 Feb 2009 00:04:09 -0000 1.9 >+++ src/org/eclipse/ocl/internal/l10n/OCLMessages.java 2 Sep 2009 08:13:57 -0000 >@@ -245,6 +245,8 @@ > > public static String StringNotProperlyClosed_ERROR; > public static String InvalidEscapeSequence_ERROR; >+ >+ public static String XorOrAndPrecedence_WARNING; > > private static IMessages messagesImpl; > >Index: src/org/eclipse/ocl/util/OCLUtil.java >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/src/org/eclipse/ocl/util/OCLUtil.java,v >retrieving revision 1.8 >diff -u -r1.8 OCLUtil.java >--- src/org/eclipse/ocl/util/OCLUtil.java 31 Jan 2009 19:47:15 -0000 1.8 >+++ src/org/eclipse/ocl/util/OCLUtil.java 2 Sep 2009 08:14:02 -0000 >@@ -356,6 +356,64 @@ > > return result; > } >+ >+ /** >+ * Checks whether the specified environment's problem handler has any >+ * diagnostics of warnings severity or worse and, if so, throws a semantic >+ * exception encapsulating these diagnostics. >+ * >+ * @param env an environment in which we have parsed some OCL >+ * >+ * @throws SyntaxException if there are any errors in parsing the concrete >+ * syntax >+ * @throws SemanticException if there are any errors in analyzing the >+ * abstract syntax >+ * >+ * @see #checkForErrors(ProblemHandler) >+ * @since 3.0 >+ */ >+ public static Diagnostic checkForErrorsOrWarnings( >+ Environment<?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?> env) >+ throws SyntaxException, SemanticException { >+ >+ return checkForErrorsOrWarnings(getAdapter(env, ProblemHandler.class)); >+ } >+ >+ /** >+ * Checks whether the specified problem handler has any >+ * diagnostics of warning severity or worse and, if so, throws a semantic >+ * exception encapsulating these diagnostics. >+ * >+ * @param problemHandler a problem handler >+ * >+ * @throws SyntaxException if there are any errors in parsing the concrete >+ * syntax >+ * @throws SemanticException if there are any errors in analyzing the >+ * abstract syntax >+ * @since 3.0 >+ */ >+ public static Diagnostic checkForErrorsOrWarnings(ProblemHandler problemHandler) >+ throws SyntaxException, SemanticException { >+ >+ Diagnostic result = null; >+ >+ if (problemHandler instanceof OCLProblemHandler) { >+ result = ((OCLProblemHandler) problemHandler).getDiagnostic(); >+ >+ if ((result != null) && (result.getSeverity() >= Diagnostic.WARNING)) { >+ List<?> data = result.getData(); >+ >+ if (data.contains(ProblemHandler.Phase.LEXER) >+ || data.contains(ProblemHandler.Phase.PARSER)) { >+ throw new SyntaxException(result); >+ } else { >+ throw new SemanticException(result); >+ } >+ } >+ } >+ >+ return result; >+ } > > /** > * Attempts to get an environment instance that is appropriate for introspection >Index: plugin.properties >=================================================================== >RCS file: /cvsroot/modeling/org.eclipse.mdt/org.eclipse.ocl/plugins/org.eclipse.ocl/plugin.properties,v >retrieving revision 1.10 >diff -u -r1.10 plugin.properties >--- plugin.properties 27 Jan 2009 17:54:19 -0000 1.10 >+++ plugin.properties 2 Sep 2009 08:13:49 -0000 >@@ -17,6 +17,8 @@ > > Plugin.name = Object Constraint Language (OCL) 2.0 Parser/Interpreter > Plugin.providerName = Eclipse Modeling Project >+pluginName = Object Constraint Language (OCL) 2.0 Parser/Interpreter >+providerName = Eclipse Modeling Project > > oclenv.point.name = Registered OCL Environments > UI_OCL_content_type = OCL Model File
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 288040
: 146263