Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
af3
kernel
Commits
035376eb
Commit
035376eb
authored
Jun 02, 2020
by
Alexander Diewald
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '4008' into 'master'
Test case generator for DSE problems See merge request
!117
parents
c1f3be54
f0a18f2f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
85 deletions
+17
-85
org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings
....tooling.base/src/org/fortiss/tooling/base/utils/.ratings
+1
-1
org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/AnnotationUtils.java
...e/src/org/fortiss/tooling/base/utils/AnnotationUtils.java
+16
-84
No files found.
org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/.ratings
View file @
035376eb
AngleUtils.java 462551eae71738ff51f92c9906bff9a21a375d2b GREEN
AnnotationUtils.java
197ceb5f39af6b96eb8f7025e3fe3b1b39c35d42
GREEN
AnnotationUtils.java
357a9f40ee658d3ed60428e12ef35cad64f5cc53
GREEN
BaseMathUtils.java 90712a1560f5b4cb9b7873a148303c970ded756d GREEN
BaseModelElementUtils.java b8775b7a462efc168cf79a017aa3377a782d10f6 GREEN
DimensionUtils.java 0dc67f9de11a84e6e4c6e1eb627817dee91ff30a GREEN
...
...
org.fortiss.tooling.base/src/org/fortiss/tooling/base/utils/AnnotationUtils.java
View file @
035376eb
...
...
@@ -17,7 +17,6 @@ package org.fortiss.tooling.base.utils;
import
static
org
.
fortiss
.
tooling
.
base
.
utils
.
BaseMathUtils
.
convertNumber
;
import
static
org
.
fortiss
.
tooling
.
kernel
.
utils
.
EcoreUtils
.
getChildrenWithType
;
import
static
org
.
fortiss
.
tooling
.
kernel
.
utils
.
EcoreUtils
.
getEClassForClass
;
import
static
org
.
fortiss
.
tooling
.
kernel
.
utils
.
EcoreUtils
.
getParentsWithType
;
import
static
org
.
fortiss
.
tooling
.
kernel
.
utils
.
EcoreUtils
.
pickFirstInstanceOf
;
import
static
org
.
fortiss
.
tooling
.
kernel
.
utils
.
EcoreUtils
.
pickInstanceOf
;
...
...
@@ -30,10 +29,8 @@ import java.util.stream.DoubleStream;
import
org.eclipse.emf.common.util.BasicEList
;
import
org.eclipse.emf.common.util.EList
;
import
org.eclipse.emf.ecore.EClass
;
import
org.eclipse.emf.ecore.EClassifier
;
import
org.eclipse.emf.ecore.EObject
;
import
org.eclipse.emf.ecore.util.EcoreUtil
;
import
org.fortiss.tooling.base.ToolingBaseActivator
;
import
org.fortiss.tooling.base.annotation.AnnotationEntry
;
import
org.fortiss.tooling.base.annotation.AnnotationValueService
;
...
...
@@ -51,8 +48,6 @@ import org.fortiss.tooling.base.annotation.valueprovider.IAnnotationValueProvide
import
org.fortiss.tooling.base.compose.HierarchicElementCompositorBase
;
import
org.fortiss.tooling.base.model.element.IAnnotatedSpecification
;
import
org.fortiss.tooling.base.model.element.IModelElement
;
import
org.fortiss.tooling.kernel.extension.data.ITopLevelElement
;
import
org.fortiss.tooling.kernel.service.IPersistencyService
;
/**
* Utility methods for dealing with {@link IAnnotatedSpecification}s.
...
...
@@ -60,31 +55,6 @@ import org.fortiss.tooling.kernel.service.IPersistencyService;
* @author diewald
*/
public
class
AnnotationUtils
{
/**
* Returns the annotation of the particular {@code clazz} from a given {@code modelElement}.
*/
private
static
<
T
extends
IAnnotatedSpecification
>
T
getAnnotationInternal
(
final
IModelElement
modelElement
,
Class
<
T
>
clazz
)
{
return
pickFirstInstanceOf
(
clazz
,
modelElement
.
getSpecifications
());
}
/**
* Creates an annotation of a particular {@code eClass} and adds it the specification list of
* the {@code modelElement}.
*/
@SuppressWarnings
(
"unchecked"
)
private
static
<
T
extends
IAnnotatedSpecification
>
void
createAnnotationInternal
(
final
IModelElement
modelElement
,
Class
<
T
>
clazz
)
{
final
EClass
eClass
=
getEClassForClass
(
clazz
);
if
(
eClass
==
null
)
{
return
;
}
final
T
newAnnotation
=
(
T
)
EcoreUtil
.
create
(
eClass
);
modelElement
.
getSpecifications
().
add
(
newAnnotation
);
}
/**
* Returns the value of type {@code U} specified for the given {@link IModelElement} by the
...
...
@@ -104,6 +74,18 @@ public class AnnotationUtils {
return
value
;
}
/**
* Sets the value of type {@code U} for the given annotation {@code clazz} in the specification
* list of the given {@link IModelElement}.
*/
public
static
<
T
extends
IAnnotatedSpecification
,
U
>
void
setAnnotationValue
(
IModelElement
modelElement
,
Class
<
T
>
clazz
,
U
value
)
throws
Exception
{
IAnnotationValueProvider
<
T
>
annValProvider
=
getAnnotationValueProvider
(
modelElement
,
clazz
);
T
annotation
=
getAnnotation
(
modelElement
,
clazz
);
annValProvider
.
setAnnotationValue
(
value
,
annotation
);
}
/**
* Predicate if for the given {@link IModelElement}, an annotation of the given {@code type} has
* been registered.
...
...
@@ -114,59 +96,10 @@ public class AnnotationUtils {
return
as
.
getAnnotationEntry
(
modelElement
).
getSpecification
(
type
)
!=
null
;
}
/**
* <p>
* Returns the annotation of a given {@code Class<T>} from a given {@code modelElement}. If the
* annotation does not exist yet, it is created and added to the specification list of the
* {@code modelElement}.
* </p>
*
* <p>
* <b>Note: </b>The access to the model is wrapped into a command in order to allow for
* transparent creation of the annotation object from other contexts (e.g., GUI). If this is not
* desirable, use the {@link #getAnnotation(IModelElement, Class, boolean)} variant of this
* method.
* </p>
*/
public
static
<
T
extends
IAnnotatedSpecification
>
T
getAnnotation
(
IModelElement
modelElement
,
Class
<
T
>
clazz
)
{
return
getAnnotation
(
modelElement
,
clazz
,
true
);
}
/**
* Returns the annotation of a given {@code Class<T>} from a given {@code modelElement}. If the
* annotation does not exist yet, it is created and added to the specification list of the
* {@code modelElement}. Depending on the caller's choice, the model modification is wrapped
* into a command.
*/
public
static
<
T
extends
IAnnotatedSpecification
>
T
getAnnotation
(
final
IModelElement
modelElement
,
final
Class
<
T
>
clazz
,
boolean
wrapIntoCommand
)
{
T
annotation
=
getAnnotationInternal
(
modelElement
,
clazz
);
if
(
annotation
!=
null
)
{
return
annotation
;
}
if
(
wrapIntoCommand
)
{
ITopLevelElement
modelContext
=
IPersistencyService
.
getInstance
().
getTopLevelElementFor
(
modelElement
);
modelContext
.
runAsCommand
(()
->
{
// TODO (see #2228 / #2208) Keep this code that ensures that non-existing
// annotations are lazily instantiated until #2228 is resolved. It should be
// noted that each time an annotation is constructed from this context, an
// undo/redo command will be created that is not comprehensible for the user
// (see #2208).
createAnnotationInternal
(
modelElement
,
clazz
);
});
}
else
{
// Create if the creation does not need to be wrapped into a command.
createAnnotationInternal
(
modelElement
,
clazz
);
}
// Return new annotation (be it created in a command, or directly). This will return null in
// case the creation of the new annotation was not successful.
return
getAnnotationInternal
(
modelElement
,
clazz
);
/** Returns the annotation of a given {@code Class<T>} from a given {@code modelElement}. */
public
static
<
T
extends
IAnnotatedSpecification
>
T
getAnnotation
(
final
IModelElement
modelElement
,
final
Class
<
T
>
clazz
)
{
return
pickFirstInstanceOf
(
clazz
,
modelElement
.
getSpecifications
());
}
/**
...
...
@@ -317,7 +250,6 @@ public class AnnotationUtils {
as
.
instantiateAnnotations
(
child
);
}
}
/**
* Compact method to determine whether an {@link IModelElement} requires its annotations to be
* instantiated.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment