C++ reversing not working [message #1815391] |
Wed, 02 October 2019 07:52 |
Jozsef Klespitz Messages: 34 Registered: September 2019 |
Member |
|
|
Hello everyone,
I am getting familiar with Papyrus and right after the beginnig I am stucked.
I tried to reverse a C++ class with papyrus and all my attempts have failed:
Right-click on folder->Reverse->To new UML model: happens nothing (literally, not even an error message)
Right-click on header file->Reverse->To new UML model: happens nothing
Right-click on footer file->Reverse->To new UML model: happens nothing
Open class header->rigtht-click on code->Reverse->To new UML model: results NullpointerException (log at the end of message), but an empty folder "reverse_model" is created
Open class footer->rigtht-click on code->Reverse->To new UML model: results NullpointerException , but an empty folder "reverse_model" is created
Drag and drop header file to a class diagram: reverse java dialog opens, cannot access reverse C++ feature
I appreciate any suggestions. Thank you for your kind help.
eclipse.buildId=4.13.0.I20190916-1045
java.version=1.8.0_222
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Framework arguments: -product org.eclipse.epp.package.cpp.product
Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.cpp.product
Papyrus C++ profile, view and code generation (Incubation) v1.1.0
Papyrus Designer Transformation, develop and deploy... v0.8.0
Papyrus Java profile, library, ... v1.1.0
java.lang.NullPointerException
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.getContainerPackage(ReverseCpp2Uml.java:3477)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.getOrCreateClassifier(ReverseCpp2Uml.java:728)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.reverseHeader(ReverseCpp2Uml.java:636)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.access$4(ReverseCpp2Uml.java:633)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$10.accept(ReverseCpp2Uml.java:564)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$10.accept(ReverseCpp2Uml.java:1)
at com.google.common.collect.Iterables$4.lambda$forEach$0(Iterables.java:568)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.google.common.collect.Iterables$4.forEach(Iterables.java:565)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.reverseProject(ReverseCpp2Uml.java:567)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.access$2(ReverseCpp2Uml.java:553)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$11.accept(ReverseCpp2Uml.java:573)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$11.accept(ReverseCpp2Uml.java:1)
at com.google.common.collect.Iterables$4.lambda$forEach$0(Iterables.java:568)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.google.common.collect.Iterables$4.forEach(Iterables.java:565)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.reverseProject(ReverseCpp2Uml.java:576)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.access$2(ReverseCpp2Uml.java:553)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$11.accept(ReverseCpp2Uml.java:573)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$11.accept(ReverseCpp2Uml.java:1)
at com.google.common.collect.Iterables$4.lambda$forEach$0(Iterables.java:568)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.google.common.collect.Iterables$4.forEach(Iterables.java:565)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.reverseProject(ReverseCpp2Uml.java:576)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.access$2(ReverseCpp2Uml.java:553)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$11.accept(ReverseCpp2Uml.java:573)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$11.accept(ReverseCpp2Uml.java:1)
at com.google.common.collect.Iterables$4.lambda$forEach$0(Iterables.java:568)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.google.common.collect.Iterables$4.forEach(Iterables.java:565)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.reverseProject(ReverseCpp2Uml.java:576)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.access$2(ReverseCpp2Uml.java:553)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$5.accept(ReverseCpp2Uml.java:423)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml$5.accept(ReverseCpp2Uml.java:1)
at java.lang.Iterable.forEach(Iterable.java:75)
at org.eclipse.papyrus.designer.languages.cpp.reverse.reverse.ReverseCpp2Uml.reverseProject(ReverseCpp2Uml.java:426)
at org.eclipse.papyrus.designer.languages.cpp.reverse.ui.handler.ReverseToNewUmlModel$1.run(ReverseToNewUmlModel.java:101)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
|
|
|
|
|
|
|
Re: C++ reversing not working [message #1816127 is a reply to message #1815876] |
Mon, 21 October 2019 15:39 |
|
Which OS are you using? I'm using Linux and can imagine that path names, eventual spaces in it and their separation could be a problem. I quote the code of getContainerPackage below. Can you please import the source of plugin org.eclipse.papyrus.designer.languages.cpp.reverse (available on git) into your workspace, place a breakpoint at the beginning and then try the reverse operation in the 2nd Eclipse instance. Is unit already null in the first place? Is the model returned by the function "correspondingModel" null? Is there a problem to split the path using "/"?
Thanks
Ansgar
private def getContainerPackage(ITranslationUnit unit) {
var model = unit.correspondingModel
var unitPath = unit.file.projectRelativePath.toString
if (unitPath === null || unitPath.equals("")) {
unitPath = unit.location.toString
}
val arrayNames = unitPath.split("/" + model.name + "/").last.split("/")
val names = new ArrayList<String>
arrayNames.forEach[names.add(it)]
// names.remove(0)
var Package parentPack = model
for (name : names) {
if (!name.equals(unit.elementName)) {
if (parentPack.getNestedPackage(name) === null) {
parentPack.createNestedPackage(name)
}
parentPack = parentPack.getNestedPackage(name)
}
}
parentPack
}
|
|
|
Powered by
FUDForum. Page generated in 0.03613 seconds