From f222f6cc50a3376a25c8205aa0002ee84f7bf201 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 15:36:47 +0200 Subject: [PATCH 01/21] project seems to compile --- .gitattributes | 12 + .gitignore | 6 + .idea/.gitignore | 8 - .idea/ant.xml | 6 - .idea/misc.xml | 6 - .idea/modules.xml | 8 - .idea/uiDesigner.xml | 124 - .idea/vcs.xml | 6 - .project | 28 - .vscode/settings.json | 3 + src/COPYING => COPYING | 0 build.xml | 66 - gradle/libs.versions.toml | 12 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 252 + gradlew.bat | 94 + lib/build.gradle.kts | 39 + lib/{ => lib}/akuhn-util-r28011.jar | Bin lib/{ => lib}/fa.jar | Bin lib/{ => lib}/famixJava.jar | Bin lib/{ => lib}/jexample-r378.jar | Bin .../java}/ch/akuhn/fame/FameDescription.java | 0 .../main/java}/ch/akuhn/fame/FamePackage.java | 100 +- .../java}/ch/akuhn/fame/FameProperty.java | 0 .../java}/ch/akuhn/fame/MetaRepository.java | 0 .../src/main/java}/ch/akuhn/fame/Named.java | 0 .../src/main/java}/ch/akuhn/fame/Nested.java | 0 .../main/java}/ch/akuhn/fame/Repository.java | 0 .../src/main/java}/ch/akuhn/fame/Tower.java | 84 +- .../ch/akuhn/fame/codegen/CodeGeneration.java | 0 .../java}/ch/akuhn/fame/codegen/GenFile.java | 0 .../ch/akuhn/fame/codegen/InterfaceFile.java | 0 .../java}/ch/akuhn/fame/codegen/JavaFile.java | 0 .../java}/ch/akuhn/fame/codegen/Template.java | 0 .../java}/ch/akuhn/fame/codegen/package.html | 0 .../java}/ch/akuhn/fame/codegen/template.txt | 0 .../ch/akuhn/fame/dsl/MetamodelBuilder.java | 448 +- .../java}/ch/akuhn/fame/dsl/ModelBuilder.java | 0 .../ch/akuhn/fame/dsl/ProtocolChecker.java | 258 +- .../main/java}/ch/akuhn/fame/fm3/Element.java | 0 .../java}/ch/akuhn/fame/fm3/FM3Trait.java | 0 .../main/java}/ch/akuhn/fame/fm3/FM3Type.java | 0 .../ch/akuhn/fame/fm3/MetaDescription.java | 0 .../ch/akuhn/fame/fm3/PackageDescription.java | 0 .../akuhn/fame/fm3/PropertyDescription.java | 0 .../main/java}/ch/akuhn/fame/fm3/package.html | 8 +- .../fame/internal/AbstractPrintClient.java | 0 .../java}/ch/akuhn/fame/internal/Access.java | 0 .../ch/akuhn/fame/internal/FieldAccess.java | 0 .../ch/akuhn/fame/internal/Inferencer.java | 546 +- .../fame/internal/JSONPrettyPrinter.java | 0 .../ch/akuhn/fame/internal/JSONPrinter.java | 0 .../ch/akuhn/fame/internal/MSEPrinter.java | 0 .../fame/internal/MetaDescriptionFactory.java | 0 .../ch/akuhn/fame/internal/MethodAccess.java | 0 .../ch/akuhn/fame/internal/MultivalueSet.java | 0 .../akuhn/fame/internal/PropertyFactory.java | 0 .../akuhn/fame/internal/PrototypeBuilder.java | 0 .../fame/internal/RepositoryVisitor.java | 0 .../akuhn/fame/internal/RuntimeElement.java | 0 .../ch/akuhn/fame/internal/TraitFactory.java | 0 .../ch/akuhn/fame/internal/Warnings.java | 0 .../java}/ch/akuhn/fame/internal/package.html | 0 .../src/main/java}/ch/akuhn/fame/package.html | 0 .../fame/parser/AbstractParserClient.java | 0 .../ch/akuhn/fame/parser/DebugClient.java | 186 +- .../java}/ch/akuhn/fame/parser/Importer.java | 0 .../ch/akuhn/fame/parser/InputSource.java | 0 .../ch/akuhn/fame/parser/ParseClient.java | 0 .../ch/akuhn/fame/parser/ParseError.java | 0 .../java}/ch/akuhn/fame/parser/Parser.java | 0 .../java}/ch/akuhn/fame/parser/Position.java | 0 .../java}/ch/akuhn/fame/parser/Primitive.java | 54 +- .../java}/ch/akuhn/fame/parser/Scanner.java | 0 .../java}/ch/akuhn/fame/parser/Token.java | 0 .../java}/ch/akuhn/fame/parser/TokenType.java | 0 .../java}/ch/akuhn/fame/parser/package.html | 0 .../ch/akuhn/fame/codegen/Famix22Test.java | 0 .../ch/akuhn/fame/codegen/Famix30Test.java | 0 .../fame/codegen/target/DungeonCodegen.java | 0 .../fame/codegen/target/EMOFCodegen.java | 0 .../fame/codegen/target/Famix22Codegen.java | 0 .../fame/codegen/target/Famix30Codegen.java | 0 .../fame/codegen/target/Famix31Codegen.java | 0 .../fame/codegen/target/Famix70Codegen.java | 0 .../target/Famix70WithNewCppCodegen.java | 0 .../fame/codegen/target/FamixJavaCodegen.java | 0 .../akuhn/fame/codegen/target/LibCodegen.java | 0 .../ch/akuhn/fame/test/ArrayFieldTest.java | 138 +- .../fame/test/AssertionsEnabledTest.java | 0 .../ch/akuhn/fame/test/CompositeExample.java | 472 +- .../ch/akuhn/fame/test/DungeonExample.java | 508 +- .../ch/akuhn/fame/test/FM3MetaMetamodel.java | 0 .../java}/ch/akuhn/fame/test/Famix30.java | 0 .../akuhn/fame/test/IterablePropertyTest.java | 146 +- .../ch/akuhn/fame/test/JSONPrinterTest.java | 0 .../akuhn/fame/test/MetaDescriptionTest.java | 0 .../akuhn/fame/test/MetmodelBuilderTest.java | 48 +- .../akuhn/fame/test/MultivalueLinkTest.java | 338 +- .../ch/akuhn/fame/test/OppositeTest.java | 0 .../ch/akuhn/fame/test/PolymorphismTest.java | 90 +- .../java}/ch/akuhn/fame/test/ScannerTest.java | 0 .../java}/ch/akuhn/fame/test/StringsTest.java | 0 .../ch/akuhn/fame/test/TermBagExample.java | 308 +- .../ch/unibe/fame/resources/EMOF.emof.mse | 566 +- .../ch/unibe/fame/resources/EMOF.fm3.mse | 0 .../ch/unibe/fame/resources/FAMIX22.emof.mse | 8390 ++++++++--------- .../ch/unibe/fame/resources/FAMIX22.fm3.mse | 0 .../ch/unibe/fame/resources/FAMIX22.mse.mse | 0 .../ch/unibe/fame/resources/FAMIX30.fm3.mse | 0 .../ch/unibe/fame/resources/FAMIX70.mse | 0 .../ch/unibe/fame/resources/FM3.fm3.mse | 0 .../ch/unibe/fame/resources/FamixJava.mse | 0 .../ch/unibe/fame/resources/Lan.famix.mse | 7450 +++++++-------- .../ch/unibe/fame/resources/MSE.mse.mse | 0 .../fame/resources/famix70WithNewCpp.mse | 0 .../ch/unibe/fame/resources/java-mm.mse | 0 .../ch/unibe/fame/resources/lib.fm3.mse | 0 .../ch/unibe/fame/resources/lib.mse | 0 .../ch/unibe/fame/resources/rpg.fm3.mse | 86 +- .../ch/unibe/fame/resources/scg.lib.mse | 0 settings.gradle.kts | 14 + src/COPYING.LESSER | 165 - 124 files changed, 10551 insertions(+), 10529 deletions(-) create mode 100644 .gitattributes delete mode 100644 .idea/.gitignore delete mode 100644 .idea/ant.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/uiDesigner.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .project create mode 100644 .vscode/settings.json rename src/COPYING => COPYING (100%) delete mode 100644 build.xml create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 lib/build.gradle.kts rename lib/{ => lib}/akuhn-util-r28011.jar (100%) rename lib/{ => lib}/fa.jar (100%) rename lib/{ => lib}/famixJava.jar (100%) rename lib/{ => lib}/jexample-r378.jar (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/FameDescription.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/FamePackage.java (97%) rename {src => lib/src/main/java}/ch/akuhn/fame/FameProperty.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/MetaRepository.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/Named.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/Nested.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/Repository.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/Tower.java (95%) rename {src => lib/src/main/java}/ch/akuhn/fame/codegen/CodeGeneration.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/codegen/GenFile.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/codegen/InterfaceFile.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/codegen/JavaFile.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/codegen/Template.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/codegen/package.html (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/codegen/template.txt (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/dsl/MetamodelBuilder.java (97%) rename {src => lib/src/main/java}/ch/akuhn/fame/dsl/ModelBuilder.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/dsl/ProtocolChecker.java (96%) rename {src => lib/src/main/java}/ch/akuhn/fame/fm3/Element.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/fm3/FM3Trait.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/fm3/FM3Type.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/fm3/MetaDescription.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/fm3/PackageDescription.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/fm3/PropertyDescription.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/fm3/package.html (97%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/AbstractPrintClient.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/Access.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/FieldAccess.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/Inferencer.java (96%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/JSONPrettyPrinter.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/JSONPrinter.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/MSEPrinter.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/MetaDescriptionFactory.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/MethodAccess.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/MultivalueSet.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/PropertyFactory.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/PrototypeBuilder.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/RepositoryVisitor.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/RuntimeElement.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/TraitFactory.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/Warnings.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/internal/package.html (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/package.html (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/AbstractParserClient.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/DebugClient.java (96%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/Importer.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/InputSource.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/ParseClient.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/ParseError.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/Parser.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/Position.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/Primitive.java (95%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/Scanner.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/Token.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/TokenType.java (100%) rename {src => lib/src/main/java}/ch/akuhn/fame/parser/package.html (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/Famix22Test.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/Famix30Test.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/DungeonCodegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/EMOFCodegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/Famix22Codegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/Famix30Codegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/Famix31Codegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/Famix70Codegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/Famix70WithNewCppCodegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/FamixJavaCodegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/codegen/target/LibCodegen.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/ArrayFieldTest.java (96%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/AssertionsEnabledTest.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/CompositeExample.java (96%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/DungeonExample.java (96%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/FM3MetaMetamodel.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/Famix30.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/IterablePropertyTest.java (96%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/JSONPrinterTest.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/MetaDescriptionTest.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/MetmodelBuilderTest.java (95%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/MultivalueLinkTest.java (97%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/OppositeTest.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/PolymorphismTest.java (95%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/ScannerTest.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/StringsTest.java (100%) rename {test => lib/src/test/java}/ch/akuhn/fame/test/TermBagExample.java (96%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/EMOF.emof.mse (96%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/EMOF.fm3.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/FAMIX22.emof.mse (96%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/FAMIX22.fm3.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/FAMIX22.mse.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/FAMIX30.fm3.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/FAMIX70.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/FM3.fm3.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/FamixJava.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/Lan.famix.mse (96%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/MSE.mse.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/famix70WithNewCpp.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/java-mm.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/lib.fm3.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/lib.mse (100%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/rpg.fm3.mse (97%) rename {samples => lib/src/test/resources}/ch/unibe/fame/resources/scg.lib.mse (100%) create mode 100644 settings.gradle.kts delete mode 100644 src/COPYING.LESSER diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f91f646 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,12 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + +# Binary files should be left untouched +*.jar binary + diff --git a/.gitignore b/.gitignore index 6f962c1..dcfb095 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ /bin/ fame-rUnversioned directory.jar fame-lib.jar + +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 73f69e0..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/ant.xml b/.idea/ant.xml deleted file mode 100644 index a2a4769..0000000 --- a/.idea/ant.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index fecd107..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index e48919a..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index e96534f..0000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.project b/.project deleted file mode 100644 index 03ba38a..0000000 --- a/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - FameJava - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - - - 1653397938062 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7b016a8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.compile.nullAnalysis.mode": "automatic" +} \ No newline at end of file diff --git a/src/COPYING b/COPYING similarity index 100% rename from src/COPYING rename to COPYING diff --git a/build.xml b/build.xml deleted file mode 100644 index 1aab84d..0000000 --- a/build.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..1aab14a --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,12 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format + +[versions] +commons-math3 = "3.6.1" +guava = "33.2.1-jre" +junit = "4.13.2" + +[libraries] +commons-math3 = { module = "org.apache.commons:commons-math3", version.ref = "commons-math3" } +guava = { module = "com.google.guava:guava", version.ref = "guava" } +junit = { module = "junit:junit", version.ref = "junit" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..df97d72 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..f5feea6 --- /dev/null +++ b/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts new file mode 100644 index 0000000..d3773a9 --- /dev/null +++ b/lib/build.gradle.kts @@ -0,0 +1,39 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This generated file contains a sample Java library project to get you started. + * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.10.2/userguide/building_java_projects.html in the Gradle documentation. + */ + +plugins { + // Apply the java-library plugin for API and implementation separation. + `java-library` +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() + flatDir { + dirs("lib") + } +} + +dependencies { + // Use JUnit test framework. + testImplementation(libs.junit) + + // This dependency is exported to consumers, that is to say found on their compile classpath. + api(libs.commons.math3) + + // This dependency is used internally, and not exposed to consumers on their own compile classpath. + implementation(libs.guava) + + implementation(fileTree("lib") { include("*.jar") }) +} + +// Apply a specific Java toolchain to ease working on different environments. +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} diff --git a/lib/akuhn-util-r28011.jar b/lib/lib/akuhn-util-r28011.jar similarity index 100% rename from lib/akuhn-util-r28011.jar rename to lib/lib/akuhn-util-r28011.jar diff --git a/lib/fa.jar b/lib/lib/fa.jar similarity index 100% rename from lib/fa.jar rename to lib/lib/fa.jar diff --git a/lib/famixJava.jar b/lib/lib/famixJava.jar similarity index 100% rename from lib/famixJava.jar rename to lib/lib/famixJava.jar diff --git a/lib/jexample-r378.jar b/lib/lib/jexample-r378.jar similarity index 100% rename from lib/jexample-r378.jar rename to lib/lib/jexample-r378.jar diff --git a/src/ch/akuhn/fame/FameDescription.java b/lib/src/main/java/ch/akuhn/fame/FameDescription.java similarity index 100% rename from src/ch/akuhn/fame/FameDescription.java rename to lib/src/main/java/ch/akuhn/fame/FameDescription.java diff --git a/src/ch/akuhn/fame/FamePackage.java b/lib/src/main/java/ch/akuhn/fame/FamePackage.java similarity index 97% rename from src/ch/akuhn/fame/FamePackage.java rename to lib/src/main/java/ch/akuhn/fame/FamePackage.java index 1acc82d..47c514a 100644 --- a/src/ch/akuhn/fame/FamePackage.java +++ b/lib/src/main/java/ch/akuhn/fame/FamePackage.java @@ -1,50 +1,50 @@ -// Copyright (c) 2007-2008 Adrian Kuhn -// -// This file is part of 'Fame (for Java)'. -// -// 'Fame (for Java)' is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or (at your -// option) any later version. -// -// 'Fame (for Java)' is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -// License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with 'Fame (for Java)'. If not, see . -// -package ch.akuhn.fame; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Indicates the FM3.Package of a fame-described element. If this annotation is - * not present, the declaring class and any enclosing classes are queried for - * FamePackage annotations. If none is found, the simple name of the enclosing - * java package is used. Thus, the FM3.Package name of a fame-described element - * is resolved in the following order: - *
    - *
  1. FamePackage annotation of the element, - *
  2. FamePackage annotation of declaring class (unless element is a class), - *
  3. FamePackage annotation of any enclosing class, - *
  4. FamePackage annotation of containing java package, - *
  5. or else, last part of java package name. - *
- * FM3 package names start with a letter, and may contain letters and numbers. - * It is recommended to use uppercase letters only. - * - * @author Adrian Kuhn, 2008 - * - */ -@Retention(RetentionPolicy.RUNTIME) -@Target( { ElementType.TYPE, ElementType.PACKAGE, ElementType.METHOD, ElementType.FIELD }) -public @interface FamePackage { - - String value(); - -} +// Copyright (c) 2007-2008 Adrian Kuhn +// +// This file is part of 'Fame (for Java)'. +// +// 'Fame (for Java)' is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at your +// option) any later version. +// +// 'Fame (for Java)' is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +// License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with 'Fame (for Java)'. If not, see . +// +package ch.akuhn.fame; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Indicates the FM3.Package of a fame-described element. If this annotation is + * not present, the declaring class and any enclosing classes are queried for + * FamePackage annotations. If none is found, the simple name of the enclosing + * java package is used. Thus, the FM3.Package name of a fame-described element + * is resolved in the following order: + *
    + *
  1. FamePackage annotation of the element, + *
  2. FamePackage annotation of declaring class (unless element is a class), + *
  3. FamePackage annotation of any enclosing class, + *
  4. FamePackage annotation of containing java package, + *
  5. or else, last part of java package name. + *
+ * FM3 package names start with a letter, and may contain letters and numbers. + * It is recommended to use uppercase letters only. + * + * @author Adrian Kuhn, 2008 + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target( { ElementType.TYPE, ElementType.PACKAGE, ElementType.METHOD, ElementType.FIELD }) +public @interface FamePackage { + + String value(); + +} diff --git a/src/ch/akuhn/fame/FameProperty.java b/lib/src/main/java/ch/akuhn/fame/FameProperty.java similarity index 100% rename from src/ch/akuhn/fame/FameProperty.java rename to lib/src/main/java/ch/akuhn/fame/FameProperty.java diff --git a/src/ch/akuhn/fame/MetaRepository.java b/lib/src/main/java/ch/akuhn/fame/MetaRepository.java similarity index 100% rename from src/ch/akuhn/fame/MetaRepository.java rename to lib/src/main/java/ch/akuhn/fame/MetaRepository.java diff --git a/src/ch/akuhn/fame/Named.java b/lib/src/main/java/ch/akuhn/fame/Named.java similarity index 100% rename from src/ch/akuhn/fame/Named.java rename to lib/src/main/java/ch/akuhn/fame/Named.java diff --git a/src/ch/akuhn/fame/Nested.java b/lib/src/main/java/ch/akuhn/fame/Nested.java similarity index 100% rename from src/ch/akuhn/fame/Nested.java rename to lib/src/main/java/ch/akuhn/fame/Nested.java diff --git a/src/ch/akuhn/fame/Repository.java b/lib/src/main/java/ch/akuhn/fame/Repository.java similarity index 100% rename from src/ch/akuhn/fame/Repository.java rename to lib/src/main/java/ch/akuhn/fame/Repository.java diff --git a/src/ch/akuhn/fame/Tower.java b/lib/src/main/java/ch/akuhn/fame/Tower.java similarity index 95% rename from src/ch/akuhn/fame/Tower.java rename to lib/src/main/java/ch/akuhn/fame/Tower.java index 4ba83ba..23ecace 100644 --- a/src/ch/akuhn/fame/Tower.java +++ b/lib/src/main/java/ch/akuhn/fame/Tower.java @@ -1,42 +1,42 @@ -package ch.akuhn.fame; - -/** - * - * - * @author Adrian Kuhn - * - */ -public class Tower { - - public final Repository model; - - public final MetaRepository metamodel; - - public final MetaRepository metaMetamodel; - - private Tower(MetaRepository m3, MetaRepository m2, Repository m1) { - this.metaMetamodel = m3; - this.metamodel = (m2 != null) ? m2 : new MetaRepository(metaMetamodel); - this.model = (m1 != null) ? m1 : new Repository(metamodel); - assert metaMetamodel.getMetamodel().equals(metaMetamodel); - assert metamodel.getMetamodel().equals(metaMetamodel); - assert model.getMetamodel().equals(metamodel); - } - - public Tower() { - this(MetaRepository.createFM3(), null, null); - } - - public MetaRepository getMetaMetamodel() { - return metaMetamodel; - } - - public MetaRepository getMetamodel() { - return metamodel; - } - - public Repository getModel() { - return model; - } - -} +package ch.akuhn.fame; + +/** + * + * + * @author Adrian Kuhn + * + */ +public class Tower { + + public final Repository model; + + public final MetaRepository metamodel; + + public final MetaRepository metaMetamodel; + + private Tower(MetaRepository m3, MetaRepository m2, Repository m1) { + this.metaMetamodel = m3; + this.metamodel = (m2 != null) ? m2 : new MetaRepository(metaMetamodel); + this.model = (m1 != null) ? m1 : new Repository(metamodel); + assert metaMetamodel.getMetamodel().equals(metaMetamodel); + assert metamodel.getMetamodel().equals(metaMetamodel); + assert model.getMetamodel().equals(metamodel); + } + + public Tower() { + this(MetaRepository.createFM3(), null, null); + } + + public MetaRepository getMetaMetamodel() { + return metaMetamodel; + } + + public MetaRepository getMetamodel() { + return metamodel; + } + + public Repository getModel() { + return model; + } + +} diff --git a/src/ch/akuhn/fame/codegen/CodeGeneration.java b/lib/src/main/java/ch/akuhn/fame/codegen/CodeGeneration.java similarity index 100% rename from src/ch/akuhn/fame/codegen/CodeGeneration.java rename to lib/src/main/java/ch/akuhn/fame/codegen/CodeGeneration.java diff --git a/src/ch/akuhn/fame/codegen/GenFile.java b/lib/src/main/java/ch/akuhn/fame/codegen/GenFile.java similarity index 100% rename from src/ch/akuhn/fame/codegen/GenFile.java rename to lib/src/main/java/ch/akuhn/fame/codegen/GenFile.java diff --git a/src/ch/akuhn/fame/codegen/InterfaceFile.java b/lib/src/main/java/ch/akuhn/fame/codegen/InterfaceFile.java similarity index 100% rename from src/ch/akuhn/fame/codegen/InterfaceFile.java rename to lib/src/main/java/ch/akuhn/fame/codegen/InterfaceFile.java diff --git a/src/ch/akuhn/fame/codegen/JavaFile.java b/lib/src/main/java/ch/akuhn/fame/codegen/JavaFile.java similarity index 100% rename from src/ch/akuhn/fame/codegen/JavaFile.java rename to lib/src/main/java/ch/akuhn/fame/codegen/JavaFile.java diff --git a/src/ch/akuhn/fame/codegen/Template.java b/lib/src/main/java/ch/akuhn/fame/codegen/Template.java similarity index 100% rename from src/ch/akuhn/fame/codegen/Template.java rename to lib/src/main/java/ch/akuhn/fame/codegen/Template.java diff --git a/src/ch/akuhn/fame/codegen/package.html b/lib/src/main/java/ch/akuhn/fame/codegen/package.html similarity index 100% rename from src/ch/akuhn/fame/codegen/package.html rename to lib/src/main/java/ch/akuhn/fame/codegen/package.html diff --git a/src/ch/akuhn/fame/codegen/template.txt b/lib/src/main/java/ch/akuhn/fame/codegen/template.txt similarity index 100% rename from src/ch/akuhn/fame/codegen/template.txt rename to lib/src/main/java/ch/akuhn/fame/codegen/template.txt diff --git a/src/ch/akuhn/fame/dsl/MetamodelBuilder.java b/lib/src/main/java/ch/akuhn/fame/dsl/MetamodelBuilder.java similarity index 97% rename from src/ch/akuhn/fame/dsl/MetamodelBuilder.java rename to lib/src/main/java/ch/akuhn/fame/dsl/MetamodelBuilder.java index 9370d0b..35dad0a 100644 --- a/src/ch/akuhn/fame/dsl/MetamodelBuilder.java +++ b/lib/src/main/java/ch/akuhn/fame/dsl/MetamodelBuilder.java @@ -1,224 +1,224 @@ -package ch.akuhn.fame.dsl; - -import java.util.HashMap; -import java.util.Map; - -import ch.akuhn.fame.fm3.MetaDescription; -import ch.akuhn.fame.parser.DebugClient; -import ch.akuhn.fame.parser.ParseClient; - -public class MetamodelBuilder { - - public interface Document { - public Package beginPackage(String name); - public void endDocument(); - } - - public interface Package { - public Class beginClass(String name); - public Document endPackage(); - public void endDocument(); - public Package beginPackage(String string); - } - - public interface Class { - public Class with(String name, String type, String opposite); - public Class with(String name, String type); - public Class withMany(String name, String type, String opposite); - public Class withMany(String name, String type); - public Package endClass(); - public Class beginClass(String string); - public void endDocument(); - public Package beginPackage(String string); - } - - private class DocumentImpl implements Document { - - public DocumentImpl() { - client.beginDocument(); - } - - public Package beginPackage(String name) { - return new PackageImpl(name); - } - - public void endDocument() { - client.endDocument(); - } - - private class PackageImpl implements Package { - - public final String packageName; - - public PackageImpl(String name) { - assert name != null; - client.beginElement("FM3.Package"); - client.beginAttribute("name"); - client.primitive(this.packageName = name); - client.endAttribute("name"); - client.beginAttribute("classes"); - } - - public Class beginClass(String name) { - return new ClassImpl(name); - } - - public Document endPackage() { - client.endAttribute("classes"); - client.endElement("FM3.Package"); - return DocumentImpl.this; - } - - private class ClassImpl implements Class { - - public final String className; - - public ClassImpl(String name) { - assert name != null; - client.beginElement("FM3.Class"); - client.serial(to(packageName + "." + name)); - client.beginAttribute("name"); - client.primitive(this.className = name); - client.endAttribute("name"); - client.beginAttribute("properties"); - } - - private Class with(String name, String type, String opposite, boolean multivalued) { - client.beginElement("FM3.Property"); - client.serial(to(packageName + "." + className + "." + name)); - client.beginAttribute("name"); - client.primitive(name); - client.endAttribute("name"); - client.beginAttribute("type"); - this.typeOfProperty(type); - client.endAttribute("type"); - if (opposite != null) { - client.beginAttribute("opposite"); - client.reference(to(type + "." + opposite)); - client.endAttribute("opposite"); - } - if (multivalued) { - client.beginAttribute("multivalued"); - client.primitive(true); - client.endAttribute("multivalued"); - } - client.endElement("FM3.Property"); - return this; - } - - private void typeOfProperty(String type) { - if (MetaDescription.hasPrimitiveNamed(type)) - client.reference(type); - else - client.reference(to(type)); - } - - public Class with(String name, String type) { - return with(name, type, null, false); - } - - public Class withMany(String name, String type, String opposite) { - return with(name, type, opposite, true); - } - - public Class withMany(String name, String type) { - return with(name, type, null, true); - } - - public Class with(String name, String type, String opposite) { - return with(name, type, opposite, false); - } - - public Package endClass() { - client.endAttribute("properties"); - client.endElement("FM3.Class"); - return PackageImpl.this; - } - - public Class beginClass(String name) { - return endClass().beginClass(name); - } - - public void endDocument() { - endClass().endDocument(); - } - - public Package beginPackage(String name) { - return endClass().endPackage().beginPackage(name); - } - - } - - public void endDocument() { - endPackage().endDocument(); - } - - public Package beginPackage(String name) { - return endPackage().beginPackage(name); - } - - } - - } - - private final ParseClient client; - private Map indexDict; - - public MetamodelBuilder(ParseClient client) { - this.client = client; - this.indexDict = new HashMap(); - } - - public Document beginDocument() { - return new DocumentImpl(); - } - - private int to(String name) { - Integer key = indexDict.get(name); - if (key != null) return key; - indexDict.put(name, key = indexDict.size()); - return key; - } - - public static void main(String[] args) { - - ParseClient pc = new DebugClient(); - - new MetamodelBuilder(pc) - - .beginDocument() - .beginPackage("RPG") - .beginClass("Dragon") - .withMany("hoard", "RPG.Treasure", "keeper") - .withMany("killedBy", "RPG.Hero", "kills") - .beginClass("Treasure") - .with("keeper", "RPG.Dragon", "hoard") - .with("owner", "RPG.Hero", "talisman") - .beginClass("Hero") - .with("twin", "RPG.Hero", "twin") - .with("talisman", "RPG.Treasure", "owner") - .withMany("kills", "RPG.Dragon", "killedBy") - .endDocument(); - -// m = new MetamodelBuilder(pc) -// -// m.beginDocument( -// m.beginPackage("RPG", -// m.beginClass("Dragon", -// m.withMany("hoard", "RPG.Treasure", "keeper"), -// m.withMany("killedBy", "RPG.Hero", "kills")), -// m.beginClass("Treasure", -// m.with("keeper", "RPG.Dragon", "hoard"), -// m.with("owner", "RPG.Hero", "talisman")), -// m.beginClass("Hero", -// m.with("twin", "RPG.Hero", "twin"), -// m.with("talisman", "RPG.Treasure", "owner"), -// m.withMany("kills", "RPG.Dragon", "killedBy")))); - - System.out.println(pc); - - } - - -} - +package ch.akuhn.fame.dsl; + +import java.util.HashMap; +import java.util.Map; + +import ch.akuhn.fame.fm3.MetaDescription; +import ch.akuhn.fame.parser.DebugClient; +import ch.akuhn.fame.parser.ParseClient; + +public class MetamodelBuilder { + + public interface Document { + public Package beginPackage(String name); + public void endDocument(); + } + + public interface Package { + public Class beginClass(String name); + public Document endPackage(); + public void endDocument(); + public Package beginPackage(String string); + } + + public interface Class { + public Class with(String name, String type, String opposite); + public Class with(String name, String type); + public Class withMany(String name, String type, String opposite); + public Class withMany(String name, String type); + public Package endClass(); + public Class beginClass(String string); + public void endDocument(); + public Package beginPackage(String string); + } + + private class DocumentImpl implements Document { + + public DocumentImpl() { + client.beginDocument(); + } + + public Package beginPackage(String name) { + return new PackageImpl(name); + } + + public void endDocument() { + client.endDocument(); + } + + private class PackageImpl implements Package { + + public final String packageName; + + public PackageImpl(String name) { + assert name != null; + client.beginElement("FM3.Package"); + client.beginAttribute("name"); + client.primitive(this.packageName = name); + client.endAttribute("name"); + client.beginAttribute("classes"); + } + + public Class beginClass(String name) { + return new ClassImpl(name); + } + + public Document endPackage() { + client.endAttribute("classes"); + client.endElement("FM3.Package"); + return DocumentImpl.this; + } + + private class ClassImpl implements Class { + + public final String className; + + public ClassImpl(String name) { + assert name != null; + client.beginElement("FM3.Class"); + client.serial(to(packageName + "." + name)); + client.beginAttribute("name"); + client.primitive(this.className = name); + client.endAttribute("name"); + client.beginAttribute("properties"); + } + + private Class with(String name, String type, String opposite, boolean multivalued) { + client.beginElement("FM3.Property"); + client.serial(to(packageName + "." + className + "." + name)); + client.beginAttribute("name"); + client.primitive(name); + client.endAttribute("name"); + client.beginAttribute("type"); + this.typeOfProperty(type); + client.endAttribute("type"); + if (opposite != null) { + client.beginAttribute("opposite"); + client.reference(to(type + "." + opposite)); + client.endAttribute("opposite"); + } + if (multivalued) { + client.beginAttribute("multivalued"); + client.primitive(true); + client.endAttribute("multivalued"); + } + client.endElement("FM3.Property"); + return this; + } + + private void typeOfProperty(String type) { + if (MetaDescription.hasPrimitiveNamed(type)) + client.reference(type); + else + client.reference(to(type)); + } + + public Class with(String name, String type) { + return with(name, type, null, false); + } + + public Class withMany(String name, String type, String opposite) { + return with(name, type, opposite, true); + } + + public Class withMany(String name, String type) { + return with(name, type, null, true); + } + + public Class with(String name, String type, String opposite) { + return with(name, type, opposite, false); + } + + public Package endClass() { + client.endAttribute("properties"); + client.endElement("FM3.Class"); + return PackageImpl.this; + } + + public Class beginClass(String name) { + return endClass().beginClass(name); + } + + public void endDocument() { + endClass().endDocument(); + } + + public Package beginPackage(String name) { + return endClass().endPackage().beginPackage(name); + } + + } + + public void endDocument() { + endPackage().endDocument(); + } + + public Package beginPackage(String name) { + return endPackage().beginPackage(name); + } + + } + + } + + private final ParseClient client; + private Map indexDict; + + public MetamodelBuilder(ParseClient client) { + this.client = client; + this.indexDict = new HashMap(); + } + + public Document beginDocument() { + return new DocumentImpl(); + } + + private int to(String name) { + Integer key = indexDict.get(name); + if (key != null) return key; + indexDict.put(name, key = indexDict.size()); + return key; + } + + public static void main(String[] args) { + + ParseClient pc = new DebugClient(); + + new MetamodelBuilder(pc) + + .beginDocument() + .beginPackage("RPG") + .beginClass("Dragon") + .withMany("hoard", "RPG.Treasure", "keeper") + .withMany("killedBy", "RPG.Hero", "kills") + .beginClass("Treasure") + .with("keeper", "RPG.Dragon", "hoard") + .with("owner", "RPG.Hero", "talisman") + .beginClass("Hero") + .with("twin", "RPG.Hero", "twin") + .with("talisman", "RPG.Treasure", "owner") + .withMany("kills", "RPG.Dragon", "killedBy") + .endDocument(); + +// m = new MetamodelBuilder(pc) +// +// m.beginDocument( +// m.beginPackage("RPG", +// m.beginClass("Dragon", +// m.withMany("hoard", "RPG.Treasure", "keeper"), +// m.withMany("killedBy", "RPG.Hero", "kills")), +// m.beginClass("Treasure", +// m.with("keeper", "RPG.Dragon", "hoard"), +// m.with("owner", "RPG.Hero", "talisman")), +// m.beginClass("Hero", +// m.with("twin", "RPG.Hero", "twin"), +// m.with("talisman", "RPG.Treasure", "owner"), +// m.withMany("kills", "RPG.Dragon", "killedBy")))); + + System.out.println(pc); + + } + + +} + diff --git a/src/ch/akuhn/fame/dsl/ModelBuilder.java b/lib/src/main/java/ch/akuhn/fame/dsl/ModelBuilder.java similarity index 100% rename from src/ch/akuhn/fame/dsl/ModelBuilder.java rename to lib/src/main/java/ch/akuhn/fame/dsl/ModelBuilder.java diff --git a/src/ch/akuhn/fame/dsl/ProtocolChecker.java b/lib/src/main/java/ch/akuhn/fame/dsl/ProtocolChecker.java similarity index 96% rename from src/ch/akuhn/fame/dsl/ProtocolChecker.java rename to lib/src/main/java/ch/akuhn/fame/dsl/ProtocolChecker.java index 9108880..da5632b 100644 --- a/src/ch/akuhn/fame/dsl/ProtocolChecker.java +++ b/lib/src/main/java/ch/akuhn/fame/dsl/ProtocolChecker.java @@ -1,129 +1,129 @@ -package ch.akuhn.fame.dsl; - -import static ch.akuhn.fame.dsl.ProtocolChecker.State.BEGIN_ATTRIBUTE; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.BEGIN_DOCUMENT; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.BEGIN_ELEMENT; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.DIRECTIVE; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.END_ATTRIBUTE; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.END_DOCUMENT; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.END_ELEMENT; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.PRIMITIVE; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.REFERENCE; -import static ch.akuhn.fame.dsl.ProtocolChecker.State.SERIAL; - -import java.util.Arrays; -import java.util.LinkedList; - -import ch.akuhn.fame.parser.ParseClient; - -public class ProtocolChecker implements ParseClient { - - private LinkedList stack = new LinkedList(); - private State[] expectedState = { State.BEGIN_DOCUMENT, State.DIRECTIVE }; - - public enum State { - DIRECTIVE, - BEGIN_DOCUMENT, END_DOCUMENT, - BEGIN_ELEMENT, END_ELEMENT, - BEGIN_ATTRIBUTE, END_ATTRIBUTE, - REFERENCE, PRIMITIVE, - SERIAL - } - - public ParseClient client; - - public ProtocolChecker(ParseClient client) { - this.client = client; - } - - public void beginAttribute(String name) { - stack.addLast(name); - checkState(BEGIN_ATTRIBUTE); - expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); - client.beginAttribute(name); - } - - private void checkState(State state) { - for (State each : expectedState) { - if (each == state) return; - } - assert false : "Expected " + Arrays.asList(expectedState) + " but was " + state; - } - - public void beginDocument() { - checkState(BEGIN_DOCUMENT); - expectState(BEGIN_ELEMENT, END_DOCUMENT); - client.beginDocument(); - } - - private void expectState(State... states) { - expectedState = states; - } - - public void beginElement(String name) { - stack.addLast(name); - checkState(BEGIN_ELEMENT); - expectState(BEGIN_ATTRIBUTE, SERIAL, END_ELEMENT); - client.beginElement(name); - } - - public void directive(String name, String... params) { - checkState(DIRECTIVE); - expectState(BEGIN_DOCUMENT, DIRECTIVE); - client.directive(name,params); - } - - public void endAttribute(String name) { - assert name.equals(stack.removeLast()); - checkState(END_ATTRIBUTE); - expectState(BEGIN_ATTRIBUTE, END_ELEMENT); - client.endAttribute(name); - } - - public void endDocument() { - checkState(END_DOCUMENT); - expectState(); - client.endDocument(); - } - - public void endElement(String name) { - assert name.equals(stack.removeLast()); - checkState(END_ELEMENT); - if (stack.isEmpty()) { - expectState(BEGIN_ELEMENT, END_DOCUMENT); - } - else { - expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); - } - client.endElement(name); - } - - public void primitive(Object value) { - checkState(PRIMITIVE); - expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); - client.primitive(value); - } - - public void reference(int index) { - checkState(REFERENCE); - expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); - client.reference(index); - } - - public void reference(String name) { - checkState(REFERENCE); - expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); - client.reference(name); - } - - public void reference(String name, int index) { - throw new AssertionError("Not yet implemented!"); - } - - public void serial(int index) { - checkState(SERIAL); - expectState(BEGIN_ATTRIBUTE, END_ELEMENT); - client.serial(index); - } - -} +package ch.akuhn.fame.dsl; + +import static ch.akuhn.fame.dsl.ProtocolChecker.State.BEGIN_ATTRIBUTE; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.BEGIN_DOCUMENT; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.BEGIN_ELEMENT; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.DIRECTIVE; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.END_ATTRIBUTE; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.END_DOCUMENT; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.END_ELEMENT; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.PRIMITIVE; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.REFERENCE; +import static ch.akuhn.fame.dsl.ProtocolChecker.State.SERIAL; + +import java.util.Arrays; +import java.util.LinkedList; + +import ch.akuhn.fame.parser.ParseClient; + +public class ProtocolChecker implements ParseClient { + + private LinkedList stack = new LinkedList(); + private State[] expectedState = { State.BEGIN_DOCUMENT, State.DIRECTIVE }; + + public enum State { + DIRECTIVE, + BEGIN_DOCUMENT, END_DOCUMENT, + BEGIN_ELEMENT, END_ELEMENT, + BEGIN_ATTRIBUTE, END_ATTRIBUTE, + REFERENCE, PRIMITIVE, + SERIAL + } + + public ParseClient client; + + public ProtocolChecker(ParseClient client) { + this.client = client; + } + + public void beginAttribute(String name) { + stack.addLast(name); + checkState(BEGIN_ATTRIBUTE); + expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); + client.beginAttribute(name); + } + + private void checkState(State state) { + for (State each : expectedState) { + if (each == state) return; + } + assert false : "Expected " + Arrays.asList(expectedState) + " but was " + state; + } + + public void beginDocument() { + checkState(BEGIN_DOCUMENT); + expectState(BEGIN_ELEMENT, END_DOCUMENT); + client.beginDocument(); + } + + private void expectState(State... states) { + expectedState = states; + } + + public void beginElement(String name) { + stack.addLast(name); + checkState(BEGIN_ELEMENT); + expectState(BEGIN_ATTRIBUTE, SERIAL, END_ELEMENT); + client.beginElement(name); + } + + public void directive(String name, String... params) { + checkState(DIRECTIVE); + expectState(BEGIN_DOCUMENT, DIRECTIVE); + client.directive(name,params); + } + + public void endAttribute(String name) { + assert name.equals(stack.removeLast()); + checkState(END_ATTRIBUTE); + expectState(BEGIN_ATTRIBUTE, END_ELEMENT); + client.endAttribute(name); + } + + public void endDocument() { + checkState(END_DOCUMENT); + expectState(); + client.endDocument(); + } + + public void endElement(String name) { + assert name.equals(stack.removeLast()); + checkState(END_ELEMENT); + if (stack.isEmpty()) { + expectState(BEGIN_ELEMENT, END_DOCUMENT); + } + else { + expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); + } + client.endElement(name); + } + + public void primitive(Object value) { + checkState(PRIMITIVE); + expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); + client.primitive(value); + } + + public void reference(int index) { + checkState(REFERENCE); + expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); + client.reference(index); + } + + public void reference(String name) { + checkState(REFERENCE); + expectState(BEGIN_ELEMENT, END_ATTRIBUTE, PRIMITIVE, REFERENCE); + client.reference(name); + } + + public void reference(String name, int index) { + throw new AssertionError("Not yet implemented!"); + } + + public void serial(int index) { + checkState(SERIAL); + expectState(BEGIN_ATTRIBUTE, END_ELEMENT); + client.serial(index); + } + +} diff --git a/src/ch/akuhn/fame/fm3/Element.java b/lib/src/main/java/ch/akuhn/fame/fm3/Element.java similarity index 100% rename from src/ch/akuhn/fame/fm3/Element.java rename to lib/src/main/java/ch/akuhn/fame/fm3/Element.java diff --git a/src/ch/akuhn/fame/fm3/FM3Trait.java b/lib/src/main/java/ch/akuhn/fame/fm3/FM3Trait.java similarity index 100% rename from src/ch/akuhn/fame/fm3/FM3Trait.java rename to lib/src/main/java/ch/akuhn/fame/fm3/FM3Trait.java diff --git a/src/ch/akuhn/fame/fm3/FM3Type.java b/lib/src/main/java/ch/akuhn/fame/fm3/FM3Type.java similarity index 100% rename from src/ch/akuhn/fame/fm3/FM3Type.java rename to lib/src/main/java/ch/akuhn/fame/fm3/FM3Type.java diff --git a/src/ch/akuhn/fame/fm3/MetaDescription.java b/lib/src/main/java/ch/akuhn/fame/fm3/MetaDescription.java similarity index 100% rename from src/ch/akuhn/fame/fm3/MetaDescription.java rename to lib/src/main/java/ch/akuhn/fame/fm3/MetaDescription.java diff --git a/src/ch/akuhn/fame/fm3/PackageDescription.java b/lib/src/main/java/ch/akuhn/fame/fm3/PackageDescription.java similarity index 100% rename from src/ch/akuhn/fame/fm3/PackageDescription.java rename to lib/src/main/java/ch/akuhn/fame/fm3/PackageDescription.java diff --git a/src/ch/akuhn/fame/fm3/PropertyDescription.java b/lib/src/main/java/ch/akuhn/fame/fm3/PropertyDescription.java similarity index 100% rename from src/ch/akuhn/fame/fm3/PropertyDescription.java rename to lib/src/main/java/ch/akuhn/fame/fm3/PropertyDescription.java diff --git a/src/ch/akuhn/fame/fm3/package.html b/lib/src/main/java/ch/akuhn/fame/fm3/package.html similarity index 97% rename from src/ch/akuhn/fame/fm3/package.html rename to lib/src/main/java/ch/akuhn/fame/fm3/package.html index 30a5dfe..af60ad1 100644 --- a/src/ch/akuhn/fame/fm3/package.html +++ b/lib/src/main/java/ch/akuhn/fame/fm3/package.html @@ -1,5 +1,5 @@ -FM3 is the FAME meta-metamodel. FM3 is a model to describe metamodels. -As any meta-metamodel, FM3 is self-described in itself. - -@link http://smallwiki.unibe.ch/fame/fm3/ +FM3 is the FAME meta-metamodel. FM3 is a model to describe metamodels. +As any meta-metamodel, FM3 is self-described in itself. + +@link http://smallwiki.unibe.ch/fame/fm3/ \ No newline at end of file diff --git a/src/ch/akuhn/fame/internal/AbstractPrintClient.java b/lib/src/main/java/ch/akuhn/fame/internal/AbstractPrintClient.java similarity index 100% rename from src/ch/akuhn/fame/internal/AbstractPrintClient.java rename to lib/src/main/java/ch/akuhn/fame/internal/AbstractPrintClient.java diff --git a/src/ch/akuhn/fame/internal/Access.java b/lib/src/main/java/ch/akuhn/fame/internal/Access.java similarity index 100% rename from src/ch/akuhn/fame/internal/Access.java rename to lib/src/main/java/ch/akuhn/fame/internal/Access.java diff --git a/src/ch/akuhn/fame/internal/FieldAccess.java b/lib/src/main/java/ch/akuhn/fame/internal/FieldAccess.java similarity index 100% rename from src/ch/akuhn/fame/internal/FieldAccess.java rename to lib/src/main/java/ch/akuhn/fame/internal/FieldAccess.java diff --git a/src/ch/akuhn/fame/internal/Inferencer.java b/lib/src/main/java/ch/akuhn/fame/internal/Inferencer.java similarity index 96% rename from src/ch/akuhn/fame/internal/Inferencer.java rename to lib/src/main/java/ch/akuhn/fame/internal/Inferencer.java index 4eb6918..1db1967 100644 --- a/src/ch/akuhn/fame/internal/Inferencer.java +++ b/lib/src/main/java/ch/akuhn/fame/internal/Inferencer.java @@ -1,273 +1,273 @@ -package ch.akuhn.fame.internal; - -import static java.lang.Math.max; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.Map; -import java.util.Set; - -import ch.akuhn.fame.fm3.PackageDescription; -import ch.akuhn.fame.parser.AbstractParserClient; -import ch.akuhn.fame.parser.ParseClient; -import ch.akuhn.fame.parser.Primitive; - -public class Inferencer extends AbstractParserClient implements Runnable { - - private static class AbstractAttribute { - - private int maxCount; - final String name; - public Set elements; - - public AbstractAttribute(String name) { - this.name = name; - } - - public void addCount(int count) { - maxCount = max(count, maxCount); - } - - public Object inferElementType() { - assert elements.size() == 1; - return elements.iterator().next(); - } - - public boolean inferMultivalued() { - return maxCount > 1; - } - - public void resolveReferences(Map indexMap) { - for (Object each : new ArrayList(elements)) { - if (each instanceof Integer) { - elements.remove(each); - elements.add(indexMap.get(each)); - } - } - } - - } - - private static class AbstractElement { - - public Map attributes; - private AbstractAttribute curr; - private int count; - final String name; - final int index; - - public AbstractElement(String name, int index) { - this.name = name; - this.index = index; - } - - public void attributeElementsAdd(Object any) { - count++; - curr.elements.add(any); - } - - public String packageName() { - int pos = name.lastIndexOf('.'); - assert pos > 0; - return name.substring(0, pos); - } - - public void resetCurrentAttribute() { - assert curr != null; - curr.addCount(count); - curr = null; - count = -1; - } - - public void setCurrentAttribute(AbstractAttribute attribute) { - assert curr == null; - curr = attribute; - count = 0; - } - - public String simpleName() { - int pos = name.lastIndexOf('.'); - assert pos > 0; - return name.substring(pos + 1); - } - - } - - private Map nameMap; - private Map indexMap; - private LinkedList stack; - - private int serial; - private ParseClient client; - - @Override - public void beginAttribute(String name) { - AbstractElement element = stack.getLast(); - AbstractAttribute attribute = element.attributes.get(name); - if (attribute == null) { - attribute = new AbstractAttribute(name); - element.attributes.put(name, attribute); - } - stack.getLast().setCurrentAttribute(attribute); - } - - @Override - public void beginDocument() { - nameMap = new HashMap(); - indexMap = new HashMap(); - stack = new LinkedList(); - serial = 0; - } - - @Override - public void beginElement(String name) { - AbstractElement element = nameMap.get(name); - if (element == null) { - element = new AbstractElement(name, nextSerial()); - nameMap.put(name, element); - } - if (!stack.isEmpty()) { - stack.getLast().attributeElementsAdd(element); - } - stack.addLast(element); - } - - @Override - public void endAttribute(String name) { - stack.getLast().resetCurrentAttribute(); - } - - @Override - public void endDocument() { - assert stack.isEmpty(); - resolveReferences(); - } - - @Override - public void endElement(String name) { - stack.removeLast(); - } - - public ParseClient getClient() { - return client; - } - - private void inferClass(AbstractElement element) { - client.beginElement("FM3.Class"); - client.serial(element.index); - client.beginAttribute("name"); - client.primitive(element.simpleName()); - client.endAttribute("name"); - client.beginAttribute("classes"); - this.inferProperties(element); - client.endAttribute("classes"); - client.endElement("FM3.Class"); - } - - private void inferClasses(String name) { - for (AbstractElement each : nameMap.values()) { - if (each.packageName().equals(name)) { - this.inferClass(each); - } - } - } - - private void inferPackage(String name) { - client.beginElement(PackageDescription.NAME); - client.beginAttribute("name"); - client.primitive(name); - client.endAttribute("name"); - client.beginAttribute("classes"); - this.inferClasses(name); - client.endAttribute("classes"); - client.endElement(PackageDescription.NAME); - } - - private void inferPackages() { - for (String name : packageNames()) { - this.inferPackage(name); - } - } - - private void inferProperties(AbstractElement element) { - for (AbstractAttribute each : element.attributes.values()) { - this.inferProperty(each); - } - } - - private void inferProperty(AbstractAttribute attribute) { - client.beginElement("FM3.Class"); - client.beginAttribute("name"); - client.primitive(attribute.name); - client.endAttribute("name"); - client.beginAttribute("type"); - Object type = attribute.inferElementType(); - if (type instanceof Primitive) { - client.reference(((Primitive) type).toString()); - } else { - client.reference(((AbstractElement) type).index); - } - if (attribute.inferMultivalued()) { - client.beginAttribute("multivalued"); - client.primitive(true); - client.endAttribute("multivalued"); - } - client.endAttribute("type"); - client.endElement("FM3.Class"); - } - - private int nextSerial() { - return ++serial; - } - - private Iterable packageNames() { - Set names = new HashSet(); - for (AbstractElement each : nameMap.values()) { - names.add(each.packageName()); - } - return names; - } - - @Override - public void primitive(Object value) { - stack.getLast().attributeElementsAdd(Primitive.valueOf(value)); - } - - @Override - public void reference(int index) { - stack.getLast().attributeElementsAdd(index); - } - - @Override - public void reference(String name) { - // TODO Auto-generated method stub - throw new AssertionError("Not yet implemented!"); - } - - private void resolveReferences() { - for (AbstractElement elem : nameMap.values()) { - for (AbstractAttribute attr : elem.attributes.values()) { - attr.resolveReferences(indexMap); - } - } - } - - public void run() { - client.beginDocument(); - this.inferPackages(); - client.endDocument(); - } - - @Override - public void serial(int index) { - AbstractElement element = stack.getLast(); - indexMap.put(index, element); - } - - public void setClient(ParseClient client) { - this.client = client; - } - -} +package ch.akuhn.fame.internal; + +import static java.lang.Math.max; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Map; +import java.util.Set; + +import ch.akuhn.fame.fm3.PackageDescription; +import ch.akuhn.fame.parser.AbstractParserClient; +import ch.akuhn.fame.parser.ParseClient; +import ch.akuhn.fame.parser.Primitive; + +public class Inferencer extends AbstractParserClient implements Runnable { + + private static class AbstractAttribute { + + private int maxCount; + final String name; + public Set elements; + + public AbstractAttribute(String name) { + this.name = name; + } + + public void addCount(int count) { + maxCount = max(count, maxCount); + } + + public Object inferElementType() { + assert elements.size() == 1; + return elements.iterator().next(); + } + + public boolean inferMultivalued() { + return maxCount > 1; + } + + public void resolveReferences(Map indexMap) { + for (Object each : new ArrayList(elements)) { + if (each instanceof Integer) { + elements.remove(each); + elements.add(indexMap.get(each)); + } + } + } + + } + + private static class AbstractElement { + + public Map attributes; + private AbstractAttribute curr; + private int count; + final String name; + final int index; + + public AbstractElement(String name, int index) { + this.name = name; + this.index = index; + } + + public void attributeElementsAdd(Object any) { + count++; + curr.elements.add(any); + } + + public String packageName() { + int pos = name.lastIndexOf('.'); + assert pos > 0; + return name.substring(0, pos); + } + + public void resetCurrentAttribute() { + assert curr != null; + curr.addCount(count); + curr = null; + count = -1; + } + + public void setCurrentAttribute(AbstractAttribute attribute) { + assert curr == null; + curr = attribute; + count = 0; + } + + public String simpleName() { + int pos = name.lastIndexOf('.'); + assert pos > 0; + return name.substring(pos + 1); + } + + } + + private Map nameMap; + private Map indexMap; + private LinkedList stack; + + private int serial; + private ParseClient client; + + @Override + public void beginAttribute(String name) { + AbstractElement element = stack.getLast(); + AbstractAttribute attribute = element.attributes.get(name); + if (attribute == null) { + attribute = new AbstractAttribute(name); + element.attributes.put(name, attribute); + } + stack.getLast().setCurrentAttribute(attribute); + } + + @Override + public void beginDocument() { + nameMap = new HashMap(); + indexMap = new HashMap(); + stack = new LinkedList(); + serial = 0; + } + + @Override + public void beginElement(String name) { + AbstractElement element = nameMap.get(name); + if (element == null) { + element = new AbstractElement(name, nextSerial()); + nameMap.put(name, element); + } + if (!stack.isEmpty()) { + stack.getLast().attributeElementsAdd(element); + } + stack.addLast(element); + } + + @Override + public void endAttribute(String name) { + stack.getLast().resetCurrentAttribute(); + } + + @Override + public void endDocument() { + assert stack.isEmpty(); + resolveReferences(); + } + + @Override + public void endElement(String name) { + stack.removeLast(); + } + + public ParseClient getClient() { + return client; + } + + private void inferClass(AbstractElement element) { + client.beginElement("FM3.Class"); + client.serial(element.index); + client.beginAttribute("name"); + client.primitive(element.simpleName()); + client.endAttribute("name"); + client.beginAttribute("classes"); + this.inferProperties(element); + client.endAttribute("classes"); + client.endElement("FM3.Class"); + } + + private void inferClasses(String name) { + for (AbstractElement each : nameMap.values()) { + if (each.packageName().equals(name)) { + this.inferClass(each); + } + } + } + + private void inferPackage(String name) { + client.beginElement(PackageDescription.NAME); + client.beginAttribute("name"); + client.primitive(name); + client.endAttribute("name"); + client.beginAttribute("classes"); + this.inferClasses(name); + client.endAttribute("classes"); + client.endElement(PackageDescription.NAME); + } + + private void inferPackages() { + for (String name : packageNames()) { + this.inferPackage(name); + } + } + + private void inferProperties(AbstractElement element) { + for (AbstractAttribute each : element.attributes.values()) { + this.inferProperty(each); + } + } + + private void inferProperty(AbstractAttribute attribute) { + client.beginElement("FM3.Class"); + client.beginAttribute("name"); + client.primitive(attribute.name); + client.endAttribute("name"); + client.beginAttribute("type"); + Object type = attribute.inferElementType(); + if (type instanceof Primitive) { + client.reference(((Primitive) type).toString()); + } else { + client.reference(((AbstractElement) type).index); + } + if (attribute.inferMultivalued()) { + client.beginAttribute("multivalued"); + client.primitive(true); + client.endAttribute("multivalued"); + } + client.endAttribute("type"); + client.endElement("FM3.Class"); + } + + private int nextSerial() { + return ++serial; + } + + private Iterable packageNames() { + Set names = new HashSet(); + for (AbstractElement each : nameMap.values()) { + names.add(each.packageName()); + } + return names; + } + + @Override + public void primitive(Object value) { + stack.getLast().attributeElementsAdd(Primitive.valueOf(value)); + } + + @Override + public void reference(int index) { + stack.getLast().attributeElementsAdd(index); + } + + @Override + public void reference(String name) { + // TODO Auto-generated method stub + throw new AssertionError("Not yet implemented!"); + } + + private void resolveReferences() { + for (AbstractElement elem : nameMap.values()) { + for (AbstractAttribute attr : elem.attributes.values()) { + attr.resolveReferences(indexMap); + } + } + } + + public void run() { + client.beginDocument(); + this.inferPackages(); + client.endDocument(); + } + + @Override + public void serial(int index) { + AbstractElement element = stack.getLast(); + indexMap.put(index, element); + } + + public void setClient(ParseClient client) { + this.client = client; + } + +} diff --git a/src/ch/akuhn/fame/internal/JSONPrettyPrinter.java b/lib/src/main/java/ch/akuhn/fame/internal/JSONPrettyPrinter.java similarity index 100% rename from src/ch/akuhn/fame/internal/JSONPrettyPrinter.java rename to lib/src/main/java/ch/akuhn/fame/internal/JSONPrettyPrinter.java diff --git a/src/ch/akuhn/fame/internal/JSONPrinter.java b/lib/src/main/java/ch/akuhn/fame/internal/JSONPrinter.java similarity index 100% rename from src/ch/akuhn/fame/internal/JSONPrinter.java rename to lib/src/main/java/ch/akuhn/fame/internal/JSONPrinter.java diff --git a/src/ch/akuhn/fame/internal/MSEPrinter.java b/lib/src/main/java/ch/akuhn/fame/internal/MSEPrinter.java similarity index 100% rename from src/ch/akuhn/fame/internal/MSEPrinter.java rename to lib/src/main/java/ch/akuhn/fame/internal/MSEPrinter.java diff --git a/src/ch/akuhn/fame/internal/MetaDescriptionFactory.java b/lib/src/main/java/ch/akuhn/fame/internal/MetaDescriptionFactory.java similarity index 100% rename from src/ch/akuhn/fame/internal/MetaDescriptionFactory.java rename to lib/src/main/java/ch/akuhn/fame/internal/MetaDescriptionFactory.java diff --git a/src/ch/akuhn/fame/internal/MethodAccess.java b/lib/src/main/java/ch/akuhn/fame/internal/MethodAccess.java similarity index 100% rename from src/ch/akuhn/fame/internal/MethodAccess.java rename to lib/src/main/java/ch/akuhn/fame/internal/MethodAccess.java diff --git a/src/ch/akuhn/fame/internal/MultivalueSet.java b/lib/src/main/java/ch/akuhn/fame/internal/MultivalueSet.java similarity index 100% rename from src/ch/akuhn/fame/internal/MultivalueSet.java rename to lib/src/main/java/ch/akuhn/fame/internal/MultivalueSet.java diff --git a/src/ch/akuhn/fame/internal/PropertyFactory.java b/lib/src/main/java/ch/akuhn/fame/internal/PropertyFactory.java similarity index 100% rename from src/ch/akuhn/fame/internal/PropertyFactory.java rename to lib/src/main/java/ch/akuhn/fame/internal/PropertyFactory.java diff --git a/src/ch/akuhn/fame/internal/PrototypeBuilder.java b/lib/src/main/java/ch/akuhn/fame/internal/PrototypeBuilder.java similarity index 100% rename from src/ch/akuhn/fame/internal/PrototypeBuilder.java rename to lib/src/main/java/ch/akuhn/fame/internal/PrototypeBuilder.java diff --git a/src/ch/akuhn/fame/internal/RepositoryVisitor.java b/lib/src/main/java/ch/akuhn/fame/internal/RepositoryVisitor.java similarity index 100% rename from src/ch/akuhn/fame/internal/RepositoryVisitor.java rename to lib/src/main/java/ch/akuhn/fame/internal/RepositoryVisitor.java diff --git a/src/ch/akuhn/fame/internal/RuntimeElement.java b/lib/src/main/java/ch/akuhn/fame/internal/RuntimeElement.java similarity index 100% rename from src/ch/akuhn/fame/internal/RuntimeElement.java rename to lib/src/main/java/ch/akuhn/fame/internal/RuntimeElement.java diff --git a/src/ch/akuhn/fame/internal/TraitFactory.java b/lib/src/main/java/ch/akuhn/fame/internal/TraitFactory.java similarity index 100% rename from src/ch/akuhn/fame/internal/TraitFactory.java rename to lib/src/main/java/ch/akuhn/fame/internal/TraitFactory.java diff --git a/src/ch/akuhn/fame/internal/Warnings.java b/lib/src/main/java/ch/akuhn/fame/internal/Warnings.java similarity index 100% rename from src/ch/akuhn/fame/internal/Warnings.java rename to lib/src/main/java/ch/akuhn/fame/internal/Warnings.java diff --git a/src/ch/akuhn/fame/internal/package.html b/lib/src/main/java/ch/akuhn/fame/internal/package.html similarity index 100% rename from src/ch/akuhn/fame/internal/package.html rename to lib/src/main/java/ch/akuhn/fame/internal/package.html diff --git a/src/ch/akuhn/fame/package.html b/lib/src/main/java/ch/akuhn/fame/package.html similarity index 100% rename from src/ch/akuhn/fame/package.html rename to lib/src/main/java/ch/akuhn/fame/package.html diff --git a/src/ch/akuhn/fame/parser/AbstractParserClient.java b/lib/src/main/java/ch/akuhn/fame/parser/AbstractParserClient.java similarity index 100% rename from src/ch/akuhn/fame/parser/AbstractParserClient.java rename to lib/src/main/java/ch/akuhn/fame/parser/AbstractParserClient.java diff --git a/src/ch/akuhn/fame/parser/DebugClient.java b/lib/src/main/java/ch/akuhn/fame/parser/DebugClient.java similarity index 96% rename from src/ch/akuhn/fame/parser/DebugClient.java rename to lib/src/main/java/ch/akuhn/fame/parser/DebugClient.java index d79cde5..66c66f0 100644 --- a/src/ch/akuhn/fame/parser/DebugClient.java +++ b/lib/src/main/java/ch/akuhn/fame/parser/DebugClient.java @@ -1,93 +1,93 @@ -package ch.akuhn.fame.parser; - -import java.util.ArrayList; -import java.util.List; - -import ch.akuhn.util.Separator; - -public class DebugClient implements ParseClient { - - public final List log = new ArrayList(); - - public ParseClient client; - - public DebugClient(ParseClient client) { - this.client = client; - } - - public DebugClient() { - this(null); - } - - public void beginAttribute(String name) { - log.add(new Object[] { "beginProperty", name }); - if (client != null) client.beginAttribute(name); - } - - public void beginDocument() { - log.add(new Object[] { "beginDocument" }); - if (client != null) client.beginDocument(); - } - - public void beginElement(String name) { - log.add(new Object[] { "beginElement", name }); - if (client != null) client.beginElement(name); - } - - public void directive(String name, String... params) { - throw new UnsupportedOperationException(); - } - - public void endAttribute(String name) { - log.add(new Object[] { "endProperty", name }); - if (client != null) client.endAttribute(name); - } - - public void endDocument() { - log.add(new Object[] { "endDocument" }); - if (client != null) client.endDocument(); - } - - public void endElement(String name) { - log.add(new Object[] { "endElement", name }); - if (client != null) client.endElement(name); - } - - public void primitive(Object value) { - log.add(new Object[] { "primitive", value }); - if (client != null) client.primitive(value); - } - - public void reference(int index) { - log.add(new Object[] { "reference(int)", index }); - if (client != null) client.reference(index); - } - - public void reference(String name) { - log.add(new Object[] { "reference(String)", name }); - if (client != null) client.reference(name); - } - - public void reference(String name, int index) { - throw new UnsupportedOperationException(); - } - - public void serial(int index) { - log.add(new Object[] { "serial", index }); - if (client != null) client.serial(index); - } - - @Override - public String toString() { - StringBuilder $ = new StringBuilder(); - for (Object[] line : log) { - Separator s = new Separator(", "); - for (Object each : line) { - $.append(s).append(each); - } - $.append('\n'); - } - return $.toString(); - } - -} +package ch.akuhn.fame.parser; + +import java.util.ArrayList; +import java.util.List; + +import ch.akuhn.util.Separator; + +public class DebugClient implements ParseClient { + + public final List log = new ArrayList(); + + public ParseClient client; + + public DebugClient(ParseClient client) { + this.client = client; + } + + public DebugClient() { + this(null); + } + + public void beginAttribute(String name) { + log.add(new Object[] { "beginProperty", name }); + if (client != null) client.beginAttribute(name); + } + + public void beginDocument() { + log.add(new Object[] { "beginDocument" }); + if (client != null) client.beginDocument(); + } + + public void beginElement(String name) { + log.add(new Object[] { "beginElement", name }); + if (client != null) client.beginElement(name); + } + + public void directive(String name, String... params) { + throw new UnsupportedOperationException(); + } + + public void endAttribute(String name) { + log.add(new Object[] { "endProperty", name }); + if (client != null) client.endAttribute(name); + } + + public void endDocument() { + log.add(new Object[] { "endDocument" }); + if (client != null) client.endDocument(); + } + + public void endElement(String name) { + log.add(new Object[] { "endElement", name }); + if (client != null) client.endElement(name); + } + + public void primitive(Object value) { + log.add(new Object[] { "primitive", value }); + if (client != null) client.primitive(value); + } + + public void reference(int index) { + log.add(new Object[] { "reference(int)", index }); + if (client != null) client.reference(index); + } + + public void reference(String name) { + log.add(new Object[] { "reference(String)", name }); + if (client != null) client.reference(name); + } + + public void reference(String name, int index) { + throw new UnsupportedOperationException(); + } + + public void serial(int index) { + log.add(new Object[] { "serial", index }); + if (client != null) client.serial(index); + } + + @Override + public String toString() { + StringBuilder $ = new StringBuilder(); + for (Object[] line : log) { + Separator s = new Separator(", "); + for (Object each : line) { + $.append(s).append(each); + } + $.append('\n'); + } + return $.toString(); + } + +} diff --git a/src/ch/akuhn/fame/parser/Importer.java b/lib/src/main/java/ch/akuhn/fame/parser/Importer.java similarity index 100% rename from src/ch/akuhn/fame/parser/Importer.java rename to lib/src/main/java/ch/akuhn/fame/parser/Importer.java diff --git a/src/ch/akuhn/fame/parser/InputSource.java b/lib/src/main/java/ch/akuhn/fame/parser/InputSource.java similarity index 100% rename from src/ch/akuhn/fame/parser/InputSource.java rename to lib/src/main/java/ch/akuhn/fame/parser/InputSource.java diff --git a/src/ch/akuhn/fame/parser/ParseClient.java b/lib/src/main/java/ch/akuhn/fame/parser/ParseClient.java similarity index 100% rename from src/ch/akuhn/fame/parser/ParseClient.java rename to lib/src/main/java/ch/akuhn/fame/parser/ParseClient.java diff --git a/src/ch/akuhn/fame/parser/ParseError.java b/lib/src/main/java/ch/akuhn/fame/parser/ParseError.java similarity index 100% rename from src/ch/akuhn/fame/parser/ParseError.java rename to lib/src/main/java/ch/akuhn/fame/parser/ParseError.java diff --git a/src/ch/akuhn/fame/parser/Parser.java b/lib/src/main/java/ch/akuhn/fame/parser/Parser.java similarity index 100% rename from src/ch/akuhn/fame/parser/Parser.java rename to lib/src/main/java/ch/akuhn/fame/parser/Parser.java diff --git a/src/ch/akuhn/fame/parser/Position.java b/lib/src/main/java/ch/akuhn/fame/parser/Position.java similarity index 100% rename from src/ch/akuhn/fame/parser/Position.java rename to lib/src/main/java/ch/akuhn/fame/parser/Position.java diff --git a/src/ch/akuhn/fame/parser/Primitive.java b/lib/src/main/java/ch/akuhn/fame/parser/Primitive.java similarity index 95% rename from src/ch/akuhn/fame/parser/Primitive.java rename to lib/src/main/java/ch/akuhn/fame/parser/Primitive.java index a6e430b..d21ad60 100644 --- a/src/ch/akuhn/fame/parser/Primitive.java +++ b/lib/src/main/java/ch/akuhn/fame/parser/Primitive.java @@ -1,27 +1,27 @@ -package ch.akuhn.fame.parser; - - -public enum Primitive { - - OBJECT(Object.class), STRING(String.class), NUMBER(Number.class), BOOLEAN(Boolean.class); - - public static Primitive valueOf(Object value) { - if (value instanceof String) - return STRING; - if (value instanceof Number) - return NUMBER; - if (value instanceof Boolean) - return BOOLEAN; - throw new RuntimeException("Unknown type of primitive"); - } - - private Class jclass; - - Primitive(Class jclass) { - this.jclass = jclass; - } - - public Class getImplementingClass() { - return jclass; - } -} +package ch.akuhn.fame.parser; + + +public enum Primitive { + + OBJECT(Object.class), STRING(String.class), NUMBER(Number.class), BOOLEAN(Boolean.class); + + public static Primitive valueOf(Object value) { + if (value instanceof String) + return STRING; + if (value instanceof Number) + return NUMBER; + if (value instanceof Boolean) + return BOOLEAN; + throw new RuntimeException("Unknown type of primitive"); + } + + private Class jclass; + + Primitive(Class jclass) { + this.jclass = jclass; + } + + public Class getImplementingClass() { + return jclass; + } +} diff --git a/src/ch/akuhn/fame/parser/Scanner.java b/lib/src/main/java/ch/akuhn/fame/parser/Scanner.java similarity index 100% rename from src/ch/akuhn/fame/parser/Scanner.java rename to lib/src/main/java/ch/akuhn/fame/parser/Scanner.java diff --git a/src/ch/akuhn/fame/parser/Token.java b/lib/src/main/java/ch/akuhn/fame/parser/Token.java similarity index 100% rename from src/ch/akuhn/fame/parser/Token.java rename to lib/src/main/java/ch/akuhn/fame/parser/Token.java diff --git a/src/ch/akuhn/fame/parser/TokenType.java b/lib/src/main/java/ch/akuhn/fame/parser/TokenType.java similarity index 100% rename from src/ch/akuhn/fame/parser/TokenType.java rename to lib/src/main/java/ch/akuhn/fame/parser/TokenType.java diff --git a/src/ch/akuhn/fame/parser/package.html b/lib/src/main/java/ch/akuhn/fame/parser/package.html similarity index 100% rename from src/ch/akuhn/fame/parser/package.html rename to lib/src/main/java/ch/akuhn/fame/parser/package.html diff --git a/test/ch/akuhn/fame/codegen/Famix22Test.java b/lib/src/test/java/ch/akuhn/fame/codegen/Famix22Test.java similarity index 100% rename from test/ch/akuhn/fame/codegen/Famix22Test.java rename to lib/src/test/java/ch/akuhn/fame/codegen/Famix22Test.java diff --git a/test/ch/akuhn/fame/codegen/Famix30Test.java b/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java similarity index 100% rename from test/ch/akuhn/fame/codegen/Famix30Test.java rename to lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java diff --git a/test/ch/akuhn/fame/codegen/target/DungeonCodegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/DungeonCodegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/DungeonCodegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/DungeonCodegen.java diff --git a/test/ch/akuhn/fame/codegen/target/EMOFCodegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/EMOFCodegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/EMOFCodegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/EMOFCodegen.java diff --git a/test/ch/akuhn/fame/codegen/target/Famix22Codegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/Famix22Codegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/Famix22Codegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/Famix22Codegen.java diff --git a/test/ch/akuhn/fame/codegen/target/Famix30Codegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/Famix30Codegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/Famix30Codegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/Famix30Codegen.java diff --git a/test/ch/akuhn/fame/codegen/target/Famix31Codegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/Famix31Codegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/Famix31Codegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/Famix31Codegen.java diff --git a/test/ch/akuhn/fame/codegen/target/Famix70Codegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/Famix70Codegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/Famix70Codegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/Famix70Codegen.java diff --git a/test/ch/akuhn/fame/codegen/target/Famix70WithNewCppCodegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/Famix70WithNewCppCodegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/Famix70WithNewCppCodegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/Famix70WithNewCppCodegen.java diff --git a/test/ch/akuhn/fame/codegen/target/FamixJavaCodegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/FamixJavaCodegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/FamixJavaCodegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/FamixJavaCodegen.java diff --git a/test/ch/akuhn/fame/codegen/target/LibCodegen.java b/lib/src/test/java/ch/akuhn/fame/codegen/target/LibCodegen.java similarity index 100% rename from test/ch/akuhn/fame/codegen/target/LibCodegen.java rename to lib/src/test/java/ch/akuhn/fame/codegen/target/LibCodegen.java diff --git a/test/ch/akuhn/fame/test/ArrayFieldTest.java b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java similarity index 96% rename from test/ch/akuhn/fame/test/ArrayFieldTest.java rename to lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java index 4001f37..b07a388 100644 --- a/test/ch/akuhn/fame/test/ArrayFieldTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java @@ -1,69 +1,69 @@ -package ch.akuhn.fame.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import ch.akuhn.fame.FameDescription; -import ch.akuhn.fame.FamePackage; -import ch.akuhn.fame.FameProperty; -import ch.akuhn.fame.Tower; -import ch.akuhn.fame.fm3.MetaDescription; -import ch.akuhn.fame.fm3.PropertyDescription; -import ch.unibe.jexample.Given; -import ch.unibe.jexample.JExample; - - -@FamePackage("Test") -@RunWith(JExample.class) -public class ArrayFieldTest { - - @FameDescription - private static class Dummy { - @FameProperty - public float[] array; - } - - @Test - public Tower metamodel() { - Tower t = new Tower(); - t.metamodel.with(Dummy.class); - assertEquals(1, t.metamodel.allClassDescriptions().size()); - assertEquals(1, t.metamodel.allPropertyDescriptions().size()); - PropertyDescription prop = t.metamodel.allPropertyDescriptions().iterator().next(); - assertEquals(true, prop.isMultivalued()); - assertEquals(true, prop.isPrimitive()); - assertEquals(MetaDescription.NUMBER, prop.getType()); - return t; - } - - @Test - @Given("#metamodel") - public String exportModel(Tower t) { - assertEquals(0, t.model.size()); - Dummy d = new Dummy(); - d.array = new float[] { 0.5f, 1.0f, 2.75f }; - t.model.add(d); - assertEquals(1, t.model.size()); - String mse = t.model.exportMSE(); - assertTrue(mse.contains("(array 0.5 1.0 2.75)")); - return mse; - } - - @Test - @Given("#metamodel,#exportModel") - public void importModel(Tower t, String mse) { - assertEquals(0, t.model.size()); - t.model.importMSE(mse); - assertEquals(1, t.model.size()); - Dummy dummy = (Dummy) t.model.getElements().iterator().next(); - assertEquals(3, dummy.array.length); - assertTrue(0.5 == dummy.array[0]); - assertTrue(1.0 == dummy.array[1]); - assertTrue(2.75 == dummy.array[2]); - - } - -} +package ch.akuhn.fame.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import ch.akuhn.fame.FameDescription; +import ch.akuhn.fame.FamePackage; +import ch.akuhn.fame.FameProperty; +import ch.akuhn.fame.Tower; +import ch.akuhn.fame.fm3.MetaDescription; +import ch.akuhn.fame.fm3.PropertyDescription; +import ch.unibe.jexample.Given; +import ch.unibe.jexample.JExample; + + +@FamePackage("Test") +@RunWith(JExample.class) +public class ArrayFieldTest { + + @FameDescription + private static class Dummy { + @FameProperty + public float[] array; + } + + @Test + public Tower metamodel() { + Tower t = new Tower(); + t.metamodel.with(Dummy.class); + assertEquals(1, t.metamodel.allClassDescriptions().size()); + assertEquals(1, t.metamodel.allPropertyDescriptions().size()); + PropertyDescription prop = t.metamodel.allPropertyDescriptions().iterator().next(); + assertEquals(true, prop.isMultivalued()); + assertEquals(true, prop.isPrimitive()); + assertEquals(MetaDescription.NUMBER, prop.getType()); + return t; + } + + @Test + @Given("#metamodel") + public String exportModel(Tower t) { + assertEquals(0, t.model.size()); + Dummy d = new Dummy(); + d.array = new float[] { 0.5f, 1.0f, 2.75f }; + t.model.add(d); + assertEquals(1, t.model.size()); + String mse = t.model.exportMSE(); + assertTrue(mse.contains("(array 0.5 1.0 2.75)")); + return mse; + } + + @Test + @Given("#metamodel,#exportModel") + public void importModel(Tower t, String mse) { + assertEquals(0, t.model.size()); + t.model.importMSE(mse); + assertEquals(1, t.model.size()); + Dummy dummy = (Dummy) t.model.getElements().iterator().next(); + assertEquals(3, dummy.array.length); + assertTrue(0.5 == dummy.array[0]); + assertTrue(1.0 == dummy.array[1]); + assertTrue(2.75 == dummy.array[2]); + + } + +} diff --git a/test/ch/akuhn/fame/test/AssertionsEnabledTest.java b/lib/src/test/java/ch/akuhn/fame/test/AssertionsEnabledTest.java similarity index 100% rename from test/ch/akuhn/fame/test/AssertionsEnabledTest.java rename to lib/src/test/java/ch/akuhn/fame/test/AssertionsEnabledTest.java diff --git a/test/ch/akuhn/fame/test/CompositeExample.java b/lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java similarity index 96% rename from test/ch/akuhn/fame/test/CompositeExample.java rename to lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java index 8161d27..631157e 100644 --- a/test/ch/akuhn/fame/test/CompositeExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java @@ -1,236 +1,236 @@ -package ch.akuhn.fame.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.Collection; - -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; - -import ch.akuhn.fame.FameDescription; -import ch.akuhn.fame.FamePackage; -import ch.akuhn.fame.FameProperty; -import ch.akuhn.fame.MetaRepository; -import ch.akuhn.fame.Repository; -import ch.akuhn.fame.Tower; -import ch.akuhn.fame.fm3.PropertyDescription; -import ch.unibe.jexample.Given; -import ch.unibe.jexample.Injection; -import ch.unibe.jexample.InjectionPolicy; -import ch.unibe.jexample.JExample; - -@RunWith(JExample.class) -@Injection(InjectionPolicy.NONE) -public class CompositeExample { - - @FameDescription - @FamePackage("TEST") - static abstract class Composite { - - @FameProperty(opposite = "children") - public Container parent; - - @FameProperty(derived = true) - public abstract int getTotalCount(); - - } - - @FameDescription - @FamePackage("TEST") - static class Container extends Composite { - - @FameProperty(opposite = "parent") - public Collection children = new ArrayList(); - - @Override - public int getTotalCount() { - int count = 0; - for (Composite c : children) - count += c.getTotalCount(); - return count; - } - - } - - @FameDescription - @FamePackage("TEST") - static class Leaf extends Composite { - - @FameProperty - public int count; - - @Override - public int getTotalCount() { - return count; - } - - } - - @Test - public Tower createTower() { - Tower t = new Tower(); - assertNotNull(t.getMetaMetamodel()); - assertNotNull(t.getMetamodel()); - assertNotNull(t.getModel()); - return t; - } - - @Test - @Given("#createTower") - public Tower towerHasLayers(Tower t) { - assertEquals(t.getModel().getMetamodel(), t.getMetamodel()); - assertEquals(t.getMetamodel().getMetamodel(), t.getMetaMetamodel()); - assertEquals(t.getMetaMetamodel().getMetamodel(), t.getMetaMetamodel()); - return t; - } - - @Test - @Given("#towerHasLayers") - public Tower tower(Tower t) { - assertEquals(0, t.getModel().size()); - assertEquals(0, t.getMetamodel().size()); - assertEquals(25, t.getMetaMetamodel().size()); - return t; - } - - @Test - @Ignore // FIXME - @Given("model;newParent;newChildA;newChildB") - public Repository createInstances(Repository $) { - assertEquals(3, $.getElements().size()); - return $; - } - - @Test - @Given("model;parentWithChildren") - public String exportMSE(Repository m) { - String mse = m.exportMSE(); - return mse; - } - - @Test - @Ignore // FIXME - @Given("tower;exportMSE;metamodel") - public Repository importMSE(Tower t, String mse) { - t.getModel().importMSE(mse); - Repository m = t.getModel(); - assertEquals(3, m.getElements().size()); - return m; - } - - @Test - @Ignore // FIXME - @Given("model;model") - public void jexampleKeepWorksFine(Repository m1, Repository m2) { - assertSame(m1, m2); - } - - @Test - @Given("#tower") - public MetaRepository metamodel(Tower t) { - t.getMetamodel().withAll(Composite.class, Container.class, Leaf.class); - MetaRepository $ = t.getMetamodel(); - assertEquals(3, $.allClassDescriptions().size()); - assertEquals(4, $.all(PropertyDescription.class).size()); - return $; - } - - @Test - @Given("metamodelNames") - public Repository model(MetaRepository metamodel) { - Repository $ = new Repository(metamodel); - assertEquals(metamodel, $.getMetamodel()); - return $; - } - - @Test - @Given("metamodel") - public MetaRepository metamodelNames(MetaRepository mm) { - assertNull(mm.descriptionNamed("FAME")); - assertNotNull(mm.descriptionNamed("TEST.Container")); - assertNotNull(mm.descriptionNamed("TEST.Leaf")); - assertNotNull(mm.descriptionNamed("TEST.Composite")); - return mm; - } - - @Test - @Given("model") - public Leaf newChildA(Repository repo) { - Object $ = repo.newInstance("TEST.Leaf"); - assertNotNull($); - assertEquals(Leaf.class, $.getClass()); - return (Leaf) $; - } - - @Test - @Given("model") - public Leaf newChildB(Repository repo) { - Object $ = repo.newInstance("TEST.Leaf"); - assertNotNull($); - assertEquals(Leaf.class, $.getClass()); - return (Leaf) $; - } - - @Test - @Given("model") - public Container newParent(Repository repo) { - Object $ = repo.newInstance("TEST.Container"); - assertNotNull($); - assertEquals(Container.class, $.getClass()); - return (Container) $; - } - - @Test - @Given("model;newChildA") - public Leaf numberPropertyA(Repository m, Leaf a) { - assertEquals((Integer) 0, (Integer) a.count); - assertEquals((Integer) 0, (Integer) m.read("count", a)); - m.write("count", a, 42); - assertEquals(42, a.count); - assertEquals((Integer)42, (Integer)m.read("count", a)); - return a; - } - - @Test - @Given("model;newChildB") - public Leaf numberPropertyB(Repository m, Leaf b) { - assertEquals(0, b.count); - assertEquals((Integer) 0, m.read("count", b)); - m.write("count", b, 23); - assertEquals(23, b.count); - assertEquals((Integer) 23, m.read("count", b)); - return b; - } - - @Test - @Given("metamodel;metamodelNames") - public void parentChildrenAreOpposite(MetaRepository mm) { - PropertyDescription parent = mm.descriptionNamed("TEST.Composite").attributeNamed("parent"); - PropertyDescription children = mm.descriptionNamed("TEST.Container").attributeNamed("children"); - assertNotNull(parent); - assertNotNull(children); - assertTrue(parent.hasOpposite()); - assertTrue(children.hasOpposite()); - assertEquals(parent, children.getOpposite()); - assertEquals(children, parent.getOpposite()); - } - - @Test - @Given("model;newParent;newChildA;newChildB;parentChildrenAreOpposite") - public Container parentWithChildren(Repository m, Container p, Leaf a, Leaf b) { - assertEquals(0, p.children.size()); - assertEquals(null, a.parent); - assertEquals(null, b.parent); - m.write("children", p, a, b); - assertEquals(2, p.children.size()); - assertEquals(p, a.parent); - assertEquals(p, b.parent); - return p; - } -} +package ch.akuhn.fame.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Collection; + +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; + +import ch.akuhn.fame.FameDescription; +import ch.akuhn.fame.FamePackage; +import ch.akuhn.fame.FameProperty; +import ch.akuhn.fame.MetaRepository; +import ch.akuhn.fame.Repository; +import ch.akuhn.fame.Tower; +import ch.akuhn.fame.fm3.PropertyDescription; +import ch.unibe.jexample.Given; +import ch.unibe.jexample.Injection; +import ch.unibe.jexample.InjectionPolicy; +import ch.unibe.jexample.JExample; + +@RunWith(JExample.class) +@Injection(InjectionPolicy.NONE) +public class CompositeExample { + + @FameDescription + @FamePackage("TEST") + static abstract class Composite { + + @FameProperty(opposite = "children") + public Container parent; + + @FameProperty(derived = true) + public abstract int getTotalCount(); + + } + + @FameDescription + @FamePackage("TEST") + static class Container extends Composite { + + @FameProperty(opposite = "parent") + public Collection children = new ArrayList(); + + @Override + public int getTotalCount() { + int count = 0; + for (Composite c : children) + count += c.getTotalCount(); + return count; + } + + } + + @FameDescription + @FamePackage("TEST") + static class Leaf extends Composite { + + @FameProperty + public int count; + + @Override + public int getTotalCount() { + return count; + } + + } + + @Test + public Tower createTower() { + Tower t = new Tower(); + assertNotNull(t.getMetaMetamodel()); + assertNotNull(t.getMetamodel()); + assertNotNull(t.getModel()); + return t; + } + + @Test + @Given("#createTower") + public Tower towerHasLayers(Tower t) { + assertEquals(t.getModel().getMetamodel(), t.getMetamodel()); + assertEquals(t.getMetamodel().getMetamodel(), t.getMetaMetamodel()); + assertEquals(t.getMetaMetamodel().getMetamodel(), t.getMetaMetamodel()); + return t; + } + + @Test + @Given("#towerHasLayers") + public Tower tower(Tower t) { + assertEquals(0, t.getModel().size()); + assertEquals(0, t.getMetamodel().size()); + assertEquals(25, t.getMetaMetamodel().size()); + return t; + } + + @Test + @Ignore // FIXME + @Given("model;newParent;newChildA;newChildB") + public Repository createInstances(Repository $) { + assertEquals(3, $.getElements().size()); + return $; + } + + @Test + @Given("model;parentWithChildren") + public String exportMSE(Repository m) { + String mse = m.exportMSE(); + return mse; + } + + @Test + @Ignore // FIXME + @Given("tower;exportMSE;metamodel") + public Repository importMSE(Tower t, String mse) { + t.getModel().importMSE(mse); + Repository m = t.getModel(); + assertEquals(3, m.getElements().size()); + return m; + } + + @Test + @Ignore // FIXME + @Given("model;model") + public void jexampleKeepWorksFine(Repository m1, Repository m2) { + assertSame(m1, m2); + } + + @Test + @Given("#tower") + public MetaRepository metamodel(Tower t) { + t.getMetamodel().withAll(Composite.class, Container.class, Leaf.class); + MetaRepository $ = t.getMetamodel(); + assertEquals(3, $.allClassDescriptions().size()); + assertEquals(4, $.all(PropertyDescription.class).size()); + return $; + } + + @Test + @Given("metamodelNames") + public Repository model(MetaRepository metamodel) { + Repository $ = new Repository(metamodel); + assertEquals(metamodel, $.getMetamodel()); + return $; + } + + @Test + @Given("metamodel") + public MetaRepository metamodelNames(MetaRepository mm) { + assertNull(mm.descriptionNamed("FAME")); + assertNotNull(mm.descriptionNamed("TEST.Container")); + assertNotNull(mm.descriptionNamed("TEST.Leaf")); + assertNotNull(mm.descriptionNamed("TEST.Composite")); + return mm; + } + + @Test + @Given("model") + public Leaf newChildA(Repository repo) { + Object $ = repo.newInstance("TEST.Leaf"); + assertNotNull($); + assertEquals(Leaf.class, $.getClass()); + return (Leaf) $; + } + + @Test + @Given("model") + public Leaf newChildB(Repository repo) { + Object $ = repo.newInstance("TEST.Leaf"); + assertNotNull($); + assertEquals(Leaf.class, $.getClass()); + return (Leaf) $; + } + + @Test + @Given("model") + public Container newParent(Repository repo) { + Object $ = repo.newInstance("TEST.Container"); + assertNotNull($); + assertEquals(Container.class, $.getClass()); + return (Container) $; + } + + @Test + @Given("model;newChildA") + public Leaf numberPropertyA(Repository m, Leaf a) { + assertEquals((Integer) 0, (Integer) a.count); + assertEquals((Integer) 0, (Integer) m.read("count", a)); + m.write("count", a, 42); + assertEquals(42, a.count); + assertEquals((Integer)42, (Integer)m.read("count", a)); + return a; + } + + @Test + @Given("model;newChildB") + public Leaf numberPropertyB(Repository m, Leaf b) { + assertEquals(0, b.count); + assertEquals((Integer) 0, m.read("count", b)); + m.write("count", b, 23); + assertEquals(23, b.count); + assertEquals((Integer) 23, m.read("count", b)); + return b; + } + + @Test + @Given("metamodel;metamodelNames") + public void parentChildrenAreOpposite(MetaRepository mm) { + PropertyDescription parent = mm.descriptionNamed("TEST.Composite").attributeNamed("parent"); + PropertyDescription children = mm.descriptionNamed("TEST.Container").attributeNamed("children"); + assertNotNull(parent); + assertNotNull(children); + assertTrue(parent.hasOpposite()); + assertTrue(children.hasOpposite()); + assertEquals(parent, children.getOpposite()); + assertEquals(children, parent.getOpposite()); + } + + @Test + @Given("model;newParent;newChildA;newChildB;parentChildrenAreOpposite") + public Container parentWithChildren(Repository m, Container p, Leaf a, Leaf b) { + assertEquals(0, p.children.size()); + assertEquals(null, a.parent); + assertEquals(null, b.parent); + m.write("children", p, a, b); + assertEquals(2, p.children.size()); + assertEquals(p, a.parent); + assertEquals(p, b.parent); + return p; + } +} diff --git a/test/ch/akuhn/fame/test/DungeonExample.java b/lib/src/test/java/ch/akuhn/fame/test/DungeonExample.java similarity index 96% rename from test/ch/akuhn/fame/test/DungeonExample.java rename to lib/src/test/java/ch/akuhn/fame/test/DungeonExample.java index 7207ada..8ac87e7 100644 --- a/test/ch/akuhn/fame/test/DungeonExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/DungeonExample.java @@ -1,254 +1,254 @@ -package ch.akuhn.fame.test; - -import java.util.Collection; - -import ch.akuhn.fame.FameDescription; -import ch.akuhn.fame.FamePackage; -import ch.akuhn.fame.FameProperty; -import ch.akuhn.fame.internal.MultivalueSet; - -@FamePackage("RPG") -public class DungeonExample { - - @FameDescription("Dragon") - public static class Dragon { - - private Collection hoard; - - @FameProperty(name = "hoard", opposite = "keeper") - public Collection getHoard() { - if (hoard == null) { - hoard = new MultivalueSet() { - @Override - protected void clearOpposite(Treasure e) { - e.setKeeper(null); - } - - @Override - protected void setOpposite(Treasure e) { - e.setKeeper(Dragon.this); - } - }; - } - return hoard; - } - - public void setHoard(Collection hoard) { - this.getHoard().clear(); - this.getHoard().addAll(hoard); - } - - public void addHoard(Treasure one) { - this.getHoard().add(one); - } - - public void addHoard(Treasure one, Treasure... many) { - this.getHoard().add(one); - for (Treasure each: many) - this.getHoard().add(each); - } - - public void addHoard(Iterable many) { - for (Treasure each: many) - this.getHoard().add(each); - } - - public void addHoard(Treasure[] many) { - for (Treasure each: many) - this.getHoard().add(each); - } - - public int numberOfHoard() { - return getHoard().size(); - } - - public boolean hasHoard() { - return !getHoard().isEmpty(); - } - - private Collection killedBy; - - @FameProperty(name = "killedBy", opposite = "kills") - public Collection getKilledBy() { - if (killedBy == null) { - killedBy = new MultivalueSet() { - @Override - protected void clearOpposite(Hero e) { - e.getKills().remove(Dragon.this); - } - - @Override - protected void setOpposite(Hero e) { - e.getKills().add(Dragon.this); - } - }; - } - return killedBy; - } - - public void setKilledBy(Collection killedBy) { - this.getKilledBy().clear(); - this.getKilledBy().addAll(killedBy); - } - - public void addKilledBy(Hero one) { - this.getKilledBy().add(one); - } - - public void addKilledBy(Hero one, Hero... many) { - this.getKilledBy().add(one); - for (Hero each: many) - this.getKilledBy().add(each); - } - - public void addKilledBy(Iterable many) { - for (Hero each: many) - this.getKilledBy().add(each); - } - - public void addKilledBy(Hero[] many) { - for (Hero each: many) - this.getKilledBy().add(each); - } - - public int numberOfKilledBy() { - return getKilledBy().size(); - } - - public boolean hasKilledBy() { - return !getKilledBy().isEmpty(); - } - - } - - @FamePackage("RPG") - @FameDescription("Hero") - public static class Hero { - - private Treasure talisman; - - @FameProperty(name = "talisman", opposite = "owner") - public Treasure getTalisman() { - return talisman; - } - - public void setTalisman(Treasure talisman) { - if (this.talisman == null ? talisman != null : !this.talisman.equals(talisman)) { - Treasure old_talisman = this.talisman; - this.talisman = talisman; - if (old_talisman != null) old_talisman.setOwner(null); - if (talisman != null) talisman.setOwner(this); - } - } - - private Hero twin; - - @FameProperty(name = "twin", opposite = "twin") - public Hero getTwin() { - return twin; - } - - public void setTwin(Hero twin) { - if (this.twin == null ? twin != null : !this.twin.equals(twin)) { - Hero old_twin = this.twin; - this.twin = twin; - if (old_twin != null) old_twin.setTwin(null); - if (twin != null) twin.setTwin(this); - } - } - - private Collection kills; - - @FameProperty(name = "kills", opposite = "killedBy") - public Collection getKills() { - if (kills == null) { - kills = new MultivalueSet() { - @Override - protected void clearOpposite(Dragon e) { - e.getKilledBy().remove(Hero.this); - } - - @Override - protected void setOpposite(Dragon e) { - e.getKilledBy().add(Hero.this); - } - }; - } - return kills; - } - - public void setKills(Collection kills) { - this.getKills().clear(); - this.getKills().addAll(kills); - } - - public void addKills(Dragon one) { - this.getKills().add(one); - } - - public void addKills(Dragon one, Dragon... many) { - this.getKills().add(one); - for (Dragon each: many) - this.getKills().add(each); - } - - public void addKills(Iterable many) { - for (Dragon each: many) - this.getKills().add(each); - } - - public void addKills(Dragon[] many) { - for (Dragon each: many) - this.getKills().add(each); - } - - public int numberOfKills() { - return getKills().size(); - } - - public boolean hasKills() { - return !getKills().isEmpty(); - } - - } - - @FamePackage("RPG") - @FameDescription("Treasure") - public static class Treasure { - - private Hero owner; - - @FameProperty(name = "owner", opposite = "talisman") - public Hero getOwner() { - return owner; - } - - public void setOwner(Hero owner) { - if (this.owner == null ? owner != null : !this.owner.equals(owner)) { - Hero old_owner = this.owner; - this.owner = owner; - if (old_owner != null) old_owner.setTalisman(null); - if (owner != null) owner.setTalisman(this); - } - } - - private Dragon keeper; - - @FameProperty(name = "keeper", opposite = "hoard") - public Dragon getKeeper() { - return keeper; - } - - public void setKeeper(Dragon keeper) { - if (this.keeper != null) { - if (this.keeper.equals(keeper)) return; - this.keeper.getHoard().remove(this); - } - this.keeper = keeper; - if (keeper == null) return; - keeper.getHoard().add(this); - } - - } - -} +package ch.akuhn.fame.test; + +import java.util.Collection; + +import ch.akuhn.fame.FameDescription; +import ch.akuhn.fame.FamePackage; +import ch.akuhn.fame.FameProperty; +import ch.akuhn.fame.internal.MultivalueSet; + +@FamePackage("RPG") +public class DungeonExample { + + @FameDescription("Dragon") + public static class Dragon { + + private Collection hoard; + + @FameProperty(name = "hoard", opposite = "keeper") + public Collection getHoard() { + if (hoard == null) { + hoard = new MultivalueSet() { + @Override + protected void clearOpposite(Treasure e) { + e.setKeeper(null); + } + + @Override + protected void setOpposite(Treasure e) { + e.setKeeper(Dragon.this); + } + }; + } + return hoard; + } + + public void setHoard(Collection hoard) { + this.getHoard().clear(); + this.getHoard().addAll(hoard); + } + + public void addHoard(Treasure one) { + this.getHoard().add(one); + } + + public void addHoard(Treasure one, Treasure... many) { + this.getHoard().add(one); + for (Treasure each: many) + this.getHoard().add(each); + } + + public void addHoard(Iterable many) { + for (Treasure each: many) + this.getHoard().add(each); + } + + public void addHoard(Treasure[] many) { + for (Treasure each: many) + this.getHoard().add(each); + } + + public int numberOfHoard() { + return getHoard().size(); + } + + public boolean hasHoard() { + return !getHoard().isEmpty(); + } + + private Collection killedBy; + + @FameProperty(name = "killedBy", opposite = "kills") + public Collection getKilledBy() { + if (killedBy == null) { + killedBy = new MultivalueSet() { + @Override + protected void clearOpposite(Hero e) { + e.getKills().remove(Dragon.this); + } + + @Override + protected void setOpposite(Hero e) { + e.getKills().add(Dragon.this); + } + }; + } + return killedBy; + } + + public void setKilledBy(Collection killedBy) { + this.getKilledBy().clear(); + this.getKilledBy().addAll(killedBy); + } + + public void addKilledBy(Hero one) { + this.getKilledBy().add(one); + } + + public void addKilledBy(Hero one, Hero... many) { + this.getKilledBy().add(one); + for (Hero each: many) + this.getKilledBy().add(each); + } + + public void addKilledBy(Iterable many) { + for (Hero each: many) + this.getKilledBy().add(each); + } + + public void addKilledBy(Hero[] many) { + for (Hero each: many) + this.getKilledBy().add(each); + } + + public int numberOfKilledBy() { + return getKilledBy().size(); + } + + public boolean hasKilledBy() { + return !getKilledBy().isEmpty(); + } + + } + + @FamePackage("RPG") + @FameDescription("Hero") + public static class Hero { + + private Treasure talisman; + + @FameProperty(name = "talisman", opposite = "owner") + public Treasure getTalisman() { + return talisman; + } + + public void setTalisman(Treasure talisman) { + if (this.talisman == null ? talisman != null : !this.talisman.equals(talisman)) { + Treasure old_talisman = this.talisman; + this.talisman = talisman; + if (old_talisman != null) old_talisman.setOwner(null); + if (talisman != null) talisman.setOwner(this); + } + } + + private Hero twin; + + @FameProperty(name = "twin", opposite = "twin") + public Hero getTwin() { + return twin; + } + + public void setTwin(Hero twin) { + if (this.twin == null ? twin != null : !this.twin.equals(twin)) { + Hero old_twin = this.twin; + this.twin = twin; + if (old_twin != null) old_twin.setTwin(null); + if (twin != null) twin.setTwin(this); + } + } + + private Collection kills; + + @FameProperty(name = "kills", opposite = "killedBy") + public Collection getKills() { + if (kills == null) { + kills = new MultivalueSet() { + @Override + protected void clearOpposite(Dragon e) { + e.getKilledBy().remove(Hero.this); + } + + @Override + protected void setOpposite(Dragon e) { + e.getKilledBy().add(Hero.this); + } + }; + } + return kills; + } + + public void setKills(Collection kills) { + this.getKills().clear(); + this.getKills().addAll(kills); + } + + public void addKills(Dragon one) { + this.getKills().add(one); + } + + public void addKills(Dragon one, Dragon... many) { + this.getKills().add(one); + for (Dragon each: many) + this.getKills().add(each); + } + + public void addKills(Iterable many) { + for (Dragon each: many) + this.getKills().add(each); + } + + public void addKills(Dragon[] many) { + for (Dragon each: many) + this.getKills().add(each); + } + + public int numberOfKills() { + return getKills().size(); + } + + public boolean hasKills() { + return !getKills().isEmpty(); + } + + } + + @FamePackage("RPG") + @FameDescription("Treasure") + public static class Treasure { + + private Hero owner; + + @FameProperty(name = "owner", opposite = "talisman") + public Hero getOwner() { + return owner; + } + + public void setOwner(Hero owner) { + if (this.owner == null ? owner != null : !this.owner.equals(owner)) { + Hero old_owner = this.owner; + this.owner = owner; + if (old_owner != null) old_owner.setTalisman(null); + if (owner != null) owner.setTalisman(this); + } + } + + private Dragon keeper; + + @FameProperty(name = "keeper", opposite = "hoard") + public Dragon getKeeper() { + return keeper; + } + + public void setKeeper(Dragon keeper) { + if (this.keeper != null) { + if (this.keeper.equals(keeper)) return; + this.keeper.getHoard().remove(this); + } + this.keeper = keeper; + if (keeper == null) return; + keeper.getHoard().add(this); + } + + } + +} diff --git a/test/ch/akuhn/fame/test/FM3MetaMetamodel.java b/lib/src/test/java/ch/akuhn/fame/test/FM3MetaMetamodel.java similarity index 100% rename from test/ch/akuhn/fame/test/FM3MetaMetamodel.java rename to lib/src/test/java/ch/akuhn/fame/test/FM3MetaMetamodel.java diff --git a/test/ch/akuhn/fame/test/Famix30.java b/lib/src/test/java/ch/akuhn/fame/test/Famix30.java similarity index 100% rename from test/ch/akuhn/fame/test/Famix30.java rename to lib/src/test/java/ch/akuhn/fame/test/Famix30.java diff --git a/test/ch/akuhn/fame/test/IterablePropertyTest.java b/lib/src/test/java/ch/akuhn/fame/test/IterablePropertyTest.java similarity index 96% rename from test/ch/akuhn/fame/test/IterablePropertyTest.java rename to lib/src/test/java/ch/akuhn/fame/test/IterablePropertyTest.java index ca73939..fd972a6 100644 --- a/test/ch/akuhn/fame/test/IterablePropertyTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/IterablePropertyTest.java @@ -1,73 +1,73 @@ -package ch.akuhn.fame.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Collection; -import java.util.HashSet; - -import org.junit.Test; - -import ch.akuhn.fame.FameDescription; -import ch.akuhn.fame.FamePackage; -import ch.akuhn.fame.FameProperty; -import ch.akuhn.fame.Tower; -import ch.akuhn.fame.fm3.MetaDescription; -import ch.akuhn.fame.fm3.PropertyDescription; - -@FamePackage("Test") -public class IterablePropertyTest { - - @FameDescription - public static class Example { - - private Collection values = new HashSet(); - - public Example() { - // - } - - public Example(String... values) { - for (String each: values) this.values.add(each); - } - - @FameProperty - public Iterable getValues() { - return values; - } - - public void setValues(Iterable values) { - for (String each: values) this.values.add(each); - } - - } - - @Test - public void testMetamodel() { - Tower t = new Tower(); - t.metamodel.with(Example.class); - PropertyDescription p = t.metamodel.get("Test.Example.values"); - assertEquals("Test.Example.values", p.getFullname()); - assertEquals(MetaDescription.STRING, p.getType()); - assertEquals(true, p.isMultivalued()); - } - - @Test - public void testModelExport() { - Tower t = new Tower(); - t.metamodel.with(Example.class); - t.model.add(new Example("foo", "bar", "qux")); - t.model.exportMSE(System.out); - } - - @Test - public void testModelExportImport() { - Tower t = new Tower(); - t.metamodel.with(Example.class); - t.model.add(new Example("foo", "bar", "qux")); - String str = t.model.exportMSE(); - t = new Tower(); - t.metamodel.with(Example.class); - t.model.importMSE(str); - assertEquals(1, t.model.getElements().size()); - } -} +package ch.akuhn.fame.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Collection; +import java.util.HashSet; + +import org.junit.Test; + +import ch.akuhn.fame.FameDescription; +import ch.akuhn.fame.FamePackage; +import ch.akuhn.fame.FameProperty; +import ch.akuhn.fame.Tower; +import ch.akuhn.fame.fm3.MetaDescription; +import ch.akuhn.fame.fm3.PropertyDescription; + +@FamePackage("Test") +public class IterablePropertyTest { + + @FameDescription + public static class Example { + + private Collection values = new HashSet(); + + public Example() { + // + } + + public Example(String... values) { + for (String each: values) this.values.add(each); + } + + @FameProperty + public Iterable getValues() { + return values; + } + + public void setValues(Iterable values) { + for (String each: values) this.values.add(each); + } + + } + + @Test + public void testMetamodel() { + Tower t = new Tower(); + t.metamodel.with(Example.class); + PropertyDescription p = t.metamodel.get("Test.Example.values"); + assertEquals("Test.Example.values", p.getFullname()); + assertEquals(MetaDescription.STRING, p.getType()); + assertEquals(true, p.isMultivalued()); + } + + @Test + public void testModelExport() { + Tower t = new Tower(); + t.metamodel.with(Example.class); + t.model.add(new Example("foo", "bar", "qux")); + t.model.exportMSE(System.out); + } + + @Test + public void testModelExportImport() { + Tower t = new Tower(); + t.metamodel.with(Example.class); + t.model.add(new Example("foo", "bar", "qux")); + String str = t.model.exportMSE(); + t = new Tower(); + t.metamodel.with(Example.class); + t.model.importMSE(str); + assertEquals(1, t.model.getElements().size()); + } +} diff --git a/test/ch/akuhn/fame/test/JSONPrinterTest.java b/lib/src/test/java/ch/akuhn/fame/test/JSONPrinterTest.java similarity index 100% rename from test/ch/akuhn/fame/test/JSONPrinterTest.java rename to lib/src/test/java/ch/akuhn/fame/test/JSONPrinterTest.java diff --git a/test/ch/akuhn/fame/test/MetaDescriptionTest.java b/lib/src/test/java/ch/akuhn/fame/test/MetaDescriptionTest.java similarity index 100% rename from test/ch/akuhn/fame/test/MetaDescriptionTest.java rename to lib/src/test/java/ch/akuhn/fame/test/MetaDescriptionTest.java diff --git a/test/ch/akuhn/fame/test/MetmodelBuilderTest.java b/lib/src/test/java/ch/akuhn/fame/test/MetmodelBuilderTest.java similarity index 95% rename from test/ch/akuhn/fame/test/MetmodelBuilderTest.java rename to lib/src/test/java/ch/akuhn/fame/test/MetmodelBuilderTest.java index e12fcb9..42a2713 100644 --- a/test/ch/akuhn/fame/test/MetmodelBuilderTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/MetmodelBuilderTest.java @@ -1,24 +1,24 @@ -package ch.akuhn.fame.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import ch.akuhn.fame.Tower; - -public class MetmodelBuilderTest { - - @Test - public void testBuilder() { - Tower t = new Tower(); - t.metamodel.builder() - .beginDocument() - .beginPackage("X") - .beginClass("Foo") - .with("name", "String") - .endDocument(); - - assertEquals(3, t.metamodel.size()); - } - -} +package ch.akuhn.fame.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import ch.akuhn.fame.Tower; + +public class MetmodelBuilderTest { + + @Test + public void testBuilder() { + Tower t = new Tower(); + t.metamodel.builder() + .beginDocument() + .beginPackage("X") + .beginClass("Foo") + .with("name", "String") + .endDocument(); + + assertEquals(3, t.metamodel.size()); + } + +} diff --git a/test/ch/akuhn/fame/test/MultivalueLinkTest.java b/lib/src/test/java/ch/akuhn/fame/test/MultivalueLinkTest.java similarity index 97% rename from test/ch/akuhn/fame/test/MultivalueLinkTest.java rename to lib/src/test/java/ch/akuhn/fame/test/MultivalueLinkTest.java index 79e394a..feac94e 100644 --- a/test/ch/akuhn/fame/test/MultivalueLinkTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/MultivalueLinkTest.java @@ -1,169 +1,169 @@ -package ch.akuhn.fame.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.BeforeClass; -import org.junit.Test; - -import ch.akuhn.fame.codegen.target.DungeonCodegen; -import ch.akuhn.fame.test.DungeonExample.Dragon; -import ch.akuhn.fame.test.DungeonExample.Hero; -import ch.akuhn.fame.test.DungeonExample.Treasure; - -public class MultivalueLinkTest { - - @BeforeClass - public static void runCodegen() { - DungeonCodegen.main(); - // TODO avoid manual recompile which is requiered here !!! - } - - @Test - public void testOneOne() { - Hero h1 = new Hero(); - Treasure t1 = new Treasure(); - Treasure t2 = new Treasure(); - - // from null to null - h1.setTalisman(null); - assertEquals(null, h1.getTalisman()); - assertEquals(null, t1.getOwner()); - - // from null to value - h1.setTalisman(t1); - assertEquals(t1, h1.getTalisman()); - assertEquals(h1, t1.getOwner()); - - // change value - h1.setTalisman(t2); - assertEquals(null, t1.getOwner()); - assertEquals(t2, h1.getTalisman()); - assertEquals(h1, t2.getOwner()); - - // from value to null - h1.setTalisman(null); - assertEquals(null, h1.getTalisman()); - assertEquals(null, t2.getOwner()); - } - - @Test - public void testOneMany() { - Dragon d1 = new Dragon(); - Dragon d2 = new Dragon(); - Treasure t1 = new Treasure(); - Treasure t2 = new Treasure(); - - // from null to null - t1.setKeeper(null); - assertEquals(0, d1.getHoard().size()); - assertEquals(0, d2.getHoard().size()); - assertEquals(null, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - - // from null to value - t1.setKeeper(d1); - assertEquals(1, d1.getHoard().size()); - assertEquals(true, d1.getHoard().contains(t1)); - assertEquals(0, d2.getHoard().size()); - assertEquals(d1, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - - // change value, case I - t1.setKeeper(d2); - assertEquals(0, d1.getHoard().size()); - assertEquals(1, d2.getHoard().size()); - assertEquals(true, d2.getHoard().contains(t1)); - assertEquals(d2, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - - // change value, again - t1.setKeeper(d2); - assertEquals(0, d1.getHoard().size()); - assertEquals(1, d2.getHoard().size()); - assertEquals(true, d2.getHoard().contains(t1)); - assertEquals(d2, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - - // change value, case II - t2.setKeeper(d2); - assertEquals(0, d1.getHoard().size()); - assertEquals(2, d2.getHoard().size()); - assertEquals(true, d2.getHoard().contains(t1)); - assertEquals(true, d2.getHoard().contains(t2)); - assertEquals(d2, t1.getKeeper()); - assertEquals(d2, t2.getKeeper()); - - // from value to null, case I - t1.setKeeper(null); - assertEquals(0, d1.getHoard().size()); - assertEquals(1, d2.getHoard().size()); - assertEquals(true, d2.getHoard().contains(t2)); - assertEquals(null, t1.getKeeper()); - assertEquals(d2, t2.getKeeper()); - - // from value to null, case II - t2.setKeeper(null); - assertEquals(0, d1.getHoard().size()); - assertEquals(0, d2.getHoard().size()); - assertEquals(null, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - } - - @Test - public void testManyOne() { - Dragon d1 = new Dragon(); - Dragon d2 = new Dragon(); - Treasure t1 = new Treasure(); - Treasure t2 = new Treasure(); - - // add value - d1.addHoard(t1); - assertEquals(1, d1.getHoard().size()); - assertEquals(true, d1.getHoard().contains(t1)); - assertEquals(0, d2.getHoard().size()); - assertEquals(d1, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - - // add another value - d1.addHoard(t2); - assertEquals(2, d1.getHoard().size()); - assertEquals(true, d1.getHoard().contains(t1)); - assertEquals(true, d1.getHoard().contains(t2)); - assertEquals(0, d2.getHoard().size()); - assertEquals(d1, t1.getKeeper()); - assertEquals(d1, t2.getKeeper()); - - // move value - d2.addHoard(t2); - assertEquals(1, d1.getHoard().size()); - assertEquals(true, d1.getHoard().contains(t1)); - assertEquals(1, d2.getHoard().size()); - assertEquals(true, d2.getHoard().contains(t2)); - assertEquals(d1, t1.getKeeper()); - assertEquals(d2, t2.getKeeper()); - - // remove value - d2.getHoard().remove(t2); - assertEquals(1, d1.getHoard().size()); - assertEquals(true, d1.getHoard().contains(t1)); - assertEquals(0, d2.getHoard().size()); - assertEquals(d1, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - - // remove value, again - d2.getHoard().remove(t2); - assertEquals(1, d1.getHoard().size()); - assertEquals(true, d1.getHoard().contains(t1)); - assertEquals(0, d2.getHoard().size()); - assertEquals(d1, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - - // from value to null, case II - d1.getHoard().remove(t1); - assertEquals(0, d1.getHoard().size()); - assertEquals(0, d2.getHoard().size()); - assertEquals(null, t1.getKeeper()); - assertEquals(null, t2.getKeeper()); - } - -} +package ch.akuhn.fame.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.BeforeClass; +import org.junit.Test; + +import ch.akuhn.fame.codegen.target.DungeonCodegen; +import ch.akuhn.fame.test.DungeonExample.Dragon; +import ch.akuhn.fame.test.DungeonExample.Hero; +import ch.akuhn.fame.test.DungeonExample.Treasure; + +public class MultivalueLinkTest { + + @BeforeClass + public static void runCodegen() { + DungeonCodegen.main(); + // TODO avoid manual recompile which is requiered here !!! + } + + @Test + public void testOneOne() { + Hero h1 = new Hero(); + Treasure t1 = new Treasure(); + Treasure t2 = new Treasure(); + + // from null to null + h1.setTalisman(null); + assertEquals(null, h1.getTalisman()); + assertEquals(null, t1.getOwner()); + + // from null to value + h1.setTalisman(t1); + assertEquals(t1, h1.getTalisman()); + assertEquals(h1, t1.getOwner()); + + // change value + h1.setTalisman(t2); + assertEquals(null, t1.getOwner()); + assertEquals(t2, h1.getTalisman()); + assertEquals(h1, t2.getOwner()); + + // from value to null + h1.setTalisman(null); + assertEquals(null, h1.getTalisman()); + assertEquals(null, t2.getOwner()); + } + + @Test + public void testOneMany() { + Dragon d1 = new Dragon(); + Dragon d2 = new Dragon(); + Treasure t1 = new Treasure(); + Treasure t2 = new Treasure(); + + // from null to null + t1.setKeeper(null); + assertEquals(0, d1.getHoard().size()); + assertEquals(0, d2.getHoard().size()); + assertEquals(null, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + + // from null to value + t1.setKeeper(d1); + assertEquals(1, d1.getHoard().size()); + assertEquals(true, d1.getHoard().contains(t1)); + assertEquals(0, d2.getHoard().size()); + assertEquals(d1, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + + // change value, case I + t1.setKeeper(d2); + assertEquals(0, d1.getHoard().size()); + assertEquals(1, d2.getHoard().size()); + assertEquals(true, d2.getHoard().contains(t1)); + assertEquals(d2, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + + // change value, again + t1.setKeeper(d2); + assertEquals(0, d1.getHoard().size()); + assertEquals(1, d2.getHoard().size()); + assertEquals(true, d2.getHoard().contains(t1)); + assertEquals(d2, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + + // change value, case II + t2.setKeeper(d2); + assertEquals(0, d1.getHoard().size()); + assertEquals(2, d2.getHoard().size()); + assertEquals(true, d2.getHoard().contains(t1)); + assertEquals(true, d2.getHoard().contains(t2)); + assertEquals(d2, t1.getKeeper()); + assertEquals(d2, t2.getKeeper()); + + // from value to null, case I + t1.setKeeper(null); + assertEquals(0, d1.getHoard().size()); + assertEquals(1, d2.getHoard().size()); + assertEquals(true, d2.getHoard().contains(t2)); + assertEquals(null, t1.getKeeper()); + assertEquals(d2, t2.getKeeper()); + + // from value to null, case II + t2.setKeeper(null); + assertEquals(0, d1.getHoard().size()); + assertEquals(0, d2.getHoard().size()); + assertEquals(null, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + } + + @Test + public void testManyOne() { + Dragon d1 = new Dragon(); + Dragon d2 = new Dragon(); + Treasure t1 = new Treasure(); + Treasure t2 = new Treasure(); + + // add value + d1.addHoard(t1); + assertEquals(1, d1.getHoard().size()); + assertEquals(true, d1.getHoard().contains(t1)); + assertEquals(0, d2.getHoard().size()); + assertEquals(d1, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + + // add another value + d1.addHoard(t2); + assertEquals(2, d1.getHoard().size()); + assertEquals(true, d1.getHoard().contains(t1)); + assertEquals(true, d1.getHoard().contains(t2)); + assertEquals(0, d2.getHoard().size()); + assertEquals(d1, t1.getKeeper()); + assertEquals(d1, t2.getKeeper()); + + // move value + d2.addHoard(t2); + assertEquals(1, d1.getHoard().size()); + assertEquals(true, d1.getHoard().contains(t1)); + assertEquals(1, d2.getHoard().size()); + assertEquals(true, d2.getHoard().contains(t2)); + assertEquals(d1, t1.getKeeper()); + assertEquals(d2, t2.getKeeper()); + + // remove value + d2.getHoard().remove(t2); + assertEquals(1, d1.getHoard().size()); + assertEquals(true, d1.getHoard().contains(t1)); + assertEquals(0, d2.getHoard().size()); + assertEquals(d1, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + + // remove value, again + d2.getHoard().remove(t2); + assertEquals(1, d1.getHoard().size()); + assertEquals(true, d1.getHoard().contains(t1)); + assertEquals(0, d2.getHoard().size()); + assertEquals(d1, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + + // from value to null, case II + d1.getHoard().remove(t1); + assertEquals(0, d1.getHoard().size()); + assertEquals(0, d2.getHoard().size()); + assertEquals(null, t1.getKeeper()); + assertEquals(null, t2.getKeeper()); + } + +} diff --git a/test/ch/akuhn/fame/test/OppositeTest.java b/lib/src/test/java/ch/akuhn/fame/test/OppositeTest.java similarity index 100% rename from test/ch/akuhn/fame/test/OppositeTest.java rename to lib/src/test/java/ch/akuhn/fame/test/OppositeTest.java diff --git a/test/ch/akuhn/fame/test/PolymorphismTest.java b/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java similarity index 95% rename from test/ch/akuhn/fame/test/PolymorphismTest.java rename to lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java index cd9c266..ff79d17 100644 --- a/test/ch/akuhn/fame/test/PolymorphismTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java @@ -1,45 +1,45 @@ -package ch.akuhn.fame.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import ch.akuhn.fame.FameDescription; -import ch.akuhn.fame.FameProperty; -import ch.akuhn.fame.Tower; -import ch.unibe.jexample.Given; -import ch.unibe.jexample.JExample; - -@RunWith( JExample.class) -public class PolymorphismTest { - - @FameDescription - static class A { - - @FameProperty - public Object p; - - } - - static class B extends A { - - } - - @Test - public Tower tower() { - Tower t = new Tower(); - t.metamodel.with(A.class); - return t; - } - - @Test - @Given("#tower") - public void addPolymorphElement(Tower t) { - int metamodelSize = t.metamodel.size(); - assertEquals(0, t.model.size()); - t.model.add(new B()); - assertEquals(metamodelSize, t.metamodel.size()); - assertEquals(1, t.model.size()); - } -} +package ch.akuhn.fame.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import ch.akuhn.fame.FameDescription; +import ch.akuhn.fame.FameProperty; +import ch.akuhn.fame.Tower; +import ch.unibe.jexample.Given; +import ch.unibe.jexample.JExample; + +@RunWith( JExample.class) +public class PolymorphismTest { + + @FameDescription + static class A { + + @FameProperty + public Object p; + + } + + static class B extends A { + + } + + @Test + public Tower tower() { + Tower t = new Tower(); + t.metamodel.with(A.class); + return t; + } + + @Test + @Given("#tower") + public void addPolymorphElement(Tower t) { + int metamodelSize = t.metamodel.size(); + assertEquals(0, t.model.size()); + t.model.add(new B()); + assertEquals(metamodelSize, t.metamodel.size()); + assertEquals(1, t.model.size()); + } +} diff --git a/test/ch/akuhn/fame/test/ScannerTest.java b/lib/src/test/java/ch/akuhn/fame/test/ScannerTest.java similarity index 100% rename from test/ch/akuhn/fame/test/ScannerTest.java rename to lib/src/test/java/ch/akuhn/fame/test/ScannerTest.java diff --git a/test/ch/akuhn/fame/test/StringsTest.java b/lib/src/test/java/ch/akuhn/fame/test/StringsTest.java similarity index 100% rename from test/ch/akuhn/fame/test/StringsTest.java rename to lib/src/test/java/ch/akuhn/fame/test/StringsTest.java diff --git a/test/ch/akuhn/fame/test/TermBagExample.java b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java similarity index 96% rename from test/ch/akuhn/fame/test/TermBagExample.java rename to lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java index 7f16a48..a9cb144 100644 --- a/test/ch/akuhn/fame/test/TermBagExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java @@ -1,154 +1,154 @@ -package ch.akuhn.fame.test; - -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import ch.akuhn.fame.FameDescription; -import ch.akuhn.fame.FamePackage; -import ch.akuhn.fame.FameProperty; -import ch.akuhn.fame.Repository; -import ch.akuhn.fame.Tower; -import ch.akuhn.util.Bag; -import ch.akuhn.util.Strings; -import ch.unibe.jexample.Given; -import ch.unibe.jexample.JExample; - -@RunWith(JExample.class) -public class TermBagExample { - - private static final String EMPTY_DOCUMENT = - "( (TEST.Document (id: 1)))"; - private static final String SOME_DOCUMENT = - "( (TEST.Document (id: 1) (terms 2 'be' 'to' 1 'or' 'not')))"; - - - @FameDescription - @FamePackage("TEST") - static class Document { - - @FameProperty() - public String name; - - public Bag terms = new Bag(); - - @FameProperty(name="terms") - public List getTermData() { - List list = new ArrayList(); - int count = -1; - for (Bag.Count each : terms.sortedCounts()) { - if (each.count != count) list.add(count = each.count); - list.add(each.element); - } - return list; - } - - public void setTermData(List data) { - Bag bag = new Bag(); - int count = -1; - for (Object each : data) { - if (each instanceof Number) { - count = ((Number) each).intValue(); - } else { - assert count > 0; - bag.add((String) each, count); - } - } - terms = bag; - } - - } - - @Test - public Tower tower() { - Tower t = new Tower(); - t.metamodel.with(Document.class); - assert t.metamodel.allPackageDescriptions().size() == 1; - assert t.metamodel.allClassDescriptions().size() == 1; - assert t.metamodel.allPropertyDescriptions().size() == 2; - return t; - } - - @Test - @Given("tower") - public Repository emptyModel(Tower t) { - return t.model; - } - - @Test - public Document emptyDocument() { - return new Document(); - } - - @Test - @Given("emptyModel;emptyDocument") - public Repository modelWithEmptyDocument(Repository m, Document d) { - m.add(d); - assert m.size() == 1; - return m; - } - - @Test - @Given("modelWithEmptyDocument") - public void exportModelWithEmptyDocument(Repository r) { - String s = r.exportMSE(); - assertEquals(EMPTY_DOCUMENT, normalizeWhitespace(s)); - } - - @Test - public Document someDocument() { - Document d = new Document(); - d.terms.add("to", 2); - d.terms.add("be", 2); - d.terms.add("or"); - d.terms.add("not"); - return d; - } - - @Test - @Given("emptyModel;someDocument") - public Repository modelWithSomeDocument(Repository m, Document d) { - m.add(d); - assert m.size() == 1; - return m; - } - - @Test - @Given("modelWithSomeDocument") - public void exportModelWithSomeDocument(Repository r) { - String s = r.exportMSE(); - // TODO fragile test, order of terms may differ if hash key of interned strings diffs or if abg impl diffs - // assertEquals(SOME_DOCUMENT, normalizeWhitespace(s)); - } - - @Test - @Given("tower") - public Repository importModelWithSomeDocument(Tower t) { - assert t.model.size() == 0; - t.model.importMSE(SOME_DOCUMENT); - assert t.model.size() == 1; - Document d = (Document) t.model.getElements().iterator().next(); - assert d.terms.size() == 6; - assert d.terms.occurrences("be") == 2; - assert d.terms.occurrences("to") == 2; - assert d.terms.occurrences("or") == 1; - assert d.terms.occurrences("not") == 1; - return t.model; - } - - private static String normalizeWhitespace(String s) { - StringBuilder $ = new StringBuilder(); - boolean wasWhitespace = false; - for (char ch: Strings.chars(s)) { - boolean isWhitespace = Character.isWhitespace(ch); - if (!(isWhitespace && wasWhitespace)) $.append(isWhitespace ? ' ' : ch); - wasWhitespace = isWhitespace; - } - return $.toString(); - } - -} +package ch.akuhn.fame.test; + +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import ch.akuhn.fame.FameDescription; +import ch.akuhn.fame.FamePackage; +import ch.akuhn.fame.FameProperty; +import ch.akuhn.fame.Repository; +import ch.akuhn.fame.Tower; +import ch.akuhn.util.Bag; +import ch.akuhn.util.Strings; +import ch.unibe.jexample.Given; +import ch.unibe.jexample.JExample; + +@RunWith(JExample.class) +public class TermBagExample { + + private static final String EMPTY_DOCUMENT = + "( (TEST.Document (id: 1)))"; + private static final String SOME_DOCUMENT = + "( (TEST.Document (id: 1) (terms 2 'be' 'to' 1 'or' 'not')))"; + + + @FameDescription + @FamePackage("TEST") + static class Document { + + @FameProperty() + public String name; + + public Bag terms = new Bag(); + + @FameProperty(name="terms") + public List getTermData() { + List list = new ArrayList(); + int count = -1; + for (Bag.Count each : terms.sortedCounts()) { + if (each.count != count) list.add(count = each.count); + list.add(each.element); + } + return list; + } + + public void setTermData(List data) { + Bag bag = new Bag(); + int count = -1; + for (Object each : data) { + if (each instanceof Number) { + count = ((Number) each).intValue(); + } else { + assert count > 0; + bag.add((String) each, count); + } + } + terms = bag; + } + + } + + @Test + public Tower tower() { + Tower t = new Tower(); + t.metamodel.with(Document.class); + assert t.metamodel.allPackageDescriptions().size() == 1; + assert t.metamodel.allClassDescriptions().size() == 1; + assert t.metamodel.allPropertyDescriptions().size() == 2; + return t; + } + + @Test + @Given("tower") + public Repository emptyModel(Tower t) { + return t.model; + } + + @Test + public Document emptyDocument() { + return new Document(); + } + + @Test + @Given("emptyModel;emptyDocument") + public Repository modelWithEmptyDocument(Repository m, Document d) { + m.add(d); + assert m.size() == 1; + return m; + } + + @Test + @Given("modelWithEmptyDocument") + public void exportModelWithEmptyDocument(Repository r) { + String s = r.exportMSE(); + assertEquals(EMPTY_DOCUMENT, normalizeWhitespace(s)); + } + + @Test + public Document someDocument() { + Document d = new Document(); + d.terms.add("to", 2); + d.terms.add("be", 2); + d.terms.add("or"); + d.terms.add("not"); + return d; + } + + @Test + @Given("emptyModel;someDocument") + public Repository modelWithSomeDocument(Repository m, Document d) { + m.add(d); + assert m.size() == 1; + return m; + } + + @Test + @Given("modelWithSomeDocument") + public void exportModelWithSomeDocument(Repository r) { + String s = r.exportMSE(); + // TODO fragile test, order of terms may differ if hash key of interned strings diffs or if abg impl diffs + // assertEquals(SOME_DOCUMENT, normalizeWhitespace(s)); + } + + @Test + @Given("tower") + public Repository importModelWithSomeDocument(Tower t) { + assert t.model.size() == 0; + t.model.importMSE(SOME_DOCUMENT); + assert t.model.size() == 1; + Document d = (Document) t.model.getElements().iterator().next(); + assert d.terms.size() == 6; + assert d.terms.occurrences("be") == 2; + assert d.terms.occurrences("to") == 2; + assert d.terms.occurrences("or") == 1; + assert d.terms.occurrences("not") == 1; + return t.model; + } + + private static String normalizeWhitespace(String s) { + StringBuilder $ = new StringBuilder(); + boolean wasWhitespace = false; + for (char ch: Strings.chars(s)) { + boolean isWhitespace = Character.isWhitespace(ch); + if (!(isWhitespace && wasWhitespace)) $.append(isWhitespace ? ' ' : ch); + wasWhitespace = isWhitespace; + } + return $.toString(); + } + +} diff --git a/samples/ch/unibe/fame/resources/EMOF.emof.mse b/lib/src/test/resources/ch/unibe/fame/resources/EMOF.emof.mse similarity index 96% rename from samples/ch/unibe/fame/resources/EMOF.emof.mse rename to lib/src/test/resources/ch/unibe/fame/resources/EMOF.emof.mse index c34407b..440e025 100644 --- a/samples/ch/unibe/fame/resources/EMOF.emof.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/EMOF.emof.mse @@ -1,283 +1,283 @@ -((EMOF.Package (id: 1) - (name EMOF) - (ownedType - (EMOF.Class (id: 2) - (name Type) - (ownedAttribute - (EMOF.Property (id: 3) - (name package) - (class (idref: 2)) - (lower 0) - (opposite (idref: 4)) - (type (idref: 5)))) - (package (idref: 1)) - (superClass (idref: 6))) - (EMOF.Class (id: 7) - (name Comment) - (ownedAttribute - (EMOF.Property (id: 8) - (name body) - (class (idref: 7)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 9) - (name annotatedElement) - (class (idref: 7)) - (lower 0) - (opposite (idref: 10)) - (type (idref: 11)) - (upper *))) - (package (idref: 1)) - (superClass (idref: 11))) - (EMOF.Class (id: 12) - (name MultiplicityElement) - (ownedAttribute - (EMOF.Property (id: 13) - (name lower) - (class (idref: 12)) - (default '1') - (type (primitive: Number))) - (EMOF.Property (id: 14) - (name isUnique) - (class (idref: 12)) - (default true) - (type (primitive: Boolean))) - (EMOF.Property (id: 15) - (name isOrdered) - (class (idref: 12)) - (default false) - (type (primitive: Boolean))) - (EMOF.Property (id: 16) - (name upper) - (class (idref: 12)) - (default '1') - (type (primitive: UnlimitedNatural)))) - (package (idref: 1)) - (superClass (idref: 11))) - (EMOF.Class (id: 17) - (name Operation) - (ownedAttribute - (EMOF.Property (id: 18) - (name ownedParameter) - (class (idref: 17)) - (lower 0) - (opposite (idref: 19)) - (type (idref: 20)) - (upper *)) - (EMOF.Property (id: 21) - (name raisedException) - (class (idref: 17)) - (lower 0) - (type (idref: 2)) - (upper *)) - (EMOF.Property (id: 22) - (name class) - (class (idref: 17)) - (lower 0) - (opposite (idref: 23)) - (type (idref: 24)))) - (package (idref: 1)) - (superClass (idref: 25) (idref: 12))) - (EMOF.Class (id: 24) - (name Class) - (ownedAttribute - (EMOF.Property (id: 26) - (name isAbstract) - (class (idref: 24)) - (default false) - (type (primitive: Boolean))) - (EMOF.Property (id: 27) - (name ownedAttribute) - (class (idref: 24)) - (lower 0) - (opposite (idref: 28)) - (type (idref: 29)) - (upper *)) - (EMOF.Property (id: 30) - (name superClass) - (class (idref: 24)) - (lower 0) - (type (idref: 24)) - (upper *)) - (EMOF.Property (id: 23) - (name ownedOperation) - (class (idref: 24)) - (lower 0) - (opposite (idref: 22)) - (type (idref: 17)) - (upper *))) - (package (idref: 1)) - (superClass (idref: 2))) - (EMOF.Class (id: 6) - (name NamedElement) - (ownedAttribute - (EMOF.Property (id: 31) - (name qualifiedName) - (class (idref: 6)) - (isDerived true) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 32) - (name name) - (class (idref: 6)) - (lower 0) - (type (primitive: String)))) - (package (idref: 1)) - (superClass (idref: 11))) - (EMOF.Class (id: 25) - (name TypedElement) - (ownedAttribute - (EMOF.Property (id: 33) - (name type) - (class (idref: 25)) - (lower 0) - (type (idref: 2)))) - (package (idref: 1)) - (superClass (idref: 6))) - (EMOF.Class (id: 20) - (name Parameter) - (ownedAttribute - (EMOF.Property (id: 19) - (name operation) - (class (idref: 20)) - (lower 0) - (opposite (idref: 18)) - (type (idref: 17)))) - (package (idref: 1)) - (superClass (idref: 25) (idref: 12))) - (EMOF.Class (id: 5) - (name Package) - (ownedAttribute - (EMOF.Property (id: 34) - (name nestedPackage) - (class (idref: 5)) - (lower 0) - (opposite (idref: 35)) - (type (idref: 5)) - (upper *)) - (EMOF.Property (id: 4) - (name ownedType) - (class (idref: 5)) - (lower 0) - (opposite (idref: 3)) - (type (idref: 2)) - (upper *)) - (EMOF.Property (id: 35) - (name nestingPackage) - (class (idref: 5)) - (lower 0) - (opposite (idref: 34)) - (type (idref: 5)))) - (package (idref: 1)) - (superClass (idref: 6))) - (EMOF.Class (id: 11) - (name Element) - (ownedAttribute - (EMOF.Property (id: 36) - (name owner) - (class (idref: 11)) - (isComposite true) - (isDerived true) - (lower 0) - (opposite (idref: 37)) - (type (idref: 11))) - (EMOF.Property (id: 10) - (name ownedComment) - (class (idref: 11)) - (lower 0) - (opposite (idref: 9)) - (type (idref: 7)) - (upper *)) - (EMOF.Property (id: 37) - (name ownedElement) - (class (idref: 11)) - (isDerived true) - (lower 0) - (opposite (idref: 36)) - (type (idref: 11)) - (upper *))) - (ownedOperation - (EMOF.Operation (id: 38) - (name get) - (class (idref: 11)) - (type (idref: 11))) - (EMOF.Operation (id: 39) - (name getMetaClass) - (class (idref: 11)) - (type (idref: 24))) - (EMOF.Operation (id: 40) - (name Unset) - (class (idref: 11))) - (EMOF.Operation (id: 41) - (name isSet) - (class (idref: 11)) - (type (primitive: Boolean))) - (EMOF.Operation (id: 42) - (name set) - (class (idref: 11))) - (EMOF.Operation (id: 43) - (name equals) - (class (idref: 11)) - (type (primitive: Boolean))) - (EMOF.Operation (id: 44) - (name container) - (class (idref: 11)) - (type (idref: 11)))) - (package (idref: 1))) - (EMOF.Class (id: 45) - (name PrimitiveType) - (ownedAttribute - (EMOF.Property (id: 46) - (name encodeExpression) - (class (idref: 45)) - (lower 0) - (type (primitive: EMOF.Expression))) - (EMOF.Property (id: 47) - (name decodeExpression) - (class (idref: 45)) - (lower 0) - (type (primitive: EMOF.Expression)))) - (package (idref: 1)) - (superClass (idref: 2))) - (EMOF.PrimitiveType (id: 48) - (name Expression) - (decodeExpression (value: '[:t1 | Compiler evaluate: t1 contents]')) - (encodeExpression (value: '[:t1 :t2 | t2 nextPutAll: t1 method decompiledSource]')) - (package (idref: 1))) - (EMOF.Class (id: 29) - (name Property) - (ownedAttribute - (EMOF.Property (id: 49) - (name default) - (class (idref: 29)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 50) - (name isComposite) - (class (idref: 29)) - (default false) - (type (primitive: Boolean))) - (EMOF.Property (id: 51) - (name isReadOnly) - (class (idref: 29)) - (default false) - (type (primitive: Boolean))) - (EMOF.Property (id: 28) - (name class) - (class (idref: 29)) - (lower 0) - (opposite (idref: 27)) - (type (idref: 24))) - (EMOF.Property (id: 52) - (name isDerived) - (class (idref: 29)) - (default false) - (type (primitive: Boolean))) - (EMOF.Property (id: 53) - (name opposite) - (class (idref: 29)) - (lower 0) - (opposite (idref: 53)) - (type (idref: 29)))) - (package (idref: 1)) - (superClass (idref: 25) (idref: 12)))))) +((EMOF.Package (id: 1) + (name EMOF) + (ownedType + (EMOF.Class (id: 2) + (name Type) + (ownedAttribute + (EMOF.Property (id: 3) + (name package) + (class (idref: 2)) + (lower 0) + (opposite (idref: 4)) + (type (idref: 5)))) + (package (idref: 1)) + (superClass (idref: 6))) + (EMOF.Class (id: 7) + (name Comment) + (ownedAttribute + (EMOF.Property (id: 8) + (name body) + (class (idref: 7)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 9) + (name annotatedElement) + (class (idref: 7)) + (lower 0) + (opposite (idref: 10)) + (type (idref: 11)) + (upper *))) + (package (idref: 1)) + (superClass (idref: 11))) + (EMOF.Class (id: 12) + (name MultiplicityElement) + (ownedAttribute + (EMOF.Property (id: 13) + (name lower) + (class (idref: 12)) + (default '1') + (type (primitive: Number))) + (EMOF.Property (id: 14) + (name isUnique) + (class (idref: 12)) + (default true) + (type (primitive: Boolean))) + (EMOF.Property (id: 15) + (name isOrdered) + (class (idref: 12)) + (default false) + (type (primitive: Boolean))) + (EMOF.Property (id: 16) + (name upper) + (class (idref: 12)) + (default '1') + (type (primitive: UnlimitedNatural)))) + (package (idref: 1)) + (superClass (idref: 11))) + (EMOF.Class (id: 17) + (name Operation) + (ownedAttribute + (EMOF.Property (id: 18) + (name ownedParameter) + (class (idref: 17)) + (lower 0) + (opposite (idref: 19)) + (type (idref: 20)) + (upper *)) + (EMOF.Property (id: 21) + (name raisedException) + (class (idref: 17)) + (lower 0) + (type (idref: 2)) + (upper *)) + (EMOF.Property (id: 22) + (name class) + (class (idref: 17)) + (lower 0) + (opposite (idref: 23)) + (type (idref: 24)))) + (package (idref: 1)) + (superClass (idref: 25) (idref: 12))) + (EMOF.Class (id: 24) + (name Class) + (ownedAttribute + (EMOF.Property (id: 26) + (name isAbstract) + (class (idref: 24)) + (default false) + (type (primitive: Boolean))) + (EMOF.Property (id: 27) + (name ownedAttribute) + (class (idref: 24)) + (lower 0) + (opposite (idref: 28)) + (type (idref: 29)) + (upper *)) + (EMOF.Property (id: 30) + (name superClass) + (class (idref: 24)) + (lower 0) + (type (idref: 24)) + (upper *)) + (EMOF.Property (id: 23) + (name ownedOperation) + (class (idref: 24)) + (lower 0) + (opposite (idref: 22)) + (type (idref: 17)) + (upper *))) + (package (idref: 1)) + (superClass (idref: 2))) + (EMOF.Class (id: 6) + (name NamedElement) + (ownedAttribute + (EMOF.Property (id: 31) + (name qualifiedName) + (class (idref: 6)) + (isDerived true) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 32) + (name name) + (class (idref: 6)) + (lower 0) + (type (primitive: String)))) + (package (idref: 1)) + (superClass (idref: 11))) + (EMOF.Class (id: 25) + (name TypedElement) + (ownedAttribute + (EMOF.Property (id: 33) + (name type) + (class (idref: 25)) + (lower 0) + (type (idref: 2)))) + (package (idref: 1)) + (superClass (idref: 6))) + (EMOF.Class (id: 20) + (name Parameter) + (ownedAttribute + (EMOF.Property (id: 19) + (name operation) + (class (idref: 20)) + (lower 0) + (opposite (idref: 18)) + (type (idref: 17)))) + (package (idref: 1)) + (superClass (idref: 25) (idref: 12))) + (EMOF.Class (id: 5) + (name Package) + (ownedAttribute + (EMOF.Property (id: 34) + (name nestedPackage) + (class (idref: 5)) + (lower 0) + (opposite (idref: 35)) + (type (idref: 5)) + (upper *)) + (EMOF.Property (id: 4) + (name ownedType) + (class (idref: 5)) + (lower 0) + (opposite (idref: 3)) + (type (idref: 2)) + (upper *)) + (EMOF.Property (id: 35) + (name nestingPackage) + (class (idref: 5)) + (lower 0) + (opposite (idref: 34)) + (type (idref: 5)))) + (package (idref: 1)) + (superClass (idref: 6))) + (EMOF.Class (id: 11) + (name Element) + (ownedAttribute + (EMOF.Property (id: 36) + (name owner) + (class (idref: 11)) + (isComposite true) + (isDerived true) + (lower 0) + (opposite (idref: 37)) + (type (idref: 11))) + (EMOF.Property (id: 10) + (name ownedComment) + (class (idref: 11)) + (lower 0) + (opposite (idref: 9)) + (type (idref: 7)) + (upper *)) + (EMOF.Property (id: 37) + (name ownedElement) + (class (idref: 11)) + (isDerived true) + (lower 0) + (opposite (idref: 36)) + (type (idref: 11)) + (upper *))) + (ownedOperation + (EMOF.Operation (id: 38) + (name get) + (class (idref: 11)) + (type (idref: 11))) + (EMOF.Operation (id: 39) + (name getMetaClass) + (class (idref: 11)) + (type (idref: 24))) + (EMOF.Operation (id: 40) + (name Unset) + (class (idref: 11))) + (EMOF.Operation (id: 41) + (name isSet) + (class (idref: 11)) + (type (primitive: Boolean))) + (EMOF.Operation (id: 42) + (name set) + (class (idref: 11))) + (EMOF.Operation (id: 43) + (name equals) + (class (idref: 11)) + (type (primitive: Boolean))) + (EMOF.Operation (id: 44) + (name container) + (class (idref: 11)) + (type (idref: 11)))) + (package (idref: 1))) + (EMOF.Class (id: 45) + (name PrimitiveType) + (ownedAttribute + (EMOF.Property (id: 46) + (name encodeExpression) + (class (idref: 45)) + (lower 0) + (type (primitive: EMOF.Expression))) + (EMOF.Property (id: 47) + (name decodeExpression) + (class (idref: 45)) + (lower 0) + (type (primitive: EMOF.Expression)))) + (package (idref: 1)) + (superClass (idref: 2))) + (EMOF.PrimitiveType (id: 48) + (name Expression) + (decodeExpression (value: '[:t1 | Compiler evaluate: t1 contents]')) + (encodeExpression (value: '[:t1 :t2 | t2 nextPutAll: t1 method decompiledSource]')) + (package (idref: 1))) + (EMOF.Class (id: 29) + (name Property) + (ownedAttribute + (EMOF.Property (id: 49) + (name default) + (class (idref: 29)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 50) + (name isComposite) + (class (idref: 29)) + (default false) + (type (primitive: Boolean))) + (EMOF.Property (id: 51) + (name isReadOnly) + (class (idref: 29)) + (default false) + (type (primitive: Boolean))) + (EMOF.Property (id: 28) + (name class) + (class (idref: 29)) + (lower 0) + (opposite (idref: 27)) + (type (idref: 24))) + (EMOF.Property (id: 52) + (name isDerived) + (class (idref: 29)) + (default false) + (type (primitive: Boolean))) + (EMOF.Property (id: 53) + (name opposite) + (class (idref: 29)) + (lower 0) + (opposite (idref: 53)) + (type (idref: 29)))) + (package (idref: 1)) + (superClass (idref: 25) (idref: 12)))))) diff --git a/samples/ch/unibe/fame/resources/EMOF.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/EMOF.fm3.mse similarity index 100% rename from samples/ch/unibe/fame/resources/EMOF.fm3.mse rename to lib/src/test/resources/ch/unibe/fame/resources/EMOF.fm3.mse diff --git a/samples/ch/unibe/fame/resources/FAMIX22.emof.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.emof.mse similarity index 96% rename from samples/ch/unibe/fame/resources/FAMIX22.emof.mse rename to lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.emof.mse index 61f3fd9..3dabd9a 100644 --- a/samples/ch/unibe/fame/resources/FAMIX22.emof.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.emof.mse @@ -1,4196 +1,4196 @@ -((EMOF.Package (id: 1) - (name DynaMoose) - (ownedType - (EMOF.Class (id: 2) - (name AbstractEvent) - (ownedAttribute - (EMOF.Property (id: 3) - (name parent) - (class (idref: 2)) - (lower 0) - (opposite (idref: 4)) - (type (idref: 2))) - (EMOF.Property (id: 5) - (name start) - (class (idref: 2)) - (lower 0) - (type (primitive: Number))) - (EMOF.Property (id: 6) - (name stop) - (class (idref: 2)) - (lower 0) - (type (primitive: Number))) - (EMOF.Property (id: 4) - (name child) - (class (idref: 2)) - (isDerived true) - (lower 0) - (opposite (idref: 3)) - (type (idref: 2)) - (upper *))) - (package (idref: 1)) - (superClass (idref: 7))) - (EMOF.Class (id: 8) - (name Trace) - (ownedAttribute - (EMOF.Property (id: 9) - (name activation) - (class (idref: 8)) - (isDerived true) - (lower 0) - (opposite (idref: 10)) - (type (idref: 11)) - (upper *)) - (EMOF.Property (id: 12) - (name name) - (class (idref: 8)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 13) - (name start) - (class (idref: 8)) - (lower 0) - (type (primitive: Number))) - (EMOF.Property (id: 14) - (name stop) - (class (idref: 8)) - (lower 0) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 15) - (name NOIf) - (class (idref: 8)) - (description 'The number of Instances in a trace') - (isReadOnly true) - (longName 'Number of Instances') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 16) - (name NOMLGf) - (class (idref: 8)) - (description 'The number of low group feature methods in a trace') - (isReadOnly true) - (longName 'Number of low group feature methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 17) - (name NOCHGf) - (class (idref: 8)) - (description 'The number of High Group feature classes in a trace') - (isReadOnly true) - (longName 'Number of High Group feature classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 18) - (name NOEvents) - (class (idref: 8)) - (description 'The number of events in a trace') - (isReadOnly true) - (longName 'Number of events') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 19) - (name 'NOMSf_p') - (class (idref: 8)) - (description '% single feature methods in a trace') - (isReadOnly true) - (longName '% single feature methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 20) - (name NOM) - (class (idref: 8)) - (description 'The number of methods in a trace') - (isReadOnly true) - (longName 'Number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 21) - (name NOCf) - (class (idref: 8)) - (description 'The number of Classes in a trace') - (isReadOnly true) - (longName 'Number of Classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 22) - (name NOMHGf) - (class (idref: 8)) - (description 'The number of High Group feature methods in a trace') - (isReadOnly true) - (longName 'Number of High Group feature methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 23) - (name 'NOCSf_p') - (class (idref: 8)) - (description 'Percentage of single feature classes in a trace') - (isReadOnly true) - (longName 'Percentage single feature classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 24) - (name NOCSf) - (class (idref: 8)) - (description 'The number of single feature classes in a trace') - (isReadOnly true) - (longName 'Number of single feature classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 25) - (name NOCLGf) - (class (idref: 8)) - (description 'The number of low group feature classes in a trace') - (isReadOnly true) - (longName 'Number of low group feature classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 26) - (name NOMSf) - (class (idref: 8)) - (description 'The number of single feature methods in a trace') - (isReadOnly true) - (longName 'Number of single feature methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 27) - (name NOMIf) - (class (idref: 8)) - (description 'The number of Infrastructural feature methods in a trace') - (isReadOnly true) - (longName 'Number of Infrastructural feature methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 28) - (name NOCIf) - (class (idref: 8)) - (description 'The number of Infrastructural feature classes in a trace') - (isReadOnly true) - (longName 'Number of Infrastructural feature classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 29) - (name 'NOCHGf_p') - (class (idref: 8)) - (description 'Percentage of high group feature classes in a trace') - (isReadOnly true) - (longName 'Percentage high group feature classes') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 30) - (name myUniqueInstancesGroup) - (category 'Feature Instances') - (class (idref: 8))) - (EMOF.MetaAction (id: 31) - (name highGroupMethodCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 32) - (name highGroupClassesCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 33) - (name theFeaturesDependedOnTransitiveClosureGroup) - (category 'Feature Relationships') - (class (idref: 8))) - (EMOF.MetaAction (id: 34) - (name instances) - (category 'Feature Instances') - (class (idref: 8))) - (EMOF.MetaAction (id: 35) - (name openTimePlot) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 36) - (name lowGroupMethodCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 37) - (name infrastructuralClassesCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 38) - (name openTimePlotHTMLWriterStream) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 39) - (name openTimePlotAsk) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 40) - (name openTimePlotLayerColorPlus) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 41) - (name openColoredPlot) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 42) - (name infrasturcturalFeatureMethodCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 43) - (name singleClassesCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 44) - (name openTimePlotLayerColor) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 45) - (name openTimePlotSingleFeatureWriterStream) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 46) - (name theFeaturesDependedOnGroup) - (category 'Feature Relationships') - (class (idref: 8))) - (EMOF.MetaAction (id: 47) - (name openFCPlot) - (category 'Time Signal') - (class (idref: 8))) - (EMOF.MetaAction (id: 48) - (name singleFeatureMethodCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 49) - (name lowGroupClassesCharacterization) - (category 'Feature Characterization') - (class (idref: 8))) - (EMOF.MetaAction (id: 50) - (name theFeaturesSharedInstancesGroup) - (category 'Feature Relationships') - (class (idref: 8))) - (EMOF.MetaNavigation (id: 51) - (name infrastructuralFeatureClassesGroup) - (class (idref: 8)) - (longName 'Infrastructural feature classes')) - (EMOF.MetaNavigation (id: 52) - (name highGroupFeatureClassesGroup) - (class (idref: 8)) - (longName 'High group feature classes')) - (EMOF.MetaNavigation (id: 53) - (name singleFeatureClassesGroup) - (class (idref: 8)) - (longName 'Single feature classes')) - (EMOF.MetaNavigation (id: 54) - (name lowGroupFeatureClassesGroup) - (class (idref: 8)) - (longName 'Low group feature classes'))) - (package (idref: 1)) - (superClass (idref: 7))) - (EMOF.Class (id: 11) - (name Activation) - (ownedAttribute - (EMOF.Property (id: 55) - (name method) - (class (idref: 11)) - (lower 0) - (type (idref: 56))) - (EMOF.Property (id: 57) - (name receiver) - (class (idref: 11)) - (lower 0) - (opposite (idref: 58)) - (type (idref: 59))) - (EMOF.Property (id: 60) - (name argument) - (class (idref: 11)) - (isDerived true) - (lower 0) - (opposite (idref: 61)) - (type (idref: 62)) - (upper *)) - (EMOF.Property (id: 63) - (name return) - (class (idref: 11)) - (lower 0) - (type (idref: 59))) - (EMOF.Property (id: 10) - (name trace) - (class (idref: 11)) - (lower 0) - (opposite (idref: 9)) - (type (idref: 8))) - (EMOF.Property (id: 64) - (name alias) - (class (idref: 11)) - (isDerived true) - (lower 0) - (opposite (idref: 61)) - (type (idref: 65)) - (upper *))) - (package (idref: 1)) - (superClass (idref: 2))) - (EMOF.Class (id: 65) - (name Alias) - (ownedAttribute - (EMOF.Property (id: 66) - (name subject) - (class (idref: 65)) - (lower 0) - (opposite (idref: 67)) - (type (idref: 68))) - (EMOF.Property (id: 69) - (name variable) - (class (idref: 65)) - (lower 0) - (opposite (idref: 70)) - (type (idref: 71))) - (EMOF.Property (id: 61) - (name creator) - (class (idref: 65)) - (lower 0) - (opposite (idref: 64)) - (type (idref: 11))) - (EMOF.Property (id: 72) - (name ancestor) - (class (idref: 65)) - (lower 0) - (opposite (idref: 73)) - (type (idref: 65))) - (EMOF.Property (id: 73) - (name descendant) - (class (idref: 65)) - (isDerived true) - (lower 0) - (opposite (idref: 72)) - (type (idref: 65)) - (upper *)) - (EMOF.Property (id: 74) - (name timestamp) - (class (idref: 65)) - (lower 0) - (type (primitive: Number)))) - (package (idref: 1)) - (superClass (idref: 59))) - (EMOF.Class (id: 59) - (name Reference) - (ownedAttribute - (EMOF.Property (id: 58) - (name activation) - (class (idref: 59)) - (isDerived true) - (lower 0) - (opposite (idref: 57)) - (type (idref: 11)) - (upper *)) - (EMOF.MetaMeasurement (id: 75) - (name NORM) - (class (idref: 59)) - (description ) - (isReadOnly true) - (longName 'Number of received messages') - (type (primitive: Number)))) - (package (idref: 1)) - (superClass (idref: 7))) - (EMOF.Class (id: 68) - (name Instance) - (ownedAttribute - (EMOF.Property (id: 67) - (name alias) - (class (idref: 68)) - (isDerived true) - (lower 0) - (opposite (idref: 66)) - (type (idref: 65)) - (upper *)) - (EMOF.Property (id: 76) - (name name) - (class (idref: 68)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 77) - (name instanceOf) - (class (idref: 68)) - (lower 0) - (opposite (idref: 78)) - (type (idref: 79))) - (EMOF.MetaMeasurement (id: 80) - (name NORF) - (class (idref: 68)) - (description 'The number of features in which this instance is referenced') - (isReadOnly true) - (longName 'Number of referencing features') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 81) - (name TO) - (class (idref: 68)) - (description 'Trace in which the instance was created') - (isReadOnly true) - (longName 'Trace in which the instance was created') - (type (primitive: Number)))) - (package (idref: 1)) - (superClass (idref: 59))) - (EMOF.Class (id: 62) - (name ArgumentAlias) - (package (idref: 1)) - (superClass (idref: 65))) - (EMOF.Class (id: 82) - (name TraceEntityAssociation) - (ownedAttribute - (EMOF.Property (id: 83) - (name trace) - (class (idref: 82)) - (lower 0) - (type (idref: 8))) - (EMOF.MetaMeasurement (id: 84) - (name wRel) - (class (idref: 82)) - (description 'the relevence of an entity for a trace') - (isReadOnly true) - (longName 'relevence (Wilde)') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 85) - (name FA) - (class (idref: 82)) - (description 'relevance of a entity with respect to the traces in the model') - (isReadOnly true) - (longName 'Feature Affinity') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 86) - (name aRel) - (class (idref: 82)) - (description 'the relevence of a entity for a trace (normalized)') - (isReadOnly true) - (longName 'relevence (Antoniol)') - (type (primitive: Number)))) - (package (idref: 1)) - (superClass (idref: 7))) - (EMOF.Class (id: 87) - (name AliasGroup) - (package (idref: 1)) - (superClass (idref: 88))) - (EMOF.Class (id: 89) - (name ActivationGroup) - (package (idref: 1)) - (superClass (idref: 88))) - (EMOF.Class (id: 90) - (name TraceGroup) - (ownedOperation - (EMOF.MetaAction (id: 91) - (name inspectFilterFCLevelAsk) - (category 'Trace filtering') - (class (idref: 90))) - (EMOF.MetaAction (id: 92) - (name inspectFilterAwayEmptySelectors) - (category 'Trace filtering') - (class (idref: 90))) - (EMOF.MetaAction (id: 93) - (name inspectFilterAwayHighGroupFC) - (category 'Trace filtering') - (class (idref: 90))) - (EMOF.MetaAction (id: 94) - (name openTimePlot) - (category 'Time Signal') - (class (idref: 90))) - (EMOF.MetaAction (id: 95) - (name openTimePlotHTMLWriterStream) - (category 'Time Signal') - (class (idref: 90))) - (EMOF.MetaAction (id: 96) - (name openTimePlotAsk) - (category 'Time Signal') - (class (idref: 90))) - (EMOF.MetaAction (id: 97) - (name inspectFilteredGroup) - (category 'Trace filtering') - (class (idref: 90))) - (EMOF.MetaAction (id: 98) - (name openTimePlotLayerColorPlus) - (category 'Time Signal') - (class (idref: 90))) - (EMOF.MetaAction (id: 99) - (name openColoredPlot) - (category 'Time Signal') - (class (idref: 90))) - (EMOF.MetaAction (id: 100) - (name openTimePlotLayerColor) - (category 'Time Signal') - (class (idref: 90))) - (EMOF.MetaAction (id: 101) - (name inspectFilterAwayHighGroupFCClasses) - (category 'Trace filtering') - (class (idref: 90))) - (EMOF.MetaAction (id: 102) - (name openSingleFeaturePlot) - (category 'Time Signal') - (class (idref: 90))) - (EMOF.MetaAction (id: 103) - (name openFCPlot) - (category 'Time Signal') - (class (idref: 90)))) - (package (idref: 1)) - (superClass (idref: 88))) - (EMOF.Class (id: 104) - (name Return) - (ownedAttribute - (EMOF.Property (id: 105) - (name instanceId) - (class (idref: 104)) - (type (primitive: String)))) - (package (idref: 1)) - (superClass (idref: 2))) - (EMOF.Class (id: 106) - (name TempAlias) - (package (idref: 1)) - (superClass (idref: 65))) - (EMOF.Class (id: 107) - (name FieldReadAlias) - (package (idref: 1)) - (superClass (idref: 65))) - (EMOF.Class (id: 108) - (name GlobalReadAlias) - (package (idref: 1)) - (superClass (idref: 65))) - (EMOF.Class (id: 109) - (name HistoricalAlias) - (ownedAttribute - (EMOF.Property (id: 110) - (name predecessor) - (class (idref: 109)) - (lower 0) - (opposite (idref: 111)) - (type (idref: 109))) - (EMOF.Property (id: 111) - (name successor) - (class (idref: 109)) - (isDerived true) - (lower 0) - (opposite (idref: 110)) - (type (idref: 109)))) - (package (idref: 1)) - (superClass (idref: 65))) - (EMOF.Class (id: 112) - (name ReturnAlias) - (package (idref: 1)) - (superClass (idref: 65))) - (EMOF.Class (id: 113) - (name FieldAlias) - (ownedOperation - (EMOF.MetaNavigation (id: 114) - (name targetAttribute) - (class (idref: 113)) - (longName Attribute))) - (package (idref: 1)) - (superClass (idref: 109))) - (EMOF.Class (id: 115) - (name GlobalAlias) - (package (idref: 1)) - (superClass (idref: 109))) - (EMOF.Class (id: 116) - (name TracePackageAssociation) - (ownedAttribute - (EMOF.Property (id: 117) - (name tracepackageassociation) - (class (idref: 116)) - (isDerived true) - (lower 0) - (type (idref: 116)) - (upper *))) - (package (idref: 1)) - (superClass (idref: 82))) - (EMOF.Class (id: 118) - (name TraceClassAssociation) - (ownedAttribute - (EMOF.Property (id: 119) - (name trace) - (class (idref: 118)) - (lower 0) - (type (idref: 8))) - (EMOF.Property (id: 120) - (name entity) - (class (idref: 118)) - (lower 0) - (type (idref: 79))) - (EMOF.MetaMeasurement (id: 121) - (name Dedication) - (class (idref: 118)) - (description 'percentage of class dedicated to a feature') - (isReadOnly true) - (longName 'percentage of class dedicated to a feature') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 122) - (name NORCOther) - (class (idref: 118)) - (description 'The number of references to Classes in other traces') - (isReadOnly true) - (longName 'Number of References to Classes in other traces') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 123) - (name NORC) - (class (idref: 118)) - (description 'The number of references to Classes in a trace') - (isReadOnly true) - (longName 'Number of References to Classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 124) - (name Concentration) - (class (idref: 118)) - (description 'percentage of feature in a class') - (isReadOnly true) - (longName 'percentage of feature in a class') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 125) - (name touchedClass) - (class (idref: 118)) - (longName 'Touched class')) - (EMOF.MetaNavigation (id: 126) - (name containingTrace) - (class (idref: 118)) - (longName 'Containing trace'))) - (package (idref: 1)) - (superClass (idref: 82))) - (EMOF.Class (id: 127) - (name TraceMethodAssociation) - (ownedAttribute - (EMOF.Property (id: 128) - (name tracemethodassociation) - (class (idref: 127)) - (isDerived true) - (lower 0) - (type (idref: 127)) - (upper *)) - (EMOF.Property (id: 129) - (name entity) - (class (idref: 127)) - (lower 0) - (type (idref: 56))) - (EMOF.MetaMeasurement (id: 130) - (name NORMOther) - (class (idref: 127)) - (description 'The number of references to Methods in other traces') - (isReadOnly true) - (longName 'Number of References to Methods in other traces') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 131) - (name NORM) - (class (idref: 127)) - (description 'The number of references to Methods in a trace') - (isReadOnly true) - (longName 'Number of References to Methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 132) - (name FM) - (class (idref: 127)) - (description 'characterization of a method with respect to the traces in the model') - (isReadOnly true) - (longName 'feature characterization') - (type (primitive: Number)))) - (package (idref: 1)) - (superClass (idref: 82))))) -(EMOF.Package (id: 133) - (name FAMIX) - (ownedType - (EMOF.Class (id: 134) - (name ModelRoot) - (ownedAttribute - (EMOF.Property (id: 135) - (name stub) - (class (idref: 134)) - (lower 0) - (type (primitive: Boolean)))) - (package (idref: 133)) - (superClass (idref: 7))) - (EMOF.Class (id: 56) - (name Method) - (ownedAttribute - (EMOF.Property (id: 2000) - (name returnType) - (lower 0) - (type (idref: 79))) - (EMOF.Property (id: 2002) - (name parameter) - (lower 0) - (upper *) - (type (idref: 415))) - (EMOF.Property (id: 136) - (name activation) - (class (idref: 56)) - (lower 0) - (opposite (idref: 55)) - (type (idref: 11)) - (upper *)) - (EMOF.Property (id: 137) - (name hasClassScope) - (class (idref: 56)) - (lower 0) - (type (primitive: Boolean))) - (EMOF.Property (id: 138) - (name source) - (class (idref: 56)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 139) - (name belongsTo) - (class (idref: 56)) - (isComposite true) - (lower 0) - (opposite (idref: 140)) - (type (idref: 79))) - (EMOF.Property (id: 141) - (name category) - (class (idref: 56)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 142) - (name isAbstract) - (class (idref: 56)) - (isDerived true) - (type (primitive: Boolean))) - (EMOF.Property (id: 143) - (name kind) - (class (idref: 56)) - (type (primitive: String))) - (EMOF.Property (id: 144) - (name isConstructor) - (class (idref: 56)) - (isDerived true) - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 145) - (name isGetter) - (class (idref: 56)) - (isReadOnly true) - (longName isGetter) - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 146) - (name isSetter) - (class (idref: 56)) - (isReadOnly true) - (longName isSetter) - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 147) - (name isInternalImplementation) - (class (idref: 56)) - (description 'Public Interface Layer Method') - (isReadOnly true) - (longName 'Public Interface Layer Method') - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 148) - (name HDUPLINES) - (class (idref: 56)) - (description 'The number of lines of code duplicated in hierarchy') - (isReadOnly true) - (longName 'Number of lines of code duplicated in hierarchy') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 149) - (name NOActivations) - (class (idref: 56)) - (description ) - (isReadOnly true) - (longName 'Number of activations') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 150) - (name overriden) - (class (idref: 56)) - (description 'The method is overrinded in a sub class') - (isReadOnly true) - (longName 'Method overriden') - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 151) - (name NIJSPI) - (class (idref: 56)) - (description 'The number of invocations from JSP Pages') - (isReadOnly true) - (longName 'Number of invocations from JSP Pages') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 152) - (name overriding) - (class (idref: 56)) - (description 'The method is overrinding a method defined in a super class') - (isReadOnly true) - (longName 'Overriding method') - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 153) - (name isInitializer) - (class (idref: 56)) - (description 'Initialization Layer Method') - (isReadOnly true) - (longName 'Initialization Layer Method') - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 154) - (name MHNL) - (class (idref: 56)) - (description 'The nesting level in the hierarchy') - (isReadOnly true) - (longName 'Method hierarchy nesting level') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 155) - (name FM) - (class (idref: 56)) - (description 'characterization of a method with respect to the traces in the model') - (isReadOnly true) - (longName 'feature characterization') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 156) - (name IDUPLINES) - (class (idref: 56)) - (description 'The number of lines of code duplicated internally') - (isReadOnly true) - (longName 'Number of lines of code duplicated internally') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 157) - (name isPublicInterface) - (class (idref: 56)) - (description 'Public Interface Layer Method') - (isReadOnly true) - (longName 'Public Interface Layer Method') - (type (primitive: Boolean))) - (EMOF.MetaMeasurement (id: 158) - (name EDUPLINES) - (class (idref: 56)) - (description 'The number of lines of code duplicated externally') - (isReadOnly true) - (longName 'Number of lines of code duplicated externally') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 159) - (name browseSource) - (category main) - (class (idref: 56))) - (EMOF.MetaExpression (id: 160) - (name intensiveCouplingExpressionForJava) - (class (idref: 56))) - (EMOF.MetaExpression (id: 161) - (name featureEnvyExpressionForJava) - (class (idref: 56))) - (EMOF.MetaExpression (id: 162) - (name dispersedCouplingExpressionForJava) - (class (idref: 56))) - (EMOF.MetaExpression (id: 163) - (name shotgunSurgeryExpressionForJava) - (class (idref: 56))) - (EMOF.MetaExpression (id: 164) - (name brainMethodExpressionForJava) - (class (idref: 56))) - (EMOF.MetaNavigation (id: 165) - (name parentClassGroup) - (class (idref: 56)) - (longName 'Parent class'))) - (package (idref: 133)) - (superClass (idref: 166))) - (EMOF.Class (id: 166) - (name AbstractBehaviouralEntity) - (ownedAttribute - (EMOF.Property (id: 167) - (name access) - (class (idref: 166)) - (isDerived true) - (lower 0) - (opposite (idref: 168)) - (type (idref: 169)) - (upper *)) - (EMOF.Property (id: 170) - (name outgoingInvocation) - (class (idref: 166)) - (isDerived true) - (lower 0) - (opposite (idref: 171)) - (type (idref: 172)) - (upper *)) - (EMOF.Property (id: 173) - (name packagedIn) - (class (idref: 166)) - (lower 0) - (type (idref: 174))) - (EMOF.Property (id: 175) - (name accessControlQualifier) - (class (idref: 166)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 176) - (name incomingJspInvocation) - (class (idref: 166)) - (isDerived true) - (lower 0) - (opposite (idref: 177)) - (type (idref: 178)) - (upper *)) - (EMOF.Property (id: 179) - (name incomingInvocation) - (class (idref: 166)) - (isDerived true) - (lower 0) - (opposite (idref: 180)) - (type (idref: 172)) - (upper *)) - (EMOF.Property (id: 181) - (name signature) - (class (idref: 166)) - (lower 0) - (type (primitive: String))) - (EMOF.MetaMeasurement (id: 182) - (name LOC) - (class (idref: 166)) - (description 'The number of lines of code in a method') - (isReadOnly true) - (longName 'Lines of code') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 183) - (name CYCLO) - (class (idref: 166)) - (description 'Actually this impl has an error, please use CYCLO2!!!') - (isReadOnly true) - (longName 'Cyclomatic complexity (has error!)') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 184) - (name NOP) - (class (idref: 166)) - (description 'The number of parameters in a method') - (isReadOnly true) - (longName 'Number of parameters') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 185) - (name NOCmts) - (class (idref: 166)) - (description 'The number of comments') - (isReadOnly true) - (longName 'Number of comments') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 186) - (name NMAA) - (class (idref: 166)) - (description 'The number of accesses from a method') - (isReadOnly true) - (longName 'Number of accesses') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 187) - (name CC) - (class (idref: 166)) - (description 'Number of distinct classes that contain methods that call the current method') - (isReadOnly true) - (longName 'Changing classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 188) - (name NOCond) - (class (idref: 166)) - (description 'The number of conditionals in a method') - (isReadOnly true) - (longName 'Number of conditionals') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 189) - (name FANIN) - (class (idref: 166)) - (description 'Number of calling classes') - (isReadOnly true) - (longName FANIN) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 190) - (name NOS) - (class (idref: 166)) - (description 'The number of statements in a method') - (isReadOnly true) - (longName 'Number of statements') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 191) - (name CM) - (class (idref: 166)) - (description 'Number of distinct methods that call the current method') - (isReadOnly true) - (longName 'Changing methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 192) - (name FANOUT) - (class (idref: 166)) - (description 'Number of called classes') - (isReadOnly true) - (longName FANOUT) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 193) - (name 'CYCLO2') - (class (idref: 166)) - (description 'The number of linear-independent paths through a method.') - (isReadOnly true) - (longName 'Cyclomatic complexity') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 194) - (name NI) - (class (idref: 166)) - (description 'The number of invocations in a method') - (isReadOnly true) - (longName 'Number of invocations') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 195) - (name MSG) - (class (idref: 166)) - (description 'The number of message from a method') - (isReadOnly true) - (longName 'Number of message sends') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 196) - (name allAccesses) - (class (idref: 166)) - (longName Accesses)) - (EMOF.MetaNavigation (id: 197) - (name incomingInvocationsGroup) - (class (idref: 166)) - (longName 'Incoming invocations')) - (EMOF.MetaNavigation (id: 198) - (name outgoingAccessesGroup) - (class (idref: 166)) - (longName Accesses)) - (EMOF.MetaNavigation (id: 199) - (name formalParametersGroup) - (class (idref: 166)) - (longName 'Formal parameters')) - (EMOF.MetaNavigation (id: 200) - (name localVariablesGroup) - (class (idref: 166)) - (longName 'Local variables')) - (EMOF.MetaNavigation (id: 201) - (name outgoingInvocationsGroup) - (class (idref: 166)) - (longName 'All outgoing invocations'))) - (package (idref: 133)) - (superClass (idref: 202))) - (EMOF.Class (id: 202) - (name AbstractNamedEntity) - (ownedAttribute - (EMOF.Property (id: 342) - (name accessedByList) - (class (idref: 202)) - (isDerived true) - (lower 0) - (opposite (idref: 207)) - (type (idref: 169)) - (upper *)) - (EMOF.Property (id: 203) - (name name) - (class (idref: 202)) - (lower 0) - (type (primitive: String))) - (EMOF.MetaMeasurement (id: 204) - (name NL) - (class (idref: 202)) - (description 'The number of characters in the name') - (isReadOnly true) - (longName 'Name length') - (type (primitive: Number)))) - (package (idref: 133)) - (superClass (idref: 205))) - (EMOF.Class (id: 205) - (name AbstractObject) - (ownedAttribute - (EMOF.Property (id: 206) - (name sourceAnchor) - (class (idref: 205)) - (lower 0) - (type (primitive: String)))) - (package (idref: 133)) - (superClass (idref: 134))) - (EMOF.Class (id: 169) - (name Access) - (ownedAttribute - (EMOF.Property (id: 207) - (name accesses) - (class (idref: 169)) - (lower 0) - (opposite (idref: 342)) - (type (idref: 202))) - (EMOF.Property (id: 208) - (name readWriteAccess) - (class (idref: 169)) - (lower 0) - (type (primitive: Boolean))) - (EMOF.Property (id: 168) - (name accessedIn) - (class (idref: 169)) - (lower 0) - (opposite (idref: 167)) - (type (idref: 166)))) - (ownedOperation - (EMOF.MetaNavigation (id: 209) - (name accessedVariable) - (class (idref: 169)) - (longName 'Accessed variable')) - (EMOF.MetaNavigation (id: 210) - (name accessingBehaviour) - (class (idref: 169)) - (longName 'Accessing behaviour entity'))) - (package (idref: 133)) - (superClass (idref: 211))) - (EMOF.Class (id: 1000) - (name JSPAccess) - (ownedAttribute - (EMOF.Property (id: 1001) - (name accesses) - (class (idref: 1000)) - (type (idref: 202))) - (EMOF.Property (id: 1004) - (name accessedIn) - (class (idref: 1000)) - (type (idref: 353)))) - (ownedOperation - (EMOF.MetaNavigation (id: 1002) - (name accessedVariable) - (class (idref: 1000)) - (longName 'Accessed variable')) - (EMOF.MetaNavigation (id: 1003) - (name accessingBehaviour) - (class (idref: 1000)) - (longName 'Accessing behaviour entity'))) - (package (idref: 133)) - (superClass (idref: 211)) - ) - (EMOF.Class (id: 211) - (name AbstractAssociation) - (package (idref: 133)) - (superClass (idref: 205))) - (EMOF.Class (id: 172) - (name Invocation) - (ownedAttribute - (EMOF.Property (id: 2001) - (name receivingType) - (lower 0) - (type (idref: 79))) - (EMOF.Property (id: 171) - (name invokedBy) - (class (idref: 172)) - (lower 0) - (opposite (idref: 170)) - (type (idref: 166))) - (EMOF.Property (id: 180) - (name candidate) - (class (idref: 172)) - (lower 0) - (opposite (idref: 179)) - (type (idref: 166)) - (upper *)) - (EMOF.Property (id: 212) - (name receivingVariable) - (class (idref: 172)) - (lower 0) - (type (idref: 205))) - (EMOF.Property (id: 213) - (name invokes) - (class (idref: 172)) - (lower 0) - (type (primitive: String)))) - (ownedOperation - (EMOF.MetaNavigation (id: 214) - (name invokedCandidates) - (class (idref: 172)) - (longName 'Invoked behaviour')) - (EMOF.MetaNavigation (id: 215) - (name invokingBehaviour) - (class (idref: 172)) - (longName 'Invoking Behaviour'))) - (package (idref: 133)) - (superClass (idref: 211))) - (EMOF.Class (id: 174) - (name Package) - (ownedAttribute - (EMOF.Property (id: 216) - (name extendedClass) - (class (idref: 174)) - (lower 0) - (type (idref: 79)) - (upper *)) - (EMOF.Property (id: 217) - (name definedClass) - (class (idref: 174)) - (isDerived true) - (lower 0) - (opposite (idref: 218)) - (type (idref: 79)) - (upper *)) - (EMOF.Property (id: 219) - (name packagedIn) - (class (idref: 174)) - (isComposite true) - (lower 0) - (type (idref: 174))) - (EMOF.MetaMeasurement (id: 220) - (name LOC) - (class (idref: 174)) - (isReadOnly true) - (longName LOC) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 221) - (name TLOC) - (class (idref: 174)) - (isReadOnly true) - (longName TLOC) - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 222) - (name viewPackageBrowser) - (category Mondrian) - (class (idref: 174))) - (EMOF.MetaNavigation (id: 223) - (name parentPackage) - (class (idref: 174)) - (longName 'Containing package')) - (EMOF.MetaNavigation (id: 224) - (name definedClassesGroup) - (class (idref: 174)) - (longName 'Defined classes')) - (EMOF.MetaNavigation (id: 225) - (name extendedClassesGroup) - (class (idref: 174)) - (longName 'Extended classes')) - (EMOF.MetaNavigation (id: 226) - (name childPackages) - (class (idref: 174)) - (longName 'Child packages'))) - (package (idref: 133)) - (superClass (idref: 202))) - (EMOF.Class (id: 79) - (name Class) - (ownedAttribute - "//NOTE move accessedByList up to AbstractNamedEntity" - (EMOF.Property (id: 140) - (name method) - (class (idref: 79)) - (isDerived true) - (lower 0) - (opposite (idref: 139)) - (type (idref: 56)) - (upper *)) - (EMOF.Property (id: 218) - (name packagedIn) - (class (idref: 79)) - (isComposite true) - (lower 0) - (opposite (idref: 217)) - (type (idref: 174))) - (EMOF.Property (id: 228) - (name interfaceSignature) - (class (idref: 79)) - (lower 0) - (type (primitive: String)) - (upper *)) - (EMOF.Property (id: 229) - (name isInterface) - (class (idref: 79)) - (type (primitive: Boolean))) - (EMOF.Property (id: 230) - (name attribute) - (class (idref: 79)) - (isDerived true) - (lower 0) - (opposite (idref: 231)) - (type (idref: 232)) - (upper *)) - (EMOF.Property (id: 233) - (name belongsTo) - (class (idref: 79)) - (isComposite true) - (lower 0) - (opposite (idref: 234)) - (type (idref: 235))) - (EMOF.Property (id: 78) - (name instance) - (class (idref: 79)) - (isDerived true) - (lower 0) - (opposite (idref: 77)) - (type (idref: 68)) - (upper *)) - (EMOF.Property (id: 236) - (name isAbstract) - (class (idref: 79)) - (type (primitive: Boolean))) - (EMOF.Property (id: 237) - (name outgoingInheritance) - (class (idref: 79)) - (isDerived true) - (lower 0) - (opposite (idref: 241)) "//NOTE bug fixed, was refering to super instead of subclass" - (type (idref: 239)) - (upper *)) - (EMOF.Property (id: 240) - (name incomingInheritance) - (class (idref: 79)) - (isDerived true) - (lower 0) - (opposite (idref: 238)) "//NOTE bug fixed, was refering to sub instead of superclass" - (type (idref: 239)) - (upper *)) - (EMOF.MetaMeasurement (id: 242) - (name IDUPLINES) - (class (idref: 79)) - (description 'The number of duplicated lines of code internally') - (isReadOnly true) - (longName 'Number of duplicated lines of code internally') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 243) - (name WLOC) - (class (idref: 79)) - (description 'The number of lines of code in a class') - (isReadOnly true) - (longName 'Number of lines of code') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 244) - (name NOInstances) - (class (idref: 79)) - (description 'number of instances in the model') - (isReadOnly true) - (longName 'Number of instances') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 245) - (name NOAM) - (class (idref: 79)) - (description 'The number of accessor methods in a class') - (isReadOnly true) - (longName 'Number of accesor methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 246) - (name WNOCmts) - (class (idref: 79)) - (description 'The number of comments in a class') - (isReadOnly true) - (longName 'Number of comments') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 247) - (name NMI) - (class (idref: 79)) - (description 'The number of methods in a class inherited from super classes') - (isReadOnly true) - (longName 'Number of methods inherited') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 248) - (name NME) - (class (idref: 79)) - (description 'The number of method extensions in a class') - (isReadOnly true) - (longName 'Number of method extensions') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 249) - (name NOPAplusNOAM) - (class (idref: 79)) - (description 'The number of public attributes plus the number of accessor methods') - (isReadOnly true) - (longName 'Number of revealed attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 250) - (name FANIN) - (class (idref: 79)) - (description 'Number of calling classes') - (isReadOnly true) - (longName FANIN) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 251) - (name NOM) - (class (idref: 79)) - (description 'The number of methods in a class') - (isReadOnly true) - (longName 'Number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 252) - (name NAI) - (class (idref: 79)) - (description 'The number of attributes in a class inherited from super classes') - (isReadOnly true) - (longName 'Number of attributes inherited') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 253) - (name WNOS) - (class (idref: 79)) - (description 'The number of statements in a class') - (isReadOnly true) - (longName 'Number of statements') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 254) - (name WOC) - (class (idref: 79)) - (description 'Weight of a class') - (isReadOnly true) - (longName 'Weight of a class') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 255) - (name WIM) - (class (idref: 79)) - (description 'The number of methods of a class included the inherited ones') - (isReadOnly true) - (longName 'Weighted Number of Methods (recursively)') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 256) - (name PriA) - (class (idref: 79)) - (description 'The number of private attributes in a class') - (isReadOnly true) - (longName 'Number of private attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 257) - (name WMC) - (class (idref: 79)) - (description 'The sum of the complexity in a class') - (isReadOnly true) - (longName 'Weighted method count') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 258) - (name PriM) - (class (idref: 79)) - (description 'The number of private methods in a class') - (isReadOnly true) - (longName 'Number of private methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 259) - (name ATFD) - (class (idref: 79)) - (description 'Number of accesses to foreign data') - (isReadOnly true) - (longName 'Number of accesses to foreign data') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 260) - (name NMO) - (class (idref: 79)) - (description 'The number of methods in a class overriden with respect to super classes') - (isReadOnly true) - (longName 'Number of methods overriden') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 261) - (name NOMP) - (class (idref: 79)) - (description 'The number of method protocols in a class') - (isReadOnly true) - (longName 'Number of method protocols') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 262) - (name ProA) - (class (idref: 79)) - (description 'The number of protected attributes in a class') - (isReadOnly true) - (longName 'Number of protected attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 263) - (name FANOUT) - (class (idref: 79)) - (description 'Number of called classes') - (isReadOnly true) - (longName FANOUT) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 264) - (name PubM) - (class (idref: 79)) - (description 'The number of public methods in a class') - (isReadOnly true) - (longName 'Number of public methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 265) - (name HNL) - (class (idref: 79)) - (description 'The nesting of a class inside the hierarchy') - (isReadOnly true) - (longName 'Hierarchy nesting level') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 266) - (name FA) - (class (idref: 79)) - (description 'relevance of a class with respect to the traces in the model') - (isReadOnly true) - (longName 'Feature Affinity') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 267) - (name NMA) - (class (idref: 79)) - (description 'The number of methods in a class added with respect to super classes') - (isReadOnly true) - (longName 'Number of methods added') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 268) - (name ProM) - (class (idref: 79)) - (description 'The number of protected methods in a class') - (isReadOnly true) - (longName 'Number of protected methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 269) - (name NOA) - (class (idref: 79)) - (description 'The number of attributes in the class') - (isReadOnly true) - (longName 'Number of Attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 270) - (name WNOC) - (class (idref: 79)) - (description 'The total number of subclasses of a class') - (isReadOnly true) - (longName 'Total number of children (recursively)') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 271) - (name NOC) - (class (idref: 79)) - (description 'The number of subclasses of a class') - (isReadOnly true) - (longName 'Number of children') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 272) - (name WMSG) - (class (idref: 79)) - (description 'The number of message sends from a class') - (isReadOnly true) - (longName 'Number of message sends') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 273) - (name NOPA) - (class (idref: 79)) - (description 'The number of public attributes in a class') - (isReadOnly true) - (longName 'Number of public attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 274) - (name NC) - (class (idref: 79)) - (description 'The number of constructor methods in a class') - (isReadOnly true) - (longName 'Number of constructor methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 275) - (name AbsM) - (class (idref: 79)) - (description 'The number of abstract methods in the class') - (isReadOnly true) - (longName 'Number of abstract methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 276) - (name TCC) - (class (idref: 79)) - (description 'Tight class cohesion of a class') - (isReadOnly true) - (longName 'Tight class cohesion') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 277) - (name NOPa) - (class (idref: 79)) - (description 'The number of superclasses') - (isReadOnly true) - (longName 'Number of parents') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 278) - (name browseSource) - (category main) - (class (idref: 79))) - (EMOF.MetaAction (id: 279) - (name viewBlueprint) - (category Mondrian) - (class (idref: 79))) - (EMOF.MetaAction (id: 280) - (name viewCollaboration) - (category Mondrian) - (class (idref: 79))) - (EMOF.MetaExpression (id: 281) - (name godClassExpressionForJava) - (class (idref: 79))) - (EMOF.MetaExpression (id: 282) - (name dataClassExpressionForJava) - (class (idref: 79))) - (EMOF.MetaExpression (id: 283) - (name godClassExpressionForSmalltalk) - (class (idref: 79))) - (EMOF.MetaExpression (id: 284) - (name brainClassExpressionForJava) - (class (idref: 79))) - (EMOF.MetaExpression (id: 285) - (name innerClassExpression) - (class (idref: 79))) - (EMOF.MetaExpression (id: 286) - (name interfaceExpression) - (class (idref: 79))) - (EMOF.MetaExpression (id: 287) - (name abstractExpression) - (class (idref: 79))) - (EMOF.MetaExpression (id: 288) - (name hierarchyRootExpression) - (class (idref: 79))) - (EMOF.MetaExpression (id: 289) - (name modelClassExpression) - (class (idref: 79))) - (EMOF.MetaExpression (id: 290) - (name instanceClassExpression) - (class (idref: 79))) - (EMOF.MetaNavigation (id: 291) - (name methodsGroup) - (class (idref: 79)) - (longName Methods)) - (EMOF.MetaNavigation (id: 292) - (name subclassHierarchyGroup) - (class (idref: 79)) - (longName Subclasses)) - (EMOF.MetaNavigation (id: 293) - (name incomingInvocationsGroup) - (class (idref: 79)) - (longName 'Incoming invocations')) - (EMOF.MetaNavigation (id: 294) - (name containingPackage) - (class (idref: 79)) - (longName 'Containing package')) - (EMOF.MetaNavigation (id: 295) - (name invokedClassesGroup) - (class (idref: 79)) - (longName 'Invoked classes')) - (EMOF.MetaNavigation (id: 296) - (name attributesGroup) - (class (idref: 79)) - (longName Attributes)) - (EMOF.MetaNavigation (id: 297) - (name incomingAccessesGroup) - (class (idref: 79)) - (longName 'Incoming accesses')) - (EMOF.MetaNavigation (id: 298) - (name withSubclassHierarchyGroup) - (class (idref: 79)) - (longName 'All subclasses')) - (EMOF.MetaNavigation (id: 299) - (name withSuperclassHierarchyGroup) - (class (idref: 79)) - (longName 'With superclasses')) - (EMOF.MetaNavigation (id: 300) - (name outgoingAccessesGroup) - (class (idref: 79)) - (longName 'Outgoing accesses')) - (EMOF.MetaNavigation (id: 301) - (name superclassHierarchyGroup) - (class (idref: 79)) - (longName Superclasses)) - (EMOF.MetaNavigation (id: 302) - (name outgoingInvocationsGroup) - (class (idref: 79)) - (longName 'Outgoing invocations'))) - (package (idref: 133)) - (superClass (idref: 303))) - (EMOF.Class (id: 303) - (name AbstractScopable) - (ownedAttribute - (EMOF.Property (id: 304) - (name belongsTo) - (class (idref: 303)) - (isComposite true) - (lower 0) - (type (idref: 235)))) - (ownedOperation - (EMOF.MetaNavigation (id: 305) - (name container) - (class (idref: 303)) - (longName 'Containing namespace'))) - (package (idref: 133)) - (superClass (idref: 202))) - (EMOF.Class (id: 235) - (name Namespace) - (ownedAttribute - (EMOF.Property (id: 306) - (name namespace) - (class (idref: 235)) - (isDerived true) - (lower 0) - (opposite (idref: 307)) - (type (idref: 235)) - (upper *)) - (EMOF.Property (id: 307) - (name belongsTo) - (class (idref: 235)) - (isComposite true) - (lower 0) - (opposite (idref: 306)) - (type (idref: 235))) - (EMOF.Property (id: 308) - (name function) - (class (idref: 235)) - (isDerived true) - (lower 0) - (opposite (idref: 309)) - (type (idref: 310)) - (upper *)) - (EMOF.Property (id: 234) - (name class) - (class (idref: 235)) - (isDerived true) - (lower 0) - (opposite (idref: 233)) - (type (idref: 79)) - (upper *)) - (EMOF.Property (id: 311) - (name packagedIn) - (class (idref: 235)) - (isComposite true) - (lower 0) - (type (idref: 174))) - (EMOF.MetaMeasurement (id: 312) - (name LOC) - (class (idref: 235)) - (description 'The number of lines of code in a namespace') - (isReadOnly true) - (longName 'Number of lines of code') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 313) - (name NOICls) - (class (idref: 235)) - (description 'The number of non interfaces classes in a namespace') - (isReadOnly true) - (longName 'Number of non interfaces classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 314) - (name RNOM) - (class (idref: 235)) - (description 'The recursive number of methods in a namespace') - (isReadOnly true) - (longName 'Recursive number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 315) - (name RLOC) - (class (idref: 235)) - (description 'The number of recursive number of lines of code in a namespace') - (isReadOnly true) - (longName 'Number of recursive lines of code') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 316) - (name NOM) - (class (idref: 235)) - (description 'The number of methods in a namespace') - (isReadOnly true) - (longName 'Number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 317) - (name NOCls) - (class (idref: 235)) - (description 'The number of classes in a namespace') - (isReadOnly true) - (longName 'Number of classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 318) - (name RNOCls) - (class (idref: 235)) - (description 'The recursive number of classes in a namespace') - (isReadOnly true) - (longName 'Recursive number of classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 319) - (name NOA) - (class (idref: 235)) - (description 'The number of attributes in a namespace') - (isReadOnly true) - (longName 'Number of attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 320) - (name NOMIJSP) - (class (idref: 235)) - (description 'The number of methods in a namespace') - (isReadOnly true) - (longName 'Number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 321) - (name NORICls) - (class (idref: 235)) - (description 'The number of recursive non interfaces classes in a namespace') - (isReadOnly true) - (longName 'Number of recursive non interfaces classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 322) - (name RNOA) - (class (idref: 235)) - (description 'The recursive number of attributes in a namespace') - (isReadOnly true) - (longName 'Recursive number of attributes') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 323) - (name viewClassSystemComplexity) - (category Mondrian) - (class (idref: 235))) - (EMOF.MetaAction (id: 324) - (name viewUmlWithMethodsAndAttributes) - (category Mondrian) - (class (idref: 235))) - (EMOF.MetaAction (id: 325) - (name viewAllClassSystemComplexity) - (category Mondrian) - (class (idref: 235))) - (EMOF.MetaExpression (id: 326) - (name recursivelyContainsStubClassesExpression) - (class (idref: 235))) - (EMOF.MetaExpression (id: 327) - (name containsStubClassesExpression) - (class (idref: 235))) - (EMOF.MetaNavigation (id: 328) - (name classGroup) - (class (idref: 235)) - (longName 'All classes')) - (EMOF.MetaNavigation (id: 329) - (name functionGroup) - (class (idref: 235)) - (longName 'All functions')) - (EMOF.MetaNavigation (id: 330) - (name allFunctions) - (class (idref: 235)) - (longName 'All functions')) - (EMOF.MetaNavigation (id: 331) - (name recursiveClassesGroup) - (class (idref: 235)) - (longName 'All recursive classes')) - (EMOF.MetaNavigation (id: 332) - (name recursiveFunctionsGroup) - (class (idref: 235)) - (longName 'All recursive functions'))) - (package (idref: 133)) - (superClass (idref: 303))) - (EMOF.Class (id: 310) - (name Function) - (ownedAttribute - (EMOF.Property (id: 309) - (name belongsTo) - (class (idref: 310)) - (lower 0) - (opposite (idref: 308)) - (type (idref: 235)))) - (package (idref: 133)) - (superClass (idref: 166))) - (EMOF.Class (id: 232) - (name Attribute) - (ownedAttribute - (EMOF.Property (id: 231) - (name belongsTo) - (class (idref: 232)) - (isComposite true) - (lower 0) - (opposite (idref: 230)) - (type (idref: 79))) - (EMOF.Property (id: 333) - (name hasClassScope) - (class (idref: 232)) - (lower 0) - (type (primitive: Boolean))) - (EMOF.Property (id: 334) - (name accessControlQualifier) - (class (idref: 232)) - (lower 0) - (type (primitive: String))) - (EMOF.MetaMeasurement (id: 335) - (name NGA) - (class (idref: 232)) - (description 'The number of accesses to an attribute from outside the class defining the attribute.') - (isReadOnly true) - (longName 'Number of global accesses') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 336) - (name NAA) - (class (idref: 232)) - (description 'The number of accesses of an attribute.') - (isReadOnly true) - (longName 'Number of accesses') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 337) - (name NCM) - (class (idref: 232)) - (description 'The number of classes from which at least one method accesses an attribute.') - (isReadOnly true) - (longName 'Number of accessing classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 338) - (name NLA) - (class (idref: 232)) - (description 'The number of accesses to an attribute from inside the class defining the attribute.') - (isReadOnly true) - (longName 'Number of local accesses') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 339) - (name AHNL) - (class (idref: 232)) - (description 'The hierarchy nesting level of an attribute.') - (isReadOnly true) - (longName 'Attribute hierarchy nesting level') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 340) - (name NM) - (class (idref: 232)) - (description 'The number of methods accessing an attribute.') - (isReadOnly true) - (longName 'Number of accessing methods') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 341) - (name parentClassGroup) - (class (idref: 232)) - (longName 'Parent class'))) - (package (idref: 133)) - (superClass (idref: 71))) - (EMOF.Class (id: 71) - (name AbstractStructuralEntity) - (ownedAttribute - "//NOTE pushed accessedByList up to AbstractNamedEntity" - (EMOF.Property (id: 343) - (name declaredType) - (class (idref: 71)) - (type (idref: 79))) - (EMOF.Property (id: 344) - (name declaredClass) - (class (idref: 71)) - (type (idref: 79))) - (EMOF.Property (id: 70) - (name hostedAlias) - (class (idref: 71)) - (isDerived true) - (lower 0) - (type (idref: 65)) - (upper *)) - (EMOF.MetaMeasurement (id: 345) - (name NOAcc) - (class (idref: 71)) - (description 'Total number of accesses') - (isReadOnly true) - (longName 'Number of accesses') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 346) - (name allAccessedByList) - (class (idref: 71)) - (longName 'Accessed in'))) - (package (idref: 133)) - (superClass (idref: 202))) - (EMOF.Class (id: 239) - (name InheritanceDefinition) - (ownedAttribute - (EMOF.Property (id: 238) - (name superclass) - (class (idref: 239)) - (lower 0) - (opposite (idref: 240)) - (type (idref: 79))) - (EMOF.Property (id: 347) - (name index) - (class (idref: 239)) - (type (primitive: Number))) - (EMOF.Property (id: 241) - (name subclass) - (class (idref: 239)) - (lower 0) - (opposite (idref: 237)) - (type (idref: 79))) - (EMOF.Property (id: 348) - (name accessControlQualifier) - (class (idref: 239)) - (type (primitive: String)))) - (ownedOperation - (EMOF.MetaNavigation (id: 349) - (name subClass) - (class (idref: 239)) - (longName Subclass)) - (EMOF.MetaNavigation (id: 350) - (name superClass) - (class (idref: 239)) - (longName Superclass))) - (package (idref: 133)) - (superClass (idref: 211))) - (EMOF.Class (id: 178) - (name JSPInvocation) - (ownedAttribute - (EMOF.Property (id: 351) - (name invokedBy) - (class (idref: 178)) - (lower 0) - (opposite (idref: 352)) - (type (idref: 353))) - (EMOF.Property (id: 177) - (name candidate) - (class (idref: 178)) - (lower 0) - (opposite (idref: 176)) - (type (idref: 166)) - (upper *)) - (EMOF.Property (id: 354) - (name invokes) - (class (idref: 178)) - (lower 0) - (type (primitive: String)))) - (ownedOperation - (EMOF.MetaNavigation (id: 1100) - (name invokedCandidates) - (class (idref: 178)) - (longName 'Invoked behaviour')) - (EMOF.MetaNavigation (id: 1101) - (name invokingBehaviour) - (class (idref: 178)) - (longName 'Invoking Behaviour'))) - (package (idref: 133)) - (superClass (idref: 211))) - (EMOF.Class (id: 353) - (name JSPPage) - (ownedAttribute - (EMOF.Property (id: 355) - (name filedIn) - (class (idref: 353)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 352) - (name outgoingJspInvocation) - (class (idref: 353)) - (isDerived true) - (lower 0) - (opposite (idref: 351)) - (type (idref: 178)) - (upper *)) - (EMOF.MetaMeasurement (id: 356) - (name NOJSPI) - (class (idref: 353)) - (description 'The number of invocations to methods from this JSP Page') - (isReadOnly true) - (longName 'Number of invocations to methods') - (type (primitive: Number)))) - (package (idref: 133)) - (superClass (idref: 202))) - (EMOF.Class (id: 357) - (name AbstractArgument) - (ownedAttribute - (EMOF.Property (id: 358) - (name isReceiver) - (class (idref: 357)) - (lower 0) - (type (primitive: Boolean))) - (EMOF.Property (id: 359) - (name position) - (class (idref: 357)) - (lower 0) - (type (primitive: Number)))) - (package (idref: 133)) - (superClass (idref: 205))) - (EMOF.Class (id: 360) - (name Literal) - (ownedAttribute - (EMOF.Property (id: 361) - (name content) - (class (idref: 360)) - (type (primitive: String))) - (EMOF.Property (id: 362) - (name occurrence) - (class (idref: 360)) - (lower 0) - (type (idref: 202)) - (upper *)) - (EMOF.MetaMeasurement (id: 363) - (name Len) - (class (idref: 360)) - (description 'Length of content string.') - (isReadOnly true) - (longName 'Length of content string.') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 364) - (name NOO) - (class (idref: 360)) - (isReadOnly true) - (longName 'Number of occurrences.') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 365) - (name occurrencesGroup) - (class (idref: 360)) - (longName Occurrences)) - (EMOF.MetaNavigation (id: 366) - (name modelOccurrencesGroup) - (class (idref: 360)) - (longName 'Occurrences in model'))) - (package (idref: 133)) - (superClass (idref: 205))) - (EMOF.Class (id: 367) - (name Comment) - (ownedAttribute - (EMOF.Property (id: 368) - (name belongsTo) - (class (idref: 367)) - (lower 0) - (type (idref: 134))) - (EMOF.Property (id: 369) - (name content) - (class (idref: 367)) - (lower 0) - (type (primitive: String)))) - (package (idref: 133)) - (superClass (idref: 205))) - (EMOF.Class (id: 370) - (name Include) - (ownedAttribute - (EMOF.Property (id: 371) - (name includedFile) - (class (idref: 370)) - (type (idref: 372))) - (EMOF.Property (id: 373) - (name includingFile) - (class (idref: 370)) - (type (idref: 372)))) - (package (idref: 133)) - (superClass (idref: 211))) - (EMOF.Class (id: 372) - (name File) - (ownedAttribute - (EMOF.Property (id: 374) - (name belongsTo) - (class (idref: 372)) - (lower 0) - (opposite (idref: 375)) - (type (idref: 376))) - (EMOF.MetaMeasurement (id: 377) - (name NoIC) - (class (idref: 372)) - (description 'The number of cloned fragments within the file') - (isReadOnly true) - (longName 'Number of Internal Clones') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 378) - (name ELOT) - (class (idref: 372)) - (description 'Number of empty lines of text') - (isReadOnly true) - (longName 'Empty lines of text') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 379) - (name NoIM) - (class (idref: 372)) - (description 'The number of original fragments duplicated internally') - (isReadOnly true) - (longName 'Number of Internal Multiplications') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 380) - (name NOCh) - (class (idref: 372)) - (description 'Number of characters in a file.') - (isReadOnly true) - (longName 'Number of characters') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 381) - (name ACh) - (class (idref: 372)) - (description 'Average number of characters per lline of text in a file.') - (isReadOnly true) - (longName 'Average number of characters') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 382) - (name NoDF) - (class (idref: 372)) - (description 'The number of distinct files that contain fragments duplicated in this file') - (isReadOnly true) - (longName 'Number of Files with Fragments Duplicated Here') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 383) - (name LOT) - (class (idref: 372)) - (description 'Number of lines of text which are not empty in a file ') - (isReadOnly true) - (longName 'Not empty lines of text') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 384) - (name KBYT) - (class (idref: 372)) - (description 'Number of kilo bytes in a file.') - (isReadOnly true) - (longName 'Number of kilo bytes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 385) - (name NoID) - (class (idref: 372)) - (description 'The number of pairs of duplicate fragments within the file') - (isReadOnly true) - (longName 'Number of Internal Duplications') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 386) - (name BYT) - (class (idref: 372)) - (description 'Number of bytes in a file.') - (isReadOnly true) - (longName 'Number of bytes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 387) - (name NoED) - (class (idref: 372)) - (description 'The number of pairs of duplicate fragments between this file and other files') - (isReadOnly true) - (longName 'Number of External Duplications') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 388) - (name NoEC) - (class (idref: 372)) - (description 'The number of fragments in this file cloned in other files') - (isReadOnly true) - (longName 'Number of External Clones') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 389) - (name TLOT) - (class (idref: 372)) - (description 'Number of lines of text') - (isReadOnly true) - (longName 'Total lines of text') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 390) - (name browseSource) - (category main) - (class (idref: 372))) - (EMOF.MetaAction (id: 391) - (name browseDupSource) - (category main) - (class (idref: 372))) - (EMOF.MetaNavigation (id: 392) - (name allInternalDuplications) - (class (idref: 372)) - (longName 'All internal duplications')) - (EMOF.MetaNavigation (id: 393) - (name allExternalDuplications) - (class (idref: 372)) - (longName 'All external duplications')) - (EMOF.MetaNavigation (id: 394) - (name allInternalMultiplications) - (class (idref: 372)) - (longName 'All internal multiplications')) - (EMOF.MetaNavigation (id: 395) - (name allExternalFiles) - (class (idref: 372)) - (longName 'All files with fragments duplicated here'))) - (package (idref: 133)) - (superClass (idref: 396))) - (EMOF.Class (id: 396) - (name AbstractFile) - (package (idref: 133)) - (superClass (idref: 202))) - (EMOF.Class (id: 376) - (name Folder) - (ownedAttribute - (EMOF.Property (id: 397) - (name belongsTo) - (class (idref: 376)) - (lower 0) - (opposite (idref: 398)) - (type (idref: 376))) - (EMOF.Property (id: 398) - (name folder) - (class (idref: 376)) - (isDerived true) - (lower 0) - (opposite (idref: 397)) - (type (idref: 376)) - (upper *)) - (EMOF.Property (id: 375) - (name file) - (class (idref: 376)) - (isDerived true) - (lower 0) - (opposite (idref: 374)) - (type (idref: 372)) - (upper *)) - (EMOF.MetaMeasurement (id: 399) - (name LOT) - (class (idref: 376)) - (description 'Number of lines of text which are not empty in a file ') - (isReadOnly true) - (longName 'Not empty lines of text') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 400) - (name foldersGroup) - (class (idref: 376)) - (longName Folders)) - (EMOF.MetaNavigation (id: 401) - (name filesGroup) - (class (idref: 376)) - (longName Files))) - (package (idref: 133)) - (superClass (idref: 396))) - (EMOF.Class (id: 402) - (name JSPAttribute) - (ownedAttribute - (EMOF.Property (id: 403) - (name belongsTo) - (class (idref: 402)) - (lower 0) - (type (idref: 353))) - (EMOF.Property (id: 404) - (name declaredType) - (class (idref: 402)) - (lower 0) - (type (idref: 79))) - (EMOF.Property (id: 405) - (name declaredClass) - (class (idref: 402)) - (lower 0) - (type (idref: 79)))) - (package (idref: 133)) - (superClass (idref: 202))) - (EMOF.Class (id: 406) - (name UnknownVariable) - (ownedAttribute - (EMOF.Property (id: 407) - (name usedInContext) - (class (idref: 406)) - (lower 0) - (type (idref: 166)))) - (package (idref: 133)) - (superClass (idref: 71))) - (EMOF.Class (id: 408) - (name AbstractLocalEntity) - (ownedAttribute - (EMOF.Property (id: 409) - (name belongsTo) - (class (idref: 408)) - (isComposite true) - (lower 0) - (type (idref: 166)))) - (package (idref: 133)) - (superClass (idref: 71))) - (EMOF.Class (id: 410) - (name GlobalVariable) - (ownedAttribute - (EMOF.Property (id: 411) - (name belongsTo) - (class (idref: 410)) - (lower 0) - (type (idref: 235)))) - (ownedOperation - (EMOF.MetaNavigation (id: 412) - (name containingNamespace) - (class (idref: 410)) - (longName 'Containing namespace'))) - (package (idref: 133)) - (superClass (idref: 71))) - (EMOF.Class (id: 413) - (name ImplicitVariable) - (ownedAttribute - (EMOF.Property (id: 414) - (name belongsTo) - (class (idref: 413)) - (lower 0) - (type (idref: 79)))) - (package (idref: 133)) - (superClass (idref: 71))) - (EMOF.Class (id: 415) - (name FormalParameter) - (ownedAttribute - (EMOF.Property (id: 416) - (name position) - (class (idref: 415)) - (lower 0) - (type (primitive: Number)))) - (package (idref: 133)) - (superClass (idref: 408))) - (EMOF.Class (id: 417) - (name LocalVariable) - (package (idref: 133)) - (superClass (idref: 408))) - (EMOF.Class (id: 418) - (name ExpressionArgument) - (package (idref: 133)) - (superClass (idref: 357))) - (EMOF.Class (id: 419) - (name AccessArgument) - (package (idref: 133)) - (superClass (idref: 357))))) -(EMOF.Package (id: 420) - (name Moose) - (ownedType - (EMOF.Class (id: 421) - (name Element) - (ownedOperation - (EMOF.MetaAction (id: 422) - (name openEntityInspector) - (category main) - (class (idref: 421))) - (EMOF.MetaAction (id: 423) - (name inspectEntity) - (category main) - (class (idref: 421))) - (EMOF.MetaAction (id: 424) - (name openMondrianEditor) - (category main) - (class (idref: 421)))) - (package (idref: 420))) - (EMOF.Class (id: 7) - (name AbstractEntity) - (ownedAttribute - (EMOF.Property (id: 425) - (name mooseModel) - (class (idref: 7)) - (isDerived true) - (lower 0) - (opposite (idref: 426)) - (type (idref: 427)))) - (ownedOperation - (EMOF.MetaAction (id: 428) - (name openSearchingMondrianEditor) - (category main) - (class (idref: 7))) - (EMOF.MetaExpression (id: 429) - (name uniqueNameMatchesExpression) - (class (idref: 7)))) - (package (idref: 420)) - (superClass (idref: 421))) - (EMOF.Class (id: 427) - (name Model) - (ownedAttribute - (EMOF.Property (id: 430) - (name sourceLanguage) - (class (idref: 427)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 431) - (name name) - (class (idref: 427)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 426) - (name entity) - (class (idref: 427)) - (lower 0) - (opposite (idref: 425)) - (type (idref: 7)) - (upper *)) - (EMOF.MetaMeasurement (id: 434) - (name NOCls) - (class (idref: 427)) - (description 'The total number of model (non stub) classes') - (isReadOnly true) - (longName 'Number of model (non stub) classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 435) - (name NOM) - (class (idref: 427)) - (description 'The total number of model (non stub) methods') - (isReadOnly true) - (longName 'Number of model (non stub) methods') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 436) - (name createTraceAssociations) - (category main) - (class (idref: 427))) - (EMOF.MetaAction (id: 437) - (name importSmalltalkAndScrapeTests) - (category main) - (class (idref: 427))) - (EMOF.MetaAction (id: 438) - (name importChroniaCVSLog) - (category 'Import / Export') - (class (idref: 427))) - (EMOF.MetaAction (id: 439) - (name showClassCorrelation) - (category 'Hapax Analysis') - (class (idref: 427))) - (EMOF.MetaAction (id: 440) - (name rename) - (category Utilities) - (class (idref: 427))) - (EMOF.MetaAction (id: 441) - (name importMSEFromFile) - (category 'Import / Export') - (class (idref: 427))) - (EMOF.MetaAction (id: 442) - (name importSmalltalk) - (category 'Import / Export') - (class (idref: 427))) - (EMOF.MetaAction (id: 443) - (name showDistributionMap) - (category 'Hapax Analysis') - (class (idref: 427))) - (EMOF.MetaAction (id: 444) - (name importFileSystem) - (category 'Import / Export') - (class (idref: 427))) - (EMOF.MetaAction (id: 445) - (name exportMSEToFile) - (category 'Import / Export') - (class (idref: 427))) - (EMOF.MetaAction (id: 446) - (name initializeAllMofDescriptions) - (category Utilities) - (class (idref: 427))) - (EMOF.MetaAction (id: 447) - (name importMSEFromFolder) - (category 'Import / Export') - (class (idref: 427))) - (EMOF.MetaNavigation (id: 448) - (name allJSPInvocations) - (class (idref: 427)) - (longName 'All JSP Invocations')) - (EMOF.MetaNavigation (id: 449) - (name allAliases) - (class (idref: 427)) - (longName 'All aliases')) - (EMOF.MetaNavigation (id: 450) - (name allChroniaFileVersions) - (class (idref: 427)) - (longName 'All Chronia file versions')) - (EMOF.MetaNavigation (id: 451) - (name allClasses) - (class (idref: 427)) - (longName 'All classes')) - (EMOF.MetaNavigation (id: 452) - (name allApplicationActivations) - (class (idref: 427)) - (longName 'All application activations')) - (EMOF.MetaNavigation (id: 453) - (name allInheritanceDefinitions) - (class (idref: 427)) - (longName 'All inheritances')) - (EMOF.MetaNavigation (id: 454) - (name allFolders) - (class (idref: 427)) - (longName 'All folders')) - (EMOF.MetaNavigation (id: 455) - (name allModelClasses) - (class (idref: 427)) - (longName 'All system classes')) - (EMOF.MetaNavigation (id: 456) - (name allMultiplications) - (class (idref: 427)) - (longName 'All multiplications')) - (EMOF.MetaNavigation (id: 457) - (name allImplicitVariables) - (class (idref: 427)) - (longName 'All implicit variables')) - (EMOF.MetaNavigation (id: 458) - (name allChroniaAuthors) - (class (idref: 427)) - (longName 'All Chronia authors')) - (EMOF.MetaNavigation (id: 459) - (name allNamedAliases) - (class (idref: 427)) - (longName 'All named aliases')) - (EMOF.MetaNavigation (id: 460) - (name allInvocations) - (class (idref: 427)) - (longName 'All invocations')) - (EMOF.MetaNavigation (id: 461) - (name allModels) - (class (idref: 427)) - (longName 'All models')) - (EMOF.MetaNavigation (id: 462) - (name allDuplications) - (class (idref: 427)) - (longName 'All duplications')) - (EMOF.MetaNavigation (id: 463) - (name allNamespaces) - (class (idref: 427)) - (longName 'All namesapces')) - (EMOF.MetaNavigation (id: 464) - (name allFunctions) - (class (idref: 427)) - (longName 'All functions')) - (EMOF.MetaNavigation (id: 465) - (name allPackages) - (class (idref: 427)) - (longName 'All packages')) - (EMOF.MetaNavigation (id: 466) - (name allAccesses) - (class (idref: 427)) - (longName 'All accesses')) - (EMOF.MetaNavigation (id: 467) - (name allChroniaProjects) - (class (idref: 427)) - (longName 'All Chronia projects')) - (EMOF.MetaNavigation (id: 468) - (name allTracePackageAssociations) - (class (idref: 427)) - (longName 'All trace package associations')) - (EMOF.MetaNavigation (id: 469) - (name allArgumentAliases) - (class (idref: 427)) - (longName 'All argument aliases')) - (EMOF.MetaNavigation (id: 470) - (name hapaxModelNavigation) - (class (idref: 427)) - (longName 'Hapax model')) - (EMOF.MetaNavigation (id: 471) - (name allMethods) - (class (idref: 427)) - (longName 'All methods')) - (EMOF.MetaNavigation (id: 472) - (name allTraceClassAssociations) - (class (idref: 427)) - (longName 'All trace class associations')) - (EMOF.MetaNavigation (id: 473) - (name allActivations) - (class (idref: 427)) - (longName 'All activations')) - (EMOF.MetaNavigation (id: 474) - (name allChroniaCommits) - (class (idref: 427)) - (longName 'All Chronia commits')) - (EMOF.MetaNavigation (id: 475) - (name allInstances) - (class (idref: 427)) - (longName 'All instances')) - (EMOF.MetaNavigation (id: 476) - (name allAttributes) - (class (idref: 427)) - (longName 'All attributes')) - (EMOF.MetaNavigation (id: 477) - (name allComments) - (class (idref: 427)) - (longName 'All comments')) - (EMOF.MetaNavigation (id: 478) - (name allGlobalVariables) - (class (idref: 427)) - (longName 'All global variables')) - (EMOF.MetaNavigation (id: 479) - (name allTraceMethodAssociations) - (class (idref: 427)) - (longName 'All trace method associations')) - (EMOF.MetaNavigation (id: 480) - (name formalParametersGroup) - (class (idref: 427)) - (longName 'All parameters')) - (EMOF.MetaNavigation (id: 481) - (name allJSPPages) - (class (idref: 427)) - (longName 'All JSP Pages')) - (EMOF.MetaNavigation (id: 482) - (name localVariablesGroup) - (class (idref: 427)) - (longName 'All local variables')) - (EMOF.MetaNavigation (id: 483) - (name allTraces) - (class (idref: 427)) - (longName 'All traces')) - (EMOF.MetaNavigation (id: 484) - (name allFiles) - (class (idref: 427)) - (longName 'All files')) - (EMOF.MetaNavigation (id: 485) - (name allJSPAttributes) - (class (idref: 427)) - (longName 'All JSP Attributes')) - (EMOF.MetaNavigation (id: 486) - (name allLiterals) - (class (idref: 427)) - (longName 'All literals')) - (EMOF.MetaNavigation (id: 487) - (name allChroniaFileHistories) - (class (idref: 427)) - (longName 'All Chronia file histories')) - (EMOF.MetaNavigation (id: 488) - (name allModelHistories) - (class (idref: 427)) - (longName 'All model histories')) - (EMOF.MetaNavigation (id: 489) - (name allUnknownVariables) - (class (idref: 427)) - (longName 'All unknown variables')) - (EMOF.BlockNavigation (id: 490) - (name 'Any Moose.Model') - (class (idref: 427)) - (longName 'Any Moose.Model'))) - (package (idref: 420)) - (superClass (idref: 7))) - (EMOF.Class (id: 491) - (name AbstractGroup) - (ownedAttribute - (EMOF.Property (id: 492) - (name entity) - (class (idref: 491)) - (lower 0) - (type (idref: 493)) - (upper *)) - (EMOF.MetaMeasurement (id: 494) - (name numberOfItems) - (class (idref: 491)) - (isReadOnly true) - (longName numberOfItems) - (type (primitive: Number)))) - (package (idref: 420)) - (superClass (idref: 7))) - (EMOF.Class (id: 495) - (name AbstractHistory) - (ownedAttribute - (EMOF.MetaMeasurement (id: 496) - (name AGE) - (class (idref: 495)) - (description 'Age of the history') - (isReadOnly true) - (longName Age) - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 497) - (name viewSimpleEvolutionMatrix) - (category Mondrian) - (class (idref: 495)))) - (package (idref: 420)) - (superClass (idref: 7))) - (EMOF.Class (id: 498) - (name AbstractVersion) - (package (idref: 420)) - (superClass (idref: 7))) - (EMOF.Class (id: 499) - (name StatelessEntity) - (package (idref: 420)) - (superClass (idref: 7))) - (EMOF.Class (id: 88) - (name Group) - (ownedOperation - (EMOF.MetaAction (id: 500) - (name rename) - (category main) - (class (idref: 88))) - (EMOF.MetaAction (id: 501) - (name openGroupEditor) - (category main) - (class (idref: 88))) - (EMOF.MetaAction (id: 502) - (name viewNameOccurences) - (category Mondrian) - (class (idref: 88)))) - (package (idref: 420)) - (superClass (idref: 491))) - (EMOF.Class (id: 503) - (name FolderGroup) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 504) - (name PackageGroup) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 505) - (name NamespaceGroup) - (ownedOperation - (EMOF.MetaAction (id: 506) - (name viewNamespaceHierarchy) - (category Mondrian) - (class (idref: 505))) - (EMOF.MetaAction (id: 507) - (name viewNamespaceComplexity) - (category Mondrian) - (class (idref: 505)))) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 508) - (name JSPPageGroup) - (ownedOperation - (EMOF.MetaAction (id: 509) - (name viewLinksToClasses) - (category Mondrian) - (class (idref: 508)))) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 510) - (name ClassGroup) - (ownedAttribute - (EMOF.MetaMeasurement (id: 511) - (name 'A_NOM') - (class (idref: 510)) - (description 'Average number of methods per class') - (isReadOnly true) - (longName 'Average number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 512) - (name 'A_NOA') - (class (idref: 510)) - (description 'Average number of attributes per class') - (isReadOnly true) - (longName 'Average number of attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 513) - (name 'S_WLOC') - (class (idref: 510)) - (description 'Total number of lines of code') - (isReadOnly true) - (longName 'Total number of lines of code') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 514) - (name 'A_WLOC') - (class (idref: 510)) - (description 'Average number of lines of code per class') - (isReadOnly true) - (longName 'Average number of lines of code') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 515) - (name 'A_WNOS') - (class (idref: 510)) - (description 'Average number of statements per class') - (isReadOnly true) - (longName 'Average number of statements') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 516) - (name viewMethodInvocation) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 517) - (name viewUmlWithMacro) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 518) - (name viewMetricView) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 519) - (name viewMethodsDistributionMap) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 520) - (name viewSystemComplexity) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 521) - (name viewUmlWithShape) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 522) - (name viewSystemComplexityWithCalledClasses) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 523) - (name viewScreenFillingSystemComplexity) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 524) - (name viewSpacedSystemComplexity) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 525) - (name viewSystemComplexityWithSuperBlueprints) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 526) - (name viewTreeMap) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 527) - (name viewBarChart) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 528) - (name computeDuplication) - (category SmallDude) - (class (idref: 510))) - (EMOF.MetaAction (id: 529) - (name viewDuplicationComplexity) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 530) - (name viewSystemComplexityAsGraph) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 531) - (name viewSimpleUml) - (category Mondrian) - (class (idref: 510))) - (EMOF.MetaAction (id: 532) - (name viewBlueprintComplexity) - (category Mondrian) - (class (idref: 510)))) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 533) - (name FileGroup) - (ownedOperation - (EMOF.MetaAction (id: 534) - (name computeDuplicationOnCVSAnnotated) - (category SmallDude) - (class (idref: 533))) - (EMOF.MetaAction (id: 535) - (name computeDuplication) - (category SmallDude) - (class (idref: 533))) - (EMOF.MetaAction (id: 536) - (name 'computeDuplicationOnCVSAnnotated_HighPrec') - (category SmallDude) - (class (idref: 533))) - (EMOF.MetaNavigation (id: 537) - (name allMultiplications) - (class (idref: 533)) - (longName 'All multiplications'))) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 538) - (name MethodGroup) - (ownedAttribute - (EMOF.MetaMeasurement (id: 539) - (name 'A_NOP') - (class (idref: 538)) - (description 'Average number of parameters per methods') - (isReadOnly true) - (longName 'Average number of parameters') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 540) - (name 'A_LOC') - (class (idref: 538)) - (description 'Average number of lines of code per methods') - (isReadOnly true) - (longName 'Average number of lines of code') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 541) - (name 'A_NI') - (class (idref: 538)) - (description 'Average number of invocations per methods') - (isReadOnly true) - (longName 'Average number of invocations') - (type (primitive: Number)))) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 542) - (name CoChangePattern) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 543) - (name HistoryGroup) - (ownedOperation - (EMOF.MetaAction (id: 544) - (name viewSimpleEvolutionMatrix) - (category Mondrian) - (class (idref: 543)))) - (package (idref: 420)) - (superClass (idref: 88))) - (EMOF.Class (id: 545) - (name NamespaceHistoryGroup) - (package (idref: 420)) - (superClass (idref: 543))) - (EMOF.Class (id: 546) - (name ClassHistoryGroup) - (ownedOperation - (EMOF.MetaAction (id: 547) - (name viewHierarchyEvolution) - (category Mondrian) - (class (idref: 546))) - (EMOF.MetaAction (id: 548) - (name viewEvolutionMatrix) - (category Mondrian) - (class (idref: 546)))) - (package (idref: 420)) - (superClass (idref: 543))) - (EMOF.Class (id: 549) - (name MethodHistoryGroup) - (package (idref: 420)) - (superClass (idref: 543))) - (EMOF.Class (id: 550) - (name InvocationHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 551) - (name AccessHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 552) - (name ClassHierarchyHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 553) - (name CoChangeHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 554) - (name AttributeHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 555) - (name FileHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 556) - (name ClassHistory) - (ownedAttribute - (EMOF.MetaMeasurement (id: 557) - (name 'AE_NOM') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'All latest evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 558) - (name 'E_WNOSper5') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Evolution of number of statements') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 559) - (name 'R_WLOC') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Removed number of LOC') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 560) - (name 'E_NOA') - (class (idref: 556)) - (description 'The sum of the number of attribute added or removed in subsequent versions') - (isReadOnly true) - (longName 'Evolution of number of attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 561) - (name 'A_WLOC') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Added number of LOC') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 562) - (name 'AEE_NOM') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'All earliest evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 563) - (name 'S_NOM') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Stability of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 564) - (name 'E_WNOS') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Evolution of number of statements') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 565) - (name 'LE_NOM') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Latest evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 566) - (name 'EE_NOM') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Earliest evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 567) - (name 'A_WNOS') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Added number of statements') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 568) - (name 'S_NOA') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Stability of number of attributes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 569) - (name 'E_NOM') - (class (idref: 556)) - (description 'The sum of the number of methods added or removed in subsequent versions') - (isReadOnly true) - (longName 'Evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 570) - (name 'ALE_NOM') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'All latest evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 571) - (name 'Last_NOM') - (class (idref: 556)) - (description 'The last number of methods') - (isReadOnly true) - (longName 'Evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 572) - (name 'R_WNOS') - (class (idref: 556)) - (description ) - (isReadOnly true) - (longName 'Removed number of statements') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 573) - (name 'E_WLOC') - (class (idref: 556)) - (description 'The sum of the number of lines of code added or removed in subsequent versions') - (isReadOnly true) - (longName 'Evolution of number of lines of code') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaExpression (id: 574) - (name removedHistoryExpression) - (class (idref: 556))) - (EMOF.MetaExpression (id: 575) - (name lateBornHistoryExpression) - (class (idref: 556)))) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 576) - (name MethodHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 577) - (name ModelHistory) - (ownedOperation - (EMOF.MetaNavigation (id: 578) - (name allClassHistories) - (class (idref: 577)) - (longName 'All class histories')) - (EMOF.MetaNavigation (id: 579) - (name allNamespaceHistories) - (class (idref: 577)) - (longName 'All namespace histories')) - (EMOF.MetaNavigation (id: 580) - (name allPackageHistories) - (class (idref: 577)) - (longName 'All package histories')) - (EMOF.MetaNavigation (id: 581) - (name allAttributeHistories) - (class (idref: 577)) - (longName 'All attribute histories')) - (EMOF.MetaNavigation (id: 582) - (name allMethodHistories) - (class (idref: 577)) - (longName 'All method histories')) - (EMOF.MetaNavigation (id: 583) - (name allInheritanceDefinitionHistories) - (class (idref: 577)) - (longName 'All inheritance definition histories'))) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 584) - (name InheritanceDefinitionHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 585) - (name NamespaceHistory) - (ownedAttribute - (EMOF.MetaMeasurement (id: 586) - (name 'E_NOCls') - (class (idref: 585)) - (description 'The sum of the number of classes added or removed in subsequent versions') - (isReadOnly true) - (longName 'Evolution of number of classes') - (type (primitive: Number)))) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 587) - (name PackageHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 588) - (name FolderHistory) - (package (idref: 420)) - (superClass (idref: 495))) - (EMOF.Class (id: 589) - (name CoChangeVersion) - (package (idref: 420)) - (superClass (idref: 498))) - (EMOF.Class (id: 590) - (name EntityVersion) - (package (idref: 420)) - (superClass (idref: 498))) - (EMOF.Class (id: 591) - (name MethodVersion) - (ownedAttribute - (EMOF.MetaMeasurement (id: 592) - (name 'VE_CYCLO') - (class (idref: 591)) - (description 'Version addition of number of methods') - (isReadOnly true) - (longName 'Version addition of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 593) - (name 'VE_NOS') - (class (idref: 591)) - (description 'Version addition of number of methods') - (isReadOnly true) - (longName 'Version addition of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 594) - (name 'VA_CYCLO') - (class (idref: 591)) - (description 'Version addition of number of methods') - (isReadOnly true) - (longName 'Version addition of number of methods') - (type (primitive: Number)))) - (package (idref: 420)) - (superClass (idref: 590))) - (EMOF.Class (id: 595) - (name NamespaceVersion) - (ownedAttribute - (EMOF.MetaMeasurement (id: 596) - (name 'VE_NOCls') - (class (idref: 595)) - (description 'Version evolution of number of classes') - (isReadOnly true) - (longName 'Version evolution of number of classes') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 597) - (name 'VA_NOM') - (class (idref: 595)) - (description 'Version addition of number of methods') - (isReadOnly true) - (longName 'Version addition of number of methods') - (type (primitive: Number)))) - (package (idref: 420)) - (superClass (idref: 590))) - (EMOF.Class (id: 598) - (name ClassVersion) - (ownedAttribute - (EMOF.MetaMeasurement (id: 599) - (name 'VE_CYCLO') - (class (idref: 598)) - (description 'Version evolution of number of methods') - (isReadOnly true) - (longName 'Version evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 600) - (name 'VE_NOS') - (class (idref: 598)) - (description 'Version evolution of number of methods') - (isReadOnly true) - (longName 'Version evolution of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 601) - (name 'VA_NOM') - (class (idref: 598)) - (description 'Version addition of number of methods') - (isReadOnly true) - (longName 'Version addition of number of methods') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 602) - (name 'VE_NOM') - (class (idref: 598)) - (description 'Version evolution of number of methods') - (isReadOnly true) - (longName 'Version evolution of number of methods') - (type (primitive: Number)))) - (package (idref: 420)) - (superClass (idref: 590))))) -(EMOF.Package (id: 603) - (name Chronia) - (ownedType - (EMOF.PrimitiveType (id: 604) - (name Timestamp) - (decodeExpression (value: '[:t1 | Timestamp readFrom: t1]')) - (encodeExpression (value: ' -[:t1 :t2 | -[t1 isKindOf: Timestamp] assert. -t1 printOn: t2]')) - (package (idref: 603))) - (EMOF.Class (id: 605) - (name AbstractChroniaEntity) - (package (idref: 603)) - (superClass (idref: 7))) - (EMOF.Class (id: 606) - (name AbstractChroniaGroup) - (ownedOperation - (EMOF.MetaAction (id: 607) - (name openOwnershipMap) - (category OwnershipMap) - (class (idref: 606))) - (EMOF.MetaAction (id: 608) - (name openOwnershipMapClustered) - (category OwnershipMap) - (class (idref: 606)))) - (package (idref: 603)) - (superClass (idref: 88))) - (EMOF.Class (id: 609) - (name FileVersionGroup) - (package (idref: 603)) - (superClass (idref: 606))) - (EMOF.Class (id: 610) - (name FileHistoryGroup) - (ownedAttribute - (EMOF.MetaMeasurement (id: 611) - (name encapsulation) - (class (idref: 610)) - (description 'The encapsulation over all folders of the project') - (isReadOnly true) - (longName 'Encapsulation over all folders') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 612) - (name distribution) - (class (idref: 610)) - (description 'The distribution over all folders of the project') - (isReadOnly true) - (longName 'Distribution over all folders') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 613) - (name groupByAllFolders) - (class (idref: 610)) - (longName 'File histories grouped by folders')) - (EMOF.MetaNavigation (id: 614) - (name groupByFileType) - (class (idref: 610)) - (longName 'File histories grouped by file type')) - (EMOF.MetaNavigation (id: 615) - (name groupByParentFolder) - (class (idref: 610)) - (longName 'File histories grouped by parent folders'))) - (package (idref: 603)) - (superClass (idref: 606))) - (EMOF.Class (id: 616) - (name FileHistoryGroupGroup) - (ownedOperation - (EMOF.MetaAction (id: 617) - (name sortGroupsByPath) - (category Groups) - (class (idref: 616))) - (EMOF.MetaAction (id: 618) - (name sortGroupsBySize) - (category Groups) - (class (idref: 616)))) - (package (idref: 603)) - (superClass (idref: 606))) - (EMOF.Class (id: 619) - (name CommitGroup) - (package (idref: 603)) - (superClass (idref: 606))) - (EMOF.Class (id: 620) - (name Commit) - (ownedAttribute - (EMOF.Property (id: 621) - (name startTime) - (class (idref: 620)) - (lower 0) - (type (primitive: Chronia.Timestamp))) - (EMOF.Property (id: 622) - (name project) - (class (idref: 620)) - (lower 0) - (opposite (idref: 623)) - (type (idref: 624))) - (EMOF.Property (id: 625) - (name endTime) - (class (idref: 620)) - (lower 0) - (type (primitive: Chronia.Timestamp))) - (EMOF.Property (id: 626) - (name author) - (class (idref: 620)) - (isDerived true) - (lower 0) - (opposite (idref: 627)) - (type (idref: 628))) - (EMOF.MetaMeasurement (id: 629) - (name Tstart) - (class (idref: 620)) - (description 'The start time of this commit') - (isReadOnly true) - (longName 'start time of commit') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 630) - (name BC) - (class (idref: 620)) - (description 'Number of files that were added during this commit') - (isReadOnly true) - (longName 'birth count') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 631) - (name RC) - (class (idref: 620)) - (description 'Number of files that were readded (but previously deleted) during this commit') - (isReadOnly true) - (longName 'resurrection count') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 632) - (name DC) - (class (idref: 620)) - (description 'Number of files that were deleted during this commit') - (isReadOnly true) - (longName 'death count') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 633) - (name Tend) - (class (idref: 620)) - (description 'The end time of this commit') - (isReadOnly true) - (longName 'end time of commit') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 634) - (name NoFV) - (class (idref: 620)) - (description 'Total number of file versions of this commit') - (isReadOnly true) - (longName 'number of file versions') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 635) - (name Tdelta) - (class (idref: 620)) - (description 'How long this commit took in seconds') - (isReadOnly true) - (longName 'duration in seconds') - (type (primitive: Number)))) - (package (idref: 603)) - (superClass (idref: 605))) - (EMOF.Class (id: 624) - (name Project) - (ownedAttribute - (EMOF.Property (id: 636) - (name fileVersion) - (class (idref: 624)) - (isDerived true) - (lower 0) - (type (idref: 637)) - (upper *)) - (EMOF.Property (id: 638) - (name fileHistory) - (class (idref: 624)) - (lower 0) - (opposite (idref: 639)) - (type (idref: 640)) - (upper *)) - (EMOF.Property (id: 623) - (name commit) - (class (idref: 624)) - (lower 0) - (opposite (idref: 622)) - (type (idref: 620)) - (upper *)) - (EMOF.Property (id: 641) - (name author) - (class (idref: 624)) - (lower 0) - (opposite (idref: 642)) - (type (idref: 628)) - (upper *)) - (EMOF.MetaMeasurement (id: 643) - (name ProjectName) - (class (idref: 624)) - (description 'The name this project got when it was born') - (isReadOnly true) - (longName 'Name of this project') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 644) - (name 'p2080') - (class (idref: 624)) - (description 'proof whether the developers represent 20% of the authors') - (isReadOnly true) - (longName 'twenty eighty proof') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 645) - (name NoC) - (class (idref: 624)) - (description 'The number of commits that were made to this project') - (isReadOnly true) - (longName 'number of commits') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 646) - (name NoFH) - (class (idref: 624)) - (description 'Total number of file histories of this project') - (isReadOnly true) - (longName 'number of file histories') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 647) - (name NoA) - (class (idref: 624)) - (description 'Total number of authors that contributed to this project') - (isReadOnly true) - (longName 'Number of authors') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 648) - (name NoFV) - (class (idref: 624)) - (description 'Total number of file versions of this project') - (isReadOnly true) - (longName 'number of file versions') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 649) - (name NoD) - (class (idref: 624)) - (description 'The number of authors that introduced more than 80% of the code') - (isReadOnly true) - (longName 'number of developers') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 650) - (name openEvolutionRadar) - (category main) - (class (idref: 624)))) - (package (idref: 603)) - (superClass (idref: 605))) - (EMOF.Class (id: 637) - (name FileVersion) - (ownedAttribute - (EMOF.Property (id: 651) - (name basicFileVersion) - (class (idref: 637)) - (lower 0) - (type (idref: 652))) - (EMOF.Property (id: 653) - (name fileHistory) - (class (idref: 637)) - (isDerived true) - (lower 0) - (opposite (idref: 654)) - (type (idref: 640))) - (EMOF.Property (id: 655) - (name commit) - (class (idref: 637)) - (lower 0) - (type (idref: 620))) - (EMOF.MetaMeasurement (id: 656) - (name NoRL) - (class (idref: 637)) - (description 'Number of removed lines') - (isReadOnly true) - (longName 'Number of removed lines') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 657) - (name NoAL) - (class (idref: 637)) - (description 'Total number of added lines') - (isReadOnly true) - (longName 'Number of added lines') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 658) - (name Owner) - (class (idref: 637)) - (description 'The author that owns the most lines') - (isReadOnly true) - (longName 'owner of this version') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 659) - (name REV) - (class (idref: 637)) - (description 'revision number of this file version') - (isReadOnly true) - (longName 'Revision number') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 660) - (name NC) - (class (idref: 637)) - (description 'The new added lines compared to the previous version') - (isReadOnly true) - (longName 'New added content') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 661) - (name ChD) - (class (idref: 637)) - (description 'How "big" the change was') - (isReadOnly true) - (longName 'change density') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 662) - (name NoL) - (class (idref: 637)) - (description 'Total number of lines') - (isReadOnly true) - (longName 'Number of lines') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 663) - (name AN) - (class (idref: 637)) - (description 'Name of the author that commited this file version') - (isReadOnly true) - (longName 'author name') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaExpression (id: 664) - (name pathStartsWith) - (class (idref: 637))) - (EMOF.MetaExpression (id: 665) - (name pathEndsWith) - (class (idref: 637))) - (EMOF.MetaExpression (id: 666) - (name commitedBetween) - (class (idref: 637)))) - (package (idref: 603)) - (superClass (idref: 605))) - (EMOF.Class (id: 652) - (name CvsFileVersion) - (ownedAttribute - (EMOF.Property (id: 667) - (name stickyTag) - (class (idref: 652)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 668) - (name history) - (class (idref: 652)) - (lower 0) - (opposite (idref: 669)) - (type (idref: 670))) - (EMOF.Property (id: 671) - (name change) - (class (idref: 652)) - (lower 0) - (type (idref: 672))) - (EMOF.Property (id: 673) - (name lineSize) - (class (idref: 652)) - (lower 0) - (type (primitive: Number))) - (EMOF.Property (id: 674) - (name revision) - (class (idref: 652)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 675) - (name timestamp) - (class (idref: 652)) - (lower 0) - (type (idref: 676))) - (EMOF.Property (id: 677) - (name comment) - (class (idref: 652)) - (lower 0) - (type (idref: 678))) - (EMOF.Property (id: 679) - (name state) - (class (idref: 652)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 680) - (name author) - (class (idref: 652)) - (lower 0) - (type (primitive: String)))) - (package (idref: 603)) - (superClass (idref: 681))) - (EMOF.Class (id: 681) - (name CvsFile) - (package (idref: 603)) - (superClass (idref: 682))) - (EMOF.Class (id: 682) - (name CvsEntry) - (ownedAttribute - (EMOF.Property (id: 683) - (name path) - (class (idref: 682)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 684) - (name parent) - (class (idref: 682)) - (lower 0) - (type (idref: 685)))) - (package (idref: 603)) - (superClass (idref: 686))) - (EMOF.Class (id: 685) - (name CvsDirectory) - (ownedAttribute - (EMOF.Property (id: 687) - (name entry) - (class (idref: 685)) - (lower 0) - (type (idref: 682)) - (upper *))) - (package (idref: 603)) - (superClass (idref: 682))) - (EMOF.Class (id: 670) - (name CvsFileHistory) - (ownedAttribute - (EMOF.Property (id: 669) - (name version) - (class (idref: 670)) - (lower 0) - (opposite (idref: 668)) - (type (idref: 652)) - (upper *))) - (package (idref: 603)) - (superClass (idref: 681))) - (EMOF.Class (id: 672) - (name CvsFileChange) - (ownedAttribute - (EMOF.Property (id: 688) - (name addedLinesSize) - (class (idref: 672)) - (lower 0) - (type (primitive: Number))) - (EMOF.Property (id: 689) - (name removedLinesSize) - (class (idref: 672)) - (lower 0) - (type (primitive: Number)))) - (package (idref: 603)) - (superClass (idref: 686))) - (EMOF.Class (id: 640) - (name FileHistory) - (ownedAttribute - (EMOF.Property (id: 639) - (name project) - (class (idref: 640)) - (lower 0) - (opposite (idref: 638)) - (type (idref: 624))) - (EMOF.Property (id: 654) - (name fileVersion) - (class (idref: 640)) - (lower 0) - (opposite (idref: 653)) - (type (idref: 637)) - (upper *)) - (EMOF.MetaMeasurement (id: 690) - (name SoAL) - (class (idref: 640)) - (description 'Total number of added lines summed over all versions of this file history') - (isReadOnly true) - (longName 'Sum of added lines') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 691) - (name RC) - (class (idref: 640)) - (description 'Number of times this file was readded (but previously deleted) during its life') - (isReadOnly true) - (longName 'resurrection count') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 692) - (name NoFV) - (class (idref: 640)) - (description 'Total number of file versions of this file') - (isReadOnly true) - (longName 'number of file versions') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 693) - (name DC) - (class (idref: 640)) - (description 'Number of times this file was deleted during its life') - (isReadOnly true) - (longName 'death count') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 694) - (name Owner) - (class (idref: 640)) - (description 'The owner of the latest version') - (isReadOnly true) - (longName 'owner of this file history') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 695) - (name SoRL) - (class (idref: 640)) - (description 'Total number of removed lines summed over all versions of this file history') - (isReadOnly true) - (longName 'Sum of removed lines') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 696) - (name NoA) - (class (idref: 640)) - (description 'Total number of authors that contributed to this file') - (isReadOnly true) - (longName 'Number of authors') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaExpression (id: 697) - (name javaAndJspFiles) - (class (idref: 640)))) - (package (idref: 603)) - (superClass (idref: 605))) - (EMOF.Class (id: 628) - (name Author) - (ownedAttribute - (EMOF.Property (id: 698) - (name name) - (class (idref: 628)) - (lower 0) - (type (primitive: String))) - (EMOF.Property (id: 642) - (name project) - (class (idref: 628)) - (lower 0) - (opposite (idref: 641)) - (type (idref: 624))) - (EMOF.Property (id: 627) - (name commit) - (class (idref: 628)) - (lower 0) - (opposite (idref: 626)) - (type (idref: 620)) - (upper *)) - (EMOF.MetaMeasurement (id: 699) - (name AuthorName) - (class (idref: 628)) - (description 'The name of the author') - (isReadOnly true) - (longName 'author name') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 700) - (name EOF) - (class (idref: 628)) - (description 'The encapsulation of all files ever owned by this author over the whole project') - (isReadOnly true) - (longName 'encapsulation of owned files over system') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 701) - (name DOF) - (class (idref: 628)) - (description 'The distribution of all files ever owned by this author over the whole project') - (isReadOnly true) - (longName 'distribution of owned files over system') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 702) - (name ESOF) - (class (idref: 628)) - (description 'The encapsulation of all files this author is still owning at the project end') - (isReadOnly true) - (longName 'encapsulation of still owning files over system') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 703) - (name NSOF) - (class (idref: 628)) - (description 'The number of files this author is still owning') - (isReadOnly true) - (longName 'number of still owning files') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 704) - (name NoC) - (class (idref: 628)) - (description 'The number of commits this author has in this project') - (isReadOnly true) - (longName 'number of commits') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 705) - (name DTF) - (class (idref: 628)) - (description 'The distribution of all files ever touched by this author over the whole project') - (isReadOnly true) - (longName 'distribution of touched files over system') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 706) - (name NTF) - (class (idref: 628)) - (description 'The number of files this author has ever modified') - (isReadOnly true) - (longName 'number of touched files') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 707) - (name IoS) - (class (idref: 628)) - (description 'Total amount of content (~new lines) this author added to the system') - (isReadOnly true) - (longName 'impact on system') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 708) - (name NOF) - (class (idref: 628)) - (description 'The number of files this author has ever owned') - (isReadOnly true) - (longName 'number of owned files') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 709) - (name color) - (class (idref: 628)) - (description 'The name of the color that is used to colorize the commits of this author') - (isReadOnly true) - (longName 'name of the color') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 710) - (name DSOF) - (class (idref: 628)) - (description 'The distribution of all files this author is still owning at the project end') - (isReadOnly true) - (longName 'distribution of still owning files over system') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 711) - (name ETF) - (class (idref: 628)) - (description 'The encapsulation of all files ever touched by this author over the whole project') - (isReadOnly true) - (longName 'encapsulation of touched files over system') - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 712) - (name openTouchedFileHistories) - (category 'Open FileHistories') - (class (idref: 628))) - (EMOF.MetaAction (id: 713) - (name openStillOwningFileHistories) - (category 'Open FileHistories') - (class (idref: 628))) - (EMOF.MetaAction (id: 714) - (name openOwnedFileHistories) - (category 'Open FileHistories') - (class (idref: 628)))) - (package (idref: 603)) - (superClass (idref: 605))) - (EMOF.Class (id: 715) - (name FileHistoryProxy) - (package (idref: 603)) - (superClass (idref: 605))))) -(EMOF.Package (id: 716) - (name Smalltalk) - (nestedPackage - (EMOF.Package (id: 717) - (name Hapax) - (nestingPackage (idref: 716)) - (ownedType - (EMOF.Class (id: 718) - (name HapaxElement) - (package (idref: 717)) - (superClass (idref: 7))) - (EMOF.Class (id: 719) - (name TestDummy) - (package (idref: 717)) - (superClass (idref: 718))) - (EMOF.Class (id: 720) - (name Vocabulary) - (ownedOperation - (EMOF.MetaNavigation (id: 721) - (name allDocuments) - (class (idref: 720)) - (longName 'All documents')) - (EMOF.MetaNavigation (id: 722) - (name allTerms) - (class (idref: 720)) - (longName 'All terms'))) - (package (idref: 717)) - (superClass (idref: 718))) - (EMOF.Class (id: 723) - (name Term) - (package (idref: 717)) - (superClass (idref: 718))) - (EMOF.Class (id: 724) - (name Topic) - (package (idref: 717)) - (superClass (idref: 718))) - (EMOF.Class (id: 725) - (name SemanticIndex) - (package (idref: 717)) - (superClass (idref: 718))) - (EMOF.Class (id: 726) - (name HapaxModel) - (ownedOperation - (EMOF.MetaNavigation (id: 727) - (name terms) - (class (idref: 726)) - (longName 'All terms')) - (EMOF.MetaNavigation (id: 728) - (name vocabularies) - (class (idref: 726)) - (longName 'All vocabularies'))) - (package (idref: 717)) - (superClass (idref: 718))) - (EMOF.Class (id: 729) - (name TextFile) - (package (idref: 717)) - (superClass (idref: 718))) - (EMOF.Class (id: 730) - (name CategorizedVocabulary) - (package (idref: 717)) - (superClass (idref: 720))) - (EMOF.Class (id: 731) - (name SimpleVocabulary) - (package (idref: 717)) - (superClass (idref: 720))))) - (EMOF.Package (id: 732) - (name Core) - (nestingPackage (idref: 716)) - (ownedType - (EMOF.Class (id: 493) - (name Object) - (package (idref: 732))) - (EMOF.Class (id: 676) - (name Timestamp) - (package (idref: 732)) - (superClass (idref: 733))) - (EMOF.Class (id: 733) - (name Magnitude) - (package (idref: 732)) - (superClass (idref: 493))) - (EMOF.Class (id: 678) - (name Text) - (package (idref: 732)) - (superClass (idref: 734))) - (EMOF.Class (id: 734) - (name CharacterArray) - (package (idref: 732)) - (superClass (idref: 735))) - (EMOF.Class (id: 735) - (name ArrayedCollection) - (package (idref: 732)) - (superClass (idref: 736))) - (EMOF.Class (id: 736) - (name SequenceableCollection) - (package (idref: 732)) - (superClass (idref: 737))) - (EMOF.Class (id: 737) - (name Collection) - (package (idref: 732)) - (superClass (idref: 493))))) - (EMOF.Package (id: 738) - (name Dude) - (nestingPackage (idref: 716)) - (ownedType - (EMOF.Class (id: 739) - (name SourceCodeLine) - (ownedAttribute - (EMOF.MetaMeasurement (id: 740) - (name AGE) - (class (idref: 739)) - (description 'The number of days since this line was modified.') - (isReadOnly true) - (longName AgeOfLine) - (type (primitive: Number)))) - (package (idref: 738)) - (superClass (idref: 7))) - (EMOF.Class (id: 741) - (name SourceCodeFragment) - (package (idref: 738)) - (superClass (idref: 7))) - (EMOF.Class (id: 742) - (name Multiplication) - (ownedAttribute - (EMOF.MetaMeasurement (id: 743) - (name LOC) - (class (idref: 742)) - (description 'The number of distinct file fragments that have been cloned') - (isReadOnly true) - (longName 'Number of Clones') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 744) - (name NOsS) - (class (idref: 742)) - (description 'The number of developers contributing in all clones') - (isReadOnly true) - (longName NumberOfShotgunSurgeons) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 745) - (name NOF) - (class (idref: 742)) - (description 'The number of distinct files covered in this multiplication') - (isReadOnly true) - (longName 'Number of Files') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 746) - (name NOPl) - (class (idref: 742)) - (description 'The number of developers not contributing in the original') - (isReadOnly true) - (longName NumberOfPlagiators) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 747) - (name TSPAN) - (class (idref: 742)) - (description 'The number of days between the original and the most recent clone') - (isReadOnly true) - (longName TimeSpan) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 748) - (name NOCl) - (class (idref: 742)) - (description 'The number of distinct file fragments that have been cloned') - (isReadOnly true) - (longName 'Number of Clones') - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 749) - (name NODv) - (class (idref: 742)) - (description 'The number of developers contributing in this multiplicaiton') - (isReadOnly true) - (longName NumberOfDevelopers) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 750) - (name oAGE) - (class (idref: 742)) - (description 'The number of days since the writing of the first line in the original.') - (isReadOnly true) - (longName AgeOfTheOriginal) - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaAction (id: 751) - (name browseDuplicationText) - (category main) - (class (idref: 742))) - (EMOF.MetaAction (id: 752) - (name 'viewClones2') - (category main) - (class (idref: 742))) - (EMOF.MetaNavigation (id: 753) - (name allDuplications) - (class (idref: 742)) - (longName 'All Duplications of this multiplication')) - (EMOF.MetaNavigation (id: 754) - (name allDevelopers) - (class (idref: 742)) - (longName 'All Developers')) - (EMOF.MetaNavigation (id: 755) - (name allSurgeons) - (class (idref: 742)) - (longName 'All Surgeons')) - (EMOF.MetaNavigation (id: 756) - (name allFiles) - (class (idref: 742)) - (longName 'All files covered in this multiplication')) - (EMOF.MetaNavigation (id: 757) - (name allPlagiators) - (class (idref: 742)) - (longName 'All Plagiators'))) - (package (idref: 738)) - (superClass (idref: 7))) - (EMOF.Class (id: 758) - (name Detector) - (ownedAttribute - (EMOF.MetaMeasurement (id: 759) - (name AGE) - (class (idref: 758)) - (description 'The number of days between the oldest line of code and the newst one.') - (isReadOnly true) - (longName AgeOfModel) - (type (primitive: Number)))) - (package (idref: 738)) - (superClass (idref: 7))) - (EMOF.Class (id: 760) - (name Duplication) - (ownedOperation - (EMOF.MetaAction (id: 761) - (name browseDuplicationText) - (category main) - (class (idref: 760)))) - (package (idref: 738)) - (superClass (idref: 7))) - (EMOF.Class (id: 762) - (name Developer) - (ownedAttribute - (EMOF.MetaMeasurement (id: 763) - (name NOPedD) - (class (idref: 762)) - (description 'The number of developers this guy has plagiated') - (isReadOnly true) - (longName NumberOfPlagiatedDevelopers) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 764) - (name NOPingD) - (class (idref: 762)) - (description 'The number of developers plagiating this guy') - (isReadOnly true) - (longName NumberOfPlagiaringDevelopers) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 765) - (name NOPl) - (class (idref: 762)) - (description 'The number of clones that this developer has added') - (isReadOnly true) - (longName NumberOfPlagiaries) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 766) - (name NOP) - (class (idref: 762)) - (description 'The number of multiplications that this developer has contibuted by creating more clones') - (isReadOnly true) - (longName NumberOfPlagiations) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 767) - (name NOOr) - (class (idref: 762)) - (description 'The number of multiplications for wich this author has contributed to the original') - (isReadOnly true) - (longName NumberOfOriginals) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 768) - (name NOCl) - (class (idref: 762)) - (description 'The number of clones that this developer has contibutions to') - (isReadOnly true) - (longName NumberOfClones) - (type (primitive: Number))) - (EMOF.MetaMeasurement (id: 769) - (name NOMp) - (class (idref: 762)) - (description 'The number of multiplications that this developer has contibutions to') - (isReadOnly true) - (longName NumberOfMultiplications) - (type (primitive: Number)))) - (ownedOperation - (EMOF.MetaNavigation (id: 770) - (name allMultiplications) - (class (idref: 762)) - (longName 'All Multiplications')) - (EMOF.MetaNavigation (id: 771) - (name allOriginals) - (class (idref: 762)) - (longName 'All Originals')) - (EMOF.MetaNavigation (id: 772) - (name allPlagiated) - (class (idref: 762)) - (longName 'All Plagiated developers')) - (EMOF.MetaNavigation (id: 773) - (name allPlagiations) - (class (idref: 762)) - (longName 'All Plagiations')) - (EMOF.MetaNavigation (id: 774) - (name allPlagiators) - (class (idref: 762)) - (longName 'All Plagiating developers'))) - (package (idref: 738)) - (superClass (idref: 7))) - (EMOF.Class (id: 775) - (name MultiplicationGroup) - (package (idref: 738)) - (superClass (idref: 88))) - (EMOF.Class (id: 776) - (name DuplicationGroup) - (package (idref: 738)) - (superClass (idref: 88)))))) - (ownedType - (EMOF.Class (id: 686) - (name CvsModelRoot) - (package (idref: 716)) +((EMOF.Package (id: 1) + (name DynaMoose) + (ownedType + (EMOF.Class (id: 2) + (name AbstractEvent) + (ownedAttribute + (EMOF.Property (id: 3) + (name parent) + (class (idref: 2)) + (lower 0) + (opposite (idref: 4)) + (type (idref: 2))) + (EMOF.Property (id: 5) + (name start) + (class (idref: 2)) + (lower 0) + (type (primitive: Number))) + (EMOF.Property (id: 6) + (name stop) + (class (idref: 2)) + (lower 0) + (type (primitive: Number))) + (EMOF.Property (id: 4) + (name child) + (class (idref: 2)) + (isDerived true) + (lower 0) + (opposite (idref: 3)) + (type (idref: 2)) + (upper *))) + (package (idref: 1)) + (superClass (idref: 7))) + (EMOF.Class (id: 8) + (name Trace) + (ownedAttribute + (EMOF.Property (id: 9) + (name activation) + (class (idref: 8)) + (isDerived true) + (lower 0) + (opposite (idref: 10)) + (type (idref: 11)) + (upper *)) + (EMOF.Property (id: 12) + (name name) + (class (idref: 8)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 13) + (name start) + (class (idref: 8)) + (lower 0) + (type (primitive: Number))) + (EMOF.Property (id: 14) + (name stop) + (class (idref: 8)) + (lower 0) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 15) + (name NOIf) + (class (idref: 8)) + (description 'The number of Instances in a trace') + (isReadOnly true) + (longName 'Number of Instances') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 16) + (name NOMLGf) + (class (idref: 8)) + (description 'The number of low group feature methods in a trace') + (isReadOnly true) + (longName 'Number of low group feature methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 17) + (name NOCHGf) + (class (idref: 8)) + (description 'The number of High Group feature classes in a trace') + (isReadOnly true) + (longName 'Number of High Group feature classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 18) + (name NOEvents) + (class (idref: 8)) + (description 'The number of events in a trace') + (isReadOnly true) + (longName 'Number of events') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 19) + (name 'NOMSf_p') + (class (idref: 8)) + (description '% single feature methods in a trace') + (isReadOnly true) + (longName '% single feature methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 20) + (name NOM) + (class (idref: 8)) + (description 'The number of methods in a trace') + (isReadOnly true) + (longName 'Number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 21) + (name NOCf) + (class (idref: 8)) + (description 'The number of Classes in a trace') + (isReadOnly true) + (longName 'Number of Classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 22) + (name NOMHGf) + (class (idref: 8)) + (description 'The number of High Group feature methods in a trace') + (isReadOnly true) + (longName 'Number of High Group feature methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 23) + (name 'NOCSf_p') + (class (idref: 8)) + (description 'Percentage of single feature classes in a trace') + (isReadOnly true) + (longName 'Percentage single feature classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 24) + (name NOCSf) + (class (idref: 8)) + (description 'The number of single feature classes in a trace') + (isReadOnly true) + (longName 'Number of single feature classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 25) + (name NOCLGf) + (class (idref: 8)) + (description 'The number of low group feature classes in a trace') + (isReadOnly true) + (longName 'Number of low group feature classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 26) + (name NOMSf) + (class (idref: 8)) + (description 'The number of single feature methods in a trace') + (isReadOnly true) + (longName 'Number of single feature methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 27) + (name NOMIf) + (class (idref: 8)) + (description 'The number of Infrastructural feature methods in a trace') + (isReadOnly true) + (longName 'Number of Infrastructural feature methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 28) + (name NOCIf) + (class (idref: 8)) + (description 'The number of Infrastructural feature classes in a trace') + (isReadOnly true) + (longName 'Number of Infrastructural feature classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 29) + (name 'NOCHGf_p') + (class (idref: 8)) + (description 'Percentage of high group feature classes in a trace') + (isReadOnly true) + (longName 'Percentage high group feature classes') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 30) + (name myUniqueInstancesGroup) + (category 'Feature Instances') + (class (idref: 8))) + (EMOF.MetaAction (id: 31) + (name highGroupMethodCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 32) + (name highGroupClassesCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 33) + (name theFeaturesDependedOnTransitiveClosureGroup) + (category 'Feature Relationships') + (class (idref: 8))) + (EMOF.MetaAction (id: 34) + (name instances) + (category 'Feature Instances') + (class (idref: 8))) + (EMOF.MetaAction (id: 35) + (name openTimePlot) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 36) + (name lowGroupMethodCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 37) + (name infrastructuralClassesCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 38) + (name openTimePlotHTMLWriterStream) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 39) + (name openTimePlotAsk) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 40) + (name openTimePlotLayerColorPlus) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 41) + (name openColoredPlot) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 42) + (name infrasturcturalFeatureMethodCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 43) + (name singleClassesCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 44) + (name openTimePlotLayerColor) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 45) + (name openTimePlotSingleFeatureWriterStream) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 46) + (name theFeaturesDependedOnGroup) + (category 'Feature Relationships') + (class (idref: 8))) + (EMOF.MetaAction (id: 47) + (name openFCPlot) + (category 'Time Signal') + (class (idref: 8))) + (EMOF.MetaAction (id: 48) + (name singleFeatureMethodCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 49) + (name lowGroupClassesCharacterization) + (category 'Feature Characterization') + (class (idref: 8))) + (EMOF.MetaAction (id: 50) + (name theFeaturesSharedInstancesGroup) + (category 'Feature Relationships') + (class (idref: 8))) + (EMOF.MetaNavigation (id: 51) + (name infrastructuralFeatureClassesGroup) + (class (idref: 8)) + (longName 'Infrastructural feature classes')) + (EMOF.MetaNavigation (id: 52) + (name highGroupFeatureClassesGroup) + (class (idref: 8)) + (longName 'High group feature classes')) + (EMOF.MetaNavigation (id: 53) + (name singleFeatureClassesGroup) + (class (idref: 8)) + (longName 'Single feature classes')) + (EMOF.MetaNavigation (id: 54) + (name lowGroupFeatureClassesGroup) + (class (idref: 8)) + (longName 'Low group feature classes'))) + (package (idref: 1)) + (superClass (idref: 7))) + (EMOF.Class (id: 11) + (name Activation) + (ownedAttribute + (EMOF.Property (id: 55) + (name method) + (class (idref: 11)) + (lower 0) + (type (idref: 56))) + (EMOF.Property (id: 57) + (name receiver) + (class (idref: 11)) + (lower 0) + (opposite (idref: 58)) + (type (idref: 59))) + (EMOF.Property (id: 60) + (name argument) + (class (idref: 11)) + (isDerived true) + (lower 0) + (opposite (idref: 61)) + (type (idref: 62)) + (upper *)) + (EMOF.Property (id: 63) + (name return) + (class (idref: 11)) + (lower 0) + (type (idref: 59))) + (EMOF.Property (id: 10) + (name trace) + (class (idref: 11)) + (lower 0) + (opposite (idref: 9)) + (type (idref: 8))) + (EMOF.Property (id: 64) + (name alias) + (class (idref: 11)) + (isDerived true) + (lower 0) + (opposite (idref: 61)) + (type (idref: 65)) + (upper *))) + (package (idref: 1)) + (superClass (idref: 2))) + (EMOF.Class (id: 65) + (name Alias) + (ownedAttribute + (EMOF.Property (id: 66) + (name subject) + (class (idref: 65)) + (lower 0) + (opposite (idref: 67)) + (type (idref: 68))) + (EMOF.Property (id: 69) + (name variable) + (class (idref: 65)) + (lower 0) + (opposite (idref: 70)) + (type (idref: 71))) + (EMOF.Property (id: 61) + (name creator) + (class (idref: 65)) + (lower 0) + (opposite (idref: 64)) + (type (idref: 11))) + (EMOF.Property (id: 72) + (name ancestor) + (class (idref: 65)) + (lower 0) + (opposite (idref: 73)) + (type (idref: 65))) + (EMOF.Property (id: 73) + (name descendant) + (class (idref: 65)) + (isDerived true) + (lower 0) + (opposite (idref: 72)) + (type (idref: 65)) + (upper *)) + (EMOF.Property (id: 74) + (name timestamp) + (class (idref: 65)) + (lower 0) + (type (primitive: Number)))) + (package (idref: 1)) + (superClass (idref: 59))) + (EMOF.Class (id: 59) + (name Reference) + (ownedAttribute + (EMOF.Property (id: 58) + (name activation) + (class (idref: 59)) + (isDerived true) + (lower 0) + (opposite (idref: 57)) + (type (idref: 11)) + (upper *)) + (EMOF.MetaMeasurement (id: 75) + (name NORM) + (class (idref: 59)) + (description ) + (isReadOnly true) + (longName 'Number of received messages') + (type (primitive: Number)))) + (package (idref: 1)) + (superClass (idref: 7))) + (EMOF.Class (id: 68) + (name Instance) + (ownedAttribute + (EMOF.Property (id: 67) + (name alias) + (class (idref: 68)) + (isDerived true) + (lower 0) + (opposite (idref: 66)) + (type (idref: 65)) + (upper *)) + (EMOF.Property (id: 76) + (name name) + (class (idref: 68)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 77) + (name instanceOf) + (class (idref: 68)) + (lower 0) + (opposite (idref: 78)) + (type (idref: 79))) + (EMOF.MetaMeasurement (id: 80) + (name NORF) + (class (idref: 68)) + (description 'The number of features in which this instance is referenced') + (isReadOnly true) + (longName 'Number of referencing features') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 81) + (name TO) + (class (idref: 68)) + (description 'Trace in which the instance was created') + (isReadOnly true) + (longName 'Trace in which the instance was created') + (type (primitive: Number)))) + (package (idref: 1)) + (superClass (idref: 59))) + (EMOF.Class (id: 62) + (name ArgumentAlias) + (package (idref: 1)) + (superClass (idref: 65))) + (EMOF.Class (id: 82) + (name TraceEntityAssociation) + (ownedAttribute + (EMOF.Property (id: 83) + (name trace) + (class (idref: 82)) + (lower 0) + (type (idref: 8))) + (EMOF.MetaMeasurement (id: 84) + (name wRel) + (class (idref: 82)) + (description 'the relevence of an entity for a trace') + (isReadOnly true) + (longName 'relevence (Wilde)') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 85) + (name FA) + (class (idref: 82)) + (description 'relevance of a entity with respect to the traces in the model') + (isReadOnly true) + (longName 'Feature Affinity') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 86) + (name aRel) + (class (idref: 82)) + (description 'the relevence of a entity for a trace (normalized)') + (isReadOnly true) + (longName 'relevence (Antoniol)') + (type (primitive: Number)))) + (package (idref: 1)) + (superClass (idref: 7))) + (EMOF.Class (id: 87) + (name AliasGroup) + (package (idref: 1)) + (superClass (idref: 88))) + (EMOF.Class (id: 89) + (name ActivationGroup) + (package (idref: 1)) + (superClass (idref: 88))) + (EMOF.Class (id: 90) + (name TraceGroup) + (ownedOperation + (EMOF.MetaAction (id: 91) + (name inspectFilterFCLevelAsk) + (category 'Trace filtering') + (class (idref: 90))) + (EMOF.MetaAction (id: 92) + (name inspectFilterAwayEmptySelectors) + (category 'Trace filtering') + (class (idref: 90))) + (EMOF.MetaAction (id: 93) + (name inspectFilterAwayHighGroupFC) + (category 'Trace filtering') + (class (idref: 90))) + (EMOF.MetaAction (id: 94) + (name openTimePlot) + (category 'Time Signal') + (class (idref: 90))) + (EMOF.MetaAction (id: 95) + (name openTimePlotHTMLWriterStream) + (category 'Time Signal') + (class (idref: 90))) + (EMOF.MetaAction (id: 96) + (name openTimePlotAsk) + (category 'Time Signal') + (class (idref: 90))) + (EMOF.MetaAction (id: 97) + (name inspectFilteredGroup) + (category 'Trace filtering') + (class (idref: 90))) + (EMOF.MetaAction (id: 98) + (name openTimePlotLayerColorPlus) + (category 'Time Signal') + (class (idref: 90))) + (EMOF.MetaAction (id: 99) + (name openColoredPlot) + (category 'Time Signal') + (class (idref: 90))) + (EMOF.MetaAction (id: 100) + (name openTimePlotLayerColor) + (category 'Time Signal') + (class (idref: 90))) + (EMOF.MetaAction (id: 101) + (name inspectFilterAwayHighGroupFCClasses) + (category 'Trace filtering') + (class (idref: 90))) + (EMOF.MetaAction (id: 102) + (name openSingleFeaturePlot) + (category 'Time Signal') + (class (idref: 90))) + (EMOF.MetaAction (id: 103) + (name openFCPlot) + (category 'Time Signal') + (class (idref: 90)))) + (package (idref: 1)) + (superClass (idref: 88))) + (EMOF.Class (id: 104) + (name Return) + (ownedAttribute + (EMOF.Property (id: 105) + (name instanceId) + (class (idref: 104)) + (type (primitive: String)))) + (package (idref: 1)) + (superClass (idref: 2))) + (EMOF.Class (id: 106) + (name TempAlias) + (package (idref: 1)) + (superClass (idref: 65))) + (EMOF.Class (id: 107) + (name FieldReadAlias) + (package (idref: 1)) + (superClass (idref: 65))) + (EMOF.Class (id: 108) + (name GlobalReadAlias) + (package (idref: 1)) + (superClass (idref: 65))) + (EMOF.Class (id: 109) + (name HistoricalAlias) + (ownedAttribute + (EMOF.Property (id: 110) + (name predecessor) + (class (idref: 109)) + (lower 0) + (opposite (idref: 111)) + (type (idref: 109))) + (EMOF.Property (id: 111) + (name successor) + (class (idref: 109)) + (isDerived true) + (lower 0) + (opposite (idref: 110)) + (type (idref: 109)))) + (package (idref: 1)) + (superClass (idref: 65))) + (EMOF.Class (id: 112) + (name ReturnAlias) + (package (idref: 1)) + (superClass (idref: 65))) + (EMOF.Class (id: 113) + (name FieldAlias) + (ownedOperation + (EMOF.MetaNavigation (id: 114) + (name targetAttribute) + (class (idref: 113)) + (longName Attribute))) + (package (idref: 1)) + (superClass (idref: 109))) + (EMOF.Class (id: 115) + (name GlobalAlias) + (package (idref: 1)) + (superClass (idref: 109))) + (EMOF.Class (id: 116) + (name TracePackageAssociation) + (ownedAttribute + (EMOF.Property (id: 117) + (name tracepackageassociation) + (class (idref: 116)) + (isDerived true) + (lower 0) + (type (idref: 116)) + (upper *))) + (package (idref: 1)) + (superClass (idref: 82))) + (EMOF.Class (id: 118) + (name TraceClassAssociation) + (ownedAttribute + (EMOF.Property (id: 119) + (name trace) + (class (idref: 118)) + (lower 0) + (type (idref: 8))) + (EMOF.Property (id: 120) + (name entity) + (class (idref: 118)) + (lower 0) + (type (idref: 79))) + (EMOF.MetaMeasurement (id: 121) + (name Dedication) + (class (idref: 118)) + (description 'percentage of class dedicated to a feature') + (isReadOnly true) + (longName 'percentage of class dedicated to a feature') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 122) + (name NORCOther) + (class (idref: 118)) + (description 'The number of references to Classes in other traces') + (isReadOnly true) + (longName 'Number of References to Classes in other traces') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 123) + (name NORC) + (class (idref: 118)) + (description 'The number of references to Classes in a trace') + (isReadOnly true) + (longName 'Number of References to Classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 124) + (name Concentration) + (class (idref: 118)) + (description 'percentage of feature in a class') + (isReadOnly true) + (longName 'percentage of feature in a class') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 125) + (name touchedClass) + (class (idref: 118)) + (longName 'Touched class')) + (EMOF.MetaNavigation (id: 126) + (name containingTrace) + (class (idref: 118)) + (longName 'Containing trace'))) + (package (idref: 1)) + (superClass (idref: 82))) + (EMOF.Class (id: 127) + (name TraceMethodAssociation) + (ownedAttribute + (EMOF.Property (id: 128) + (name tracemethodassociation) + (class (idref: 127)) + (isDerived true) + (lower 0) + (type (idref: 127)) + (upper *)) + (EMOF.Property (id: 129) + (name entity) + (class (idref: 127)) + (lower 0) + (type (idref: 56))) + (EMOF.MetaMeasurement (id: 130) + (name NORMOther) + (class (idref: 127)) + (description 'The number of references to Methods in other traces') + (isReadOnly true) + (longName 'Number of References to Methods in other traces') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 131) + (name NORM) + (class (idref: 127)) + (description 'The number of references to Methods in a trace') + (isReadOnly true) + (longName 'Number of References to Methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 132) + (name FM) + (class (idref: 127)) + (description 'characterization of a method with respect to the traces in the model') + (isReadOnly true) + (longName 'feature characterization') + (type (primitive: Number)))) + (package (idref: 1)) + (superClass (idref: 82))))) +(EMOF.Package (id: 133) + (name FAMIX) + (ownedType + (EMOF.Class (id: 134) + (name ModelRoot) + (ownedAttribute + (EMOF.Property (id: 135) + (name stub) + (class (idref: 134)) + (lower 0) + (type (primitive: Boolean)))) + (package (idref: 133)) + (superClass (idref: 7))) + (EMOF.Class (id: 56) + (name Method) + (ownedAttribute + (EMOF.Property (id: 2000) + (name returnType) + (lower 0) + (type (idref: 79))) + (EMOF.Property (id: 2002) + (name parameter) + (lower 0) + (upper *) + (type (idref: 415))) + (EMOF.Property (id: 136) + (name activation) + (class (idref: 56)) + (lower 0) + (opposite (idref: 55)) + (type (idref: 11)) + (upper *)) + (EMOF.Property (id: 137) + (name hasClassScope) + (class (idref: 56)) + (lower 0) + (type (primitive: Boolean))) + (EMOF.Property (id: 138) + (name source) + (class (idref: 56)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 139) + (name belongsTo) + (class (idref: 56)) + (isComposite true) + (lower 0) + (opposite (idref: 140)) + (type (idref: 79))) + (EMOF.Property (id: 141) + (name category) + (class (idref: 56)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 142) + (name isAbstract) + (class (idref: 56)) + (isDerived true) + (type (primitive: Boolean))) + (EMOF.Property (id: 143) + (name kind) + (class (idref: 56)) + (type (primitive: String))) + (EMOF.Property (id: 144) + (name isConstructor) + (class (idref: 56)) + (isDerived true) + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 145) + (name isGetter) + (class (idref: 56)) + (isReadOnly true) + (longName isGetter) + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 146) + (name isSetter) + (class (idref: 56)) + (isReadOnly true) + (longName isSetter) + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 147) + (name isInternalImplementation) + (class (idref: 56)) + (description 'Public Interface Layer Method') + (isReadOnly true) + (longName 'Public Interface Layer Method') + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 148) + (name HDUPLINES) + (class (idref: 56)) + (description 'The number of lines of code duplicated in hierarchy') + (isReadOnly true) + (longName 'Number of lines of code duplicated in hierarchy') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 149) + (name NOActivations) + (class (idref: 56)) + (description ) + (isReadOnly true) + (longName 'Number of activations') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 150) + (name overriden) + (class (idref: 56)) + (description 'The method is overrinded in a sub class') + (isReadOnly true) + (longName 'Method overriden') + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 151) + (name NIJSPI) + (class (idref: 56)) + (description 'The number of invocations from JSP Pages') + (isReadOnly true) + (longName 'Number of invocations from JSP Pages') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 152) + (name overriding) + (class (idref: 56)) + (description 'The method is overrinding a method defined in a super class') + (isReadOnly true) + (longName 'Overriding method') + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 153) + (name isInitializer) + (class (idref: 56)) + (description 'Initialization Layer Method') + (isReadOnly true) + (longName 'Initialization Layer Method') + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 154) + (name MHNL) + (class (idref: 56)) + (description 'The nesting level in the hierarchy') + (isReadOnly true) + (longName 'Method hierarchy nesting level') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 155) + (name FM) + (class (idref: 56)) + (description 'characterization of a method with respect to the traces in the model') + (isReadOnly true) + (longName 'feature characterization') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 156) + (name IDUPLINES) + (class (idref: 56)) + (description 'The number of lines of code duplicated internally') + (isReadOnly true) + (longName 'Number of lines of code duplicated internally') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 157) + (name isPublicInterface) + (class (idref: 56)) + (description 'Public Interface Layer Method') + (isReadOnly true) + (longName 'Public Interface Layer Method') + (type (primitive: Boolean))) + (EMOF.MetaMeasurement (id: 158) + (name EDUPLINES) + (class (idref: 56)) + (description 'The number of lines of code duplicated externally') + (isReadOnly true) + (longName 'Number of lines of code duplicated externally') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 159) + (name browseSource) + (category main) + (class (idref: 56))) + (EMOF.MetaExpression (id: 160) + (name intensiveCouplingExpressionForJava) + (class (idref: 56))) + (EMOF.MetaExpression (id: 161) + (name featureEnvyExpressionForJava) + (class (idref: 56))) + (EMOF.MetaExpression (id: 162) + (name dispersedCouplingExpressionForJava) + (class (idref: 56))) + (EMOF.MetaExpression (id: 163) + (name shotgunSurgeryExpressionForJava) + (class (idref: 56))) + (EMOF.MetaExpression (id: 164) + (name brainMethodExpressionForJava) + (class (idref: 56))) + (EMOF.MetaNavigation (id: 165) + (name parentClassGroup) + (class (idref: 56)) + (longName 'Parent class'))) + (package (idref: 133)) + (superClass (idref: 166))) + (EMOF.Class (id: 166) + (name AbstractBehaviouralEntity) + (ownedAttribute + (EMOF.Property (id: 167) + (name access) + (class (idref: 166)) + (isDerived true) + (lower 0) + (opposite (idref: 168)) + (type (idref: 169)) + (upper *)) + (EMOF.Property (id: 170) + (name outgoingInvocation) + (class (idref: 166)) + (isDerived true) + (lower 0) + (opposite (idref: 171)) + (type (idref: 172)) + (upper *)) + (EMOF.Property (id: 173) + (name packagedIn) + (class (idref: 166)) + (lower 0) + (type (idref: 174))) + (EMOF.Property (id: 175) + (name accessControlQualifier) + (class (idref: 166)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 176) + (name incomingJspInvocation) + (class (idref: 166)) + (isDerived true) + (lower 0) + (opposite (idref: 177)) + (type (idref: 178)) + (upper *)) + (EMOF.Property (id: 179) + (name incomingInvocation) + (class (idref: 166)) + (isDerived true) + (lower 0) + (opposite (idref: 180)) + (type (idref: 172)) + (upper *)) + (EMOF.Property (id: 181) + (name signature) + (class (idref: 166)) + (lower 0) + (type (primitive: String))) + (EMOF.MetaMeasurement (id: 182) + (name LOC) + (class (idref: 166)) + (description 'The number of lines of code in a method') + (isReadOnly true) + (longName 'Lines of code') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 183) + (name CYCLO) + (class (idref: 166)) + (description 'Actually this impl has an error, please use CYCLO2!!!') + (isReadOnly true) + (longName 'Cyclomatic complexity (has error!)') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 184) + (name NOP) + (class (idref: 166)) + (description 'The number of parameters in a method') + (isReadOnly true) + (longName 'Number of parameters') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 185) + (name NOCmts) + (class (idref: 166)) + (description 'The number of comments') + (isReadOnly true) + (longName 'Number of comments') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 186) + (name NMAA) + (class (idref: 166)) + (description 'The number of accesses from a method') + (isReadOnly true) + (longName 'Number of accesses') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 187) + (name CC) + (class (idref: 166)) + (description 'Number of distinct classes that contain methods that call the current method') + (isReadOnly true) + (longName 'Changing classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 188) + (name NOCond) + (class (idref: 166)) + (description 'The number of conditionals in a method') + (isReadOnly true) + (longName 'Number of conditionals') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 189) + (name FANIN) + (class (idref: 166)) + (description 'Number of calling classes') + (isReadOnly true) + (longName FANIN) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 190) + (name NOS) + (class (idref: 166)) + (description 'The number of statements in a method') + (isReadOnly true) + (longName 'Number of statements') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 191) + (name CM) + (class (idref: 166)) + (description 'Number of distinct methods that call the current method') + (isReadOnly true) + (longName 'Changing methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 192) + (name FANOUT) + (class (idref: 166)) + (description 'Number of called classes') + (isReadOnly true) + (longName FANOUT) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 193) + (name 'CYCLO2') + (class (idref: 166)) + (description 'The number of linear-independent paths through a method.') + (isReadOnly true) + (longName 'Cyclomatic complexity') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 194) + (name NI) + (class (idref: 166)) + (description 'The number of invocations in a method') + (isReadOnly true) + (longName 'Number of invocations') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 195) + (name MSG) + (class (idref: 166)) + (description 'The number of message from a method') + (isReadOnly true) + (longName 'Number of message sends') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 196) + (name allAccesses) + (class (idref: 166)) + (longName Accesses)) + (EMOF.MetaNavigation (id: 197) + (name incomingInvocationsGroup) + (class (idref: 166)) + (longName 'Incoming invocations')) + (EMOF.MetaNavigation (id: 198) + (name outgoingAccessesGroup) + (class (idref: 166)) + (longName Accesses)) + (EMOF.MetaNavigation (id: 199) + (name formalParametersGroup) + (class (idref: 166)) + (longName 'Formal parameters')) + (EMOF.MetaNavigation (id: 200) + (name localVariablesGroup) + (class (idref: 166)) + (longName 'Local variables')) + (EMOF.MetaNavigation (id: 201) + (name outgoingInvocationsGroup) + (class (idref: 166)) + (longName 'All outgoing invocations'))) + (package (idref: 133)) + (superClass (idref: 202))) + (EMOF.Class (id: 202) + (name AbstractNamedEntity) + (ownedAttribute + (EMOF.Property (id: 342) + (name accessedByList) + (class (idref: 202)) + (isDerived true) + (lower 0) + (opposite (idref: 207)) + (type (idref: 169)) + (upper *)) + (EMOF.Property (id: 203) + (name name) + (class (idref: 202)) + (lower 0) + (type (primitive: String))) + (EMOF.MetaMeasurement (id: 204) + (name NL) + (class (idref: 202)) + (description 'The number of characters in the name') + (isReadOnly true) + (longName 'Name length') + (type (primitive: Number)))) + (package (idref: 133)) + (superClass (idref: 205))) + (EMOF.Class (id: 205) + (name AbstractObject) + (ownedAttribute + (EMOF.Property (id: 206) + (name sourceAnchor) + (class (idref: 205)) + (lower 0) + (type (primitive: String)))) + (package (idref: 133)) + (superClass (idref: 134))) + (EMOF.Class (id: 169) + (name Access) + (ownedAttribute + (EMOF.Property (id: 207) + (name accesses) + (class (idref: 169)) + (lower 0) + (opposite (idref: 342)) + (type (idref: 202))) + (EMOF.Property (id: 208) + (name readWriteAccess) + (class (idref: 169)) + (lower 0) + (type (primitive: Boolean))) + (EMOF.Property (id: 168) + (name accessedIn) + (class (idref: 169)) + (lower 0) + (opposite (idref: 167)) + (type (idref: 166)))) + (ownedOperation + (EMOF.MetaNavigation (id: 209) + (name accessedVariable) + (class (idref: 169)) + (longName 'Accessed variable')) + (EMOF.MetaNavigation (id: 210) + (name accessingBehaviour) + (class (idref: 169)) + (longName 'Accessing behaviour entity'))) + (package (idref: 133)) + (superClass (idref: 211))) + (EMOF.Class (id: 1000) + (name JSPAccess) + (ownedAttribute + (EMOF.Property (id: 1001) + (name accesses) + (class (idref: 1000)) + (type (idref: 202))) + (EMOF.Property (id: 1004) + (name accessedIn) + (class (idref: 1000)) + (type (idref: 353)))) + (ownedOperation + (EMOF.MetaNavigation (id: 1002) + (name accessedVariable) + (class (idref: 1000)) + (longName 'Accessed variable')) + (EMOF.MetaNavigation (id: 1003) + (name accessingBehaviour) + (class (idref: 1000)) + (longName 'Accessing behaviour entity'))) + (package (idref: 133)) + (superClass (idref: 211)) + ) + (EMOF.Class (id: 211) + (name AbstractAssociation) + (package (idref: 133)) + (superClass (idref: 205))) + (EMOF.Class (id: 172) + (name Invocation) + (ownedAttribute + (EMOF.Property (id: 2001) + (name receivingType) + (lower 0) + (type (idref: 79))) + (EMOF.Property (id: 171) + (name invokedBy) + (class (idref: 172)) + (lower 0) + (opposite (idref: 170)) + (type (idref: 166))) + (EMOF.Property (id: 180) + (name candidate) + (class (idref: 172)) + (lower 0) + (opposite (idref: 179)) + (type (idref: 166)) + (upper *)) + (EMOF.Property (id: 212) + (name receivingVariable) + (class (idref: 172)) + (lower 0) + (type (idref: 205))) + (EMOF.Property (id: 213) + (name invokes) + (class (idref: 172)) + (lower 0) + (type (primitive: String)))) + (ownedOperation + (EMOF.MetaNavigation (id: 214) + (name invokedCandidates) + (class (idref: 172)) + (longName 'Invoked behaviour')) + (EMOF.MetaNavigation (id: 215) + (name invokingBehaviour) + (class (idref: 172)) + (longName 'Invoking Behaviour'))) + (package (idref: 133)) + (superClass (idref: 211))) + (EMOF.Class (id: 174) + (name Package) + (ownedAttribute + (EMOF.Property (id: 216) + (name extendedClass) + (class (idref: 174)) + (lower 0) + (type (idref: 79)) + (upper *)) + (EMOF.Property (id: 217) + (name definedClass) + (class (idref: 174)) + (isDerived true) + (lower 0) + (opposite (idref: 218)) + (type (idref: 79)) + (upper *)) + (EMOF.Property (id: 219) + (name packagedIn) + (class (idref: 174)) + (isComposite true) + (lower 0) + (type (idref: 174))) + (EMOF.MetaMeasurement (id: 220) + (name LOC) + (class (idref: 174)) + (isReadOnly true) + (longName LOC) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 221) + (name TLOC) + (class (idref: 174)) + (isReadOnly true) + (longName TLOC) + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 222) + (name viewPackageBrowser) + (category Mondrian) + (class (idref: 174))) + (EMOF.MetaNavigation (id: 223) + (name parentPackage) + (class (idref: 174)) + (longName 'Containing package')) + (EMOF.MetaNavigation (id: 224) + (name definedClassesGroup) + (class (idref: 174)) + (longName 'Defined classes')) + (EMOF.MetaNavigation (id: 225) + (name extendedClassesGroup) + (class (idref: 174)) + (longName 'Extended classes')) + (EMOF.MetaNavigation (id: 226) + (name childPackages) + (class (idref: 174)) + (longName 'Child packages'))) + (package (idref: 133)) + (superClass (idref: 202))) + (EMOF.Class (id: 79) + (name Class) + (ownedAttribute + "//NOTE move accessedByList up to AbstractNamedEntity" + (EMOF.Property (id: 140) + (name method) + (class (idref: 79)) + (isDerived true) + (lower 0) + (opposite (idref: 139)) + (type (idref: 56)) + (upper *)) + (EMOF.Property (id: 218) + (name packagedIn) + (class (idref: 79)) + (isComposite true) + (lower 0) + (opposite (idref: 217)) + (type (idref: 174))) + (EMOF.Property (id: 228) + (name interfaceSignature) + (class (idref: 79)) + (lower 0) + (type (primitive: String)) + (upper *)) + (EMOF.Property (id: 229) + (name isInterface) + (class (idref: 79)) + (type (primitive: Boolean))) + (EMOF.Property (id: 230) + (name attribute) + (class (idref: 79)) + (isDerived true) + (lower 0) + (opposite (idref: 231)) + (type (idref: 232)) + (upper *)) + (EMOF.Property (id: 233) + (name belongsTo) + (class (idref: 79)) + (isComposite true) + (lower 0) + (opposite (idref: 234)) + (type (idref: 235))) + (EMOF.Property (id: 78) + (name instance) + (class (idref: 79)) + (isDerived true) + (lower 0) + (opposite (idref: 77)) + (type (idref: 68)) + (upper *)) + (EMOF.Property (id: 236) + (name isAbstract) + (class (idref: 79)) + (type (primitive: Boolean))) + (EMOF.Property (id: 237) + (name outgoingInheritance) + (class (idref: 79)) + (isDerived true) + (lower 0) + (opposite (idref: 241)) "//NOTE bug fixed, was refering to super instead of subclass" + (type (idref: 239)) + (upper *)) + (EMOF.Property (id: 240) + (name incomingInheritance) + (class (idref: 79)) + (isDerived true) + (lower 0) + (opposite (idref: 238)) "//NOTE bug fixed, was refering to sub instead of superclass" + (type (idref: 239)) + (upper *)) + (EMOF.MetaMeasurement (id: 242) + (name IDUPLINES) + (class (idref: 79)) + (description 'The number of duplicated lines of code internally') + (isReadOnly true) + (longName 'Number of duplicated lines of code internally') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 243) + (name WLOC) + (class (idref: 79)) + (description 'The number of lines of code in a class') + (isReadOnly true) + (longName 'Number of lines of code') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 244) + (name NOInstances) + (class (idref: 79)) + (description 'number of instances in the model') + (isReadOnly true) + (longName 'Number of instances') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 245) + (name NOAM) + (class (idref: 79)) + (description 'The number of accessor methods in a class') + (isReadOnly true) + (longName 'Number of accesor methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 246) + (name WNOCmts) + (class (idref: 79)) + (description 'The number of comments in a class') + (isReadOnly true) + (longName 'Number of comments') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 247) + (name NMI) + (class (idref: 79)) + (description 'The number of methods in a class inherited from super classes') + (isReadOnly true) + (longName 'Number of methods inherited') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 248) + (name NME) + (class (idref: 79)) + (description 'The number of method extensions in a class') + (isReadOnly true) + (longName 'Number of method extensions') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 249) + (name NOPAplusNOAM) + (class (idref: 79)) + (description 'The number of public attributes plus the number of accessor methods') + (isReadOnly true) + (longName 'Number of revealed attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 250) + (name FANIN) + (class (idref: 79)) + (description 'Number of calling classes') + (isReadOnly true) + (longName FANIN) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 251) + (name NOM) + (class (idref: 79)) + (description 'The number of methods in a class') + (isReadOnly true) + (longName 'Number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 252) + (name NAI) + (class (idref: 79)) + (description 'The number of attributes in a class inherited from super classes') + (isReadOnly true) + (longName 'Number of attributes inherited') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 253) + (name WNOS) + (class (idref: 79)) + (description 'The number of statements in a class') + (isReadOnly true) + (longName 'Number of statements') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 254) + (name WOC) + (class (idref: 79)) + (description 'Weight of a class') + (isReadOnly true) + (longName 'Weight of a class') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 255) + (name WIM) + (class (idref: 79)) + (description 'The number of methods of a class included the inherited ones') + (isReadOnly true) + (longName 'Weighted Number of Methods (recursively)') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 256) + (name PriA) + (class (idref: 79)) + (description 'The number of private attributes in a class') + (isReadOnly true) + (longName 'Number of private attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 257) + (name WMC) + (class (idref: 79)) + (description 'The sum of the complexity in a class') + (isReadOnly true) + (longName 'Weighted method count') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 258) + (name PriM) + (class (idref: 79)) + (description 'The number of private methods in a class') + (isReadOnly true) + (longName 'Number of private methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 259) + (name ATFD) + (class (idref: 79)) + (description 'Number of accesses to foreign data') + (isReadOnly true) + (longName 'Number of accesses to foreign data') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 260) + (name NMO) + (class (idref: 79)) + (description 'The number of methods in a class overriden with respect to super classes') + (isReadOnly true) + (longName 'Number of methods overriden') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 261) + (name NOMP) + (class (idref: 79)) + (description 'The number of method protocols in a class') + (isReadOnly true) + (longName 'Number of method protocols') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 262) + (name ProA) + (class (idref: 79)) + (description 'The number of protected attributes in a class') + (isReadOnly true) + (longName 'Number of protected attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 263) + (name FANOUT) + (class (idref: 79)) + (description 'Number of called classes') + (isReadOnly true) + (longName FANOUT) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 264) + (name PubM) + (class (idref: 79)) + (description 'The number of public methods in a class') + (isReadOnly true) + (longName 'Number of public methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 265) + (name HNL) + (class (idref: 79)) + (description 'The nesting of a class inside the hierarchy') + (isReadOnly true) + (longName 'Hierarchy nesting level') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 266) + (name FA) + (class (idref: 79)) + (description 'relevance of a class with respect to the traces in the model') + (isReadOnly true) + (longName 'Feature Affinity') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 267) + (name NMA) + (class (idref: 79)) + (description 'The number of methods in a class added with respect to super classes') + (isReadOnly true) + (longName 'Number of methods added') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 268) + (name ProM) + (class (idref: 79)) + (description 'The number of protected methods in a class') + (isReadOnly true) + (longName 'Number of protected methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 269) + (name NOA) + (class (idref: 79)) + (description 'The number of attributes in the class') + (isReadOnly true) + (longName 'Number of Attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 270) + (name WNOC) + (class (idref: 79)) + (description 'The total number of subclasses of a class') + (isReadOnly true) + (longName 'Total number of children (recursively)') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 271) + (name NOC) + (class (idref: 79)) + (description 'The number of subclasses of a class') + (isReadOnly true) + (longName 'Number of children') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 272) + (name WMSG) + (class (idref: 79)) + (description 'The number of message sends from a class') + (isReadOnly true) + (longName 'Number of message sends') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 273) + (name NOPA) + (class (idref: 79)) + (description 'The number of public attributes in a class') + (isReadOnly true) + (longName 'Number of public attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 274) + (name NC) + (class (idref: 79)) + (description 'The number of constructor methods in a class') + (isReadOnly true) + (longName 'Number of constructor methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 275) + (name AbsM) + (class (idref: 79)) + (description 'The number of abstract methods in the class') + (isReadOnly true) + (longName 'Number of abstract methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 276) + (name TCC) + (class (idref: 79)) + (description 'Tight class cohesion of a class') + (isReadOnly true) + (longName 'Tight class cohesion') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 277) + (name NOPa) + (class (idref: 79)) + (description 'The number of superclasses') + (isReadOnly true) + (longName 'Number of parents') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 278) + (name browseSource) + (category main) + (class (idref: 79))) + (EMOF.MetaAction (id: 279) + (name viewBlueprint) + (category Mondrian) + (class (idref: 79))) + (EMOF.MetaAction (id: 280) + (name viewCollaboration) + (category Mondrian) + (class (idref: 79))) + (EMOF.MetaExpression (id: 281) + (name godClassExpressionForJava) + (class (idref: 79))) + (EMOF.MetaExpression (id: 282) + (name dataClassExpressionForJava) + (class (idref: 79))) + (EMOF.MetaExpression (id: 283) + (name godClassExpressionForSmalltalk) + (class (idref: 79))) + (EMOF.MetaExpression (id: 284) + (name brainClassExpressionForJava) + (class (idref: 79))) + (EMOF.MetaExpression (id: 285) + (name innerClassExpression) + (class (idref: 79))) + (EMOF.MetaExpression (id: 286) + (name interfaceExpression) + (class (idref: 79))) + (EMOF.MetaExpression (id: 287) + (name abstractExpression) + (class (idref: 79))) + (EMOF.MetaExpression (id: 288) + (name hierarchyRootExpression) + (class (idref: 79))) + (EMOF.MetaExpression (id: 289) + (name modelClassExpression) + (class (idref: 79))) + (EMOF.MetaExpression (id: 290) + (name instanceClassExpression) + (class (idref: 79))) + (EMOF.MetaNavigation (id: 291) + (name methodsGroup) + (class (idref: 79)) + (longName Methods)) + (EMOF.MetaNavigation (id: 292) + (name subclassHierarchyGroup) + (class (idref: 79)) + (longName Subclasses)) + (EMOF.MetaNavigation (id: 293) + (name incomingInvocationsGroup) + (class (idref: 79)) + (longName 'Incoming invocations')) + (EMOF.MetaNavigation (id: 294) + (name containingPackage) + (class (idref: 79)) + (longName 'Containing package')) + (EMOF.MetaNavigation (id: 295) + (name invokedClassesGroup) + (class (idref: 79)) + (longName 'Invoked classes')) + (EMOF.MetaNavigation (id: 296) + (name attributesGroup) + (class (idref: 79)) + (longName Attributes)) + (EMOF.MetaNavigation (id: 297) + (name incomingAccessesGroup) + (class (idref: 79)) + (longName 'Incoming accesses')) + (EMOF.MetaNavigation (id: 298) + (name withSubclassHierarchyGroup) + (class (idref: 79)) + (longName 'All subclasses')) + (EMOF.MetaNavigation (id: 299) + (name withSuperclassHierarchyGroup) + (class (idref: 79)) + (longName 'With superclasses')) + (EMOF.MetaNavigation (id: 300) + (name outgoingAccessesGroup) + (class (idref: 79)) + (longName 'Outgoing accesses')) + (EMOF.MetaNavigation (id: 301) + (name superclassHierarchyGroup) + (class (idref: 79)) + (longName Superclasses)) + (EMOF.MetaNavigation (id: 302) + (name outgoingInvocationsGroup) + (class (idref: 79)) + (longName 'Outgoing invocations'))) + (package (idref: 133)) + (superClass (idref: 303))) + (EMOF.Class (id: 303) + (name AbstractScopable) + (ownedAttribute + (EMOF.Property (id: 304) + (name belongsTo) + (class (idref: 303)) + (isComposite true) + (lower 0) + (type (idref: 235)))) + (ownedOperation + (EMOF.MetaNavigation (id: 305) + (name container) + (class (idref: 303)) + (longName 'Containing namespace'))) + (package (idref: 133)) + (superClass (idref: 202))) + (EMOF.Class (id: 235) + (name Namespace) + (ownedAttribute + (EMOF.Property (id: 306) + (name namespace) + (class (idref: 235)) + (isDerived true) + (lower 0) + (opposite (idref: 307)) + (type (idref: 235)) + (upper *)) + (EMOF.Property (id: 307) + (name belongsTo) + (class (idref: 235)) + (isComposite true) + (lower 0) + (opposite (idref: 306)) + (type (idref: 235))) + (EMOF.Property (id: 308) + (name function) + (class (idref: 235)) + (isDerived true) + (lower 0) + (opposite (idref: 309)) + (type (idref: 310)) + (upper *)) + (EMOF.Property (id: 234) + (name class) + (class (idref: 235)) + (isDerived true) + (lower 0) + (opposite (idref: 233)) + (type (idref: 79)) + (upper *)) + (EMOF.Property (id: 311) + (name packagedIn) + (class (idref: 235)) + (isComposite true) + (lower 0) + (type (idref: 174))) + (EMOF.MetaMeasurement (id: 312) + (name LOC) + (class (idref: 235)) + (description 'The number of lines of code in a namespace') + (isReadOnly true) + (longName 'Number of lines of code') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 313) + (name NOICls) + (class (idref: 235)) + (description 'The number of non interfaces classes in a namespace') + (isReadOnly true) + (longName 'Number of non interfaces classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 314) + (name RNOM) + (class (idref: 235)) + (description 'The recursive number of methods in a namespace') + (isReadOnly true) + (longName 'Recursive number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 315) + (name RLOC) + (class (idref: 235)) + (description 'The number of recursive number of lines of code in a namespace') + (isReadOnly true) + (longName 'Number of recursive lines of code') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 316) + (name NOM) + (class (idref: 235)) + (description 'The number of methods in a namespace') + (isReadOnly true) + (longName 'Number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 317) + (name NOCls) + (class (idref: 235)) + (description 'The number of classes in a namespace') + (isReadOnly true) + (longName 'Number of classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 318) + (name RNOCls) + (class (idref: 235)) + (description 'The recursive number of classes in a namespace') + (isReadOnly true) + (longName 'Recursive number of classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 319) + (name NOA) + (class (idref: 235)) + (description 'The number of attributes in a namespace') + (isReadOnly true) + (longName 'Number of attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 320) + (name NOMIJSP) + (class (idref: 235)) + (description 'The number of methods in a namespace') + (isReadOnly true) + (longName 'Number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 321) + (name NORICls) + (class (idref: 235)) + (description 'The number of recursive non interfaces classes in a namespace') + (isReadOnly true) + (longName 'Number of recursive non interfaces classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 322) + (name RNOA) + (class (idref: 235)) + (description 'The recursive number of attributes in a namespace') + (isReadOnly true) + (longName 'Recursive number of attributes') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 323) + (name viewClassSystemComplexity) + (category Mondrian) + (class (idref: 235))) + (EMOF.MetaAction (id: 324) + (name viewUmlWithMethodsAndAttributes) + (category Mondrian) + (class (idref: 235))) + (EMOF.MetaAction (id: 325) + (name viewAllClassSystemComplexity) + (category Mondrian) + (class (idref: 235))) + (EMOF.MetaExpression (id: 326) + (name recursivelyContainsStubClassesExpression) + (class (idref: 235))) + (EMOF.MetaExpression (id: 327) + (name containsStubClassesExpression) + (class (idref: 235))) + (EMOF.MetaNavigation (id: 328) + (name classGroup) + (class (idref: 235)) + (longName 'All classes')) + (EMOF.MetaNavigation (id: 329) + (name functionGroup) + (class (idref: 235)) + (longName 'All functions')) + (EMOF.MetaNavigation (id: 330) + (name allFunctions) + (class (idref: 235)) + (longName 'All functions')) + (EMOF.MetaNavigation (id: 331) + (name recursiveClassesGroup) + (class (idref: 235)) + (longName 'All recursive classes')) + (EMOF.MetaNavigation (id: 332) + (name recursiveFunctionsGroup) + (class (idref: 235)) + (longName 'All recursive functions'))) + (package (idref: 133)) + (superClass (idref: 303))) + (EMOF.Class (id: 310) + (name Function) + (ownedAttribute + (EMOF.Property (id: 309) + (name belongsTo) + (class (idref: 310)) + (lower 0) + (opposite (idref: 308)) + (type (idref: 235)))) + (package (idref: 133)) + (superClass (idref: 166))) + (EMOF.Class (id: 232) + (name Attribute) + (ownedAttribute + (EMOF.Property (id: 231) + (name belongsTo) + (class (idref: 232)) + (isComposite true) + (lower 0) + (opposite (idref: 230)) + (type (idref: 79))) + (EMOF.Property (id: 333) + (name hasClassScope) + (class (idref: 232)) + (lower 0) + (type (primitive: Boolean))) + (EMOF.Property (id: 334) + (name accessControlQualifier) + (class (idref: 232)) + (lower 0) + (type (primitive: String))) + (EMOF.MetaMeasurement (id: 335) + (name NGA) + (class (idref: 232)) + (description 'The number of accesses to an attribute from outside the class defining the attribute.') + (isReadOnly true) + (longName 'Number of global accesses') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 336) + (name NAA) + (class (idref: 232)) + (description 'The number of accesses of an attribute.') + (isReadOnly true) + (longName 'Number of accesses') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 337) + (name NCM) + (class (idref: 232)) + (description 'The number of classes from which at least one method accesses an attribute.') + (isReadOnly true) + (longName 'Number of accessing classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 338) + (name NLA) + (class (idref: 232)) + (description 'The number of accesses to an attribute from inside the class defining the attribute.') + (isReadOnly true) + (longName 'Number of local accesses') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 339) + (name AHNL) + (class (idref: 232)) + (description 'The hierarchy nesting level of an attribute.') + (isReadOnly true) + (longName 'Attribute hierarchy nesting level') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 340) + (name NM) + (class (idref: 232)) + (description 'The number of methods accessing an attribute.') + (isReadOnly true) + (longName 'Number of accessing methods') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 341) + (name parentClassGroup) + (class (idref: 232)) + (longName 'Parent class'))) + (package (idref: 133)) + (superClass (idref: 71))) + (EMOF.Class (id: 71) + (name AbstractStructuralEntity) + (ownedAttribute + "//NOTE pushed accessedByList up to AbstractNamedEntity" + (EMOF.Property (id: 343) + (name declaredType) + (class (idref: 71)) + (type (idref: 79))) + (EMOF.Property (id: 344) + (name declaredClass) + (class (idref: 71)) + (type (idref: 79))) + (EMOF.Property (id: 70) + (name hostedAlias) + (class (idref: 71)) + (isDerived true) + (lower 0) + (type (idref: 65)) + (upper *)) + (EMOF.MetaMeasurement (id: 345) + (name NOAcc) + (class (idref: 71)) + (description 'Total number of accesses') + (isReadOnly true) + (longName 'Number of accesses') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 346) + (name allAccessedByList) + (class (idref: 71)) + (longName 'Accessed in'))) + (package (idref: 133)) + (superClass (idref: 202))) + (EMOF.Class (id: 239) + (name InheritanceDefinition) + (ownedAttribute + (EMOF.Property (id: 238) + (name superclass) + (class (idref: 239)) + (lower 0) + (opposite (idref: 240)) + (type (idref: 79))) + (EMOF.Property (id: 347) + (name index) + (class (idref: 239)) + (type (primitive: Number))) + (EMOF.Property (id: 241) + (name subclass) + (class (idref: 239)) + (lower 0) + (opposite (idref: 237)) + (type (idref: 79))) + (EMOF.Property (id: 348) + (name accessControlQualifier) + (class (idref: 239)) + (type (primitive: String)))) + (ownedOperation + (EMOF.MetaNavigation (id: 349) + (name subClass) + (class (idref: 239)) + (longName Subclass)) + (EMOF.MetaNavigation (id: 350) + (name superClass) + (class (idref: 239)) + (longName Superclass))) + (package (idref: 133)) + (superClass (idref: 211))) + (EMOF.Class (id: 178) + (name JSPInvocation) + (ownedAttribute + (EMOF.Property (id: 351) + (name invokedBy) + (class (idref: 178)) + (lower 0) + (opposite (idref: 352)) + (type (idref: 353))) + (EMOF.Property (id: 177) + (name candidate) + (class (idref: 178)) + (lower 0) + (opposite (idref: 176)) + (type (idref: 166)) + (upper *)) + (EMOF.Property (id: 354) + (name invokes) + (class (idref: 178)) + (lower 0) + (type (primitive: String)))) + (ownedOperation + (EMOF.MetaNavigation (id: 1100) + (name invokedCandidates) + (class (idref: 178)) + (longName 'Invoked behaviour')) + (EMOF.MetaNavigation (id: 1101) + (name invokingBehaviour) + (class (idref: 178)) + (longName 'Invoking Behaviour'))) + (package (idref: 133)) + (superClass (idref: 211))) + (EMOF.Class (id: 353) + (name JSPPage) + (ownedAttribute + (EMOF.Property (id: 355) + (name filedIn) + (class (idref: 353)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 352) + (name outgoingJspInvocation) + (class (idref: 353)) + (isDerived true) + (lower 0) + (opposite (idref: 351)) + (type (idref: 178)) + (upper *)) + (EMOF.MetaMeasurement (id: 356) + (name NOJSPI) + (class (idref: 353)) + (description 'The number of invocations to methods from this JSP Page') + (isReadOnly true) + (longName 'Number of invocations to methods') + (type (primitive: Number)))) + (package (idref: 133)) + (superClass (idref: 202))) + (EMOF.Class (id: 357) + (name AbstractArgument) + (ownedAttribute + (EMOF.Property (id: 358) + (name isReceiver) + (class (idref: 357)) + (lower 0) + (type (primitive: Boolean))) + (EMOF.Property (id: 359) + (name position) + (class (idref: 357)) + (lower 0) + (type (primitive: Number)))) + (package (idref: 133)) + (superClass (idref: 205))) + (EMOF.Class (id: 360) + (name Literal) + (ownedAttribute + (EMOF.Property (id: 361) + (name content) + (class (idref: 360)) + (type (primitive: String))) + (EMOF.Property (id: 362) + (name occurrence) + (class (idref: 360)) + (lower 0) + (type (idref: 202)) + (upper *)) + (EMOF.MetaMeasurement (id: 363) + (name Len) + (class (idref: 360)) + (description 'Length of content string.') + (isReadOnly true) + (longName 'Length of content string.') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 364) + (name NOO) + (class (idref: 360)) + (isReadOnly true) + (longName 'Number of occurrences.') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 365) + (name occurrencesGroup) + (class (idref: 360)) + (longName Occurrences)) + (EMOF.MetaNavigation (id: 366) + (name modelOccurrencesGroup) + (class (idref: 360)) + (longName 'Occurrences in model'))) + (package (idref: 133)) + (superClass (idref: 205))) + (EMOF.Class (id: 367) + (name Comment) + (ownedAttribute + (EMOF.Property (id: 368) + (name belongsTo) + (class (idref: 367)) + (lower 0) + (type (idref: 134))) + (EMOF.Property (id: 369) + (name content) + (class (idref: 367)) + (lower 0) + (type (primitive: String)))) + (package (idref: 133)) + (superClass (idref: 205))) + (EMOF.Class (id: 370) + (name Include) + (ownedAttribute + (EMOF.Property (id: 371) + (name includedFile) + (class (idref: 370)) + (type (idref: 372))) + (EMOF.Property (id: 373) + (name includingFile) + (class (idref: 370)) + (type (idref: 372)))) + (package (idref: 133)) + (superClass (idref: 211))) + (EMOF.Class (id: 372) + (name File) + (ownedAttribute + (EMOF.Property (id: 374) + (name belongsTo) + (class (idref: 372)) + (lower 0) + (opposite (idref: 375)) + (type (idref: 376))) + (EMOF.MetaMeasurement (id: 377) + (name NoIC) + (class (idref: 372)) + (description 'The number of cloned fragments within the file') + (isReadOnly true) + (longName 'Number of Internal Clones') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 378) + (name ELOT) + (class (idref: 372)) + (description 'Number of empty lines of text') + (isReadOnly true) + (longName 'Empty lines of text') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 379) + (name NoIM) + (class (idref: 372)) + (description 'The number of original fragments duplicated internally') + (isReadOnly true) + (longName 'Number of Internal Multiplications') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 380) + (name NOCh) + (class (idref: 372)) + (description 'Number of characters in a file.') + (isReadOnly true) + (longName 'Number of characters') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 381) + (name ACh) + (class (idref: 372)) + (description 'Average number of characters per lline of text in a file.') + (isReadOnly true) + (longName 'Average number of characters') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 382) + (name NoDF) + (class (idref: 372)) + (description 'The number of distinct files that contain fragments duplicated in this file') + (isReadOnly true) + (longName 'Number of Files with Fragments Duplicated Here') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 383) + (name LOT) + (class (idref: 372)) + (description 'Number of lines of text which are not empty in a file ') + (isReadOnly true) + (longName 'Not empty lines of text') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 384) + (name KBYT) + (class (idref: 372)) + (description 'Number of kilo bytes in a file.') + (isReadOnly true) + (longName 'Number of kilo bytes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 385) + (name NoID) + (class (idref: 372)) + (description 'The number of pairs of duplicate fragments within the file') + (isReadOnly true) + (longName 'Number of Internal Duplications') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 386) + (name BYT) + (class (idref: 372)) + (description 'Number of bytes in a file.') + (isReadOnly true) + (longName 'Number of bytes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 387) + (name NoED) + (class (idref: 372)) + (description 'The number of pairs of duplicate fragments between this file and other files') + (isReadOnly true) + (longName 'Number of External Duplications') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 388) + (name NoEC) + (class (idref: 372)) + (description 'The number of fragments in this file cloned in other files') + (isReadOnly true) + (longName 'Number of External Clones') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 389) + (name TLOT) + (class (idref: 372)) + (description 'Number of lines of text') + (isReadOnly true) + (longName 'Total lines of text') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 390) + (name browseSource) + (category main) + (class (idref: 372))) + (EMOF.MetaAction (id: 391) + (name browseDupSource) + (category main) + (class (idref: 372))) + (EMOF.MetaNavigation (id: 392) + (name allInternalDuplications) + (class (idref: 372)) + (longName 'All internal duplications')) + (EMOF.MetaNavigation (id: 393) + (name allExternalDuplications) + (class (idref: 372)) + (longName 'All external duplications')) + (EMOF.MetaNavigation (id: 394) + (name allInternalMultiplications) + (class (idref: 372)) + (longName 'All internal multiplications')) + (EMOF.MetaNavigation (id: 395) + (name allExternalFiles) + (class (idref: 372)) + (longName 'All files with fragments duplicated here'))) + (package (idref: 133)) + (superClass (idref: 396))) + (EMOF.Class (id: 396) + (name AbstractFile) + (package (idref: 133)) + (superClass (idref: 202))) + (EMOF.Class (id: 376) + (name Folder) + (ownedAttribute + (EMOF.Property (id: 397) + (name belongsTo) + (class (idref: 376)) + (lower 0) + (opposite (idref: 398)) + (type (idref: 376))) + (EMOF.Property (id: 398) + (name folder) + (class (idref: 376)) + (isDerived true) + (lower 0) + (opposite (idref: 397)) + (type (idref: 376)) + (upper *)) + (EMOF.Property (id: 375) + (name file) + (class (idref: 376)) + (isDerived true) + (lower 0) + (opposite (idref: 374)) + (type (idref: 372)) + (upper *)) + (EMOF.MetaMeasurement (id: 399) + (name LOT) + (class (idref: 376)) + (description 'Number of lines of text which are not empty in a file ') + (isReadOnly true) + (longName 'Not empty lines of text') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 400) + (name foldersGroup) + (class (idref: 376)) + (longName Folders)) + (EMOF.MetaNavigation (id: 401) + (name filesGroup) + (class (idref: 376)) + (longName Files))) + (package (idref: 133)) + (superClass (idref: 396))) + (EMOF.Class (id: 402) + (name JSPAttribute) + (ownedAttribute + (EMOF.Property (id: 403) + (name belongsTo) + (class (idref: 402)) + (lower 0) + (type (idref: 353))) + (EMOF.Property (id: 404) + (name declaredType) + (class (idref: 402)) + (lower 0) + (type (idref: 79))) + (EMOF.Property (id: 405) + (name declaredClass) + (class (idref: 402)) + (lower 0) + (type (idref: 79)))) + (package (idref: 133)) + (superClass (idref: 202))) + (EMOF.Class (id: 406) + (name UnknownVariable) + (ownedAttribute + (EMOF.Property (id: 407) + (name usedInContext) + (class (idref: 406)) + (lower 0) + (type (idref: 166)))) + (package (idref: 133)) + (superClass (idref: 71))) + (EMOF.Class (id: 408) + (name AbstractLocalEntity) + (ownedAttribute + (EMOF.Property (id: 409) + (name belongsTo) + (class (idref: 408)) + (isComposite true) + (lower 0) + (type (idref: 166)))) + (package (idref: 133)) + (superClass (idref: 71))) + (EMOF.Class (id: 410) + (name GlobalVariable) + (ownedAttribute + (EMOF.Property (id: 411) + (name belongsTo) + (class (idref: 410)) + (lower 0) + (type (idref: 235)))) + (ownedOperation + (EMOF.MetaNavigation (id: 412) + (name containingNamespace) + (class (idref: 410)) + (longName 'Containing namespace'))) + (package (idref: 133)) + (superClass (idref: 71))) + (EMOF.Class (id: 413) + (name ImplicitVariable) + (ownedAttribute + (EMOF.Property (id: 414) + (name belongsTo) + (class (idref: 413)) + (lower 0) + (type (idref: 79)))) + (package (idref: 133)) + (superClass (idref: 71))) + (EMOF.Class (id: 415) + (name FormalParameter) + (ownedAttribute + (EMOF.Property (id: 416) + (name position) + (class (idref: 415)) + (lower 0) + (type (primitive: Number)))) + (package (idref: 133)) + (superClass (idref: 408))) + (EMOF.Class (id: 417) + (name LocalVariable) + (package (idref: 133)) + (superClass (idref: 408))) + (EMOF.Class (id: 418) + (name ExpressionArgument) + (package (idref: 133)) + (superClass (idref: 357))) + (EMOF.Class (id: 419) + (name AccessArgument) + (package (idref: 133)) + (superClass (idref: 357))))) +(EMOF.Package (id: 420) + (name Moose) + (ownedType + (EMOF.Class (id: 421) + (name Element) + (ownedOperation + (EMOF.MetaAction (id: 422) + (name openEntityInspector) + (category main) + (class (idref: 421))) + (EMOF.MetaAction (id: 423) + (name inspectEntity) + (category main) + (class (idref: 421))) + (EMOF.MetaAction (id: 424) + (name openMondrianEditor) + (category main) + (class (idref: 421)))) + (package (idref: 420))) + (EMOF.Class (id: 7) + (name AbstractEntity) + (ownedAttribute + (EMOF.Property (id: 425) + (name mooseModel) + (class (idref: 7)) + (isDerived true) + (lower 0) + (opposite (idref: 426)) + (type (idref: 427)))) + (ownedOperation + (EMOF.MetaAction (id: 428) + (name openSearchingMondrianEditor) + (category main) + (class (idref: 7))) + (EMOF.MetaExpression (id: 429) + (name uniqueNameMatchesExpression) + (class (idref: 7)))) + (package (idref: 420)) + (superClass (idref: 421))) + (EMOF.Class (id: 427) + (name Model) + (ownedAttribute + (EMOF.Property (id: 430) + (name sourceLanguage) + (class (idref: 427)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 431) + (name name) + (class (idref: 427)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 426) + (name entity) + (class (idref: 427)) + (lower 0) + (opposite (idref: 425)) + (type (idref: 7)) + (upper *)) + (EMOF.MetaMeasurement (id: 434) + (name NOCls) + (class (idref: 427)) + (description 'The total number of model (non stub) classes') + (isReadOnly true) + (longName 'Number of model (non stub) classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 435) + (name NOM) + (class (idref: 427)) + (description 'The total number of model (non stub) methods') + (isReadOnly true) + (longName 'Number of model (non stub) methods') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 436) + (name createTraceAssociations) + (category main) + (class (idref: 427))) + (EMOF.MetaAction (id: 437) + (name importSmalltalkAndScrapeTests) + (category main) + (class (idref: 427))) + (EMOF.MetaAction (id: 438) + (name importChroniaCVSLog) + (category 'Import / Export') + (class (idref: 427))) + (EMOF.MetaAction (id: 439) + (name showClassCorrelation) + (category 'Hapax Analysis') + (class (idref: 427))) + (EMOF.MetaAction (id: 440) + (name rename) + (category Utilities) + (class (idref: 427))) + (EMOF.MetaAction (id: 441) + (name importMSEFromFile) + (category 'Import / Export') + (class (idref: 427))) + (EMOF.MetaAction (id: 442) + (name importSmalltalk) + (category 'Import / Export') + (class (idref: 427))) + (EMOF.MetaAction (id: 443) + (name showDistributionMap) + (category 'Hapax Analysis') + (class (idref: 427))) + (EMOF.MetaAction (id: 444) + (name importFileSystem) + (category 'Import / Export') + (class (idref: 427))) + (EMOF.MetaAction (id: 445) + (name exportMSEToFile) + (category 'Import / Export') + (class (idref: 427))) + (EMOF.MetaAction (id: 446) + (name initializeAllMofDescriptions) + (category Utilities) + (class (idref: 427))) + (EMOF.MetaAction (id: 447) + (name importMSEFromFolder) + (category 'Import / Export') + (class (idref: 427))) + (EMOF.MetaNavigation (id: 448) + (name allJSPInvocations) + (class (idref: 427)) + (longName 'All JSP Invocations')) + (EMOF.MetaNavigation (id: 449) + (name allAliases) + (class (idref: 427)) + (longName 'All aliases')) + (EMOF.MetaNavigation (id: 450) + (name allChroniaFileVersions) + (class (idref: 427)) + (longName 'All Chronia file versions')) + (EMOF.MetaNavigation (id: 451) + (name allClasses) + (class (idref: 427)) + (longName 'All classes')) + (EMOF.MetaNavigation (id: 452) + (name allApplicationActivations) + (class (idref: 427)) + (longName 'All application activations')) + (EMOF.MetaNavigation (id: 453) + (name allInheritanceDefinitions) + (class (idref: 427)) + (longName 'All inheritances')) + (EMOF.MetaNavigation (id: 454) + (name allFolders) + (class (idref: 427)) + (longName 'All folders')) + (EMOF.MetaNavigation (id: 455) + (name allModelClasses) + (class (idref: 427)) + (longName 'All system classes')) + (EMOF.MetaNavigation (id: 456) + (name allMultiplications) + (class (idref: 427)) + (longName 'All multiplications')) + (EMOF.MetaNavigation (id: 457) + (name allImplicitVariables) + (class (idref: 427)) + (longName 'All implicit variables')) + (EMOF.MetaNavigation (id: 458) + (name allChroniaAuthors) + (class (idref: 427)) + (longName 'All Chronia authors')) + (EMOF.MetaNavigation (id: 459) + (name allNamedAliases) + (class (idref: 427)) + (longName 'All named aliases')) + (EMOF.MetaNavigation (id: 460) + (name allInvocations) + (class (idref: 427)) + (longName 'All invocations')) + (EMOF.MetaNavigation (id: 461) + (name allModels) + (class (idref: 427)) + (longName 'All models')) + (EMOF.MetaNavigation (id: 462) + (name allDuplications) + (class (idref: 427)) + (longName 'All duplications')) + (EMOF.MetaNavigation (id: 463) + (name allNamespaces) + (class (idref: 427)) + (longName 'All namesapces')) + (EMOF.MetaNavigation (id: 464) + (name allFunctions) + (class (idref: 427)) + (longName 'All functions')) + (EMOF.MetaNavigation (id: 465) + (name allPackages) + (class (idref: 427)) + (longName 'All packages')) + (EMOF.MetaNavigation (id: 466) + (name allAccesses) + (class (idref: 427)) + (longName 'All accesses')) + (EMOF.MetaNavigation (id: 467) + (name allChroniaProjects) + (class (idref: 427)) + (longName 'All Chronia projects')) + (EMOF.MetaNavigation (id: 468) + (name allTracePackageAssociations) + (class (idref: 427)) + (longName 'All trace package associations')) + (EMOF.MetaNavigation (id: 469) + (name allArgumentAliases) + (class (idref: 427)) + (longName 'All argument aliases')) + (EMOF.MetaNavigation (id: 470) + (name hapaxModelNavigation) + (class (idref: 427)) + (longName 'Hapax model')) + (EMOF.MetaNavigation (id: 471) + (name allMethods) + (class (idref: 427)) + (longName 'All methods')) + (EMOF.MetaNavigation (id: 472) + (name allTraceClassAssociations) + (class (idref: 427)) + (longName 'All trace class associations')) + (EMOF.MetaNavigation (id: 473) + (name allActivations) + (class (idref: 427)) + (longName 'All activations')) + (EMOF.MetaNavigation (id: 474) + (name allChroniaCommits) + (class (idref: 427)) + (longName 'All Chronia commits')) + (EMOF.MetaNavigation (id: 475) + (name allInstances) + (class (idref: 427)) + (longName 'All instances')) + (EMOF.MetaNavigation (id: 476) + (name allAttributes) + (class (idref: 427)) + (longName 'All attributes')) + (EMOF.MetaNavigation (id: 477) + (name allComments) + (class (idref: 427)) + (longName 'All comments')) + (EMOF.MetaNavigation (id: 478) + (name allGlobalVariables) + (class (idref: 427)) + (longName 'All global variables')) + (EMOF.MetaNavigation (id: 479) + (name allTraceMethodAssociations) + (class (idref: 427)) + (longName 'All trace method associations')) + (EMOF.MetaNavigation (id: 480) + (name formalParametersGroup) + (class (idref: 427)) + (longName 'All parameters')) + (EMOF.MetaNavigation (id: 481) + (name allJSPPages) + (class (idref: 427)) + (longName 'All JSP Pages')) + (EMOF.MetaNavigation (id: 482) + (name localVariablesGroup) + (class (idref: 427)) + (longName 'All local variables')) + (EMOF.MetaNavigation (id: 483) + (name allTraces) + (class (idref: 427)) + (longName 'All traces')) + (EMOF.MetaNavigation (id: 484) + (name allFiles) + (class (idref: 427)) + (longName 'All files')) + (EMOF.MetaNavigation (id: 485) + (name allJSPAttributes) + (class (idref: 427)) + (longName 'All JSP Attributes')) + (EMOF.MetaNavigation (id: 486) + (name allLiterals) + (class (idref: 427)) + (longName 'All literals')) + (EMOF.MetaNavigation (id: 487) + (name allChroniaFileHistories) + (class (idref: 427)) + (longName 'All Chronia file histories')) + (EMOF.MetaNavigation (id: 488) + (name allModelHistories) + (class (idref: 427)) + (longName 'All model histories')) + (EMOF.MetaNavigation (id: 489) + (name allUnknownVariables) + (class (idref: 427)) + (longName 'All unknown variables')) + (EMOF.BlockNavigation (id: 490) + (name 'Any Moose.Model') + (class (idref: 427)) + (longName 'Any Moose.Model'))) + (package (idref: 420)) + (superClass (idref: 7))) + (EMOF.Class (id: 491) + (name AbstractGroup) + (ownedAttribute + (EMOF.Property (id: 492) + (name entity) + (class (idref: 491)) + (lower 0) + (type (idref: 493)) + (upper *)) + (EMOF.MetaMeasurement (id: 494) + (name numberOfItems) + (class (idref: 491)) + (isReadOnly true) + (longName numberOfItems) + (type (primitive: Number)))) + (package (idref: 420)) + (superClass (idref: 7))) + (EMOF.Class (id: 495) + (name AbstractHistory) + (ownedAttribute + (EMOF.MetaMeasurement (id: 496) + (name AGE) + (class (idref: 495)) + (description 'Age of the history') + (isReadOnly true) + (longName Age) + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 497) + (name viewSimpleEvolutionMatrix) + (category Mondrian) + (class (idref: 495)))) + (package (idref: 420)) + (superClass (idref: 7))) + (EMOF.Class (id: 498) + (name AbstractVersion) + (package (idref: 420)) + (superClass (idref: 7))) + (EMOF.Class (id: 499) + (name StatelessEntity) + (package (idref: 420)) + (superClass (idref: 7))) + (EMOF.Class (id: 88) + (name Group) + (ownedOperation + (EMOF.MetaAction (id: 500) + (name rename) + (category main) + (class (idref: 88))) + (EMOF.MetaAction (id: 501) + (name openGroupEditor) + (category main) + (class (idref: 88))) + (EMOF.MetaAction (id: 502) + (name viewNameOccurences) + (category Mondrian) + (class (idref: 88)))) + (package (idref: 420)) + (superClass (idref: 491))) + (EMOF.Class (id: 503) + (name FolderGroup) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 504) + (name PackageGroup) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 505) + (name NamespaceGroup) + (ownedOperation + (EMOF.MetaAction (id: 506) + (name viewNamespaceHierarchy) + (category Mondrian) + (class (idref: 505))) + (EMOF.MetaAction (id: 507) + (name viewNamespaceComplexity) + (category Mondrian) + (class (idref: 505)))) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 508) + (name JSPPageGroup) + (ownedOperation + (EMOF.MetaAction (id: 509) + (name viewLinksToClasses) + (category Mondrian) + (class (idref: 508)))) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 510) + (name ClassGroup) + (ownedAttribute + (EMOF.MetaMeasurement (id: 511) + (name 'A_NOM') + (class (idref: 510)) + (description 'Average number of methods per class') + (isReadOnly true) + (longName 'Average number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 512) + (name 'A_NOA') + (class (idref: 510)) + (description 'Average number of attributes per class') + (isReadOnly true) + (longName 'Average number of attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 513) + (name 'S_WLOC') + (class (idref: 510)) + (description 'Total number of lines of code') + (isReadOnly true) + (longName 'Total number of lines of code') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 514) + (name 'A_WLOC') + (class (idref: 510)) + (description 'Average number of lines of code per class') + (isReadOnly true) + (longName 'Average number of lines of code') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 515) + (name 'A_WNOS') + (class (idref: 510)) + (description 'Average number of statements per class') + (isReadOnly true) + (longName 'Average number of statements') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 516) + (name viewMethodInvocation) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 517) + (name viewUmlWithMacro) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 518) + (name viewMetricView) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 519) + (name viewMethodsDistributionMap) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 520) + (name viewSystemComplexity) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 521) + (name viewUmlWithShape) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 522) + (name viewSystemComplexityWithCalledClasses) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 523) + (name viewScreenFillingSystemComplexity) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 524) + (name viewSpacedSystemComplexity) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 525) + (name viewSystemComplexityWithSuperBlueprints) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 526) + (name viewTreeMap) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 527) + (name viewBarChart) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 528) + (name computeDuplication) + (category SmallDude) + (class (idref: 510))) + (EMOF.MetaAction (id: 529) + (name viewDuplicationComplexity) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 530) + (name viewSystemComplexityAsGraph) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 531) + (name viewSimpleUml) + (category Mondrian) + (class (idref: 510))) + (EMOF.MetaAction (id: 532) + (name viewBlueprintComplexity) + (category Mondrian) + (class (idref: 510)))) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 533) + (name FileGroup) + (ownedOperation + (EMOF.MetaAction (id: 534) + (name computeDuplicationOnCVSAnnotated) + (category SmallDude) + (class (idref: 533))) + (EMOF.MetaAction (id: 535) + (name computeDuplication) + (category SmallDude) + (class (idref: 533))) + (EMOF.MetaAction (id: 536) + (name 'computeDuplicationOnCVSAnnotated_HighPrec') + (category SmallDude) + (class (idref: 533))) + (EMOF.MetaNavigation (id: 537) + (name allMultiplications) + (class (idref: 533)) + (longName 'All multiplications'))) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 538) + (name MethodGroup) + (ownedAttribute + (EMOF.MetaMeasurement (id: 539) + (name 'A_NOP') + (class (idref: 538)) + (description 'Average number of parameters per methods') + (isReadOnly true) + (longName 'Average number of parameters') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 540) + (name 'A_LOC') + (class (idref: 538)) + (description 'Average number of lines of code per methods') + (isReadOnly true) + (longName 'Average number of lines of code') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 541) + (name 'A_NI') + (class (idref: 538)) + (description 'Average number of invocations per methods') + (isReadOnly true) + (longName 'Average number of invocations') + (type (primitive: Number)))) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 542) + (name CoChangePattern) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 543) + (name HistoryGroup) + (ownedOperation + (EMOF.MetaAction (id: 544) + (name viewSimpleEvolutionMatrix) + (category Mondrian) + (class (idref: 543)))) + (package (idref: 420)) + (superClass (idref: 88))) + (EMOF.Class (id: 545) + (name NamespaceHistoryGroup) + (package (idref: 420)) + (superClass (idref: 543))) + (EMOF.Class (id: 546) + (name ClassHistoryGroup) + (ownedOperation + (EMOF.MetaAction (id: 547) + (name viewHierarchyEvolution) + (category Mondrian) + (class (idref: 546))) + (EMOF.MetaAction (id: 548) + (name viewEvolutionMatrix) + (category Mondrian) + (class (idref: 546)))) + (package (idref: 420)) + (superClass (idref: 543))) + (EMOF.Class (id: 549) + (name MethodHistoryGroup) + (package (idref: 420)) + (superClass (idref: 543))) + (EMOF.Class (id: 550) + (name InvocationHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 551) + (name AccessHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 552) + (name ClassHierarchyHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 553) + (name CoChangeHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 554) + (name AttributeHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 555) + (name FileHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 556) + (name ClassHistory) + (ownedAttribute + (EMOF.MetaMeasurement (id: 557) + (name 'AE_NOM') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'All latest evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 558) + (name 'E_WNOSper5') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Evolution of number of statements') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 559) + (name 'R_WLOC') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Removed number of LOC') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 560) + (name 'E_NOA') + (class (idref: 556)) + (description 'The sum of the number of attribute added or removed in subsequent versions') + (isReadOnly true) + (longName 'Evolution of number of attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 561) + (name 'A_WLOC') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Added number of LOC') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 562) + (name 'AEE_NOM') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'All earliest evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 563) + (name 'S_NOM') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Stability of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 564) + (name 'E_WNOS') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Evolution of number of statements') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 565) + (name 'LE_NOM') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Latest evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 566) + (name 'EE_NOM') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Earliest evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 567) + (name 'A_WNOS') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Added number of statements') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 568) + (name 'S_NOA') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Stability of number of attributes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 569) + (name 'E_NOM') + (class (idref: 556)) + (description 'The sum of the number of methods added or removed in subsequent versions') + (isReadOnly true) + (longName 'Evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 570) + (name 'ALE_NOM') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'All latest evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 571) + (name 'Last_NOM') + (class (idref: 556)) + (description 'The last number of methods') + (isReadOnly true) + (longName 'Evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 572) + (name 'R_WNOS') + (class (idref: 556)) + (description ) + (isReadOnly true) + (longName 'Removed number of statements') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 573) + (name 'E_WLOC') + (class (idref: 556)) + (description 'The sum of the number of lines of code added or removed in subsequent versions') + (isReadOnly true) + (longName 'Evolution of number of lines of code') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaExpression (id: 574) + (name removedHistoryExpression) + (class (idref: 556))) + (EMOF.MetaExpression (id: 575) + (name lateBornHistoryExpression) + (class (idref: 556)))) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 576) + (name MethodHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 577) + (name ModelHistory) + (ownedOperation + (EMOF.MetaNavigation (id: 578) + (name allClassHistories) + (class (idref: 577)) + (longName 'All class histories')) + (EMOF.MetaNavigation (id: 579) + (name allNamespaceHistories) + (class (idref: 577)) + (longName 'All namespace histories')) + (EMOF.MetaNavigation (id: 580) + (name allPackageHistories) + (class (idref: 577)) + (longName 'All package histories')) + (EMOF.MetaNavigation (id: 581) + (name allAttributeHistories) + (class (idref: 577)) + (longName 'All attribute histories')) + (EMOF.MetaNavigation (id: 582) + (name allMethodHistories) + (class (idref: 577)) + (longName 'All method histories')) + (EMOF.MetaNavigation (id: 583) + (name allInheritanceDefinitionHistories) + (class (idref: 577)) + (longName 'All inheritance definition histories'))) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 584) + (name InheritanceDefinitionHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 585) + (name NamespaceHistory) + (ownedAttribute + (EMOF.MetaMeasurement (id: 586) + (name 'E_NOCls') + (class (idref: 585)) + (description 'The sum of the number of classes added or removed in subsequent versions') + (isReadOnly true) + (longName 'Evolution of number of classes') + (type (primitive: Number)))) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 587) + (name PackageHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 588) + (name FolderHistory) + (package (idref: 420)) + (superClass (idref: 495))) + (EMOF.Class (id: 589) + (name CoChangeVersion) + (package (idref: 420)) + (superClass (idref: 498))) + (EMOF.Class (id: 590) + (name EntityVersion) + (package (idref: 420)) + (superClass (idref: 498))) + (EMOF.Class (id: 591) + (name MethodVersion) + (ownedAttribute + (EMOF.MetaMeasurement (id: 592) + (name 'VE_CYCLO') + (class (idref: 591)) + (description 'Version addition of number of methods') + (isReadOnly true) + (longName 'Version addition of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 593) + (name 'VE_NOS') + (class (idref: 591)) + (description 'Version addition of number of methods') + (isReadOnly true) + (longName 'Version addition of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 594) + (name 'VA_CYCLO') + (class (idref: 591)) + (description 'Version addition of number of methods') + (isReadOnly true) + (longName 'Version addition of number of methods') + (type (primitive: Number)))) + (package (idref: 420)) + (superClass (idref: 590))) + (EMOF.Class (id: 595) + (name NamespaceVersion) + (ownedAttribute + (EMOF.MetaMeasurement (id: 596) + (name 'VE_NOCls') + (class (idref: 595)) + (description 'Version evolution of number of classes') + (isReadOnly true) + (longName 'Version evolution of number of classes') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 597) + (name 'VA_NOM') + (class (idref: 595)) + (description 'Version addition of number of methods') + (isReadOnly true) + (longName 'Version addition of number of methods') + (type (primitive: Number)))) + (package (idref: 420)) + (superClass (idref: 590))) + (EMOF.Class (id: 598) + (name ClassVersion) + (ownedAttribute + (EMOF.MetaMeasurement (id: 599) + (name 'VE_CYCLO') + (class (idref: 598)) + (description 'Version evolution of number of methods') + (isReadOnly true) + (longName 'Version evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 600) + (name 'VE_NOS') + (class (idref: 598)) + (description 'Version evolution of number of methods') + (isReadOnly true) + (longName 'Version evolution of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 601) + (name 'VA_NOM') + (class (idref: 598)) + (description 'Version addition of number of methods') + (isReadOnly true) + (longName 'Version addition of number of methods') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 602) + (name 'VE_NOM') + (class (idref: 598)) + (description 'Version evolution of number of methods') + (isReadOnly true) + (longName 'Version evolution of number of methods') + (type (primitive: Number)))) + (package (idref: 420)) + (superClass (idref: 590))))) +(EMOF.Package (id: 603) + (name Chronia) + (ownedType + (EMOF.PrimitiveType (id: 604) + (name Timestamp) + (decodeExpression (value: '[:t1 | Timestamp readFrom: t1]')) + (encodeExpression (value: ' +[:t1 :t2 | +[t1 isKindOf: Timestamp] assert. +t1 printOn: t2]')) + (package (idref: 603))) + (EMOF.Class (id: 605) + (name AbstractChroniaEntity) + (package (idref: 603)) + (superClass (idref: 7))) + (EMOF.Class (id: 606) + (name AbstractChroniaGroup) + (ownedOperation + (EMOF.MetaAction (id: 607) + (name openOwnershipMap) + (category OwnershipMap) + (class (idref: 606))) + (EMOF.MetaAction (id: 608) + (name openOwnershipMapClustered) + (category OwnershipMap) + (class (idref: 606)))) + (package (idref: 603)) + (superClass (idref: 88))) + (EMOF.Class (id: 609) + (name FileVersionGroup) + (package (idref: 603)) + (superClass (idref: 606))) + (EMOF.Class (id: 610) + (name FileHistoryGroup) + (ownedAttribute + (EMOF.MetaMeasurement (id: 611) + (name encapsulation) + (class (idref: 610)) + (description 'The encapsulation over all folders of the project') + (isReadOnly true) + (longName 'Encapsulation over all folders') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 612) + (name distribution) + (class (idref: 610)) + (description 'The distribution over all folders of the project') + (isReadOnly true) + (longName 'Distribution over all folders') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 613) + (name groupByAllFolders) + (class (idref: 610)) + (longName 'File histories grouped by folders')) + (EMOF.MetaNavigation (id: 614) + (name groupByFileType) + (class (idref: 610)) + (longName 'File histories grouped by file type')) + (EMOF.MetaNavigation (id: 615) + (name groupByParentFolder) + (class (idref: 610)) + (longName 'File histories grouped by parent folders'))) + (package (idref: 603)) + (superClass (idref: 606))) + (EMOF.Class (id: 616) + (name FileHistoryGroupGroup) + (ownedOperation + (EMOF.MetaAction (id: 617) + (name sortGroupsByPath) + (category Groups) + (class (idref: 616))) + (EMOF.MetaAction (id: 618) + (name sortGroupsBySize) + (category Groups) + (class (idref: 616)))) + (package (idref: 603)) + (superClass (idref: 606))) + (EMOF.Class (id: 619) + (name CommitGroup) + (package (idref: 603)) + (superClass (idref: 606))) + (EMOF.Class (id: 620) + (name Commit) + (ownedAttribute + (EMOF.Property (id: 621) + (name startTime) + (class (idref: 620)) + (lower 0) + (type (primitive: Chronia.Timestamp))) + (EMOF.Property (id: 622) + (name project) + (class (idref: 620)) + (lower 0) + (opposite (idref: 623)) + (type (idref: 624))) + (EMOF.Property (id: 625) + (name endTime) + (class (idref: 620)) + (lower 0) + (type (primitive: Chronia.Timestamp))) + (EMOF.Property (id: 626) + (name author) + (class (idref: 620)) + (isDerived true) + (lower 0) + (opposite (idref: 627)) + (type (idref: 628))) + (EMOF.MetaMeasurement (id: 629) + (name Tstart) + (class (idref: 620)) + (description 'The start time of this commit') + (isReadOnly true) + (longName 'start time of commit') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 630) + (name BC) + (class (idref: 620)) + (description 'Number of files that were added during this commit') + (isReadOnly true) + (longName 'birth count') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 631) + (name RC) + (class (idref: 620)) + (description 'Number of files that were readded (but previously deleted) during this commit') + (isReadOnly true) + (longName 'resurrection count') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 632) + (name DC) + (class (idref: 620)) + (description 'Number of files that were deleted during this commit') + (isReadOnly true) + (longName 'death count') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 633) + (name Tend) + (class (idref: 620)) + (description 'The end time of this commit') + (isReadOnly true) + (longName 'end time of commit') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 634) + (name NoFV) + (class (idref: 620)) + (description 'Total number of file versions of this commit') + (isReadOnly true) + (longName 'number of file versions') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 635) + (name Tdelta) + (class (idref: 620)) + (description 'How long this commit took in seconds') + (isReadOnly true) + (longName 'duration in seconds') + (type (primitive: Number)))) + (package (idref: 603)) + (superClass (idref: 605))) + (EMOF.Class (id: 624) + (name Project) + (ownedAttribute + (EMOF.Property (id: 636) + (name fileVersion) + (class (idref: 624)) + (isDerived true) + (lower 0) + (type (idref: 637)) + (upper *)) + (EMOF.Property (id: 638) + (name fileHistory) + (class (idref: 624)) + (lower 0) + (opposite (idref: 639)) + (type (idref: 640)) + (upper *)) + (EMOF.Property (id: 623) + (name commit) + (class (idref: 624)) + (lower 0) + (opposite (idref: 622)) + (type (idref: 620)) + (upper *)) + (EMOF.Property (id: 641) + (name author) + (class (idref: 624)) + (lower 0) + (opposite (idref: 642)) + (type (idref: 628)) + (upper *)) + (EMOF.MetaMeasurement (id: 643) + (name ProjectName) + (class (idref: 624)) + (description 'The name this project got when it was born') + (isReadOnly true) + (longName 'Name of this project') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 644) + (name 'p2080') + (class (idref: 624)) + (description 'proof whether the developers represent 20% of the authors') + (isReadOnly true) + (longName 'twenty eighty proof') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 645) + (name NoC) + (class (idref: 624)) + (description 'The number of commits that were made to this project') + (isReadOnly true) + (longName 'number of commits') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 646) + (name NoFH) + (class (idref: 624)) + (description 'Total number of file histories of this project') + (isReadOnly true) + (longName 'number of file histories') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 647) + (name NoA) + (class (idref: 624)) + (description 'Total number of authors that contributed to this project') + (isReadOnly true) + (longName 'Number of authors') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 648) + (name NoFV) + (class (idref: 624)) + (description 'Total number of file versions of this project') + (isReadOnly true) + (longName 'number of file versions') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 649) + (name NoD) + (class (idref: 624)) + (description 'The number of authors that introduced more than 80% of the code') + (isReadOnly true) + (longName 'number of developers') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 650) + (name openEvolutionRadar) + (category main) + (class (idref: 624)))) + (package (idref: 603)) + (superClass (idref: 605))) + (EMOF.Class (id: 637) + (name FileVersion) + (ownedAttribute + (EMOF.Property (id: 651) + (name basicFileVersion) + (class (idref: 637)) + (lower 0) + (type (idref: 652))) + (EMOF.Property (id: 653) + (name fileHistory) + (class (idref: 637)) + (isDerived true) + (lower 0) + (opposite (idref: 654)) + (type (idref: 640))) + (EMOF.Property (id: 655) + (name commit) + (class (idref: 637)) + (lower 0) + (type (idref: 620))) + (EMOF.MetaMeasurement (id: 656) + (name NoRL) + (class (idref: 637)) + (description 'Number of removed lines') + (isReadOnly true) + (longName 'Number of removed lines') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 657) + (name NoAL) + (class (idref: 637)) + (description 'Total number of added lines') + (isReadOnly true) + (longName 'Number of added lines') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 658) + (name Owner) + (class (idref: 637)) + (description 'The author that owns the most lines') + (isReadOnly true) + (longName 'owner of this version') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 659) + (name REV) + (class (idref: 637)) + (description 'revision number of this file version') + (isReadOnly true) + (longName 'Revision number') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 660) + (name NC) + (class (idref: 637)) + (description 'The new added lines compared to the previous version') + (isReadOnly true) + (longName 'New added content') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 661) + (name ChD) + (class (idref: 637)) + (description 'How "big" the change was') + (isReadOnly true) + (longName 'change density') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 662) + (name NoL) + (class (idref: 637)) + (description 'Total number of lines') + (isReadOnly true) + (longName 'Number of lines') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 663) + (name AN) + (class (idref: 637)) + (description 'Name of the author that commited this file version') + (isReadOnly true) + (longName 'author name') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaExpression (id: 664) + (name pathStartsWith) + (class (idref: 637))) + (EMOF.MetaExpression (id: 665) + (name pathEndsWith) + (class (idref: 637))) + (EMOF.MetaExpression (id: 666) + (name commitedBetween) + (class (idref: 637)))) + (package (idref: 603)) + (superClass (idref: 605))) + (EMOF.Class (id: 652) + (name CvsFileVersion) + (ownedAttribute + (EMOF.Property (id: 667) + (name stickyTag) + (class (idref: 652)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 668) + (name history) + (class (idref: 652)) + (lower 0) + (opposite (idref: 669)) + (type (idref: 670))) + (EMOF.Property (id: 671) + (name change) + (class (idref: 652)) + (lower 0) + (type (idref: 672))) + (EMOF.Property (id: 673) + (name lineSize) + (class (idref: 652)) + (lower 0) + (type (primitive: Number))) + (EMOF.Property (id: 674) + (name revision) + (class (idref: 652)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 675) + (name timestamp) + (class (idref: 652)) + (lower 0) + (type (idref: 676))) + (EMOF.Property (id: 677) + (name comment) + (class (idref: 652)) + (lower 0) + (type (idref: 678))) + (EMOF.Property (id: 679) + (name state) + (class (idref: 652)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 680) + (name author) + (class (idref: 652)) + (lower 0) + (type (primitive: String)))) + (package (idref: 603)) + (superClass (idref: 681))) + (EMOF.Class (id: 681) + (name CvsFile) + (package (idref: 603)) + (superClass (idref: 682))) + (EMOF.Class (id: 682) + (name CvsEntry) + (ownedAttribute + (EMOF.Property (id: 683) + (name path) + (class (idref: 682)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 684) + (name parent) + (class (idref: 682)) + (lower 0) + (type (idref: 685)))) + (package (idref: 603)) + (superClass (idref: 686))) + (EMOF.Class (id: 685) + (name CvsDirectory) + (ownedAttribute + (EMOF.Property (id: 687) + (name entry) + (class (idref: 685)) + (lower 0) + (type (idref: 682)) + (upper *))) + (package (idref: 603)) + (superClass (idref: 682))) + (EMOF.Class (id: 670) + (name CvsFileHistory) + (ownedAttribute + (EMOF.Property (id: 669) + (name version) + (class (idref: 670)) + (lower 0) + (opposite (idref: 668)) + (type (idref: 652)) + (upper *))) + (package (idref: 603)) + (superClass (idref: 681))) + (EMOF.Class (id: 672) + (name CvsFileChange) + (ownedAttribute + (EMOF.Property (id: 688) + (name addedLinesSize) + (class (idref: 672)) + (lower 0) + (type (primitive: Number))) + (EMOF.Property (id: 689) + (name removedLinesSize) + (class (idref: 672)) + (lower 0) + (type (primitive: Number)))) + (package (idref: 603)) + (superClass (idref: 686))) + (EMOF.Class (id: 640) + (name FileHistory) + (ownedAttribute + (EMOF.Property (id: 639) + (name project) + (class (idref: 640)) + (lower 0) + (opposite (idref: 638)) + (type (idref: 624))) + (EMOF.Property (id: 654) + (name fileVersion) + (class (idref: 640)) + (lower 0) + (opposite (idref: 653)) + (type (idref: 637)) + (upper *)) + (EMOF.MetaMeasurement (id: 690) + (name SoAL) + (class (idref: 640)) + (description 'Total number of added lines summed over all versions of this file history') + (isReadOnly true) + (longName 'Sum of added lines') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 691) + (name RC) + (class (idref: 640)) + (description 'Number of times this file was readded (but previously deleted) during its life') + (isReadOnly true) + (longName 'resurrection count') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 692) + (name NoFV) + (class (idref: 640)) + (description 'Total number of file versions of this file') + (isReadOnly true) + (longName 'number of file versions') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 693) + (name DC) + (class (idref: 640)) + (description 'Number of times this file was deleted during its life') + (isReadOnly true) + (longName 'death count') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 694) + (name Owner) + (class (idref: 640)) + (description 'The owner of the latest version') + (isReadOnly true) + (longName 'owner of this file history') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 695) + (name SoRL) + (class (idref: 640)) + (description 'Total number of removed lines summed over all versions of this file history') + (isReadOnly true) + (longName 'Sum of removed lines') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 696) + (name NoA) + (class (idref: 640)) + (description 'Total number of authors that contributed to this file') + (isReadOnly true) + (longName 'Number of authors') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaExpression (id: 697) + (name javaAndJspFiles) + (class (idref: 640)))) + (package (idref: 603)) + (superClass (idref: 605))) + (EMOF.Class (id: 628) + (name Author) + (ownedAttribute + (EMOF.Property (id: 698) + (name name) + (class (idref: 628)) + (lower 0) + (type (primitive: String))) + (EMOF.Property (id: 642) + (name project) + (class (idref: 628)) + (lower 0) + (opposite (idref: 641)) + (type (idref: 624))) + (EMOF.Property (id: 627) + (name commit) + (class (idref: 628)) + (lower 0) + (opposite (idref: 626)) + (type (idref: 620)) + (upper *)) + (EMOF.MetaMeasurement (id: 699) + (name AuthorName) + (class (idref: 628)) + (description 'The name of the author') + (isReadOnly true) + (longName 'author name') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 700) + (name EOF) + (class (idref: 628)) + (description 'The encapsulation of all files ever owned by this author over the whole project') + (isReadOnly true) + (longName 'encapsulation of owned files over system') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 701) + (name DOF) + (class (idref: 628)) + (description 'The distribution of all files ever owned by this author over the whole project') + (isReadOnly true) + (longName 'distribution of owned files over system') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 702) + (name ESOF) + (class (idref: 628)) + (description 'The encapsulation of all files this author is still owning at the project end') + (isReadOnly true) + (longName 'encapsulation of still owning files over system') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 703) + (name NSOF) + (class (idref: 628)) + (description 'The number of files this author is still owning') + (isReadOnly true) + (longName 'number of still owning files') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 704) + (name NoC) + (class (idref: 628)) + (description 'The number of commits this author has in this project') + (isReadOnly true) + (longName 'number of commits') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 705) + (name DTF) + (class (idref: 628)) + (description 'The distribution of all files ever touched by this author over the whole project') + (isReadOnly true) + (longName 'distribution of touched files over system') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 706) + (name NTF) + (class (idref: 628)) + (description 'The number of files this author has ever modified') + (isReadOnly true) + (longName 'number of touched files') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 707) + (name IoS) + (class (idref: 628)) + (description 'Total amount of content (~new lines) this author added to the system') + (isReadOnly true) + (longName 'impact on system') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 708) + (name NOF) + (class (idref: 628)) + (description 'The number of files this author has ever owned') + (isReadOnly true) + (longName 'number of owned files') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 709) + (name color) + (class (idref: 628)) + (description 'The name of the color that is used to colorize the commits of this author') + (isReadOnly true) + (longName 'name of the color') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 710) + (name DSOF) + (class (idref: 628)) + (description 'The distribution of all files this author is still owning at the project end') + (isReadOnly true) + (longName 'distribution of still owning files over system') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 711) + (name ETF) + (class (idref: 628)) + (description 'The encapsulation of all files ever touched by this author over the whole project') + (isReadOnly true) + (longName 'encapsulation of touched files over system') + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 712) + (name openTouchedFileHistories) + (category 'Open FileHistories') + (class (idref: 628))) + (EMOF.MetaAction (id: 713) + (name openStillOwningFileHistories) + (category 'Open FileHistories') + (class (idref: 628))) + (EMOF.MetaAction (id: 714) + (name openOwnedFileHistories) + (category 'Open FileHistories') + (class (idref: 628)))) + (package (idref: 603)) + (superClass (idref: 605))) + (EMOF.Class (id: 715) + (name FileHistoryProxy) + (package (idref: 603)) + (superClass (idref: 605))))) +(EMOF.Package (id: 716) + (name Smalltalk) + (nestedPackage + (EMOF.Package (id: 717) + (name Hapax) + (nestingPackage (idref: 716)) + (ownedType + (EMOF.Class (id: 718) + (name HapaxElement) + (package (idref: 717)) + (superClass (idref: 7))) + (EMOF.Class (id: 719) + (name TestDummy) + (package (idref: 717)) + (superClass (idref: 718))) + (EMOF.Class (id: 720) + (name Vocabulary) + (ownedOperation + (EMOF.MetaNavigation (id: 721) + (name allDocuments) + (class (idref: 720)) + (longName 'All documents')) + (EMOF.MetaNavigation (id: 722) + (name allTerms) + (class (idref: 720)) + (longName 'All terms'))) + (package (idref: 717)) + (superClass (idref: 718))) + (EMOF.Class (id: 723) + (name Term) + (package (idref: 717)) + (superClass (idref: 718))) + (EMOF.Class (id: 724) + (name Topic) + (package (idref: 717)) + (superClass (idref: 718))) + (EMOF.Class (id: 725) + (name SemanticIndex) + (package (idref: 717)) + (superClass (idref: 718))) + (EMOF.Class (id: 726) + (name HapaxModel) + (ownedOperation + (EMOF.MetaNavigation (id: 727) + (name terms) + (class (idref: 726)) + (longName 'All terms')) + (EMOF.MetaNavigation (id: 728) + (name vocabularies) + (class (idref: 726)) + (longName 'All vocabularies'))) + (package (idref: 717)) + (superClass (idref: 718))) + (EMOF.Class (id: 729) + (name TextFile) + (package (idref: 717)) + (superClass (idref: 718))) + (EMOF.Class (id: 730) + (name CategorizedVocabulary) + (package (idref: 717)) + (superClass (idref: 720))) + (EMOF.Class (id: 731) + (name SimpleVocabulary) + (package (idref: 717)) + (superClass (idref: 720))))) + (EMOF.Package (id: 732) + (name Core) + (nestingPackage (idref: 716)) + (ownedType + (EMOF.Class (id: 493) + (name Object) + (package (idref: 732))) + (EMOF.Class (id: 676) + (name Timestamp) + (package (idref: 732)) + (superClass (idref: 733))) + (EMOF.Class (id: 733) + (name Magnitude) + (package (idref: 732)) + (superClass (idref: 493))) + (EMOF.Class (id: 678) + (name Text) + (package (idref: 732)) + (superClass (idref: 734))) + (EMOF.Class (id: 734) + (name CharacterArray) + (package (idref: 732)) + (superClass (idref: 735))) + (EMOF.Class (id: 735) + (name ArrayedCollection) + (package (idref: 732)) + (superClass (idref: 736))) + (EMOF.Class (id: 736) + (name SequenceableCollection) + (package (idref: 732)) + (superClass (idref: 737))) + (EMOF.Class (id: 737) + (name Collection) + (package (idref: 732)) + (superClass (idref: 493))))) + (EMOF.Package (id: 738) + (name Dude) + (nestingPackage (idref: 716)) + (ownedType + (EMOF.Class (id: 739) + (name SourceCodeLine) + (ownedAttribute + (EMOF.MetaMeasurement (id: 740) + (name AGE) + (class (idref: 739)) + (description 'The number of days since this line was modified.') + (isReadOnly true) + (longName AgeOfLine) + (type (primitive: Number)))) + (package (idref: 738)) + (superClass (idref: 7))) + (EMOF.Class (id: 741) + (name SourceCodeFragment) + (package (idref: 738)) + (superClass (idref: 7))) + (EMOF.Class (id: 742) + (name Multiplication) + (ownedAttribute + (EMOF.MetaMeasurement (id: 743) + (name LOC) + (class (idref: 742)) + (description 'The number of distinct file fragments that have been cloned') + (isReadOnly true) + (longName 'Number of Clones') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 744) + (name NOsS) + (class (idref: 742)) + (description 'The number of developers contributing in all clones') + (isReadOnly true) + (longName NumberOfShotgunSurgeons) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 745) + (name NOF) + (class (idref: 742)) + (description 'The number of distinct files covered in this multiplication') + (isReadOnly true) + (longName 'Number of Files') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 746) + (name NOPl) + (class (idref: 742)) + (description 'The number of developers not contributing in the original') + (isReadOnly true) + (longName NumberOfPlagiators) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 747) + (name TSPAN) + (class (idref: 742)) + (description 'The number of days between the original and the most recent clone') + (isReadOnly true) + (longName TimeSpan) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 748) + (name NOCl) + (class (idref: 742)) + (description 'The number of distinct file fragments that have been cloned') + (isReadOnly true) + (longName 'Number of Clones') + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 749) + (name NODv) + (class (idref: 742)) + (description 'The number of developers contributing in this multiplicaiton') + (isReadOnly true) + (longName NumberOfDevelopers) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 750) + (name oAGE) + (class (idref: 742)) + (description 'The number of days since the writing of the first line in the original.') + (isReadOnly true) + (longName AgeOfTheOriginal) + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaAction (id: 751) + (name browseDuplicationText) + (category main) + (class (idref: 742))) + (EMOF.MetaAction (id: 752) + (name 'viewClones2') + (category main) + (class (idref: 742))) + (EMOF.MetaNavigation (id: 753) + (name allDuplications) + (class (idref: 742)) + (longName 'All Duplications of this multiplication')) + (EMOF.MetaNavigation (id: 754) + (name allDevelopers) + (class (idref: 742)) + (longName 'All Developers')) + (EMOF.MetaNavigation (id: 755) + (name allSurgeons) + (class (idref: 742)) + (longName 'All Surgeons')) + (EMOF.MetaNavigation (id: 756) + (name allFiles) + (class (idref: 742)) + (longName 'All files covered in this multiplication')) + (EMOF.MetaNavigation (id: 757) + (name allPlagiators) + (class (idref: 742)) + (longName 'All Plagiators'))) + (package (idref: 738)) + (superClass (idref: 7))) + (EMOF.Class (id: 758) + (name Detector) + (ownedAttribute + (EMOF.MetaMeasurement (id: 759) + (name AGE) + (class (idref: 758)) + (description 'The number of days between the oldest line of code and the newst one.') + (isReadOnly true) + (longName AgeOfModel) + (type (primitive: Number)))) + (package (idref: 738)) + (superClass (idref: 7))) + (EMOF.Class (id: 760) + (name Duplication) + (ownedOperation + (EMOF.MetaAction (id: 761) + (name browseDuplicationText) + (category main) + (class (idref: 760)))) + (package (idref: 738)) + (superClass (idref: 7))) + (EMOF.Class (id: 762) + (name Developer) + (ownedAttribute + (EMOF.MetaMeasurement (id: 763) + (name NOPedD) + (class (idref: 762)) + (description 'The number of developers this guy has plagiated') + (isReadOnly true) + (longName NumberOfPlagiatedDevelopers) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 764) + (name NOPingD) + (class (idref: 762)) + (description 'The number of developers plagiating this guy') + (isReadOnly true) + (longName NumberOfPlagiaringDevelopers) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 765) + (name NOPl) + (class (idref: 762)) + (description 'The number of clones that this developer has added') + (isReadOnly true) + (longName NumberOfPlagiaries) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 766) + (name NOP) + (class (idref: 762)) + (description 'The number of multiplications that this developer has contibuted by creating more clones') + (isReadOnly true) + (longName NumberOfPlagiations) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 767) + (name NOOr) + (class (idref: 762)) + (description 'The number of multiplications for wich this author has contributed to the original') + (isReadOnly true) + (longName NumberOfOriginals) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 768) + (name NOCl) + (class (idref: 762)) + (description 'The number of clones that this developer has contibutions to') + (isReadOnly true) + (longName NumberOfClones) + (type (primitive: Number))) + (EMOF.MetaMeasurement (id: 769) + (name NOMp) + (class (idref: 762)) + (description 'The number of multiplications that this developer has contibutions to') + (isReadOnly true) + (longName NumberOfMultiplications) + (type (primitive: Number)))) + (ownedOperation + (EMOF.MetaNavigation (id: 770) + (name allMultiplications) + (class (idref: 762)) + (longName 'All Multiplications')) + (EMOF.MetaNavigation (id: 771) + (name allOriginals) + (class (idref: 762)) + (longName 'All Originals')) + (EMOF.MetaNavigation (id: 772) + (name allPlagiated) + (class (idref: 762)) + (longName 'All Plagiated developers')) + (EMOF.MetaNavigation (id: 773) + (name allPlagiations) + (class (idref: 762)) + (longName 'All Plagiations')) + (EMOF.MetaNavigation (id: 774) + (name allPlagiators) + (class (idref: 762)) + (longName 'All Plagiating developers'))) + (package (idref: 738)) + (superClass (idref: 7))) + (EMOF.Class (id: 775) + (name MultiplicationGroup) + (package (idref: 738)) + (superClass (idref: 88))) + (EMOF.Class (id: 776) + (name DuplicationGroup) + (package (idref: 738)) + (superClass (idref: 88)))))) + (ownedType + (EMOF.Class (id: 686) + (name CvsModelRoot) + (package (idref: 716)) (superClass (idref: 493)))))) \ No newline at end of file diff --git a/samples/ch/unibe/fame/resources/FAMIX22.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.fm3.mse similarity index 100% rename from samples/ch/unibe/fame/resources/FAMIX22.fm3.mse rename to lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.fm3.mse diff --git a/samples/ch/unibe/fame/resources/FAMIX22.mse.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.mse.mse similarity index 100% rename from samples/ch/unibe/fame/resources/FAMIX22.mse.mse rename to lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.mse.mse diff --git a/samples/ch/unibe/fame/resources/FAMIX30.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse similarity index 100% rename from samples/ch/unibe/fame/resources/FAMIX30.fm3.mse rename to lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse diff --git a/samples/ch/unibe/fame/resources/FAMIX70.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX70.mse similarity index 100% rename from samples/ch/unibe/fame/resources/FAMIX70.mse rename to lib/src/test/resources/ch/unibe/fame/resources/FAMIX70.mse diff --git a/samples/ch/unibe/fame/resources/FM3.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/FM3.fm3.mse similarity index 100% rename from samples/ch/unibe/fame/resources/FM3.fm3.mse rename to lib/src/test/resources/ch/unibe/fame/resources/FM3.fm3.mse diff --git a/samples/ch/unibe/fame/resources/FamixJava.mse b/lib/src/test/resources/ch/unibe/fame/resources/FamixJava.mse similarity index 100% rename from samples/ch/unibe/fame/resources/FamixJava.mse rename to lib/src/test/resources/ch/unibe/fame/resources/FamixJava.mse diff --git a/samples/ch/unibe/fame/resources/Lan.famix.mse b/lib/src/test/resources/ch/unibe/fame/resources/Lan.famix.mse similarity index 96% rename from samples/ch/unibe/fame/resources/Lan.famix.mse rename to lib/src/test/resources/ch/unibe/fame/resources/Lan.famix.mse index 3ea160c..4c1d79d 100644 --- a/samples/ch/unibe/fame/resources/Lan.famix.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/Lan.famix.mse @@ -1,3725 +1,3725 @@ -(Moose.Model (id: 1) - (name 'LAN sample model') - (entity - (FAMIX.Invocation (id: 2) - (candidate (idref: 3)) - (invokedBy (idref: 4)) - (invokes 'name:(Object)') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 6) - (invokedBy (idref: 7)) - (invokes 'printOn:(Object)') - (receivingVariable (idref: 8)) - (stub false)) - (FAMIX.Invocation (id: 9) - (invokedBy (idref: 7)) - (invokes 'nextPutAll:(Object)') - (receivingVariable (idref: 10)) - (stub false)) - (FAMIX.Invocation (id: 11) - (invokedBy (idref: 7)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 12) - (invokedBy (idref: 7)) - (invokes 'asString()') - (stub false)) - (FAMIX.Invocation (id: 13) - (candidate (idref: 14) (idref: 15) (idref: 16)) - (invokedBy (idref: 7)) - (invokes 'name()') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 17) - (invokedBy (idref: 7)) - (invokes 'ifFalse:(Object)') - (stub false)) - (FAMIX.Invocation (id: 18) - (invokedBy (idref: 7)) - (invokes 'isNil()') - (stub false)) - (FAMIX.Invocation (id: 19) - (candidate (idref: 20)) - (invokedBy (idref: 7)) - (invokes 'nextNode()') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 21) - (invokedBy (idref: 7)) - (invokes 'nextPutAll:(Object)') - (receivingVariable (idref: 10)) - (stub false)) - (FAMIX.Invocation (id: 22) - (invokedBy (idref: 7)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 23) - (invokedBy (idref: 7)) - (invokes 'printString()') - (stub false)) - (FAMIX.Invocation (id: 24) - (candidate (idref: 14) (idref: 16) (idref: 15)) - (invokedBy (idref: 7)) - (invokes 'name()') - (stub false)) - (FAMIX.Invocation (id: 25) - (candidate (idref: 20)) - (invokedBy (idref: 7)) - (invokes 'nextNode()') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 26) - (invokedBy (idref: 3)) - (invokes 'changed:(Object)') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 27) - (invokedBy (idref: 28)) - (invokes 'show:(Object)') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 30) - (invokedBy (idref: 28)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 31) - (invokedBy (idref: 28)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 32) - (invokedBy (idref: 28)) - (invokes 'printString()') - (stub false)) - (FAMIX.Invocation (id: 33) - (candidate (idref: 14) (idref: 15) (idref: 16)) - (invokedBy (idref: 28)) - (invokes 'name()') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 34) - (invokedBy (idref: 28)) - (invokes 'printString()') - (stub false)) - (FAMIX.Invocation (id: 35) - (candidate (idref: 14) (idref: 16) (idref: 15)) - (invokedBy (idref: 28)) - (invokes 'name()') - (stub false)) - (FAMIX.Invocation (id: 36) - (candidate (idref: 20)) - (invokedBy (idref: 28)) - (invokes 'nextNode()') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 37) - (invokedBy (idref: 28)) - (invokes 'cr()') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 38) - (candidate (idref: 39) (idref: 40) (idref: 41)) - (invokedBy (idref: 28)) - (invokes 'accept:(Object)') - (stub false)) - (FAMIX.Invocation (id: 42) - (candidate (idref: 20)) - (invokedBy (idref: 28)) - (invokes 'nextNode()') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 43) - (invokedBy (idref: 44)) - (invokes 'changed:(Object)') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 45) - (candidate (idref: 28)) - (invokedBy (idref: 39)) - (invokes 'send:(Object)') - (receivingVariable (idref: 5)) - (stub false)) - (FAMIX.Invocation (id: 46) - (candidate (idref: 47) (idref: 4)) - (invokedBy (idref: 48)) - (invokes 'initialize()') - (stub false)) - (FAMIX.Invocation (id: 49) - (invokedBy (idref: 48)) - (invokes 'new()') - (receivingVariable (idref: 50)) - (stub false)) - (FAMIX.Invocation (id: 51) - (candidate (idref: 16)) - (invokedBy (idref: 14)) - (invokes 'name()') - (receivingVariable (idref: 52)) - (stub false)) - (FAMIX.Invocation (id: 53) - (invokedBy (idref: 41)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 54) - (invokedBy (idref: 41)) - (invokes '=(Object)') - (stub false)) - (FAMIX.Invocation (id: 55) - (candidate (idref: 56) (idref: 57)) - (invokedBy (idref: 41)) - (invokes 'originator()') - (receivingVariable (idref: 58)) - (stub false)) - (FAMIX.Invocation (id: 59) - (invokedBy (idref: 41)) - (invokes 'show:(Object)') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 60) - (invokedBy (idref: 41)) - (invokes 'cr()') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 61) - (invokedBy (idref: 41)) - (invokes 'show:(Object)') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 62) - (invokedBy (idref: 41)) - (invokes 'printString()') - (receivingVariable (idref: 58)) - (stub false)) - (FAMIX.Invocation (id: 63) - (invokedBy (idref: 41)) - (invokes 'cr()') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 64) - (candidate (idref: 28)) - (invokedBy (idref: 41)) - (invokes 'send:(Object)') - (receivingVariable (idref: 65)) - (stub false)) - (FAMIX.Invocation (id: 66) - (candidate (idref: 67)) - (invokedBy (idref: 68)) - (invokes 'originator:(Object)') - (receivingVariable (idref: 69)) - (stub false)) - (FAMIX.Invocation (id: 70) - (candidate (idref: 28)) - (invokedBy (idref: 68)) - (invokes 'send:(Object)') - (receivingVariable (idref: 65)) - (stub false)) - (FAMIX.Invocation (id: 71) - (candidate (idref: 16)) - (invokedBy (idref: 15)) - (invokes 'name()') - (receivingVariable (idref: 72)) - (stub false)) - (FAMIX.Invocation (id: 73) - (invokedBy (idref: 74)) - (invokes 'cr()') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 75) - (invokedBy (idref: 74)) - (invokes 'show:(Object)') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 76) - (invokedBy (idref: 74)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 77) - (invokedBy (idref: 74)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 78) - (invokedBy (idref: 74)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 79) - (invokedBy (idref: 74)) - (invokes 'printString()') - (stub false)) - (FAMIX.Invocation (id: 80) - (candidate (idref: 15)) - (invokedBy (idref: 74)) - (invokes 'name()') - (receivingVariable (idref: 81)) - (stub false)) - (FAMIX.Invocation (id: 82) - (candidate (idref: 83) (idref: 84)) - (invokedBy (idref: 74)) - (invokes 'contents()') - (receivingVariable (idref: 85)) - (stub false)) - (FAMIX.Invocation (id: 86) - (invokedBy (idref: 87)) - (invokes 'subclassResponsibility()') - (receivingVariable (idref: 88)) - (stub false)) - (FAMIX.Invocation (id: 89) - (invokedBy (idref: 40)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 90) - (candidate (idref: 91)) - (invokedBy (idref: 40)) - (invokes 'isDestinationFor:(Object)') - (stub false)) - (FAMIX.Invocation (id: 92) - (candidate (idref: 93) (idref: 94)) - (invokedBy (idref: 40)) - (invokes 'addressee()') - (receivingVariable (idref: 95)) - (stub false)) - (FAMIX.Invocation (id: 96) - (candidate (idref: 15) (idref: 16)) - (invokedBy (idref: 40)) - (invokes 'name()') - (receivingVariable (idref: 88)) - (stub false)) - (FAMIX.Invocation (id: 97) - (candidate (idref: 74) (idref: 98)) - (invokedBy (idref: 40)) - (invokes 'output:(Object)') - (receivingVariable (idref: 88)) - (stub false)) - (FAMIX.Invocation (id: 99) - (candidate (idref: 28)) - (invokedBy (idref: 40)) - (invokes 'send:(Object)') - (receivingVariable (idref: 88)) - (stub false)) - (FAMIX.Invocation (id: 100) - (invokedBy (idref: 98)) - (invokes 'cr()') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 101) - (invokedBy (idref: 98)) - (invokes 'timesRepeat:(Object)') - (stub false)) - (FAMIX.Invocation (id: 102) - (invokedBy (idref: 98)) - (invokes 'show:(Object)') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 103) - (invokedBy (idref: 98)) - (invokes 'cr()') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 104) - (invokedBy (idref: 98)) - (invokes 'show:(Object)') - (receivingVariable (idref: 29)) - (stub false)) - (FAMIX.Invocation (id: 105) - (invokedBy (idref: 98)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 106) - (invokedBy (idref: 98)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 107) - (invokedBy (idref: 98)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 108) - (invokedBy (idref: 98)) - (invokes 'printString()') - (stub false)) - (FAMIX.Invocation (id: 109) - (candidate (idref: 16)) - (invokedBy (idref: 98)) - (invokes 'name()') - (receivingVariable (idref: 110)) - (stub false)) - (FAMIX.Invocation (id: 111) - (candidate (idref: 83) (idref: 84)) - (invokedBy (idref: 98)) - (invokes 'contents()') - (receivingVariable (idref: 112)) - (stub false)) - (FAMIX.Invocation (id: 113) - (invokedBy (idref: 47)) - (invokes 'initialize()') - (receivingVariable (idref: 114)) - (stub false)) - (FAMIX.Invocation (id: 115) - (invokedBy (idref: 47)) - (invokes 'list:(Object)') - (stub false)) - (FAMIX.Invocation (id: 116) - (candidate (idref: 117)) - (invokedBy (idref: 47)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 119) - (invokedBy (idref: 47)) - (invokes 'new()') - (receivingVariable (idref: 120)) - (stub false)) - (FAMIX.Invocation (id: 121) - (invokedBy (idref: 47)) - (invokes 'selectionHolder()') - (stub false)) - (FAMIX.Invocation (id: 122) - (candidate (idref: 117)) - (invokedBy (idref: 47)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 123) - (invokedBy (idref: 47)) - (invokes 'subjectChannel:(Object)') - (stub false)) - (FAMIX.Invocation (id: 124) - (invokedBy (idref: 47)) - (invokes 'forAspect:(Object)') - (receivingVariable (idref: 125)) - (stub false)) - (FAMIX.Invocation (id: 126) - (invokedBy (idref: 47)) - (invokes 'subjectChannel:(Object)') - (stub false)) - (FAMIX.Invocation (id: 127) - (invokedBy (idref: 47)) - (invokes 'forAspect:(Object)') - (receivingVariable (idref: 125)) - (stub false)) - (FAMIX.Invocation (id: 128) - (invokedBy (idref: 47)) - (invokes 'subjectSendsUpdates:(Object)') - (stub false)) - (FAMIX.Invocation (id: 129) - (invokedBy (idref: 84)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 130) - (invokedBy (idref: 84)) - (invokes 'isNil()') - (receivingVariable (idref: 131)) - (stub false)) - (FAMIX.Invocation (id: 132) - (invokedBy (idref: 84)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 133) - (invokedBy (idref: 84)) - (invokes 'new()') - (receivingVariable (idref: 134)) - (stub false)) - (FAMIX.Invocation (id: 135) - (invokedBy (idref: 117)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 136) - (invokedBy (idref: 117)) - (invokes 'isNil()') - (receivingVariable (idref: 137)) - (stub false)) - (FAMIX.Invocation (id: 138) - (invokedBy (idref: 117)) - (invokes 'new()') - (receivingVariable (idref: 139)) - (stub false)) - (FAMIX.Invocation (id: 140) - (invokedBy (idref: 141)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 142) - (invokedBy (idref: 141)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 143) - (invokedBy (idref: 141)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 144) - (invokedBy (idref: 141)) - (invokes 'new()') - (receivingVariable (idref: 134)) - (stub false)) - (FAMIX.Invocation (id: 145) - (invokedBy (idref: 141)) - (invokes 'new()') - (receivingVariable (idref: 146)) - (stub false)) - (FAMIX.Invocation (id: 147) - (invokedBy (idref: 141)) - (invokes 'builder()') - (receivingVariable (idref: 148)) - (stub false)) - (FAMIX.Invocation (id: 149) - (invokedBy (idref: 141)) - (invokes 'aspectAt:put:(Object,Object)') - (receivingVariable (idref: 150)) - (stub false)) - (FAMIX.Invocation (id: 151) - (invokedBy (idref: 141)) - (invokes 'aspectAt:put:(Object,Object)') - (receivingVariable (idref: 150)) - (stub false)) - (FAMIX.Invocation (id: 152) - (invokedBy (idref: 141)) - (invokes 'aspectAt:put:(Object,Object)') - (receivingVariable (idref: 150)) - (stub false)) - (FAMIX.Invocation (id: 153) - (invokedBy (idref: 141)) - (invokes 'aspectAt:put:(Object,Object)') - (receivingVariable (idref: 150)) - (stub false)) - (FAMIX.Invocation (id: 154) - (candidate (idref: 155)) - (invokedBy (idref: 141)) - (invokes 'originatorsMenu()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 156) - (invokedBy (idref: 141)) - (invokes 'aspectAt:put:(Object,Object)') - (receivingVariable (idref: 150)) - (stub false)) - (FAMIX.Invocation (id: 157) - (candidate (idref: 158)) - (invokedBy (idref: 141)) - (invokes 'addresseesMenu()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 159) - (invokedBy (idref: 141)) - (invokes 'openFor:interface:(Object,Object)') - (receivingVariable (idref: 148)) - (stub false)) - (FAMIX.Invocation (id: 160) - (invokedBy (idref: 141)) - (invokes 'ifTrue:(Object)') - (receivingVariable (idref: 161)) - (stub false)) - (FAMIX.Invocation (id: 162) - (candidate (idref: 163)) - (invokedBy (idref: 141)) - (invokes 'addressee:(Object)') - (stub false)) - (FAMIX.Invocation (id: 164) - (invokedBy (idref: 141)) - (invokes 'new()') - (receivingVariable (idref: 165)) - (stub false)) - (FAMIX.Invocation (id: 166) - (candidate (idref: 167)) - (invokedBy (idref: 141)) - (invokes 'id:(Object)') - (stub false)) - (FAMIX.Invocation (id: 168) - (invokedBy (idref: 141)) - (invokes 'new()') - (receivingVariable (idref: 169)) - (stub false)) - (FAMIX.Invocation (id: 170) - (candidate (idref: 14) (idref: 16) (idref: 15)) - (invokedBy (idref: 141)) - (invokes 'name()') - (stub false)) - (FAMIX.Invocation (id: 171) - (invokedBy (idref: 141)) - (invokes 'value()') - (receivingVariable (idref: 172)) - (stub false)) - (FAMIX.Invocation (id: 173) - (candidate (idref: 174)) - (invokedBy (idref: 141)) - (invokes 'contents:(Object)') - (stub false)) - (FAMIX.Invocation (id: 175) - (invokedBy (idref: 141)) - (invokes 'value()') - (receivingVariable (idref: 176)) - (stub false)) - (FAMIX.Invocation (id: 177) - (candidate (idref: 68)) - (invokedBy (idref: 141)) - (invokes 'originate:(Object)') - (stub false)) - (FAMIX.Invocation (id: 178) - (invokedBy (idref: 141)) - (invokes 'value()') - (receivingVariable (idref: 179)) - (stub false)) - (FAMIX.Invocation (id: 180) - (invokedBy (idref: 181)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 182) - (invokedBy (idref: 181)) - (invokes 'isNil()') - (receivingVariable (idref: 183)) - (stub false)) - (FAMIX.Invocation (id: 184) - (invokedBy (idref: 181)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 185) - (invokedBy (idref: 186)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 187) - (invokedBy (idref: 186)) - (invokes 'isNil()') - (receivingVariable (idref: 188)) - (stub false)) - (FAMIX.Invocation (id: 189) - (invokedBy (idref: 186)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 190) - (invokedBy (idref: 186)) - (invokes 'new()') - (receivingVariable (idref: 191)) - (stub false)) - (FAMIX.Invocation (id: 192) - (invokedBy (idref: 193)) - (invokes 'add:(Object)') - (stub false)) - (FAMIX.Invocation (id: 194) - (invokedBy (idref: 193)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 195) - (candidate (idref: 117)) - (invokedBy (idref: 193)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 196) - (candidate (idref: 48)) - (invokedBy (idref: 193)) - (invokes 'new()') - (receivingVariable (idref: 197)) - (stub false)) - (FAMIX.Invocation (id: 198) - (invokedBy (idref: 199)) - (invokes 'ifFalse:(Object)') - (stub false)) - (FAMIX.Invocation (id: 200) - (invokedBy (idref: 199)) - (invokes 'isNil()') - (stub false)) - (FAMIX.Invocation (id: 201) - (invokedBy (idref: 199)) - (invokes 'selection()') - (stub false)) - (FAMIX.Invocation (id: 202) - (candidate (idref: 117)) - (invokedBy (idref: 199)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 203) - (invokedBy (idref: 199)) - (invokes 'remove:(Object)') - (stub false)) - (FAMIX.Invocation (id: 204) - (invokedBy (idref: 199)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 205) - (candidate (idref: 117)) - (invokedBy (idref: 199)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 206) - (candidate (idref: 207)) - (invokedBy (idref: 199)) - (invokes 'changedNode()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 208) - (invokedBy (idref: 209)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 210) - (invokedBy (idref: 209)) - (invokes 'isNil()') - (receivingVariable (idref: 211)) - (stub false)) - (FAMIX.Invocation (id: 212) - (invokedBy (idref: 209)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 213) - (invokedBy (idref: 158)) - (invokes 'new()') - (receivingVariable (idref: 214)) - (stub false)) - (FAMIX.Invocation (id: 215) - (invokedBy (idref: 158)) - (invokes 'do:(Object)') - (stub false)) - (FAMIX.Invocation (id: 216) - (invokedBy (idref: 158)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 217) - (candidate (idref: 117)) - (invokedBy (idref: 158)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 218) - (invokedBy (idref: 158)) - (invokes 'ifTrue:(Object)') - (stub false)) - (FAMIX.Invocation (id: 219) - (candidate (idref: 220) (idref: 221)) - (invokedBy (idref: 158)) - (invokes 'canOutput()') - (receivingVariable (idref: 222)) - (stub false)) - (FAMIX.Invocation (id: 223) - (invokedBy (idref: 158)) - (invokes 'add:(Object)') - (receivingVariable (idref: 224)) - (stub false)) - (FAMIX.Invocation (id: 225) - (invokedBy (idref: 158)) - (invokes '->(Object)') - (stub false)) - (FAMIX.Invocation (id: 226) - (candidate (idref: 14) (idref: 16) (idref: 15)) - (invokedBy (idref: 158)) - (invokes 'name()') - (receivingVariable (idref: 222)) - (stub false)) - (FAMIX.Invocation (id: 227) - (invokedBy (idref: 158)) - (invokes 'menu()') - (receivingVariable (idref: 224)) - (stub false)) - (FAMIX.Invocation (id: 228) - (invokedBy (idref: 229)) - (invokes 'add:(Object)') - (stub false)) - (FAMIX.Invocation (id: 230) - (invokedBy (idref: 229)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 231) - (candidate (idref: 117)) - (invokedBy (idref: 229)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 232) - (candidate (idref: 48)) - (invokedBy (idref: 229)) - (invokes 'new()') - (receivingVariable (idref: 233)) - (stub false)) - (FAMIX.Invocation (id: 234) - (invokedBy (idref: 235)) - (invokes 'add:(Object)') - (stub false)) - (FAMIX.Invocation (id: 236) - (invokedBy (idref: 235)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 237) - (candidate (idref: 117)) - (invokedBy (idref: 235)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 238) - (candidate (idref: 48)) - (invokedBy (idref: 235)) - (invokes 'new()') - (receivingVariable (idref: 239)) - (stub false)) - (FAMIX.Invocation (id: 240) - (invokedBy (idref: 57)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 241) - (invokedBy (idref: 57)) - (invokes 'isNil()') - (receivingVariable (idref: 242)) - (stub false)) - (FAMIX.Invocation (id: 243) - (invokedBy (idref: 57)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 244) - (invokedBy (idref: 207)) - (invokes 'new()') - (receivingVariable (idref: 214)) - (stub false)) - (FAMIX.Invocation (id: 245) - (invokedBy (idref: 207)) - (invokes 'do:(Object)') - (stub false)) - (FAMIX.Invocation (id: 246) - (invokedBy (idref: 207)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 247) - (candidate (idref: 117)) - (invokedBy (idref: 207)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 248) - (invokedBy (idref: 207)) - (invokes 'add:(Object)') - (receivingVariable (idref: 249)) - (stub false)) - (FAMIX.Invocation (id: 250) - (invokedBy (idref: 207)) - (invokes '->(Object)') - (stub false)) - (FAMIX.Invocation (id: 251) - (candidate (idref: 14) (idref: 16) (idref: 15)) - (invokedBy (idref: 207)) - (invokes 'name()') - (receivingVariable (idref: 252)) - (stub false)) - (FAMIX.Invocation (id: 253) - (invokedBy (idref: 207)) - (invokes 'setValue:(Object)') - (stub false)) - (FAMIX.Invocation (id: 254) - (candidate (idref: 186)) - (invokedBy (idref: 207)) - (invokes 'deviceNameMenu()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 255) - (invokedBy (idref: 207)) - (invokes 'menu()') - (receivingVariable (idref: 249)) - (stub false)) - (FAMIX.Invocation (id: 256) - (invokedBy (idref: 93)) - (invokes 'ifTrue:ifFalse:(Object,Object)') - (stub false)) - (FAMIX.Invocation (id: 257) - (invokedBy (idref: 93)) - (invokes 'isNil()') - (receivingVariable (idref: 258)) - (stub false)) - (FAMIX.Invocation (id: 259) - (invokedBy (idref: 93)) - (invokes 'asValue()') - (stub false)) - (FAMIX.Invocation (id: 260) - (invokedBy (idref: 261)) - (invokes 'add:(Object)') - (stub false)) - (FAMIX.Invocation (id: 262) - (invokedBy (idref: 261)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 263) - (candidate (idref: 117)) - (invokedBy (idref: 261)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 264) - (candidate (idref: 48)) - (invokedBy (idref: 261)) - (invokes 'new()') - (receivingVariable (idref: 265)) - (stub false)) - (FAMIX.Invocation (id: 266) - (invokedBy (idref: 155)) - (invokes 'new()') - (receivingVariable (idref: 214)) - (stub false)) - (FAMIX.Invocation (id: 267) - (invokedBy (idref: 155)) - (invokes 'do:(Object)') - (stub false)) - (FAMIX.Invocation (id: 268) - (invokedBy (idref: 155)) - (invokes 'list()') - (stub false)) - (FAMIX.Invocation (id: 269) - (candidate (idref: 117)) - (invokedBy (idref: 155)) - (invokes 'nodeList()') - (receivingVariable (idref: 118)) - (stub false)) - (FAMIX.Invocation (id: 270) - (invokedBy (idref: 155)) - (invokes 'ifTrue:(Object)') - (stub false)) - (FAMIX.Invocation (id: 271) - (candidate (idref: 272) (idref: 273)) - (invokedBy (idref: 155)) - (invokes 'canOriginate()') - (receivingVariable (idref: 274)) - (stub false)) - (FAMIX.Invocation (id: 275) - (invokedBy (idref: 155)) - (invokes 'add:(Object)') - (receivingVariable (idref: 276)) - (stub false)) - (FAMIX.Invocation (id: 277) - (invokedBy (idref: 155)) - (invokes '->(Object)') - (stub false)) - (FAMIX.Invocation (id: 278) - (candidate (idref: 14) (idref: 16) (idref: 15)) - (invokedBy (idref: 155)) - (invokes 'name()') - (receivingVariable (idref: 274)) - (stub false)) - (FAMIX.Invocation (id: 279) - (invokedBy (idref: 155)) - (invokes 'menu()') - (receivingVariable (idref: 276)) - (stub false)) - (FAMIX.Invocation (id: 280) - (invokedBy (idref: 281)) - (invokes 'halt()') - (receivingVariable (idref: 282)) - (stub false)) - (FAMIX.Invocation (id: 283) - (invokedBy (idref: 284)) - (invokes '=(Object)') - (stub false)) - (FAMIX.Invocation (id: 285) - (candidate (idref: 286)) - (invokedBy (idref: 284)) - (invokes 'id()') - (receivingVariable (idref: 282)) - (stub false)) - (FAMIX.Invocation (id: 287) - (candidate (idref: 286)) - (invokedBy (idref: 284)) - (invokes 'id()') - (receivingVariable (idref: 288)) - (stub false)) - (FAMIX.Invocation (id: 289) - (candidate (idref: 284)) - (invokedBy (idref: 91)) - (invokes 'equalsSingle:(Object)') - (receivingVariable (idref: 290)) - (stub false)) - (FAMIX.Invocation (id: 291) - (invokedBy (idref: 292)) - (invokes 'subclassResponsibility()') - (receivingVariable (idref: 293)) - (stub false)) - (FAMIX.Invocation (id: 294) - (invokedBy (idref: 295)) - (invokes 'printOn:(Object)') - (receivingVariable (idref: 296)) - (stub false)) - (FAMIX.Invocation (id: 297) - (invokedBy (idref: 295)) - (invokes 'ifTrue:(Object)') - (stub false)) - (FAMIX.Invocation (id: 298) - (invokedBy (idref: 295)) - (invokes 'notNil()') - (stub false)) - (FAMIX.Invocation (id: 299) - (candidate (idref: 56)) - (invokedBy (idref: 295)) - (invokes 'originator()') - (receivingVariable (idref: 300)) - (stub false)) - (FAMIX.Invocation (id: 301) - (invokedBy (idref: 295)) - (invokes 'nextPutAll:(Object)') - (receivingVariable (idref: 302)) - (stub false)) - (FAMIX.Invocation (id: 303) - (invokedBy (idref: 295)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 304) - (invokedBy (idref: 295)) - (invokes 'printString()') - (stub false)) - (FAMIX.Invocation (id: 305) - (candidate (idref: 14) (idref: 16) (idref: 15)) - (invokedBy (idref: 295)) - (invokes 'name()') - (stub false)) - (FAMIX.Invocation (id: 306) - (candidate (idref: 56)) - (invokedBy (idref: 295)) - (invokes 'originator()') - (receivingVariable (idref: 300)) - (stub false)) - (FAMIX.Invocation (id: 307) - (invokedBy (idref: 295)) - (invokes 'nextPutAll:(Object)') - (receivingVariable (idref: 302)) - (stub false)) - (FAMIX.Invocation (id: 308) - (invokedBy (idref: 295)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 309) - (invokedBy (idref: 295)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 310) - (invokedBy (idref: 295)) - (invokes ',(Object)') - (stub false)) - (FAMIX.Invocation (id: 311) - (invokedBy (idref: 295)) - (invokes 'printString()') - (stub false)) - (FAMIX.Invocation (id: 312) - (candidate (idref: 94)) - (invokedBy (idref: 295)) - (invokes 'addressee()') - (receivingVariable (idref: 300)) - (stub false)) - (FAMIX.Invocation (id: 313) - (candidate (idref: 83)) - (invokedBy (idref: 295)) - (invokes 'contents()') - (receivingVariable (idref: 300)) - (stub false)) - (FAMIX.Invocation (id: 314) - (invokedBy (idref: 174)) - (invokes 'changed:(Object)') - (receivingVariable (idref: 300)) - (stub false)) - (FAMIX.Invocation (id: 315) - (invokedBy (idref: 67)) - (invokes 'changed:(Object)') - (receivingVariable (idref: 300)) - (stub false)) - (FAMIX.Invocation (id: 316) - (invokedBy (idref: 163)) - (invokes 'changed:(Object)') - (receivingVariable (idref: 300)) - (stub false)) - (FAMIX.GlobalVariable (id: 29) - (name Transcript) - (stub false)) - (FAMIX.LocalVariable (id: 317) - (name selectionHolder) - (belongsTo (idref: 47)) - (stub false)) - (FAMIX.LocalVariable (id: 148) - (name dialogModel) - (belongsTo (idref: 141)) - (stub false)) - (FAMIX.LocalVariable (id: 150) - (name dialogBuilder) - (belongsTo (idref: 141)) - (stub false)) - (FAMIX.LocalVariable (id: 161) - (name returnVal) - (belongsTo (idref: 141)) - (stub false)) - (FAMIX.LocalVariable (id: 318) - (name packet) - (belongsTo (idref: 141)) - (stub false)) - (FAMIX.LocalVariable (id: 179) - (name dialogOriginator) - (belongsTo (idref: 141)) - (stub false)) - (FAMIX.LocalVariable (id: 172) - (name dialogAddressee) - (belongsTo (idref: 141)) - (stub false)) - (FAMIX.LocalVariable (id: 176) - (name dialogContents) - (belongsTo (idref: 141)) - (stub false)) - (FAMIX.LocalVariable (id: 319) - (name sel) - (belongsTo (idref: 199)) - (stub false)) - (FAMIX.LocalVariable (id: 224) - (name menuBuilder) - (belongsTo (idref: 158)) - (stub false)) - (FAMIX.LocalVariable (id: 222) - (name each) - (belongsTo (idref: 158)) - (stub false)) - (FAMIX.LocalVariable (id: 249) - (name newMenu) - (belongsTo (idref: 207)) - (stub false)) - (FAMIX.LocalVariable (id: 252) - (name node) - (belongsTo (idref: 207)) - (stub false)) - (FAMIX.LocalVariable (id: 276) - (name menuBuilder) - (belongsTo (idref: 155)) - (stub false)) - (FAMIX.LocalVariable (id: 274) - (name each) - (belongsTo (idref: 155)) - (stub false)) - (FAMIX.Access (id: 320) - (accessedIn (idref: 4)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 321) - (accessedIn (idref: 7)) - (accesses (idref: 8)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 322) - (accessedIn (idref: 7)) - (accesses (idref: 10)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 323) - (accessedIn (idref: 7)) - (accesses (idref: 10)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 324) - (accessedIn (idref: 7)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 325) - (accessedIn (idref: 7)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 326) - (accessedIn (idref: 7)) - (accesses (idref: 10)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 327) - (accessedIn (idref: 7)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 328) - (accessedIn (idref: 16)) - (accesses (idref: 329)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 330) - (accessedIn (idref: 3)) - (accesses (idref: 329)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 331) - (accessedIn (idref: 3)) - (accesses (idref: 332)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 333) - (accessedIn (idref: 3)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 334) - (accessedIn (idref: 28)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 335) - (accessedIn (idref: 28)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 336) - (accessedIn (idref: 28)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 337) - (accessedIn (idref: 28)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 338) - (accessedIn (idref: 28)) - (accesses (idref: 339)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 340) - (accessedIn (idref: 20)) - (accesses (idref: 341)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 342) - (accessedIn (idref: 44)) - (accesses (idref: 341)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 343) - (accessedIn (idref: 44)) - (accesses (idref: 344)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 345) - (accessedIn (idref: 44)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 346) - (accessedIn (idref: 39)) - (accesses (idref: 5)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 347) - (accessedIn (idref: 39)) - (accesses (idref: 348)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 349) - (accessedIn (idref: 48)) - (accesses (idref: 50)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 350) - (accessedIn (idref: 14)) - (accesses (idref: 52)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 351) - (accessedIn (idref: 41)) - (accesses (idref: 58)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 352) - (accessedIn (idref: 41)) - (accesses (idref: 65)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 353) - (accessedIn (idref: 41)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 354) - (accessedIn (idref: 41)) - (accesses (idref: 58)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 355) - (accessedIn (idref: 41)) - (accesses (idref: 65)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 356) - (accessedIn (idref: 41)) - (accesses (idref: 58)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 357) - (accessedIn (idref: 68)) - (accesses (idref: 69)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 358) - (accessedIn (idref: 68)) - (accesses (idref: 65)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 359) - (accessedIn (idref: 68)) - (accesses (idref: 65)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 360) - (accessedIn (idref: 68)) - (accesses (idref: 69)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 361) - (accessedIn (idref: 15)) - (accesses (idref: 72)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 362) - (accessedIn (idref: 74)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 363) - (accessedIn (idref: 74)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 364) - (accessedIn (idref: 74)) - (accesses (idref: 81)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 365) - (accessedIn (idref: 74)) - (accesses (idref: 85)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 366) - (accessedIn (idref: 367)) - (accesses (idref: 368)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 369) - (accessedIn (idref: 87)) - (accesses (idref: 88)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 370) - (accessedIn (idref: 40)) - (accesses (idref: 95)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 371) - (accessedIn (idref: 40)) - (accesses (idref: 88)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 372) - (accessedIn (idref: 40)) - (accesses (idref: 88)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 373) - (accessedIn (idref: 40)) - (accesses (idref: 95)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 374) - (accessedIn (idref: 40)) - (accesses (idref: 88)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 375) - (accessedIn (idref: 40)) - (accesses (idref: 95)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 376) - (accessedIn (idref: 98)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 377) - (accessedIn (idref: 98)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 378) - (accessedIn (idref: 98)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 379) - (accessedIn (idref: 98)) - (accesses (idref: 29)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 380) - (accessedIn (idref: 98)) - (accesses (idref: 110)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 381) - (accessedIn (idref: 98)) - (accesses (idref: 112)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 382) - (accessedIn (idref: 47)) - (accesses (idref: 114)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 383) - (accessedIn (idref: 47)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 384) - (accessedIn (idref: 47)) - (accesses (idref: 120)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 385) - (accessedIn (idref: 47)) - (accesses (idref: 317)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 386) - (accessedIn (idref: 47)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 387) - (accessedIn (idref: 47)) - (accesses (idref: 183)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 388) - (accessedIn (idref: 47)) - (accesses (idref: 125)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 389) - (accessedIn (idref: 47)) - (accesses (idref: 317)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 390) - (accessedIn (idref: 47)) - (accesses (idref: 211)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 391) - (accessedIn (idref: 47)) - (accesses (idref: 125)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 392) - (accessedIn (idref: 47)) - (accesses (idref: 317)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 393) - (accessedIn (idref: 84)) - (accesses (idref: 131)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 394) - (accessedIn (idref: 84)) - (accesses (idref: 131)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 395) - (accessedIn (idref: 84)) - (accesses (idref: 134)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 396) - (accessedIn (idref: 84)) - (accesses (idref: 131)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 397) - (accessedIn (idref: 117)) - (accesses (idref: 137)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 398) - (accessedIn (idref: 117)) - (accesses (idref: 137)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 399) - (accessedIn (idref: 117)) - (accesses (idref: 139)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 400) - (accessedIn (idref: 117)) - (accesses (idref: 137)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 401) - (accessedIn (idref: 141)) - (accesses (idref: 179)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 402) - (accessedIn (idref: 141)) - (accesses (idref: 172)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 403) - (accessedIn (idref: 141)) - (accesses (idref: 176)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 404) - (accessedIn (idref: 141)) - (accesses (idref: 134)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 405) - (accessedIn (idref: 141)) - (accesses (idref: 148)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 406) - (accessedIn (idref: 141)) - (accesses (idref: 146)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 407) - (accessedIn (idref: 141)) - (accesses (idref: 150)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 408) - (accessedIn (idref: 141)) - (accesses (idref: 148)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 409) - (accessedIn (idref: 141)) - (accesses (idref: 150)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 410) - (accessedIn (idref: 141)) - (accesses (idref: 179)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 411) - (accessedIn (idref: 141)) - (accesses (idref: 150)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 412) - (accessedIn (idref: 141)) - (accesses (idref: 172)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 413) - (accessedIn (idref: 141)) - (accesses (idref: 150)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 414) - (accessedIn (idref: 141)) - (accesses (idref: 176)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 415) - (accessedIn (idref: 141)) - (accesses (idref: 150)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 416) - (accessedIn (idref: 141)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 417) - (accessedIn (idref: 141)) - (accesses (idref: 150)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 418) - (accessedIn (idref: 141)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 419) - (accessedIn (idref: 141)) - (accesses (idref: 161)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 420) - (accessedIn (idref: 141)) - (accesses (idref: 148)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 421) - (accessedIn (idref: 141)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 422) - (accessedIn (idref: 141)) - (accesses (idref: 161)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 423) - (accessedIn (idref: 141)) - (accesses (idref: 318)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 424) - (accessedIn (idref: 141)) - (accesses (idref: 165)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 425) - (accessedIn (idref: 141)) - (accesses (idref: 169)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 426) - (accessedIn (idref: 141)) - (accesses (idref: 172)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 427) - (accessedIn (idref: 141)) - (accesses (idref: 176)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 428) - (accessedIn (idref: 141)) - (accesses (idref: 179)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 429) - (accessedIn (idref: 141)) - (accesses (idref: 318)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 430) - (accessedIn (idref: 181)) - (accesses (idref: 183)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 431) - (accessedIn (idref: 181)) - (accesses (idref: 183)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 432) - (accessedIn (idref: 181)) - (accesses (idref: 183)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 433) - (accessedIn (idref: 186)) - (accesses (idref: 188)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 434) - (accessedIn (idref: 186)) - (accesses (idref: 188)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 435) - (accessedIn (idref: 186)) - (accesses (idref: 191)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 436) - (accessedIn (idref: 186)) - (accesses (idref: 188)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 437) - (accessedIn (idref: 438)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 439) - (accessedIn (idref: 440)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 441) - (accessedIn (idref: 193)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 442) - (accessedIn (idref: 193)) - (accesses (idref: 197)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 443) - (accessedIn (idref: 199)) - (accesses (idref: 319)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 444) - (accessedIn (idref: 199)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 445) - (accessedIn (idref: 199)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 446) - (accessedIn (idref: 199)) - (accesses (idref: 319)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 447) - (accessedIn (idref: 199)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 448) - (accessedIn (idref: 209)) - (accesses (idref: 211)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 449) - (accessedIn (idref: 209)) - (accesses (idref: 211)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 450) - (accessedIn (idref: 209)) - (accesses (idref: 211)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 451) - (accessedIn (idref: 158)) - (accesses (idref: 224)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 452) - (accessedIn (idref: 158)) - (accesses (idref: 214)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 453) - (accessedIn (idref: 158)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 454) - (accessedIn (idref: 158)) - (accesses (idref: 222)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 455) - (accessedIn (idref: 158)) - (accesses (idref: 224)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 456) - (accessedIn (idref: 158)) - (accesses (idref: 222)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 457) - (accessedIn (idref: 158)) - (accesses (idref: 222)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 458) - (accessedIn (idref: 158)) - (accesses (idref: 224)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 459) - (accessedIn (idref: 229)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 460) - (accessedIn (idref: 229)) - (accesses (idref: 233)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 461) - (accessedIn (idref: 235)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 462) - (accessedIn (idref: 235)) - (accesses (idref: 239)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 463) - (accessedIn (idref: 57)) - (accesses (idref: 242)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 464) - (accessedIn (idref: 57)) - (accesses (idref: 242)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 465) - (accessedIn (idref: 57)) - (accesses (idref: 242)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 466) - (accessedIn (idref: 207)) - (accesses (idref: 249)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 467) - (accessedIn (idref: 207)) - (accesses (idref: 214)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 468) - (accessedIn (idref: 207)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 469) - (accessedIn (idref: 207)) - (accesses (idref: 249)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 470) - (accessedIn (idref: 207)) - (accesses (idref: 252)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 471) - (accessedIn (idref: 207)) - (accesses (idref: 252)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 472) - (accessedIn (idref: 207)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 473) - (accessedIn (idref: 207)) - (accesses (idref: 249)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 474) - (accessedIn (idref: 93)) - (accesses (idref: 258)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 475) - (accessedIn (idref: 93)) - (accesses (idref: 258)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 476) - (accessedIn (idref: 93)) - (accesses (idref: 258)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 477) - (accessedIn (idref: 261)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 478) - (accessedIn (idref: 261)) - (accesses (idref: 265)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 479) - (accessedIn (idref: 155)) - (accesses (idref: 276)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 480) - (accessedIn (idref: 155)) - (accesses (idref: 214)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 481) - (accessedIn (idref: 155)) - (accesses (idref: 118)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 482) - (accessedIn (idref: 155)) - (accesses (idref: 274)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 483) - (accessedIn (idref: 155)) - (accesses (idref: 276)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 484) - (accessedIn (idref: 155)) - (accesses (idref: 274)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 485) - (accessedIn (idref: 155)) - (accesses (idref: 274)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 486) - (accessedIn (idref: 155)) - (accesses (idref: 276)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 487) - (accessedIn (idref: 286)) - (accesses (idref: 488)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 489) - (accessedIn (idref: 167)) - (accesses (idref: 488)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 490) - (accessedIn (idref: 167)) - (accesses (idref: 491)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 492) - (accessedIn (idref: 281)) - (accesses (idref: 282)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 493) - (accessedIn (idref: 284)) - (accesses (idref: 282)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 494) - (accessedIn (idref: 284)) - (accesses (idref: 288)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 495) - (accessedIn (idref: 91)) - (accesses (idref: 290)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 496) - (accessedIn (idref: 91)) - (accesses (idref: 282)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 497) - (accessedIn (idref: 292)) - (accesses (idref: 293)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 498) - (accessedIn (idref: 295)) - (accesses (idref: 296)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 499) - (accessedIn (idref: 295)) - (accesses (idref: 302)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 500) - (accessedIn (idref: 295)) - (accesses (idref: 300)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 501) - (accessedIn (idref: 295)) - (accesses (idref: 302)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 502) - (accessedIn (idref: 295)) - (accesses (idref: 300)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 503) - (accessedIn (idref: 295)) - (accesses (idref: 302)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 504) - (accessedIn (idref: 295)) - (accesses (idref: 300)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 505) - (accessedIn (idref: 295)) - (accesses (idref: 300)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 506) - (accessedIn (idref: 83)) - (accesses (idref: 507)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 508) - (accessedIn (idref: 174)) - (accesses (idref: 507)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 509) - (accessedIn (idref: 174)) - (accesses (idref: 510)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 511) - (accessedIn (idref: 174)) - (accesses (idref: 300)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 512) - (accessedIn (idref: 67)) - (accesses (idref: 513)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 514) - (accessedIn (idref: 67)) - (accesses (idref: 515)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 516) - (accessedIn (idref: 67)) - (accesses (idref: 300)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 517) - (accessedIn (idref: 56)) - (accesses (idref: 513)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 518) - (accessedIn (idref: 94)) - (accesses (idref: 519)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 520) - (accessedIn (idref: 163)) - (accesses (idref: 519)) - (readWriteAccess false) - (stub false)) - (FAMIX.Access (id: 521) - (accessedIn (idref: 163)) - (accesses (idref: 522)) - (readWriteAccess true) - (stub false)) - (FAMIX.Access (id: 523) - (accessedIn (idref: 163)) - (accesses (idref: 300)) - (readWriteAccess true) - (stub false)) - (FAMIX.Attribute (id: 524) - (name instanceVariables) - (accessControlQualifier protected) - (belongsTo (idref: 525)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 526) - (name organization) - (accessControlQualifier protected) - (belongsTo (idref: 525)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 527) - (name type) - (accessControlQualifier protected) - (belongsTo (idref: 528)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 529) - (name builder) - (accessControlQualifier protected) - (belongsTo (idref: 530)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 531) - (name uiSession) - (accessControlQualifier protected) - (belongsTo (idref: 530)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 532) - (name eventHandlers) - (accessControlQualifier protected) - (belongsTo (idref: 530)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 329) - (name name) - (accessControlQualifier protected) - (belongsTo (idref: 533)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 341) - (name nextNode) - (accessControlQualifier protected) - (belongsTo (idref: 533)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 534) - (name superclass) - (accessControlQualifier protected) - (belongsTo (idref: 535)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 536) - (name methodDict) - (accessControlQualifier protected) - (belongsTo (idref: 535)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 537) - (name format) - (accessControlQualifier protected) - (belongsTo (idref: 535)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 538) - (name subclasses) - (accessControlQualifier protected) - (belongsTo (idref: 535)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 539) - (name dependents) - (accessControlQualifier protected) - (belongsTo (idref: 540)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 541) - (name savedWindowInformation) - (accessControlQualifier protected) - (belongsTo (idref: 542)) - (hasClassScope true) - (stub false)) - (FAMIX.Attribute (id: 488) - (name id) - (accessControlQualifier protected) - (belongsTo (idref: 543)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 507) - (name contents) - (accessControlQualifier protected) - (belongsTo (idref: 544)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 519) - (name addressee) - (accessControlQualifier protected) - (belongsTo (idref: 544)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 513) - (name originator) - (accessControlQualifier protected) - (belongsTo (idref: 544)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 368) - (name serverType) - (accessControlQualifier protected) - (belongsTo (idref: 545)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 546) - (name name) - (accessControlQualifier protected) - (belongsTo (idref: 547)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 548) - (name classPool) - (accessControlQualifier protected) - (belongsTo (idref: 547)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 549) - (name environment) - (accessControlQualifier protected) - (belongsTo (idref: 547)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 183) - (name nodeName) - (accessControlQualifier protected) - (belongsTo (idref: 550)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 137) - (name nodeList) - (accessControlQualifier protected) - (belongsTo (idref: 550)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 211) - (name nextNode) - (accessControlQualifier protected) - (belongsTo (idref: 550)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 188) - (name deviceNameMenu) - (accessControlQualifier protected) - (belongsTo (idref: 550)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 131) - (name contents) - (accessControlQualifier protected) - (belongsTo (idref: 550)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 242) - (name originator) - (accessControlQualifier protected) - (belongsTo (idref: 550)) - (hasClassScope false) - (stub false)) - (FAMIX.Attribute (id: 258) - (name addressee) - (accessControlQualifier protected) - (belongsTo (idref: 550)) - (hasClassScope false) - (stub false)) - (FAMIX.Comment (id: 551) - (belongsTo (idref: 4)) - (content '"This is the default initialize method that is always called when new instances are created. My - subclasses will likely override this method to be initialized."') - (stub false)) - (FAMIX.Comment (id: 552) - (belongsTo (idref: 4)) - (content '"I just set my name to unnamed"') - (stub false)) - (FAMIX.Comment (id: 553) - (belongsTo (idref: 7)) - (content '"print a textual representation of myself on the argument, aStream"') - (stub false)) - (FAMIX.Comment (id: 554) - (belongsTo (idref: 16)) - (content '"returns the name of the node"') - (stub false)) - (FAMIX.Comment (id: 555) - (belongsTo (idref: 556)) - (content '"this method is necessary for Moose tests"') - (stub false)) - (FAMIX.Comment (id: 557) - (belongsTo (idref: 3)) - (content '"sets the name of the node (a Symbol)"') - (stub false)) - (FAMIX.Comment (id: 558) - (belongsTo (idref: 28)) - (content '"Display debug information in the Transcript, then send the packet to the node which whom I - communicate"') - (stub false)) - (FAMIX.Comment (id: 559) - (belongsTo (idref: 20)) - (content '"return the next node of the receiver"') - (stub false)) - (FAMIX.Comment (id: 560) - (belongsTo (idref: 44)) - (content '"set the next node of the receiver to be aNode"') - (stub false)) - (FAMIX.Comment (id: 561) - (belongsTo (idref: 39)) - (content '"Having received the packet, send it on. This is the default behavior."') - (stub false)) - (FAMIX.Comment (id: 562) - (belongsTo (idref: 39)) - (content '"My subclasses will probably override this method to do something special"') - (stub false)) - (FAMIX.Comment (id: 563) - (belongsTo (idref: 14)) - (content '"added for candidate invocations operator test"') - (stub false)) - (FAMIX.Comment (id: 564) - (belongsTo (idref: 41)) - (content '"accept the packet and see if I am the originator. If this is the case, take the packet out because the - addressee is unknown. Print this on the Transcript"') - (stub false)) - (FAMIX.Comment (id: 565) - (belongsTo (idref: 68)) - (content '"This is how packets get inserted into the network. This is a likely method to be rwritten to permit - packets to be entered in various ways. Currently, I assume that someone alse creates the packet, - and passes it to me as an argument."') - (stub false)) - (FAMIX.Comment (id: 566) - (belongsTo (idref: 15)) - (content '"added for candidate invocations operator test"') - (stub false)) - (FAMIX.Comment (id: 567) - (belongsTo (idref: 74)) - (content '"My subclasses have to use this method to define their outputting behavior"') - (stub false)) - (FAMIX.Comment (id: 568) - (belongsTo (idref: 87)) - (content '"My subclasses have to use this method to define their outputting behavior"') - (stub false)) - (FAMIX.Comment (id: 569) - (belongsTo (idref: 40)) - (content '"I first see if the packet is for me. If it is, I output it. Otherwise, I pass it on"') - (stub false)) - (FAMIX.Comment (id: 570) - (belongsTo (idref: 40)) - (content '"self name = thePacket addressee"') - (stub false)) - (FAMIX.Comment (id: 571) - (belongsTo (idref: 98)) - (content '"My subclasses have to use this method to define their outputting behavior"') - (stub false)) - (FAMIX.Comment (id: 572) - (belongsTo (idref: 84)) - (content '"This method was generated by UIDefiner. Any edits made here - may be lost whenever methods are automatically defined. The - initialization provided below may have been preempted by an - initialize method."') - (stub false)) - (FAMIX.Comment (id: 573) - (belongsTo (idref: 117)) - (content '"This method was generated by UIDefiner. Any edits made here - may be lost whenever methods are automatically defined. The - initialization provided below may have been preempted by an - initialize method."') - (stub false)) - (FAMIX.Comment (id: 574) - (belongsTo (idref: 141)) - (content '"the next three lines create ValueHolders to support the three dialog widgets"') - (stub false)) - (FAMIX.Comment (id: 575) - (belongsTo (idref: 141)) - (content '"next two lines create a new SimpleDialog object and retrieves the builder"') - (stub false)) - (FAMIX.Comment (id: 576) - (belongsTo (idref: 141)) - (content '"the following lines connect the widgets of the interface with the ValueHolders created"') - (stub false)) - (FAMIX.Comment (id: 577) - (belongsTo (idref: 141)) - (content '"the following lines ask the LANInterface for the originators and outputters menus. - You will write these next, so select proceed when VisualWorks when VisualWorks indicates that they are new messages."') - (stub false)) - (FAMIX.Comment (id: 578) - (belongsTo (idref: 141)) - (content '"the following line actually opens the dialog interface, originateDialog, and accepts user input"') - (stub false)) - (FAMIX.Comment (id: 579) - (belongsTo (idref: 141)) - (content '"returnvalue will be true if the user selected Accept, otherwise it will be false"') - (stub false)) - (FAMIX.Comment (id: 580) - (belongsTo (idref: 141)) - (content '"create a new packet, fill it in and give it to the workstation"') - (stub false)) - (FAMIX.Comment (id: 581) - (belongsTo (idref: 181)) - (content '"This method was generated by UIDefiner. Any edits made here - may be lost whenever methods are automatically defined. The - initialization provided below may have been preempted by an - initialize method."') - (stub false)) - (FAMIX.Comment (id: 582) - (belongsTo (idref: 438)) - (content '"This stub method was generated by UIDefiner"') - (stub false)) - (FAMIX.Comment (id: 583) - (belongsTo (idref: 440)) - (content '"This stub method was generated by UIDefiner"') - (stub false)) - (FAMIX.Comment (id: 584) - (belongsTo (idref: 209)) - (content '"This method was generated by UIDefiner. Any edits made here - may be lost whenever methods are automatically defined. The - initialization provided below may have been preempted by an - initialize method."') - (stub false)) - (FAMIX.Comment (id: 585) - (belongsTo (idref: 57)) - (content '"This method was generated by UIDefiner. Any edits made here - may be lost whenever methods are automatically defined. The - initialization provided below may have been preempted by an - initialize method."') - (stub false)) - (FAMIX.Comment (id: 586) - (belongsTo (idref: 93)) - (content '"This method was generated by UIDefiner. Any edits made here - may be lost whenever methods are automatically defined. The - initialization provided below may have been preempted by an - initialize method."') - (stub false)) - (FAMIX.Comment (id: 587) - (belongsTo (idref: 550)) - (content 'LAN Interface comments for testing purposes. - -Instance Variables: - addressee <ValueHolder> description of addressee - contents <ValueHolder> description of contents - deviceNameMenu <ValueModel> description of deviceNameMenu - nextNode <ValueHolder> description of nextNode - nodeList <SelectionInList> description of nodeList - nodeName <ValueHolder> description of nodeName - originator <ValueHolder> description of originator - -') - (stub false)) - (FAMIX.Comment (id: 588) - (belongsTo (idref: 589)) - (content '"UIPainter new openOnClass: self andSelector: #originateDialog"') - (stub false)) - (FAMIX.Comment (id: 590) - (belongsTo (idref: 591)) - (content '"UIPainter new openOnClass: self andSelector: #windowSpec"') - (stub false)) - (FAMIX.Comment (id: 592) - (belongsTo (idref: 83)) - (content '"return the contents of the receiver"') - (stub false)) - (FAMIX.Comment (id: 593) - (belongsTo (idref: 174)) - (content '"set the contents of the receiver"') - (stub false)) - (FAMIX.Comment (id: 594) - (belongsTo (idref: 67)) - (content '"Set the originator of the receiver"') - (stub false)) - (FAMIX.Comment (id: 595) - (belongsTo (idref: 56)) - (content '"I return the originator of the receiver"') - (stub false)) - (FAMIX.Comment (id: 596) - (belongsTo (idref: 94)) - (content '"return the name of the node that is the addressee for this packet"') - (stub false)) - (FAMIX.Comment (id: 597) - (belongsTo (idref: 163)) - (content '"set the name of the node that is the addressee for this packet"') - (stub false)) - (FAMIX.Class (id: 599) - (name 'ValueModel_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 601)) - (stub true)) - (FAMIX.Class (id: 165) - (name 'Packet_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 604) - (name 'Model_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 605)) - (stub true)) - (FAMIX.Class (id: 134) - (name 'String_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 607)) - (stub true)) - (FAMIX.Class (id: 544) - (name Packet) - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 533) - (name Node) - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 139) - (name 'SelectionInList_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 608)) - (stub true)) - (FAMIX.Class (id: 550) - (name LANInterface) - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 609) - (name 'AbstractDestinationAddress_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 540) - (name Model) - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 605)) - (stub true)) - (FAMIX.Class (id: 610) - (name FileServer) - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 543) - (name SingleDestinationAddress) - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 611) - (name 'List_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 608)) - (stub true)) - (FAMIX.Class (id: 197) - (name 'WorkStation_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 612) - (name 'LANInterface_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 545) - (name OutputServer) - (belongsTo (idref: 602)) - (isAbstract true) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 214) - (name 'MenuBuilder_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 613)) - (stub true)) - (FAMIX.Class (id: 614) - (name 'ClassDescription_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 615)) - (stub true)) - (FAMIX.Class (id: 233) - (name 'FileServer_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 525) - (name ClassDescription) - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 615)) - (stub true)) - (FAMIX.Class (id: 616) - (name 'Object_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 605)) - (stub true)) - (FAMIX.Class (id: 547) - (name Class) - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 615)) - (stub true)) - (FAMIX.Class (id: 617) - (name 'Behavior_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 615)) - (stub true)) - (FAMIX.Class (id: 618) - (name 'Class_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 615)) - (stub true)) - (FAMIX.Class (id: 619) - (name 'SequenceableCollection_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 620)) - (stub true)) - (FAMIX.Class (id: 621) - (name PrintServer) - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 542) - (name 'ApplicationModel_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 613)) - (stub true)) - (FAMIX.Class (id: 622) - (name 'Collection_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 620)) - (stub true)) - (FAMIX.Class (id: 623) - (name 'ProtocolAdaptor_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 624)) - (stub true)) - (FAMIX.Class (id: 625) - (name AbstractDestinationAddress) - (belongsTo (idref: 602)) - (isAbstract true) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 265) - (name 'PrintServer_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 125) - (name 'AspectAdaptor_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 624)) - (stub true)) - (FAMIX.Class (id: 528) - (name WorkStation) - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 530) - (name ApplicationModel) - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 613)) - (stub true)) - (FAMIX.Class (id: 535) - (name Behavior) - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 615)) - (stub true)) - (FAMIX.Class (id: 626) - (name 'CharacterArray_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 607)) - (stub true)) - (FAMIX.Class (id: 169) - (name 'SingleDestinationAddress_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 627) - (name 'OutputServer_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 146) - (name 'SimpleDialog_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 628)) - (stub true)) - (FAMIX.Class (id: 239) - (name 'Node_class') - (belongsTo (idref: 602)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 603)) - (stub false)) - (FAMIX.Class (id: 629) - (name 'ArrayedCollection_class') - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 620)) - (stub true)) - (FAMIX.Class (id: 120) - (name 'DependentList_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 608)) - (stub true)) - (FAMIX.Class (id: 191) - (name 'Menu_class') - (belongsTo (idref: 600)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 630)) - (stub true)) - (FAMIX.Class (id: 631) - (name Object) - (belongsTo (idref: 606)) - (isAbstract false) - (isInterface false) - (packagedIn (idref: 605)) - (stub true)) - (FAMIX.Namespace (id: 606) - (name Core) - (belongsTo (idref: 632)) - (stub false)) - (FAMIX.Namespace (id: 600) - (name UI) - (belongsTo (idref: 632)) - (stub false)) - (FAMIX.Namespace (id: 602) - (name LAN) - (belongsTo (idref: 632)) - (stub false)) - (FAMIX.Namespace (id: 633) - (name Root) - (stub false)) - (FAMIX.Namespace (id: 632) - (name Smalltalk) - (belongsTo (idref: 633)) - (stub false)) - (FAMIX.Method (id: 56) - (name originator) - (accessControlQualifier public) - (belongsTo (idref: 544)) - (category accessing) - (hasClassScope false) - (kind getter) - (packagedIn (idref: 603)) - (signature 'originator()') - (source ) - (stub false)) - (FAMIX.Method (id: 209) - (name nextNode) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category aspects) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'nextNode()') - (source ) - (stub false)) - (FAMIX.Method (id: 3) - (name name:) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category accessing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'name:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 14) - (name name) - (accessControlQualifier public) - (belongsTo (idref: 528)) - (category outputting) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'name()') - (source ) - (stub false)) - (FAMIX.Method (id: 155) - (name originatorsMenu) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category private) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'originatorsMenu()') - (source ) - (stub false)) - (FAMIX.Method (id: 286) - (name id) - (accessControlQualifier public) - (belongsTo (idref: 543)) - (category accessing) - (hasClassScope false) - (kind getter) - (packagedIn (idref: 603)) - (signature 'id()') - (source ) - (stub false)) - (FAMIX.Method (id: 229) - (name newFileServer) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'newFileServer()') - (source ) - (stub false)) - (FAMIX.Method (id: 44) - (name nextNode:) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category accessing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'nextNode:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 93) - (name addressee) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category aspects) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'addressee()') - (source ) - (stub false)) - (FAMIX.Method (id: 181) - (name nodeName) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category aspects) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'nodeName()') - (source ) - (stub false)) - (FAMIX.Method (id: 16) - (name name) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category accessing) - (hasClassScope false) - (kind getter) - (packagedIn (idref: 603)) - (signature 'name()') - (source ) - (stub false)) - (FAMIX.Method (id: 281) - (name equalsMultiple:) - (accessControlQualifier public) - (belongsTo (idref: 543)) - (category comparing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'equalsMultiple:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 20) - (name nextNode) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category accessing) - (hasClassScope false) - (kind getter) - (packagedIn (idref: 603)) - (signature 'nextNode()') - (source ) - (stub false)) - (FAMIX.Method (id: 220) - (name canOutput) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category testing) - (hasClassScope false) - (kind constant) - (packagedIn (idref: 603)) - (signature 'canOutput()') - (source ) - (stub false)) - (FAMIX.Method (id: 117) - (name nodeList) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category aspects) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'nodeList()') - (source ) - (stub false)) - (FAMIX.Method (id: 199) - (name remove) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'remove()') - (source ) - (stub false)) - (FAMIX.Method (id: 83) - (name contents) - (accessControlQualifier public) - (belongsTo (idref: 544)) - (category accessing) - (hasClassScope false) - (kind getter) - (packagedIn (idref: 603)) - (signature 'contents()') - (source ) - (stub false)) - (FAMIX.Method (id: 74) - (name output:) - (accessControlQualifier public) - (belongsTo (idref: 610)) - (category outputting) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'output:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 295) - (name printOn:) - (accessControlQualifier public) - (belongsTo (idref: 544)) - (category printing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'printOn:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 438) - (name accept) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'accept()') - (source ) - (stub false)) - (FAMIX.Method (id: 589) - (name originateDialog) - (accessControlQualifier public) - (belongsTo (idref: 612)) - (category 'interface specs') - (hasClassScope true) - (kind constant) - (packagedIn (idref: 603)) - (signature 'originateDialog()') - (source ) - (stub false)) - (FAMIX.Method (id: 47) - (name initialize) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category 'initialize-release') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'initialize()') - (source ) - (stub false)) - (FAMIX.Method (id: 221) - (name canOutput) - (accessControlQualifier public) - (belongsTo (idref: 545)) - (category testing) - (hasClassScope false) - (kind constant) - (packagedIn (idref: 603)) - (signature 'canOutput()') - (source ) - (stub false)) - (FAMIX.Method (id: 163) - (name addressee:) - (accessControlQualifier public) - (belongsTo (idref: 544)) - (category accessing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'addressee:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 158) - (name addresseesMenu) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category private) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'addresseesMenu()') - (source ) - (stub false)) - (FAMIX.Method (id: 207) - (name changedNode) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'changedNode()') - (source ) - (stub false)) - (FAMIX.Method (id: 284) - (name equalsSingle:) - (accessControlQualifier public) - (belongsTo (idref: 543)) - (category comparing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'equalsSingle:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 235) - (name newNode) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'newNode()') - (source ) - (stub false)) - (FAMIX.Method (id: 48) - (name new) - (accessControlQualifier public) - (belongsTo (idref: 239)) - (category 'instance creation') - (hasClassScope true) - (kind constructor) - (packagedIn (idref: 603)) - (signature 'new()') - (source ) - (stub false)) - (FAMIX.Method (id: 167) - (name id:) - (accessControlQualifier public) - (belongsTo (idref: 543)) - (category accessing) - (hasClassScope false) - (kind setter) - (packagedIn (idref: 603)) - (signature 'id:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 98) - (name output:) - (accessControlQualifier public) - (belongsTo (idref: 621)) - (category outputting) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'output:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 556) - (name methodWithEmptyBody) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category 'moose testing') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'methodWithEmptyBody()') - (source ) - (stub false)) - (FAMIX.Method (id: 186) - (name deviceNameMenu) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category aspects) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'deviceNameMenu()') - (source ) - (stub false)) - (FAMIX.Method (id: 15) - (name name) - (accessControlQualifier public) - (belongsTo (idref: 610)) - (category outputting) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'name()') - (source ) - (stub false)) - (FAMIX.Method (id: 272) - (name canOriginate) - (accessControlQualifier public) - (belongsTo (idref: 528)) - (category testing) - (hasClassScope false) - (kind constant) - (packagedIn (idref: 603)) - (signature 'canOriginate()') - (source ) - (stub false)) - (FAMIX.Method (id: 91) - (name isDestinationFor:) - (accessControlQualifier public) - (belongsTo (idref: 543)) - (category comparing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'isDestinationFor:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 7) - (name printOn:) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category printing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'printOn:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 591) - (name windowSpec) - (accessControlQualifier public) - (belongsTo (idref: 612)) - (category 'interface specs') - (hasClassScope true) - (kind constant) - (packagedIn (idref: 603)) - (signature 'windowSpec()') - (source ) - (stub false)) - (FAMIX.Method (id: 367) - (name setServerType) - (accessControlQualifier public) - (belongsTo (idref: 610)) - (category setting) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'setServerType()') - (source ) - (stub false)) - (FAMIX.Method (id: 39) - (name accept:) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category 'sending-receiving') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'accept:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 40) - (name accept:) - (accessControlQualifier public) - (belongsTo (idref: 545)) - (category 'sending-receiving') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'accept:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 4) - (name initialize) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category 'initialize-release') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'initialize()') - (source ) - (stub false)) - (FAMIX.Method (id: 193) - (name newWorkstation) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'newWorkstation()') - (source ) - (stub false)) - (FAMIX.Method (id: 261) - (name newPrintServer) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'newPrintServer()') - (source ) - (stub false)) - (FAMIX.Method (id: 174) - (name contents:) - (accessControlQualifier public) - (belongsTo (idref: 544)) - (category accessing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'contents:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 94) - (name addressee) - (accessControlQualifier public) - (belongsTo (idref: 544)) - (category accessing) - (hasClassScope false) - (kind getter) - (packagedIn (idref: 603)) - (signature 'addressee()') - (source ) - (stub false)) - (FAMIX.Method (id: 440) - (name cancel) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'cancel()') - (source ) - (stub false)) - (FAMIX.Method (id: 67) - (name originator:) - (accessControlQualifier public) - (belongsTo (idref: 544)) - (category accessing) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'originator:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 141) - (name originate) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category actions) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'originate()') - (source ) - (stub false)) - (FAMIX.Method (id: 57) - (name originator) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category aspects) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'originator()') - (source ) - (stub false)) - (FAMIX.Method (id: 273) - (name canOriginate) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category testing) - (hasClassScope false) - (kind constant) - (packagedIn (idref: 603)) - (signature 'canOriginate()') - (source ) - (stub false)) - (FAMIX.Method (id: 292) - (name isDestinationFor:) - (accessControlQualifier public) - (belongsTo (idref: 625)) - (category comparing) - (hasClassScope false) - (kind abstract) - (packagedIn (idref: 603)) - (signature 'isDestinationFor:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 28) - (name send:) - (accessControlQualifier public) - (belongsTo (idref: 533)) - (category 'sending-receiving') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'send:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 41) - (name accept:) - (accessControlQualifier public) - (belongsTo (idref: 528)) - (category 'sending-receiving') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'accept:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 87) - (name output:) - (accessControlQualifier public) - (belongsTo (idref: 545)) - (category outputting) - (hasClassScope false) - (kind abstract) - (packagedIn (idref: 603)) - (signature 'output:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 68) - (name originate:) - (accessControlQualifier public) - (belongsTo (idref: 528)) - (category 'sending-receiving') - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'originate:(Object)') - (source ) - (stub false)) - (FAMIX.Method (id: 84) - (name contents) - (accessControlQualifier public) - (belongsTo (idref: 550)) - (category aspects) - (hasClassScope false) - (packagedIn (idref: 603)) - (signature 'contents()') - (source ) - (stub false)) - (FAMIX.FormalParameter (id: 10) - (name aStream) - (belongsTo (idref: 7)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 332) - (name aSymbol) - (belongsTo (idref: 3)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 339) - (name thePacket) - (belongsTo (idref: 28)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 344) - (name aNode) - (belongsTo (idref: 44)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 348) - (name thePacket) - (belongsTo (idref: 39)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 58) - (name thePacket) - (belongsTo (idref: 41)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 69) - (name thePacket) - (belongsTo (idref: 68)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 85) - (name thePacket) - (belongsTo (idref: 74)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 634) - (name thePacket) - (belongsTo (idref: 87)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 95) - (name thePacket) - (belongsTo (idref: 40)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 112) - (name thePacket) - (belongsTo (idref: 98)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 491) - (name aSymbol) - (belongsTo (idref: 167)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 635) - (name aSingleNodeAddress) - (belongsTo (idref: 281)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 288) - (name aSingleNodeAddress) - (belongsTo (idref: 284)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 290) - (name aNodeAddress) - (belongsTo (idref: 91)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 636) - (name aNodeAddress) - (belongsTo (idref: 292)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 302) - (name aStream) - (belongsTo (idref: 295)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 510) - (name aString) - (belongsTo (idref: 174)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 515) - (name aNode) - (belongsTo (idref: 67)) - (position 0) - (stub false)) - (FAMIX.FormalParameter (id: 522) - (name anAddress) - (belongsTo (idref: 163)) - (position 0) - (stub false)) - (FAMIX.ImplicitVariable (id: 52) - (name super) - (belongsTo (idref: 528)) - (stub false)) - (FAMIX.ImplicitVariable (id: 65) - (name self) - (belongsTo (idref: 528)) - (stub false)) - (FAMIX.ImplicitVariable (id: 50) - (name super) - (belongsTo (idref: 239)) - (stub false)) - (FAMIX.ImplicitVariable (id: 5) - (name self) - (belongsTo (idref: 533)) - (stub false)) - (FAMIX.ImplicitVariable (id: 8) - (name super) - (belongsTo (idref: 533)) - (stub false)) - (FAMIX.ImplicitVariable (id: 72) - (name super) - (belongsTo (idref: 610)) - (stub false)) - (FAMIX.ImplicitVariable (id: 81) - (name self) - (belongsTo (idref: 610)) - (stub false)) - (FAMIX.ImplicitVariable (id: 110) - (name self) - (belongsTo (idref: 621)) - (stub false)) - (FAMIX.ImplicitVariable (id: 282) - (name self) - (belongsTo (idref: 543)) - (stub false)) - (FAMIX.ImplicitVariable (id: 293) - (name self) - (belongsTo (idref: 625)) - (stub false)) - (FAMIX.ImplicitVariable (id: 296) - (name super) - (belongsTo (idref: 544)) - (stub false)) - (FAMIX.ImplicitVariable (id: 300) - (name self) - (belongsTo (idref: 544)) - (stub false)) - (FAMIX.ImplicitVariable (id: 88) - (name self) - (belongsTo (idref: 545)) - (stub false)) - (FAMIX.ImplicitVariable (id: 114) - (name super) - (belongsTo (idref: 550)) - (stub false)) - (FAMIX.ImplicitVariable (id: 118) - (name self) - (belongsTo (idref: 550)) - (stub false)) - (FAMIX.InheritanceDefinition (id: 637) - (stub false) - (subclass (idref: 533)) - (superclass (idref: 540))) - (FAMIX.InheritanceDefinition (id: 638) - (stub false) - (subclass (idref: 540)) - (superclass (idref: 631))) - (FAMIX.InheritanceDefinition (id: 639) - (stub false) - (subclass (idref: 616)) - (superclass (idref: 547))) - (FAMIX.InheritanceDefinition (id: 640) - (stub false) - (subclass (idref: 547)) - (superclass (idref: 525))) - (FAMIX.InheritanceDefinition (id: 641) - (stub false) - (subclass (idref: 525)) - (superclass (idref: 535))) - (FAMIX.InheritanceDefinition (id: 642) - (stub false) - (subclass (idref: 535)) - (superclass (idref: 631))) - (FAMIX.InheritanceDefinition (id: 643) - (stub false) - (subclass (idref: 617)) - (superclass (idref: 616))) - (FAMIX.InheritanceDefinition (id: 644) - (stub false) - (subclass (idref: 614)) - (superclass (idref: 617))) - (FAMIX.InheritanceDefinition (id: 645) - (stub false) - (subclass (idref: 618)) - (superclass (idref: 614))) - (FAMIX.InheritanceDefinition (id: 646) - (stub false) - (subclass (idref: 604)) - (superclass (idref: 616))) - (FAMIX.InheritanceDefinition (id: 647) - (stub false) - (subclass (idref: 239)) - (superclass (idref: 604))) - (FAMIX.InheritanceDefinition (id: 648) - (stub false) - (subclass (idref: 545)) - (superclass (idref: 533))) - (FAMIX.InheritanceDefinition (id: 649) - (stub false) - (subclass (idref: 627)) - (superclass (idref: 239))) - (FAMIX.InheritanceDefinition (id: 650) - (stub false) - (subclass (idref: 528)) - (superclass (idref: 533))) - (FAMIX.InheritanceDefinition (id: 651) - (stub false) - (subclass (idref: 197)) - (superclass (idref: 239))) - (FAMIX.InheritanceDefinition (id: 652) - (stub false) - (subclass (idref: 610)) - (superclass (idref: 545))) - (FAMIX.InheritanceDefinition (id: 653) - (stub false) - (subclass (idref: 233)) - (superclass (idref: 627))) - (FAMIX.InheritanceDefinition (id: 654) - (stub false) - (subclass (idref: 621)) - (superclass (idref: 545))) - (FAMIX.InheritanceDefinition (id: 655) - (stub false) - (subclass (idref: 265)) - (superclass (idref: 627))) - (FAMIX.InheritanceDefinition (id: 656) - (stub false) - (subclass (idref: 550)) - (superclass (idref: 530))) - (FAMIX.InheritanceDefinition (id: 657) - (stub false) - (subclass (idref: 530)) - (superclass (idref: 540))) - (FAMIX.InheritanceDefinition (id: 658) - (stub false) - (subclass (idref: 542)) - (superclass (idref: 604))) - (FAMIX.InheritanceDefinition (id: 659) - (stub false) - (subclass (idref: 612)) - (superclass (idref: 542))) - (FAMIX.InheritanceDefinition (id: 660) - (stub false) - (subclass (idref: 120)) - (superclass (idref: 611))) - (FAMIX.InheritanceDefinition (id: 661) - (stub false) - (subclass (idref: 611)) - (superclass (idref: 629))) - (FAMIX.InheritanceDefinition (id: 662) - (stub false) - (subclass (idref: 629)) - (superclass (idref: 619))) - (FAMIX.InheritanceDefinition (id: 663) - (stub false) - (subclass (idref: 619)) - (superclass (idref: 622))) - (FAMIX.InheritanceDefinition (id: 664) - (stub false) - (subclass (idref: 622)) - (superclass (idref: 616))) - (FAMIX.InheritanceDefinition (id: 665) - (stub false) - (subclass (idref: 125)) - (superclass (idref: 623))) - (FAMIX.InheritanceDefinition (id: 666) - (stub false) - (subclass (idref: 623)) - (superclass (idref: 599))) - (FAMIX.InheritanceDefinition (id: 667) - (stub false) - (subclass (idref: 599)) - (superclass (idref: 604))) - (FAMIX.InheritanceDefinition (id: 668) - (stub false) - (subclass (idref: 134)) - (superclass (idref: 626))) - (FAMIX.InheritanceDefinition (id: 669) - (stub false) - (subclass (idref: 626)) - (superclass (idref: 629))) - (FAMIX.InheritanceDefinition (id: 670) - (stub false) - (subclass (idref: 139)) - (superclass (idref: 604))) - (FAMIX.InheritanceDefinition (id: 671) - (stub false) - (subclass (idref: 146)) - (superclass (idref: 542))) - (FAMIX.InheritanceDefinition (id: 672) - (stub false) - (subclass (idref: 165)) - (superclass (idref: 616))) - (FAMIX.InheritanceDefinition (id: 673) - (stub false) - (subclass (idref: 169)) - (superclass (idref: 609))) - (FAMIX.InheritanceDefinition (id: 674) - (stub false) - (subclass (idref: 609)) - (superclass (idref: 616))) - (FAMIX.InheritanceDefinition (id: 675) - (stub false) - (subclass (idref: 191)) - (superclass (idref: 616))) - (FAMIX.InheritanceDefinition (id: 676) - (stub false) - (subclass (idref: 214)) - (superclass (idref: 616))) - (FAMIX.InheritanceDefinition (id: 677) - (stub false) - (subclass (idref: 543)) - (superclass (idref: 625))) - (FAMIX.InheritanceDefinition (id: 678) - (stub false) - (subclass (idref: 625)) - (superclass (idref: 631))) - (FAMIX.InheritanceDefinition (id: 679) - (stub false) - (subclass (idref: 544)) - (superclass (idref: 631))) - (FAMIX.Package (id: 680) - (name Kernel) - (packagedIn (idref: 681)) - (stub false)) - (FAMIX.Package (id: 630) - (name 'Interface-Menus') - (definedClass (idref: 191)) - (packagedIn (idref: 682)) - (stub false)) - (FAMIX.Package (id: 624) - (name 'Interface-Models') - (definedClass (idref: 125) (idref: 623)) - (packagedIn (idref: 682)) - (stub false)) - (FAMIX.Package (id: 683) - (name UIBasics) - (packagedIn (idref: 681)) - (stub false)) - (FAMIX.Package (id: 607) - (name 'Collections-Text') - (definedClass (idref: 134) (idref: 626)) - (packagedIn (idref: 684)) - (stub false)) - (FAMIX.Package (id: 605) - (name 'Kernel-Objects') - (definedClass (idref: 540) (idref: 631) (idref: 616) (idref: 604)) - (packagedIn (idref: 680)) - (stub false)) - (FAMIX.Package (id: 603) - (name LANModel) - (definedClass (idref: 533) (idref: 239) (idref: 545) (idref: 627) (idref: 528) (idref: 197) (idref: 610) (idref: 233) (idref: 621) (idref: 265) (idref: 550) (idref: 612) (idref: 165) (idref: 169) (idref: 609) (idref: 543) (idref: 625) (idref: 544)) - (packagedIn (idref: 685)) - (stub false)) - (FAMIX.Package (id: 682) - (name Interface) - (packagedIn (idref: 681)) - (stub false)) - (FAMIX.Package (id: 613) - (name 'UIBuilder-Framework') - (definedClass (idref: 530) (idref: 542) (idref: 214)) - (packagedIn (idref: 686)) - (stub false)) - (FAMIX.Package (id: 601) - (name 'Interface-Support') - (definedClass (idref: 599)) - (packagedIn (idref: 682)) - (stub false)) - (FAMIX.Package (id: 608) - (name 'UIBasics-Collections') - (definedClass (idref: 120) (idref: 611) (idref: 139)) - (packagedIn (idref: 683)) - (stub false)) - (FAMIX.Package (id: 681) - (name 'Base VisualWorks') - (stub false)) - (FAMIX.Package (id: 687) - (name MooseDevelopment) - (stub false)) - (FAMIX.Package (id: 628) - (name 'Interface-Dialogs') - (definedClass (idref: 146)) - (packagedIn (idref: 682)) - (stub false)) - (FAMIX.Package (id: 615) - (name 'Kernel-Classes') - (definedClass (idref: 547) (idref: 525) (idref: 535) (idref: 617) (idref: 614) (idref: 618)) - (packagedIn (idref: 680)) - (stub false)) - (FAMIX.Package (id: 685) - (name Moose) - (packagedIn (idref: 687)) - (stub false)) - (FAMIX.Package (id: 686) - (name UIBuilder) - (packagedIn (idref: 681)) - (stub false)) - (FAMIX.Package (id: 620) - (name 'Collections-Abstract') - (definedClass (idref: 629) (idref: 619) (idref: 622)) - (packagedIn (idref: 684)) - (stub false)) - (FAMIX.Package (id: 684) - (name Collections) - (packagedIn (idref: 681)) - (stub false))) - (NOCls 18) - (NOM 57) - (sourceLanguage Smalltalk)) +(Moose.Model (id: 1) + (name 'LAN sample model') + (entity + (FAMIX.Invocation (id: 2) + (candidate (idref: 3)) + (invokedBy (idref: 4)) + (invokes 'name:(Object)') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 6) + (invokedBy (idref: 7)) + (invokes 'printOn:(Object)') + (receivingVariable (idref: 8)) + (stub false)) + (FAMIX.Invocation (id: 9) + (invokedBy (idref: 7)) + (invokes 'nextPutAll:(Object)') + (receivingVariable (idref: 10)) + (stub false)) + (FAMIX.Invocation (id: 11) + (invokedBy (idref: 7)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 12) + (invokedBy (idref: 7)) + (invokes 'asString()') + (stub false)) + (FAMIX.Invocation (id: 13) + (candidate (idref: 14) (idref: 15) (idref: 16)) + (invokedBy (idref: 7)) + (invokes 'name()') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 17) + (invokedBy (idref: 7)) + (invokes 'ifFalse:(Object)') + (stub false)) + (FAMIX.Invocation (id: 18) + (invokedBy (idref: 7)) + (invokes 'isNil()') + (stub false)) + (FAMIX.Invocation (id: 19) + (candidate (idref: 20)) + (invokedBy (idref: 7)) + (invokes 'nextNode()') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 21) + (invokedBy (idref: 7)) + (invokes 'nextPutAll:(Object)') + (receivingVariable (idref: 10)) + (stub false)) + (FAMIX.Invocation (id: 22) + (invokedBy (idref: 7)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 23) + (invokedBy (idref: 7)) + (invokes 'printString()') + (stub false)) + (FAMIX.Invocation (id: 24) + (candidate (idref: 14) (idref: 16) (idref: 15)) + (invokedBy (idref: 7)) + (invokes 'name()') + (stub false)) + (FAMIX.Invocation (id: 25) + (candidate (idref: 20)) + (invokedBy (idref: 7)) + (invokes 'nextNode()') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 26) + (invokedBy (idref: 3)) + (invokes 'changed:(Object)') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 27) + (invokedBy (idref: 28)) + (invokes 'show:(Object)') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 30) + (invokedBy (idref: 28)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 31) + (invokedBy (idref: 28)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 32) + (invokedBy (idref: 28)) + (invokes 'printString()') + (stub false)) + (FAMIX.Invocation (id: 33) + (candidate (idref: 14) (idref: 15) (idref: 16)) + (invokedBy (idref: 28)) + (invokes 'name()') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 34) + (invokedBy (idref: 28)) + (invokes 'printString()') + (stub false)) + (FAMIX.Invocation (id: 35) + (candidate (idref: 14) (idref: 16) (idref: 15)) + (invokedBy (idref: 28)) + (invokes 'name()') + (stub false)) + (FAMIX.Invocation (id: 36) + (candidate (idref: 20)) + (invokedBy (idref: 28)) + (invokes 'nextNode()') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 37) + (invokedBy (idref: 28)) + (invokes 'cr()') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 38) + (candidate (idref: 39) (idref: 40) (idref: 41)) + (invokedBy (idref: 28)) + (invokes 'accept:(Object)') + (stub false)) + (FAMIX.Invocation (id: 42) + (candidate (idref: 20)) + (invokedBy (idref: 28)) + (invokes 'nextNode()') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 43) + (invokedBy (idref: 44)) + (invokes 'changed:(Object)') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 45) + (candidate (idref: 28)) + (invokedBy (idref: 39)) + (invokes 'send:(Object)') + (receivingVariable (idref: 5)) + (stub false)) + (FAMIX.Invocation (id: 46) + (candidate (idref: 47) (idref: 4)) + (invokedBy (idref: 48)) + (invokes 'initialize()') + (stub false)) + (FAMIX.Invocation (id: 49) + (invokedBy (idref: 48)) + (invokes 'new()') + (receivingVariable (idref: 50)) + (stub false)) + (FAMIX.Invocation (id: 51) + (candidate (idref: 16)) + (invokedBy (idref: 14)) + (invokes 'name()') + (receivingVariable (idref: 52)) + (stub false)) + (FAMIX.Invocation (id: 53) + (invokedBy (idref: 41)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 54) + (invokedBy (idref: 41)) + (invokes '=(Object)') + (stub false)) + (FAMIX.Invocation (id: 55) + (candidate (idref: 56) (idref: 57)) + (invokedBy (idref: 41)) + (invokes 'originator()') + (receivingVariable (idref: 58)) + (stub false)) + (FAMIX.Invocation (id: 59) + (invokedBy (idref: 41)) + (invokes 'show:(Object)') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 60) + (invokedBy (idref: 41)) + (invokes 'cr()') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 61) + (invokedBy (idref: 41)) + (invokes 'show:(Object)') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 62) + (invokedBy (idref: 41)) + (invokes 'printString()') + (receivingVariable (idref: 58)) + (stub false)) + (FAMIX.Invocation (id: 63) + (invokedBy (idref: 41)) + (invokes 'cr()') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 64) + (candidate (idref: 28)) + (invokedBy (idref: 41)) + (invokes 'send:(Object)') + (receivingVariable (idref: 65)) + (stub false)) + (FAMIX.Invocation (id: 66) + (candidate (idref: 67)) + (invokedBy (idref: 68)) + (invokes 'originator:(Object)') + (receivingVariable (idref: 69)) + (stub false)) + (FAMIX.Invocation (id: 70) + (candidate (idref: 28)) + (invokedBy (idref: 68)) + (invokes 'send:(Object)') + (receivingVariable (idref: 65)) + (stub false)) + (FAMIX.Invocation (id: 71) + (candidate (idref: 16)) + (invokedBy (idref: 15)) + (invokes 'name()') + (receivingVariable (idref: 72)) + (stub false)) + (FAMIX.Invocation (id: 73) + (invokedBy (idref: 74)) + (invokes 'cr()') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 75) + (invokedBy (idref: 74)) + (invokes 'show:(Object)') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 76) + (invokedBy (idref: 74)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 77) + (invokedBy (idref: 74)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 78) + (invokedBy (idref: 74)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 79) + (invokedBy (idref: 74)) + (invokes 'printString()') + (stub false)) + (FAMIX.Invocation (id: 80) + (candidate (idref: 15)) + (invokedBy (idref: 74)) + (invokes 'name()') + (receivingVariable (idref: 81)) + (stub false)) + (FAMIX.Invocation (id: 82) + (candidate (idref: 83) (idref: 84)) + (invokedBy (idref: 74)) + (invokes 'contents()') + (receivingVariable (idref: 85)) + (stub false)) + (FAMIX.Invocation (id: 86) + (invokedBy (idref: 87)) + (invokes 'subclassResponsibility()') + (receivingVariable (idref: 88)) + (stub false)) + (FAMIX.Invocation (id: 89) + (invokedBy (idref: 40)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 90) + (candidate (idref: 91)) + (invokedBy (idref: 40)) + (invokes 'isDestinationFor:(Object)') + (stub false)) + (FAMIX.Invocation (id: 92) + (candidate (idref: 93) (idref: 94)) + (invokedBy (idref: 40)) + (invokes 'addressee()') + (receivingVariable (idref: 95)) + (stub false)) + (FAMIX.Invocation (id: 96) + (candidate (idref: 15) (idref: 16)) + (invokedBy (idref: 40)) + (invokes 'name()') + (receivingVariable (idref: 88)) + (stub false)) + (FAMIX.Invocation (id: 97) + (candidate (idref: 74) (idref: 98)) + (invokedBy (idref: 40)) + (invokes 'output:(Object)') + (receivingVariable (idref: 88)) + (stub false)) + (FAMIX.Invocation (id: 99) + (candidate (idref: 28)) + (invokedBy (idref: 40)) + (invokes 'send:(Object)') + (receivingVariable (idref: 88)) + (stub false)) + (FAMIX.Invocation (id: 100) + (invokedBy (idref: 98)) + (invokes 'cr()') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 101) + (invokedBy (idref: 98)) + (invokes 'timesRepeat:(Object)') + (stub false)) + (FAMIX.Invocation (id: 102) + (invokedBy (idref: 98)) + (invokes 'show:(Object)') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 103) + (invokedBy (idref: 98)) + (invokes 'cr()') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 104) + (invokedBy (idref: 98)) + (invokes 'show:(Object)') + (receivingVariable (idref: 29)) + (stub false)) + (FAMIX.Invocation (id: 105) + (invokedBy (idref: 98)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 106) + (invokedBy (idref: 98)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 107) + (invokedBy (idref: 98)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 108) + (invokedBy (idref: 98)) + (invokes 'printString()') + (stub false)) + (FAMIX.Invocation (id: 109) + (candidate (idref: 16)) + (invokedBy (idref: 98)) + (invokes 'name()') + (receivingVariable (idref: 110)) + (stub false)) + (FAMIX.Invocation (id: 111) + (candidate (idref: 83) (idref: 84)) + (invokedBy (idref: 98)) + (invokes 'contents()') + (receivingVariable (idref: 112)) + (stub false)) + (FAMIX.Invocation (id: 113) + (invokedBy (idref: 47)) + (invokes 'initialize()') + (receivingVariable (idref: 114)) + (stub false)) + (FAMIX.Invocation (id: 115) + (invokedBy (idref: 47)) + (invokes 'list:(Object)') + (stub false)) + (FAMIX.Invocation (id: 116) + (candidate (idref: 117)) + (invokedBy (idref: 47)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 119) + (invokedBy (idref: 47)) + (invokes 'new()') + (receivingVariable (idref: 120)) + (stub false)) + (FAMIX.Invocation (id: 121) + (invokedBy (idref: 47)) + (invokes 'selectionHolder()') + (stub false)) + (FAMIX.Invocation (id: 122) + (candidate (idref: 117)) + (invokedBy (idref: 47)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 123) + (invokedBy (idref: 47)) + (invokes 'subjectChannel:(Object)') + (stub false)) + (FAMIX.Invocation (id: 124) + (invokedBy (idref: 47)) + (invokes 'forAspect:(Object)') + (receivingVariable (idref: 125)) + (stub false)) + (FAMIX.Invocation (id: 126) + (invokedBy (idref: 47)) + (invokes 'subjectChannel:(Object)') + (stub false)) + (FAMIX.Invocation (id: 127) + (invokedBy (idref: 47)) + (invokes 'forAspect:(Object)') + (receivingVariable (idref: 125)) + (stub false)) + (FAMIX.Invocation (id: 128) + (invokedBy (idref: 47)) + (invokes 'subjectSendsUpdates:(Object)') + (stub false)) + (FAMIX.Invocation (id: 129) + (invokedBy (idref: 84)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 130) + (invokedBy (idref: 84)) + (invokes 'isNil()') + (receivingVariable (idref: 131)) + (stub false)) + (FAMIX.Invocation (id: 132) + (invokedBy (idref: 84)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 133) + (invokedBy (idref: 84)) + (invokes 'new()') + (receivingVariable (idref: 134)) + (stub false)) + (FAMIX.Invocation (id: 135) + (invokedBy (idref: 117)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 136) + (invokedBy (idref: 117)) + (invokes 'isNil()') + (receivingVariable (idref: 137)) + (stub false)) + (FAMIX.Invocation (id: 138) + (invokedBy (idref: 117)) + (invokes 'new()') + (receivingVariable (idref: 139)) + (stub false)) + (FAMIX.Invocation (id: 140) + (invokedBy (idref: 141)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 142) + (invokedBy (idref: 141)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 143) + (invokedBy (idref: 141)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 144) + (invokedBy (idref: 141)) + (invokes 'new()') + (receivingVariable (idref: 134)) + (stub false)) + (FAMIX.Invocation (id: 145) + (invokedBy (idref: 141)) + (invokes 'new()') + (receivingVariable (idref: 146)) + (stub false)) + (FAMIX.Invocation (id: 147) + (invokedBy (idref: 141)) + (invokes 'builder()') + (receivingVariable (idref: 148)) + (stub false)) + (FAMIX.Invocation (id: 149) + (invokedBy (idref: 141)) + (invokes 'aspectAt:put:(Object,Object)') + (receivingVariable (idref: 150)) + (stub false)) + (FAMIX.Invocation (id: 151) + (invokedBy (idref: 141)) + (invokes 'aspectAt:put:(Object,Object)') + (receivingVariable (idref: 150)) + (stub false)) + (FAMIX.Invocation (id: 152) + (invokedBy (idref: 141)) + (invokes 'aspectAt:put:(Object,Object)') + (receivingVariable (idref: 150)) + (stub false)) + (FAMIX.Invocation (id: 153) + (invokedBy (idref: 141)) + (invokes 'aspectAt:put:(Object,Object)') + (receivingVariable (idref: 150)) + (stub false)) + (FAMIX.Invocation (id: 154) + (candidate (idref: 155)) + (invokedBy (idref: 141)) + (invokes 'originatorsMenu()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 156) + (invokedBy (idref: 141)) + (invokes 'aspectAt:put:(Object,Object)') + (receivingVariable (idref: 150)) + (stub false)) + (FAMIX.Invocation (id: 157) + (candidate (idref: 158)) + (invokedBy (idref: 141)) + (invokes 'addresseesMenu()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 159) + (invokedBy (idref: 141)) + (invokes 'openFor:interface:(Object,Object)') + (receivingVariable (idref: 148)) + (stub false)) + (FAMIX.Invocation (id: 160) + (invokedBy (idref: 141)) + (invokes 'ifTrue:(Object)') + (receivingVariable (idref: 161)) + (stub false)) + (FAMIX.Invocation (id: 162) + (candidate (idref: 163)) + (invokedBy (idref: 141)) + (invokes 'addressee:(Object)') + (stub false)) + (FAMIX.Invocation (id: 164) + (invokedBy (idref: 141)) + (invokes 'new()') + (receivingVariable (idref: 165)) + (stub false)) + (FAMIX.Invocation (id: 166) + (candidate (idref: 167)) + (invokedBy (idref: 141)) + (invokes 'id:(Object)') + (stub false)) + (FAMIX.Invocation (id: 168) + (invokedBy (idref: 141)) + (invokes 'new()') + (receivingVariable (idref: 169)) + (stub false)) + (FAMIX.Invocation (id: 170) + (candidate (idref: 14) (idref: 16) (idref: 15)) + (invokedBy (idref: 141)) + (invokes 'name()') + (stub false)) + (FAMIX.Invocation (id: 171) + (invokedBy (idref: 141)) + (invokes 'value()') + (receivingVariable (idref: 172)) + (stub false)) + (FAMIX.Invocation (id: 173) + (candidate (idref: 174)) + (invokedBy (idref: 141)) + (invokes 'contents:(Object)') + (stub false)) + (FAMIX.Invocation (id: 175) + (invokedBy (idref: 141)) + (invokes 'value()') + (receivingVariable (idref: 176)) + (stub false)) + (FAMIX.Invocation (id: 177) + (candidate (idref: 68)) + (invokedBy (idref: 141)) + (invokes 'originate:(Object)') + (stub false)) + (FAMIX.Invocation (id: 178) + (invokedBy (idref: 141)) + (invokes 'value()') + (receivingVariable (idref: 179)) + (stub false)) + (FAMIX.Invocation (id: 180) + (invokedBy (idref: 181)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 182) + (invokedBy (idref: 181)) + (invokes 'isNil()') + (receivingVariable (idref: 183)) + (stub false)) + (FAMIX.Invocation (id: 184) + (invokedBy (idref: 181)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 185) + (invokedBy (idref: 186)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 187) + (invokedBy (idref: 186)) + (invokes 'isNil()') + (receivingVariable (idref: 188)) + (stub false)) + (FAMIX.Invocation (id: 189) + (invokedBy (idref: 186)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 190) + (invokedBy (idref: 186)) + (invokes 'new()') + (receivingVariable (idref: 191)) + (stub false)) + (FAMIX.Invocation (id: 192) + (invokedBy (idref: 193)) + (invokes 'add:(Object)') + (stub false)) + (FAMIX.Invocation (id: 194) + (invokedBy (idref: 193)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 195) + (candidate (idref: 117)) + (invokedBy (idref: 193)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 196) + (candidate (idref: 48)) + (invokedBy (idref: 193)) + (invokes 'new()') + (receivingVariable (idref: 197)) + (stub false)) + (FAMIX.Invocation (id: 198) + (invokedBy (idref: 199)) + (invokes 'ifFalse:(Object)') + (stub false)) + (FAMIX.Invocation (id: 200) + (invokedBy (idref: 199)) + (invokes 'isNil()') + (stub false)) + (FAMIX.Invocation (id: 201) + (invokedBy (idref: 199)) + (invokes 'selection()') + (stub false)) + (FAMIX.Invocation (id: 202) + (candidate (idref: 117)) + (invokedBy (idref: 199)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 203) + (invokedBy (idref: 199)) + (invokes 'remove:(Object)') + (stub false)) + (FAMIX.Invocation (id: 204) + (invokedBy (idref: 199)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 205) + (candidate (idref: 117)) + (invokedBy (idref: 199)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 206) + (candidate (idref: 207)) + (invokedBy (idref: 199)) + (invokes 'changedNode()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 208) + (invokedBy (idref: 209)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 210) + (invokedBy (idref: 209)) + (invokes 'isNil()') + (receivingVariable (idref: 211)) + (stub false)) + (FAMIX.Invocation (id: 212) + (invokedBy (idref: 209)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 213) + (invokedBy (idref: 158)) + (invokes 'new()') + (receivingVariable (idref: 214)) + (stub false)) + (FAMIX.Invocation (id: 215) + (invokedBy (idref: 158)) + (invokes 'do:(Object)') + (stub false)) + (FAMIX.Invocation (id: 216) + (invokedBy (idref: 158)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 217) + (candidate (idref: 117)) + (invokedBy (idref: 158)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 218) + (invokedBy (idref: 158)) + (invokes 'ifTrue:(Object)') + (stub false)) + (FAMIX.Invocation (id: 219) + (candidate (idref: 220) (idref: 221)) + (invokedBy (idref: 158)) + (invokes 'canOutput()') + (receivingVariable (idref: 222)) + (stub false)) + (FAMIX.Invocation (id: 223) + (invokedBy (idref: 158)) + (invokes 'add:(Object)') + (receivingVariable (idref: 224)) + (stub false)) + (FAMIX.Invocation (id: 225) + (invokedBy (idref: 158)) + (invokes '->(Object)') + (stub false)) + (FAMIX.Invocation (id: 226) + (candidate (idref: 14) (idref: 16) (idref: 15)) + (invokedBy (idref: 158)) + (invokes 'name()') + (receivingVariable (idref: 222)) + (stub false)) + (FAMIX.Invocation (id: 227) + (invokedBy (idref: 158)) + (invokes 'menu()') + (receivingVariable (idref: 224)) + (stub false)) + (FAMIX.Invocation (id: 228) + (invokedBy (idref: 229)) + (invokes 'add:(Object)') + (stub false)) + (FAMIX.Invocation (id: 230) + (invokedBy (idref: 229)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 231) + (candidate (idref: 117)) + (invokedBy (idref: 229)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 232) + (candidate (idref: 48)) + (invokedBy (idref: 229)) + (invokes 'new()') + (receivingVariable (idref: 233)) + (stub false)) + (FAMIX.Invocation (id: 234) + (invokedBy (idref: 235)) + (invokes 'add:(Object)') + (stub false)) + (FAMIX.Invocation (id: 236) + (invokedBy (idref: 235)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 237) + (candidate (idref: 117)) + (invokedBy (idref: 235)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 238) + (candidate (idref: 48)) + (invokedBy (idref: 235)) + (invokes 'new()') + (receivingVariable (idref: 239)) + (stub false)) + (FAMIX.Invocation (id: 240) + (invokedBy (idref: 57)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 241) + (invokedBy (idref: 57)) + (invokes 'isNil()') + (receivingVariable (idref: 242)) + (stub false)) + (FAMIX.Invocation (id: 243) + (invokedBy (idref: 57)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 244) + (invokedBy (idref: 207)) + (invokes 'new()') + (receivingVariable (idref: 214)) + (stub false)) + (FAMIX.Invocation (id: 245) + (invokedBy (idref: 207)) + (invokes 'do:(Object)') + (stub false)) + (FAMIX.Invocation (id: 246) + (invokedBy (idref: 207)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 247) + (candidate (idref: 117)) + (invokedBy (idref: 207)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 248) + (invokedBy (idref: 207)) + (invokes 'add:(Object)') + (receivingVariable (idref: 249)) + (stub false)) + (FAMIX.Invocation (id: 250) + (invokedBy (idref: 207)) + (invokes '->(Object)') + (stub false)) + (FAMIX.Invocation (id: 251) + (candidate (idref: 14) (idref: 16) (idref: 15)) + (invokedBy (idref: 207)) + (invokes 'name()') + (receivingVariable (idref: 252)) + (stub false)) + (FAMIX.Invocation (id: 253) + (invokedBy (idref: 207)) + (invokes 'setValue:(Object)') + (stub false)) + (FAMIX.Invocation (id: 254) + (candidate (idref: 186)) + (invokedBy (idref: 207)) + (invokes 'deviceNameMenu()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 255) + (invokedBy (idref: 207)) + (invokes 'menu()') + (receivingVariable (idref: 249)) + (stub false)) + (FAMIX.Invocation (id: 256) + (invokedBy (idref: 93)) + (invokes 'ifTrue:ifFalse:(Object,Object)') + (stub false)) + (FAMIX.Invocation (id: 257) + (invokedBy (idref: 93)) + (invokes 'isNil()') + (receivingVariable (idref: 258)) + (stub false)) + (FAMIX.Invocation (id: 259) + (invokedBy (idref: 93)) + (invokes 'asValue()') + (stub false)) + (FAMIX.Invocation (id: 260) + (invokedBy (idref: 261)) + (invokes 'add:(Object)') + (stub false)) + (FAMIX.Invocation (id: 262) + (invokedBy (idref: 261)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 263) + (candidate (idref: 117)) + (invokedBy (idref: 261)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 264) + (candidate (idref: 48)) + (invokedBy (idref: 261)) + (invokes 'new()') + (receivingVariable (idref: 265)) + (stub false)) + (FAMIX.Invocation (id: 266) + (invokedBy (idref: 155)) + (invokes 'new()') + (receivingVariable (idref: 214)) + (stub false)) + (FAMIX.Invocation (id: 267) + (invokedBy (idref: 155)) + (invokes 'do:(Object)') + (stub false)) + (FAMIX.Invocation (id: 268) + (invokedBy (idref: 155)) + (invokes 'list()') + (stub false)) + (FAMIX.Invocation (id: 269) + (candidate (idref: 117)) + (invokedBy (idref: 155)) + (invokes 'nodeList()') + (receivingVariable (idref: 118)) + (stub false)) + (FAMIX.Invocation (id: 270) + (invokedBy (idref: 155)) + (invokes 'ifTrue:(Object)') + (stub false)) + (FAMIX.Invocation (id: 271) + (candidate (idref: 272) (idref: 273)) + (invokedBy (idref: 155)) + (invokes 'canOriginate()') + (receivingVariable (idref: 274)) + (stub false)) + (FAMIX.Invocation (id: 275) + (invokedBy (idref: 155)) + (invokes 'add:(Object)') + (receivingVariable (idref: 276)) + (stub false)) + (FAMIX.Invocation (id: 277) + (invokedBy (idref: 155)) + (invokes '->(Object)') + (stub false)) + (FAMIX.Invocation (id: 278) + (candidate (idref: 14) (idref: 16) (idref: 15)) + (invokedBy (idref: 155)) + (invokes 'name()') + (receivingVariable (idref: 274)) + (stub false)) + (FAMIX.Invocation (id: 279) + (invokedBy (idref: 155)) + (invokes 'menu()') + (receivingVariable (idref: 276)) + (stub false)) + (FAMIX.Invocation (id: 280) + (invokedBy (idref: 281)) + (invokes 'halt()') + (receivingVariable (idref: 282)) + (stub false)) + (FAMIX.Invocation (id: 283) + (invokedBy (idref: 284)) + (invokes '=(Object)') + (stub false)) + (FAMIX.Invocation (id: 285) + (candidate (idref: 286)) + (invokedBy (idref: 284)) + (invokes 'id()') + (receivingVariable (idref: 282)) + (stub false)) + (FAMIX.Invocation (id: 287) + (candidate (idref: 286)) + (invokedBy (idref: 284)) + (invokes 'id()') + (receivingVariable (idref: 288)) + (stub false)) + (FAMIX.Invocation (id: 289) + (candidate (idref: 284)) + (invokedBy (idref: 91)) + (invokes 'equalsSingle:(Object)') + (receivingVariable (idref: 290)) + (stub false)) + (FAMIX.Invocation (id: 291) + (invokedBy (idref: 292)) + (invokes 'subclassResponsibility()') + (receivingVariable (idref: 293)) + (stub false)) + (FAMIX.Invocation (id: 294) + (invokedBy (idref: 295)) + (invokes 'printOn:(Object)') + (receivingVariable (idref: 296)) + (stub false)) + (FAMIX.Invocation (id: 297) + (invokedBy (idref: 295)) + (invokes 'ifTrue:(Object)') + (stub false)) + (FAMIX.Invocation (id: 298) + (invokedBy (idref: 295)) + (invokes 'notNil()') + (stub false)) + (FAMIX.Invocation (id: 299) + (candidate (idref: 56)) + (invokedBy (idref: 295)) + (invokes 'originator()') + (receivingVariable (idref: 300)) + (stub false)) + (FAMIX.Invocation (id: 301) + (invokedBy (idref: 295)) + (invokes 'nextPutAll:(Object)') + (receivingVariable (idref: 302)) + (stub false)) + (FAMIX.Invocation (id: 303) + (invokedBy (idref: 295)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 304) + (invokedBy (idref: 295)) + (invokes 'printString()') + (stub false)) + (FAMIX.Invocation (id: 305) + (candidate (idref: 14) (idref: 16) (idref: 15)) + (invokedBy (idref: 295)) + (invokes 'name()') + (stub false)) + (FAMIX.Invocation (id: 306) + (candidate (idref: 56)) + (invokedBy (idref: 295)) + (invokes 'originator()') + (receivingVariable (idref: 300)) + (stub false)) + (FAMIX.Invocation (id: 307) + (invokedBy (idref: 295)) + (invokes 'nextPutAll:(Object)') + (receivingVariable (idref: 302)) + (stub false)) + (FAMIX.Invocation (id: 308) + (invokedBy (idref: 295)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 309) + (invokedBy (idref: 295)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 310) + (invokedBy (idref: 295)) + (invokes ',(Object)') + (stub false)) + (FAMIX.Invocation (id: 311) + (invokedBy (idref: 295)) + (invokes 'printString()') + (stub false)) + (FAMIX.Invocation (id: 312) + (candidate (idref: 94)) + (invokedBy (idref: 295)) + (invokes 'addressee()') + (receivingVariable (idref: 300)) + (stub false)) + (FAMIX.Invocation (id: 313) + (candidate (idref: 83)) + (invokedBy (idref: 295)) + (invokes 'contents()') + (receivingVariable (idref: 300)) + (stub false)) + (FAMIX.Invocation (id: 314) + (invokedBy (idref: 174)) + (invokes 'changed:(Object)') + (receivingVariable (idref: 300)) + (stub false)) + (FAMIX.Invocation (id: 315) + (invokedBy (idref: 67)) + (invokes 'changed:(Object)') + (receivingVariable (idref: 300)) + (stub false)) + (FAMIX.Invocation (id: 316) + (invokedBy (idref: 163)) + (invokes 'changed:(Object)') + (receivingVariable (idref: 300)) + (stub false)) + (FAMIX.GlobalVariable (id: 29) + (name Transcript) + (stub false)) + (FAMIX.LocalVariable (id: 317) + (name selectionHolder) + (belongsTo (idref: 47)) + (stub false)) + (FAMIX.LocalVariable (id: 148) + (name dialogModel) + (belongsTo (idref: 141)) + (stub false)) + (FAMIX.LocalVariable (id: 150) + (name dialogBuilder) + (belongsTo (idref: 141)) + (stub false)) + (FAMIX.LocalVariable (id: 161) + (name returnVal) + (belongsTo (idref: 141)) + (stub false)) + (FAMIX.LocalVariable (id: 318) + (name packet) + (belongsTo (idref: 141)) + (stub false)) + (FAMIX.LocalVariable (id: 179) + (name dialogOriginator) + (belongsTo (idref: 141)) + (stub false)) + (FAMIX.LocalVariable (id: 172) + (name dialogAddressee) + (belongsTo (idref: 141)) + (stub false)) + (FAMIX.LocalVariable (id: 176) + (name dialogContents) + (belongsTo (idref: 141)) + (stub false)) + (FAMIX.LocalVariable (id: 319) + (name sel) + (belongsTo (idref: 199)) + (stub false)) + (FAMIX.LocalVariable (id: 224) + (name menuBuilder) + (belongsTo (idref: 158)) + (stub false)) + (FAMIX.LocalVariable (id: 222) + (name each) + (belongsTo (idref: 158)) + (stub false)) + (FAMIX.LocalVariable (id: 249) + (name newMenu) + (belongsTo (idref: 207)) + (stub false)) + (FAMIX.LocalVariable (id: 252) + (name node) + (belongsTo (idref: 207)) + (stub false)) + (FAMIX.LocalVariable (id: 276) + (name menuBuilder) + (belongsTo (idref: 155)) + (stub false)) + (FAMIX.LocalVariable (id: 274) + (name each) + (belongsTo (idref: 155)) + (stub false)) + (FAMIX.Access (id: 320) + (accessedIn (idref: 4)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 321) + (accessedIn (idref: 7)) + (accesses (idref: 8)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 322) + (accessedIn (idref: 7)) + (accesses (idref: 10)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 323) + (accessedIn (idref: 7)) + (accesses (idref: 10)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 324) + (accessedIn (idref: 7)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 325) + (accessedIn (idref: 7)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 326) + (accessedIn (idref: 7)) + (accesses (idref: 10)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 327) + (accessedIn (idref: 7)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 328) + (accessedIn (idref: 16)) + (accesses (idref: 329)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 330) + (accessedIn (idref: 3)) + (accesses (idref: 329)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 331) + (accessedIn (idref: 3)) + (accesses (idref: 332)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 333) + (accessedIn (idref: 3)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 334) + (accessedIn (idref: 28)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 335) + (accessedIn (idref: 28)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 336) + (accessedIn (idref: 28)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 337) + (accessedIn (idref: 28)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 338) + (accessedIn (idref: 28)) + (accesses (idref: 339)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 340) + (accessedIn (idref: 20)) + (accesses (idref: 341)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 342) + (accessedIn (idref: 44)) + (accesses (idref: 341)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 343) + (accessedIn (idref: 44)) + (accesses (idref: 344)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 345) + (accessedIn (idref: 44)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 346) + (accessedIn (idref: 39)) + (accesses (idref: 5)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 347) + (accessedIn (idref: 39)) + (accesses (idref: 348)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 349) + (accessedIn (idref: 48)) + (accesses (idref: 50)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 350) + (accessedIn (idref: 14)) + (accesses (idref: 52)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 351) + (accessedIn (idref: 41)) + (accesses (idref: 58)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 352) + (accessedIn (idref: 41)) + (accesses (idref: 65)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 353) + (accessedIn (idref: 41)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 354) + (accessedIn (idref: 41)) + (accesses (idref: 58)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 355) + (accessedIn (idref: 41)) + (accesses (idref: 65)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 356) + (accessedIn (idref: 41)) + (accesses (idref: 58)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 357) + (accessedIn (idref: 68)) + (accesses (idref: 69)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 358) + (accessedIn (idref: 68)) + (accesses (idref: 65)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 359) + (accessedIn (idref: 68)) + (accesses (idref: 65)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 360) + (accessedIn (idref: 68)) + (accesses (idref: 69)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 361) + (accessedIn (idref: 15)) + (accesses (idref: 72)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 362) + (accessedIn (idref: 74)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 363) + (accessedIn (idref: 74)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 364) + (accessedIn (idref: 74)) + (accesses (idref: 81)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 365) + (accessedIn (idref: 74)) + (accesses (idref: 85)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 366) + (accessedIn (idref: 367)) + (accesses (idref: 368)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 369) + (accessedIn (idref: 87)) + (accesses (idref: 88)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 370) + (accessedIn (idref: 40)) + (accesses (idref: 95)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 371) + (accessedIn (idref: 40)) + (accesses (idref: 88)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 372) + (accessedIn (idref: 40)) + (accesses (idref: 88)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 373) + (accessedIn (idref: 40)) + (accesses (idref: 95)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 374) + (accessedIn (idref: 40)) + (accesses (idref: 88)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 375) + (accessedIn (idref: 40)) + (accesses (idref: 95)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 376) + (accessedIn (idref: 98)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 377) + (accessedIn (idref: 98)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 378) + (accessedIn (idref: 98)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 379) + (accessedIn (idref: 98)) + (accesses (idref: 29)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 380) + (accessedIn (idref: 98)) + (accesses (idref: 110)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 381) + (accessedIn (idref: 98)) + (accesses (idref: 112)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 382) + (accessedIn (idref: 47)) + (accesses (idref: 114)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 383) + (accessedIn (idref: 47)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 384) + (accessedIn (idref: 47)) + (accesses (idref: 120)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 385) + (accessedIn (idref: 47)) + (accesses (idref: 317)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 386) + (accessedIn (idref: 47)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 387) + (accessedIn (idref: 47)) + (accesses (idref: 183)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 388) + (accessedIn (idref: 47)) + (accesses (idref: 125)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 389) + (accessedIn (idref: 47)) + (accesses (idref: 317)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 390) + (accessedIn (idref: 47)) + (accesses (idref: 211)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 391) + (accessedIn (idref: 47)) + (accesses (idref: 125)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 392) + (accessedIn (idref: 47)) + (accesses (idref: 317)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 393) + (accessedIn (idref: 84)) + (accesses (idref: 131)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 394) + (accessedIn (idref: 84)) + (accesses (idref: 131)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 395) + (accessedIn (idref: 84)) + (accesses (idref: 134)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 396) + (accessedIn (idref: 84)) + (accesses (idref: 131)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 397) + (accessedIn (idref: 117)) + (accesses (idref: 137)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 398) + (accessedIn (idref: 117)) + (accesses (idref: 137)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 399) + (accessedIn (idref: 117)) + (accesses (idref: 139)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 400) + (accessedIn (idref: 117)) + (accesses (idref: 137)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 401) + (accessedIn (idref: 141)) + (accesses (idref: 179)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 402) + (accessedIn (idref: 141)) + (accesses (idref: 172)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 403) + (accessedIn (idref: 141)) + (accesses (idref: 176)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 404) + (accessedIn (idref: 141)) + (accesses (idref: 134)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 405) + (accessedIn (idref: 141)) + (accesses (idref: 148)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 406) + (accessedIn (idref: 141)) + (accesses (idref: 146)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 407) + (accessedIn (idref: 141)) + (accesses (idref: 150)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 408) + (accessedIn (idref: 141)) + (accesses (idref: 148)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 409) + (accessedIn (idref: 141)) + (accesses (idref: 150)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 410) + (accessedIn (idref: 141)) + (accesses (idref: 179)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 411) + (accessedIn (idref: 141)) + (accesses (idref: 150)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 412) + (accessedIn (idref: 141)) + (accesses (idref: 172)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 413) + (accessedIn (idref: 141)) + (accesses (idref: 150)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 414) + (accessedIn (idref: 141)) + (accesses (idref: 176)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 415) + (accessedIn (idref: 141)) + (accesses (idref: 150)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 416) + (accessedIn (idref: 141)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 417) + (accessedIn (idref: 141)) + (accesses (idref: 150)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 418) + (accessedIn (idref: 141)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 419) + (accessedIn (idref: 141)) + (accesses (idref: 161)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 420) + (accessedIn (idref: 141)) + (accesses (idref: 148)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 421) + (accessedIn (idref: 141)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 422) + (accessedIn (idref: 141)) + (accesses (idref: 161)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 423) + (accessedIn (idref: 141)) + (accesses (idref: 318)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 424) + (accessedIn (idref: 141)) + (accesses (idref: 165)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 425) + (accessedIn (idref: 141)) + (accesses (idref: 169)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 426) + (accessedIn (idref: 141)) + (accesses (idref: 172)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 427) + (accessedIn (idref: 141)) + (accesses (idref: 176)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 428) + (accessedIn (idref: 141)) + (accesses (idref: 179)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 429) + (accessedIn (idref: 141)) + (accesses (idref: 318)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 430) + (accessedIn (idref: 181)) + (accesses (idref: 183)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 431) + (accessedIn (idref: 181)) + (accesses (idref: 183)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 432) + (accessedIn (idref: 181)) + (accesses (idref: 183)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 433) + (accessedIn (idref: 186)) + (accesses (idref: 188)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 434) + (accessedIn (idref: 186)) + (accesses (idref: 188)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 435) + (accessedIn (idref: 186)) + (accesses (idref: 191)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 436) + (accessedIn (idref: 186)) + (accesses (idref: 188)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 437) + (accessedIn (idref: 438)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 439) + (accessedIn (idref: 440)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 441) + (accessedIn (idref: 193)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 442) + (accessedIn (idref: 193)) + (accesses (idref: 197)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 443) + (accessedIn (idref: 199)) + (accesses (idref: 319)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 444) + (accessedIn (idref: 199)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 445) + (accessedIn (idref: 199)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 446) + (accessedIn (idref: 199)) + (accesses (idref: 319)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 447) + (accessedIn (idref: 199)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 448) + (accessedIn (idref: 209)) + (accesses (idref: 211)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 449) + (accessedIn (idref: 209)) + (accesses (idref: 211)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 450) + (accessedIn (idref: 209)) + (accesses (idref: 211)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 451) + (accessedIn (idref: 158)) + (accesses (idref: 224)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 452) + (accessedIn (idref: 158)) + (accesses (idref: 214)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 453) + (accessedIn (idref: 158)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 454) + (accessedIn (idref: 158)) + (accesses (idref: 222)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 455) + (accessedIn (idref: 158)) + (accesses (idref: 224)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 456) + (accessedIn (idref: 158)) + (accesses (idref: 222)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 457) + (accessedIn (idref: 158)) + (accesses (idref: 222)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 458) + (accessedIn (idref: 158)) + (accesses (idref: 224)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 459) + (accessedIn (idref: 229)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 460) + (accessedIn (idref: 229)) + (accesses (idref: 233)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 461) + (accessedIn (idref: 235)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 462) + (accessedIn (idref: 235)) + (accesses (idref: 239)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 463) + (accessedIn (idref: 57)) + (accesses (idref: 242)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 464) + (accessedIn (idref: 57)) + (accesses (idref: 242)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 465) + (accessedIn (idref: 57)) + (accesses (idref: 242)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 466) + (accessedIn (idref: 207)) + (accesses (idref: 249)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 467) + (accessedIn (idref: 207)) + (accesses (idref: 214)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 468) + (accessedIn (idref: 207)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 469) + (accessedIn (idref: 207)) + (accesses (idref: 249)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 470) + (accessedIn (idref: 207)) + (accesses (idref: 252)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 471) + (accessedIn (idref: 207)) + (accesses (idref: 252)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 472) + (accessedIn (idref: 207)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 473) + (accessedIn (idref: 207)) + (accesses (idref: 249)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 474) + (accessedIn (idref: 93)) + (accesses (idref: 258)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 475) + (accessedIn (idref: 93)) + (accesses (idref: 258)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 476) + (accessedIn (idref: 93)) + (accesses (idref: 258)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 477) + (accessedIn (idref: 261)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 478) + (accessedIn (idref: 261)) + (accesses (idref: 265)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 479) + (accessedIn (idref: 155)) + (accesses (idref: 276)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 480) + (accessedIn (idref: 155)) + (accesses (idref: 214)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 481) + (accessedIn (idref: 155)) + (accesses (idref: 118)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 482) + (accessedIn (idref: 155)) + (accesses (idref: 274)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 483) + (accessedIn (idref: 155)) + (accesses (idref: 276)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 484) + (accessedIn (idref: 155)) + (accesses (idref: 274)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 485) + (accessedIn (idref: 155)) + (accesses (idref: 274)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 486) + (accessedIn (idref: 155)) + (accesses (idref: 276)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 487) + (accessedIn (idref: 286)) + (accesses (idref: 488)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 489) + (accessedIn (idref: 167)) + (accesses (idref: 488)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 490) + (accessedIn (idref: 167)) + (accesses (idref: 491)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 492) + (accessedIn (idref: 281)) + (accesses (idref: 282)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 493) + (accessedIn (idref: 284)) + (accesses (idref: 282)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 494) + (accessedIn (idref: 284)) + (accesses (idref: 288)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 495) + (accessedIn (idref: 91)) + (accesses (idref: 290)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 496) + (accessedIn (idref: 91)) + (accesses (idref: 282)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 497) + (accessedIn (idref: 292)) + (accesses (idref: 293)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 498) + (accessedIn (idref: 295)) + (accesses (idref: 296)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 499) + (accessedIn (idref: 295)) + (accesses (idref: 302)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 500) + (accessedIn (idref: 295)) + (accesses (idref: 300)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 501) + (accessedIn (idref: 295)) + (accesses (idref: 302)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 502) + (accessedIn (idref: 295)) + (accesses (idref: 300)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 503) + (accessedIn (idref: 295)) + (accesses (idref: 302)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 504) + (accessedIn (idref: 295)) + (accesses (idref: 300)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 505) + (accessedIn (idref: 295)) + (accesses (idref: 300)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 506) + (accessedIn (idref: 83)) + (accesses (idref: 507)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 508) + (accessedIn (idref: 174)) + (accesses (idref: 507)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 509) + (accessedIn (idref: 174)) + (accesses (idref: 510)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 511) + (accessedIn (idref: 174)) + (accesses (idref: 300)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 512) + (accessedIn (idref: 67)) + (accesses (idref: 513)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 514) + (accessedIn (idref: 67)) + (accesses (idref: 515)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 516) + (accessedIn (idref: 67)) + (accesses (idref: 300)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 517) + (accessedIn (idref: 56)) + (accesses (idref: 513)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 518) + (accessedIn (idref: 94)) + (accesses (idref: 519)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 520) + (accessedIn (idref: 163)) + (accesses (idref: 519)) + (readWriteAccess false) + (stub false)) + (FAMIX.Access (id: 521) + (accessedIn (idref: 163)) + (accesses (idref: 522)) + (readWriteAccess true) + (stub false)) + (FAMIX.Access (id: 523) + (accessedIn (idref: 163)) + (accesses (idref: 300)) + (readWriteAccess true) + (stub false)) + (FAMIX.Attribute (id: 524) + (name instanceVariables) + (accessControlQualifier protected) + (belongsTo (idref: 525)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 526) + (name organization) + (accessControlQualifier protected) + (belongsTo (idref: 525)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 527) + (name type) + (accessControlQualifier protected) + (belongsTo (idref: 528)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 529) + (name builder) + (accessControlQualifier protected) + (belongsTo (idref: 530)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 531) + (name uiSession) + (accessControlQualifier protected) + (belongsTo (idref: 530)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 532) + (name eventHandlers) + (accessControlQualifier protected) + (belongsTo (idref: 530)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 329) + (name name) + (accessControlQualifier protected) + (belongsTo (idref: 533)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 341) + (name nextNode) + (accessControlQualifier protected) + (belongsTo (idref: 533)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 534) + (name superclass) + (accessControlQualifier protected) + (belongsTo (idref: 535)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 536) + (name methodDict) + (accessControlQualifier protected) + (belongsTo (idref: 535)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 537) + (name format) + (accessControlQualifier protected) + (belongsTo (idref: 535)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 538) + (name subclasses) + (accessControlQualifier protected) + (belongsTo (idref: 535)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 539) + (name dependents) + (accessControlQualifier protected) + (belongsTo (idref: 540)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 541) + (name savedWindowInformation) + (accessControlQualifier protected) + (belongsTo (idref: 542)) + (hasClassScope true) + (stub false)) + (FAMIX.Attribute (id: 488) + (name id) + (accessControlQualifier protected) + (belongsTo (idref: 543)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 507) + (name contents) + (accessControlQualifier protected) + (belongsTo (idref: 544)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 519) + (name addressee) + (accessControlQualifier protected) + (belongsTo (idref: 544)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 513) + (name originator) + (accessControlQualifier protected) + (belongsTo (idref: 544)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 368) + (name serverType) + (accessControlQualifier protected) + (belongsTo (idref: 545)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 546) + (name name) + (accessControlQualifier protected) + (belongsTo (idref: 547)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 548) + (name classPool) + (accessControlQualifier protected) + (belongsTo (idref: 547)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 549) + (name environment) + (accessControlQualifier protected) + (belongsTo (idref: 547)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 183) + (name nodeName) + (accessControlQualifier protected) + (belongsTo (idref: 550)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 137) + (name nodeList) + (accessControlQualifier protected) + (belongsTo (idref: 550)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 211) + (name nextNode) + (accessControlQualifier protected) + (belongsTo (idref: 550)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 188) + (name deviceNameMenu) + (accessControlQualifier protected) + (belongsTo (idref: 550)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 131) + (name contents) + (accessControlQualifier protected) + (belongsTo (idref: 550)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 242) + (name originator) + (accessControlQualifier protected) + (belongsTo (idref: 550)) + (hasClassScope false) + (stub false)) + (FAMIX.Attribute (id: 258) + (name addressee) + (accessControlQualifier protected) + (belongsTo (idref: 550)) + (hasClassScope false) + (stub false)) + (FAMIX.Comment (id: 551) + (belongsTo (idref: 4)) + (content '"This is the default initialize method that is always called when new instances are created. My + subclasses will likely override this method to be initialized."') + (stub false)) + (FAMIX.Comment (id: 552) + (belongsTo (idref: 4)) + (content '"I just set my name to unnamed"') + (stub false)) + (FAMIX.Comment (id: 553) + (belongsTo (idref: 7)) + (content '"print a textual representation of myself on the argument, aStream"') + (stub false)) + (FAMIX.Comment (id: 554) + (belongsTo (idref: 16)) + (content '"returns the name of the node"') + (stub false)) + (FAMIX.Comment (id: 555) + (belongsTo (idref: 556)) + (content '"this method is necessary for Moose tests"') + (stub false)) + (FAMIX.Comment (id: 557) + (belongsTo (idref: 3)) + (content '"sets the name of the node (a Symbol)"') + (stub false)) + (FAMIX.Comment (id: 558) + (belongsTo (idref: 28)) + (content '"Display debug information in the Transcript, then send the packet to the node which whom I + communicate"') + (stub false)) + (FAMIX.Comment (id: 559) + (belongsTo (idref: 20)) + (content '"return the next node of the receiver"') + (stub false)) + (FAMIX.Comment (id: 560) + (belongsTo (idref: 44)) + (content '"set the next node of the receiver to be aNode"') + (stub false)) + (FAMIX.Comment (id: 561) + (belongsTo (idref: 39)) + (content '"Having received the packet, send it on. This is the default behavior."') + (stub false)) + (FAMIX.Comment (id: 562) + (belongsTo (idref: 39)) + (content '"My subclasses will probably override this method to do something special"') + (stub false)) + (FAMIX.Comment (id: 563) + (belongsTo (idref: 14)) + (content '"added for candidate invocations operator test"') + (stub false)) + (FAMIX.Comment (id: 564) + (belongsTo (idref: 41)) + (content '"accept the packet and see if I am the originator. If this is the case, take the packet out because the + addressee is unknown. Print this on the Transcript"') + (stub false)) + (FAMIX.Comment (id: 565) + (belongsTo (idref: 68)) + (content '"This is how packets get inserted into the network. This is a likely method to be rwritten to permit + packets to be entered in various ways. Currently, I assume that someone alse creates the packet, + and passes it to me as an argument."') + (stub false)) + (FAMIX.Comment (id: 566) + (belongsTo (idref: 15)) + (content '"added for candidate invocations operator test"') + (stub false)) + (FAMIX.Comment (id: 567) + (belongsTo (idref: 74)) + (content '"My subclasses have to use this method to define their outputting behavior"') + (stub false)) + (FAMIX.Comment (id: 568) + (belongsTo (idref: 87)) + (content '"My subclasses have to use this method to define their outputting behavior"') + (stub false)) + (FAMIX.Comment (id: 569) + (belongsTo (idref: 40)) + (content '"I first see if the packet is for me. If it is, I output it. Otherwise, I pass it on"') + (stub false)) + (FAMIX.Comment (id: 570) + (belongsTo (idref: 40)) + (content '"self name = thePacket addressee"') + (stub false)) + (FAMIX.Comment (id: 571) + (belongsTo (idref: 98)) + (content '"My subclasses have to use this method to define their outputting behavior"') + (stub false)) + (FAMIX.Comment (id: 572) + (belongsTo (idref: 84)) + (content '"This method was generated by UIDefiner. Any edits made here + may be lost whenever methods are automatically defined. The + initialization provided below may have been preempted by an + initialize method."') + (stub false)) + (FAMIX.Comment (id: 573) + (belongsTo (idref: 117)) + (content '"This method was generated by UIDefiner. Any edits made here + may be lost whenever methods are automatically defined. The + initialization provided below may have been preempted by an + initialize method."') + (stub false)) + (FAMIX.Comment (id: 574) + (belongsTo (idref: 141)) + (content '"the next three lines create ValueHolders to support the three dialog widgets"') + (stub false)) + (FAMIX.Comment (id: 575) + (belongsTo (idref: 141)) + (content '"next two lines create a new SimpleDialog object and retrieves the builder"') + (stub false)) + (FAMIX.Comment (id: 576) + (belongsTo (idref: 141)) + (content '"the following lines connect the widgets of the interface with the ValueHolders created"') + (stub false)) + (FAMIX.Comment (id: 577) + (belongsTo (idref: 141)) + (content '"the following lines ask the LANInterface for the originators and outputters menus. + You will write these next, so select proceed when VisualWorks when VisualWorks indicates that they are new messages."') + (stub false)) + (FAMIX.Comment (id: 578) + (belongsTo (idref: 141)) + (content '"the following line actually opens the dialog interface, originateDialog, and accepts user input"') + (stub false)) + (FAMIX.Comment (id: 579) + (belongsTo (idref: 141)) + (content '"returnvalue will be true if the user selected Accept, otherwise it will be false"') + (stub false)) + (FAMIX.Comment (id: 580) + (belongsTo (idref: 141)) + (content '"create a new packet, fill it in and give it to the workstation"') + (stub false)) + (FAMIX.Comment (id: 581) + (belongsTo (idref: 181)) + (content '"This method was generated by UIDefiner. Any edits made here + may be lost whenever methods are automatically defined. The + initialization provided below may have been preempted by an + initialize method."') + (stub false)) + (FAMIX.Comment (id: 582) + (belongsTo (idref: 438)) + (content '"This stub method was generated by UIDefiner"') + (stub false)) + (FAMIX.Comment (id: 583) + (belongsTo (idref: 440)) + (content '"This stub method was generated by UIDefiner"') + (stub false)) + (FAMIX.Comment (id: 584) + (belongsTo (idref: 209)) + (content '"This method was generated by UIDefiner. Any edits made here + may be lost whenever methods are automatically defined. The + initialization provided below may have been preempted by an + initialize method."') + (stub false)) + (FAMIX.Comment (id: 585) + (belongsTo (idref: 57)) + (content '"This method was generated by UIDefiner. Any edits made here + may be lost whenever methods are automatically defined. The + initialization provided below may have been preempted by an + initialize method."') + (stub false)) + (FAMIX.Comment (id: 586) + (belongsTo (idref: 93)) + (content '"This method was generated by UIDefiner. Any edits made here + may be lost whenever methods are automatically defined. The + initialization provided below may have been preempted by an + initialize method."') + (stub false)) + (FAMIX.Comment (id: 587) + (belongsTo (idref: 550)) + (content 'LAN Interface comments for testing purposes. + +Instance Variables: + addressee <ValueHolder> description of addressee + contents <ValueHolder> description of contents + deviceNameMenu <ValueModel> description of deviceNameMenu + nextNode <ValueHolder> description of nextNode + nodeList <SelectionInList> description of nodeList + nodeName <ValueHolder> description of nodeName + originator <ValueHolder> description of originator + +') + (stub false)) + (FAMIX.Comment (id: 588) + (belongsTo (idref: 589)) + (content '"UIPainter new openOnClass: self andSelector: #originateDialog"') + (stub false)) + (FAMIX.Comment (id: 590) + (belongsTo (idref: 591)) + (content '"UIPainter new openOnClass: self andSelector: #windowSpec"') + (stub false)) + (FAMIX.Comment (id: 592) + (belongsTo (idref: 83)) + (content '"return the contents of the receiver"') + (stub false)) + (FAMIX.Comment (id: 593) + (belongsTo (idref: 174)) + (content '"set the contents of the receiver"') + (stub false)) + (FAMIX.Comment (id: 594) + (belongsTo (idref: 67)) + (content '"Set the originator of the receiver"') + (stub false)) + (FAMIX.Comment (id: 595) + (belongsTo (idref: 56)) + (content '"I return the originator of the receiver"') + (stub false)) + (FAMIX.Comment (id: 596) + (belongsTo (idref: 94)) + (content '"return the name of the node that is the addressee for this packet"') + (stub false)) + (FAMIX.Comment (id: 597) + (belongsTo (idref: 163)) + (content '"set the name of the node that is the addressee for this packet"') + (stub false)) + (FAMIX.Class (id: 599) + (name 'ValueModel_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 601)) + (stub true)) + (FAMIX.Class (id: 165) + (name 'Packet_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 604) + (name 'Model_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 605)) + (stub true)) + (FAMIX.Class (id: 134) + (name 'String_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 607)) + (stub true)) + (FAMIX.Class (id: 544) + (name Packet) + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 533) + (name Node) + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 139) + (name 'SelectionInList_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 608)) + (stub true)) + (FAMIX.Class (id: 550) + (name LANInterface) + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 609) + (name 'AbstractDestinationAddress_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 540) + (name Model) + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 605)) + (stub true)) + (FAMIX.Class (id: 610) + (name FileServer) + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 543) + (name SingleDestinationAddress) + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 611) + (name 'List_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 608)) + (stub true)) + (FAMIX.Class (id: 197) + (name 'WorkStation_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 612) + (name 'LANInterface_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 545) + (name OutputServer) + (belongsTo (idref: 602)) + (isAbstract true) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 214) + (name 'MenuBuilder_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 613)) + (stub true)) + (FAMIX.Class (id: 614) + (name 'ClassDescription_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 615)) + (stub true)) + (FAMIX.Class (id: 233) + (name 'FileServer_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 525) + (name ClassDescription) + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 615)) + (stub true)) + (FAMIX.Class (id: 616) + (name 'Object_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 605)) + (stub true)) + (FAMIX.Class (id: 547) + (name Class) + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 615)) + (stub true)) + (FAMIX.Class (id: 617) + (name 'Behavior_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 615)) + (stub true)) + (FAMIX.Class (id: 618) + (name 'Class_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 615)) + (stub true)) + (FAMIX.Class (id: 619) + (name 'SequenceableCollection_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 620)) + (stub true)) + (FAMIX.Class (id: 621) + (name PrintServer) + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 542) + (name 'ApplicationModel_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 613)) + (stub true)) + (FAMIX.Class (id: 622) + (name 'Collection_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 620)) + (stub true)) + (FAMIX.Class (id: 623) + (name 'ProtocolAdaptor_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 624)) + (stub true)) + (FAMIX.Class (id: 625) + (name AbstractDestinationAddress) + (belongsTo (idref: 602)) + (isAbstract true) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 265) + (name 'PrintServer_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 125) + (name 'AspectAdaptor_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 624)) + (stub true)) + (FAMIX.Class (id: 528) + (name WorkStation) + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 530) + (name ApplicationModel) + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 613)) + (stub true)) + (FAMIX.Class (id: 535) + (name Behavior) + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 615)) + (stub true)) + (FAMIX.Class (id: 626) + (name 'CharacterArray_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 607)) + (stub true)) + (FAMIX.Class (id: 169) + (name 'SingleDestinationAddress_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 627) + (name 'OutputServer_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 146) + (name 'SimpleDialog_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 628)) + (stub true)) + (FAMIX.Class (id: 239) + (name 'Node_class') + (belongsTo (idref: 602)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 603)) + (stub false)) + (FAMIX.Class (id: 629) + (name 'ArrayedCollection_class') + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 620)) + (stub true)) + (FAMIX.Class (id: 120) + (name 'DependentList_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 608)) + (stub true)) + (FAMIX.Class (id: 191) + (name 'Menu_class') + (belongsTo (idref: 600)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 630)) + (stub true)) + (FAMIX.Class (id: 631) + (name Object) + (belongsTo (idref: 606)) + (isAbstract false) + (isInterface false) + (packagedIn (idref: 605)) + (stub true)) + (FAMIX.Namespace (id: 606) + (name Core) + (belongsTo (idref: 632)) + (stub false)) + (FAMIX.Namespace (id: 600) + (name UI) + (belongsTo (idref: 632)) + (stub false)) + (FAMIX.Namespace (id: 602) + (name LAN) + (belongsTo (idref: 632)) + (stub false)) + (FAMIX.Namespace (id: 633) + (name Root) + (stub false)) + (FAMIX.Namespace (id: 632) + (name Smalltalk) + (belongsTo (idref: 633)) + (stub false)) + (FAMIX.Method (id: 56) + (name originator) + (accessControlQualifier public) + (belongsTo (idref: 544)) + (category accessing) + (hasClassScope false) + (kind getter) + (packagedIn (idref: 603)) + (signature 'originator()') + (source ) + (stub false)) + (FAMIX.Method (id: 209) + (name nextNode) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category aspects) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'nextNode()') + (source ) + (stub false)) + (FAMIX.Method (id: 3) + (name name:) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category accessing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'name:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 14) + (name name) + (accessControlQualifier public) + (belongsTo (idref: 528)) + (category outputting) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'name()') + (source ) + (stub false)) + (FAMIX.Method (id: 155) + (name originatorsMenu) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category private) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'originatorsMenu()') + (source ) + (stub false)) + (FAMIX.Method (id: 286) + (name id) + (accessControlQualifier public) + (belongsTo (idref: 543)) + (category accessing) + (hasClassScope false) + (kind getter) + (packagedIn (idref: 603)) + (signature 'id()') + (source ) + (stub false)) + (FAMIX.Method (id: 229) + (name newFileServer) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'newFileServer()') + (source ) + (stub false)) + (FAMIX.Method (id: 44) + (name nextNode:) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category accessing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'nextNode:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 93) + (name addressee) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category aspects) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'addressee()') + (source ) + (stub false)) + (FAMIX.Method (id: 181) + (name nodeName) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category aspects) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'nodeName()') + (source ) + (stub false)) + (FAMIX.Method (id: 16) + (name name) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category accessing) + (hasClassScope false) + (kind getter) + (packagedIn (idref: 603)) + (signature 'name()') + (source ) + (stub false)) + (FAMIX.Method (id: 281) + (name equalsMultiple:) + (accessControlQualifier public) + (belongsTo (idref: 543)) + (category comparing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'equalsMultiple:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 20) + (name nextNode) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category accessing) + (hasClassScope false) + (kind getter) + (packagedIn (idref: 603)) + (signature 'nextNode()') + (source ) + (stub false)) + (FAMIX.Method (id: 220) + (name canOutput) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category testing) + (hasClassScope false) + (kind constant) + (packagedIn (idref: 603)) + (signature 'canOutput()') + (source ) + (stub false)) + (FAMIX.Method (id: 117) + (name nodeList) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category aspects) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'nodeList()') + (source ) + (stub false)) + (FAMIX.Method (id: 199) + (name remove) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'remove()') + (source ) + (stub false)) + (FAMIX.Method (id: 83) + (name contents) + (accessControlQualifier public) + (belongsTo (idref: 544)) + (category accessing) + (hasClassScope false) + (kind getter) + (packagedIn (idref: 603)) + (signature 'contents()') + (source ) + (stub false)) + (FAMIX.Method (id: 74) + (name output:) + (accessControlQualifier public) + (belongsTo (idref: 610)) + (category outputting) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'output:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 295) + (name printOn:) + (accessControlQualifier public) + (belongsTo (idref: 544)) + (category printing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'printOn:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 438) + (name accept) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'accept()') + (source ) + (stub false)) + (FAMIX.Method (id: 589) + (name originateDialog) + (accessControlQualifier public) + (belongsTo (idref: 612)) + (category 'interface specs') + (hasClassScope true) + (kind constant) + (packagedIn (idref: 603)) + (signature 'originateDialog()') + (source ) + (stub false)) + (FAMIX.Method (id: 47) + (name initialize) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category 'initialize-release') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'initialize()') + (source ) + (stub false)) + (FAMIX.Method (id: 221) + (name canOutput) + (accessControlQualifier public) + (belongsTo (idref: 545)) + (category testing) + (hasClassScope false) + (kind constant) + (packagedIn (idref: 603)) + (signature 'canOutput()') + (source ) + (stub false)) + (FAMIX.Method (id: 163) + (name addressee:) + (accessControlQualifier public) + (belongsTo (idref: 544)) + (category accessing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'addressee:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 158) + (name addresseesMenu) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category private) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'addresseesMenu()') + (source ) + (stub false)) + (FAMIX.Method (id: 207) + (name changedNode) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'changedNode()') + (source ) + (stub false)) + (FAMIX.Method (id: 284) + (name equalsSingle:) + (accessControlQualifier public) + (belongsTo (idref: 543)) + (category comparing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'equalsSingle:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 235) + (name newNode) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'newNode()') + (source ) + (stub false)) + (FAMIX.Method (id: 48) + (name new) + (accessControlQualifier public) + (belongsTo (idref: 239)) + (category 'instance creation') + (hasClassScope true) + (kind constructor) + (packagedIn (idref: 603)) + (signature 'new()') + (source ) + (stub false)) + (FAMIX.Method (id: 167) + (name id:) + (accessControlQualifier public) + (belongsTo (idref: 543)) + (category accessing) + (hasClassScope false) + (kind setter) + (packagedIn (idref: 603)) + (signature 'id:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 98) + (name output:) + (accessControlQualifier public) + (belongsTo (idref: 621)) + (category outputting) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'output:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 556) + (name methodWithEmptyBody) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category 'moose testing') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'methodWithEmptyBody()') + (source ) + (stub false)) + (FAMIX.Method (id: 186) + (name deviceNameMenu) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category aspects) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'deviceNameMenu()') + (source ) + (stub false)) + (FAMIX.Method (id: 15) + (name name) + (accessControlQualifier public) + (belongsTo (idref: 610)) + (category outputting) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'name()') + (source ) + (stub false)) + (FAMIX.Method (id: 272) + (name canOriginate) + (accessControlQualifier public) + (belongsTo (idref: 528)) + (category testing) + (hasClassScope false) + (kind constant) + (packagedIn (idref: 603)) + (signature 'canOriginate()') + (source ) + (stub false)) + (FAMIX.Method (id: 91) + (name isDestinationFor:) + (accessControlQualifier public) + (belongsTo (idref: 543)) + (category comparing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'isDestinationFor:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 7) + (name printOn:) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category printing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'printOn:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 591) + (name windowSpec) + (accessControlQualifier public) + (belongsTo (idref: 612)) + (category 'interface specs') + (hasClassScope true) + (kind constant) + (packagedIn (idref: 603)) + (signature 'windowSpec()') + (source ) + (stub false)) + (FAMIX.Method (id: 367) + (name setServerType) + (accessControlQualifier public) + (belongsTo (idref: 610)) + (category setting) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'setServerType()') + (source ) + (stub false)) + (FAMIX.Method (id: 39) + (name accept:) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category 'sending-receiving') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'accept:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 40) + (name accept:) + (accessControlQualifier public) + (belongsTo (idref: 545)) + (category 'sending-receiving') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'accept:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 4) + (name initialize) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category 'initialize-release') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'initialize()') + (source ) + (stub false)) + (FAMIX.Method (id: 193) + (name newWorkstation) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'newWorkstation()') + (source ) + (stub false)) + (FAMIX.Method (id: 261) + (name newPrintServer) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'newPrintServer()') + (source ) + (stub false)) + (FAMIX.Method (id: 174) + (name contents:) + (accessControlQualifier public) + (belongsTo (idref: 544)) + (category accessing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'contents:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 94) + (name addressee) + (accessControlQualifier public) + (belongsTo (idref: 544)) + (category accessing) + (hasClassScope false) + (kind getter) + (packagedIn (idref: 603)) + (signature 'addressee()') + (source ) + (stub false)) + (FAMIX.Method (id: 440) + (name cancel) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'cancel()') + (source ) + (stub false)) + (FAMIX.Method (id: 67) + (name originator:) + (accessControlQualifier public) + (belongsTo (idref: 544)) + (category accessing) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'originator:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 141) + (name originate) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category actions) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'originate()') + (source ) + (stub false)) + (FAMIX.Method (id: 57) + (name originator) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category aspects) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'originator()') + (source ) + (stub false)) + (FAMIX.Method (id: 273) + (name canOriginate) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category testing) + (hasClassScope false) + (kind constant) + (packagedIn (idref: 603)) + (signature 'canOriginate()') + (source ) + (stub false)) + (FAMIX.Method (id: 292) + (name isDestinationFor:) + (accessControlQualifier public) + (belongsTo (idref: 625)) + (category comparing) + (hasClassScope false) + (kind abstract) + (packagedIn (idref: 603)) + (signature 'isDestinationFor:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 28) + (name send:) + (accessControlQualifier public) + (belongsTo (idref: 533)) + (category 'sending-receiving') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'send:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 41) + (name accept:) + (accessControlQualifier public) + (belongsTo (idref: 528)) + (category 'sending-receiving') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'accept:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 87) + (name output:) + (accessControlQualifier public) + (belongsTo (idref: 545)) + (category outputting) + (hasClassScope false) + (kind abstract) + (packagedIn (idref: 603)) + (signature 'output:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 68) + (name originate:) + (accessControlQualifier public) + (belongsTo (idref: 528)) + (category 'sending-receiving') + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'originate:(Object)') + (source ) + (stub false)) + (FAMIX.Method (id: 84) + (name contents) + (accessControlQualifier public) + (belongsTo (idref: 550)) + (category aspects) + (hasClassScope false) + (packagedIn (idref: 603)) + (signature 'contents()') + (source ) + (stub false)) + (FAMIX.FormalParameter (id: 10) + (name aStream) + (belongsTo (idref: 7)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 332) + (name aSymbol) + (belongsTo (idref: 3)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 339) + (name thePacket) + (belongsTo (idref: 28)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 344) + (name aNode) + (belongsTo (idref: 44)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 348) + (name thePacket) + (belongsTo (idref: 39)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 58) + (name thePacket) + (belongsTo (idref: 41)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 69) + (name thePacket) + (belongsTo (idref: 68)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 85) + (name thePacket) + (belongsTo (idref: 74)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 634) + (name thePacket) + (belongsTo (idref: 87)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 95) + (name thePacket) + (belongsTo (idref: 40)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 112) + (name thePacket) + (belongsTo (idref: 98)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 491) + (name aSymbol) + (belongsTo (idref: 167)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 635) + (name aSingleNodeAddress) + (belongsTo (idref: 281)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 288) + (name aSingleNodeAddress) + (belongsTo (idref: 284)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 290) + (name aNodeAddress) + (belongsTo (idref: 91)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 636) + (name aNodeAddress) + (belongsTo (idref: 292)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 302) + (name aStream) + (belongsTo (idref: 295)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 510) + (name aString) + (belongsTo (idref: 174)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 515) + (name aNode) + (belongsTo (idref: 67)) + (position 0) + (stub false)) + (FAMIX.FormalParameter (id: 522) + (name anAddress) + (belongsTo (idref: 163)) + (position 0) + (stub false)) + (FAMIX.ImplicitVariable (id: 52) + (name super) + (belongsTo (idref: 528)) + (stub false)) + (FAMIX.ImplicitVariable (id: 65) + (name self) + (belongsTo (idref: 528)) + (stub false)) + (FAMIX.ImplicitVariable (id: 50) + (name super) + (belongsTo (idref: 239)) + (stub false)) + (FAMIX.ImplicitVariable (id: 5) + (name self) + (belongsTo (idref: 533)) + (stub false)) + (FAMIX.ImplicitVariable (id: 8) + (name super) + (belongsTo (idref: 533)) + (stub false)) + (FAMIX.ImplicitVariable (id: 72) + (name super) + (belongsTo (idref: 610)) + (stub false)) + (FAMIX.ImplicitVariable (id: 81) + (name self) + (belongsTo (idref: 610)) + (stub false)) + (FAMIX.ImplicitVariable (id: 110) + (name self) + (belongsTo (idref: 621)) + (stub false)) + (FAMIX.ImplicitVariable (id: 282) + (name self) + (belongsTo (idref: 543)) + (stub false)) + (FAMIX.ImplicitVariable (id: 293) + (name self) + (belongsTo (idref: 625)) + (stub false)) + (FAMIX.ImplicitVariable (id: 296) + (name super) + (belongsTo (idref: 544)) + (stub false)) + (FAMIX.ImplicitVariable (id: 300) + (name self) + (belongsTo (idref: 544)) + (stub false)) + (FAMIX.ImplicitVariable (id: 88) + (name self) + (belongsTo (idref: 545)) + (stub false)) + (FAMIX.ImplicitVariable (id: 114) + (name super) + (belongsTo (idref: 550)) + (stub false)) + (FAMIX.ImplicitVariable (id: 118) + (name self) + (belongsTo (idref: 550)) + (stub false)) + (FAMIX.InheritanceDefinition (id: 637) + (stub false) + (subclass (idref: 533)) + (superclass (idref: 540))) + (FAMIX.InheritanceDefinition (id: 638) + (stub false) + (subclass (idref: 540)) + (superclass (idref: 631))) + (FAMIX.InheritanceDefinition (id: 639) + (stub false) + (subclass (idref: 616)) + (superclass (idref: 547))) + (FAMIX.InheritanceDefinition (id: 640) + (stub false) + (subclass (idref: 547)) + (superclass (idref: 525))) + (FAMIX.InheritanceDefinition (id: 641) + (stub false) + (subclass (idref: 525)) + (superclass (idref: 535))) + (FAMIX.InheritanceDefinition (id: 642) + (stub false) + (subclass (idref: 535)) + (superclass (idref: 631))) + (FAMIX.InheritanceDefinition (id: 643) + (stub false) + (subclass (idref: 617)) + (superclass (idref: 616))) + (FAMIX.InheritanceDefinition (id: 644) + (stub false) + (subclass (idref: 614)) + (superclass (idref: 617))) + (FAMIX.InheritanceDefinition (id: 645) + (stub false) + (subclass (idref: 618)) + (superclass (idref: 614))) + (FAMIX.InheritanceDefinition (id: 646) + (stub false) + (subclass (idref: 604)) + (superclass (idref: 616))) + (FAMIX.InheritanceDefinition (id: 647) + (stub false) + (subclass (idref: 239)) + (superclass (idref: 604))) + (FAMIX.InheritanceDefinition (id: 648) + (stub false) + (subclass (idref: 545)) + (superclass (idref: 533))) + (FAMIX.InheritanceDefinition (id: 649) + (stub false) + (subclass (idref: 627)) + (superclass (idref: 239))) + (FAMIX.InheritanceDefinition (id: 650) + (stub false) + (subclass (idref: 528)) + (superclass (idref: 533))) + (FAMIX.InheritanceDefinition (id: 651) + (stub false) + (subclass (idref: 197)) + (superclass (idref: 239))) + (FAMIX.InheritanceDefinition (id: 652) + (stub false) + (subclass (idref: 610)) + (superclass (idref: 545))) + (FAMIX.InheritanceDefinition (id: 653) + (stub false) + (subclass (idref: 233)) + (superclass (idref: 627))) + (FAMIX.InheritanceDefinition (id: 654) + (stub false) + (subclass (idref: 621)) + (superclass (idref: 545))) + (FAMIX.InheritanceDefinition (id: 655) + (stub false) + (subclass (idref: 265)) + (superclass (idref: 627))) + (FAMIX.InheritanceDefinition (id: 656) + (stub false) + (subclass (idref: 550)) + (superclass (idref: 530))) + (FAMIX.InheritanceDefinition (id: 657) + (stub false) + (subclass (idref: 530)) + (superclass (idref: 540))) + (FAMIX.InheritanceDefinition (id: 658) + (stub false) + (subclass (idref: 542)) + (superclass (idref: 604))) + (FAMIX.InheritanceDefinition (id: 659) + (stub false) + (subclass (idref: 612)) + (superclass (idref: 542))) + (FAMIX.InheritanceDefinition (id: 660) + (stub false) + (subclass (idref: 120)) + (superclass (idref: 611))) + (FAMIX.InheritanceDefinition (id: 661) + (stub false) + (subclass (idref: 611)) + (superclass (idref: 629))) + (FAMIX.InheritanceDefinition (id: 662) + (stub false) + (subclass (idref: 629)) + (superclass (idref: 619))) + (FAMIX.InheritanceDefinition (id: 663) + (stub false) + (subclass (idref: 619)) + (superclass (idref: 622))) + (FAMIX.InheritanceDefinition (id: 664) + (stub false) + (subclass (idref: 622)) + (superclass (idref: 616))) + (FAMIX.InheritanceDefinition (id: 665) + (stub false) + (subclass (idref: 125)) + (superclass (idref: 623))) + (FAMIX.InheritanceDefinition (id: 666) + (stub false) + (subclass (idref: 623)) + (superclass (idref: 599))) + (FAMIX.InheritanceDefinition (id: 667) + (stub false) + (subclass (idref: 599)) + (superclass (idref: 604))) + (FAMIX.InheritanceDefinition (id: 668) + (stub false) + (subclass (idref: 134)) + (superclass (idref: 626))) + (FAMIX.InheritanceDefinition (id: 669) + (stub false) + (subclass (idref: 626)) + (superclass (idref: 629))) + (FAMIX.InheritanceDefinition (id: 670) + (stub false) + (subclass (idref: 139)) + (superclass (idref: 604))) + (FAMIX.InheritanceDefinition (id: 671) + (stub false) + (subclass (idref: 146)) + (superclass (idref: 542))) + (FAMIX.InheritanceDefinition (id: 672) + (stub false) + (subclass (idref: 165)) + (superclass (idref: 616))) + (FAMIX.InheritanceDefinition (id: 673) + (stub false) + (subclass (idref: 169)) + (superclass (idref: 609))) + (FAMIX.InheritanceDefinition (id: 674) + (stub false) + (subclass (idref: 609)) + (superclass (idref: 616))) + (FAMIX.InheritanceDefinition (id: 675) + (stub false) + (subclass (idref: 191)) + (superclass (idref: 616))) + (FAMIX.InheritanceDefinition (id: 676) + (stub false) + (subclass (idref: 214)) + (superclass (idref: 616))) + (FAMIX.InheritanceDefinition (id: 677) + (stub false) + (subclass (idref: 543)) + (superclass (idref: 625))) + (FAMIX.InheritanceDefinition (id: 678) + (stub false) + (subclass (idref: 625)) + (superclass (idref: 631))) + (FAMIX.InheritanceDefinition (id: 679) + (stub false) + (subclass (idref: 544)) + (superclass (idref: 631))) + (FAMIX.Package (id: 680) + (name Kernel) + (packagedIn (idref: 681)) + (stub false)) + (FAMIX.Package (id: 630) + (name 'Interface-Menus') + (definedClass (idref: 191)) + (packagedIn (idref: 682)) + (stub false)) + (FAMIX.Package (id: 624) + (name 'Interface-Models') + (definedClass (idref: 125) (idref: 623)) + (packagedIn (idref: 682)) + (stub false)) + (FAMIX.Package (id: 683) + (name UIBasics) + (packagedIn (idref: 681)) + (stub false)) + (FAMIX.Package (id: 607) + (name 'Collections-Text') + (definedClass (idref: 134) (idref: 626)) + (packagedIn (idref: 684)) + (stub false)) + (FAMIX.Package (id: 605) + (name 'Kernel-Objects') + (definedClass (idref: 540) (idref: 631) (idref: 616) (idref: 604)) + (packagedIn (idref: 680)) + (stub false)) + (FAMIX.Package (id: 603) + (name LANModel) + (definedClass (idref: 533) (idref: 239) (idref: 545) (idref: 627) (idref: 528) (idref: 197) (idref: 610) (idref: 233) (idref: 621) (idref: 265) (idref: 550) (idref: 612) (idref: 165) (idref: 169) (idref: 609) (idref: 543) (idref: 625) (idref: 544)) + (packagedIn (idref: 685)) + (stub false)) + (FAMIX.Package (id: 682) + (name Interface) + (packagedIn (idref: 681)) + (stub false)) + (FAMIX.Package (id: 613) + (name 'UIBuilder-Framework') + (definedClass (idref: 530) (idref: 542) (idref: 214)) + (packagedIn (idref: 686)) + (stub false)) + (FAMIX.Package (id: 601) + (name 'Interface-Support') + (definedClass (idref: 599)) + (packagedIn (idref: 682)) + (stub false)) + (FAMIX.Package (id: 608) + (name 'UIBasics-Collections') + (definedClass (idref: 120) (idref: 611) (idref: 139)) + (packagedIn (idref: 683)) + (stub false)) + (FAMIX.Package (id: 681) + (name 'Base VisualWorks') + (stub false)) + (FAMIX.Package (id: 687) + (name MooseDevelopment) + (stub false)) + (FAMIX.Package (id: 628) + (name 'Interface-Dialogs') + (definedClass (idref: 146)) + (packagedIn (idref: 682)) + (stub false)) + (FAMIX.Package (id: 615) + (name 'Kernel-Classes') + (definedClass (idref: 547) (idref: 525) (idref: 535) (idref: 617) (idref: 614) (idref: 618)) + (packagedIn (idref: 680)) + (stub false)) + (FAMIX.Package (id: 685) + (name Moose) + (packagedIn (idref: 687)) + (stub false)) + (FAMIX.Package (id: 686) + (name UIBuilder) + (packagedIn (idref: 681)) + (stub false)) + (FAMIX.Package (id: 620) + (name 'Collections-Abstract') + (definedClass (idref: 629) (idref: 619) (idref: 622)) + (packagedIn (idref: 684)) + (stub false)) + (FAMIX.Package (id: 684) + (name Collections) + (packagedIn (idref: 681)) + (stub false))) + (NOCls 18) + (NOM 57) + (sourceLanguage Smalltalk)) diff --git a/samples/ch/unibe/fame/resources/MSE.mse.mse b/lib/src/test/resources/ch/unibe/fame/resources/MSE.mse.mse similarity index 100% rename from samples/ch/unibe/fame/resources/MSE.mse.mse rename to lib/src/test/resources/ch/unibe/fame/resources/MSE.mse.mse diff --git a/samples/ch/unibe/fame/resources/famix70WithNewCpp.mse b/lib/src/test/resources/ch/unibe/fame/resources/famix70WithNewCpp.mse similarity index 100% rename from samples/ch/unibe/fame/resources/famix70WithNewCpp.mse rename to lib/src/test/resources/ch/unibe/fame/resources/famix70WithNewCpp.mse diff --git a/samples/ch/unibe/fame/resources/java-mm.mse b/lib/src/test/resources/ch/unibe/fame/resources/java-mm.mse similarity index 100% rename from samples/ch/unibe/fame/resources/java-mm.mse rename to lib/src/test/resources/ch/unibe/fame/resources/java-mm.mse diff --git a/samples/ch/unibe/fame/resources/lib.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/lib.fm3.mse similarity index 100% rename from samples/ch/unibe/fame/resources/lib.fm3.mse rename to lib/src/test/resources/ch/unibe/fame/resources/lib.fm3.mse diff --git a/samples/ch/unibe/fame/resources/lib.mse b/lib/src/test/resources/ch/unibe/fame/resources/lib.mse similarity index 100% rename from samples/ch/unibe/fame/resources/lib.mse rename to lib/src/test/resources/ch/unibe/fame/resources/lib.mse diff --git a/samples/ch/unibe/fame/resources/rpg.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/rpg.fm3.mse similarity index 97% rename from samples/ch/unibe/fame/resources/rpg.fm3.mse rename to lib/src/test/resources/ch/unibe/fame/resources/rpg.fm3.mse index 069d0ec..f328bd8 100644 --- a/samples/ch/unibe/fame/resources/rpg.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/rpg.fm3.mse @@ -1,44 +1,44 @@ -( - (FM3.Package - (name 'RPG') - (classes - (FM3.Class (id: 1) - (name 'Dragon') - (attributes - (FM3.Property (id: 2) - (name 'hoard') - (type (ref: 3)) - (multivalued true) - (opposite (ref: 4))) - (FM3.Property (id: 5) - (name 'killedBy') - (type (ref: 6)) - (multivalued true) - (opposite (ref: 7))))) - (FM3.Class (id: 3) - (name 'Treasure') - (attributes - (FM3.Property (id: 4) - (name 'keeper') - (type (ref: 1)) - (opposite (ref: 2))) - (FM3.Property (id: 8) - (name 'owner') - (type (ref: 6)) - (opposite (ref: 9))))) - (FM3.Class (id: 6) - (name 'Hero') - (attributes - (FM3.Property (id: 10) - (name 'twin') - (type (ref: 6)) - (opposite (ref: 10))) - (FM3.Property (id: 9) - (name 'talisman') - (type (ref: 3)) - (opposite (ref: 8))) - (FM3.Property (id: 7) - (name 'kills') - (type (ref: 1)) - (multivalued true) +( + (FM3.Package + (name 'RPG') + (classes + (FM3.Class (id: 1) + (name 'Dragon') + (attributes + (FM3.Property (id: 2) + (name 'hoard') + (type (ref: 3)) + (multivalued true) + (opposite (ref: 4))) + (FM3.Property (id: 5) + (name 'killedBy') + (type (ref: 6)) + (multivalued true) + (opposite (ref: 7))))) + (FM3.Class (id: 3) + (name 'Treasure') + (attributes + (FM3.Property (id: 4) + (name 'keeper') + (type (ref: 1)) + (opposite (ref: 2))) + (FM3.Property (id: 8) + (name 'owner') + (type (ref: 6)) + (opposite (ref: 9))))) + (FM3.Class (id: 6) + (name 'Hero') + (attributes + (FM3.Property (id: 10) + (name 'twin') + (type (ref: 6)) + (opposite (ref: 10))) + (FM3.Property (id: 9) + (name 'talisman') + (type (ref: 3)) + (opposite (ref: 8))) + (FM3.Property (id: 7) + (name 'kills') + (type (ref: 1)) + (multivalued true) (opposite (ref: 5)))))))) \ No newline at end of file diff --git a/samples/ch/unibe/fame/resources/scg.lib.mse b/lib/src/test/resources/ch/unibe/fame/resources/scg.lib.mse similarity index 100% rename from samples/ch/unibe/fame/resources/scg.lib.mse rename to lib/src/test/resources/ch/unibe/fame/resources/scg.lib.mse diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..30fdd25 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,14 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.10.2/userguide/multi_project_builds.html in the Gradle documentation. + */ + +plugins { + // Apply the foojay-resolver plugin to allow automatic download of JDKs + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} + +rootProject.name = "FameJava" +include("lib") diff --git a/src/COPYING.LESSER b/src/COPYING.LESSER deleted file mode 100644 index fc8a5de..0000000 --- a/src/COPYING.LESSER +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. From ab5fedb4bc48a559ee7f4a04843cf8e8155d76b8 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 15:41:37 +0200 Subject: [PATCH 02/21] check gradle can compile the project in CI --- .github/workflows/gradle-publish.yml | 37 ++++++++++++++++++++++++++++ .github/workflows/on-push.yml | 23 +++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 .github/workflows/gradle-publish.yml create mode 100644 .github/workflows/on-push.yml diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml new file mode 100644 index 0000000..f3c53e5 --- /dev/null +++ b/.github/workflows/gradle-publish.yml @@ -0,0 +1,37 @@ +name: Gradle Package + +on: + release: + types: [created] + +jobs: + build: + + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + server-id: github # Value of the distributionManagement/repository/id field of the pom.xml + settings-path: ${{ github.workspace }} # location for the settings.xml file + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 # v4.0.0 + + - name: Build with Gradle + run: ./gradlew build + + # The USERNAME and TOKEN need to correspond to the credentials environment variables used in + # the publishing section of your build.gradle + - name: Publish to GitHub Packages + run: ./gradlew publish + env: + USERNAME: ${{ github.actor }} + TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/on-push.yml b/.github/workflows/on-push.yml new file mode 100644 index 0000000..66fa679 --- /dev/null +++ b/.github/workflows/on-push.yml @@ -0,0 +1,23 @@ +name: Run Gradle on every push + +on: + push: + +jobs: + gradle: + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle build + run: ./gradlew build \ No newline at end of file From cade2f2d8c4bdc01679376a1e498fe28a75e6ae4 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 15:46:47 +0200 Subject: [PATCH 03/21] ignore some old test because not use anymore probably --- lib/src/test/java/ch/akuhn/fame/codegen/Famix22Test.java | 3 +++ lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/src/test/java/ch/akuhn/fame/codegen/Famix22Test.java b/lib/src/test/java/ch/akuhn/fame/codegen/Famix22Test.java index 47ff530..dd4cad9 100644 --- a/lib/src/test/java/ch/akuhn/fame/codegen/Famix22Test.java +++ b/lib/src/test/java/ch/akuhn/fame/codegen/Famix22Test.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue; +import org.junit.Ignore; import org.junit.Test; import ch.akuhn.fame.MetaRepository; @@ -38,6 +39,7 @@ public class Famix22Test { @Test + @Ignore public void checkConstraints() { InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX22.fm3.mse"); Tower t = new Tower(); @@ -55,6 +57,7 @@ public void convertEMOF() { } @Test + @Ignore public void importEMOF() { InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX22.fm3.mse"); MetaRepository m3 = MetaRepository.createFM3(); diff --git a/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java b/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java index eb6b2eb..63f2608 100644 --- a/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java +++ b/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java @@ -21,6 +21,7 @@ package ch.akuhn.fame.codegen; +import org.junit.Ignore; import org.junit.Test; import ch.akuhn.fame.MetaRepository; @@ -33,6 +34,7 @@ public class Famix30Test { @Test + @Ignore public void asFM3() { InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX30.fm3.mse"); Appendable output = new StringBuilder(); @@ -41,6 +43,7 @@ public void asFM3() { } @Test + @Ignore public void checkConstraints() { InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX30.fm3.mse"); Tower t = new Tower(); From 1757cf5cedea41eb017fc7e69ec1b41e8c9f527a Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 16:16:07 +0200 Subject: [PATCH 04/21] move template.txt as a resource --- .gitignore | 1 + .../java/ch/akuhn/fame/parser/Importer.java | 2 +- .../ch/akuhn/fame/codegen/template.txt | 0 .../ch/unibe/fame/resources/FamixJava.mse | 3269 ++++++++++++++++- .../ch/unibe/fame/resources/rpg.fm3.mse | 6 +- 5 files changed, 3273 insertions(+), 5 deletions(-) rename lib/src/main/{java => resources}/ch/akuhn/fame/codegen/template.txt (100%) diff --git a/.gitignore b/.gitignore index dcfb095..cfcf30c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ fame-lib.jar # Ignore Gradle build output directory build +gen \ No newline at end of file diff --git a/lib/src/main/java/ch/akuhn/fame/parser/Importer.java b/lib/src/main/java/ch/akuhn/fame/parser/Importer.java index b70786f..1d1fdc8 100644 --- a/lib/src/main/java/ch/akuhn/fame/parser/Importer.java +++ b/lib/src/main/java/ch/akuhn/fame/parser/Importer.java @@ -73,7 +73,7 @@ public void resolve(Object element) { public Attr(String name) { this.attributeName = name; this.openReferences = 0; - this.values = new ArrayList(); + this.values = new ArrayList(); } public void add(Object value) { diff --git a/lib/src/main/java/ch/akuhn/fame/codegen/template.txt b/lib/src/main/resources/ch/akuhn/fame/codegen/template.txt similarity index 100% rename from lib/src/main/java/ch/akuhn/fame/codegen/template.txt rename to lib/src/main/resources/ch/akuhn/fame/codegen/template.txt diff --git a/lib/src/test/resources/ch/unibe/fame/resources/FamixJava.mse b/lib/src/test/resources/ch/unibe/fame/resources/FamixJava.mse index 7a06571..2caa7c5 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/FamixJava.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/FamixJava.mse @@ -1 +1,3268 @@ -( (FM3.Package (id: 1) (name 'Tagging') (classes (FM3.Class (id: 2) (name 'Category') (abstract false) (package (ref: 1)) (superclass (ref: 3)) (properties (FM3.Property (id: 4) (name 'markedTags') (class (ref: 2)) (container false) (derived false) (multivalued true) (opposite (ref: 5)) (type (ref: 6))) (FM3.Property (id: 7) (name 'name') (class (ref: 2)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Class (id: 8) (name 'Association') (abstract true) (package (ref: 1)) (superclass (ref: 3)) (properties (FM3.Property (id: 9) (name 'tag') (class (ref: 8)) (container false) (derived true) (multivalued false) (type (ref: 6))) (FM3.Property (id: 10) (name 'entity') (class (ref: 8)) (container false) (derived false) (multivalued false) (opposite (ref: 11)) (type (ref: 3))) (FM3.Property (id: 12) (name 'tagId') (class (ref: 8)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 6) (name 'Tag') (abstract false) (package (ref: 1)) (superclass (ref: 3)) (properties (FM3.Property (id: 13) (name 'serializedColor') (class (ref: 6)) (container false) (derived false) (multivalued false) (type (ref: String))) (FM3.Property (id: 14) (name 'description') (class (ref: 6)) (container false) (derived false) (multivalued false) (type (ref: String))) (FM3.Property (id: 15) (name 'children') (class (ref: 6)) (container false) (derived true) (multivalued true) (type (ref: 6))) (FM3.Property (id: 16) (name 'parentTag') (class (ref: 6)) (container true) (derived false) (multivalued false) (opposite (ref: 17)) (type (ref: 6))) (FM3.Property (id: 18) (name 'isHidden') (class (ref: 6)) (container false) (derived false) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 5) (name 'categories') (class (ref: 6)) (container false) (derived false) (multivalued true) (opposite (ref: 4)) (type (ref: 2))) (FM3.Property (id: 19) (name 'id') (class (ref: 6)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 17) (name 'subTags') (class (ref: 6)) (container false) (derived true) (multivalued true) (opposite (ref: 16)) (type (ref: 6))) (FM3.Property (id: 20) (name 'name') (class (ref: 6)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Class (id: 21) (name 'EntityAssociation') (abstract false) (package (ref: 1)) (superclass (ref: 8))) (FM3.Class (id: 22) (name 'TagModel') (abstract false) (package (ref: 1)) (superclass (ref: 23))) (FM3.Class (id: 24) (name 'IntervalAssociation') (abstract false) (package (ref: 1)) (superclass (ref: 8)) (properties (FM3.Property (id: 25) (name 'start') (class (ref: 24)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 26) (name 'sourceAnchor') (class (ref: 24)) (container false) (derived false) (multivalued false) (type (ref: 27))) (FM3.Property (id: 28) (name 'stop') (class (ref: 24)) (container false) (derived false) (multivalued false) (type (ref: Number))))))) (FM3.Package (id: 29) (name 'Famix-Traits') (classes (FM3.Trait (id: 30) (name 'TWithParameterizedTypeUsers') (package (ref: 29)) (properties (FM3.Property (id: 31) (name 'arguments') (class (ref: 30)) (container false) (derived false) (multivalued true) (opposite (ref: 32)) (type (ref: 33))))) (FM3.Trait (id: 34) (name 'TWithInheritances') (package (ref: 29)) (properties (FM3.Property (id: 35) (name 'superInheritances') (class (ref: 34)) (container false) (derived true) (multivalued true) (opposite (ref: 36)) (type (ref: 37))) (FM3.Property (id: 38) (name 'subclassHierarchyDepth') (class (ref: 34)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 39) (name 'subInheritances') (class (ref: 34)) (container false) (derived true) (multivalued true) (opposite (ref: 40)) (type (ref: 37))) (FM3.Property (id: 41) (name 'hierarchyNestingLevel') (class (ref: 34)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 42) (name 'numberOfSubclasses') (class (ref: 34)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 43) (name 'numberOfDirectSubclasses') (class (ref: 34)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 44) (name 'TGlobalVariable') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) (properties (FM3.Property (id: 51) (name 'parentScope') (class (ref: 44)) (container true) (derived false) (multivalued false) (opposite (ref: 52)) (type (ref: 53))))) (FM3.Trait (id: 54) (name 'TMultipleFileAnchor') (package (ref: 29)) (traits (ref: 27)) (properties (FM3.Property (id: 55) (name 'fileAnchors') (class (ref: 54)) (container false) (derived false) (multivalued true) (type (ref: 56))))) (FM3.Trait (id: 57) (name 'TTypeAlias') (package (ref: 29)) (properties (FM3.Property (id: 58) (name 'aliasedType') (class (ref: 57)) (container false) (derived false) (multivalued false) (opposite (ref: 59)) (type (ref: 60))))) (FM3.Trait (id: 61) (name 'TRelativeSourceAnchor') (package (ref: 29)) (traits (ref: 27)) (properties (FM3.Property (id: 62) (name 'relatedAnchor') (class (ref: 61)) (container false) (derived false) (multivalued false) (type (ref: 27))) (FM3.Property (id: 63) (name 'endPos') (class (ref: 61)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 64) (name 'startPos') (class (ref: 61)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 65) (name 'TIndexedFileNavigation') (package (ref: 29)) (traits (ref: 56)) (properties (FM3.Property (id: 66) (name 'endPos') (class (ref: 65)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 67) (name 'startPos') (class (ref: 65)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 68) (name 'TTrait') (package (ref: 29)) (properties (FM3.Property (id: 69) (name 'incomingTraitUsages') (class (ref: 68)) (container false) (derived true) (multivalued true) (opposite (ref: 70)) (type (ref: 71))) (FM3.Property (id: 72) (name 'traitOwner') (class (ref: 68)) (container false) (derived false) (multivalued false) (opposite (ref: 73)) (type (ref: 74))))) (FM3.Trait (id: 75) (name 'TAccess') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 77)) (properties (FM3.Property (id: 78) (name 'isWrite') (class (ref: 75)) (container false) (derived false) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 79) (name 'accessor') (class (ref: 75)) (container false) (derived false) (multivalued false) (opposite (ref: 80)) (type (ref: 81))) (FM3.Property (id: 82) (name 'variable') (class (ref: 75)) (container false) (derived false) (multivalued false) (opposite (ref: 83)) (type (ref: 50))) (FM3.Property (id: 84) (name 'isReadWriteUnknown') (class (ref: 75)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 85) (name 'isRead') (class (ref: 75)) (container false) (derived true) (multivalued false) (type (ref: Boolean))))) (FM3.Trait (id: 86) (name 'TFileInclude') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 77)) (properties (FM3.Property (id: 87) (name 'source') (class (ref: 86)) (container false) (derived false) (multivalued false) (opposite (ref: 88)) (type (ref: 89))) (FM3.Property (id: 90) (name 'target') (class (ref: 86)) (container false) (derived false) (multivalued false) (opposite (ref: 91)) (type (ref: 89))))) (FM3.Trait (id: 92) (name 'TWithDereferencedInvocations') (package (ref: 29)) (properties (FM3.Property (id: 93) (name 'dereferencedInvocations') (class (ref: 92)) (container false) (derived true) (multivalued true) (opposite (ref: 94)) (type (ref: 95))))) (FM3.Trait (id: 96) (name 'TWithFiles') (package (ref: 29)) (properties (FM3.Property (id: 97) (name 'containerFiles') (class (ref: 96)) (container false) (derived false) (multivalued true) (opposite (ref: 98)) (type (ref: 99))))) (FM3.Trait (id: 100) (name 'TWithHeaders') (package (ref: 29)) (properties (FM3.Property (id: 101) (name 'header') (class (ref: 100)) (container false) (derived true) (multivalued false) (opposite (ref: 102)) (type (ref: 103))))) (FM3.Trait (id: 104) (name 'THasKind') (package (ref: 29)) (properties (FM3.Property (id: 105) (name 'isConstructor') (class (ref: 104)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 106) (name 'kind') (class (ref: 104)) (container false) (derived false) (multivalued false) (type (ref: String))) (FM3.Property (id: 107) (name 'isConstant') (class (ref: 104)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 108) (name 'isSetter') (class (ref: 104)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 109) (name 'isGetter') (class (ref: 104)) (container false) (derived true) (multivalued false) (type (ref: Boolean))))) (FM3.Trait (id: 110) (name 'TFileSystemEntity') (package (ref: 29)) (properties (FM3.Property (id: 111) (name 'numberOfLinesOfText') (class (ref: 110)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 112) (name 'parentFolder') (class (ref: 110)) (container true) (derived false) (multivalued false) (opposite (ref: 113)) (type (ref: 114))))) (FM3.Trait (id: 115) (name 'TCanBeClassSide') (package (ref: 29)) (properties (FM3.Property (id: 116) (name 'isClassSide') (class (ref: 115)) (container false) (defaultValue (ref: 117)) (derived false) (multivalued false) (type (ref: Boolean))))) (FM3.Trait (id: 118) (name 'TEnum') (package (ref: 29)) (traits (ref: 119) (ref: 46) (ref: 120) (ref: 47) (ref: 48) (ref: 121))) (FM3.Trait (id: 122) (name 'TWithStatements') (package (ref: 29)) (traits (ref: 47) (ref: 81) (ref: 123) (ref: 124)) (properties (FM3.Property (id: 125) (name 'numberOfStatements') (class (ref: 122)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 126) (name 'TypeGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127)) (properties (FM3.Property (id: 128) (name 'averageNumberOfAttributes') (class (ref: 126)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 129) (name 'averageNumberOfMethods') (class (ref: 126)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 130) (name 'instability') (class (ref: 126)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 131) (name 'abstractness') (class (ref: 126)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 132) (name 'averageNumberOfStatements') (class (ref: 126)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 133) (name 'efferentCoupling') (class (ref: 126)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 134) (name 'afferentCoupling') (class (ref: 126)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 135) (name 'averageNumberOfMethods') (class (ref: 126)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 136) (name 'distance') (class (ref: 126)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 137) (name 'bunchCohesion') (class (ref: 126)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 138) (name 'TInvocation') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 77)) (properties (FM3.Property (id: 139) (name 'sender') (class (ref: 138)) (container false) (derived false) (multivalued false) (opposite (ref: 140)) (type (ref: 124))) (FM3.Property (id: 141) (name 'candidates') (class (ref: 138)) (container false) (derived false) (multivalued true) (opposite (ref: 142)) (type (ref: 143))) (FM3.Property (id: 144) (name 'receiver') (class (ref: 138)) (container false) (derived false) (multivalued false) (opposite (ref: 145)) (type (ref: 146))))) (FM3.Trait (id: 143) (name 'TInvocable') (package (ref: 29)) (properties (FM3.Property (id: 142) (name 'incomingInvocations') (class (ref: 143)) (container false) (derived true) (multivalued true) (opposite (ref: 141)) (type (ref: 138))))) (FM3.Trait (id: 103) (name 'THeader') (package (ref: 29)) (traits (ref: 99) (ref: 110)) (properties (FM3.Property (id: 102) (name 'headerOwner') (class (ref: 103)) (container false) (derived false) (multivalued false) (opposite (ref: 101)) (type (ref: 100))))) (FM3.Trait (id: 147) (name 'TWithTemplates') (package (ref: 29)) (properties (FM3.Property (id: 148) (name 'templates') (class (ref: 147)) (container false) (derived true) (multivalued true) (opposite (ref: 149)) (type (ref: 150))))) (FM3.Trait (id: 124) (name 'TWithInvocations') (package (ref: 29)) (properties (FM3.Property (id: 140) (name 'outgoingInvocations') (class (ref: 124)) (container false) (derived true) (multivalued true) (opposite (ref: 139)) (type (ref: 138))) (FM3.Property (id: 151) (name 'numberOfOutgoingInvocations') (class (ref: 124)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 152) (name 'TWithMethods') (package (ref: 29)) (properties (FM3.Property (id: 153) (name 'weightedMethodCount') (class (ref: 152)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 154) (name 'methods') (class (ref: 152)) (container false) (derived true) (multivalued true) (opposite (ref: 155)) (type (ref: 156))) (FM3.Property (id: 157) (name 'numberOfMessageSends') (class (ref: 152)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 158) (name 'numberOfMethods') (class (ref: 152)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 159) (name 'tightClassCohesion') (class (ref: 152)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 160) (name 'numberOfAbstractMethods') (class (ref: 152)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 161) (name 'TImplicitVariable') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) (properties (FM3.Property (id: 162) (name 'parentBehaviouralEntity') (class (ref: 161)) (container true) (derived false) (multivalued false) (opposite (ref: 163)) (type (ref: 164))))) (FM3.Trait (id: 165) (name 'TWithParameterizedTypes') (package (ref: 29)) (properties (FM3.Property (id: 166) (name 'parameterizedTypes') (class (ref: 165)) (container false) (derived true) (multivalued true) (opposite (ref: 167)) (type (ref: 168))))) (FM3.Trait (id: 49) (name 'TStructuralEntity') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 50))) (FM3.Trait (id: 169) (name 'TAnnotationInstance') (package (ref: 29)) (traits (ref: 48)) (properties (FM3.Property (id: 170) (name 'annotatedEntity') (class (ref: 169)) (container false) (derived false) (multivalued false) (opposite (ref: 171)) (type (ref: 172))))) (FM3.Trait (id: 46) (name 'TNamedEntity') (package (ref: 29)) (properties (FM3.Property (id: 173) (name 'name') (class (ref: 46)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Trait (id: 174) (name 'TPackageable') (package (ref: 29)) (properties (FM3.Property (id: 175) (name 'parentPackage') (class (ref: 174)) (container true) (derived false) (multivalued false) (opposite (ref: 176)) (type (ref: 177))))) (FM3.Trait (id: 178) (name 'TTypedAnnotationInstance') (package (ref: 29)) (properties (FM3.Property (id: 179) (name 'annotationType') (class (ref: 178)) (container false) (derived false) (multivalued false) (opposite (ref: 180)) (type (ref: 181))))) (FM3.Trait (id: 182) (name 'TWithAnnotationTypes') (package (ref: 29)) (properties (FM3.Property (id: 183) (name 'definedAnnotationTypes') (class (ref: 182)) (container false) (derived true) (multivalued true) (opposite (ref: 184)) (type (ref: 181))))) (FM3.Trait (id: 185) (name 'TWithSourceLanguages') (package (ref: 29)) (properties (FM3.Property (id: 186) (name 'declaredSourceLanguage') (class (ref: 185)) (container false) (derived false) (multivalued false) (opposite (ref: 187)) (type (ref: 188))))) (FM3.Trait (id: 189) (name 'TWithLocalVariables') (package (ref: 29)) (properties (FM3.Property (id: 190) (name 'localVariables') (class (ref: 189)) (container false) (derived true) (multivalued true) (opposite (ref: 191)) (type (ref: 192))))) (FM3.Trait (id: 193) (name 'TWithThrownExceptions') (package (ref: 29)) (properties (FM3.Property (id: 194) (name 'thrownExceptions') (class (ref: 193)) (container false) (derived true) (multivalued true) (opposite (ref: 195)) (type (ref: 196))))) (FM3.Trait (id: 197) (name 'TModule') (package (ref: 29)) (properties (FM3.Property (id: 198) (name 'moduleEntities') (class (ref: 197)) (container false) (derived true) (multivalued true) (opposite (ref: 199)) (type (ref: 200))))) (FM3.Class (id: 201) (name 'GlobalVariableGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Trait (id: 47) (name 'TSourceEntity') (package (ref: 29)) (properties (FM3.Property (id: 202) (name 'duplicationRate') (class (ref: 47)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 203) (name 'replicas') (class (ref: 47)) (container false) (derived true) (multivalued false) (type (ref: 204))) (FM3.Property (id: 205) (name 'numberOfLinesOfCode') (class (ref: 47)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 206) (name 'sourceAnchor') (class (ref: 47)) (container false) (derived true) (multivalued false) (opposite (ref: 207)) (type (ref: 27))) (FM3.Property (id: 208) (name 'sourceText') (class (ref: 47)) (container false) (derived true) (multivalued false) (type (ref: String))) (FM3.Property (id: 209) (name 'isStub') (class (ref: 47)) (container false) (derived false) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 210) (name 'containsReplicas') (class (ref: 47)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 211) (name 'numberOfLinesOfCodeWithMoreThanOneCharacter') (class (ref: 47)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 33) (name 'TParameterizedTypeUser') (package (ref: 29)) (properties (FM3.Property (id: 32) (name 'argumentsInParameterizedTypes') (class (ref: 33)) (container false) (derived true) (multivalued true) (opposite (ref: 31)) (type (ref: 30))))) (FM3.Trait (id: 188) (name 'TSourceLanguage') (package (ref: 29)) (properties (FM3.Property (id: 187) (name 'sourcedEntities') (class (ref: 188)) (container false) (derived true) (multivalued true) (opposite (ref: 186)) (type (ref: 185))))) (FM3.Trait (id: 212) (name 'TWithCaughtExceptions') (package (ref: 29)) (properties (FM3.Property (id: 213) (name 'caughtExceptions') (class (ref: 212)) (container false) (derived true) (multivalued true) (opposite (ref: 214)) (type (ref: 215))))) (FM3.Trait (id: 216) (name 'TCanBeFinal') (package (ref: 29)) (properties (FM3.Property (id: 217) (name 'isFinal') (class (ref: 216)) (container false) (derived false) (multivalued false) (type (ref: Boolean))))) (FM3.Trait (id: 218) (name 'TWithComments') (package (ref: 29)) (properties (FM3.Property (id: 219) (name 'numberOfComments') (class (ref: 218)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 220) (name 'hasComments') (class (ref: 218)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 221) (name 'comments') (class (ref: 218)) (container false) (derived true) (multivalued true) (opposite (ref: 222)) (type (ref: 223))))) (FM3.Trait (id: 224) (name 'TEnumValue') (package (ref: 29)) (properties (FM3.Property (id: 225) (name 'parentEnum') (class (ref: 224)) (container true) (derived false) (multivalued false) (opposite (ref: 226)) (type (ref: 121))))) (FM3.Trait (id: 77) (name 'TAssociation') (package (ref: 29)) (traits (ref: 47) (ref: 76)) (properties (FM3.Property (id: 227) (name 'previous') (class (ref: 77)) (container false) (derived false) (multivalued false) (opposite (ref: 228)) (type (ref: 77))) (FM3.Property (id: 228) (name 'next') (class (ref: 77)) (container false) (derived true) (multivalued false) (opposite (ref: 227)) (type (ref: 77))))) (FM3.Trait (id: 229) (name 'TFileNavigation') (package (ref: 29)) (traits (ref: 56)) (properties (FM3.Property (id: 230) (name 'endLine') (class (ref: 229)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 231) (name 'startColumn') (class (ref: 229)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 232) (name 'endColumn') (class (ref: 229)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 233) (name 'startLine') (class (ref: 229)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 234) (name 'TReference') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 77)) (properties (FM3.Property (id: 235) (name 'referredType') (class (ref: 234)) (container false) (derived false) (multivalued false) (opposite (ref: 236)) (type (ref: 120))) (FM3.Property (id: 237) (name 'referencer') (class (ref: 234)) (container false) (derived false) (multivalued false) (opposite (ref: 238)) (type (ref: 123))))) (FM3.Trait (id: 239) (name 'TCanImplement') (package (ref: 29)) (properties (FM3.Property (id: 240) (name 'interfaceImplementations') (class (ref: 239)) (container false) (derived true) (multivalued true) (opposite (ref: 241)) (type (ref: 242))))) (FM3.Trait (id: 50) (name 'TAccessible') (package (ref: 29)) (properties (FM3.Property (id: 83) (name 'incomingAccesses') (class (ref: 50)) (container false) (derived true) (multivalued true) (opposite (ref: 82)) (type (ref: 75))) (FM3.Property (id: 243) (name 'numberOfAccessingMethods') (class (ref: 50)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 244) (name 'numberOfGlobalAccesses') (class (ref: 50)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 245) (name 'accessors') (class (ref: 50)) (container false) (derived true) (multivalued true) (type (ref: 81))) (FM3.Property (id: 246) (name 'numberOfAccessingClasses') (class (ref: 50)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 247) (name 'numberOfLocalAccesses') (class (ref: 50)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 248) (name 'numberOfAccesses') (class (ref: 50)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 249) (name 'TCompilationUnit') (package (ref: 29)) (traits (ref: 99) (ref: 110)) (properties (FM3.Property (id: 250) (name 'compilationUnitOwner') (class (ref: 249)) (container false) (derived false) (multivalued false) (opposite (ref: 251)) (type (ref: 252))))) (FM3.Trait (id: 181) (name 'TAnnotationType') (package (ref: 29)) (properties (FM3.Property (id: 180) (name 'instances') (class (ref: 181)) (container false) (derived true) (multivalued true) (opposite (ref: 179)) (type (ref: 178))) (FM3.Property (id: 184) (name 'annotationTypesContainer') (class (ref: 181)) (container true) (derived false) (multivalued false) (opposite (ref: 183)) (type (ref: 182))))) (FM3.Trait (id: 253) (name 'TWithAnnotationInstanceAttributes') (package (ref: 29)) (properties (FM3.Property (id: 254) (name 'attributes') (class (ref: 253)) (container false) (derived true) (multivalued true) (opposite (ref: 255)) (type (ref: 256))))) (FM3.Trait (id: 74) (name 'TWithTraits') (package (ref: 29)) (properties (FM3.Property (id: 73) (name 'traits') (class (ref: 74)) (container false) (derived true) (multivalued true) (opposite (ref: 72)) (type (ref: 68))))) (FM3.Trait (id: 257) (name 'TWithFunctions') (package (ref: 29)) (properties (FM3.Property (id: 258) (name 'functions') (class (ref: 257)) (container false) (derived true) (multivalued true) (opposite (ref: 259)) (type (ref: 260))))) (FM3.Trait (id: 261) (name 'THasModifiers') (package (ref: 29)) (properties (FM3.Property (id: 262) (name 'modifiers') (class (ref: 261)) (container false) (derived false) (multivalued true) (type (ref: String))) (FM3.Property (id: 263) (name 'isFinal') (class (ref: 261)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 264) (name 'isAbstract') (class (ref: 261)) (container false) (derived true) (multivalued false) (type (ref: Boolean))))) (FM3.Trait (id: 265) (name 'TWithAttributes') (package (ref: 29)) (properties (FM3.Property (id: 266) (name 'numberOfAttributes') (class (ref: 265)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 267) (name 'attributes') (class (ref: 265)) (container false) (derived true) (multivalued true) (opposite (ref: 268)) (type (ref: 269))))) (FM3.Trait (id: 270) (name 'TWithClasses') (package (ref: 29)) (traits (ref: 271)) (properties (FM3.Property (id: 272) (name 'numberOfClasses') (class (ref: 270)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 260) (name 'TFunction') (package (ref: 29)) (traits (ref: 46) (ref: 81) (ref: 47) (ref: 45) (ref: 123) (ref: 273) (ref: 122) (ref: 274) (ref: 48) (ref: 124)) (properties (FM3.Property (id: 259) (name 'functionOwner') (class (ref: 260)) (container true) (derived false) (multivalued false) (opposite (ref: 258)) (type (ref: 257))))) (FM3.Trait (id: 275) (name 'TClassMetrics') (package (ref: 29)) (properties (FM3.Property (id: 276) (name 'numberOfLocallyDefinedMethods') (class (ref: 275)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 277) (name 'numberOfMethodsInherited') (class (ref: 275)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 278) (name 'numberOfMethodsOverriden') (class (ref: 275)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 279) (name 'numberOfMethodsInHierarchy') (class (ref: 275)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 280) (name 'totalNumberOfSubclasses') (class (ref: 275)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 281) (name 'numberOfAttributesInherited') (class (ref: 275)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 282) (name 'TTemplateUser') (package (ref: 29)) (properties (FM3.Property (id: 283) (name 'template') (class (ref: 282)) (container false) (derived false) (multivalued false) (opposite (ref: 284)) (type (ref: 150))))) (FM3.Trait (id: 271) (name 'TWithTypes') (package (ref: 29)) (properties (FM3.Property (id: 285) (name 'types') (class (ref: 271)) (container false) (derived true) (multivalued true) (opposite (ref: 286)) (type (ref: 119))))) (FM3.Trait (id: 287) (name 'TLCOMMetrics') (package (ref: 29)) (properties (FM3.Property (id: 288) (name 'lcom3') (class (ref: 287)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 289) (name 'lcom2') (class (ref: 287)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 274) (name 'TWithParameters') (package (ref: 29)) (properties (FM3.Property (id: 290) (name 'numberOfParameters') (class (ref: 274)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 291) (name 'parameters') (class (ref: 274)) (container false) (derived true) (multivalued true) (opposite (ref: 292)) (type (ref: 293))))) (FM3.Trait (id: 294) (name 'THasImmediateSource') (package (ref: 29)) (traits (ref: 27)) (properties (FM3.Property (id: 295) (name 'source') (class (ref: 294)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Trait (id: 71) (name 'TTraitUsage') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 77)) (properties (FM3.Property (id: 70) (name 'trait') (class (ref: 71)) (container false) (derived false) (multivalued false) (opposite (ref: 69)) (type (ref: 68))) (FM3.Property (id: 296) (name 'user') (class (ref: 71)) (container false) (derived false) (multivalued false) (opposite (ref: 297)) (type (ref: 298))))) (FM3.Trait (id: 45) (name 'TTypedEntity') (package (ref: 29)) (properties (FM3.Property (id: 299) (name 'declaredType') (class (ref: 45)) (container false) (derived false) (multivalued false) (opposite (ref: 300)) (type (ref: 119))))) (FM3.Class (id: 301) (name 'ClassGroup') (abstract false) (package (ref: 29)) (superclass (ref: 126))) (FM3.Trait (id: 177) (name 'TPackage') (package (ref: 29)) (traits (ref: 47) (ref: 46) (ref: 48)) (properties (FM3.Property (id: 302) (name 'weightedMethodCount') (class (ref: 177)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 176) (name 'childEntities') (class (ref: 177)) (container false) (derived true) (multivalued true) (opposite (ref: 175)) (type (ref: 174))))) (FM3.Trait (id: 256) (name 'TAnnotationInstanceAttribute') (package (ref: 29)) (traits (ref: 48)) (properties (FM3.Property (id: 255) (name 'parentAnnotationInstance') (class (ref: 256)) (container true) (derived false) (multivalued false) (opposite (ref: 254)) (type (ref: 253))) (FM3.Property (id: 303) (name 'value') (class (ref: 256)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Trait (id: 304) (name 'TWithDeclaredExceptions') (package (ref: 29)) (properties (FM3.Property (id: 305) (name 'declaredExceptions') (class (ref: 304)) (container false) (derived true) (multivalued true) (opposite (ref: 306)) (type (ref: 307))))) (FM3.Trait (id: 95) (name 'TDereferencedInvocation') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 138) (ref: 77)) (properties (FM3.Property (id: 94) (name 'referencer') (class (ref: 95)) (container false) (derived false) (multivalued false) (opposite (ref: 93)) (type (ref: 92))))) (FM3.Trait (id: 121) (name 'TWithEnumValues') (package (ref: 29)) (properties (FM3.Property (id: 226) (name 'enumValues') (class (ref: 121)) (container false) (derived true) (multivalued true) (opposite (ref: 225)) (type (ref: 224))))) (FM3.Trait (id: 215) (name 'TCaughtException') (package (ref: 29)) (properties (FM3.Property (id: 214) (name 'definingEntity') (class (ref: 215)) (container false) (derived false) (multivalued false) (opposite (ref: 213)) (type (ref: 212))))) (FM3.Trait (id: 164) (name 'TWithImplicitVariables') (package (ref: 29)) (properties (FM3.Property (id: 163) (name 'implicitVariables') (class (ref: 164)) (container false) (derived true) (multivalued true) (opposite (ref: 162)) (type (ref: 161))))) (FM3.Trait (id: 37) (name 'TInheritance') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 77)) (properties (FM3.Property (id: 36) (name 'subclass') (class (ref: 37)) (container false) (derived false) (multivalued false) (opposite (ref: 35)) (type (ref: 34))) (FM3.Property (id: 40) (name 'superclass') (class (ref: 37)) (container false) (derived false) (multivalued false) (opposite (ref: 39)) (type (ref: 34))))) (FM3.Trait (id: 308) (name 'TException') (package (ref: 29)) (properties (FM3.Property (id: 309) (name 'exceptionClass') (class (ref: 308)) (container false) (derived false) (multivalued false) (opposite (ref: 310)) (type (ref: 311))))) (FM3.Trait (id: 120) (name 'TReferenceable') (package (ref: 29)) (properties (FM3.Property (id: 236) (name 'incomingReferences') (class (ref: 120)) (container false) (derived true) (multivalued true) (opposite (ref: 235)) (type (ref: 234))))) (FM3.Class (id: 312) (name 'FolderGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Trait (id: 313) (name 'TPreprocessorIfdef') (package (ref: 29))) (FM3.Class (id: 314) (name 'AnnotationTypeGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Trait (id: 315) (name 'TCanBeAbstract') (package (ref: 29)) (properties (FM3.Property (id: 316) (name 'isAbstract') (class (ref: 315)) (container false) (derived false) (multivalued false) (type (ref: Boolean))))) (FM3.Trait (id: 99) (name 'TFile') (package (ref: 29)) (traits (ref: 110)) (properties (FM3.Property (id: 317) (name 'numberOfEmptyLinesOfText') (class (ref: 99)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 98) (name 'entities') (class (ref: 99)) (container false) (derived true) (multivalued true) (opposite (ref: 97)) (type (ref: 96))) (FM3.Property (id: 318) (name 'numberOfKiloBytes') (class (ref: 99)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 319) (name 'numberOfCharacters') (class (ref: 99)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 320) (name 'totalNumberOfLinesOfText') (class (ref: 99)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 321) (name 'averageNumberOfCharactersPerLine') (class (ref: 99)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 322) (name 'numberOfBytes') (class (ref: 99)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 323) (name 'TCohesionCouplingMetrics') (package (ref: 29)) (traits (ref: 47) (ref: 177) (ref: 46) (ref: 48)) (properties (FM3.Property (id: 324) (name 'martinCohesion') (class (ref: 323)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 325) (name 'abstractness') (class (ref: 323)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 326) (name 'instability') (class (ref: 323)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 327) (name 'efferentCoupling') (class (ref: 323)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 328) (name 'afferentCoupling') (class (ref: 323)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 329) (name 'distance') (class (ref: 323)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 269) (name 'TAttribute') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) (properties (FM3.Property (id: 268) (name 'parentType') (class (ref: 269)) (container true) (derived false) (multivalued false) (opposite (ref: 267)) (type (ref: 265))) (FM3.Property (id: 330) (name 'hierarchyNestingLevel') (class (ref: 269)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 331) (name 'hasClassScope') (class (ref: 269)) (container false) (derived true) (multivalued false) (type (ref: Boolean))))) (FM3.Class (id: 332) (name 'NamespaceGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Class (id: 333) (name 'FamixModel') (abstract false) (package (ref: 29)) (superclass (ref: 334))) (FM3.Class (id: 335) (name 'AnnotationInstanceGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Trait (id: 81) (name 'TWithAccesses') (package (ref: 29)) (properties (FM3.Property (id: 80) (name 'accesses') (class (ref: 81)) (container false) (derived true) (multivalued true) (opposite (ref: 79)) (type (ref: 75))))) (FM3.Trait (id: 336) (name 'TAnnotationTypeAttribute') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 269) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) (properties (FM3.Property (id: 337) (name 'annotationAttributeInstances') (class (ref: 336)) (container false) (derived true) (multivalued true) (opposite (ref: 338)) (type (ref: 339))))) (FM3.Trait (id: 252) (name 'TWithCompilationUnits') (package (ref: 29)) (properties (FM3.Property (id: 251) (name 'compilationUnit') (class (ref: 252)) (container false) (derived true) (multivalued false) (opposite (ref: 250)) (type (ref: 249))))) (FM3.Trait (id: 340) (name 'TImplementable') (package (ref: 29)) (properties (FM3.Property (id: 341) (name 'implementations') (class (ref: 340)) (container false) (derived true) (multivalued true) (opposite (ref: 342)) (type (ref: 242))))) (FM3.Trait (id: 114) (name 'TFolder') (package (ref: 29)) (traits (ref: 110)) (properties (FM3.Property (id: 343) (name 'numberOfFolders') (class (ref: 114)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 344) (name 'numberOfFiles') (class (ref: 114)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 345) (name 'totalNumberOfLinesOfText') (class (ref: 114)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 346) (name 'numberOfEmptyLinesOfText') (class (ref: 114)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 113) (name 'childrenFileSystemEntities') (class (ref: 114)) (container false) (derived true) (multivalued true) (opposite (ref: 112)) (type (ref: 110))))) (FM3.Trait (id: 347) (name 'TUnknownSourceLanguage') (package (ref: 29)) (traits (ref: 188))) (FM3.Trait (id: 273) (name 'THasSignature') (package (ref: 29)) (properties (FM3.Property (id: 348) (name 'signature') (class (ref: 273)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Trait (id: 168) (name 'TParameterizedType') (package (ref: 29)) (properties (FM3.Property (id: 167) (name 'parameterizableClass') (class (ref: 168)) (container false) (derived false) (multivalued false) (opposite (ref: 166)) (type (ref: 165))))) (FM3.Trait (id: 223) (name 'TComment') (package (ref: 29)) (properties (FM3.Property (id: 222) (name 'container') (class (ref: 223)) (container false) (derived false) (multivalued false) (opposite (ref: 221)) (type (ref: 218))) (FM3.Property (id: 349) (name 'content') (class (ref: 223)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Trait (id: 192) (name 'TLocalVariable') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) (properties (FM3.Property (id: 191) (name 'parentBehaviouralEntity') (class (ref: 192)) (container true) (derived false) (multivalued false) (opposite (ref: 190)) (type (ref: 189))))) (FM3.Trait (id: 298) (name 'TTraitUser') (package (ref: 29)) (properties (FM3.Property (id: 297) (name 'outgoingTraitUsages') (class (ref: 298)) (container false) (derived true) (multivalued true) (opposite (ref: 296)) (type (ref: 71))))) (FM3.Trait (id: 53) (name 'TWithGlobalVariables') (package (ref: 29)) (properties (FM3.Property (id: 52) (name 'globalVariables') (class (ref: 53)) (container false) (derived true) (multivalued true) (opposite (ref: 51)) (type (ref: 44))))) (FM3.Trait (id: 350) (name 'TWithPackages') (package (ref: 29))) (FM3.Trait (id: 351) (name 'THasVisibility') (package (ref: 29)) (properties (FM3.Property (id: 352) (name 'visibility') (class (ref: 351)) (container false) (derived false) (multivalued false) (type (ref: String))) (FM3.Property (id: 353) (name 'isProtected') (class (ref: 351)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 354) (name 'isPackage') (class (ref: 351)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 355) (name 'isPublic') (class (ref: 351)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 356) (name 'isPrivate') (class (ref: 351)) (container false) (derived true) (multivalued false) (type (ref: Boolean))))) (FM3.Trait (id: 200) (name 'TDefinedInModule') (package (ref: 29)) (properties (FM3.Property (id: 199) (name 'parentModule') (class (ref: 200)) (container false) (derived false) (multivalued false) (opposite (ref: 198)) (type (ref: 197))))) (FM3.Trait (id: 357) (name 'TUnknownVariable') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50))) (FM3.Trait (id: 358) (name 'TParameterType') (package (ref: 29))) (FM3.Trait (id: 56) (name 'TFileAnchor') (package (ref: 29)) (properties (FM3.Property (id: 359) (name 'correspondingFile') (class (ref: 56)) (container false) (derived false) (multivalued false) (type (ref: 99))) (FM3.Property (id: 360) (name 'encoding') (class (ref: 56)) (container false) (derived false) (multivalued false) (type (ref: String))) (FM3.Property (id: 361) (name 'fileName') (class (ref: 56)) (container false) (derived false) (multivalued false) (type (ref: String))))) (FM3.Trait (id: 242) (name 'TImplementation') (package (ref: 29)) (traits (ref: 47) (ref: 76) (ref: 77)) (properties (FM3.Property (id: 241) (name 'implementingClass') (class (ref: 242)) (container false) (derived false) (multivalued false) (opposite (ref: 240)) (type (ref: 239))) (FM3.Property (id: 342) (name 'interface') (class (ref: 242)) (container false) (derived false) (multivalued false) (opposite (ref: 341)) (type (ref: 340))))) (FM3.Trait (id: 172) (name 'TWithAnnotationInstances') (package (ref: 29)) (properties (FM3.Property (id: 362) (name 'numberOfAnnotationInstances') (class (ref: 172)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 171) (name 'annotationInstances') (class (ref: 172)) (container false) (derived true) (multivalued true) (opposite (ref: 170)) (type (ref: 169))))) (FM3.Trait (id: 150) (name 'TTemplate') (package (ref: 29)) (properties (FM3.Property (id: 149) (name 'templateOwner') (class (ref: 150)) (container false) (derived false) (multivalued false) (opposite (ref: 148)) (type (ref: 147))) (FM3.Property (id: 284) (name 'templateUsers') (class (ref: 150)) (container false) (derived true) (multivalued true) (opposite (ref: 283)) (type (ref: 282))))) (FM3.Class (id: 363) (name 'InvocationGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Trait (id: 123) (name 'TWithReferences') (package (ref: 29)) (properties (FM3.Property (id: 238) (name 'outgoingReferences') (class (ref: 123)) (container false) (derived true) (multivalued true) (opposite (ref: 237)) (type (ref: 234))))) (FM3.Trait (id: 293) (name 'TParameter') (package (ref: 29)) (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) (properties (FM3.Property (id: 292) (name 'parentBehaviouralEntity') (class (ref: 293)) (container true) (derived false) (multivalued false) (opposite (ref: 291)) (type (ref: 274))))) (FM3.Trait (id: 60) (name 'TWithTypeAliases') (package (ref: 29)) (properties (FM3.Property (id: 59) (name 'typeAliases') (class (ref: 60)) (container false) (derived true) (multivalued true) (opposite (ref: 58)) (type (ref: 57))))) (FM3.Trait (id: 307) (name 'TDeclaredException') (package (ref: 29)) (properties (FM3.Property (id: 306) (name 'definingEntity') (class (ref: 307)) (container false) (derived false) (multivalued false) (opposite (ref: 305)) (type (ref: 304))))) (FM3.Trait (id: 311) (name 'TWithExceptions') (package (ref: 29)) (properties (FM3.Property (id: 310) (name 'exceptions') (class (ref: 311)) (container false) (derived true) (multivalued true) (opposite (ref: 309)) (type (ref: 308))))) (FM3.Trait (id: 156) (name 'TMethod') (package (ref: 29)) (traits (ref: 189) (ref: 46) (ref: 81) (ref: 364) (ref: 45) (ref: 123) (ref: 47) (ref: 122) (ref: 273) (ref: 164) (ref: 365) (ref: 274) (ref: 143) (ref: 48) (ref: 124)) (properties (FM3.Property (id: 155) (name 'parentType') (class (ref: 156)) (container true) (derived false) (multivalued false) (opposite (ref: 154)) (type (ref: 152))) (FM3.Property (id: 366) (name 'hasClassScope') (class (ref: 156)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 367) (name 'numberOfMessageSends') (class (ref: 156)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 368) (name 'TClassWithVisibility') (package (ref: 29)) (traits (ref: 152) (ref: 265) (ref: 146) (ref: 46) (ref: 174) (ref: 119) (ref: 34) (ref: 47) (ref: 364) (ref: 369) (ref: 351) (ref: 120) (ref: 218) (ref: 48))) (FM3.Trait (id: 339) (name 'TTypedAnnotationInstanceAttribute') (package (ref: 29)) (properties (FM3.Property (id: 338) (name 'annotationTypeAttribute') (class (ref: 339)) (container false) (derived false) (multivalued false) (opposite (ref: 337)) (type (ref: 336))))) (FM3.Trait (id: 196) (name 'TThrownException') (package (ref: 29)) (properties (FM3.Property (id: 195) (name 'definingEntity') (class (ref: 196)) (container false) (derived false) (multivalued false) (opposite (ref: 194)) (type (ref: 193))))) (FM3.Trait (id: 146) (name 'TInvocationsReceiver') (package (ref: 29)) (properties (FM3.Property (id: 145) (name 'receivingInvocations') (class (ref: 146)) (container false) (derived true) (multivalued true) (opposite (ref: 144)) (type (ref: 138))))) (FM3.Trait (id: 365) (name 'TMethodMetrics') (package (ref: 29)) (properties (FM3.Property (id: 370) (name 'numberOfAnnotationInstances') (class (ref: 365)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 371) (name 'hierarchyNestingLevel') (class (ref: 365)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 372) (name 'cyclomaticComplexity') (class (ref: 365)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 373) (name 'TPrimitiveType') (package (ref: 29)) (traits (ref: 119) (ref: 46) (ref: 120) (ref: 47) (ref: 48))) (FM3.Trait (id: 119) (name 'TType') (package (ref: 29)) (traits (ref: 47) (ref: 120) (ref: 46) (ref: 48)) (properties (FM3.Property (id: 300) (name 'typedEntities') (class (ref: 119)) (container false) (derived true) (multivalued true) (opposite (ref: 299)) (type (ref: 45))) (FM3.Property (id: 286) (name 'typeContainer') (class (ref: 119)) (container true) (derived false) (multivalued false) (opposite (ref: 285)) (type (ref: 271))))) (FM3.Class (id: 374) (name 'FileGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Trait (id: 27) (name 'TSourceAnchor') (package (ref: 29)) (properties (FM3.Property (id: 207) (name 'element') (class (ref: 27)) (container false) (derived false) (multivalued false) (opposite (ref: 206)) (type (ref: 47))) (FM3.Property (id: 375) (name 'lineCount') (class (ref: 27)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 376) (name 'PackageGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127))) (FM3.Trait (id: 89) (name 'TWithFileIncludes') (package (ref: 29)) (properties (FM3.Property (id: 91) (name 'incomingIncludeRelations') (class (ref: 89)) (container false) (derived true) (multivalued true) (opposite (ref: 90)) (type (ref: 86))) (FM3.Property (id: 88) (name 'outgoingIncludeRelations') (class (ref: 89)) (container false) (derived true) (multivalued true) (opposite (ref: 87)) (type (ref: 86))))) (FM3.Trait (id: 377) (name 'TNamespace') (package (ref: 29)) (traits (ref: 47) (ref: 364) (ref: 46) (ref: 48))) (FM3.Trait (id: 378) (name 'TClassHierarchyNavigation') (package (ref: 29))) (FM3.Trait (id: 369) (name 'TClass') (package (ref: 29)) (traits (ref: 152) (ref: 265) (ref: 146) (ref: 46) (ref: 174) (ref: 119) (ref: 34) (ref: 47) (ref: 364) (ref: 120) (ref: 218) (ref: 48)) (properties (FM3.Property (id: 379) (name 'isTestCase') (class (ref: 369)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 380) (name 'weightOfAClass') (class (ref: 369)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 381) (name 'TPreprocessorDefine') (package (ref: 29))) (FM3.Class (id: 382) (name 'MethodGroup') (abstract false) (package (ref: 29)) (superclass (ref: 127)) (properties (FM3.Property (id: 383) (name 'averageNumberOfLinesOfCode') (class (ref: 382)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 384) (name 'averageNumberOfParameters') (class (ref: 382)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 385) (name 'averageNumberOfInvocations') (class (ref: 382)) (container false) (derived false) (multivalued false) (type (ref: Number))))))) (FM3.Package (id: 386) (name 'Famix-Java-Entities') (classes (FM3.Class (id: 387) (name 'Class') (abstract false) (package (ref: 386)) (superclass (ref: 388)) (traits (ref: 218) (ref: 34) (ref: 152) (ref: 46) (ref: 311) (ref: 275) (ref: 351) (ref: 115) (ref: 146) (ref: 287) (ref: 174) (ref: 48) (ref: 239) (ref: 120) (ref: 119) (ref: 369) (ref: 389) (ref: 265) (ref: 47) (ref: 216) (ref: 315) (ref: 364)) (properties (FM3.Property (id: 390) (name 'isInterface') (class (ref: 387)) (container false) (derived false) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 391) (name 'isIgnored') (class (ref: 387)) (container false) (derived true) (multivalued true) (type (ref: Boolean))))) (FM3.Class (id: 392) (name 'Inheritance') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 47) (ref: 76) (ref: 37) (ref: 77))) (FM3.Class (id: 394) (name 'Exception') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 308))) (FM3.Trait (id: 395) (name 'TCanBeSynchronized') (package (ref: 386)) (properties (FM3.Property (id: 396) (name 'isSynchronized') (class (ref: 395)) (container false) (derived false) (multivalued false) (type (ref: Boolean))))) (FM3.Class (id: 397) (name 'Interface') (abstract false) (package (ref: 386)) (superclass (ref: 388)) (traits (ref: 152) (ref: 265) (ref: 146) (ref: 340) (ref: 174) (ref: 34) (ref: 351) (ref: 364) (ref: 218) (ref: 115) (ref: 48) (ref: 216))) (FM3.Class (id: 398) (name 'GlobalVariable') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 44) (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 146) (ref: 49) (ref: 50))) (FM3.Class (id: 400) (name 'FamixJavaModel') (abstract false) (package (ref: 386)) (superclass (ref: 334))) (FM3.Class (id: 401) (name 'ParameterType') (abstract false) (package (ref: 386)) (superclass (ref: 388)) (traits (ref: 358))) (FM3.Class (id: 402) (name 'ParameterizableClass') (abstract false) (package (ref: 386)) (superclass (ref: 387)) (traits (ref: 165)) (properties (FM3.Property (id: 403) (name 'parameters') (class (ref: 402)) (container false) (derived true) (multivalued true) (type (ref: 401))))) (FM3.Trait (id: 404) (name 'TCanBeTransient') (package (ref: 386)) (properties (FM3.Property (id: 405) (name 'isTransient') (class (ref: 404)) (container false) (derived false) (multivalued false) (type (ref: Boolean))))) (FM3.Class (id: 406) (name 'LocalVariable') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 146) (ref: 192) (ref: 46) (ref: 47) (ref: 45) (ref: 218) (ref: 50) (ref: 49) (ref: 48) (ref: 216))) (FM3.Class (id: 407) (name 'PrimitiveType') (abstract false) (package (ref: 386)) (superclass (ref: 388)) (traits (ref: 373) (ref: 119) (ref: 46) (ref: 120) (ref: 47) (ref: 48))) (FM3.Class (id: 408) (name 'UnknownSourceLanguage') (abstract false) (package (ref: 386)) (superclass (ref: 409)) (traits (ref: 347) (ref: 188)) (properties (FM3.Property (id: 410) (name 'name') (class (ref: 408)) (container false) (derived true) (multivalued false) (type (ref: String))))) (FM3.Class (id: 411) (name 'DeclaredException') (abstract false) (package (ref: 386)) (superclass (ref: 394)) (traits (ref: 307))) (FM3.Class (id: 412) (name 'Parameter') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 49) (ref: 45) (ref: 46) (ref: 50) (ref: 293) (ref: 218) (ref: 48) (ref: 47) (ref: 216))) (FM3.Class (id: 413) (name 'Invocation') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 77) (ref: 76) (ref: 47) (ref: 138) (ref: 273))) (FM3.Class (id: 414) (name 'Package') (abstract false) (package (ref: 386)) (superclass (ref: 415)) (traits (ref: 174) (ref: 46) (ref: 177) (ref: 47) (ref: 48) (ref: 53)) (properties (FM3.Property (id: 416) (name 'abstractness') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 417) (name 'bunchCohesion') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 418) (name 'distance') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 419) (name 'afferentCoupling') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 420) (name 'efferentCoupling') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 421) (name 'relativeImportanceForSystem') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 422) (name 'instability') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 423) (name 'martinCohesion') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 424) (name 'numberOfClientPackages') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 425) (name 'numberOfMethods') (class (ref: 414)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 426) (name 'SourceAnchor') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 27))) (FM3.Class (id: 427) (name 'ParameterizedType') (abstract false) (package (ref: 386)) (superclass (ref: 388)) (traits (ref: 30) (ref: 34) (ref: 340) (ref: 239) (ref: 168))) (FM3.Class (id: 393) (name 'Entity') (abstract false) (package (ref: 386)) (superclass (ref: 3))) (FM3.Class (id: 428) (name 'Attribute') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 404) (ref: 146) (ref: 269) (ref: 46) (ref: 351) (ref: 45) (ref: 47) (ref: 218) (ref: 429) (ref: 50) (ref: 48) (ref: 115) (ref: 49) (ref: 216))) (FM3.Class (id: 430) (name 'SourceTextAnchor') (abstract false) (package (ref: 386)) (superclass (ref: 426)) (traits (ref: 294) (ref: 27))) (FM3.Class (id: 388) (name 'Type') (abstract false) (package (ref: 386)) (superclass (ref: 415)) (traits (ref: 119) (ref: 46) (ref: 60) (ref: 152) (ref: 120) (ref: 33) (ref: 47) (ref: 48)) (properties (FM3.Property (id: 431) (name 'isTestCase') (class (ref: 388)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 432) (name 'isJUnit4TestCase') (class (ref: 388)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 433) (name 'isInnerClass') (class (ref: 388)) (container false) (derived true) (multivalued false) (type (ref: Boolean))))) (FM3.Class (id: 434) (name 'EnumValue') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 224) (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 218) (ref: 49) (ref: 50))) (FM3.Class (id: 435) (name 'AnnotationInstanceAttribute') (abstract false) (package (ref: 386)) (superclass (ref: 436)) (traits (ref: 339) (ref: 256) (ref: 48))) (FM3.Trait (id: 429) (name 'TCanBeVolatile') (package (ref: 386)) (properties (FM3.Property (id: 437) (name 'isVolatile') (class (ref: 429)) (container false) (derived false) (multivalued false) (type (ref: Boolean))))) (FM3.Class (id: 399) (name 'NamedEntity') (abstract false) (package (ref: 386)) (superclass (ref: 436)) (traits (ref: 48) (ref: 46) (ref: 146) (ref: 172))) (FM3.Class (id: 438) (name 'Comment') (abstract false) (package (ref: 386)) (superclass (ref: 436)) (traits (ref: 223))) (FM3.Class (id: 439) (name 'CaughtException') (abstract false) (package (ref: 386)) (superclass (ref: 394)) (traits (ref: 215))) (FM3.Class (id: 440) (name 'ParameterizableInterface') (abstract false) (package (ref: 386)) (superclass (ref: 397)) (traits (ref: 165))) (FM3.Class (id: 441) (name 'Folder') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 114) (ref: 110))) (FM3.Class (id: 442) (name 'ThrownException') (abstract false) (package (ref: 386)) (superclass (ref: 394)) (traits (ref: 196))) (FM3.Trait (id: 443) (name 'TWithInterfaces') (package (ref: 386)) (traits (ref: 271))) (FM3.Class (id: 444) (name 'ImplicitVariable') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 161) (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 146) (ref: 49) (ref: 50))) (FM3.Class (id: 436) (name 'SourcedEntity') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 47) (ref: 96)) (properties (FM3.Property (id: 445) (name 'numberOfJavaNullChecks') (class (ref: 436)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 446) (name 'Enum') (abstract false) (package (ref: 386)) (superclass (ref: 388)) (traits (ref: 152) (ref: 265) (ref: 46) (ref: 119) (ref: 34) (ref: 351) (ref: 47) (ref: 121) (ref: 118) (ref: 120) (ref: 218) (ref: 48))) (FM3.Class (id: 409) (name 'SourceLanguage') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 188)) (properties (FM3.Property (id: 447) (name 'name') (class (ref: 409)) (container false) (derived true) (multivalued false) (type (ref: String))))) (FM3.Class (id: 448) (name 'IndexedFileAnchor') (abstract false) (package (ref: 386)) (superclass (ref: 426)) (traits (ref: 56) (ref: 65))) (FM3.Class (id: 449) (name 'Method') (abstract false) (package (ref: 386)) (superclass (ref: 415)) (traits (ref: 189) (ref: 273) (ref: 218) (ref: 46) (ref: 104) (ref: 212) (ref: 274) (ref: 45) (ref: 351) (ref: 164) (ref: 115) (ref: 81) (ref: 156) (ref: 395) (ref: 123) (ref: 193) (ref: 365) (ref: 48) (ref: 143) (ref: 122) (ref: 47) (ref: 216) (ref: 124) (ref: 315) (ref: 304) (ref: 364)) (properties (FM3.Property (id: 450) (name 'isJUnit4Test') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 451) (name 'isOverriding') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 452) (name 'numberOfComments') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 453) (name 'numberOfInvokedMethods') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 454) (name 'invokedMethods') (class (ref: 449)) (container false) (derived true) (multivalued true) (type (ref: 449))) (FM3.Property (id: 455) (name 'isImplementing') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 456) (name 'invokingMethods') (class (ref: 449)) (container false) (derived true) (multivalued true) (type (ref: 449))) (FM3.Property (id: 457) (name 'clientBehaviours') (class (ref: 449)) (container false) (derived true) (multivalued true) (type (ref: 449))) (FM3.Property (id: 458) (name 'numberOfConditionals') (class (ref: 449)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 459) (name 'isClassInitializer') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 460) (name 'providerBehaviours') (class (ref: 449)) (container false) (derived true) (multivalued true) (type (ref: 449))) (FM3.Property (id: 461) (name 'isOverriden') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 462) (name 'numberOfAccesses') (class (ref: 449)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 463) (name 'AnnotationInstance') (abstract false) (package (ref: 386)) (superclass (ref: 436)) (traits (ref: 169) (ref: 178) (ref: 253) (ref: 48))) (FM3.Class (id: 464) (name 'AnnotationTypeAttribute') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 269) (ref: 46) (ref: 47) (ref: 45) (ref: 339) (ref: 218) (ref: 50) (ref: 48) (ref: 49) (ref: 336)) (properties (FM3.Property (id: 465) (name 'parentAnnotationType') (class (ref: 464)) (container false) (derived true) (multivalued false) (type (ref: 466))))) (FM3.Class (id: 467) (name 'File') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 99) (ref: 110))) (FM3.Class (id: 466) (name 'AnnotationType') (abstract false) (package (ref: 386)) (superclass (ref: 388)) (traits (ref: 174) (ref: 34) (ref: 340) (ref: 351) (ref: 265) (ref: 181) (ref: 218))) (FM3.Trait (id: 389) (name 'TClassMetrics') (package (ref: 386)) (properties (FM3.Property (id: 468) (name 'numberOfProtectedMethods') (class (ref: 389)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 469) (name 'numberOfAccessorMethods') (class (ref: 389)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 470) (name 'numberOfPrivateMethods') (class (ref: 389)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 471) (name 'numberOfConstructorMethods') (class (ref: 389)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 472) (name 'numberOfPublicMethods') (class (ref: 389)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 473) (name 'Access') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 47) (ref: 75) (ref: 76) (ref: 77))) (FM3.Class (id: 415) (name 'ContainerEntity') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 364) (ref: 270) (ref: 182) (ref: 48) (ref: 271) (ref: 443))) (FM3.Class (id: 474) (name 'Reference') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 47) (ref: 76) (ref: 234) (ref: 77))) (FM3.Class (id: 475) (name 'Implementation') (abstract false) (package (ref: 386)) (superclass (ref: 393)) (traits (ref: 47) (ref: 76) (ref: 242) (ref: 77))) (FM3.Class (id: 476) (name 'UnknownVariable') (abstract false) (package (ref: 386)) (superclass (ref: 399)) (traits (ref: 45) (ref: 357) (ref: 46) (ref: 47) (ref: 48) (ref: 146) (ref: 49) (ref: 50))))) (FM3.Package (id: 477) (name 'FamixReplication') (classes (FM3.Class (id: 204) (name 'Replica') (abstract false) (package (ref: 477)) (superclass (ref: 3))) (FM3.Class (id: 478) (name 'ReplicatedFragment') (abstract false) (package (ref: 477)) (superclass (ref: 3))))) (FM3.Package (id: 479) (name 'Moose') (classes (FM3.Class (id: 480) (name 'Group') (abstract false) (package (ref: 479)) (superclass (ref: 23))) (FM3.Class (id: 127) (name 'SpecializedGroup') (abstract false) (package (ref: 479)) (superclass (ref: 480))) (FM3.Class (id: 334) (name 'Model') (abstract false) (package (ref: 479)) (superclass (ref: 23)) (properties (FM3.Property (id: 481) (name 'numberOfMethods') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 482) (name 'numberOfLinesOfCode') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 483) (name 'numberOfClassesPerPackage') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 484) (name 'numberOfLinesOfCodePerClass') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 485) (name 'numberOfModelClasses') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 486) (name 'sourceLanguage') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: 188))) (FM3.Property (id: 487) (name 'averageCyclomaticComplexity') (class (ref: 334)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 488) (name 'numberOfClasses') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 489) (name 'numberOfLinesOfCodePerPackage') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 490) (name 'numberOfModelMethods') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 491) (name 'numberOfClassesPerPackage') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 492) (name 'numberOfLinesOfCodePerMethod') (class (ref: 334)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 493) (name 'PropertyGroup') (abstract false) (package (ref: 479)) (superclass (ref: 480)) (properties (FM3.Property (id: 494) (name 'propertyRatio') (class (ref: 493)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 495) (name 'sizeRatio') (class (ref: 493)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 496) (name 'propertyTotalOriginal') (class (ref: 493)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 497) (name 'propertyTotal') (class (ref: 493)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 498) (name 'property') (class (ref: 493)) (container false) (derived false) (multivalued false) (type (ref: String))) (FM3.Property (id: 499) (name 'sizeOriginal') (class (ref: 493)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 23) (name 'AbstractGroup') (abstract true) (package (ref: 479)) (superclass (ref: 500)) (properties (FM3.Property (id: 501) (name 'numberOfPackages') (class (ref: 23)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 502) (name 'numberOfAssociations') (class (ref: 23)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 503) (name 'numberOfLinesOfCode') (class (ref: 23)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 504) (name 'numberOfItems') (class (ref: 23)) (container false) (derived false) (multivalued false) (type (ref: Number))) (FM3.Property (id: 505) (name 'numberOfEntities') (class (ref: 23)) (container false) (derived false) (multivalued false) (type (ref: Number))))) (FM3.Class (id: 3) (name 'Entity') (abstract true) (package (ref: 479)) (superclass (ref: 500)) (properties (FM3.Property (id: 506) (name 'isDead') (class (ref: 3)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 507) (name 'isTagged') (class (ref: 3)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 508) (name 'numberOfTags') (class (ref: 3)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 11) (name 'allTagAssociations') (class (ref: 3)) (container false) (derived false) (multivalued true) (opposite (ref: 10)) (type (ref: 8))))) (FM3.Class (id: 500) (name 'Object') (abstract true) (package (ref: 479)) (superclass (ref: Object))))) (FM3.Package (id: 509) (name 'Moose-Query') (classes (FM3.Trait (id: 48) (name 'TEntityMetaLevelDependency') (package (ref: 509)) (properties (FM3.Property (id: 510) (name 'isDead') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Boolean))) (FM3.Property (id: 511) (name 'numberOfExternalClients') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 512) (name 'numberOfInternalProviders') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 513) (name 'numberOfChildren') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 514) (name 'numberOfInternalClients') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 515) (name 'fanIn') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 516) (name 'numberOfDeadChildren') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 517) (name 'numberOfExternalProviders') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))) (FM3.Property (id: 518) (name 'fanOut') (class (ref: 48)) (container false) (derived true) (multivalued false) (type (ref: Number))))) (FM3.Trait (id: 76) (name 'TAssociationMetaLevelDependency') (package (ref: 509))) (FM3.Trait (id: 364) (name 'TOODependencyQueries') (package (ref: 509)) (traits (ref: 48)))))) \ No newline at end of file +( + (FM3.Package (id: 1) + (name 'Tagging') + (classes + (FM3.Class (id: 2) + (name 'Category') + (abstract false) + (package (ref: 1)) + (superclass (ref: 3)) + (properties + (FM3.Property (id: 4) + (name 'markedTags') + (class (ref: 2)) + (container false) + (derived false) + (multivalued true) + (opposite (ref: 5)) + (type (ref: 6))) + (FM3.Property (id: 7) + (name 'name') + (class (ref: 2)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Class (id: 8) + (name 'Association') + (abstract true) + (package (ref: 1)) + (superclass (ref: 3)) + (properties + (FM3.Property (id: 9) + (name 'tag') + (class (ref: 8)) + (container false) + (derived true) + (multivalued false) + (type (ref: 6))) + (FM3.Property (id: 10) + (name 'entity') + (class (ref: 8)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 11)) + (type (ref: 3))) + (FM3.Property (id: 12) + (name 'tagId') + (class (ref: 8)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 6) + (name 'Tag') + (abstract false) + (package (ref: 1)) + (superclass (ref: 3)) + (properties + (FM3.Property (id: 13) + (name 'serializedColor') + (class (ref: 6)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))) + (FM3.Property (id: 14) + (name 'description') + (class (ref: 6)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))) + (FM3.Property (id: 15) + (name 'children') + (class (ref: 6)) + (container false) + (derived true) + (multivalued true) + (type (ref: 6))) + (FM3.Property (id: 16) + (name 'parentTag') + (class (ref: 6)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 17)) + (type (ref: 6))) + (FM3.Property (id: 18) + (name 'isHidden') + (class (ref: 6)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 5) + (name 'categories') + (class (ref: 6)) + (container false) + (derived false) + (multivalued true) + (opposite (ref: 4)) + (type (ref: 2))) + (FM3.Property (id: 19) + (name 'id') + (class (ref: 6)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 17) + (name 'subTags') + (class (ref: 6)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 16)) + (type (ref: 6))) + (FM3.Property (id: 20) + (name 'name') + (class (ref: 6)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Class (id: 21) + (name 'EntityAssociation') + (abstract false) + (package (ref: 1)) + (superclass (ref: 8))) + (FM3.Class (id: 22) + (name 'TagModel') + (abstract false) + (package (ref: 1)) + (superclass (ref: 23))) + (FM3.Class (id: 24) + (name 'IntervalAssociation') + (abstract false) + (package (ref: 1)) + (superclass (ref: 8)) + (properties + (FM3.Property (id: 25) + (name 'start') + (class (ref: 24)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 26) + (name 'sourceAnchor') + (class (ref: 24)) + (container false) + (derived false) + (multivalued false) + (type (ref: 27))) + (FM3.Property (id: 28) + (name 'stop') + (class (ref: 24)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))))) + (FM3.Package (id: 29) + (name 'Famix-Traits') + (classes + (FM3.Trait (id: 30) + (name 'TWithParameterizedTypeUsers') + (package (ref: 29)) + (properties + (FM3.Property (id: 31) + (name 'arguments') + (class (ref: 30)) + (container false) + (derived false) + (multivalued true) + (opposite (ref: 32)) + (type (ref: 33))))) + (FM3.Trait (id: 34) + (name 'TWithInheritances') + (package (ref: 29)) + (properties + (FM3.Property (id: 35) + (name 'superInheritances') + (class (ref: 34)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 36)) + (type (ref: 37))) + (FM3.Property (id: 38) + (name 'subclassHierarchyDepth') + (class (ref: 34)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 39) + (name 'subInheritances') + (class (ref: 34)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 40)) + (type (ref: 37))) + (FM3.Property (id: 41) + (name 'hierarchyNestingLevel') + (class (ref: 34)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 42) + (name 'numberOfSubclasses') + (class (ref: 34)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 43) + (name 'numberOfDirectSubclasses') + (class (ref: 34)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 44) + (name 'TGlobalVariable') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) + (properties + (FM3.Property (id: 51) + (name 'parentScope') + (class (ref: 44)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 52)) + (type (ref: 53))))) + (FM3.Trait (id: 54) + (name 'TMultipleFileAnchor') + (package (ref: 29)) + (traits (ref: 27)) + (properties + (FM3.Property (id: 55) + (name 'fileAnchors') + (class (ref: 54)) + (container false) + (derived false) + (multivalued true) + (type (ref: 56))))) + (FM3.Trait (id: 57) + (name 'TTypeAlias') + (package (ref: 29)) + (properties + (FM3.Property (id: 58) + (name 'aliasedType') + (class (ref: 57)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 59)) + (type (ref: 60))))) + (FM3.Trait (id: 61) + (name 'TRelativeSourceAnchor') + (package (ref: 29)) + (traits (ref: 27)) + (properties + (FM3.Property (id: 62) + (name 'relatedAnchor') + (class (ref: 61)) + (container false) + (derived false) + (multivalued false) + (type (ref: 27))) + (FM3.Property (id: 63) + (name 'endPos') + (class (ref: 61)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 64) + (name 'startPos') + (class (ref: 61)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 65) + (name 'TIndexedFileNavigation') + (package (ref: 29)) + (traits (ref: 56)) + (properties + (FM3.Property (id: 66) + (name 'endPos') + (class (ref: 65)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 67) + (name 'startPos') + (class (ref: 65)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 68) + (name 'TTrait') + (package (ref: 29)) + (properties + (FM3.Property (id: 69) + (name 'incomingTraitUsages') + (class (ref: 68)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 70)) + (type (ref: 71))) + (FM3.Property (id: 72) + (name 'traitOwner') + (class (ref: 68)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 73)) + (type (ref: 74))))) + (FM3.Trait (id: 75) + (name 'TAccess') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 77)) + (properties + (FM3.Property (id: 78) + (name 'isWrite') + (class (ref: 75)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 79) + (name 'accessor') + (class (ref: 75)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 80)) + (type (ref: 81))) + (FM3.Property (id: 82) + (name 'variable') + (class (ref: 75)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 83)) + (type (ref: 50))) + (FM3.Property (id: 84) + (name 'isReadWriteUnknown') + (class (ref: 75)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 85) + (name 'isRead') + (class (ref: 75)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Trait (id: 86) + (name 'TFileInclude') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 77)) + (properties + (FM3.Property (id: 87) + (name 'source') + (class (ref: 86)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 88)) + (type (ref: 89))) + (FM3.Property (id: 90) + (name 'target') + (class (ref: 86)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 91)) + (type (ref: 89))))) + (FM3.Trait (id: 92) + (name 'TWithDereferencedInvocations') + (package (ref: 29)) + (properties + (FM3.Property (id: 93) + (name 'dereferencedInvocations') + (class (ref: 92)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 94)) + (type (ref: 95))))) + (FM3.Trait (id: 96) + (name 'TWithFiles') + (package (ref: 29)) + (properties + (FM3.Property (id: 97) + (name 'containerFiles') + (class (ref: 96)) + (container false) + (derived false) + (multivalued true) + (opposite (ref: 98)) + (type (ref: 99))))) + (FM3.Trait (id: 100) + (name 'TWithHeaders') + (package (ref: 29)) + (properties + (FM3.Property (id: 101) + (name 'header') + (class (ref: 100)) + (container false) + (derived true) + (multivalued false) + (opposite (ref: 102)) + (type (ref: 103))))) + (FM3.Trait (id: 104) + (name 'THasKind') + (package (ref: 29)) + (properties + (FM3.Property (id: 105) + (name 'isConstructor') + (class (ref: 104)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 106) + (name 'kind') + (class (ref: 104)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))) + (FM3.Property (id: 107) + (name 'isConstant') + (class (ref: 104)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 108) + (name 'isSetter') + (class (ref: 104)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 109) + (name 'isGetter') + (class (ref: 104)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Trait (id: 110) + (name 'TFileSystemEntity') + (package (ref: 29)) + (properties + (FM3.Property (id: 111) + (name 'numberOfLinesOfText') + (class (ref: 110)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 112) + (name 'parentFolder') + (class (ref: 110)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 113)) + (type (ref: 114))))) + (FM3.Trait (id: 115) + (name 'TCanBeClassSide') + (package (ref: 29)) + (properties + (FM3.Property (id: 116) + (name 'isClassSide') + (class (ref: 115)) + (container false) + (defaultValue (ref: 117)) + (derived false) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Trait (id: 118) + (name 'TEnum') + (package (ref: 29)) + (traits (ref: 119) (ref: 46) (ref: 120) (ref: 47) (ref: 48) (ref: 121))) + (FM3.Trait (id: 122) + (name 'TWithStatements') + (package (ref: 29)) + (traits (ref: 47) (ref: 81) (ref: 123) (ref: 124)) + (properties + (FM3.Property (id: 125) + (name 'numberOfStatements') + (class (ref: 122)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 126) + (name 'TypeGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127)) + (properties + (FM3.Property (id: 128) + (name 'averageNumberOfAttributes') + (class (ref: 126)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 129) + (name 'averageNumberOfMethods') + (class (ref: 126)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 130) + (name 'instability') + (class (ref: 126)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 131) + (name 'abstractness') + (class (ref: 126)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 132) + (name 'averageNumberOfStatements') + (class (ref: 126)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 133) + (name 'efferentCoupling') + (class (ref: 126)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 134) + (name 'afferentCoupling') + (class (ref: 126)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 135) + (name 'averageNumberOfMethods') + (class (ref: 126)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 136) + (name 'distance') + (class (ref: 126)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 137) + (name 'bunchCohesion') + (class (ref: 126)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 138) + (name 'TInvocation') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 77)) + (properties + (FM3.Property (id: 139) + (name 'sender') + (class (ref: 138)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 140)) + (type (ref: 124))) + (FM3.Property (id: 141) + (name 'candidates') + (class (ref: 138)) + (container false) + (derived false) + (multivalued true) + (opposite (ref: 142)) + (type (ref: 143))) + (FM3.Property (id: 144) + (name 'receiver') + (class (ref: 138)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 145)) + (type (ref: 146))))) + (FM3.Trait (id: 143) + (name 'TInvocable') + (package (ref: 29)) + (properties + (FM3.Property (id: 142) + (name 'incomingInvocations') + (class (ref: 143)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 141)) + (type (ref: 138))))) + (FM3.Trait (id: 103) + (name 'THeader') + (package (ref: 29)) + (traits (ref: 99) (ref: 110)) + (properties + (FM3.Property (id: 102) + (name 'headerOwner') + (class (ref: 103)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 101)) + (type (ref: 100))))) + (FM3.Trait (id: 147) + (name 'TWithTemplates') + (package (ref: 29)) + (properties + (FM3.Property (id: 148) + (name 'templates') + (class (ref: 147)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 149)) + (type (ref: 150))))) + (FM3.Trait (id: 124) + (name 'TWithInvocations') + (package (ref: 29)) + (properties + (FM3.Property (id: 140) + (name 'outgoingInvocations') + (class (ref: 124)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 139)) + (type (ref: 138))) + (FM3.Property (id: 151) + (name 'numberOfOutgoingInvocations') + (class (ref: 124)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 152) + (name 'TWithMethods') + (package (ref: 29)) + (properties + (FM3.Property (id: 153) + (name 'weightedMethodCount') + (class (ref: 152)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 154) + (name 'methods') + (class (ref: 152)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 155)) + (type (ref: 156))) + (FM3.Property (id: 157) + (name 'numberOfMessageSends') + (class (ref: 152)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 158) + (name 'numberOfMethods') + (class (ref: 152)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 159) + (name 'tightClassCohesion') + (class (ref: 152)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 160) + (name 'numberOfAbstractMethods') + (class (ref: 152)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 161) + (name 'TImplicitVariable') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) + (properties + (FM3.Property (id: 162) + (name 'parentBehaviouralEntity') + (class (ref: 161)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 163)) + (type (ref: 164))))) + (FM3.Trait (id: 165) + (name 'TWithParameterizedTypes') + (package (ref: 29)) + (properties + (FM3.Property (id: 166) + (name 'parameterizedTypes') + (class (ref: 165)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 167)) + (type (ref: 168))))) + (FM3.Trait (id: 49) + (name 'TStructuralEntity') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 50))) + (FM3.Trait (id: 169) + (name 'TAnnotationInstance') + (package (ref: 29)) + (traits (ref: 48)) + (properties + (FM3.Property (id: 170) + (name 'annotatedEntity') + (class (ref: 169)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 171)) + (type (ref: 172))))) + (FM3.Trait (id: 46) + (name 'TNamedEntity') + (package (ref: 29)) + (properties + (FM3.Property (id: 173) + (name 'name') + (class (ref: 46)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Trait (id: 174) + (name 'TPackageable') + (package (ref: 29)) + (properties + (FM3.Property (id: 175) + (name 'parentPackage') + (class (ref: 174)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 176)) + (type (ref: 177))))) + (FM3.Trait (id: 178) + (name 'TTypedAnnotationInstance') + (package (ref: 29)) + (properties + (FM3.Property (id: 179) + (name 'annotationType') + (class (ref: 178)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 180)) + (type (ref: 181))))) + (FM3.Trait (id: 182) + (name 'TWithAnnotationTypes') + (package (ref: 29)) + (properties + (FM3.Property (id: 183) + (name 'definedAnnotationTypes') + (class (ref: 182)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 184)) + (type (ref: 181))))) + (FM3.Trait (id: 185) + (name 'TWithSourceLanguages') + (package (ref: 29)) + (properties + (FM3.Property (id: 186) + (name 'declaredSourceLanguage') + (class (ref: 185)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 187)) + (type (ref: 188))))) + (FM3.Trait (id: 189) + (name 'TWithLocalVariables') + (package (ref: 29)) + (properties + (FM3.Property (id: 190) + (name 'localVariables') + (class (ref: 189)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 191)) + (type (ref: 192))))) + (FM3.Trait (id: 193) + (name 'TWithThrownExceptions') + (package (ref: 29)) + (properties + (FM3.Property (id: 194) + (name 'thrownExceptions') + (class (ref: 193)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 195)) + (type (ref: 196))))) + (FM3.Trait (id: 197) + (name 'TModule') + (package (ref: 29)) + (properties + (FM3.Property (id: 198) + (name 'moduleEntities') + (class (ref: 197)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 199)) + (type (ref: 200))))) + (FM3.Class (id: 201) + (name 'GlobalVariableGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Trait (id: 47) + (name 'TSourceEntity') + (package (ref: 29)) + (properties + (FM3.Property (id: 202) + (name 'duplicationRate') + (class (ref: 47)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 203) + (name 'replicas') + (class (ref: 47)) + (container false) + (derived true) + (multivalued false) + (type (ref: 204))) + (FM3.Property (id: 205) + (name 'numberOfLinesOfCode') + (class (ref: 47)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 206) + (name 'sourceAnchor') + (class (ref: 47)) + (container false) + (derived true) + (multivalued false) + (opposite (ref: 207)) + (type (ref: 27))) + (FM3.Property (id: 208) + (name 'sourceText') + (class (ref: 47)) + (container false) + (derived true) + (multivalued false) + (type (ref: String))) + (FM3.Property (id: 209) + (name 'isStub') + (class (ref: 47)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 210) + (name 'containsReplicas') + (class (ref: 47)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 211) + (name 'numberOfLinesOfCodeWithMoreThanOneCharacter') + (class (ref: 47)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 33) + (name 'TParameterizedTypeUser') + (package (ref: 29)) + (properties + (FM3.Property (id: 32) + (name 'argumentsInParameterizedTypes') + (class (ref: 33)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 31)) + (type (ref: 30))))) + (FM3.Trait (id: 188) + (name 'TSourceLanguage') + (package (ref: 29)) + (properties + (FM3.Property (id: 187) + (name 'sourcedEntities') + (class (ref: 188)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 186)) + (type (ref: 185))))) + (FM3.Trait (id: 212) + (name 'TWithCaughtExceptions') + (package (ref: 29)) + (properties + (FM3.Property (id: 213) + (name 'caughtExceptions') + (class (ref: 212)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 214)) + (type (ref: 215))))) + (FM3.Trait (id: 216) + (name 'TCanBeFinal') + (package (ref: 29)) + (properties + (FM3.Property (id: 217) + (name 'isFinal') + (class (ref: 216)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Trait (id: 218) + (name 'TWithComments') + (package (ref: 29)) + (properties + (FM3.Property (id: 219) + (name 'numberOfComments') + (class (ref: 218)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 220) + (name 'hasComments') + (class (ref: 218)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 221) + (name 'comments') + (class (ref: 218)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 222)) + (type (ref: 223))))) + (FM3.Trait (id: 224) + (name 'TEnumValue') + (package (ref: 29)) + (properties + (FM3.Property (id: 225) + (name 'parentEnum') + (class (ref: 224)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 226)) + (type (ref: 121))))) + (FM3.Trait (id: 77) + (name 'TAssociation') + (package (ref: 29)) + (traits (ref: 47) (ref: 76)) + (properties + (FM3.Property (id: 227) + (name 'previous') + (class (ref: 77)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 228)) + (type (ref: 77))) + (FM3.Property (id: 228) + (name 'next') + (class (ref: 77)) + (container false) + (derived true) + (multivalued false) + (opposite (ref: 227)) + (type (ref: 77))))) + (FM3.Trait (id: 229) + (name 'TFileNavigation') + (package (ref: 29)) + (traits (ref: 56)) + (properties + (FM3.Property (id: 230) + (name 'endLine') + (class (ref: 229)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 231) + (name 'startColumn') + (class (ref: 229)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 232) + (name 'endColumn') + (class (ref: 229)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 233) + (name 'startLine') + (class (ref: 229)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 234) + (name 'TReference') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 77)) + (properties + (FM3.Property (id: 235) + (name 'referredType') + (class (ref: 234)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 236)) + (type (ref: 120))) + (FM3.Property (id: 237) + (name 'referencer') + (class (ref: 234)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 238)) + (type (ref: 123))))) + (FM3.Trait (id: 239) + (name 'TCanImplement') + (package (ref: 29)) + (properties + (FM3.Property (id: 240) + (name 'interfaceImplementations') + (class (ref: 239)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 241)) + (type (ref: 242))))) + (FM3.Trait (id: 50) + (name 'TAccessible') + (package (ref: 29)) + (properties + (FM3.Property (id: 83) + (name 'incomingAccesses') + (class (ref: 50)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 82)) + (type (ref: 75))) + (FM3.Property (id: 243) + (name 'numberOfAccessingMethods') + (class (ref: 50)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 244) + (name 'numberOfGlobalAccesses') + (class (ref: 50)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 245) + (name 'accessors') + (class (ref: 50)) + (container false) + (derived true) + (multivalued true) + (type (ref: 81))) + (FM3.Property (id: 246) + (name 'numberOfAccessingClasses') + (class (ref: 50)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 247) + (name 'numberOfLocalAccesses') + (class (ref: 50)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 248) + (name 'numberOfAccesses') + (class (ref: 50)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 249) + (name 'TCompilationUnit') + (package (ref: 29)) + (traits (ref: 99) (ref: 110)) + (properties + (FM3.Property (id: 250) + (name 'compilationUnitOwner') + (class (ref: 249)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 251)) + (type (ref: 252))))) + (FM3.Trait (id: 181) + (name 'TAnnotationType') + (package (ref: 29)) + (properties + (FM3.Property (id: 180) + (name 'instances') + (class (ref: 181)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 179)) + (type (ref: 178))) + (FM3.Property (id: 184) + (name 'annotationTypesContainer') + (class (ref: 181)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 183)) + (type (ref: 182))))) + (FM3.Trait (id: 253) + (name 'TWithAnnotationInstanceAttributes') + (package (ref: 29)) + (properties + (FM3.Property (id: 254) + (name 'attributes') + (class (ref: 253)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 255)) + (type (ref: 256))))) + (FM3.Trait (id: 74) + (name 'TWithTraits') + (package (ref: 29)) + (properties + (FM3.Property (id: 73) + (name 'traits') + (class (ref: 74)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 72)) + (type (ref: 68))))) + (FM3.Trait (id: 257) + (name 'TWithFunctions') + (package (ref: 29)) + (properties + (FM3.Property (id: 258) + (name 'functions') + (class (ref: 257)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 259)) + (type (ref: 260))))) + (FM3.Trait (id: 261) + (name 'THasModifiers') + (package (ref: 29)) + (properties + (FM3.Property (id: 262) + (name 'modifiers') + (class (ref: 261)) + (container false) + (derived false) + (multivalued true) + (type (ref: String))) + (FM3.Property (id: 263) + (name 'isFinal') + (class (ref: 261)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 264) + (name 'isAbstract') + (class (ref: 261)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Trait (id: 265) + (name 'TWithAttributes') + (package (ref: 29)) + (properties + (FM3.Property (id: 266) + (name 'numberOfAttributes') + (class (ref: 265)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 267) + (name 'attributes') + (class (ref: 265)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 268)) + (type (ref: 269))))) + (FM3.Trait (id: 270) + (name 'TWithClasses') + (package (ref: 29)) + (traits (ref: 271)) + (properties + (FM3.Property (id: 272) + (name 'numberOfClasses') + (class (ref: 270)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 260) + (name 'TFunction') + (package (ref: 29)) + (traits (ref: 46) (ref: 81) (ref: 47) (ref: 45) (ref: 123) (ref: 273) (ref: 122) (ref: 274) (ref: 48) (ref: 124)) + (properties + (FM3.Property (id: 259) + (name 'functionOwner') + (class (ref: 260)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 258)) + (type (ref: 257))))) + (FM3.Trait (id: 275) + (name 'TClassMetrics') + (package (ref: 29)) + (properties + (FM3.Property (id: 276) + (name 'numberOfLocallyDefinedMethods') + (class (ref: 275)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 277) + (name 'numberOfMethodsInherited') + (class (ref: 275)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 278) + (name 'numberOfMethodsOverriden') + (class (ref: 275)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 279) + (name 'numberOfMethodsInHierarchy') + (class (ref: 275)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 280) + (name 'totalNumberOfSubclasses') + (class (ref: 275)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 281) + (name 'numberOfAttributesInherited') + (class (ref: 275)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 282) + (name 'TTemplateUser') + (package (ref: 29)) + (properties + (FM3.Property (id: 283) + (name 'template') + (class (ref: 282)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 284)) + (type (ref: 150))))) + (FM3.Trait (id: 271) + (name 'TWithTypes') + (package (ref: 29)) + (properties + (FM3.Property (id: 285) + (name 'types') + (class (ref: 271)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 286)) + (type (ref: 119))))) + (FM3.Trait (id: 287) + (name 'TLCOMMetrics') + (package (ref: 29)) + (properties + (FM3.Property (id: 288) + (name 'lcom3') + (class (ref: 287)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 289) + (name 'lcom2') + (class (ref: 287)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 274) + (name 'TWithParameters') + (package (ref: 29)) + (properties + (FM3.Property (id: 290) + (name 'numberOfParameters') + (class (ref: 274)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 291) + (name 'parameters') + (class (ref: 274)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 292)) + (type (ref: 293))))) + (FM3.Trait (id: 294) + (name 'THasImmediateSource') + (package (ref: 29)) + (traits (ref: 27)) + (properties + (FM3.Property (id: 295) + (name 'source') + (class (ref: 294)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Trait (id: 71) + (name 'TTraitUsage') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 77)) + (properties + (FM3.Property (id: 70) + (name 'trait') + (class (ref: 71)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 69)) + (type (ref: 68))) + (FM3.Property (id: 296) + (name 'user') + (class (ref: 71)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 297)) + (type (ref: 298))))) + (FM3.Trait (id: 45) + (name 'TTypedEntity') + (package (ref: 29)) + (properties + (FM3.Property (id: 299) + (name 'declaredType') + (class (ref: 45)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 300)) + (type (ref: 119))))) + (FM3.Class (id: 301) + (name 'ClassGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 126))) + (FM3.Trait (id: 177) + (name 'TPackage') + (package (ref: 29)) + (traits (ref: 47) (ref: 46) (ref: 48)) + (properties + (FM3.Property (id: 302) + (name 'weightedMethodCount') + (class (ref: 177)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 176) + (name 'childEntities') + (class (ref: 177)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 175)) + (type (ref: 174))))) + (FM3.Trait (id: 256) + (name 'TAnnotationInstanceAttribute') + (package (ref: 29)) + (traits (ref: 48)) + (properties + (FM3.Property (id: 255) + (name 'parentAnnotationInstance') + (class (ref: 256)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 254)) + (type (ref: 253))) + (FM3.Property (id: 303) + (name 'value') + (class (ref: 256)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Trait (id: 304) + (name 'TWithDeclaredExceptions') + (package (ref: 29)) + (properties + (FM3.Property (id: 305) + (name 'declaredExceptions') + (class (ref: 304)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 306)) + (type (ref: 307))))) + (FM3.Trait (id: 95) + (name 'TDereferencedInvocation') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 138) (ref: 77)) + (properties + (FM3.Property (id: 94) + (name 'referencer') + (class (ref: 95)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 93)) + (type (ref: 92))))) + (FM3.Trait (id: 121) + (name 'TWithEnumValues') + (package (ref: 29)) + (properties + (FM3.Property (id: 226) + (name 'enumValues') + (class (ref: 121)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 225)) + (type (ref: 224))))) + (FM3.Trait (id: 215) + (name 'TCaughtException') + (package (ref: 29)) + (properties + (FM3.Property (id: 214) + (name 'definingEntity') + (class (ref: 215)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 213)) + (type (ref: 212))))) + (FM3.Trait (id: 164) + (name 'TWithImplicitVariables') + (package (ref: 29)) + (properties + (FM3.Property (id: 163) + (name 'implicitVariables') + (class (ref: 164)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 162)) + (type (ref: 161))))) + (FM3.Trait (id: 37) + (name 'TInheritance') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 77)) + (properties + (FM3.Property (id: 36) + (name 'subclass') + (class (ref: 37)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 35)) + (type (ref: 34))) + (FM3.Property (id: 40) + (name 'superclass') + (class (ref: 37)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 39)) + (type (ref: 34))))) + (FM3.Trait (id: 308) + (name 'TException') + (package (ref: 29)) + (properties + (FM3.Property (id: 309) + (name 'exceptionClass') + (class (ref: 308)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 310)) + (type (ref: 311))))) + (FM3.Trait (id: 120) + (name 'TReferenceable') + (package (ref: 29)) + (properties + (FM3.Property (id: 236) + (name 'incomingReferences') + (class (ref: 120)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 235)) + (type (ref: 234))))) + (FM3.Class (id: 312) + (name 'FolderGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Trait (id: 313) + (name 'TPreprocessorIfdef') + (package (ref: 29))) + (FM3.Class (id: 314) + (name 'AnnotationTypeGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Trait (id: 315) + (name 'TCanBeAbstract') + (package (ref: 29)) + (properties + (FM3.Property (id: 316) + (name 'isAbstract') + (class (ref: 315)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Trait (id: 99) + (name 'TFile') + (package (ref: 29)) + (traits (ref: 110)) + (properties + (FM3.Property (id: 317) + (name 'numberOfEmptyLinesOfText') + (class (ref: 99)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 98) + (name 'entities') + (class (ref: 99)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 97)) + (type (ref: 96))) + (FM3.Property (id: 318) + (name 'numberOfKiloBytes') + (class (ref: 99)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 319) + (name 'numberOfCharacters') + (class (ref: 99)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 320) + (name 'totalNumberOfLinesOfText') + (class (ref: 99)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 321) + (name 'averageNumberOfCharactersPerLine') + (class (ref: 99)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 322) + (name 'numberOfBytes') + (class (ref: 99)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 323) + (name 'TCohesionCouplingMetrics') + (package (ref: 29)) + (traits (ref: 47) (ref: 177) (ref: 46) (ref: 48)) + (properties + (FM3.Property (id: 324) + (name 'martinCohesion') + (class (ref: 323)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 325) + (name 'abstractness') + (class (ref: 323)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 326) + (name 'instability') + (class (ref: 323)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 327) + (name 'efferentCoupling') + (class (ref: 323)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 328) + (name 'afferentCoupling') + (class (ref: 323)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 329) + (name 'distance') + (class (ref: 323)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 269) + (name 'TAttribute') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) + (properties + (FM3.Property (id: 268) + (name 'parentType') + (class (ref: 269)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 267)) + (type (ref: 265))) + (FM3.Property (id: 330) + (name 'hierarchyNestingLevel') + (class (ref: 269)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 331) + (name 'hasClassScope') + (class (ref: 269)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Class (id: 332) + (name 'NamespaceGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Class (id: 333) + (name 'FamixModel') + (abstract false) + (package (ref: 29)) + (superclass (ref: 334))) + (FM3.Class (id: 335) + (name 'AnnotationInstanceGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Trait (id: 81) + (name 'TWithAccesses') + (package (ref: 29)) + (properties + (FM3.Property (id: 80) + (name 'accesses') + (class (ref: 81)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 79)) + (type (ref: 75))))) + (FM3.Trait (id: 336) + (name 'TAnnotationTypeAttribute') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 269) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) + (properties + (FM3.Property (id: 337) + (name 'annotationAttributeInstances') + (class (ref: 336)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 338)) + (type (ref: 339))))) + (FM3.Trait (id: 252) + (name 'TWithCompilationUnits') + (package (ref: 29)) + (properties + (FM3.Property (id: 251) + (name 'compilationUnit') + (class (ref: 252)) + (container false) + (derived true) + (multivalued false) + (opposite (ref: 250)) + (type (ref: 249))))) + (FM3.Trait (id: 340) + (name 'TImplementable') + (package (ref: 29)) + (properties + (FM3.Property (id: 341) + (name 'implementations') + (class (ref: 340)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 342)) + (type (ref: 242))))) + (FM3.Trait (id: 114) + (name 'TFolder') + (package (ref: 29)) + (traits (ref: 110)) + (properties + (FM3.Property (id: 343) + (name 'numberOfFolders') + (class (ref: 114)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 344) + (name 'numberOfFiles') + (class (ref: 114)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 345) + (name 'totalNumberOfLinesOfText') + (class (ref: 114)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 346) + (name 'numberOfEmptyLinesOfText') + (class (ref: 114)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 113) + (name 'childrenFileSystemEntities') + (class (ref: 114)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 112)) + (type (ref: 110))))) + (FM3.Trait (id: 347) + (name 'TUnknownSourceLanguage') + (package (ref: 29)) + (traits (ref: 188))) + (FM3.Trait (id: 273) + (name 'THasSignature') + (package (ref: 29)) + (properties + (FM3.Property (id: 348) + (name 'signature') + (class (ref: 273)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Trait (id: 168) + (name 'TParameterizedType') + (package (ref: 29)) + (properties + (FM3.Property (id: 167) + (name 'parameterizableClass') + (class (ref: 168)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 166)) + (type (ref: 165))))) + (FM3.Trait (id: 223) + (name 'TComment') + (package (ref: 29)) + (properties + (FM3.Property (id: 222) + (name 'container') + (class (ref: 223)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 221)) + (type (ref: 218))) + (FM3.Property (id: 349) + (name 'content') + (class (ref: 223)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Trait (id: 192) + (name 'TLocalVariable') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) + (properties + (FM3.Property (id: 191) + (name 'parentBehaviouralEntity') + (class (ref: 192)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 190)) + (type (ref: 189))))) + (FM3.Trait (id: 298) + (name 'TTraitUser') + (package (ref: 29)) + (properties + (FM3.Property (id: 297) + (name 'outgoingTraitUsages') + (class (ref: 298)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 296)) + (type (ref: 71))))) + (FM3.Trait (id: 53) + (name 'TWithGlobalVariables') + (package (ref: 29)) + (properties + (FM3.Property (id: 52) + (name 'globalVariables') + (class (ref: 53)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 51)) + (type (ref: 44))))) + (FM3.Trait (id: 350) + (name 'TWithPackages') + (package (ref: 29))) + (FM3.Trait (id: 351) + (name 'THasVisibility') + (package (ref: 29)) + (properties + (FM3.Property (id: 352) + (name 'visibility') + (class (ref: 351)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))) + (FM3.Property (id: 353) + (name 'isProtected') + (class (ref: 351)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 354) + (name 'isPackage') + (class (ref: 351)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 355) + (name 'isPublic') + (class (ref: 351)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 356) + (name 'isPrivate') + (class (ref: 351)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Trait (id: 200) + (name 'TDefinedInModule') + (package (ref: 29)) + (properties + (FM3.Property (id: 199) + (name 'parentModule') + (class (ref: 200)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 198)) + (type (ref: 197))))) + (FM3.Trait (id: 357) + (name 'TUnknownVariable') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50))) + (FM3.Trait (id: 358) + (name 'TParameterType') + (package (ref: 29))) + (FM3.Trait (id: 56) + (name 'TFileAnchor') + (package (ref: 29)) + (properties + (FM3.Property (id: 359) + (name 'correspondingFile') + (class (ref: 56)) + (container false) + (derived false) + (multivalued false) + (type (ref: 99))) + (FM3.Property (id: 360) + (name 'encoding') + (class (ref: 56)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))) + (FM3.Property (id: 361) + (name 'fileName') + (class (ref: 56)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))))) + (FM3.Trait (id: 242) + (name 'TImplementation') + (package (ref: 29)) + (traits (ref: 47) (ref: 76) (ref: 77)) + (properties + (FM3.Property (id: 241) + (name 'implementingClass') + (class (ref: 242)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 240)) + (type (ref: 239))) + (FM3.Property (id: 342) + (name 'interface') + (class (ref: 242)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 341)) + (type (ref: 340))))) + (FM3.Trait (id: 172) + (name 'TWithAnnotationInstances') + (package (ref: 29)) + (properties + (FM3.Property (id: 362) + (name 'numberOfAnnotationInstances') + (class (ref: 172)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 171) + (name 'annotationInstances') + (class (ref: 172)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 170)) + (type (ref: 169))))) + (FM3.Trait (id: 150) + (name 'TTemplate') + (package (ref: 29)) + (properties + (FM3.Property (id: 149) + (name 'templateOwner') + (class (ref: 150)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 148)) + (type (ref: 147))) + (FM3.Property (id: 284) + (name 'templateUsers') + (class (ref: 150)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 283)) + (type (ref: 282))))) + (FM3.Class (id: 363) + (name 'InvocationGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Trait (id: 123) + (name 'TWithReferences') + (package (ref: 29)) + (properties + (FM3.Property (id: 238) + (name 'outgoingReferences') + (class (ref: 123)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 237)) + (type (ref: 234))))) + (FM3.Trait (id: 293) + (name 'TParameter') + (package (ref: 29)) + (traits (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 49) (ref: 50)) + (properties + (FM3.Property (id: 292) + (name 'parentBehaviouralEntity') + (class (ref: 293)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 291)) + (type (ref: 274))))) + (FM3.Trait (id: 60) + (name 'TWithTypeAliases') + (package (ref: 29)) + (properties + (FM3.Property (id: 59) + (name 'typeAliases') + (class (ref: 60)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 58)) + (type (ref: 57))))) + (FM3.Trait (id: 307) + (name 'TDeclaredException') + (package (ref: 29)) + (properties + (FM3.Property (id: 306) + (name 'definingEntity') + (class (ref: 307)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 305)) + (type (ref: 304))))) + (FM3.Trait (id: 311) + (name 'TWithExceptions') + (package (ref: 29)) + (properties + (FM3.Property (id: 310) + (name 'exceptions') + (class (ref: 311)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 309)) + (type (ref: 308))))) + (FM3.Trait (id: 156) + (name 'TMethod') + (package (ref: 29)) + (traits (ref: 189) (ref: 46) (ref: 81) (ref: 364) (ref: 45) (ref: 123) (ref: 47) (ref: 122) (ref: 273) (ref: 164) (ref: 365) (ref: 274) (ref: 143) (ref: 48) (ref: 124)) + (properties + (FM3.Property (id: 155) + (name 'parentType') + (class (ref: 156)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 154)) + (type (ref: 152))) + (FM3.Property (id: 366) + (name 'hasClassScope') + (class (ref: 156)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 367) + (name 'numberOfMessageSends') + (class (ref: 156)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 368) + (name 'TClassWithVisibility') + (package (ref: 29)) + (traits (ref: 152) (ref: 265) (ref: 146) (ref: 46) (ref: 174) (ref: 119) (ref: 34) (ref: 47) (ref: 364) (ref: 369) (ref: 351) (ref: 120) (ref: 218) (ref: 48))) + (FM3.Trait (id: 339) + (name 'TTypedAnnotationInstanceAttribute') + (package (ref: 29)) + (properties + (FM3.Property (id: 338) + (name 'annotationTypeAttribute') + (class (ref: 339)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 337)) + (type (ref: 336))))) + (FM3.Trait (id: 196) + (name 'TThrownException') + (package (ref: 29)) + (properties + (FM3.Property (id: 195) + (name 'definingEntity') + (class (ref: 196)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 194)) + (type (ref: 193))))) + (FM3.Trait (id: 146) + (name 'TInvocationsReceiver') + (package (ref: 29)) + (properties + (FM3.Property (id: 145) + (name 'receivingInvocations') + (class (ref: 146)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 144)) + (type (ref: 138))))) + (FM3.Trait (id: 365) + (name 'TMethodMetrics') + (package (ref: 29)) + (properties + (FM3.Property (id: 370) + (name 'numberOfAnnotationInstances') + (class (ref: 365)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 371) + (name 'hierarchyNestingLevel') + (class (ref: 365)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 372) + (name 'cyclomaticComplexity') + (class (ref: 365)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 373) + (name 'TPrimitiveType') + (package (ref: 29)) + (traits (ref: 119) (ref: 46) (ref: 120) (ref: 47) (ref: 48))) + (FM3.Trait (id: 119) + (name 'TType') + (package (ref: 29)) + (traits (ref: 47) (ref: 120) (ref: 46) (ref: 48)) + (properties + (FM3.Property (id: 300) + (name 'typedEntities') + (class (ref: 119)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 299)) + (type (ref: 45))) + (FM3.Property (id: 286) + (name 'typeContainer') + (class (ref: 119)) + (container true) + (derived false) + (multivalued false) + (opposite (ref: 285)) + (type (ref: 271))))) + (FM3.Class (id: 374) + (name 'FileGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Trait (id: 27) + (name 'TSourceAnchor') + (package (ref: 29)) + (properties + (FM3.Property (id: 207) + (name 'element') + (class (ref: 27)) + (container false) + (derived false) + (multivalued false) + (opposite (ref: 206)) + (type (ref: 47))) + (FM3.Property (id: 375) + (name 'lineCount') + (class (ref: 27)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 376) + (name 'PackageGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127))) + (FM3.Trait (id: 89) + (name 'TWithFileIncludes') + (package (ref: 29)) + (properties + (FM3.Property (id: 91) + (name 'incomingIncludeRelations') + (class (ref: 89)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 90)) + (type (ref: 86))) + (FM3.Property (id: 88) + (name 'outgoingIncludeRelations') + (class (ref: 89)) + (container false) + (derived true) + (multivalued true) + (opposite (ref: 87)) + (type (ref: 86))))) + (FM3.Trait (id: 377) + (name 'TNamespace') + (package (ref: 29)) + (traits (ref: 47) (ref: 364) (ref: 46) (ref: 48))) + (FM3.Trait (id: 378) + (name 'TClassHierarchyNavigation') + (package (ref: 29))) + (FM3.Trait (id: 369) + (name 'TClass') + (package (ref: 29)) + (traits (ref: 152) (ref: 265) (ref: 146) (ref: 46) (ref: 174) (ref: 119) (ref: 34) (ref: 47) (ref: 364) (ref: 120) (ref: 218) (ref: 48)) + (properties + (FM3.Property (id: 379) + (name 'isTestCase') + (class (ref: 369)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 380) + (name 'weightOfAClass') + (class (ref: 369)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 381) + (name 'TPreprocessorDefine') + (package (ref: 29))) + (FM3.Class (id: 382) + (name 'MethodGroup') + (abstract false) + (package (ref: 29)) + (superclass (ref: 127)) + (properties + (FM3.Property (id: 383) + (name 'averageNumberOfLinesOfCode') + (class (ref: 382)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 384) + (name 'averageNumberOfParameters') + (class (ref: 382)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 385) + (name 'averageNumberOfInvocations') + (class (ref: 382)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))))) + (FM3.Package (id: 386) + (name 'Famix-Java-Entities') + (classes + (FM3.Class (id: 387) + (name 'Class') + (abstract false) + (package (ref: 386)) + (superclass (ref: 388)) + (traits (ref: 218) (ref: 34) (ref: 152) (ref: 46) (ref: 311) (ref: 275) (ref: 351) (ref: 115) (ref: 146) (ref: 287) (ref: 174) (ref: 48) (ref: 239) (ref: 120) (ref: 119) (ref: 369) (ref: 389) (ref: 265) (ref: 47) (ref: 216) (ref: 315) (ref: 364)) + (properties + (FM3.Property (id: 390) + (name 'isInterface') + (class (ref: 387)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 391) + (name 'isIgnored') + (class (ref: 387)) + (container false) + (derived true) + (multivalued true) + (type (ref: Boolean))))) + (FM3.Class (id: 392) + (name 'Inheritance') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 47) (ref: 76) (ref: 37) (ref: 77))) + (FM3.Class (id: 394) + (name 'Exception') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 308))) + (FM3.Trait (id: 395) + (name 'TCanBeSynchronized') + (package (ref: 386)) + (properties + (FM3.Property (id: 396) + (name 'isSynchronized') + (class (ref: 395)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Class (id: 397) + (name 'Interface') + (abstract false) + (package (ref: 386)) + (superclass (ref: 388)) + (traits (ref: 152) (ref: 265) (ref: 146) (ref: 340) (ref: 174) (ref: 34) (ref: 351) (ref: 364) (ref: 218) (ref: 115) (ref: 48) (ref: 216))) + (FM3.Class (id: 398) + (name 'GlobalVariable') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 44) (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 146) (ref: 49) (ref: 50))) + (FM3.Class (id: 400) + (name 'FamixJavaModel') + (abstract false) + (package (ref: 386)) + (superclass (ref: 334))) + (FM3.Class (id: 401) + (name 'ParameterType') + (abstract false) + (package (ref: 386)) + (superclass (ref: 388)) + (traits (ref: 358))) + (FM3.Class (id: 402) + (name 'ParameterizableClass') + (abstract false) + (package (ref: 386)) + (superclass (ref: 387)) + (traits (ref: 165)) + (properties + (FM3.Property (id: 403) + (name 'parameters') + (class (ref: 402)) + (container false) + (derived true) + (multivalued true) + (type (ref: 401))))) + (FM3.Trait (id: 404) + (name 'TCanBeTransient') + (package (ref: 386)) + (properties + (FM3.Property (id: 405) + (name 'isTransient') + (class (ref: 404)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Class (id: 406) + (name 'LocalVariable') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 146) (ref: 192) (ref: 46) (ref: 47) (ref: 45) (ref: 218) (ref: 50) (ref: 49) (ref: 48) (ref: 216))) + (FM3.Class (id: 407) + (name 'PrimitiveType') + (abstract false) + (package (ref: 386)) + (superclass (ref: 388)) + (traits (ref: 373) (ref: 119) (ref: 46) (ref: 120) (ref: 47) (ref: 48))) + (FM3.Class (id: 408) + (name 'UnknownSourceLanguage') + (abstract false) + (package (ref: 386)) + (superclass (ref: 409)) + (traits (ref: 347) (ref: 188)) + (properties + (FM3.Property (id: 410) + (name 'name') + (class (ref: 408)) + (container false) + (derived true) + (multivalued false) + (type (ref: String))))) + (FM3.Class (id: 411) + (name 'DeclaredException') + (abstract false) + (package (ref: 386)) + (superclass (ref: 394)) + (traits (ref: 307))) + (FM3.Class (id: 412) + (name 'Parameter') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 49) (ref: 45) (ref: 46) (ref: 50) (ref: 293) (ref: 218) (ref: 48) (ref: 47) (ref: 216))) + (FM3.Class (id: 413) + (name 'Invocation') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 77) (ref: 76) (ref: 47) (ref: 138) (ref: 273))) + (FM3.Class (id: 414) + (name 'Package') + (abstract false) + (package (ref: 386)) + (superclass (ref: 415)) + (traits (ref: 174) (ref: 46) (ref: 177) (ref: 47) (ref: 48) (ref: 53)) + (properties + (FM3.Property (id: 416) + (name 'abstractness') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 417) + (name 'bunchCohesion') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 418) + (name 'distance') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 419) + (name 'afferentCoupling') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 420) + (name 'efferentCoupling') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 421) + (name 'relativeImportanceForSystem') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 422) + (name 'instability') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 423) + (name 'martinCohesion') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 424) + (name 'numberOfClientPackages') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 425) + (name 'numberOfMethods') + (class (ref: 414)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 426) + (name 'SourceAnchor') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 27))) + (FM3.Class (id: 427) + (name 'ParameterizedType') + (abstract false) + (package (ref: 386)) + (superclass (ref: 388)) + (traits (ref: 30) (ref: 34) (ref: 340) (ref: 239) (ref: 168))) + (FM3.Class (id: 393) + (name 'Entity') + (abstract false) + (package (ref: 386)) + (superclass (ref: 3))) + (FM3.Class (id: 428) + (name 'Attribute') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 404) (ref: 146) (ref: 269) (ref: 46) (ref: 351) (ref: 45) (ref: 47) (ref: 218) (ref: 429) (ref: 50) (ref: 48) (ref: 115) (ref: 49) (ref: 216))) + (FM3.Class (id: 430) + (name 'SourceTextAnchor') + (abstract false) + (package (ref: 386)) + (superclass (ref: 426)) + (traits (ref: 294) (ref: 27))) + (FM3.Class (id: 388) + (name 'Type') + (abstract false) + (package (ref: 386)) + (superclass (ref: 415)) + (traits (ref: 119) (ref: 46) (ref: 60) (ref: 152) (ref: 120) (ref: 33) (ref: 47) (ref: 48)) + (properties + (FM3.Property (id: 431) + (name 'isTestCase') + (class (ref: 388)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 432) + (name 'isJUnit4TestCase') + (class (ref: 388)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 433) + (name 'isInnerClass') + (class (ref: 388)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Class (id: 434) + (name 'EnumValue') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 224) (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 218) (ref: 49) (ref: 50))) + (FM3.Class (id: 435) + (name 'AnnotationInstanceAttribute') + (abstract false) + (package (ref: 386)) + (superclass (ref: 436)) + (traits (ref: 339) (ref: 256) (ref: 48))) + (FM3.Trait (id: 429) + (name 'TCanBeVolatile') + (package (ref: 386)) + (properties + (FM3.Property (id: 437) + (name 'isVolatile') + (class (ref: 429)) + (container false) + (derived false) + (multivalued false) + (type (ref: Boolean))))) + (FM3.Class (id: 399) + (name 'NamedEntity') + (abstract false) + (package (ref: 386)) + (superclass (ref: 436)) + (traits (ref: 48) (ref: 46) (ref: 146) (ref: 172))) + (FM3.Class (id: 438) + (name 'Comment') + (abstract false) + (package (ref: 386)) + (superclass (ref: 436)) + (traits (ref: 223))) + (FM3.Class (id: 439) + (name 'CaughtException') + (abstract false) + (package (ref: 386)) + (superclass (ref: 394)) + (traits (ref: 215))) + (FM3.Class (id: 440) + (name 'ParameterizableInterface') + (abstract false) + (package (ref: 386)) + (superclass (ref: 397)) + (traits (ref: 165))) + (FM3.Class (id: 441) + (name 'Folder') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 114) (ref: 110))) + (FM3.Class (id: 442) + (name 'ThrownException') + (abstract false) + (package (ref: 386)) + (superclass (ref: 394)) + (traits (ref: 196))) + (FM3.Trait (id: 443) + (name 'TWithInterfaces') + (package (ref: 386)) + (traits (ref: 271))) + (FM3.Class (id: 444) + (name 'ImplicitVariable') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 161) (ref: 45) (ref: 46) (ref: 47) (ref: 48) (ref: 146) (ref: 49) (ref: 50))) + (FM3.Class (id: 436) + (name 'SourcedEntity') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 47) (ref: 96)) + (properties + (FM3.Property (id: 445) + (name 'numberOfJavaNullChecks') + (class (ref: 436)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 446) + (name 'Enum') + (abstract false) + (package (ref: 386)) + (superclass (ref: 388)) + (traits (ref: 152) (ref: 265) (ref: 46) (ref: 119) (ref: 34) (ref: 351) (ref: 47) (ref: 121) (ref: 118) (ref: 120) (ref: 218) (ref: 48))) + (FM3.Class (id: 409) + (name 'SourceLanguage') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 188)) + (properties + (FM3.Property (id: 447) + (name 'name') + (class (ref: 409)) + (container false) + (derived true) + (multivalued false) + (type (ref: String))))) + (FM3.Class (id: 448) + (name 'IndexedFileAnchor') + (abstract false) + (package (ref: 386)) + (superclass (ref: 426)) + (traits (ref: 56) (ref: 65))) + (FM3.Class (id: 449) + (name 'Method') + (abstract false) + (package (ref: 386)) + (superclass (ref: 415)) + (traits (ref: 189) (ref: 273) (ref: 218) (ref: 46) (ref: 104) (ref: 212) (ref: 274) (ref: 45) (ref: 351) (ref: 164) (ref: 115) (ref: 81) (ref: 156) (ref: 395) (ref: 123) (ref: 193) (ref: 365) (ref: 48) (ref: 143) (ref: 122) (ref: 47) (ref: 216) (ref: 124) (ref: 315) (ref: 304) (ref: 364)) + (properties + (FM3.Property (id: 450) + (name 'isJUnit4Test') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 451) + (name 'isOverriding') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 452) + (name 'numberOfComments') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 453) + (name 'numberOfInvokedMethods') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 454) + (name 'invokedMethods') + (class (ref: 449)) + (container false) + (derived true) + (multivalued true) + (type (ref: 449))) + (FM3.Property (id: 455) + (name 'isImplementing') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 456) + (name 'invokingMethods') + (class (ref: 449)) + (container false) + (derived true) + (multivalued true) + (type (ref: 449))) + (FM3.Property (id: 457) + (name 'clientBehaviours') + (class (ref: 449)) + (container false) + (derived true) + (multivalued true) + (type (ref: 449))) + (FM3.Property (id: 458) + (name 'numberOfConditionals') + (class (ref: 449)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 459) + (name 'isClassInitializer') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 460) + (name 'providerBehaviours') + (class (ref: 449)) + (container false) + (derived true) + (multivalued true) + (type (ref: 449))) + (FM3.Property (id: 461) + (name 'isOverriden') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 462) + (name 'numberOfAccesses') + (class (ref: 449)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 463) + (name 'AnnotationInstance') + (abstract false) + (package (ref: 386)) + (superclass (ref: 436)) + (traits (ref: 169) (ref: 178) (ref: 253) (ref: 48))) + (FM3.Class (id: 464) + (name 'AnnotationTypeAttribute') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 269) (ref: 46) (ref: 47) (ref: 45) (ref: 339) (ref: 218) (ref: 50) (ref: 48) (ref: 49) (ref: 336)) + (properties + (FM3.Property (id: 465) + (name 'parentAnnotationType') + (class (ref: 464)) + (container false) + (derived true) + (multivalued false) + (type (ref: 466))))) + (FM3.Class (id: 467) + (name 'File') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 99) (ref: 110))) + (FM3.Class (id: 466) + (name 'AnnotationType') + (abstract false) + (package (ref: 386)) + (superclass (ref: 388)) + (traits (ref: 174) (ref: 34) (ref: 340) (ref: 351) (ref: 265) (ref: 181) (ref: 218))) + (FM3.Trait (id: 389) + (name 'TClassMetrics') + (package (ref: 386)) + (properties + (FM3.Property (id: 468) + (name 'numberOfProtectedMethods') + (class (ref: 389)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 469) + (name 'numberOfAccessorMethods') + (class (ref: 389)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 470) + (name 'numberOfPrivateMethods') + (class (ref: 389)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 471) + (name 'numberOfConstructorMethods') + (class (ref: 389)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 472) + (name 'numberOfPublicMethods') + (class (ref: 389)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 473) + (name 'Access') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 47) (ref: 75) (ref: 76) (ref: 77))) + (FM3.Class (id: 415) + (name 'ContainerEntity') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 364) (ref: 270) (ref: 182) (ref: 48) (ref: 271) (ref: 443))) + (FM3.Class (id: 474) + (name 'Reference') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 47) (ref: 76) (ref: 234) (ref: 77))) + (FM3.Class (id: 475) + (name 'Implementation') + (abstract false) + (package (ref: 386)) + (superclass (ref: 393)) + (traits (ref: 47) (ref: 76) (ref: 242) (ref: 77))) + (FM3.Class (id: 476) + (name 'UnknownVariable') + (abstract false) + (package (ref: 386)) + (superclass (ref: 399)) + (traits (ref: 45) (ref: 357) (ref: 46) (ref: 47) (ref: 48) (ref: 146) (ref: 49) (ref: 50))))) + (FM3.Package (id: 477) + (name 'FamixReplication') + (classes + (FM3.Class (id: 204) + (name 'Replica') + (abstract false) + (package (ref: 477)) + (superclass (ref: 3))) + (FM3.Class (id: 478) + (name 'ReplicatedFragment') + (abstract false) + (package (ref: 477)) + (superclass (ref: 3))))) + (FM3.Package (id: 479) + (name 'Moose') + (classes + (FM3.Class (id: 480) + (name 'Group') + (abstract false) + (package (ref: 479)) + (superclass (ref: 23))) + (FM3.Class (id: 127) + (name 'SpecializedGroup') + (abstract false) + (package (ref: 479)) + (superclass (ref: 480))) + (FM3.Class (id: 334) + (name 'Model') + (abstract false) + (package (ref: 479)) + (superclass (ref: 23)) + (properties + (FM3.Property (id: 481) + (name 'numberOfMethods') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 482) + (name 'numberOfLinesOfCode') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 483) + (name 'numberOfClassesPerPackage') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 484) + (name 'numberOfLinesOfCodePerClass') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 485) + (name 'numberOfModelClasses') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 486) + (name 'sourceLanguage') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: 188))) + (FM3.Property (id: 487) + (name 'averageCyclomaticComplexity') + (class (ref: 334)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 488) + (name 'numberOfClasses') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 489) + (name 'numberOfLinesOfCodePerPackage') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 490) + (name 'numberOfModelMethods') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 491) + (name 'numberOfClassesPerPackage') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 492) + (name 'numberOfLinesOfCodePerMethod') + (class (ref: 334)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 493) + (name 'PropertyGroup') + (abstract false) + (package (ref: 479)) + (superclass (ref: 480)) + (properties + (FM3.Property (id: 494) + (name 'propertyRatio') + (class (ref: 493)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 495) + (name 'sizeRatio') + (class (ref: 493)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 496) + (name 'propertyTotalOriginal') + (class (ref: 493)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 497) + (name 'propertyTotal') + (class (ref: 493)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 498) + (name 'property') + (class (ref: 493)) + (container false) + (derived false) + (multivalued false) + (type (ref: String))) + (FM3.Property (id: 499) + (name 'sizeOriginal') + (class (ref: 493)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 23) + (name 'AbstractGroup') + (abstract true) + (package (ref: 479)) + (superclass (ref: 500)) + (properties + (FM3.Property (id: 501) + (name 'numberOfPackages') + (class (ref: 23)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 502) + (name 'numberOfAssociations') + (class (ref: 23)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 503) + (name 'numberOfLinesOfCode') + (class (ref: 23)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 504) + (name 'numberOfItems') + (class (ref: 23)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 505) + (name 'numberOfEntities') + (class (ref: 23)) + (container false) + (derived false) + (multivalued false) + (type (ref: Number))))) + (FM3.Class (id: 3) + (name 'Entity') + (abstract true) + (package (ref: 479)) + (superclass (ref: 500)) + (properties + (FM3.Property (id: 506) + (name 'isDead') + (class (ref: 3)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 507) + (name 'isTagged') + (class (ref: 3)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 508) + (name 'numberOfTags') + (class (ref: 3)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 11) + (name 'allTagAssociations') + (class (ref: 3)) + (container false) + (derived false) + (multivalued true) + (opposite (ref: 10)) + (type (ref: 8))))) + (FM3.Class (id: 500) + (name 'Object') + (abstract true) + (package (ref: 479)) + (superclass (ref: Object))))) + (FM3.Package (id: 509) + (name 'Moose-Query') + (classes + (FM3.Trait (id: 48) + (name 'TEntityMetaLevelDependency') + (package (ref: 509)) + (properties + (FM3.Property (id: 510) + (name 'isDead') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Boolean))) + (FM3.Property (id: 511) + (name 'numberOfExternalClients') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 512) + (name 'numberOfInternalProviders') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 513) + (name 'numberOfChildren') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 514) + (name 'numberOfInternalClients') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 515) + (name 'fanIn') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 516) + (name 'numberOfDeadChildren') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 517) + (name 'numberOfExternalProviders') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))) + (FM3.Property (id: 518) + (name 'fanOut') + (class (ref: 48)) + (container false) + (derived true) + (multivalued false) + (type (ref: Number))))) + (FM3.Trait (id: 76) + (name 'TAssociationMetaLevelDependency') + (package (ref: 509))) + (FM3.Trait (id: 364) + (name 'TOODependencyQueries') + (package (ref: 509)) + (traits (ref: 48)))))) \ No newline at end of file diff --git a/lib/src/test/resources/ch/unibe/fame/resources/rpg.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/rpg.fm3.mse index f328bd8..42407f7 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/rpg.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/rpg.fm3.mse @@ -4,7 +4,7 @@ (classes (FM3.Class (id: 1) (name 'Dragon') - (attributes + (properties (FM3.Property (id: 2) (name 'hoard') (type (ref: 3)) @@ -17,7 +17,7 @@ (opposite (ref: 7))))) (FM3.Class (id: 3) (name 'Treasure') - (attributes + (properties (FM3.Property (id: 4) (name 'keeper') (type (ref: 1)) @@ -28,7 +28,7 @@ (opposite (ref: 9))))) (FM3.Class (id: 6) (name 'Hero') - (attributes + (properties (FM3.Property (id: 10) (name 'twin') (type (ref: 6)) From 9036a3b8b9c126268acf292eed32bd4dca9851a6 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 16:17:26 +0200 Subject: [PATCH 05/21] rename of attributes to properties --- lib/src/test/java/ch/akuhn/fame/test/MetaDescriptionTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/MetaDescriptionTest.java b/lib/src/test/java/ch/akuhn/fame/test/MetaDescriptionTest.java index 6d78b48..35cabf4 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/MetaDescriptionTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/MetaDescriptionTest.java @@ -35,8 +35,8 @@ public class MetaDescriptionTest { public void testAllAttributes() { String str = "((FM3.Package (name 'World')" + "(classes " - + " (FM3.Class (id: 1) (name 'Super') (attributes (FM3.Property (name 'foo')))) " - + " (FM3.Class (name 'Sub') (superclass (ref: 1)) (attributes (FM3.Property (name 'foo'))))" + + " (FM3.Class (id: 1) (name 'Super') (properties (FM3.Property (name 'foo')))) " + + " (FM3.Class (name 'Sub') (superclass (ref: 1)) (properties (FM3.Property (name 'foo'))))" + ")))"; Tower t = new Tower(); t.getMetamodel().importMSE(str); From e424deb06ae95cb5719390f1e8c5f3ab327c9873 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 16:22:00 +0200 Subject: [PATCH 06/21] specify build lib --- .github/workflows/gradle-publish.yml | 4 ++-- .github/workflows/on-push.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml index f3c53e5..6cc5d87 100644 --- a/.github/workflows/gradle-publish.yml +++ b/.github/workflows/gradle-publish.yml @@ -26,12 +26,12 @@ jobs: uses: gradle/actions/setup-gradle@v4 # v4.0.0 - name: Build with Gradle - run: ./gradlew build + run: ./gradlew lib:build # The USERNAME and TOKEN need to correspond to the credentials environment variables used in # the publishing section of your build.gradle - name: Publish to GitHub Packages - run: ./gradlew publish + run: ./gradlew lib:publish env: USERNAME: ${{ github.actor }} TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/on-push.yml b/.github/workflows/on-push.yml index 66fa679..e40a69d 100644 --- a/.github/workflows/on-push.yml +++ b/.github/workflows/on-push.yml @@ -20,4 +20,4 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle build - run: ./gradlew build \ No newline at end of file + run: ./gradlew lib:build \ No newline at end of file From 0f143dd8679f0f621a2aa9e6a89d6de54fe4a8f7 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 16:24:39 +0200 Subject: [PATCH 07/21] fix more old mse to comply with this version --- .../test/java/ch/akuhn/fame/test/Famix30.java | 4 +- .../ch/unibe/fame/resources/EMOF.fm3.mse | 18 +- .../ch/unibe/fame/resources/FAMIX22.fm3.mse | 136 +- .../ch/unibe/fame/resources/FAMIX22.mse.mse | 134 +- .../ch/unibe/fame/resources/FAMIX30.fm3.mse | 1621 ++++++++++++++++- .../ch/unibe/fame/resources/FM3.fm3.mse | 8 +- .../ch/unibe/fame/resources/MSE.mse.mse | 8 +- .../ch/unibe/fame/resources/lib.fm3.mse | 6 +- 8 files changed, 1777 insertions(+), 158 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/Famix30.java b/lib/src/test/java/ch/akuhn/fame/test/Famix30.java index c584e8b..cb41ba8 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/Famix30.java +++ b/lib/src/test/java/ch/akuhn/fame/test/Famix30.java @@ -44,7 +44,7 @@ public void asFM3() { @Test public void checkConstraints() { - InputSource input = InputSource.fromResource("ch/unibe/fame/resources//FAMIX30.fm3.mse"); + InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX30.fm3.mse"); Tower t = new Tower(); t.getMetamodel().importMSE(input); t.getMetamodel().checkConstraints().printOn(System.out); @@ -52,7 +52,7 @@ public void checkConstraints() { @Test public void testImporter() { - InputSource input = InputSource.fromResource("ch/unibe/fame/resources//FAMIX30.fm3.mse"); + InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX30.fm3.mse"); Tower t = new Tower(); t.getMetamodel().importMSE(input); Repository m2 = t.getMetamodel(); diff --git a/lib/src/test/resources/ch/unibe/fame/resources/EMOF.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/EMOF.fm3.mse index a327424..6c92227 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/EMOF.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/EMOF.fm3.mse @@ -6,7 +6,7 @@ (name 'Type') (abstract true) (superclass (ref: 25)) - (attributes + (properties (FM3.Property (id: 29) (name 'package') (opposite (ref: 41)) @@ -15,7 +15,7 @@ (name 'NamedElement') (abstract true) (superclass (ref: 2)) - (attributes + (properties (FM3.Property (id: 6) (name 'fullQualifiedName') (derived true) @@ -27,7 +27,7 @@ (name 'Element') (abstract true) (superclass (ref: Object)) - (attributes + (properties (FM3.Property (id: 24) (name 'ownedElements') (derived true) @@ -46,7 +46,7 @@ (FM3.Class (id: 31) (name 'PrimitiveType') (superclass (ref: 1)) - (attributes + (properties (FM3.Property (id: 21) (name 'decodeExpression') (type (ref: String))) @@ -60,7 +60,7 @@ (FM3.Class (id: 19) (name 'Class') (superclass (ref: 1)) - (attributes + (properties (FM3.Property (id: 27) (name 'ownedOperation') (multivalued true) @@ -82,7 +82,7 @@ (name 'TypedElement') (abstract true) (superclass (ref: 25)) - (attributes + (properties (FM3.Property (id: 26) (name 'upper') (type (ref: Number))) @@ -101,7 +101,7 @@ (FM3.Class (id: 9) (name 'Package') (superclass (ref: 25)) - (attributes + (properties (FM3.Property (id: 23) (name 'nestingPackage') (opposite (ref: 39)) @@ -119,7 +119,7 @@ (FM3.Class (id: 11) (name 'Operation') (superclass (ref: 32)) - (attributes + (properties (FM3.Property (id: 7) (name 'class') (opposite (ref: 27)) @@ -127,7 +127,7 @@ (FM3.Class (id: 36) (name 'Property') (superclass (ref: 32)) - (attributes + (properties (FM3.Property (id: 12) (name 'default') (type (ref: Object))) diff --git a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.fm3.mse index fa12c6a..4a5364a 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.fm3.mse @@ -5,7 +5,7 @@ (FM3.Class (id: 332) (name 'Alias') (superclass (ref: 206)) - (attributes + (properties (FM3.Property (id: 233) (name 'timestamp') (type (ref: Number))) @@ -37,7 +37,7 @@ (FM3.Class (id: 518) (name 'TraceEntityAssociation') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 135) (name 'aRel') (type (ref: Number))) @@ -68,7 +68,7 @@ (FM3.Class (id: 382) (name 'Activation') (superclass (ref: 243)) - (attributes + (properties (FM3.Property (id: 390) (name 'argument') (derived true) @@ -98,7 +98,7 @@ (FM3.Class (id: 528) (name 'TraceClassAssociation') (superclass (ref: 518)) - (attributes + (properties (FM3.Property (id: 202) (name 'Dedication') (type (ref: Number))) @@ -123,7 +123,7 @@ (FM3.Class (id: 206) (name 'Reference') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 453) (name 'NORM') (type (ref: Number))) @@ -136,14 +136,14 @@ (FM3.Class (id: 207) (name 'Return') (superclass (ref: 243)) - (attributes + (properties (FM3.Property (id: 51) (name 'instanceId') (type (ref: String))))) (FM3.Class (id: 308) (name 'TracePackageAssociation') (superclass (ref: 518)) - (attributes + (properties (FM3.Property (id: 430) (name 'tracepackageassociation') (derived true) @@ -152,7 +152,7 @@ (FM3.Class (id: 243) (name 'AbstractEvent') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 459) (name 'child') (derived true) @@ -175,7 +175,7 @@ (FM3.Class (id: 87) (name 'HistoricalAlias') (superclass (ref: 332)) - (attributes + (properties (FM3.Property (id: 121) (name 'predecessor') (opposite (ref: 245)) @@ -191,7 +191,7 @@ (FM3.Class (id: 246) (name 'Trace') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 5) (name 'NOMIf') (type (ref: Number))) @@ -255,7 +255,7 @@ (FM3.Class (id: 18) (name 'Instance') (superclass (ref: 206)) - (attributes + (properties (FM3.Property (id: 452) (name 'alias') (derived true) @@ -278,7 +278,7 @@ (FM3.Class (id: 294) (name 'TraceMethodAssociation') (superclass (ref: 518)) - (attributes + (properties (FM3.Property (id: 265) (name 'NORM') (type (ref: Number))) @@ -305,7 +305,7 @@ (FM3.Class (id: 403) (name 'Developer') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 66) (name 'NOPl') (type (ref: Number))) @@ -330,14 +330,14 @@ (FM3.Class (id: 286) (name 'SourceCodeLine') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 34) (name 'AGE') (type (ref: Number))))) (FM3.Class (id: 145) (name 'Multiplication') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 212) (name 'TSPAN') (type (ref: Number))) @@ -368,7 +368,7 @@ (FM3.Class (id: 111) (name 'Detector') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 443) (name 'AGE') (type (ref: Number))))) @@ -396,7 +396,7 @@ (FM3.Class (id: 412) (name 'FileHistory') (superclass (ref: 455)) - (attributes + (properties (FM3.Property (id: 63) (name 'SoRL') (type (ref: Number))) @@ -430,7 +430,7 @@ (FM3.Class (id: 204) (name 'FileVersion') (superclass (ref: 455)) - (attributes + (properties (FM3.Property (id: 376) (name 'REV') (type (ref: Number))) @@ -472,7 +472,7 @@ (FM3.Class (id: 42) (name 'FileHistoryGroup') (superclass (ref: 380)) - (attributes + (properties (FM3.Property (id: 93) (name 'distribution') (type (ref: Number))) @@ -482,7 +482,7 @@ (FM3.Class (id: 142) (name 'Commit') (superclass (ref: 455)) - (attributes + (properties (FM3.Property (id: 146) (name 'startTime') (type (ref: String))) @@ -522,7 +522,7 @@ (FM3.Class (id: 439) (name 'CvsFileVersion') (superclass (ref: 49)) - (attributes + (properties (FM3.Property (id: 162) (name 'history') (opposite (ref: 264)) @@ -557,7 +557,7 @@ (FM3.Class (id: 275) (name 'CvsFileHistory') (superclass (ref: 49)) - (attributes + (properties (FM3.Property (id: 264) (name 'version') (multivalued true) @@ -569,7 +569,7 @@ (FM3.Class (id: 64) (name 'Project') (superclass (ref: 455)) - (attributes + (properties (FM3.Property (id: 231) (name 'author') (multivalued true) @@ -614,7 +614,7 @@ (FM3.Class (id: 130) (name 'CvsDirectory') (superclass (ref: 493)) - (attributes + (properties (FM3.Property (id: 340) (name 'entry') (multivalued true) @@ -622,7 +622,7 @@ (FM3.Class (id: 534) (name 'CvsFileChange') (superclass (ref: 365)) - (attributes + (properties (FM3.Property (id: 503) (name 'removedLinesSize') (type (ref: Number))) @@ -635,7 +635,7 @@ (FM3.Class (id: 493) (name 'CvsEntry') (superclass (ref: 365)) - (attributes + (properties (FM3.Property (id: 255) (name 'path') (type (ref: String))) @@ -651,7 +651,7 @@ (FM3.Class (id: 538) (name 'Author') (superclass (ref: 455)) - (attributes + (properties (FM3.Property (id: 219) (name 'NOF') (type (ref: Number))) @@ -715,7 +715,7 @@ (FM3.Class (id: 199) (name 'ClassGroup') (superclass (ref: 297)) - (attributes + (properties (FM3.Property (id: 478) (name 'A_NOA') (type (ref: Number))) @@ -734,7 +734,7 @@ (FM3.Class (id: 200) (name 'NamespaceHistory') (superclass (ref: 208)) - (attributes + (properties (FM3.Property (id: 69) (name 'E_NOCls') (type (ref: Number))))) @@ -762,7 +762,7 @@ (FM3.Class (id: 208) (name 'AbstractHistory') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 46) (name 'AGE') (type (ref: Number))))) @@ -775,7 +775,7 @@ (FM3.Class (id: 14) (name 'AbstractEntity') (superclass (ref: 13)) - (attributes + (properties (FM3.Property (id: 467) (name 'mooseModel') (derived true) @@ -784,7 +784,7 @@ (FM3.Class (id: 86) (name 'ClassVersion') (superclass (ref: 324)) - (attributes + (properties (FM3.Property (id: 486) (name 'VA_NOM') (type (ref: Number))) @@ -809,7 +809,7 @@ (FM3.Class (id: 513) (name 'AbstractGroup') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 181) (name 'numberOfItems') (type (ref: Number))) @@ -823,7 +823,7 @@ (FM3.Class (id: 216) (name 'ClassHistory') (superclass (ref: 208)) - (attributes + (properties (FM3.Property (id: 67) (name 'Last_NOM') (type (ref: Number))) @@ -887,7 +887,7 @@ (FM3.Class (id: 24) (name 'MethodVersion') (superclass (ref: 324)) - (attributes + (properties (FM3.Property (id: 442) (name 'VE_NOS') (type (ref: Number))) @@ -903,7 +903,7 @@ (FM3.Class (id: 527) (name 'MethodGroup') (superclass (ref: 297)) - (attributes + (properties (FM3.Property (id: 221) (name 'A_NOP') (type (ref: Number))) @@ -931,7 +931,7 @@ (FM3.Class (id: 424) (name 'NamespaceVersion') (superclass (ref: 324)) - (attributes + (properties (FM3.Property (id: 490) (name 'VA_NOM') (type (ref: Number))) @@ -944,7 +944,7 @@ (FM3.Class (id: 492) (name 'Model') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 343) (name 'sourceLanguage') (type (ref: String))) @@ -977,7 +977,7 @@ (FM3.Class (id: 201) (name 'Invocation') (superclass (ref: 369)) - (attributes + (properties (FM3.Property (id: 422) (name 'receivingVariable') (type (ref: 386))) @@ -999,7 +999,7 @@ (FM3.Class (id: 136) (name 'Function') (superclass (ref: 420)) - (attributes + (properties (FM3.Property (id: 531) (name 'belongsTo') (opposite (ref: 7)) @@ -1007,7 +1007,7 @@ (FM3.Class (id: 431) (name 'Folder') (superclass (ref: 411)) - (attributes + (properties (FM3.Property (id: 388) (name 'folder') (derived true) @@ -1030,7 +1030,7 @@ (FM3.Class (id: 464) (name 'Class') (superclass (ref: 9)) - (attributes + (properties (FM3.Property (id: 105) (name 'PubM') (type (ref: Number))) @@ -1192,7 +1192,7 @@ (FM3.Class (id: 81) (name 'Package') (superclass (ref: 387)) - (attributes + (properties (FM3.Property (id: 523) (name 'TLOC') (type (ref: Number))) @@ -1216,14 +1216,14 @@ (FM3.Class (id: 9) (name 'AbstractScopable') (superclass (ref: 387)) - (attributes + (properties (FM3.Property (id: 444) (name 'belongsTo') (type (ref: 487))))) (FM3.Class (id: 177) (name 'JSPAccess') (superclass (ref: 369)) - (attributes + (properties (FM3.Property (id: 368) (name 'accesses') (type (ref: 387))) @@ -1233,7 +1233,7 @@ (FM3.Class (id: 469) (name 'JSPInvocation') (superclass (ref: 369)) - (attributes + (properties (FM3.Property (id: 500) (name 'candidate') (multivalued true) @@ -1252,7 +1252,7 @@ (FM3.Class (id: 209) (name 'Method') (superclass (ref: 420)) - (attributes + (properties (FM3.Property (id: 15) (name 'NIJSPI') (type (ref: Number))) @@ -1334,7 +1334,7 @@ (FM3.Class (id: 311) (name 'Attribute') (superclass (ref: 90)) - (attributes + (properties (FM3.Property (id: 496) (name 'accessControlQualifier') (type (ref: String))) @@ -1366,7 +1366,7 @@ (FM3.Class (id: 405) (name 'InheritanceDefinition') (superclass (ref: 369)) - (attributes + (properties (FM3.Property (id: 168) (name 'accessControlQualifier') (type (ref: String))) @@ -1384,7 +1384,7 @@ (FM3.Class (id: 248) (name 'JSPPage') (superclass (ref: 387)) - (attributes + (properties (FM3.Property (id: 211) (name 'filedIn') (type (ref: String))) @@ -1400,7 +1400,7 @@ (FM3.Class (id: 483) (name 'AbstractArgument') (superclass (ref: 386)) - (attributes + (properties (FM3.Property (id: 407) (name 'position') (type (ref: Number))) @@ -1410,7 +1410,7 @@ (FM3.Class (id: 90) (name 'AbstractStructuralEntity') (superclass (ref: 387)) - (attributes + (properties (FM3.Property (id: 501) (name 'hostedAlias') (derived true) @@ -1428,7 +1428,7 @@ (FM3.Class (id: 190) (name 'Literal') (superclass (ref: 386)) - (attributes + (properties (FM3.Property (id: 107) (name 'content') (type (ref: String))) @@ -1448,7 +1448,7 @@ (FM3.Class (id: 377) (name 'AbstractLocalEntity') (superclass (ref: 90)) - (attributes + (properties (FM3.Property (id: 530) (name 'belongsTo') (type (ref: 420))))) @@ -1458,7 +1458,7 @@ (FM3.Class (id: 350) (name 'JSPAttribute') (superclass (ref: 387)) - (attributes + (properties (FM3.Property (id: 218) (name 'declaredType') (type (ref: 464))) @@ -1471,7 +1471,7 @@ (FM3.Class (id: 487) (name 'Namespace') (superclass (ref: 9)) - (attributes + (properties (FM3.Property (id: 484) (name 'NOA') (type (ref: Number))) @@ -1535,14 +1535,14 @@ (FM3.Class (id: 57) (name 'UnknownVariable') (superclass (ref: 90)) - (attributes + (properties (FM3.Property (id: 417) (name 'usedInContext') (type (ref: 420))))) (FM3.Class (id: 420) (name 'AbstractBehaviouralEntity') (superclass (ref: 387)) - (attributes + (properties (FM3.Property (id: 192) (name 'outgoingInvocation') (derived true) @@ -1624,7 +1624,7 @@ (FM3.Class (id: 100) (name 'Comment') (superclass (ref: 386)) - (attributes + (properties (FM3.Property (id: 325) (name 'content') (type (ref: String))) @@ -1634,7 +1634,7 @@ (FM3.Class (id: 62) (name 'Include') (superclass (ref: 369)) - (attributes + (properties (FM3.Property (id: 373) (name 'includingFile') (type (ref: 28))) @@ -1644,7 +1644,7 @@ (FM3.Class (id: 28) (name 'File') (superclass (ref: 411)) - (attributes + (properties (FM3.Property (id: 529) (name 'TLOT') (type (ref: Number))) @@ -1691,21 +1691,21 @@ (FM3.Class (id: 288) (name 'FormalParameter') (superclass (ref: 377)) - (attributes + (properties (FM3.Property (id: 39) (name 'position') (type (ref: Number))))) (FM3.Class (id: 326) (name 'GlobalVariable') (superclass (ref: 90)) - (attributes + (properties (FM3.Property (id: 348) (name 'belongsTo') (type (ref: 487))))) (FM3.Class (id: 532) (name 'ModelRoot') (superclass (ref: 14)) - (attributes + (properties (FM3.Property (id: 507) (name 'stub') (type (ref: Boolean))))) @@ -1715,21 +1715,21 @@ (FM3.Class (id: 491) (name 'ImplicitVariable') (superclass (ref: 90)) - (attributes + (properties (FM3.Property (id: 429) (name 'belongsTo') (type (ref: 464))))) (FM3.Class (id: 386) (name 'AbstractObject') (superclass (ref: 532)) - (attributes + (properties (FM3.Property (id: 289) (name 'sourceAnchor') (type (ref: String))))) (FM3.Class (id: 171) (name 'Access') (superclass (ref: 369)) - (attributes + (properties (FM3.Property (id: 241) (name 'accesses') (opposite (ref: 178)) @@ -1744,7 +1744,7 @@ (FM3.Class (id: 387) (name 'AbstractNamedEntity') (superclass (ref: 386)) - (attributes + (properties (FM3.Property (id: 526) (name 'NL') (type (ref: Number))) diff --git a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.mse.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.mse.mse index a1204cc..6559bb1 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.mse.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX22.mse.mse @@ -11,7 +11,7 @@ (MSE.Class (id: 479) (name 'ClassVersion') (superclass (idref: 248)) - (attributes + (properties (MSE.Property (id: 155) (name 'VA_NOM') (type (ref: Number))) @@ -27,7 +27,7 @@ (MSE.Class (id: 219) (name 'MethodVersion') (superclass (idref: 248)) - (attributes + (properties (MSE.Property (id: 3) (name 'VE_NOS') (type (ref: Number))) @@ -54,7 +54,7 @@ (MSE.Class (id: 445) (name 'AbstractGroup') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 245) (name 'numberOfItems') (type (ref: Number))) @@ -67,7 +67,7 @@ (MSE.Class (id: 288) (name 'Model') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 136) (name 'sourceLanguage') (type (ref: String))) @@ -94,14 +94,14 @@ (MSE.Class (id: 289) (name 'NamespaceHistory') (superclass (idref: 502)) - (attributes + (properties (MSE.Property (id: 520) (name 'E_NOCls') (type (ref: Number))))) (MSE.Class (id: 187) (name 'NamespaceVersion') (superclass (idref: 248)) - (attributes + (properties (MSE.Property (id: 358) (name 'VA_NOM') (type (ref: Number))) @@ -126,7 +126,7 @@ (MSE.Class (id: 458) (name 'ClassGroup') (superclass (idref: 50)) - (attributes + (properties (MSE.Property (id: 154) (name 'A_NOA') (type (ref: Number))) @@ -160,7 +160,7 @@ (MSE.Class (id: 522) (name 'ClassHistory') (superclass (idref: 502)) - (attributes + (properties (MSE.Property (id: 18) (name 'Last_NOM') (type (ref: Number))) @@ -215,7 +215,7 @@ (MSE.Class (id: 468) (name 'AbstractEntity') (superclass (idref: 149)) - (attributes + (properties (MSE.Property (id: 393) (name 'mooseModel') (opposite (idref: 488)) @@ -232,14 +232,14 @@ (MSE.Class (id: 502) (name 'AbstractHistory') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 326) (name 'AGE') (type (ref: Number))))) (MSE.Class (id: 212) (name 'MethodGroup') (superclass (idref: 50)) - (attributes + (properties (MSE.Property (id: 222) (name 'A_NOP') (type (ref: Number))) @@ -279,7 +279,7 @@ (MSE.Class (id: 180) (name 'AbstractEvent') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 317) (name 'child') (opposite (idref: 234)) @@ -303,14 +303,14 @@ (MSE.Class (id: 181) (name 'Return') (superclass (idref: 180)) - (attributes + (properties (MSE.Property (id: 292) (name 'instanceId') (type (ref: String))))) (MSE.Class (id: 168) (name 'Alias') (superclass (idref: 451)) - (attributes + (properties (MSE.Property (id: 440) (name 'timestamp') (type (ref: Number))) @@ -337,7 +337,7 @@ (MSE.Class (id: 499) (name 'TraceMethodAssociation') (superclass (idref: 371)) - (attributes + (properties (MSE.Property (id: 339) (name 'NORM') (type (ref: Number))) @@ -359,7 +359,7 @@ (MSE.Class (id: 127) (name 'Trace') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 430) (name 'NOMIf') (type (ref: Number))) @@ -421,7 +421,7 @@ (MSE.Class (id: 206) (name 'TraceClassAssociation') (superclass (idref: 371)) - (attributes + (properties (MSE.Property (id: 77) (name 'Dedication') (type (ref: Number))) @@ -449,14 +449,14 @@ (MSE.Class (id: 27) (name 'TracePackageAssociation') (superclass (idref: 371)) - (attributes + (properties (MSE.Property (id: 5) (name 'tracepackageassociation') (type (idref: 27))))) (MSE.Class (id: 371) (name 'TraceEntityAssociation') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 304) (name 'aRel') (type (ref: Number))) @@ -472,7 +472,7 @@ (MSE.Class (id: 432) (name 'HistoricalAlias') (superclass (idref: 168)) - (attributes + (properties (MSE.Property (id: 148) (name 'predecessor') (opposite (idref: 56)) @@ -484,7 +484,7 @@ (MSE.Class (id: 451) (name 'Reference') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 404) (name 'NORM') (type (ref: Number))) @@ -498,7 +498,7 @@ (MSE.Class (id: 246) (name 'Instance') (superclass (idref: 451)) - (attributes + (properties (MSE.Property (id: 176) (name 'alias') (opposite (idref: 274)) @@ -519,7 +519,7 @@ (MSE.Class (id: 337) (name 'Activation') (superclass (idref: 180)) - (attributes + (properties (MSE.Property (id: 6) (name 'argument') (opposite (idref: 473)) @@ -554,7 +554,7 @@ (MSE.Class (id: 251) (name 'Attribute') (superclass (idref: 30)) - (attributes + (properties (MSE.Property (id: 315) (name 'accessControlQualifier') (type (ref: String))) @@ -586,7 +586,7 @@ (MSE.Class (id: 147) (name 'Access') (superclass (idref: 182)) - (attributes + (properties (MSE.Property (id: 334) (name 'accesses') (type (idref: 421))) @@ -600,7 +600,7 @@ (MSE.Class (id: 146) (name 'AbstractNamedEntity') (superclass (idref: 421)) - (attributes + (properties (MSE.Property (id: 123) (name 'NL') (type (ref: Number))) @@ -613,7 +613,7 @@ (MSE.Class (id: 383) (name 'InheritanceDefinition') (superclass (idref: 182)) - (attributes + (properties (MSE.Property (id: 151) (name 'accessControlQualifier') (type (ref: String))) @@ -631,14 +631,14 @@ (MSE.Class (id: 105) (name 'AbstractScopable') (superclass (idref: 146)) - (attributes + (properties (MSE.Property (id: 398) (name 'belongsTo') (type (idref: 395))))) (MSE.Class (id: 256) (name 'Invocation') (superclass (idref: 182)) - (attributes + (properties (MSE.Property (id: 434) (name 'receivingVariable') (type (idref: 421))) @@ -659,7 +659,7 @@ (MSE.Class (id: 443) (name 'Class') (superclass (idref: 105)) - (attributes + (properties (MSE.Property (id: 356) (name 'PubM') (type (ref: Number))) @@ -812,7 +812,7 @@ (MSE.Class (id: 411) (name 'FormalParameter') (superclass (idref: 276)) - (attributes + (properties (MSE.Property (id: 441) (name 'position') (type (ref: Number))))) @@ -822,21 +822,21 @@ (MSE.Class (id: 447) (name 'GlobalVariable') (superclass (idref: 30)) - (attributes + (properties (MSE.Property (id: 343) (name 'belongsTo') (type (idref: 395))))) (MSE.Class (id: 290) (name 'UnknownVariable') (superclass (idref: 30)) - (attributes + (properties (MSE.Property (id: 47) (name 'usedInContext') (type (idref: 90))))) (MSE.Class (id: 10) (name 'Include') (superclass (idref: 182)) - (attributes + (properties (MSE.Property (id: 457) (name 'includingFile') (type (idref: 500))) @@ -846,7 +846,7 @@ (MSE.Class (id: 194) (name 'Literal') (superclass (idref: 421)) - (attributes + (properties (MSE.Property (id: 229) (name 'content') (type (ref: String))) @@ -862,14 +862,14 @@ (MSE.Class (id: 197) (name 'ModelRoot') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 365) (name 'stub') (type (ref: Boolean))))) (MSE.Class (id: 157) (name 'Comment') (superclass (idref: 421)) - (attributes + (properties (MSE.Property (id: 384) (name 'content') (type (ref: String))) @@ -879,14 +879,14 @@ (MSE.Class (id: 421) (name 'AbstractObject') (superclass (idref: 197)) - (attributes + (properties (MSE.Property (id: 57) (name 'sourceAnchor') (type (ref: String))))) (MSE.Class (id: 20) (name 'JSPInvocation') (superclass (idref: 182)) - (attributes + (properties (MSE.Property (id: 8) (name 'candidate') (opposite (idref: 385)) @@ -901,7 +901,7 @@ (MSE.Class (id: 266) (name 'Package') (superclass (idref: 146)) - (attributes + (properties (MSE.Property (id: 493) (name 'TLOC') (type (ref: Number))) @@ -921,7 +921,7 @@ (MSE.Class (id: 466) (name 'Folder') (superclass (idref: 501)) - (attributes + (properties (MSE.Property (id: 255) (name 'folder') (opposite (idref: 345)) @@ -940,7 +940,7 @@ (MSE.Class (id: 205) (name 'JSPPage') (superclass (idref: 146)) - (attributes + (properties (MSE.Property (id: 471) (name 'filedIn') (type (ref: String))) @@ -954,7 +954,7 @@ (MSE.Class (id: 361) (name 'AbstractArgument') (superclass (idref: 421)) - (attributes + (properties (MSE.Property (id: 41) (name 'position') (type (ref: Number))) @@ -964,7 +964,7 @@ (MSE.Class (id: 169) (name 'JSPAttribute') (superclass (idref: 146)) - (attributes + (properties (MSE.Property (id: 374) (name 'declaredType') (type (idref: 443))) @@ -980,7 +980,7 @@ (MSE.Class (id: 90) (name 'AbstractBehaviouralEntity') (superclass (idref: 146)) - (attributes + (properties (MSE.Property (id: 68) (name 'outgoingInvocation') (opposite (idref: 217)) @@ -1051,7 +1051,7 @@ (MSE.Class (id: 500) (name 'File') (superclass (idref: 501)) - (attributes + (properties (MSE.Property (id: 417) (name 'TLOT') (type (ref: Number))) @@ -1098,7 +1098,7 @@ (MSE.Class (id: 395) (name 'Namespace') (superclass (idref: 105)) - (attributes + (properties (MSE.Property (id: 130) (name 'NOA') (type (ref: Number))) @@ -1154,7 +1154,7 @@ (MSE.Class (id: 366) (name 'ImplicitVariable') (superclass (idref: 30)) - (attributes + (properties (MSE.Property (id: 88) (name 'belongsTo') (type (idref: 443))))) @@ -1164,7 +1164,7 @@ (MSE.Class (id: 28) (name 'Function') (superclass (idref: 90)) - (attributes + (properties (MSE.Property (id: 455) (name 'belongsTo') (opposite (idref: 438)) @@ -1172,7 +1172,7 @@ (MSE.Class (id: 30) (name 'AbstractStructuralEntity') (superclass (idref: 146)) - (attributes + (properties (MSE.Property (id: 76) (name 'hostedAlias') (type (idref: 168))) @@ -1192,7 +1192,7 @@ (MSE.Class (id: 310) (name 'Method') (superclass (idref: 90)) - (attributes + (properties (MSE.Property (id: 109) (name 'NIJSPI') (type (ref: Number))) @@ -1264,7 +1264,7 @@ (MSE.Class (id: 276) (name 'AbstractLocalEntity') (superclass (idref: 30)) - (attributes + (properties (MSE.Property (id: 415) (name 'belongsTo') (type (idref: 90))))))) @@ -1306,14 +1306,14 @@ (MSE.Class (id: 74) (name 'Detector') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 224) (name 'AGE') (type (ref: Number))))) (MSE.Class (id: 104) (name 'Multiplication') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 186) (name 'TSPAN') (type (ref: Number))) @@ -1341,7 +1341,7 @@ (MSE.Class (id: 87) (name 'Developer') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 279) (name 'NOPl') (type (ref: Number))) @@ -1372,7 +1372,7 @@ (MSE.Class (id: 476) (name 'SourceCodeLine') (superclass (idref: 468)) - (attributes + (properties (MSE.Property (id: 122) (name 'AGE') (type (ref: Number))))))) @@ -1385,14 +1385,14 @@ (MSE.Class (id: 218) (name 'CvsDirectory') (superclass (idref: 518)) - (attributes + (properties (MSE.Property (id: 342) (name 'entry') (type (idref: 518))))) (MSE.Class (id: 203) (name 'Author') (superclass (idref: 9)) - (attributes + (properties (MSE.Property (id: 492) (name 'NOF') (type (ref: Number))) @@ -1446,7 +1446,7 @@ (MSE.Class (id: 481) (name 'FileVersion') (superclass (idref: 9)) - (attributes + (properties (MSE.Property (id: 273) (name 'REV') (type (ref: Number))) @@ -1490,7 +1490,7 @@ (MSE.Class (id: 331) (name 'FileHistoryGroup') (superclass (idref: 265)) - (attributes + (properties (MSE.Property (id: 172) (name 'distribution') (type (ref: Number))) @@ -1500,7 +1500,7 @@ (MSE.Class (id: 59) (name 'FileHistory') (superclass (idref: 9)) - (attributes + (properties (MSE.Property (id: 367) (name 'SoRL') (type (ref: Number))) @@ -1533,7 +1533,7 @@ (MSE.Class (id: 111) (name 'CvsFileVersion') (superclass (idref: 179)) - (attributes + (properties (MSE.Property (id: 174) (name 'timestamp') (type (idref: 388))) @@ -1568,7 +1568,7 @@ (MSE.Class (id: 431) (name 'Project') (superclass (idref: 9)) - (attributes + (properties (MSE.Property (id: 521) (name 'Name') (type (ref: Number))) @@ -1608,7 +1608,7 @@ (MSE.Class (id: 529) (name 'CvsFileHistory') (superclass (idref: 179)) - (attributes + (properties (MSE.Property (id: 55) (name 'version') (opposite (idref: 143)) @@ -1616,7 +1616,7 @@ (MSE.Class (id: 322) (name 'Commit') (superclass (idref: 9)) - (attributes + (properties (MSE.Property (id: 437) (name 'startTime') (type (ref: Object))) @@ -1664,7 +1664,7 @@ (MSE.Class (id: 299) (name 'CvsFileChange') (superclass (idref: 495)) - (attributes + (properties (MSE.Property (id: 11) (name 'removedLinesSize') (type (ref: Number))) @@ -1674,7 +1674,7 @@ (MSE.Class (id: 518) (name 'CvsEntry') (superclass (idref: 495)) - (attributes + (properties (MSE.Property (id: 511) (name 'path') (type (ref: String))) diff --git a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse index 849fc87..8e54a46 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse @@ -1 +1,1620 @@ -( (FM3.Package (id: 1) (name 'FILE') (classes (FM3.Class (id: 2) (name 'File') (package (ref: 1)) (superclass (ref: 3)) (attributes (FM3.Property (id: 4) (name 'numberOfExternalClones') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 5) (name 'averageNumberOfCharactersPerLine') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 6) (name 'numberOfExternalDuplications') (class (ref: 2)) (derived true) (type (ref: Number))) (FM3.Property (id: 7) (name 'totalNumberOfLinesOfText') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 8) (name 'numberOfInternalMultiplications') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 9) (name 'numberOfDuplicatedFiles') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 10) (name 'numberOfBytes') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 11) (name 'numberOfKiloBytes') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 12) (name 'numberOfEmptyLinesOfText') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 13) (name 'numberOfInternalDuplications') (class (ref: 2)) (derived true) (type (ref: Number))) (FM3.Property (id: 14) (name 'numberOfLinesOfText') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 15) (name 'numberOfInternalClones') (class (ref: 2)) (type (ref: Number))) (FM3.Property (id: 16) (name 'numberOfCharacters') (class (ref: 2)) (type (ref: Number))))) (FM3.Class (id: 3) (name 'AbstractFile') (package (ref: 1)) (superclass (ref: 17)) (attributes (FM3.Property (id: 18) (name 'name') (class (ref: 3)) (type (ref: String))))) (FM3.Class (id: 19) (name 'Folder') (package (ref: 1)) (superclass (ref: 3)) (attributes (FM3.Property (id: 20) (name 'numberOfFolders') (class (ref: 19)) (type (ref: Number))) (FM3.Property (id: 21) (name 'numberOfFiles') (class (ref: 19)) (type (ref: Number))) (FM3.Property (id: 22) (name 'totalNumberOfLinesOfText') (class (ref: 19)) (type (ref: Number))) (FM3.Property (id: 23) (name 'numberOfLinesOfText') (class (ref: 19)) (type (ref: Number))) (FM3.Property (id: 24) (name 'numberOfEmptyLinesOfText') (class (ref: 19)) (type (ref: Number))))))) (FM3.Package (id: 25) (name 'Java') (extensions (ref: 26) (ref: 27) (ref: 28) (ref: 29))) (FM3.Package (id: 30) (name 'FAMIX') (classes (FM3.Class (id: 31) (name 'CaughtException') (package (ref: 30)) (superclass (ref: 32)) (attributes (FM3.Property (id: 33) (name 'definingMethod') (class (ref: 31)) (opposite (ref: 28)) (type (ref: 34))))) (FM3.Class (id: 17) (name 'Entity') (package (ref: 30)) (superclass (ref: Object))) (FM3.Class (id: 35) (name 'AbstractFileAnchor') (package (ref: 30)) (superclass (ref: 36)) (attributes (FM3.Property (id: 37) (name 'fileName') (class (ref: 35)) (type (ref: String))))) (FM3.Class (id: 38) (name 'SourceTextAnchor') (package (ref: 30)) (superclass (ref: 36)) (attributes (FM3.Property (id: 39) (name 'source') (class (ref: 38)) (type (ref: String))))) (FM3.Class (id: 40) (name 'NamedEntity') (package (ref: 30)) (superclass (ref: 41)) (attributes (FM3.Property (id: 42) (name 'modifiers') (class (ref: 40)) (multivalued true) (type (ref: String))) (FM3.Property (id: 43) (name 'nameLength') (class (ref: 40)) (derived true) (type (ref: Number))) (FM3.Property (id: 44) (name 'isPublic') (class (ref: 40)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 45) (name 'receivingInvocations') (class (ref: 40)) (derived true) (multivalued true) (opposite (ref: 46)) (type (ref: 47))) (FM3.Property (id: 48) (name 'isStub') (class (ref: 40)) (type (ref: Boolean))) (FM3.Property (id: 49) (name 'name') (class (ref: 40)) (type (ref: String))) (FM3.Property (id: 50) (name 'isFinal') (class (ref: 40)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 51) (name 'isPackage') (class (ref: 40)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 52) (name 'isPrivate') (class (ref: 40)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 53) (name 'annotationInstances') (class (ref: 40)) (derived true) (multivalued true) (opposite (ref: 54)) (type (ref: 55))) (FM3.Property (id: 56) (name 'isAbstract') (class (ref: 40)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 57) (name 'parentPackage') (class (ref: 40)) (opposite (ref: 58)) (type (ref: 59))) (FM3.Property (id: 60) (name 'isProtected') (class (ref: 40)) (derived true) (type (ref: Boolean))))) (FM3.Class (id: 36) (name 'SourceAnchor') (package (ref: 30)) (superclass (ref: 17)) (attributes (FM3.Property (id: 61) (name 'element') (class (ref: 36)) (opposite (ref: 62)) (type (ref: 41))))) (FM3.Class (id: 63) (name 'CSourceLanguage') (package (ref: 30)) (superclass (ref: 64))) (FM3.Class (id: 55) (name 'AnnotationInstance') (package (ref: 30)) (superclass (ref: 17)) (attributes (FM3.Property (id: 65) (name 'attributes') (class (ref: 55)) (derived true) (multivalued true) (opposite (ref: 66)) (type (ref: 67))) (FM3.Property (id: 54) (name 'annotatedEntity') (class (ref: 55)) (opposite (ref: 53)) (type (ref: 40))) (FM3.Property (id: 68) (name 'annotationType') (class (ref: 55)) (opposite (ref: 69)) (type (ref: 70))))) (FM3.Class (id: 71) (name 'MultipleFileAnchor') (package (ref: 30)) (superclass (ref: 36)) (attributes (FM3.Property (id: 72) (name 'allFiles') (class (ref: 71)) (multivalued true) (type (ref: 73))))) (FM3.Class (id: 74) (name 'Association') (package (ref: 30)) (superclass (ref: 41)) (attributes (FM3.Property (id: 75) (name 'to') (class (ref: 74)) (derived true) (type (ref: 40))) (FM3.Property (id: 76) (name 'from') (class (ref: 74)) (derived true) (type (ref: 40))) (FM3.Property (id: 77) (name 'next') (class (ref: 74)) (derived true) (opposite (ref: 78)) (type (ref: 74))) (FM3.Property (id: 78) (name 'previous') (class (ref: 74)) (opposite (ref: 77)) (type (ref: 74))))) (FM3.Class (id: 79) (name 'GlobalVariable') (package (ref: 30)) (superclass (ref: 80)) (attributes (FM3.Property (id: 81) (name 'parentScope') (class (ref: 79)) (opposite (ref: 82)) (type (ref: 83))) (FM3.Property (id: 84) (name 'parentModule') (class (ref: 79)) (type (ref: 85))))) (FM3.Class (id: 86) (name 'Reference') (package (ref: 30)) (superclass (ref: 74)) (attributes (FM3.Property (id: 87) (name 'source') (class (ref: 86)) (opposite (ref: 88)) (type (ref: 89))) (FM3.Property (id: 90) (name 'target') (class (ref: 86)) (opposite (ref: 91)) (type (ref: 92))))) (FM3.Class (id: 93) (name 'Function') (package (ref: 30)) (superclass (ref: 89)) (attributes (FM3.Property (id: 94) (name 'container') (class (ref: 93)) (opposite (ref: 95)) (type (ref: 96))) (FM3.Property (id: 97) (name 'parentModule') (class (ref: 93)) (type (ref: 85))))) (FM3.Class (id: 47) (name 'Invocation') (package (ref: 30)) (superclass (ref: 74)) (attributes (FM3.Property (id: 98) (name 'receiverSourceCode') (class (ref: 47)) (type (ref: String))) (FM3.Property (id: 99) (name 'sender') (class (ref: 47)) (opposite (ref: 100)) (type (ref: 89))) (FM3.Property (id: 46) (name 'receiver') (class (ref: 47)) (opposite (ref: 45)) (type (ref: 40))) (FM3.Property (id: 101) (name 'signature') (class (ref: 47)) (type (ref: String))) (FM3.Property (id: 102) (name 'candidates') (class (ref: 47)) (multivalued true) (opposite (ref: 103)) (type (ref: 89))))) (FM3.Class (id: 104) (name 'ParameterizableClass') (package (ref: 30)) (superclass (ref: 105)) (attributes (FM3.Property (id: 106) (name 'parameterizedTypes') (class (ref: 104)) (derived true) (multivalued true) (opposite (ref: 107)) (type (ref: 108))) (FM3.Property (id: 109) (name 'parameters') (class (ref: 104)) (derived true) (multivalued true) (type (ref: 110))))) (FM3.Class (id: 32) (name 'Exception') (package (ref: 30)) (superclass (ref: 17)) (attributes (FM3.Property (id: 111) (name 'exceptionClass') (class (ref: 32)) (type (ref: 105))))) (FM3.Class (id: 112) (name 'Enum') (package (ref: 30)) (superclass (ref: 92)) (attributes (FM3.Property (id: 113) (name 'values') (class (ref: 112)) (derived true) (multivalued true) (opposite (ref: 114)) (type (ref: 115))))) (FM3.Class (id: 59) (name 'Package') (package (ref: 30)) (superclass (ref: 83)) (attributes (FM3.Property (id: 116) (name 'relativeImportanceForSystem') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 117) (name 'weightedMethodCount') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 118) (name 'numberOfLinesOfCode') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 119) (name 'afferentCoupling') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 120) (name 'numberOfClasses') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 121) (name 'instability') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 122) (name 'abstractness') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 123) (name 'numberOfMethods') (class (ref: 59)) (type (ref: Number))) (FM3.Property (id: 124) (name 'providerTypes') (class (ref: 59)) (derived true) (multivalued true) (type (ref: 92))) (FM3.Property (id: 125) (name 'numberOfClientPackages') (class (ref: 59)) (type (ref: Number))) (FM3.Property (id: 126) (name 'distance') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 58) (name 'childNamedEntities') (class (ref: 59)) (derived true) (multivalued true) (opposite (ref: 57)) (type (ref: 40))) (FM3.Property (id: 127) (name 'bunchCohesion') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 128) (name 'efferentCoupling') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 129) (name 'martinCohesion') (class (ref: 59)) (derived true) (type (ref: Number))) (FM3.Property (id: 130) (name 'clientTypes') (class (ref: 59)) (derived true) (multivalued true) (type (ref: 92))))) (FM3.Class (id: 131) (name 'SmalltalkSourceLanguage') (package (ref: 30)) (superclass (ref: 64))) (FM3.Class (id: 132) (name 'PrimitiveType') (package (ref: 30)) (superclass (ref: 92))) (FM3.Class (id: 133) (name 'IndexedFileAnchor') (package (ref: 30)) (superclass (ref: 35)) (attributes (FM3.Property (id: 134) (name 'startPos') (class (ref: 133)) (type (ref: Number))) (FM3.Property (id: 135) (name 'endPos') (class (ref: 133)) (type (ref: Number))))) (FM3.Class (id: 136) (name 'Comment') (package (ref: 30)) (superclass (ref: 41)) (attributes (FM3.Property (id: 137) (name 'content') (class (ref: 136)) (type (ref: String))) (FM3.Property (id: 138) (name 'container') (class (ref: 136)) (opposite (ref: 139)) (type (ref: 41))))) (FM3.Class (id: 140) (name 'Namespace') (package (ref: 30)) (superclass (ref: 83)) (attributes (FM3.Property (id: 141) (name 'instability') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 142) (name 'numberOfMethods') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 143) (name 'afferentCoupling') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 144) (name 'efferentCoupling') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 145) (name 'bunchCohesion') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 146) (name 'distance') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 147) (name 'martinCohesion') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 148) (name 'numberOfClasses') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 149) (name 'numberOfNonInterfacesClasses') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 150) (name 'abstractness') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 151) (name 'clientTypes') (class (ref: 140)) (derived true) (multivalued true) (type (ref: 92))) (FM3.Property (id: 152) (name 'numberOfLinesOfCode') (class (ref: 140)) (derived true) (type (ref: Number))) (FM3.Property (id: 153) (name 'providerTypes') (class (ref: 140)) (derived true) (multivalued true) (type (ref: 92))) (FM3.Property (id: 154) (name 'numberOfAttributes') (class (ref: 140)) (type (ref: Number))))) (FM3.Class (id: 155) (name 'DeclaredException') (package (ref: 30)) (superclass (ref: 32)) (attributes (FM3.Property (id: 156) (name 'definingMethod') (class (ref: 155)) (opposite (ref: 29)) (type (ref: 34))))) (FM3.Class (id: 157) (name 'TypeAlias') (package (ref: 30)) (superclass (ref: 92)) (attributes (FM3.Property (id: 158) (name 'aliasedType') (class (ref: 157)) (opposite (ref: 159)) (type (ref: 92))))) (FM3.Class (id: 160) (name 'Parameter') (package (ref: 30)) (superclass (ref: 80)) (attributes (FM3.Property (id: 161) (name 'parentBehaviouralEntity') (class (ref: 160)) (opposite (ref: 162)) (type (ref: 89))))) (FM3.Class (id: 80) (name 'StructuralEntity') (package (ref: 30)) (superclass (ref: 163)) (attributes (FM3.Property (id: 164) (name 'accessors') (class (ref: 80)) (derived true) (multivalued true) (type (ref: 89))) (FM3.Property (id: 165) (name 'incomingAccesses') (class (ref: 80)) (derived true) (multivalued true) (opposite (ref: 166)) (type (ref: 167))) (FM3.Property (id: 168) (name 'dereferencedInvocations') (class (ref: 80)) (derived true) (multivalued true) (opposite (ref: 169)) (type (ref: 170))) (FM3.Property (id: 171) (name 'declaredType') (class (ref: 80)) (opposite (ref: 172)) (type (ref: 92))))) (FM3.Class (id: 167) (name 'Access') (package (ref: 30)) (superclass (ref: 74)) (attributes (FM3.Property (id: 173) (name 'isReadWriteUnknown') (class (ref: 167)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 174) (name 'isRead') (class (ref: 167)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 175) (name 'isWrite') (class (ref: 167)) (type (ref: Boolean))) (FM3.Property (id: 176) (name 'accessor') (class (ref: 167)) (opposite (ref: 177)) (type (ref: 89))) (FM3.Property (id: 166) (name 'variable') (class (ref: 167)) (opposite (ref: 165)) (type (ref: 80))))) (FM3.Class (id: 178) (name 'CompilationUnit') (package (ref: 30)) (superclass (ref: 2)) (attributes (FM3.Property (id: 179) (name 'module') (class (ref: 178)) (opposite (ref: 180)) (type (ref: 85))))) (FM3.Class (id: 92) (name 'Type') (package (ref: 30)) (superclass (ref: 96)) (attributes (FM3.Property (id: 172) (name 'structuresWithDeclaredType') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 171)) (type (ref: 80))) (FM3.Property (id: 91) (name 'incomingReferences') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 90)) (type (ref: 86))) (FM3.Property (id: 159) (name 'typeAliases') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 158)) (type (ref: 157))) (FM3.Property (id: 181) (name 'numberOfAttributesInherited') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 182) (name 'numberOfAccessesToForeignData') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 183) (name 'attributes') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 184)) (type (ref: 185))) (FM3.Property (id: 186) (name 'numberOfDirectSubclasses') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 187) (name 'numberOfMethodsOverriden') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 188) (name 'fanOut') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 189) (name 'numberOfParents') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 190) (name 'isInnerClass') (class (ref: 92)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 191) (name 'weightOfAClass') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 192) (name 'numberOfPrivateMethods') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 193) (name 'numberOfMethodsAdded') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 194) (name 'weightedMethodCount') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 195) (name 'tightClassCohesion') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 196) (name 'numberOfPrivateAttributes') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 197) (name 'numberOfAnnotationInstances') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 198) (name 'numberOfLinesOfCode') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 199) (name 'numberOfAttributes') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 200) (name 'numberOfAbstractMethods') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 201) (name 'behavioursWithDeclaredType') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 202)) (type (ref: 89))) (FM3.Property (id: 203) (name 'fanIn') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 204) (name 'superInheritances') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 205)) (type (ref: 206))) (FM3.Property (id: 207) (name 'numberOfMethodProtocols') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 208) (name 'isJUnit4TestCase') (class (ref: 92)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 209) (name 'numberOfProtectedMethods') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 210) (name 'numberOfPublicMethods') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 211) (name 'numberOfComments') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 212) (name 'container') (class (ref: 92)) (opposite (ref: 213)) (type (ref: 96))) (FM3.Property (id: 214) (name 'numberOfMethodsInHierarchy') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 215) (name 'argumentsInParameterizedTypes') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 216)) (type (ref: 108))) (FM3.Property (id: 217) (name 'numberOfMethodsInherited') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 218) (name 'isTestCase') (class (ref: 92)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 219) (name 'numberOfConstructorMethods') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 220) (name 'numberOfProtectedAttributes') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 221) (name 'subInheritances') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 222)) (type (ref: 206))) (FM3.Property (id: 223) (name 'numberOfMessageSends') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 224) (name 'subclassHierarchyDepth') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 225) (name 'numberOfRevealedAttributes') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 226) (name 'isAbstract') (class (ref: 92)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 227) (name 'numberOfChildren') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 228) (name 'numberOfStatements') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 229) (name 'totalNumberOfChildren') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 230) (name 'providerTypes') (class (ref: 92)) (derived true) (multivalued true) (type (ref: 92))) (FM3.Property (id: 231) (name 'numberOfMethods') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 232) (name 'numberOfDuplicatedLinesOfCodeInternally') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 233) (name 'hierarchyNestingLevel') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 234) (name 'numberOfPublicAttributes') (class (ref: 92)) (derived true) (type (ref: Number))) (FM3.Property (id: 235) (name 'clientTypes') (class (ref: 92)) (derived true) (multivalued true) (type (ref: 92))) (FM3.Property (id: 236) (name 'methods') (class (ref: 92)) (derived true) (multivalued true) (opposite (ref: 237)) (type (ref: 34))) (FM3.Property (id: 238) (name 'numberOfAccessorMethods') (class (ref: 92)) (derived true) (type (ref: Number))))) (FM3.Class (id: 185) (name 'Attribute') (package (ref: 30)) (superclass (ref: 80)) (attributes (FM3.Property (id: 184) (name 'parentType') (class (ref: 185)) (opposite (ref: 183)) (type (ref: 92))) (FM3.Property (id: 239) (name 'numberOfAccesses') (class (ref: 185)) (derived true) (type (ref: Number))) (FM3.Property (id: 240) (name 'numberOfLocalAccesses') (class (ref: 185)) (derived true) (type (ref: Number))) (FM3.Property (id: 241) (name 'hierarchyNestingLevel') (class (ref: 185)) (derived true) (type (ref: Number))) (FM3.Property (id: 242) (name 'numberOfGlobalAccesses') (class (ref: 185)) (derived true) (type (ref: Number))) (FM3.Property (id: 243) (name 'numberOfAccessingClasses') (class (ref: 185)) (derived true) (type (ref: Number))) (FM3.Property (id: 244) (name 'hasClassScope') (class (ref: 185)) (type (ref: Boolean))) (FM3.Property (id: 245) (name 'numberOfAccessingMethods') (class (ref: 185)) (derived true) (type (ref: Number))))) (FM3.Class (id: 115) (name 'EnumValue') (package (ref: 30)) (superclass (ref: 80)) (attributes (FM3.Property (id: 114) (name 'parentEnum') (class (ref: 115)) (opposite (ref: 113)) (type (ref: 112))))) (FM3.Class (id: 246) (name 'ImplicitVariable') (package (ref: 30)) (superclass (ref: 80)) (attributes (FM3.Property (id: 247) (name 'parentBehaviouralEntity') (class (ref: 246)) (opposite (ref: 248)) (type (ref: 89))))) (FM3.Class (id: 96) (name 'ContainerEntity') (package (ref: 30)) (superclass (ref: 40)) (attributes (FM3.Property (id: 26) (name 'definedAnnotationTypes') (class (ref: 96)) (derived true) (multivalued true) (opposite (ref: 249)) (package (ref: 25)) (type (ref: 70))) (FM3.Property (id: 213) (name 'types') (class (ref: 96)) (derived true) (multivalued true) (opposite (ref: 212)) (type (ref: 92))) (FM3.Property (id: 95) (name 'functions') (class (ref: 96)) (derived true) (multivalued true) (opposite (ref: 94)) (type (ref: 93))))) (FM3.Class (id: 250) (name 'UnknownVariable') (package (ref: 30)) (superclass (ref: 80))) (FM3.Class (id: 251) (name 'ThrownException') (package (ref: 30)) (superclass (ref: 32)) (attributes (FM3.Property (id: 252) (name 'definingMethod') (class (ref: 251)) (opposite (ref: 27)) (type (ref: 34))))) (FM3.Class (id: 70) (name 'AnnotationType') (package (ref: 30)) (superclass (ref: 92)) (attributes (FM3.Property (id: 69) (name 'instances') (class (ref: 70)) (derived true) (multivalued true) (opposite (ref: 68)) (type (ref: 55))) (FM3.Property (id: 249) (name 'container') (class (ref: 70)) (opposite (ref: 26)) (type (ref: 96))))) (FM3.Class (id: 253) (name 'Include') (package (ref: 30)) (superclass (ref: 74)) (attributes (FM3.Property (id: 254) (name 'target') (class (ref: 253)) (opposite (ref: 255)) (type (ref: 256))) (FM3.Property (id: 257) (name 'source') (class (ref: 253)) (opposite (ref: 258)) (type (ref: 256))))) (FM3.Class (id: 41) (name 'SourcedEntity') (package (ref: 30)) (superclass (ref: 17)) (attributes (FM3.Property (id: 259) (name 'numberOfLinesOfCodeWithMoreThanOneCharacter') (class (ref: 41)) (derived true) (type (ref: Number))) (FM3.Property (id: 260) (name 'numberOfJavaNullChecks') (class (ref: 41)) (derived true) (type (ref: Number))) (FM3.Property (id: 139) (name 'comments') (class (ref: 41)) (derived true) (multivalued true) (opposite (ref: 138)) (type (ref: 136))) (FM3.Property (id: 62) (name 'sourceAnchor') (class (ref: 41)) (opposite (ref: 61)) (type (ref: 36))) (FM3.Property (id: 261) (name 'declaredSourceLanguage') (class (ref: 41)) (opposite (ref: 262)) (type (ref: 64))))) (FM3.Class (id: 67) (name 'AnnotationInstanceAttribute') (package (ref: 30)) (superclass (ref: 17)) (attributes (FM3.Property (id: 263) (name 'annotationTypeAttribute') (class (ref: 67)) (opposite (ref: 264)) (type (ref: 265))) (FM3.Property (id: 266) (name 'value') (class (ref: 67)) (type (ref: String))) (FM3.Property (id: 66) (name 'parentAnnotationInstance') (class (ref: 67)) (opposite (ref: 65)) (type (ref: 55))))) (FM3.Class (id: 267) (name 'SmalltalkMonticelloSourceLanguage') (package (ref: 30)) (superclass (ref: 64))) (FM3.Class (id: 268) (name 'LocalVariable') (package (ref: 30)) (superclass (ref: 80)) (attributes (FM3.Property (id: 269) (name 'parentBehaviouralEntity') (class (ref: 268)) (opposite (ref: 270)) (type (ref: 89))))) (FM3.Class (id: 271) (name 'UnknownSourceLanguage') (package (ref: 30)) (superclass (ref: 64))) (FM3.Class (id: 34) (name 'Method') (package (ref: 30)) (superclass (ref: 89)) (attributes (FM3.Property (id: 272) (name 'providerTypes') (class (ref: 34)) (derived true) (multivalued true) (type (ref: 92))) (FM3.Property (id: 27) (name 'thrownExceptions') (class (ref: 34)) (derived true) (multivalued true) (opposite (ref: 252)) (package (ref: 25)) (type (ref: 251))) (FM3.Property (id: 273) (name 'timeStamp') (class (ref: 34)) (type (ref: String))) (FM3.Property (id: 274) (name 'kind') (class (ref: 34)) (type (ref: String))) (FM3.Property (id: 275) (name 'category') (class (ref: 34)) (type (ref: String))) (FM3.Property (id: 276) (name 'isInternalImplementation') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 277) (name 'isConstructor') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 237) (name 'parentType') (class (ref: 34)) (opposite (ref: 236)) (type (ref: 92))) (FM3.Property (id: 278) (name 'isJUnit4Test') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 279) (name 'isGetter') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 280) (name 'numberOfAnnotationInstances') (class (ref: 34)) (derived true) (type (ref: Number))) (FM3.Property (id: 281) (name 'hierarchyNestingLevel') (class (ref: 34)) (derived true) (type (ref: Number))) (FM3.Property (id: 282) (name 'isOverriden') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 283) (name 'invokedMethods') (class (ref: 34)) (derived true) (multivalued true) (type (ref: 34))) (FM3.Property (id: 284) (name 'isSetter') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 285) (name 'hasClassScope') (class (ref: 34)) (type (ref: Boolean))) (FM3.Property (id: 286) (name 'isConstant') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 29) (name 'declaredExceptions') (class (ref: 34)) (derived true) (multivalued true) (opposite (ref: 156)) (package (ref: 25)) (type (ref: 155))) (FM3.Property (id: 287) (name 'numberOfInvokedMethods') (class (ref: 34)) (derived true) (type (ref: Number))) (FM3.Property (id: 288) (name 'isOverriding') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 289) (name 'isImplementing') (class (ref: 34)) (derived true) (type (ref: Boolean))) (FM3.Property (id: 28) (name 'caughtExceptions') (class (ref: 34)) (derived true) (multivalued true) (opposite (ref: 33)) (package (ref: 25)) (type (ref: 31))) (FM3.Property (id: 290) (name 'invokingMethods') (class (ref: 34)) (derived true) (multivalued true) (type (ref: 34))) (FM3.Property (id: 291) (name 'clientTypes') (class (ref: 34)) (derived true) (multivalued true) (type (ref: 92))))) (FM3.Class (id: 110) (name 'ParameterType') (package (ref: 30)) (superclass (ref: 92))) (FM3.Class (id: 265) (name 'AnnotationTypeAttribute') (package (ref: 30)) (superclass (ref: 185)) (attributes (FM3.Property (id: 264) (name 'annotationAttributeInstances') (class (ref: 265)) (derived true) (multivalued true) (opposite (ref: 263)) (type (ref: 67))) (FM3.Property (id: 292) (name 'parentAnnotationType') (class (ref: 265)) (derived true) (type (ref: 70))))) (FM3.Class (id: 73) (name 'FileAnchor') (package (ref: 30)) (superclass (ref: 35)) (attributes (FM3.Property (id: 293) (name 'startColumn') (class (ref: 73)) (type (ref: Number))) (FM3.Property (id: 294) (name 'startLine') (class (ref: 73)) (type (ref: Number))) (FM3.Property (id: 295) (name 'endColumn') (class (ref: 73)) (type (ref: Number))) (FM3.Property (id: 296) (name 'endLine') (class (ref: 73)) (type (ref: Number))))) (FM3.Class (id: 297) (name 'Header') (package (ref: 30)) (superclass (ref: 2))) (FM3.Class (id: 105) (name 'Class') (package (ref: 30)) (superclass (ref: 92)) (attributes (FM3.Property (id: 298) (name 'numberOfInternalDuplications') (class (ref: 105)) (derived true) (type (ref: Number))) (FM3.Property (id: 299) (name 'numberOfExternalDuplications') (class (ref: 105)) (derived true) (type (ref: Number))) (FM3.Property (id: 300) (name 'isIgnored') (class (ref: 105)) (derived true) (multivalued true) (type (ref: Boolean))) (FM3.Property (id: 301) (name 'lcom3') (class (ref: 105)) (derived true) (type (ref: Number))) (FM3.Property (id: 302) (name 'lcom2') (class (ref: 105)) (derived true) (type (ref: Number))) (FM3.Property (id: 303) (name 'isInterface') (class (ref: 105)) (type (ref: Boolean))))) (FM3.Class (id: 89) (name 'BehaviouralEntity') (package (ref: 30)) (superclass (ref: 96)) (attributes (FM3.Property (id: 177) (name 'accesses') (class (ref: 89)) (derived true) (multivalued true) (opposite (ref: 176)) (type (ref: 167))) (FM3.Property (id: 162) (name 'parameters') (class (ref: 89)) (derived true) (multivalued true) (opposite (ref: 161)) (type (ref: 160))) (FM3.Property (id: 103) (name 'incomingInvocations') (class (ref: 89)) (derived true) (multivalued true) (opposite (ref: 102)) (type (ref: 47))) (FM3.Property (id: 88) (name 'outgoingReferences') (class (ref: 89)) (derived true) (multivalued true) (opposite (ref: 87)) (type (ref: 86))) (FM3.Property (id: 100) (name 'outgoingInvocations') (class (ref: 89)) (derived true) (multivalued true) (opposite (ref: 99)) (type (ref: 47))) (FM3.Property (id: 304) (name 'providerBehaviours') (class (ref: 89)) (derived true) (multivalued true) (type (ref: 89))) (FM3.Property (id: 305) (name 'numberOfLinesOfCode') (class (ref: 89)) (type (ref: Number))) (FM3.Property (id: 306) (name 'numberOfParameters') (class (ref: 89)) (type (ref: Number))) (FM3.Property (id: 202) (name 'declaredType') (class (ref: 89)) (opposite (ref: 201)) (type (ref: 92))) (FM3.Property (id: 307) (name 'cyclomaticComplexity') (class (ref: 89)) (type (ref: Number))) (FM3.Property (id: 308) (name 'signature') (class (ref: 89)) (type (ref: String))) (FM3.Property (id: 309) (name 'numberOfComments') (class (ref: 89)) (type (ref: Number))) (FM3.Property (id: 248) (name 'implicitVariables') (class (ref: 89)) (derived true) (multivalued true) (opposite (ref: 247)) (type (ref: 246))) (FM3.Property (id: 310) (name 'clientBehaviours') (class (ref: 89)) (derived true) (multivalued true) (type (ref: 89))) (FM3.Property (id: 270) (name 'localVariables') (class (ref: 89)) (derived true) (multivalued true) (opposite (ref: 269)) (type (ref: 268))) (FM3.Property (id: 311) (name 'numberOfOutgoingInvocations') (class (ref: 89)) (derived true) (type (ref: Number))) (FM3.Property (id: 312) (name 'numberOfMessageSends') (class (ref: 89)) (derived true) (type (ref: Number))) (FM3.Property (id: 313) (name 'numberOfAccesses') (class (ref: 89)) (derived true) (type (ref: Number))) (FM3.Property (id: 314) (name 'numberOfStatements') (class (ref: 89)) (type (ref: Number))) (FM3.Property (id: 315) (name 'numberOfConditionals') (class (ref: 89)) (type (ref: Number))))) (FM3.Class (id: 170) (name 'DereferencedInvocation') (package (ref: 30)) (superclass (ref: 47)) (attributes (FM3.Property (id: 169) (name 'referencer') (class (ref: 170)) (opposite (ref: 168)) (type (ref: 80))))) (FM3.Class (id: 316) (name 'CustomSourceLanguage') (package (ref: 30)) (superclass (ref: 64)) (attributes (FM3.Property (id: 317) (name 'name') (class (ref: 316)) (type (ref: String))))) (FM3.Class (id: 83) (name 'ScopingEntity') (package (ref: 30)) (superclass (ref: 96)) (attributes (FM3.Property (id: 318) (name 'childScopes') (class (ref: 83)) (derived true) (multivalued true) (opposite (ref: 319)) (type (ref: 83))) (FM3.Property (id: 82) (name 'globalVariables') (class (ref: 83)) (derived true) (multivalued true) (opposite (ref: 81)) (type (ref: 79))) (FM3.Property (id: 319) (name 'parentScope') (class (ref: 83)) (opposite (ref: 318)) (type (ref: 83))))) (FM3.Class (id: 108) (name 'ParameterizedType') (package (ref: 30)) (superclass (ref: 92)) (attributes (FM3.Property (id: 107) (name 'parameterizableClass') (class (ref: 108)) (opposite (ref: 106)) (type (ref: 104))) (FM3.Property (id: 216) (name 'arguments') (class (ref: 108)) (multivalued true) (opposite (ref: 215)) (type (ref: 92))))) (FM3.Class (id: 320) (name 'PharoAnchor') (package (ref: 30)) (superclass (ref: 36))) (FM3.Class (id: 64) (name 'SourceLanguage') (package (ref: 30)) (superclass (ref: 17)) (attributes (FM3.Property (id: 321) (name 'name') (class (ref: 64)) (derived true) (type (ref: String))) (FM3.Property (id: 262) (name 'sourcedEntities') (class (ref: 64)) (derived true) (multivalued true) (opposite (ref: 261)) (type (ref: 41))))) (FM3.Class (id: 322) (name 'JavaSourceLanguage') (package (ref: 30)) (superclass (ref: 64))) (FM3.Class (id: 206) (name 'Inheritance') (package (ref: 30)) (superclass (ref: 74)) (attributes (FM3.Property (id: 222) (name 'superclass') (class (ref: 206)) (opposite (ref: 221)) (type (ref: 92))) (FM3.Property (id: 205) (name 'subclass') (class (ref: 206)) (opposite (ref: 204)) (type (ref: 92))))) (FM3.Class (id: 163) (name 'LeafEntity') (package (ref: 30)) (superclass (ref: 40))) (FM3.Class (id: 85) (name 'Module') (package (ref: 30)) (superclass (ref: 83)) (attributes (FM3.Property (id: 180) (name 'compilationUnit') (class (ref: 85)) (opposite (ref: 179)) (type (ref: 178)))))))) \ No newline at end of file +( + (FM3.Package (id: 1) + (name 'FILE') + (classes + (FM3.Class (id: 2) + (name 'File') + (package (ref: 1)) + (superclass (ref: 3)) + (properties + (FM3.Property (id: 4) + (name 'numberOfExternalClones') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 5) + (name 'averageNumberOfCharactersPerLine') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 6) + (name 'numberOfExternalDuplications') + (class (ref: 2)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 7) + (name 'totalNumberOfLinesOfText') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 8) + (name 'numberOfInternalMultiplications') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 9) + (name 'numberOfDuplicatedFiles') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 10) + (name 'numberOfBytes') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 11) + (name 'numberOfKiloBytes') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 12) + (name 'numberOfEmptyLinesOfText') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 13) + (name 'numberOfInternalDuplications') + (class (ref: 2)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 14) + (name 'numberOfLinesOfText') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 15) + (name 'numberOfInternalClones') + (class (ref: 2)) + (type (ref: Number))) + (FM3.Property (id: 16) + (name 'numberOfCharacters') + (class (ref: 2)) + (type (ref: Number))))) + (FM3.Class (id: 3) + (name 'AbstractFile') + (package (ref: 1)) + (superclass (ref: 17)) + (properties + (FM3.Property (id: 18) + (name 'name') + (class (ref: 3)) + (type (ref: String))))) + (FM3.Class (id: 19) + (name 'Folder') + (package (ref: 1)) + (superclass (ref: 3)) + (properties + (FM3.Property (id: 20) + (name 'numberOfFolders') + (class (ref: 19)) + (type (ref: Number))) + (FM3.Property (id: 21) + (name 'numberOfFiles') + (class (ref: 19)) + (type (ref: Number))) + (FM3.Property (id: 22) + (name 'totalNumberOfLinesOfText') + (class (ref: 19)) + (type (ref: Number))) + (FM3.Property (id: 23) + (name 'numberOfLinesOfText') + (class (ref: 19)) + (type (ref: Number))) + (FM3.Property (id: 24) + (name 'numberOfEmptyLinesOfText') + (class (ref: 19)) + (type (ref: Number))))))) + (FM3.Package (id: 25) + (name 'Java') + (extensions (ref: 26) (ref: 27) (ref: 28) (ref: 29))) + (FM3.Package (id: 30) + (name 'FAMIX') + (classes + (FM3.Class (id: 31) + (name 'CaughtException') + (package (ref: 30)) + (superclass (ref: 32)) + (properties + (FM3.Property (id: 33) + (name 'definingMethod') + (class (ref: 31)) + (opposite (ref: 28)) + (type (ref: 34))))) + (FM3.Class (id: 17) + (name 'Entity') + (package (ref: 30)) + (superclass (ref: Object))) + (FM3.Class (id: 35) + (name 'AbstractFileAnchor') + (package (ref: 30)) + (superclass (ref: 36)) + (properties + (FM3.Property (id: 37) + (name 'fileName') + (class (ref: 35)) + (type (ref: String))))) + (FM3.Class (id: 38) + (name 'SourceTextAnchor') + (package (ref: 30)) + (superclass (ref: 36)) + (properties + (FM3.Property (id: 39) + (name 'source') + (class (ref: 38)) + (type (ref: String))))) + (FM3.Class (id: 40) + (name 'NamedEntity') + (package (ref: 30)) + (superclass (ref: 41)) + (properties + (FM3.Property (id: 42) + (name 'modifiers') + (class (ref: 40)) + (multivalued true) + (type (ref: String))) + (FM3.Property (id: 43) + (name 'nameLength') + (class (ref: 40)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 44) + (name 'isPublic') + (class (ref: 40)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 45) + (name 'receivingInvocations') + (class (ref: 40)) + (derived true) + (multivalued true) + (opposite (ref: 46)) + (type (ref: 47))) + (FM3.Property (id: 48) + (name 'isStub') + (class (ref: 40)) + (type (ref: Boolean))) + (FM3.Property (id: 49) + (name 'name') + (class (ref: 40)) + (type (ref: String))) + (FM3.Property (id: 50) + (name 'isFinal') + (class (ref: 40)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 51) + (name 'isPackage') + (class (ref: 40)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 52) + (name 'isPrivate') + (class (ref: 40)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 53) + (name 'annotationInstances') + (class (ref: 40)) + (derived true) + (multivalued true) + (opposite (ref: 54)) + (type (ref: 55))) + (FM3.Property (id: 56) + (name 'isAbstract') + (class (ref: 40)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 57) + (name 'parentPackage') + (class (ref: 40)) + (opposite (ref: 58)) + (type (ref: 59))) + (FM3.Property (id: 60) + (name 'isProtected') + (class (ref: 40)) + (derived true) + (type (ref: Boolean))))) + (FM3.Class (id: 36) + (name 'SourceAnchor') + (package (ref: 30)) + (superclass (ref: 17)) + (properties + (FM3.Property (id: 61) + (name 'element') + (class (ref: 36)) + (opposite (ref: 62)) + (type (ref: 41))))) + (FM3.Class (id: 63) + (name 'CSourceLanguage') + (package (ref: 30)) + (superclass (ref: 64))) + (FM3.Class (id: 55) + (name 'AnnotationInstance') + (package (ref: 30)) + (superclass (ref: 17)) + (properties + (FM3.Property (id: 65) + (name 'attributes') + (class (ref: 55)) + (derived true) + (multivalued true) + (opposite (ref: 66)) + (type (ref: 67))) + (FM3.Property (id: 54) + (name 'annotatedEntity') + (class (ref: 55)) + (opposite (ref: 53)) + (type (ref: 40))) + (FM3.Property (id: 68) + (name 'annotationType') + (class (ref: 55)) + (opposite (ref: 69)) + (type (ref: 70))))) + (FM3.Class (id: 71) + (name 'MultipleFileAnchor') + (package (ref: 30)) + (superclass (ref: 36)) + (properties + (FM3.Property (id: 72) + (name 'allFiles') + (class (ref: 71)) + (multivalued true) + (type (ref: 73))))) + (FM3.Class (id: 74) + (name 'Association') + (package (ref: 30)) + (superclass (ref: 41)) + (properties + (FM3.Property (id: 75) + (name 'to') + (class (ref: 74)) + (derived true) + (type (ref: 40))) + (FM3.Property (id: 76) + (name 'from') + (class (ref: 74)) + (derived true) + (type (ref: 40))) + (FM3.Property (id: 77) + (name 'next') + (class (ref: 74)) + (derived true) + (opposite (ref: 78)) + (type (ref: 74))) + (FM3.Property (id: 78) + (name 'previous') + (class (ref: 74)) + (opposite (ref: 77)) + (type (ref: 74))))) + (FM3.Class (id: 79) + (name 'GlobalVariable') + (package (ref: 30)) + (superclass (ref: 80)) + (properties + (FM3.Property (id: 81) + (name 'parentScope') + (class (ref: 79)) + (opposite (ref: 82)) + (type (ref: 83))) + (FM3.Property (id: 84) + (name 'parentModule') + (class (ref: 79)) + (type (ref: 85))))) + (FM3.Class (id: 86) + (name 'Reference') + (package (ref: 30)) + (superclass (ref: 74)) + (properties + (FM3.Property (id: 87) + (name 'source') + (class (ref: 86)) + (opposite (ref: 88)) + (type (ref: 89))) + (FM3.Property (id: 90) + (name 'target') + (class (ref: 86)) + (opposite (ref: 91)) + (type (ref: 92))))) + (FM3.Class (id: 93) + (name 'Function') + (package (ref: 30)) + (superclass (ref: 89)) + (properties + (FM3.Property (id: 94) + (name 'container') + (class (ref: 93)) + (opposite (ref: 95)) + (type (ref: 96))) + (FM3.Property (id: 97) + (name 'parentModule') + (class (ref: 93)) + (type (ref: 85))))) + (FM3.Class (id: 47) + (name 'Invocation') + (package (ref: 30)) + (superclass (ref: 74)) + (properties + (FM3.Property (id: 98) + (name 'receiverSourceCode') + (class (ref: 47)) + (type (ref: String))) + (FM3.Property (id: 99) + (name 'sender') + (class (ref: 47)) + (opposite (ref: 100)) + (type (ref: 89))) + (FM3.Property (id: 46) + (name 'receiver') + (class (ref: 47)) + (opposite (ref: 45)) + (type (ref: 40))) + (FM3.Property (id: 101) + (name 'signature') + (class (ref: 47)) + (type (ref: String))) + (FM3.Property (id: 102) + (name 'candidates') + (class (ref: 47)) + (multivalued true) + (opposite (ref: 103)) + (type (ref: 89))))) + (FM3.Class (id: 104) + (name 'ParameterizableClass') + (package (ref: 30)) + (superclass (ref: 105)) + (properties + (FM3.Property (id: 106) + (name 'parameterizedTypes') + (class (ref: 104)) + (derived true) + (multivalued true) + (opposite (ref: 107)) + (type (ref: 108))) + (FM3.Property (id: 109) + (name 'parameters') + (class (ref: 104)) + (derived true) + (multivalued true) + (type (ref: 110))))) + (FM3.Class (id: 32) + (name 'Exception') + (package (ref: 30)) + (superclass (ref: 17)) + (properties + (FM3.Property (id: 111) + (name 'exceptionClass') + (class (ref: 32)) + (type (ref: 105))))) + (FM3.Class (id: 112) + (name 'Enum') + (package (ref: 30)) + (superclass (ref: 92)) + (properties + (FM3.Property (id: 113) + (name 'values') + (class (ref: 112)) + (derived true) + (multivalued true) + (opposite (ref: 114)) + (type (ref: 115))))) + (FM3.Class (id: 59) + (name 'Package') + (package (ref: 30)) + (superclass (ref: 83)) + (properties + (FM3.Property (id: 116) + (name 'relativeImportanceForSystem') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 117) + (name 'weightedMethodCount') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 118) + (name 'numberOfLinesOfCode') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 119) + (name 'afferentCoupling') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 120) + (name 'numberOfClasses') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 121) + (name 'instability') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 122) + (name 'abstractness') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 123) + (name 'numberOfMethods') + (class (ref: 59)) + (type (ref: Number))) + (FM3.Property (id: 124) + (name 'providerTypes') + (class (ref: 59)) + (derived true) + (multivalued true) + (type (ref: 92))) + (FM3.Property (id: 125) + (name 'numberOfClientPackages') + (class (ref: 59)) + (type (ref: Number))) + (FM3.Property (id: 126) + (name 'distance') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 58) + (name 'childNamedEntities') + (class (ref: 59)) + (derived true) + (multivalued true) + (opposite (ref: 57)) + (type (ref: 40))) + (FM3.Property (id: 127) + (name 'bunchCohesion') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 128) + (name 'efferentCoupling') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 129) + (name 'martinCohesion') + (class (ref: 59)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 130) + (name 'clientTypes') + (class (ref: 59)) + (derived true) + (multivalued true) + (type (ref: 92))))) + (FM3.Class (id: 131) + (name 'SmalltalkSourceLanguage') + (package (ref: 30)) + (superclass (ref: 64))) + (FM3.Class (id: 132) + (name 'PrimitiveType') + (package (ref: 30)) + (superclass (ref: 92))) + (FM3.Class (id: 133) + (name 'IndexedFileAnchor') + (package (ref: 30)) + (superclass (ref: 35)) + (properties + (FM3.Property (id: 134) + (name 'startPos') + (class (ref: 133)) + (type (ref: Number))) + (FM3.Property (id: 135) + (name 'endPos') + (class (ref: 133)) + (type (ref: Number))))) + (FM3.Class (id: 136) + (name 'Comment') + (package (ref: 30)) + (superclass (ref: 41)) + (properties + (FM3.Property (id: 137) + (name 'content') + (class (ref: 136)) + (type (ref: String))) + (FM3.Property (id: 138) + (name 'container') + (class (ref: 136)) + (opposite (ref: 139)) + (type (ref: 41))))) + (FM3.Class (id: 140) + (name 'Namespace') + (package (ref: 30)) + (superclass (ref: 83)) + (properties + (FM3.Property (id: 141) + (name 'instability') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 142) + (name 'numberOfMethods') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 143) + (name 'afferentCoupling') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 144) + (name 'efferentCoupling') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 145) + (name 'bunchCohesion') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 146) + (name 'distance') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 147) + (name 'martinCohesion') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 148) + (name 'numberOfClasses') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 149) + (name 'numberOfNonInterfacesClasses') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 150) + (name 'abstractness') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 151) + (name 'clientTypes') + (class (ref: 140)) + (derived true) + (multivalued true) + (type (ref: 92))) + (FM3.Property (id: 152) + (name 'numberOfLinesOfCode') + (class (ref: 140)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 153) + (name 'providerTypes') + (class (ref: 140)) + (derived true) + (multivalued true) + (type (ref: 92))) + (FM3.Property (id: 154) + (name 'numberOfAttributes') + (class (ref: 140)) + (type (ref: Number))))) + (FM3.Class (id: 155) + (name 'DeclaredException') + (package (ref: 30)) + (superclass (ref: 32)) + (properties + (FM3.Property (id: 156) + (name 'definingMethod') + (class (ref: 155)) + (opposite (ref: 29)) + (type (ref: 34))))) + (FM3.Class (id: 157) + (name 'TypeAlias') + (package (ref: 30)) + (superclass (ref: 92)) + (properties + (FM3.Property (id: 158) + (name 'aliasedType') + (class (ref: 157)) + (opposite (ref: 159)) + (type (ref: 92))))) + (FM3.Class (id: 160) + (name 'Parameter') + (package (ref: 30)) + (superclass (ref: 80)) + (properties + (FM3.Property (id: 161) + (name 'parentBehaviouralEntity') + (class (ref: 160)) + (opposite (ref: 162)) + (type (ref: 89))))) + (FM3.Class (id: 80) + (name 'StructuralEntity') + (package (ref: 30)) + (superclass (ref: 163)) + (properties + (FM3.Property (id: 164) + (name 'accessors') + (class (ref: 80)) + (derived true) + (multivalued true) + (type (ref: 89))) + (FM3.Property (id: 165) + (name 'incomingAccesses') + (class (ref: 80)) + (derived true) + (multivalued true) + (opposite (ref: 166)) + (type (ref: 167))) + (FM3.Property (id: 168) + (name 'dereferencedInvocations') + (class (ref: 80)) + (derived true) + (multivalued true) + (opposite (ref: 169)) + (type (ref: 170))) + (FM3.Property (id: 171) + (name 'declaredType') + (class (ref: 80)) + (opposite (ref: 172)) + (type (ref: 92))))) + (FM3.Class (id: 167) + (name 'Access') + (package (ref: 30)) + (superclass (ref: 74)) + (properties + (FM3.Property (id: 173) + (name 'isReadWriteUnknown') + (class (ref: 167)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 174) + (name 'isRead') + (class (ref: 167)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 175) + (name 'isWrite') + (class (ref: 167)) + (type (ref: Boolean))) + (FM3.Property (id: 176) + (name 'accessor') + (class (ref: 167)) + (opposite (ref: 177)) + (type (ref: 89))) + (FM3.Property (id: 166) + (name 'variable') + (class (ref: 167)) + (opposite (ref: 165)) + (type (ref: 80))))) + (FM3.Class (id: 178) + (name 'CompilationUnit') + (package (ref: 30)) + (superclass (ref: 2)) + (properties + (FM3.Property (id: 179) + (name 'module') + (class (ref: 178)) + (opposite (ref: 180)) + (type (ref: 85))))) + (FM3.Class (id: 92) + (name 'Type') + (package (ref: 30)) + (superclass (ref: 96)) + (properties + (FM3.Property (id: 172) + (name 'structuresWithDeclaredType') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 171)) + (type (ref: 80))) + (FM3.Property (id: 91) + (name 'incomingReferences') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 90)) + (type (ref: 86))) + (FM3.Property (id: 159) + (name 'typeAliases') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 158)) + (type (ref: 157))) + (FM3.Property (id: 181) + (name 'numberOfAttributesInherited') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 182) + (name 'numberOfAccessesToForeignData') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 183) + (name 'attributes') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 184)) + (type (ref: 185))) + (FM3.Property (id: 186) + (name 'numberOfDirectSubclasses') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 187) + (name 'numberOfMethodsOverriden') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 188) + (name 'fanOut') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 189) + (name 'numberOfParents') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 190) + (name 'isInnerClass') + (class (ref: 92)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 191) + (name 'weightOfAClass') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 192) + (name 'numberOfPrivateMethods') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 193) + (name 'numberOfMethodsAdded') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 194) + (name 'weightedMethodCount') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 195) + (name 'tightClassCohesion') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 196) + (name 'numberOfPrivateAttributes') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 197) + (name 'numberOfAnnotationInstances') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 198) + (name 'numberOfLinesOfCode') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 199) + (name 'numberOfAttributes') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 200) + (name 'numberOfAbstractMethods') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 201) + (name 'behavioursWithDeclaredType') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 202)) + (type (ref: 89))) + (FM3.Property (id: 203) + (name 'fanIn') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 204) + (name 'superInheritances') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 205)) + (type (ref: 206))) + (FM3.Property (id: 207) + (name 'numberOfMethodProtocols') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 208) + (name 'isJUnit4TestCase') + (class (ref: 92)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 209) + (name 'numberOfProtectedMethods') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 210) + (name 'numberOfPublicMethods') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 211) + (name 'numberOfComments') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 212) + (name 'container') + (class (ref: 92)) + (opposite (ref: 213)) + (type (ref: 96))) + (FM3.Property (id: 214) + (name 'numberOfMethodsInHierarchy') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 215) + (name 'argumentsInParameterizedTypes') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 216)) + (type (ref: 108))) + (FM3.Property (id: 217) + (name 'numberOfMethodsInherited') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 218) + (name 'isTestCase') + (class (ref: 92)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 219) + (name 'numberOfConstructorMethods') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 220) + (name 'numberOfProtectedAttributes') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 221) + (name 'subInheritances') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 222)) + (type (ref: 206))) + (FM3.Property (id: 223) + (name 'numberOfMessageSends') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 224) + (name 'subclassHierarchyDepth') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 225) + (name 'numberOfRevealedAttributes') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 226) + (name 'isAbstract') + (class (ref: 92)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 227) + (name 'numberOfChildren') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 228) + (name 'numberOfStatements') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 229) + (name 'totalNumberOfChildren') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 230) + (name 'providerTypes') + (class (ref: 92)) + (derived true) + (multivalued true) + (type (ref: 92))) + (FM3.Property (id: 231) + (name 'numberOfMethods') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 232) + (name 'numberOfDuplicatedLinesOfCodeInternally') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 233) + (name 'hierarchyNestingLevel') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 234) + (name 'numberOfPublicAttributes') + (class (ref: 92)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 235) + (name 'clientTypes') + (class (ref: 92)) + (derived true) + (multivalued true) + (type (ref: 92))) + (FM3.Property (id: 236) + (name 'methods') + (class (ref: 92)) + (derived true) + (multivalued true) + (opposite (ref: 237)) + (type (ref: 34))) + (FM3.Property (id: 238) + (name 'numberOfAccessorMethods') + (class (ref: 92)) + (derived true) + (type (ref: Number))))) + (FM3.Class (id: 185) + (name 'Attribute') + (package (ref: 30)) + (superclass (ref: 80)) + (properties + (FM3.Property (id: 184) + (name 'parentType') + (class (ref: 185)) + (opposite (ref: 183)) + (type (ref: 92))) + (FM3.Property (id: 239) + (name 'numberOfAccesses') + (class (ref: 185)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 240) + (name 'numberOfLocalAccesses') + (class (ref: 185)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 241) + (name 'hierarchyNestingLevel') + (class (ref: 185)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 242) + (name 'numberOfGlobalAccesses') + (class (ref: 185)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 243) + (name 'numberOfAccessingClasses') + (class (ref: 185)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 244) + (name 'hasClassScope') + (class (ref: 185)) + (type (ref: Boolean))) + (FM3.Property (id: 245) + (name 'numberOfAccessingMethods') + (class (ref: 185)) + (derived true) + (type (ref: Number))))) + (FM3.Class (id: 115) + (name 'EnumValue') + (package (ref: 30)) + (superclass (ref: 80)) + (properties + (FM3.Property (id: 114) + (name 'parentEnum') + (class (ref: 115)) + (opposite (ref: 113)) + (type (ref: 112))))) + (FM3.Class (id: 246) + (name 'ImplicitVariable') + (package (ref: 30)) + (superclass (ref: 80)) + (properties + (FM3.Property (id: 247) + (name 'parentBehaviouralEntity') + (class (ref: 246)) + (opposite (ref: 248)) + (type (ref: 89))))) + (FM3.Class (id: 96) + (name 'ContainerEntity') + (package (ref: 30)) + (superclass (ref: 40)) + (properties + (FM3.Property (id: 26) + (name 'definedAnnotationTypes') + (class (ref: 96)) + (derived true) + (multivalued true) + (opposite (ref: 249)) + (package (ref: 25)) + (type (ref: 70))) + (FM3.Property (id: 213) + (name 'types') + (class (ref: 96)) + (derived true) + (multivalued true) + (opposite (ref: 212)) + (type (ref: 92))) + (FM3.Property (id: 95) + (name 'functions') + (class (ref: 96)) + (derived true) + (multivalued true) + (opposite (ref: 94)) + (type (ref: 93))))) + (FM3.Class (id: 250) + (name 'UnknownVariable') + (package (ref: 30)) + (superclass (ref: 80))) + (FM3.Class (id: 251) + (name 'ThrownException') + (package (ref: 30)) + (superclass (ref: 32)) + (properties + (FM3.Property (id: 252) + (name 'definingMethod') + (class (ref: 251)) + (opposite (ref: 27)) + (type (ref: 34))))) + (FM3.Class (id: 70) + (name 'AnnotationType') + (package (ref: 30)) + (superclass (ref: 92)) + (properties + (FM3.Property (id: 69) + (name 'instances') + (class (ref: 70)) + (derived true) + (multivalued true) + (opposite (ref: 68)) + (type (ref: 55))) + (FM3.Property (id: 249) + (name 'container') + (class (ref: 70)) + (opposite (ref: 26)) + (type (ref: 96))))) + (FM3.Class (id: 253) + (name 'Include') + (package (ref: 30)) + (superclass (ref: 74)) + (properties + (FM3.Property (id: 254) + (name 'target') + (class (ref: 253)) + (opposite (ref: 255)) + (type (ref: 256))) + (FM3.Property (id: 257) + (name 'source') + (class (ref: 253)) + (opposite (ref: 258)) + (type (ref: 256))))) + (FM3.Class (id: 41) + (name 'SourcedEntity') + (package (ref: 30)) + (superclass (ref: 17)) + (properties + (FM3.Property (id: 259) + (name 'numberOfLinesOfCodeWithMoreThanOneCharacter') + (class (ref: 41)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 260) + (name 'numberOfJavaNullChecks') + (class (ref: 41)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 139) + (name 'comments') + (class (ref: 41)) + (derived true) + (multivalued true) + (opposite (ref: 138)) + (type (ref: 136))) + (FM3.Property (id: 62) + (name 'sourceAnchor') + (class (ref: 41)) + (opposite (ref: 61)) + (type (ref: 36))) + (FM3.Property (id: 261) + (name 'declaredSourceLanguage') + (class (ref: 41)) + (opposite (ref: 262)) + (type (ref: 64))))) + (FM3.Class (id: 67) + (name 'AnnotationInstanceAttribute') + (package (ref: 30)) + (superclass (ref: 17)) + (properties + (FM3.Property (id: 263) + (name 'annotationTypeAttribute') + (class (ref: 67)) + (opposite (ref: 264)) + (type (ref: 265))) + (FM3.Property (id: 266) + (name 'value') + (class (ref: 67)) + (type (ref: String))) + (FM3.Property (id: 66) + (name 'parentAnnotationInstance') + (class (ref: 67)) + (opposite (ref: 65)) + (type (ref: 55))))) + (FM3.Class (id: 267) + (name 'SmalltalkMonticelloSourceLanguage') + (package (ref: 30)) + (superclass (ref: 64))) + (FM3.Class (id: 268) + (name 'LocalVariable') + (package (ref: 30)) + (superclass (ref: 80)) + (properties + (FM3.Property (id: 269) + (name 'parentBehaviouralEntity') + (class (ref: 268)) + (opposite (ref: 270)) + (type (ref: 89))))) + (FM3.Class (id: 271) + (name 'UnknownSourceLanguage') + (package (ref: 30)) + (superclass (ref: 64))) + (FM3.Class (id: 34) + (name 'Method') + (package (ref: 30)) + (superclass (ref: 89)) + (properties + (FM3.Property (id: 272) + (name 'providerTypes') + (class (ref: 34)) + (derived true) + (multivalued true) + (type (ref: 92))) + (FM3.Property (id: 27) + (name 'thrownExceptions') + (class (ref: 34)) + (derived true) + (multivalued true) + (opposite (ref: 252)) + (package (ref: 25)) + (type (ref: 251))) + (FM3.Property (id: 273) + (name 'timeStamp') + (class (ref: 34)) + (type (ref: String))) + (FM3.Property (id: 274) + (name 'kind') + (class (ref: 34)) + (type (ref: String))) + (FM3.Property (id: 275) + (name 'category') + (class (ref: 34)) + (type (ref: String))) + (FM3.Property (id: 276) + (name 'isInternalImplementation') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 277) + (name 'isConstructor') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 237) + (name 'parentType') + (class (ref: 34)) + (opposite (ref: 236)) + (type (ref: 92))) + (FM3.Property (id: 278) + (name 'isJUnit4Test') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 279) + (name 'isGetter') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 280) + (name 'numberOfAnnotationInstances') + (class (ref: 34)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 281) + (name 'hierarchyNestingLevel') + (class (ref: 34)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 282) + (name 'isOverriden') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 283) + (name 'invokedMethods') + (class (ref: 34)) + (derived true) + (multivalued true) + (type (ref: 34))) + (FM3.Property (id: 284) + (name 'isSetter') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 285) + (name 'hasClassScope') + (class (ref: 34)) + (type (ref: Boolean))) + (FM3.Property (id: 286) + (name 'isConstant') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 29) + (name 'declaredExceptions') + (class (ref: 34)) + (derived true) + (multivalued true) + (opposite (ref: 156)) + (package (ref: 25)) + (type (ref: 155))) + (FM3.Property (id: 287) + (name 'numberOfInvokedMethods') + (class (ref: 34)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 288) + (name 'isOverriding') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 289) + (name 'isImplementing') + (class (ref: 34)) + (derived true) + (type (ref: Boolean))) + (FM3.Property (id: 28) + (name 'caughtExceptions') + (class (ref: 34)) + (derived true) + (multivalued true) + (opposite (ref: 33)) + (package (ref: 25)) + (type (ref: 31))) + (FM3.Property (id: 290) + (name 'invokingMethods') + (class (ref: 34)) + (derived true) + (multivalued true) + (type (ref: 34))) + (FM3.Property (id: 291) + (name 'clientTypes') + (class (ref: 34)) + (derived true) + (multivalued true) + (type (ref: 92))))) + (FM3.Class (id: 110) + (name 'ParameterType') + (package (ref: 30)) + (superclass (ref: 92))) + (FM3.Class (id: 265) + (name 'AnnotationTypeAttribute') + (package (ref: 30)) + (superclass (ref: 185)) + (properties + (FM3.Property (id: 264) + (name 'annotationAttributeInstances') + (class (ref: 265)) + (derived true) + (multivalued true) + (opposite (ref: 263)) + (type (ref: 67))) + (FM3.Property (id: 292) + (name 'parentAnnotationType') + (class (ref: 265)) + (derived true) + (type (ref: 70))))) + (FM3.Class (id: 73) + (name 'FileAnchor') + (package (ref: 30)) + (superclass (ref: 35)) + (properties + (FM3.Property (id: 293) + (name 'startColumn') + (class (ref: 73)) + (type (ref: Number))) + (FM3.Property (id: 294) + (name 'startLine') + (class (ref: 73)) + (type (ref: Number))) + (FM3.Property (id: 295) + (name 'endColumn') + (class (ref: 73)) + (type (ref: Number))) + (FM3.Property (id: 296) + (name 'endLine') + (class (ref: 73)) + (type (ref: Number))))) + (FM3.Class (id: 297) + (name 'Header') + (package (ref: 30)) + (superclass (ref: 2))) + (FM3.Class (id: 105) + (name 'Class') + (package (ref: 30)) + (superclass (ref: 92)) + (properties + (FM3.Property (id: 298) + (name 'numberOfInternalDuplications') + (class (ref: 105)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 299) + (name 'numberOfExternalDuplications') + (class (ref: 105)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 300) + (name 'isIgnored') + (class (ref: 105)) + (derived true) + (multivalued true) + (type (ref: Boolean))) + (FM3.Property (id: 301) + (name 'lcom3') + (class (ref: 105)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 302) + (name 'lcom2') + (class (ref: 105)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 303) + (name 'isInterface') + (class (ref: 105)) + (type (ref: Boolean))))) + (FM3.Class (id: 89) + (name 'BehaviouralEntity') + (package (ref: 30)) + (superclass (ref: 96)) + (properties + (FM3.Property (id: 177) + (name 'accesses') + (class (ref: 89)) + (derived true) + (multivalued true) + (opposite (ref: 176)) + (type (ref: 167))) + (FM3.Property (id: 162) + (name 'parameters') + (class (ref: 89)) + (derived true) + (multivalued true) + (opposite (ref: 161)) + (type (ref: 160))) + (FM3.Property (id: 103) + (name 'incomingInvocations') + (class (ref: 89)) + (derived true) + (multivalued true) + (opposite (ref: 102)) + (type (ref: 47))) + (FM3.Property (id: 88) + (name 'outgoingReferences') + (class (ref: 89)) + (derived true) + (multivalued true) + (opposite (ref: 87)) + (type (ref: 86))) + (FM3.Property (id: 100) + (name 'outgoingInvocations') + (class (ref: 89)) + (derived true) + (multivalued true) + (opposite (ref: 99)) + (type (ref: 47))) + (FM3.Property (id: 304) + (name 'providerBehaviours') + (class (ref: 89)) + (derived true) + (multivalued true) + (type (ref: 89))) + (FM3.Property (id: 305) + (name 'numberOfLinesOfCode') + (class (ref: 89)) + (type (ref: Number))) + (FM3.Property (id: 306) + (name 'numberOfParameters') + (class (ref: 89)) + (type (ref: Number))) + (FM3.Property (id: 202) + (name 'declaredType') + (class (ref: 89)) + (opposite (ref: 201)) + (type (ref: 92))) + (FM3.Property (id: 307) + (name 'cyclomaticComplexity') + (class (ref: 89)) + (type (ref: Number))) + (FM3.Property (id: 308) + (name 'signature') + (class (ref: 89)) + (type (ref: String))) + (FM3.Property (id: 309) + (name 'numberOfComments') + (class (ref: 89)) + (type (ref: Number))) + (FM3.Property (id: 248) + (name 'implicitVariables') + (class (ref: 89)) + (derived true) + (multivalued true) + (opposite (ref: 247)) + (type (ref: 246))) + (FM3.Property (id: 310) + (name 'clientBehaviours') + (class (ref: 89)) + (derived true) + (multivalued true) + (type (ref: 89))) + (FM3.Property (id: 270) + (name 'localVariables') + (class (ref: 89)) + (derived true) + (multivalued true) + (opposite (ref: 269)) + (type (ref: 268))) + (FM3.Property (id: 311) + (name 'numberOfOutgoingInvocations') + (class (ref: 89)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 312) + (name 'numberOfMessageSends') + (class (ref: 89)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 313) + (name 'numberOfAccesses') + (class (ref: 89)) + (derived true) + (type (ref: Number))) + (FM3.Property (id: 314) + (name 'numberOfStatements') + (class (ref: 89)) + (type (ref: Number))) + (FM3.Property (id: 315) + (name 'numberOfConditionals') + (class (ref: 89)) + (type (ref: Number))))) + (FM3.Class (id: 170) + (name 'DereferencedInvocation') + (package (ref: 30)) + (superclass (ref: 47)) + (properties + (FM3.Property (id: 169) + (name 'referencer') + (class (ref: 170)) + (opposite (ref: 168)) + (type (ref: 80))))) + (FM3.Class (id: 316) + (name 'CustomSourceLanguage') + (package (ref: 30)) + (superclass (ref: 64)) + (properties + (FM3.Property (id: 317) + (name 'name') + (class (ref: 316)) + (type (ref: String))))) + (FM3.Class (id: 83) + (name 'ScopingEntity') + (package (ref: 30)) + (superclass (ref: 96)) + (properties + (FM3.Property (id: 318) + (name 'childScopes') + (class (ref: 83)) + (derived true) + (multivalued true) + (opposite (ref: 319)) + (type (ref: 83))) + (FM3.Property (id: 82) + (name 'globalVariables') + (class (ref: 83)) + (derived true) + (multivalued true) + (opposite (ref: 81)) + (type (ref: 79))) + (FM3.Property (id: 319) + (name 'parentScope') + (class (ref: 83)) + (opposite (ref: 318)) + (type (ref: 83))))) + (FM3.Class (id: 108) + (name 'ParameterizedType') + (package (ref: 30)) + (superclass (ref: 92)) + (properties + (FM3.Property (id: 107) + (name 'parameterizableClass') + (class (ref: 108)) + (opposite (ref: 106)) + (type (ref: 104))) + (FM3.Property (id: 216) + (name 'arguments') + (class (ref: 108)) + (multivalued true) + (opposite (ref: 215)) + (type (ref: 92))))) + (FM3.Class (id: 320) + (name 'PharoAnchor') + (package (ref: 30)) + (superclass (ref: 36))) + (FM3.Class (id: 64) + (name 'SourceLanguage') + (package (ref: 30)) + (superclass (ref: 17)) + (properties + (FM3.Property (id: 321) + (name 'name') + (class (ref: 64)) + (derived true) + (type (ref: String))) + (FM3.Property (id: 262) + (name 'sourcedEntities') + (class (ref: 64)) + (derived true) + (multivalued true) + (opposite (ref: 261)) + (type (ref: 41))))) + (FM3.Class (id: 322) + (name 'JavaSourceLanguage') + (package (ref: 30)) + (superclass (ref: 64))) + (FM3.Class (id: 206) + (name 'Inheritance') + (package (ref: 30)) + (superclass (ref: 74)) + (properties + (FM3.Property (id: 222) + (name 'superclass') + (class (ref: 206)) + (opposite (ref: 221)) + (type (ref: 92))) + (FM3.Property (id: 205) + (name 'subclass') + (class (ref: 206)) + (opposite (ref: 204)) + (type (ref: 92))))) + (FM3.Class (id: 163) + (name 'LeafEntity') + (package (ref: 30)) + (superclass (ref: 40))) + (FM3.Class (id: 85) + (name 'Module') + (package (ref: 30)) + (superclass (ref: 83)) + (properties + (FM3.Property (id: 180) + (name 'compilationUnit') + (class (ref: 85)) + (opposite (ref: 179)) + (type (ref: 178)))))))) \ No newline at end of file diff --git a/lib/src/test/resources/ch/unibe/fame/resources/FM3.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/FM3.fm3.mse index ff12097..e9f114c 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/FM3.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/FM3.fm3.mse @@ -11,7 +11,7 @@ (FM3.Class (id: 19) (name 'Class') (superclass (idref: 8)) - (attributes + (properties (FM3.Property (id: 23) (name 'abstract') (type (ref: Boolean))) @@ -39,7 +39,7 @@ (FM3.Class (id: 7) (name 'Package') (superclass (ref: 8)) - (attributes + (properties (FM3.Property (id: 9) (name 'classes') (multivalued true) @@ -54,7 +54,7 @@ (name 'Element') (abstract true) (superclass (ref: Object)) - (attributes + (properties (FM3.Property (id: 5) (name 'name') (type (ref: String))) @@ -69,7 +69,7 @@ (FM3.Class (id: 20) (name 'Property') (superclass (ref: 8)) - (attributes + (properties (FM3.Property (id: 12) (name 'opposite') (opposite (ref: 12)) diff --git a/lib/src/test/resources/ch/unibe/fame/resources/MSE.mse.mse b/lib/src/test/resources/ch/unibe/fame/resources/MSE.mse.mse index 0ae466e..811311a 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/MSE.mse.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/MSE.mse.mse @@ -5,7 +5,7 @@ (MSE.Class (id: 14) (name 'Element') (superclass (ref: Object)) - (attributes + (properties (MSE.Property (id: 7) (name 'name') (type (ref: String))) @@ -18,7 +18,7 @@ (MSE.Class (id: 15) (name 'Property') (superclass (idref: 14)) - (attributes + (properties (MSE.Property (id: 3) (name 'opposite') (opposite (idref: 3)) @@ -45,7 +45,7 @@ (MSE.Class (id: 25) (name 'Package') (superclass (idref: 14)) - (attributes + (properties (MSE.Property (id: 24) (name 'classes') (opposite (idref: 23)) @@ -53,7 +53,7 @@ (MSE.Class (id: 2) (name 'Class') (superclass (idref: 14)) - (attributes + (properties (MSE.Property (id: 16) (name 'abstract') (type (ref: Boolean))) diff --git a/lib/src/test/resources/ch/unibe/fame/resources/lib.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/lib.fm3.mse index 795e9a1..74f0527 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/lib.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/lib.fm3.mse @@ -4,7 +4,7 @@ (classes (FM3.Class (name 'Library') - (attributes + (properties (FM3.Property (name 'librarian') (type (ref: 2))) @@ -14,7 +14,7 @@ (type (ref: 1))))) (FM3.Class (id: 1) (name 'Book') - (attributes + (properties (FM3.Property (name 'title') (type (ref: String))) @@ -24,7 +24,7 @@ (type (ref: 2))))) (FM3.Class (id: 2) (name 'Person') - (attributes + (properties (FM3.Property (name 'name') (type (ref: String)))))))) From 98b0ab91202947c8b264a857024fbe546a8d0cbb Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 17:05:13 +0200 Subject: [PATCH 08/21] ref to jupiter test --- .vscode/settings.json | 3 ++- gradle/libs.versions.toml | 2 -- lib/build.gradle.kts | 8 ++++++-- lib/lib/jexample-r378.jar | Bin 93536 -> 0 bytes 4 files changed, 8 insertions(+), 5 deletions(-) delete mode 100644 lib/lib/jexample-r378.jar diff --git a/.vscode/settings.json b/.vscode/settings.json index 7b016a8..d53ecaf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "java.compile.nullAnalysis.mode": "automatic" + "java.compile.nullAnalysis.mode": "automatic", + "java.configuration.updateBuildConfiguration": "automatic" } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1aab14a..36db237 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,9 +4,7 @@ [versions] commons-math3 = "3.6.1" guava = "33.2.1-jre" -junit = "4.13.2" [libraries] commons-math3 = { module = "org.apache.commons:commons-math3", version.ref = "commons-math3" } guava = { module = "com.google.guava:guava", version.ref = "guava" } -junit = { module = "junit:junit", version.ref = "junit" } diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index d3773a9..e225486 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -20,14 +20,18 @@ repositories { dependencies { // Use JUnit test framework. - testImplementation(libs.junit) - + testImplementation("org.junit.jupiter:junit-jupiter:5.7.1") + // This dependency is exported to consumers, that is to say found on their compile classpath. api(libs.commons.math3) // This dependency is used internally, and not exposed to consumers on their own compile classpath. implementation(libs.guava) + // https://mvnrepository.com/artifact/net.sf.jexample/jexample + implementation("net.sf.jexample:jexample:4.4-378") + + implementation(fileTree("lib") { include("*.jar") }) } diff --git a/lib/lib/jexample-r378.jar b/lib/lib/jexample-r378.jar deleted file mode 100644 index a41fad009cbdbf47060d3219ad745482be123484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93536 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 From ba81a3b821f59ec83f3012d27f5b72b56416c97e Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 17:09:51 +0200 Subject: [PATCH 09/21] update that was not done when introducing traits --- lib/src/test/java/ch/akuhn/fame/test/FM3MetaMetamodel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/FM3MetaMetamodel.java b/lib/src/test/java/ch/akuhn/fame/test/FM3MetaMetamodel.java index 95edcfd..b661e4d 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/FM3MetaMetamodel.java +++ b/lib/src/test/java/ch/akuhn/fame/test/FM3MetaMetamodel.java @@ -45,7 +45,7 @@ public class FM3MetaMetamodel { @Test public void has4Classes() { MetaRepository m3 = MetaRepository.createFM3(); - assertEquals(4, m3.allClassDescriptions().size()); + assertEquals(6, m3.allClassDescriptions().size()); } @Test @@ -57,7 +57,7 @@ public void has1Package() { @Test public void has20Properties() { MetaRepository m3 = MetaRepository.createFM3(); - assertEquals(20, m3.allPropertyDescriptions().size()); + assertEquals(24, m3.allPropertyDescriptions().size()); } @Test From 8e155254ff3406afc75b8dbeef3183c47b36516c Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 17:11:16 +0200 Subject: [PATCH 10/21] start by only ubuntu :) --- .github/workflows/on-push.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/on-push.yml b/.github/workflows/on-push.yml index e40a69d..eba7d1a 100644 --- a/.github/workflows/on-push.yml +++ b/.github/workflows/on-push.yml @@ -5,16 +5,13 @@ on: jobs: gradle: - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: - distribution: temurin - java-version: 17 + distribution: 'temurin' + java-version: '17' - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 From 24fd6e928f519175878b88f68480e2dfaabac852 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 17:13:27 +0200 Subject: [PATCH 11/21] ensure gradle right --- .github/workflows/gradle-publish.yml | 3 +++ .github/workflows/on-push.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml index 6cc5d87..5347b53 100644 --- a/.github/workflows/gradle-publish.yml +++ b/.github/workflows/gradle-publish.yml @@ -25,6 +25,9 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 # v4.0.0 + - name: Grant execute permission to Gradle wrapper + run: chmod +x ./gradlew + - name: Build with Gradle run: ./gradlew lib:build diff --git a/.github/workflows/on-push.yml b/.github/workflows/on-push.yml index eba7d1a..7b3bba1 100644 --- a/.github/workflows/on-push.yml +++ b/.github/workflows/on-push.yml @@ -16,5 +16,8 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 + - name: Grant execute permission to Gradle wrapper + run: chmod +x ./gradlew + - name: Execute Gradle build run: ./gradlew lib:build \ No newline at end of file From 72f67ed836ac91e2df4538bad4f01d2d7413c760 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 17:24:43 +0200 Subject: [PATCH 12/21] update mse to remove dangling ref that should not exist update test accordingly to the mse (good numbr of id detected by the test itself --- lib/src/test/java/ch/akuhn/fame/test/Famix30.java | 2 +- .../resources/ch/unibe/fame/resources/FAMIX30.fm3.mse | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/Famix30.java b/lib/src/test/java/ch/akuhn/fame/test/Famix30.java index cb41ba8..6613443 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/Famix30.java +++ b/lib/src/test/java/ch/akuhn/fame/test/Famix30.java @@ -56,7 +56,7 @@ public void testImporter() { Tower t = new Tower(); t.getMetamodel().importMSE(input); Repository m2 = t.getMetamodel(); - assertEquals(70, m2.getElements().size()); + assertEquals(319, m2.getElements().size()); // Updated to 319 seems correct based on the number of id: in the file } @Test diff --git a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse index 8e54a46..38ff004 100644 --- a/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse +++ b/lib/src/test/resources/ch/unibe/fame/resources/FAMIX30.fm3.mse @@ -1099,14 +1099,10 @@ (properties (FM3.Property (id: 254) (name 'target') - (class (ref: 253)) - (opposite (ref: 255)) - (type (ref: 256))) + (class (ref: 253))) (FM3.Property (id: 257) (name 'source') - (class (ref: 253)) - (opposite (ref: 258)) - (type (ref: 256))))) + (class (ref: 253))))) (FM3.Class (id: 41) (name 'SourcedEntity') (package (ref: 30)) From f7f7e317d494d774f3b71e5908293a8370c6c7a7 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 17:35:36 +0200 Subject: [PATCH 13/21] update test because metametamodel error is due to change of the metameta when introduced traits --- lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java b/lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java index 631157e..12084dc 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/CompositeExample.java @@ -95,7 +95,7 @@ public Tower towerHasLayers(Tower t) { public Tower tower(Tower t) { assertEquals(0, t.getModel().size()); assertEquals(0, t.getMetamodel().size()); - assertEquals(25, t.getMetaMetamodel().size()); + assertEquals(31, t.getMetaMetamodel().size()); return t; } From e225885044cd606853806e087744c0bc4c307d80 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:03:04 +0200 Subject: [PATCH 14/21] they do work finally --- lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java b/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java index 63f2608..eef5efb 100644 --- a/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java +++ b/lib/src/test/java/ch/akuhn/fame/codegen/Famix30Test.java @@ -34,7 +34,6 @@ public class Famix30Test { @Test - @Ignore public void asFM3() { InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX30.fm3.mse"); Appendable output = new StringBuilder(); @@ -43,7 +42,6 @@ public void asFM3() { } @Test - @Ignore public void checkConstraints() { InputSource input = InputSource.fromResource("ch/unibe/fame/resources/FAMIX30.fm3.mse"); Tower t = new Tower(); From 213a44846cf3e896e4b840fddc7364ee14960819 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:05:40 +0200 Subject: [PATCH 15/21] do not optimize with injection but do run the test --- lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java | 3 +++ lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java | 5 ++++- lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java index b07a388..d392a65 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java @@ -13,11 +13,14 @@ import ch.akuhn.fame.fm3.MetaDescription; import ch.akuhn.fame.fm3.PropertyDescription; import ch.unibe.jexample.Given; +import ch.unibe.jexample.Injection; +import ch.unibe.jexample.InjectionPolicy; import ch.unibe.jexample.JExample; @FamePackage("Test") @RunWith(JExample.class) +@Injection(InjectionPolicy.NONE) public class ArrayFieldTest { @FameDescription diff --git a/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java b/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java index ff79d17..73e0cfb 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java @@ -9,9 +9,12 @@ import ch.akuhn.fame.FameProperty; import ch.akuhn.fame.Tower; import ch.unibe.jexample.Given; +import ch.unibe.jexample.Injection; +import ch.unibe.jexample.InjectionPolicy; import ch.unibe.jexample.JExample; -@RunWith( JExample.class) +@RunWith( JExample.class) +@Injection(InjectionPolicy.NONE) public class PolymorphismTest { @FameDescription diff --git a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java index a9cb144..b431f63 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java @@ -16,9 +16,12 @@ import ch.akuhn.util.Bag; import ch.akuhn.util.Strings; import ch.unibe.jexample.Given; +import ch.unibe.jexample.Injection; +import ch.unibe.jexample.InjectionPolicy; import ch.unibe.jexample.JExample; @RunWith(JExample.class) +@Injection(InjectionPolicy.NONE) public class TermBagExample { private static final String EMPTY_DOCUMENT = From da519cff60afa374c3c78b1c2fd81ee62f7cc840 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:08:27 +0200 Subject: [PATCH 16/21] fix test (all assert are correct but replicate setup that was incorrectly injected by jexample --- lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java index d392a65..c32a198 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java @@ -56,8 +56,10 @@ public String exportModel(Tower t) { } @Test - @Given("#metamodel,#exportModel") - public void importModel(Tower t, String mse) { + @Given("#exportModel") + public void importModel(String mse) { + Tower t = new Tower(); + t.metamodel.with(Dummy.class); assertEquals(0, t.model.size()); t.model.importMSE(mse); assertEquals(1, t.model.size()); From 7ca1112c1f5973d31d131b1ff794670b58e7792c Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:10:36 +0200 Subject: [PATCH 17/21] decouple tests --- .../test/java/ch/akuhn/fame/test/TermBagExample.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java index b431f63..ff08557 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java @@ -88,8 +88,11 @@ public Document emptyDocument() { } @Test - @Given("emptyModel;emptyDocument") - public Repository modelWithEmptyDocument(Repository m, Document d) { + @Given("emptyDocument") + public Repository modelWithEmptyDocument(Document d) { + Tower t = new Tower(); + t.metamodel.with(Document.class); + Repository m = t.model; m.add(d); assert m.size() == 1; return m; @@ -129,8 +132,9 @@ public void exportModelWithSomeDocument(Repository r) { } @Test - @Given("tower") - public Repository importModelWithSomeDocument(Tower t) { + public Repository importModelWithSomeDocument() { + Tower t = new Tower(); + t.metamodel.with(Document.class); assert t.model.size() == 0; t.model.importMSE(SOME_DOCUMENT); assert t.model.size() == 1; From b702b1ac5ee3429def976e6cf13e0ba5c6f4ad32 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:38:46 +0200 Subject: [PATCH 18/21] leave JExample for termbag --- .../ch/akuhn/fame/test/TermBagExample.java | 48 ++++++++----------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java index ff08557..11e1178 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java @@ -15,13 +15,8 @@ import ch.akuhn.fame.Tower; import ch.akuhn.util.Bag; import ch.akuhn.util.Strings; -import ch.unibe.jexample.Given; -import ch.unibe.jexample.Injection; -import ch.unibe.jexample.InjectionPolicy; -import ch.unibe.jexample.JExample; -@RunWith(JExample.class) -@Injection(InjectionPolicy.NONE) + public class TermBagExample { private static final String EMPTY_DOCUMENT = @@ -67,45 +62,39 @@ public void setTermData(List data) { } @Test - public Tower tower() { + public void tower() { Tower t = new Tower(); t.metamodel.with(Document.class); assert t.metamodel.allPackageDescriptions().size() == 1; assert t.metamodel.allClassDescriptions().size() == 1; assert t.metamodel.allPropertyDescriptions().size() == 2; - return t; } - @Test - @Given("tower") - public Repository emptyModel(Tower t) { + public Repository emptyModel() { + Tower t = new Tower(); + t.metamodel.with(Document.class); return t.model; } - @Test - public Document emptyDocument() { - return new Document(); - } - - @Test - @Given("emptyDocument") public Repository modelWithEmptyDocument(Document d) { Tower t = new Tower(); t.metamodel.with(Document.class); Repository m = t.model; - m.add(d); + m.add(new Document()); assert m.size() == 1; return m; } @Test - @Given("modelWithEmptyDocument") - public void exportModelWithEmptyDocument(Repository r) { + public void exportModelWithEmptyDocument() { + Tower t = new Tower(); + t.metamodel.with(Document.class); + Repository r = t.model; + r.add(new Document()); String s = r.exportMSE(); assertEquals(EMPTY_DOCUMENT, normalizeWhitespace(s)); } - @Test public Document someDocument() { Document d = new Document(); d.terms.add("to", 2); @@ -116,23 +105,25 @@ public Document someDocument() { } @Test - @Given("emptyModel;someDocument") - public Repository modelWithSomeDocument(Repository m, Document d) { + public void modelWithSomeDocument() { + Repository m = this.emptyModel(); + Document d = this.someDocument(); m.add(d); assert m.size() == 1; - return m; } @Test - @Given("modelWithSomeDocument") - public void exportModelWithSomeDocument(Repository r) { + public void exportModelWithSomeDocument() { + Repository r = this.emptyModel(); + Document d = this.someDocument(); + r.add(d); String s = r.exportMSE(); // TODO fragile test, order of terms may differ if hash key of interned strings diffs or if abg impl diffs // assertEquals(SOME_DOCUMENT, normalizeWhitespace(s)); } @Test - public Repository importModelWithSomeDocument() { + public void importModelWithSomeDocument() { Tower t = new Tower(); t.metamodel.with(Document.class); assert t.model.size() == 0; @@ -144,7 +135,6 @@ public Repository importModelWithSomeDocument() { assert d.terms.occurrences("to") == 2; assert d.terms.occurrences("or") == 1; assert d.terms.occurrences("not") == 1; - return t.model; } private static String normalizeWhitespace(String s) { From bb811d4ca464e6b7e0f7d15ca27e9d340666dec4 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:38:59 +0200 Subject: [PATCH 19/21] remove useless import --- lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java index 11e1178..0a0d328 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java +++ b/lib/src/test/java/ch/akuhn/fame/test/TermBagExample.java @@ -6,7 +6,6 @@ import java.util.List; import org.junit.Test; -import org.junit.runner.RunWith; import ch.akuhn.fame.FameDescription; import ch.akuhn.fame.FamePackage; From f9e05e7253302f645c3112d1723cd18c9ed21ddc Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:40:06 +0200 Subject: [PATCH 20/21] remove another JExample dependency --- .../ch/akuhn/fame/test/PolymorphismTest.java | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java b/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java index 73e0cfb..1186ee0 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/PolymorphismTest.java @@ -3,42 +3,30 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; -import org.junit.runner.RunWith; import ch.akuhn.fame.FameDescription; import ch.akuhn.fame.FameProperty; import ch.akuhn.fame.Tower; -import ch.unibe.jexample.Given; -import ch.unibe.jexample.Injection; -import ch.unibe.jexample.InjectionPolicy; -import ch.unibe.jexample.JExample; -@RunWith( JExample.class) -@Injection(InjectionPolicy.NONE) public class PolymorphismTest { @FameDescription - static class A { + static class A { @FameProperty public Object p; - } + } static class B extends A { - + } - + + @Test - public Tower tower() { + public void addPolymorphElement() { Tower t = new Tower(); t.metamodel.with(A.class); - return t; - } - - @Test - @Given("#tower") - public void addPolymorphElement(Tower t) { int metamodelSize = t.metamodel.size(); assertEquals(0, t.model.size()); t.model.add(new B()); From d3b2b69402a69f77b3f95c2f917e937a81984ba4 Mon Sep 17 00:00:00 2001 From: Benoit Verhaeghe Date: Wed, 23 Oct 2024 18:43:00 +0200 Subject: [PATCH 21/21] kill more ref to JExample --- .../ch/akuhn/fame/test/ArrayFieldTest.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java index c32a198..482402b 100644 --- a/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java +++ b/lib/src/test/java/ch/akuhn/fame/test/ArrayFieldTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; -import org.junit.runner.RunWith; import ch.akuhn.fame.FameDescription; import ch.akuhn.fame.FamePackage; @@ -12,15 +11,8 @@ import ch.akuhn.fame.Tower; import ch.akuhn.fame.fm3.MetaDescription; import ch.akuhn.fame.fm3.PropertyDescription; -import ch.unibe.jexample.Given; -import ch.unibe.jexample.Injection; -import ch.unibe.jexample.InjectionPolicy; -import ch.unibe.jexample.JExample; - @FamePackage("Test") -@RunWith(JExample.class) -@Injection(InjectionPolicy.NONE) public class ArrayFieldTest { @FameDescription @@ -30,7 +22,7 @@ private static class Dummy { } @Test - public Tower metamodel() { + public void metamodel() { Tower t = new Tower(); t.metamodel.with(Dummy.class); assertEquals(1, t.metamodel.allClassDescriptions().size()); @@ -39,12 +31,12 @@ public Tower metamodel() { assertEquals(true, prop.isMultivalued()); assertEquals(true, prop.isPrimitive()); assertEquals(MetaDescription.NUMBER, prop.getType()); - return t; } @Test - @Given("#metamodel") - public String exportModel(Tower t) { + public void exportModel() { + Tower t = new Tower(); + t.metamodel.with(Dummy.class); assertEquals(0, t.model.size()); Dummy d = new Dummy(); d.array = new float[] { 0.5f, 1.0f, 2.75f }; @@ -52,14 +44,21 @@ public String exportModel(Tower t) { assertEquals(1, t.model.size()); String mse = t.model.exportMSE(); assertTrue(mse.contains("(array 0.5 1.0 2.75)")); - return mse; } @Test - @Given("#exportModel") - public void importModel(String mse) { + public void importModel() { + // Init Tower t = new Tower(); t.metamodel.with(Dummy.class); + Dummy d = new Dummy(); + d.array = new float[] { 0.5f, 1.0f, 2.75f }; + t.model.add(d); + String mse = t.model.exportMSE(); + + // Tests + t = new Tower(); + t.metamodel.with(Dummy.class); assertEquals(0, t.model.size()); t.model.importMSE(mse); assertEquals(1, t.model.size());