diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-07-14 17:04:30 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-07-16 11:56:44 +0200 |
commit | f7973489aef74b1df55f7466cd176e14bbfa76d0 (patch) | |
tree | b9be29a1a857082768a341a87081affdfd99cf36 /src/lib/corelib/language | |
parent | a623153d2b1af3490bab8885f0b3b768511cb42f (diff) |
deprecate Artifact.fileName in favor of Artifact.filePath
This property is actually a file path, not a mere name.
Task-number: QBS-579
Change-Id: I04e8f03eac97b5f86fe743a4923888a3d2a82c5d
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r-- | src/lib/corelib/language/builtindeclarations.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/language.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/language/language.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 51 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.h | 4 |
5 files changed, 53 insertions, 12 deletions
diff --git a/src/lib/corelib/language/builtindeclarations.cpp b/src/lib/corelib/language/builtindeclarations.cpp index 2f97d7158..85eedf843 100644 --- a/src/lib/corelib/language/builtindeclarations.cpp +++ b/src/lib/corelib/language/builtindeclarations.cpp @@ -129,7 +129,9 @@ void BuiltinDeclarations::addArtifactItem() { ItemDeclaration item(QLatin1String("Artifact")); item << conditionProperty(); + // ### remove Artifact.fileName in qbs 1.4 item << PropertyDeclaration(QLatin1String("fileName"), PropertyDeclaration::Verbatim); + item << PropertyDeclaration(QLatin1String("filePath"), PropertyDeclaration::Verbatim); item << PropertyDeclaration(QLatin1String("fileTags"), PropertyDeclaration::Variant); PropertyDeclaration decl(QLatin1String("alwaysUpdated"), PropertyDeclaration::Boolean); decl.setInitialValueSource(QLatin1String("true")); diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index d7815938e..6b90011d3 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -202,7 +202,7 @@ void ResolvedGroup::store(PersistentPool &pool) const void RuleArtifact::load(PersistentPool &pool) { pool.stream() - >> fileName + >> filePath >> fileTags >> alwaysUpdated >> location; @@ -221,7 +221,7 @@ void RuleArtifact::load(PersistentPool &pool) void RuleArtifact::store(PersistentPool &pool) const { pool.stream() - << fileName + << filePath << fileTags << alwaysUpdated << location; @@ -1281,7 +1281,7 @@ bool operator==(const RuleArtifact &a1, const RuleArtifact &a2) return true; if (!&a1 != !&a2) return false; - return a1.fileName == a2.fileName + return a1.filePath == a2.filePath && a1.fileTags == a2.fileTags && a1.alwaysUpdated == a2.alwaysUpdated && a1.bindings.toList().toSet() == a2.bindings.toList().toSet(); diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index e7df3232e..bff76aab8 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -94,7 +94,7 @@ class RuleArtifact : public PersistentObject public: static RuleArtifactPtr create() { return RuleArtifactPtr(new RuleArtifact); } - QString fileName; + QString filePath; FileTags fileTags; bool alwaysUpdated; CodeLocation location; diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 9f7f5fb78..a30422cf8 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -129,19 +129,24 @@ void ProjectResolver::checkCancelation() const } } -QString ProjectResolver::verbatimValue(const ValueConstPtr &value) const +QString ProjectResolver::verbatimValue(const ValueConstPtr &value, bool *propertyWasSet) const { QString result; if (value && value->type() == Value::JSSourceValueType) { const JSSourceValueConstPtr sourceValue = value.staticCast<const JSSourceValue>(); result = sourceValue->sourceCodeForEvaluation(); + if (propertyWasSet) + *propertyWasSet = (result != QLatin1String("undefined")); + } else { + if (propertyWasSet) + *propertyWasSet = false; } return result; } -QString ProjectResolver::verbatimValue(Item *item, const QString &name) const +QString ProjectResolver::verbatimValue(Item *item, const QString &name, bool *propertyWasSet) const { - return verbatimValue(item->property(name)); + return verbatimValue(item->property(name), propertyWasSet); } void ProjectResolver::ignoreItem(Item *item, ProjectContext *projectContext) @@ -675,7 +680,24 @@ void ProjectResolver::resolveRuleArtifact(const RulePtr &rule, Item *item, RuleArtifactPtr artifact = RuleArtifact::create(); rule->artifacts += artifact; artifact->location = item->location(); - artifact->fileName = verbatimValue(item, QLatin1String("fileName")); + + bool filePathSet; + artifact->filePath = verbatimValue(item, QLatin1String("filePath"), &filePathSet); + + // ### remove Artifact.fileName in qbs 1.4 + bool fileNameSet; + const QString deprecatedFileName = verbatimValue(item, QLatin1String("fileName"), &fileNameSet); + if (fileNameSet) { + if (filePathSet) { + throw ErrorInfo(Tr::tr("Artifact.fileName and Artifact.filePath cannot both be set."), + item->location()); + } + artifact->filePath = deprecatedFileName; + m_logger.printWarning(ErrorInfo(Tr::tr("The property Artifact.fileName is deprecated. " + "Please use Artifact.filePath instead."), + item->location())); + } + artifact->fileTags = m_evaluator->fileTagsValue(item, QLatin1String("fileTags")); artifact->alwaysUpdated = m_evaluator->boolValue(item, QLatin1String("alwaysUpdated")); if (artifact->alwaysUpdated) @@ -765,9 +787,26 @@ void ProjectResolver::resolveTransformer(Item *item, ProjectContext *projectCont throw ErrorInfo(Tr::tr("Transformer: wrong child type '%0'.").arg(child->typeName())); SourceArtifactPtr artifact = SourceArtifact::create(); artifact->properties = m_productContext->product->moduleProperties; - QString fileName = m_evaluator->stringValue(child, QLatin1String("fileName")); + // ### remove Artifact.fileName in qbs 1.4 + bool fileNameSet; + QString fileName = m_evaluator->stringValue(child, QLatin1String("fileName"), QString(), + &fileNameSet); + bool filePathSet; + QString filePath = m_evaluator->stringValue(child, QLatin1String("filePath"), QString(), + &filePathSet); + if (fileNameSet && filePathSet) { + throw ErrorInfo(Tr::tr("Artifact.fileName and Artifact.filePath cannot both be set."), + child->location()); + } + if (fileNameSet) { + m_logger.printWarning(ErrorInfo(Tr::tr("The property Artifact.fileName is deprecated. " + "Please use Artifact.filePath instead."), + child->location())); + } else { + fileName = filePath; + } if (Q_UNLIKELY(fileName.isEmpty())) - throw ErrorInfo(Tr::tr("Artifact fileName must not be empty.")); + throw ErrorInfo(Tr::tr("Artifact.filePath must not be empty.")); artifact->absoluteFilePath = FileInfo::resolvePath(m_productContext->buildDirectory, fileName); artifact->fileTags = m_evaluator->fileTagsValue(child, QLatin1String("fileTags")); diff --git a/src/lib/corelib/language/projectresolver.h b/src/lib/corelib/language/projectresolver.h index 422f4d4ce..ab1bfd6a2 100644 --- a/src/lib/corelib/language/projectresolver.h +++ b/src/lib/corelib/language/projectresolver.h @@ -91,8 +91,8 @@ private: }; void checkCancelation() const; - QString verbatimValue(const ValueConstPtr &value) const; - QString verbatimValue(Item *item, const QString &name) const; + QString verbatimValue(const ValueConstPtr &value, bool *propertyWasSet = 0) const; + QString verbatimValue(Item *item, const QString &name, bool *propertyWasSet = 0) const; ScriptFunctionPtr scriptFunctionValue(Item *item, const QString &name) const; ResolvedFileContextPtr resolvedFileContext(const FileContextConstPtr &ctx) const; void ignoreItem(Item *item, ProjectContext *projectContext); |