Summary: | java import : ERROR on multidimensional arrays | ||
---|---|---|---|
Product: | [Applications] umbrello | Reporter: | JP Fournier <jfournier121> |
Component: | general | Assignee: | Umbrello Development Group <umbrello-devel> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Slackware | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: | patch: Handle multidimensional arrays by recusively calling joinTypename |
Description
JP Fournier
2006-08-07 18:34:20 UTC
Created attachment 17270 [details]
patch: Handle multidimensional arrays by recusively calling joinTypename
SVN commit 570799 by okellogg:
Attachment 17270 [details] from JP Fournier fixes handling of multidimensional arrays by
recusively calling joinTypename().
Renamed the static members to conform to the naming convention (prefix s_)
BUG:132017
M +1 -0 ChangeLog
M +21 -15 umbrello/codeimport/javaimport.cpp
M +10 -3 umbrello/codeimport/javaimport.h
--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #570798:570799
@@ -6,6 +6,7 @@
* Python code generation not independent of diagram view (131790)
* Java import - method parameter types not resolved correctly (131825)
* Java import: unable to import AzareusCore (131961)
+* Java import: error on multidimensional arrays (132017)
Version 1.5.4
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/codeimport/javaimport.cpp #570798:570799
@@ -29,12 +29,11 @@
#include "../operation.h"
#include "../attribute.h"
-QStringList JavaImport::m_filesAlreadyParsed;
-int JavaImport::m_parseDepth = 0;
+QStringList JavaImport::s_filesAlreadyParsed;
+int JavaImport::s_parseDepth = 0;
JavaImport::JavaImport() : NativeImportBase("//") {
setMultiLineComment("/*", "*/");
- //m_parseDepth = 0;
initVars();
}
@@ -46,8 +45,7 @@
}
/// Catenate possible template arguments/array dimensions to the end of the type name.
-QString JavaImport::joinTypename() {
- QString typeName = m_source[m_srcIndex];
+QString JavaImport::joinTypename(QString typeName) {
if (m_source[m_srcIndex + 1] == "<" ||
m_source[m_srcIndex + 1] == "[") {
uint start = ++m_srcIndex;
@@ -57,6 +55,10 @@
typeName += m_source[i];
}
}
+ // to handle multidimensional arrays, call recursively
+ if (m_source[m_srcIndex + 1] == "[") {
+ typeName = joinTypename( typeName );
+ }
return typeName;
}
@@ -136,16 +138,15 @@
void JavaImport::spawnImport( QString file ) {
// if the file is being parsed, don't bother
//
- if (m_filesAlreadyParsed.contains( file ) ) {
+ if (s_filesAlreadyParsed.contains( file ) ) {
return;
}
if (QFile::exists(file)) {
JavaImport importer;
QStringList fileList;
fileList.append( file );
- m_filesAlreadyParsed.append( file );
+ s_filesAlreadyParsed.append( file );
importer.importFiles( fileList );
-
}
}
@@ -236,14 +237,17 @@
// public for member vars and methods
m_defaultCurrentAccess = Uml::Visibility::Implementation;
m_currentAccess = m_defaultCurrentAccess;
- m_parseDepth++;
+ s_parseDepth++;
+ // in the case of self referencing types, we can avoid parsing the
+ // file twice by adding it to the list
+ s_filesAlreadyParsed.append(filename);
NativeImportBase::parseFile(filename);
- m_parseDepth--;
- if ( m_parseDepth <= 0 ) {
+ s_parseDepth--;
+ if ( s_parseDepth <= 0 ) {
// if the user decides to clear things out and reparse, we need
// to honour the request, so reset things for next time.
- m_filesAlreadyParsed.clear();
- m_parseDepth = 0;
+ s_filesAlreadyParsed.clear();
+ s_parseDepth = 0;
}
}
@@ -452,7 +456,8 @@
kdError() << "importJava: ignoring " << keyword << endl;
return false;
}
- QString typeName = joinTypename();
+ QString typeName = m_source[m_srcIndex];
+ typeName = joinTypename(typeName);
// At this point we need a class.
if (m_klass == NULL) {
kdError() << "importJava: no class set for " << typeName << endl;
@@ -477,7 +482,8 @@
UMLOperation *op = Import_Utils::makeOperation(m_klass, name);
m_srcIndex++;
while (m_srcIndex < srcLength && m_source[m_srcIndex] != ")") {
- QString typeName = joinTypename();
+ QString typeName = m_source[m_srcIndex];
+ typeName = joinTypename(typeName);
QString parName = advance();
// the Class might not be resolved yet so resolve it if necessary
UMLObject *obj = resolveClass(typeName);
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/codeimport/javaimport.h #570798:570799
@@ -68,7 +68,14 @@
*/
void spawnImport(QString file);
- QString joinTypename();
+ /**
+ * figure out if the type is really an array or template of the given typeName
+ */
+ QString joinTypename(QString typeName);
+
+ /**
+ * true if the member var or method is declared static
+ */
bool m_isStatic;
/**
@@ -90,13 +97,13 @@
* Keep track of the files we have already parsed so we don't
* reparse the same ones over and over again.
*/
- static QStringList m_filesAlreadyParsed;
+ static QStringList s_filesAlreadyParsed;
/**
* Keep track of the parses so that the filesAlreadyParsed
* can be reset when we're done.
*/
- static int m_parseDepth;
+ static int s_parseDepth;
/**
* The current visibility for when the visibility is absent
|