Q: The PADL meta-model is qualified of semi-language independent. Why “semi”?
A: Because it is only for typed object-oriented programming languages. In any case, don't fall for people who would like to sell you “truly” language-independent meta-models, this is a dream!
Q: Which model has the most detailed data about a software system?
A: The IIdiomLevelModel. Actually, it is the IDesignLevelModel, which includes micro-architectures that are occurrences of some design motifs. However, occurrences are costly to identify so far…
Q: What are “actors” and “ghosts?
A: Actor can be any entity or element of a model, such as a Class, an Interface, a Method, a Field, and so on. It is a legacy name from PDL! A “ghost” is any entity known to exist but not currently analysed, such as classes and interfaces provided by the Java class libraries.
Q: What is the difference between AACRelationshipsAnalysis and ModelAnnotatorInstructions?
A: AACRelationshipsAnalysis does not provide any data about the inside of methods, such the lines of code, while ModelAnnotatorInstructions does.
Q: Are the metrics calculated automatically during PADL analysis?
A: No, separate calls must be performed to do it, cf. POM.
Q: Does a PADL model include the fields of other classes used by a method?
A: Yes… somewhat… through IMethodInvocation, which is kind of a hack… see PADL
Q: What the difference between a member class/interface and member ghost?
A: Membre classes/interfaces were added to the Java language after the definition of its first version and of the JVM going with it. Therefore, Java developers added membre classes/interfaces using a “hack”: if A defines a membre class MembreOfA, two classfiles are produced: one called A.class, another called A$MemberOfA.class. Thus, if you want to analyse membre classes/interfaces, you must also include in the CompleteClassFileCreator the X$Y.class files, else their corresponding membre classes/interfaces will show up as membre ghosts.
Q: When creating a model by hand, I receive the following warning in the Console, why, what does it mean, and what should I do?
## util.lang.ConcreteReceiverGuard reports a runtime deprecation: calling method "padl.kernel.impl.CodeLevelModel.create()" from class "sad.helper.SmellDetectionCaller"
## Please use the methods in "padl.generator.helper.ModelGenerator" to obtain code-level models.
Caused by: padl.kernel.exception.ModelDeclarationException:
padl.kernel.impl.GenericContainerOfNaturallyOrderedConstituents
reports a duplicate constituent
"org.eclipse.emf.ecore.resource.Resource$Factory$Registry"
(padl.kernel.impl.MemberGhost) in
"/argoUML026|org|eclipse|emf|ecore|resource|org.eclipse.emf.ecore.resource..Resource"
(padl.kernel.impl.Ghost)
A: No need to worry, such exceptions only means that, somehow, the same constituent is being created more than once from different sources so only one such constituent is kept and the other are discarded. This can only be a worry if different sources provide different constituents with the same path.