forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/3.5'
Change-Id: Ife5fdcd71b0adc99d4297a28a64515e9e93d7864
This commit is contained in:
@@ -12,4 +12,5 @@
|
|||||||
<MaintenanceToolName>QtCreatorUninst</MaintenanceToolName>
|
<MaintenanceToolName>QtCreatorUninst</MaintenanceToolName>
|
||||||
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
|
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
|
||||||
<TargetDir>@rootDir@/Qt/qtcreator-{version}</TargetDir>
|
<TargetDir>@rootDir@/Qt/qtcreator-{version}</TargetDir>
|
||||||
|
<StartMenuDir>Qt Creator</StartMenuDir>
|
||||||
</Installer>
|
</Installer>
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ Component.prototype.createOperations = function()
|
|||||||
{
|
{
|
||||||
component.addOperation( "CreateShortcut",
|
component.addOperation( "CreateShortcut",
|
||||||
component.qtCreatorBinaryPath,
|
component.qtCreatorBinaryPath,
|
||||||
"@StartMenuDir@/Qt Creator.lnk",
|
"@StartMenuDir@/Qt Creator " + installer.value("ProductVersion") + ".lnk",
|
||||||
"workingDirectory=@homeDir@" );
|
"workingDirectory=@homeDir@" );
|
||||||
|
|
||||||
// only install c runtime if it is needed, no minor version check of the c runtime till we need it
|
// only install c runtime if it is needed, no minor version check of the c runtime till we need it
|
||||||
|
|||||||
@@ -17,5 +17,4 @@
|
|||||||
<UserInterface>associatecommonfiletypesform.ui</UserInterface>
|
<UserInterface>associatecommonfiletypesform.ui</UserInterface>
|
||||||
<UserInterface>launchqtcreatorcheckboxform.ui</UserInterface>
|
<UserInterface>launchqtcreatorcheckboxform.ui</UserInterface>
|
||||||
</UserInterfaces>
|
</UserInterfaces>
|
||||||
<StartMenuDir>Qt Creator {version}</StartMenuDir>
|
|
||||||
</Package>
|
</Package>
|
||||||
|
|||||||
@@ -110,10 +110,10 @@
|
|||||||
|
|
||||||
Starting with version 3.1, \QC requires the Python scripting extension. GDB
|
Starting with version 3.1, \QC requires the Python scripting extension. GDB
|
||||||
builds without Python scripting are not supported anymore and will not work.
|
builds without Python scripting are not supported anymore and will not work.
|
||||||
The minimal supported version is GDB 7.5 using Python version 2.7, or 3.3,
|
The minimum supported version is GDB 7.5 using Python version 2.7, or 3.3,
|
||||||
or newer.
|
or newer.
|
||||||
|
|
||||||
For remote debugging using GDB and GDB server, the minimal supported version
|
For remote debugging using GDB and GDB server, the minimum supported version
|
||||||
of GDB server on the target device is 7.0.
|
of GDB server on the target device is 7.0.
|
||||||
|
|
||||||
\section2 Supported CDB Versions
|
\section2 Supported CDB Versions
|
||||||
@@ -128,9 +128,10 @@
|
|||||||
LLDB is typically used with the Clang compiler (even though you can use it
|
LLDB is typically used with the Clang compiler (even though you can use it
|
||||||
with GCC, too).
|
with GCC, too).
|
||||||
|
|
||||||
You can use the LLDB version delivered with Xcode, but we recommend that you
|
On OS X you can use the LLDB version delivered with Xcode or build from source.
|
||||||
build it from sources using Xcode. The minimal supported version is LLDB
|
The minimum supported version is LLDB 320.4.
|
||||||
179.5.
|
|
||||||
|
On Linux, the minimum supported version is LLDB 3.7.
|
||||||
|
|
||||||
\omit
|
\omit
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%{Cpp:LicenseTemplate}\
|
%{Cpp:LicenseTemplate}\
|
||||||
%{JS: QtSupport.qtIncludes([], ["QGui/QGuiApplication", "QQml/QQmlApplicationEngine"])}
|
%{JS: QtSupport.qtIncludes([], ["QtGui/QGuiApplication", "QtQml/QQmlApplicationEngine"])}
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QGuiApplication app(argc, argv);
|
QGuiApplication app(argc, argv);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
//
|
//
|
||||||
// Draws a cube that has different colors assigned to the vertices.
|
// Draws a plain green cube.
|
||||||
// Each face of the cube has the linear interpolation of the corner colors.
|
|
||||||
//
|
//
|
||||||
|
|
||||||
var gl;
|
var gl;
|
||||||
@@ -8,10 +7,8 @@ var vertexPositionAttrLoc;
|
|||||||
var shaderProgram;
|
var shaderProgram;
|
||||||
var cubeVertexPositionBuffer;
|
var cubeVertexPositionBuffer;
|
||||||
var cubeVertexIndexBuffer;
|
var cubeVertexIndexBuffer;
|
||||||
var cubeVertexColorBuffer;
|
|
||||||
var vertexShader;
|
var vertexShader;
|
||||||
var fragmentShader;
|
var fragmentShader;
|
||||||
var vertexColorAttrLoc;
|
|
||||||
var pMatrixUniformLoc;
|
var pMatrixUniformLoc;
|
||||||
var mvMatrixUniformLoc;
|
var mvMatrixUniformLoc;
|
||||||
|
|
||||||
@@ -26,7 +23,6 @@ function initializeGL(canvas) {
|
|||||||
|
|
||||||
// Setup the OpenGL state
|
// Setup the OpenGL state
|
||||||
gl.enable(gl.DEPTH_TEST);
|
gl.enable(gl.DEPTH_TEST);
|
||||||
gl.enable(gl.DEPTH_WRITE);
|
|
||||||
gl.depthMask(true);
|
gl.depthMask(true);
|
||||||
gl.enable(gl.CULL_FACE);
|
gl.enable(gl.CULL_FACE);
|
||||||
gl.cullFace(gl.BACK);
|
gl.cullFace(gl.BACK);
|
||||||
@@ -35,7 +31,7 @@ function initializeGL(canvas) {
|
|||||||
// Set viewport
|
// Set viewport
|
||||||
gl.viewport(0, 0, canvas.width * canvas.devicePixelRatio, canvas.height * canvas.devicePixelRatio);
|
gl.viewport(0, 0, canvas.width * canvas.devicePixelRatio, canvas.height * canvas.devicePixelRatio);
|
||||||
|
|
||||||
// Initialize vertex and color buffers
|
// Initialize vertex and element array buffers
|
||||||
initBuffers();
|
initBuffers();
|
||||||
|
|
||||||
// Initialize the shader program
|
// Initialize the shader program
|
||||||
@@ -78,17 +74,13 @@ function paintGL(canvas) {
|
|||||||
gl.enableVertexAttribArray(vertexPositionAttrLoc);
|
gl.enableVertexAttribArray(vertexPositionAttrLoc);
|
||||||
gl.vertexAttribPointer(vertexPositionAttrLoc, 3, gl.FLOAT, false, 0, 0);
|
gl.vertexAttribPointer(vertexPositionAttrLoc, 3, gl.FLOAT, false, 0, 0);
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer);
|
|
||||||
gl.enableVertexAttribArray(vertexColorAttrLoc);
|
|
||||||
gl.vertexAttribPointer(vertexColorAttrLoc, 4, gl.FLOAT, false, 0, 0);
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
|
||||||
gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0);
|
gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initBuffers() {
|
function initBuffers() {
|
||||||
// Create a cubeVertexPositionBuffer and put a single clipspace rectangle in
|
// Create a buffer for cube vertices. Since we are not using textures, we don't need unique
|
||||||
// it (2 triangles)
|
// vertices for each face. We can define the cube using 8 vertices.
|
||||||
cubeVertexPositionBuffer = gl.createBuffer();
|
cubeVertexPositionBuffer = gl.createBuffer();
|
||||||
cubeVertexPositionBuffer.name = "cubeVertexPositionBuffer";
|
cubeVertexPositionBuffer.name = "cubeVertexPositionBuffer";
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexPositionBuffer);
|
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexPositionBuffer);
|
||||||
@@ -107,6 +99,8 @@ function initBuffers() {
|
|||||||
]),
|
]),
|
||||||
gl.STATIC_DRAW);
|
gl.STATIC_DRAW);
|
||||||
|
|
||||||
|
// Create buffer for element array indices. We define six sides, each composed of two
|
||||||
|
// triangles, using the vertices defined above.
|
||||||
cubeVertexIndexBuffer = gl.createBuffer();
|
cubeVertexIndexBuffer = gl.createBuffer();
|
||||||
cubeVertexIndexBuffer.name = "cubeVertexIndexBuffer";
|
cubeVertexIndexBuffer.name = "cubeVertexIndexBuffer";
|
||||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVertexIndexBuffer);
|
||||||
@@ -131,36 +125,17 @@ function initBuffers() {
|
|||||||
6, 2, 1
|
6, 2, 1
|
||||||
]),
|
]),
|
||||||
gl.STATIC_DRAW);
|
gl.STATIC_DRAW);
|
||||||
|
|
||||||
cubeVertexColorBuffer = gl.createBuffer();
|
|
||||||
cubeVertexColorBuffer.name = "cubeVertexColorBuffer";
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, cubeVertexColorBuffer);
|
|
||||||
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([// front
|
|
||||||
0.000, 1.000, 0.000,
|
|
||||||
1.000, 0.000, 1.000,
|
|
||||||
1.000, 1.000, 0.000,
|
|
||||||
1.000, 0.000, 0.000,
|
|
||||||
// back
|
|
||||||
0.435, 0.602, 0.223,
|
|
||||||
0.310, 0.747, 0.185,
|
|
||||||
1.000, 1.000, 1.000,
|
|
||||||
0.000, 0.000, 1.000
|
|
||||||
]), gl.STATIC_DRAW);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function initShaders() {
|
function initShaders() {
|
||||||
vertexShader = getShader(gl, "attribute highp vec3 aVertexPosition; \
|
vertexShader = getShader(gl, "attribute highp vec3 aVertexPosition; \
|
||||||
attribute highp vec4 aVertexColor; \
|
|
||||||
uniform highp mat4 uMVMatrix; \
|
uniform highp mat4 uMVMatrix; \
|
||||||
uniform highp mat4 uPMatrix; \
|
uniform highp mat4 uPMatrix; \
|
||||||
varying highp vec4 vColor; \
|
|
||||||
void main(void) { \
|
void main(void) { \
|
||||||
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); \
|
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); \
|
||||||
vColor = aVertexColor; \
|
|
||||||
}", gl.VERTEX_SHADER);
|
}", gl.VERTEX_SHADER);
|
||||||
fragmentShader = getShader(gl, "varying highp vec4 vColor; \
|
fragmentShader = getShader(gl, "void main(void) { \
|
||||||
void main(void) { \
|
gl_FragColor = vec4(0.5, 0.76, 0.26, 1.0); \
|
||||||
gl_FragColor = vColor; \
|
|
||||||
}", gl.FRAGMENT_SHADER);
|
}", gl.FRAGMENT_SHADER);
|
||||||
|
|
||||||
shaderProgram = gl.createProgram();
|
shaderProgram = gl.createProgram();
|
||||||
@@ -179,8 +154,6 @@ function initShaders() {
|
|||||||
// look up where the vertex data needs to go.
|
// look up where the vertex data needs to go.
|
||||||
vertexPositionAttrLoc = gl.getAttribLocation(shaderProgram, "aVertexPosition");
|
vertexPositionAttrLoc = gl.getAttribLocation(shaderProgram, "aVertexPosition");
|
||||||
gl.enableVertexAttribArray(vertexPositionAttrLoc);
|
gl.enableVertexAttribArray(vertexPositionAttrLoc);
|
||||||
vertexColorAttrLoc = gl.getAttribLocation(shaderProgram, "aVertexColor");
|
|
||||||
gl.enableVertexAttribArray(vertexColorAttrLoc);
|
|
||||||
|
|
||||||
pMatrixUniformLoc = gl.getUniformLocation(shaderProgram, "uPMatrix");
|
pMatrixUniformLoc = gl.getUniformLocation(shaderProgram, "uPMatrix");
|
||||||
pMatrixUniformLoc.name = "pMatrixUniformLoc";
|
pMatrixUniformLoc.name = "pMatrixUniformLoc";
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -13,6 +13,7 @@ function initializeGL(canvas) {
|
|||||||
shading: THREE.SmoothShading });
|
shading: THREE.SmoothShading });
|
||||||
var cubeGeometry = new THREE.BoxGeometry(1, 1, 1);
|
var cubeGeometry = new THREE.BoxGeometry(1, 1, 1);
|
||||||
cube = new THREE.Mesh(cubeGeometry, material);
|
cube = new THREE.Mesh(cubeGeometry, material);
|
||||||
|
cube.rotation.set(0.785, 0.785, 0.0);
|
||||||
scene.add(cube);
|
scene.add(cube);
|
||||||
|
|
||||||
renderer = new THREE.Canvas3DRenderer(
|
renderer = new THREE.Canvas3DRenderer(
|
||||||
@@ -29,8 +30,5 @@ function resizeGL(canvas) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function paintGL(canvas) {
|
function paintGL(canvas) {
|
||||||
cube.rotation.x += 0.01;
|
|
||||||
cube.rotation.y += 0.01;
|
|
||||||
|
|
||||||
renderer.render(scene, camera);
|
renderer.render(scene, camera);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%{Cpp:LicenseTemplate}\
|
%{Cpp:LicenseTemplate}\
|
||||||
%{JS: QtSupport.qtIncludes([], ["QGui/QGuiApplication", "QQml/QQmlApplicationEngine"])}
|
%{JS: QtSupport.qtIncludes([], ["QtGui/QGuiApplication", "QtQml/QQmlApplicationEngine"])}
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QGuiApplication app(argc, argv);
|
QGuiApplication app(argc, argv);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%{Cpp:LicenseTemplate}\
|
%{Cpp:LicenseTemplate}\
|
||||||
%{JS: QtSupport.qtIncludes([], [%{UseQApplication} ? "QWidgets/QApplication" : "QtGui/QGuiApplication", "QQml/QQmlApplicationEngine"])}
|
%{JS: QtSupport.qtIncludes([], [%{UseQApplication} ? "QtWidgets/QApplication" : "QtGui/QGuiApplication", "QtQml/QQmlApplicationEngine"])}
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@if %{UseQApplication}
|
@if %{UseQApplication}
|
||||||
|
|||||||
@@ -2129,7 +2129,7 @@ void Preprocessor::maybeStartOutputLine()
|
|||||||
// If previous line ends with \ (possibly followed by whitespace), add another \n
|
// If previous line ends with \ (possibly followed by whitespace), add another \n
|
||||||
const char *start = buffer.constData();
|
const char *start = buffer.constData();
|
||||||
const char *ch = start + buffer.length() - 2;
|
const char *ch = start + buffer.length() - 2;
|
||||||
while (ch > start && (*ch != '\n') && std::isspace(*ch))
|
while (ch > start && (*ch != '\n') && pp_isspace(*ch))
|
||||||
--ch;
|
--ch;
|
||||||
if (*ch == '\\')
|
if (*ch == '\\')
|
||||||
buffer.append('\n');
|
buffer.append('\n');
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ ClangEditorDocumentProcessor::ClangEditorDocumentProcessor(
|
|||||||
TextEditor::TextDocument *document)
|
TextEditor::TextDocument *document)
|
||||||
: BaseEditorDocumentProcessor(document)
|
: BaseEditorDocumentProcessor(document)
|
||||||
, m_modelManagerSupport(modelManagerSupport)
|
, m_modelManagerSupport(modelManagerSupport)
|
||||||
, m_parser(document->filePath().toString())
|
, m_parser(new ClangEditorDocumentParser(document->filePath().toString()))
|
||||||
, m_parserRevision(0)
|
, m_parserRevision(0)
|
||||||
, m_semanticHighlighter(document)
|
, m_semanticHighlighter(document)
|
||||||
, m_builtinProcessor(document, /*enableSemanticHighlighter=*/ false)
|
, m_builtinProcessor(document, /*enableSemanticHighlighter=*/ false)
|
||||||
@@ -95,7 +95,7 @@ ClangEditorDocumentProcessor::ClangEditorDocumentProcessor(
|
|||||||
const int firstLine = 1;
|
const int firstLine = 1;
|
||||||
const int lastLine = baseTextDocument()->document()->blockCount();
|
const int lastLine = baseTextDocument()->document()->blockCount();
|
||||||
|
|
||||||
CreateMarkers *createMarkers = CreateMarkers::create(m_parser.semanticMarker(),
|
CreateMarkers *createMarkers = CreateMarkers::create(m_parser->semanticMarker(),
|
||||||
baseTextDocument()->filePath().toString(),
|
baseTextDocument()->filePath().toString(),
|
||||||
firstLine, lastLine);
|
firstLine, lastLine);
|
||||||
return createMarkers->start();
|
return createMarkers->start();
|
||||||
@@ -152,9 +152,9 @@ CppTools::SemanticInfo ClangEditorDocumentProcessor::recalculateSemanticInfo()
|
|||||||
return m_builtinProcessor.recalculateSemanticInfo();
|
return m_builtinProcessor.recalculateSemanticInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
CppTools::BaseEditorDocumentParser *ClangEditorDocumentProcessor::parser()
|
CppTools::BaseEditorDocumentParser::Ptr ClangEditorDocumentProcessor::parser()
|
||||||
{
|
{
|
||||||
return &m_parser;
|
return m_parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlusPlus::Snapshot ClangEditorDocumentProcessor::snapshot()
|
CPlusPlus::Snapshot ClangEditorDocumentProcessor::snapshot()
|
||||||
@@ -188,7 +188,7 @@ ClangEditorDocumentProcessor *ClangEditorDocumentProcessor::get(const QString &f
|
|||||||
|
|
||||||
void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor()
|
void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor()
|
||||||
{
|
{
|
||||||
const CppTools::ProjectPart::Ptr projectPart = m_parser.projectPart();
|
const CppTools::ProjectPart::Ptr projectPart = m_parser->projectPart();
|
||||||
QTC_ASSERT(projectPart, return);
|
QTC_ASSERT(projectPart, return);
|
||||||
|
|
||||||
updateTranslationUnitForEditor(*projectPart.data());
|
updateTranslationUnitForEditor(*projectPart.data());
|
||||||
@@ -203,7 +203,7 @@ void ClangEditorDocumentProcessor::onParserFinished()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Emit ifdefed out blocks
|
// Emit ifdefed out blocks
|
||||||
const auto ifdefoutBlocks = toTextEditorBlocks(m_parser.ifdefedOutBlocks());
|
const auto ifdefoutBlocks = toTextEditorBlocks(m_parser->ifdefedOutBlocks());
|
||||||
emit ifdefedOutBlocksUpdated(revision(), ifdefoutBlocks);
|
emit ifdefedOutBlocksUpdated(revision(), ifdefoutBlocks);
|
||||||
|
|
||||||
// Run semantic highlighter
|
// Run semantic highlighter
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public:
|
|||||||
void semanticRehighlight() override;
|
void semanticRehighlight() override;
|
||||||
void recalculateSemanticInfoDetached(bool force) override;
|
void recalculateSemanticInfoDetached(bool force) override;
|
||||||
CppTools::SemanticInfo recalculateSemanticInfo() override;
|
CppTools::SemanticInfo recalculateSemanticInfo() override;
|
||||||
CppTools::BaseEditorDocumentParser *parser() override;
|
CppTools::BaseEditorDocumentParser::Ptr parser() override;
|
||||||
CPlusPlus::Snapshot snapshot() override;
|
CPlusPlus::Snapshot snapshot() override;
|
||||||
bool isParserRunning() const override;
|
bool isParserRunning() const override;
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
QPointer<ModelManagerSupportClang> m_modelManagerSupport;
|
QPointer<ModelManagerSupportClang> m_modelManagerSupport;
|
||||||
std::vector<ClangTextMark> m_clangTextMarks;
|
std::vector<ClangTextMark> m_clangTextMarks;
|
||||||
ClangEditorDocumentParser m_parser;
|
QSharedPointer<ClangEditorDocumentParser> m_parser;
|
||||||
CppTools::ProjectPart::Ptr m_projectPart;
|
CppTools::ProjectPart::Ptr m_projectPart;
|
||||||
QFutureWatcher<void> m_parserWatcher;
|
QFutureWatcher<void> m_parserWatcher;
|
||||||
unsigned m_parserRevision;
|
unsigned m_parserRevision;
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ QStringList createPCHInclusionOptions(const QString &pchFile)
|
|||||||
|
|
||||||
ProjectPart::Ptr projectPartForFile(const QString &filePath)
|
ProjectPart::Ptr projectPartForFile(const QString &filePath)
|
||||||
{
|
{
|
||||||
if (CppTools::BaseEditorDocumentParser *parser = CppTools::BaseEditorDocumentParser::get(filePath))
|
if (const auto parser = CppTools::BaseEditorDocumentParser::get(filePath))
|
||||||
return parser->projectPart();
|
return parser->projectPart();
|
||||||
return ProjectPart::Ptr();
|
return ProjectPart::Ptr();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -786,7 +786,7 @@ public:
|
|||||||
if (totalTime.elapsed() > 10000)
|
if (totalTime.elapsed() > 10000)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (writeFileAgainTime.elapsed() > 1000) {
|
if (writeFileAgainTime.elapsed() > 3000) {
|
||||||
// The timestamp did not change, try again now.
|
// The timestamp did not change, try again now.
|
||||||
QTC_ASSERT(writeFile(m_filePath, m_fileContents), return false);
|
QTC_ASSERT(writeFile(m_filePath, m_fileContents), return false);
|
||||||
writeFileAgainTime.restart();
|
writeFileAgainTime.restart();
|
||||||
|
|||||||
@@ -467,6 +467,8 @@ ProjectExplorer::FolderNode *CMakeProject::findOrCreateFolder(CMakeProjectNode *
|
|||||||
FileName path = rootNode->path().parentDir();
|
FileName path = rootNode->path().parentDir();
|
||||||
QDir rootParentDir(path.toString());
|
QDir rootParentDir(path.toString());
|
||||||
QString relativePath = rootParentDir.relativeFilePath(directory);
|
QString relativePath = rootParentDir.relativeFilePath(directory);
|
||||||
|
if (relativePath == QLatin1String("."))
|
||||||
|
relativePath.clear();
|
||||||
QStringList parts = relativePath.split(QLatin1Char('/'), QString::SkipEmptyParts);
|
QStringList parts = relativePath.split(QLatin1Char('/'), QString::SkipEmptyParts);
|
||||||
ProjectExplorer::FolderNode *parent = rootNode;
|
ProjectExplorer::FolderNode *parent = rootNode;
|
||||||
foreach (const QString &part, parts) {
|
foreach (const QString &part, parts) {
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ void CppEditorDocument::updatePreprocessorSettings()
|
|||||||
void CppEditorDocument::setPreprocessorSettings(const CppTools::ProjectPart::Ptr &projectPart,
|
void CppEditorDocument::setPreprocessorSettings(const CppTools::ProjectPart::Ptr &projectPart,
|
||||||
const QByteArray &defines)
|
const QByteArray &defines)
|
||||||
{
|
{
|
||||||
CppTools::BaseEditorDocumentParser *parser = processor()->parser();
|
const auto parser = processor()->parser();
|
||||||
QTC_ASSERT(parser, return);
|
QTC_ASSERT(parser, return);
|
||||||
if (parser->projectPart() != projectPart || parser->configuration().editorDefines != defines) {
|
if (parser->projectPart() != projectPart || parser->configuration().editorDefines != defines) {
|
||||||
CppTools::BaseEditorDocumentParser::Configuration config = parser->configuration();
|
CppTools::BaseEditorDocumentParser::Configuration config = parser->configuration();
|
||||||
|
|||||||
@@ -104,14 +104,14 @@ ProjectPart::Ptr BaseEditorDocumentParser::projectPart() const
|
|||||||
return state().projectPart;
|
return state().projectPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseEditorDocumentParser *BaseEditorDocumentParser::get(const QString &filePath)
|
BaseEditorDocumentParser::Ptr BaseEditorDocumentParser::get(const QString &filePath)
|
||||||
{
|
{
|
||||||
CppModelManager *cmmi = CppModelManager::instance();
|
CppModelManager *cmmi = CppModelManager::instance();
|
||||||
if (CppEditorDocumentHandle *cppEditorDocument = cmmi->cppEditorDocument(filePath)) {
|
if (CppEditorDocumentHandle *cppEditorDocument = cmmi->cppEditorDocument(filePath)) {
|
||||||
if (BaseEditorDocumentProcessor *processor = cppEditorDocument->processor())
|
if (BaseEditorDocumentProcessor *processor = cppEditorDocument->processor())
|
||||||
return processor->parser();
|
return processor->parser();
|
||||||
}
|
}
|
||||||
return 0;
|
return BaseEditorDocumentParser::Ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectPart::Ptr BaseEditorDocumentParser::determineProjectPart(const QString &filePath,
|
ProjectPart::Ptr BaseEditorDocumentParser::determineProjectPart(const QString &filePath,
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ class CPPTOOLS_EXPORT BaseEditorDocumentParser : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static BaseEditorDocumentParser *get(const QString &filePath);
|
using Ptr = QSharedPointer<BaseEditorDocumentParser>;;
|
||||||
|
static Ptr get(const QString &filePath);
|
||||||
|
|
||||||
struct Configuration {
|
struct Configuration {
|
||||||
bool stickToPreviousProjectPart = true;
|
bool stickToPreviousProjectPart = true;
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ QList<QTextEdit::ExtraSelection> BaseEditorDocumentProcessor::toTextEditorSelect
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BaseEditorDocumentProcessor::runParser(QFutureInterface<void> &future,
|
void BaseEditorDocumentProcessor::runParser(QFutureInterface<void> &future,
|
||||||
BaseEditorDocumentParser *parser,
|
BaseEditorDocumentParser::Ptr parser,
|
||||||
BaseEditorDocumentParser::InMemoryInfo info)
|
BaseEditorDocumentParser::InMemoryInfo info)
|
||||||
{
|
{
|
||||||
future.setProgressRange(0, 1);
|
future.setProgressRange(0, 1);
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public:
|
|||||||
virtual void recalculateSemanticInfoDetached(bool force) = 0;
|
virtual void recalculateSemanticInfoDetached(bool force) = 0;
|
||||||
virtual CppTools::SemanticInfo recalculateSemanticInfo() = 0;
|
virtual CppTools::SemanticInfo recalculateSemanticInfo() = 0;
|
||||||
virtual CPlusPlus::Snapshot snapshot() = 0;
|
virtual CPlusPlus::Snapshot snapshot() = 0;
|
||||||
virtual BaseEditorDocumentParser *parser() = 0;
|
virtual BaseEditorDocumentParser::Ptr parser() = 0;
|
||||||
virtual bool isParserRunning() const = 0;
|
virtual bool isParserRunning() const = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -85,7 +85,7 @@ protected:
|
|||||||
QTextDocument *textDocument);
|
QTextDocument *textDocument);
|
||||||
|
|
||||||
static void runParser(QFutureInterface<void> &future,
|
static void runParser(QFutureInterface<void> &future,
|
||||||
CppTools::BaseEditorDocumentParser *parser,
|
BaseEditorDocumentParser::Ptr parser,
|
||||||
BaseEditorDocumentParser::InMemoryInfo info);
|
BaseEditorDocumentParser::InMemoryInfo info);
|
||||||
|
|
||||||
// Convenience
|
// Convenience
|
||||||
|
|||||||
@@ -226,11 +226,11 @@ ProjectPart::HeaderPaths BuiltinEditorDocumentParser::headerPaths() const
|
|||||||
return extraState().headerPaths;
|
return extraState().headerPaths;
|
||||||
}
|
}
|
||||||
|
|
||||||
BuiltinEditorDocumentParser *BuiltinEditorDocumentParser::get(const QString &filePath)
|
BuiltinEditorDocumentParser::Ptr BuiltinEditorDocumentParser::get(const QString &filePath)
|
||||||
{
|
{
|
||||||
if (BaseEditorDocumentParser *b = BaseEditorDocumentParser::get(filePath))
|
if (BaseEditorDocumentParser::Ptr b = BaseEditorDocumentParser::get(filePath))
|
||||||
return qobject_cast<BuiltinEditorDocumentParser *>(b);
|
return b.objectCast<BuiltinEditorDocumentParser>();
|
||||||
return 0;
|
return BuiltinEditorDocumentParser::Ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuiltinEditorDocumentParser::addFileAndDependencies(Snapshot *snapshot,
|
void BuiltinEditorDocumentParser::addFileAndDependencies(Snapshot *snapshot,
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ signals:
|
|||||||
void finished(CPlusPlus::Document::Ptr document, CPlusPlus::Snapshot snapshot);
|
void finished(CPlusPlus::Document::Ptr document, CPlusPlus::Snapshot snapshot);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static BuiltinEditorDocumentParser *get(const QString &filePath);
|
using Ptr = QSharedPointer<BuiltinEditorDocumentParser>;
|
||||||
|
static Ptr get(const QString &filePath);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateHelper(const InMemoryInfo &info) override;
|
void updateHelper(const InMemoryInfo &info) override;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(
|
|||||||
TextEditor::TextDocument *document,
|
TextEditor::TextDocument *document,
|
||||||
bool enableSemanticHighlighter)
|
bool enableSemanticHighlighter)
|
||||||
: BaseEditorDocumentProcessor(document)
|
: BaseEditorDocumentProcessor(document)
|
||||||
, m_parser(document->filePath().toString())
|
, m_parser(new BuiltinEditorDocumentParser(document->filePath().toString()))
|
||||||
, m_codeWarningsUpdated(false)
|
, m_codeWarningsUpdated(false)
|
||||||
, m_semanticHighlighter(enableSemanticHighlighter
|
, m_semanticHighlighter(enableSemanticHighlighter
|
||||||
? new CppTools::SemanticHighlighter(document)
|
? new CppTools::SemanticHighlighter(document)
|
||||||
@@ -135,9 +135,9 @@ BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(
|
|||||||
|
|
||||||
QSharedPointer<CppCodeModelSettings> cms = CppToolsPlugin::instance()->codeModelSettings();
|
QSharedPointer<CppCodeModelSettings> cms = CppToolsPlugin::instance()->codeModelSettings();
|
||||||
|
|
||||||
BaseEditorDocumentParser::Configuration config = m_parser.configuration();
|
BaseEditorDocumentParser::Configuration config = m_parser->configuration();
|
||||||
config.usePrecompiledHeaders = cms->pchUsage() != CppCodeModelSettings::PchUse_None;
|
config.usePrecompiledHeaders = cms->pchUsage() != CppCodeModelSettings::PchUse_None;
|
||||||
m_parser.setConfiguration(config);
|
m_parser->setConfiguration(config);
|
||||||
|
|
||||||
if (m_semanticHighlighter) {
|
if (m_semanticHighlighter) {
|
||||||
m_semanticHighlighter->setHighlightingRunner(
|
m_semanticHighlighter->setHighlightingRunner(
|
||||||
@@ -152,7 +152,7 @@ BuiltinEditorDocumentProcessor::BuiltinEditorDocumentProcessor(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(&m_parser, &BuiltinEditorDocumentParser::finished,
|
connect(m_parser.data(), &BuiltinEditorDocumentParser::finished,
|
||||||
this, &BuiltinEditorDocumentProcessor::onParserFinished);
|
this, &BuiltinEditorDocumentProcessor::onParserFinished);
|
||||||
connect(&m_semanticInfoUpdater, &SemanticInfoUpdater::updated,
|
connect(&m_semanticInfoUpdater, &SemanticInfoUpdater::updated,
|
||||||
this, &BuiltinEditorDocumentProcessor::onSemanticInfoUpdated);
|
this, &BuiltinEditorDocumentProcessor::onSemanticInfoUpdated);
|
||||||
@@ -171,14 +171,14 @@ void BuiltinEditorDocumentProcessor::run()
|
|||||||
BuiltinEditorDocumentParser::InMemoryInfo(false));
|
BuiltinEditorDocumentParser::InMemoryInfo(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseEditorDocumentParser *BuiltinEditorDocumentProcessor::parser()
|
BaseEditorDocumentParser::Ptr BuiltinEditorDocumentProcessor::parser()
|
||||||
{
|
{
|
||||||
return &m_parser;
|
return m_parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlusPlus::Snapshot BuiltinEditorDocumentProcessor::snapshot()
|
CPlusPlus::Snapshot BuiltinEditorDocumentProcessor::snapshot()
|
||||||
{
|
{
|
||||||
return m_parser.snapshot();
|
return m_parser->snapshot();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuiltinEditorDocumentProcessor::recalculateSemanticInfoDetached(bool force)
|
void BuiltinEditorDocumentProcessor::recalculateSemanticInfoDetached(bool force)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public:
|
|||||||
void recalculateSemanticInfoDetached(bool force) override;
|
void recalculateSemanticInfoDetached(bool force) override;
|
||||||
void semanticRehighlight() override;
|
void semanticRehighlight() override;
|
||||||
CppTools::SemanticInfo recalculateSemanticInfo() override;
|
CppTools::SemanticInfo recalculateSemanticInfo() override;
|
||||||
BaseEditorDocumentParser *parser() override;
|
BaseEditorDocumentParser::Ptr parser() override;
|
||||||
CPlusPlus::Snapshot snapshot() override;
|
CPlusPlus::Snapshot snapshot() override;
|
||||||
bool isParserRunning() const override;
|
bool isParserRunning() const override;
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ private:
|
|||||||
SemanticInfo::Source createSemanticInfoSource(bool force) const;
|
SemanticInfo::Source createSemanticInfoSource(bool force) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BuiltinEditorDocumentParser m_parser;
|
BuiltinEditorDocumentParser::Ptr m_parser;
|
||||||
QFuture<void> m_parserFuture;
|
QFuture<void> m_parserFuture;
|
||||||
|
|
||||||
CPlusPlus::Snapshot m_documentSnapshot;
|
CPlusPlus::Snapshot m_documentSnapshot;
|
||||||
|
|||||||
@@ -426,13 +426,13 @@ AssistInterface *InternalCompletionAssistProvider::createAssistInterface(
|
|||||||
{
|
{
|
||||||
QTC_ASSERT(textEditorWidget, return 0);
|
QTC_ASSERT(textEditorWidget, return 0);
|
||||||
|
|
||||||
CppModelManager *modelManager = CppModelManager::instance();
|
|
||||||
return new CppCompletionAssistInterface(filePath,
|
return new CppCompletionAssistInterface(filePath,
|
||||||
textEditorWidget,
|
textEditorWidget,
|
||||||
|
BuiltinEditorDocumentParser::get(filePath),
|
||||||
languageFeatures,
|
languageFeatures,
|
||||||
position,
|
position,
|
||||||
reason,
|
reason,
|
||||||
modelManager->workingCopy());
|
CppModelManager::instance()->workingCopy());
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------
|
// -----------------
|
||||||
@@ -2187,11 +2187,11 @@ void CppCompletionAssistInterface::getCppSpecifics() const
|
|||||||
return;
|
return;
|
||||||
m_gotCppSpecifics = true;
|
m_gotCppSpecifics = true;
|
||||||
|
|
||||||
if (BuiltinEditorDocumentParser *parser = BuiltinEditorDocumentParser::get(fileName())) {
|
if (m_parser) {
|
||||||
parser->update(BuiltinEditorDocumentParser::InMemoryInfo(false));
|
m_parser->update(BuiltinEditorDocumentParser::InMemoryInfo(false));
|
||||||
m_snapshot = parser->snapshot();
|
m_snapshot = m_parser->snapshot();
|
||||||
m_headerPaths = parser->headerPaths();
|
m_headerPaths = m_parser->headerPaths();
|
||||||
if (Document::Ptr document = parser->document())
|
if (Document::Ptr document = m_parser->document())
|
||||||
m_languageFeatures = document->languageFeatures();
|
m_languageFeatures = document->languageFeatures();
|
||||||
else
|
else
|
||||||
m_languageFeatures = LanguageFeatures::defaultFeatures();
|
m_languageFeatures = LanguageFeatures::defaultFeatures();
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#ifndef CPPCOMPLETIONASSIST_H
|
#ifndef CPPCOMPLETIONASSIST_H
|
||||||
#define CPPCOMPLETIONASSIST_H
|
#define CPPCOMPLETIONASSIST_H
|
||||||
|
|
||||||
|
#include "builtineditordocumentparser.h"
|
||||||
#include "cppcompletionassistprocessor.h"
|
#include "cppcompletionassistprocessor.h"
|
||||||
#include "cppcompletionassistprovider.h"
|
#include "cppcompletionassistprovider.h"
|
||||||
#include "cppmodelmanager.h"
|
#include "cppmodelmanager.h"
|
||||||
@@ -171,11 +172,13 @@ class CppCompletionAssistInterface : public TextEditor::AssistInterface
|
|||||||
public:
|
public:
|
||||||
CppCompletionAssistInterface(const QString &filePath,
|
CppCompletionAssistInterface(const QString &filePath,
|
||||||
const TextEditor::TextEditorWidget *textEditorWidget,
|
const TextEditor::TextEditorWidget *textEditorWidget,
|
||||||
|
BuiltinEditorDocumentParser::Ptr parser,
|
||||||
const CPlusPlus::LanguageFeatures &languageFeatures,
|
const CPlusPlus::LanguageFeatures &languageFeatures,
|
||||||
int position,
|
int position,
|
||||||
TextEditor::AssistReason reason,
|
TextEditor::AssistReason reason,
|
||||||
const WorkingCopy &workingCopy)
|
const WorkingCopy &workingCopy)
|
||||||
: TextEditor::AssistInterface(textEditorWidget->document(), position, filePath, reason)
|
: TextEditor::AssistInterface(textEditorWidget->document(), position, filePath, reason)
|
||||||
|
, m_parser(parser)
|
||||||
, m_gotCppSpecifics(false)
|
, m_gotCppSpecifics(false)
|
||||||
, m_workingCopy(workingCopy)
|
, m_workingCopy(workingCopy)
|
||||||
, m_languageFeatures(languageFeatures)
|
, m_languageFeatures(languageFeatures)
|
||||||
@@ -204,6 +207,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void getCppSpecifics() const;
|
void getCppSpecifics() const;
|
||||||
|
|
||||||
|
BuiltinEditorDocumentParser::Ptr m_parser;
|
||||||
mutable bool m_gotCppSpecifics;
|
mutable bool m_gotCppSpecifics;
|
||||||
WorkingCopy m_workingCopy;
|
WorkingCopy m_workingCopy;
|
||||||
mutable CPlusPlus::Snapshot m_snapshot;
|
mutable CPlusPlus::Snapshot m_snapshot;
|
||||||
|
|||||||
@@ -910,7 +910,7 @@ void CppToolsPlugin::test_modelmanager_precompiled_headers()
|
|||||||
QCOMPARE(Core::DocumentModel::openedDocuments().size(), 1);
|
QCOMPARE(Core::DocumentModel::openedDocuments().size(), 1);
|
||||||
QVERIFY(mm->isCppEditor(editor));
|
QVERIFY(mm->isCppEditor(editor));
|
||||||
|
|
||||||
auto *parser = BuiltinEditorDocumentParser::get(fileName);
|
auto parser = BuiltinEditorDocumentParser::get(fileName);
|
||||||
QVERIFY(parser);
|
QVERIFY(parser);
|
||||||
BaseEditorDocumentParser::Configuration config = parser->configuration();
|
BaseEditorDocumentParser::Configuration config = parser->configuration();
|
||||||
config.usePrecompiledHeaders = true;
|
config.usePrecompiledHeaders = true;
|
||||||
@@ -994,7 +994,7 @@ void CppToolsPlugin::test_modelmanager_defines_per_editor()
|
|||||||
QVERIFY(mm->isCppEditor(editor));
|
QVERIFY(mm->isCppEditor(editor));
|
||||||
|
|
||||||
const QString filePath = editor->document()->filePath().toString();
|
const QString filePath = editor->document()->filePath().toString();
|
||||||
BaseEditorDocumentParser *parser = BaseEditorDocumentParser::get(filePath);
|
const auto parser = BaseEditorDocumentParser::get(filePath);
|
||||||
BaseEditorDocumentParser::Configuration config = parser->configuration();
|
BaseEditorDocumentParser::Configuration config = parser->configuration();
|
||||||
config.editorDefines = editorDefines.toUtf8();
|
config.editorDefines = editorDefines.toUtf8();
|
||||||
parser->setConfiguration(config);
|
parser->setConfiguration(config);
|
||||||
|
|||||||
@@ -934,7 +934,7 @@ Qt::ItemFlags WatchItem::flags(int column) const
|
|||||||
const Qt::ItemFlags editable = notEditable | Qt::ItemIsEditable;
|
const Qt::ItemFlags editable = notEditable | Qt::ItemIsEditable;
|
||||||
|
|
||||||
if (state == InferiorUnrunnable)
|
if (state == InferiorUnrunnable)
|
||||||
return notEditable;
|
return (isWatcher() && column == 0 && iname.count('.') == 1) ? editable : notEditable;
|
||||||
|
|
||||||
if (isWatcher()) {
|
if (isWatcher()) {
|
||||||
if (state != InferiorStopOk
|
if (state != InferiorStopOk
|
||||||
|
|||||||
@@ -196,12 +196,12 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compare
|
// Compare
|
||||||
BuiltinEditorDocumentParser *cppDocumentParser = BuiltinEditorDocumentParser::get(cppFile);
|
const auto cppDocumentParser = BuiltinEditorDocumentParser::get(cppFile);
|
||||||
QVERIFY(cppDocumentParser);
|
QVERIFY(cppDocumentParser);
|
||||||
const Document::Ptr cppDocument = cppDocumentParser->document();
|
const Document::Ptr cppDocument = cppDocumentParser->document();
|
||||||
QVERIFY(checkDiagsnosticMessages(cppDocument));
|
QVERIFY(checkDiagsnosticMessages(cppDocument));
|
||||||
|
|
||||||
BuiltinEditorDocumentParser *hDocumentParser = BuiltinEditorDocumentParser::get(hFile);
|
const auto hDocumentParser = BuiltinEditorDocumentParser::get(hFile);
|
||||||
QVERIFY(hDocumentParser);
|
QVERIFY(hDocumentParser);
|
||||||
const Document::Ptr hDocument = hDocumentParser->document();
|
const Document::Ptr hDocument = hDocumentParser->document();
|
||||||
QVERIFY(checkDiagsnosticMessages(hDocument));
|
QVERIFY(checkDiagsnosticMessages(hDocument));
|
||||||
|
|||||||
@@ -560,8 +560,8 @@ void MercurialPlugin::showCommitWidget(const QList<VcsBaseClient::StatusItem> &s
|
|||||||
|
|
||||||
QString branch = versionControl()->vcsTopic(m_submitRepository);
|
QString branch = versionControl()->vcsTopic(m_submitRepository);
|
||||||
commitEditor->setFields(m_submitRepository, branch,
|
commitEditor->setFields(m_submitRepository, branch,
|
||||||
mercurialSettings.stringValue(MercurialSettings::userNameKey),
|
m_client->settings().stringValue(MercurialSettings::userNameKey),
|
||||||
mercurialSettings.stringValue(MercurialSettings::userEmailKey), status);
|
m_client->settings().stringValue(MercurialSettings::userEmailKey), status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MercurialPlugin::diffFromEditorSelected(const QStringList &files)
|
void MercurialPlugin::diffFromEditorSelected(const QStringList &files)
|
||||||
|
|||||||
@@ -135,7 +135,6 @@ private:
|
|||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
static MercurialPlugin *m_instance;
|
static MercurialPlugin *m_instance;
|
||||||
MercurialSettings mercurialSettings;
|
|
||||||
OptionsPage *optionsPage;
|
OptionsPage *optionsPage;
|
||||||
MercurialClient *m_client;
|
MercurialClient *m_client;
|
||||||
|
|
||||||
|
|||||||
@@ -199,7 +199,9 @@ void BuildSettingsWidget::updateBuildSettings()
|
|||||||
clearWidgets();
|
clearWidgets();
|
||||||
|
|
||||||
// update buttons
|
// update buttons
|
||||||
m_removeButton->setEnabled(m_target->buildConfigurations().size() > 1);
|
QList<BuildConfiguration *> bcs = m_target->buildConfigurations();
|
||||||
|
m_removeButton->setEnabled(bcs.size() > 1);
|
||||||
|
m_renameButton->setEnabled(!bcs.isEmpty());
|
||||||
|
|
||||||
if (!m_buildConfiguration)
|
if (!m_buildConfiguration)
|
||||||
return;
|
return;
|
||||||
@@ -288,6 +290,7 @@ QString BuildSettingsWidget::uniqueName(const QString & name)
|
|||||||
|
|
||||||
void BuildSettingsWidget::renameConfiguration()
|
void BuildSettingsWidget::renameConfiguration()
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(m_buildConfiguration, return);
|
||||||
bool ok;
|
bool ok;
|
||||||
QString name = QInputDialog::getText(this, tr("Rename..."),
|
QString name = QInputDialog::getText(this, tr("Rename..."),
|
||||||
tr("New name for build configuration <b>%1</b>:").
|
tr("New name for build configuration <b>%1</b>:").
|
||||||
|
|||||||
@@ -62,14 +62,17 @@ using namespace WinRt::Internal::Constants;
|
|||||||
static QString extractToolchainPrefix(QString *compilerName)
|
static QString extractToolchainPrefix(QString *compilerName)
|
||||||
{
|
{
|
||||||
QString prefix;
|
QString prefix;
|
||||||
if (compilerName->endsWith(QLatin1String("-g++"))
|
const QStringList candidates = { QLatin1String("g++"), QLatin1String("clang++"),
|
||||||
|| compilerName->endsWith(QLatin1String("-clang++"))
|
QLatin1String("gcc"), QLatin1String("clang") };
|
||||||
|| compilerName->endsWith(QLatin1String("-gcc"))
|
foreach (const QString &candidate, candidates) {
|
||||||
|| compilerName->endsWith(QLatin1String("-clang"))) {
|
const QString suffix = Utils::HostOsInfo::withExecutableSuffix(QLatin1Char('-')
|
||||||
|
+ candidate);
|
||||||
|
if (compilerName->endsWith(suffix)) {
|
||||||
const int idx = compilerName->lastIndexOf(QLatin1Char('-')) + 1;
|
const int idx = compilerName->lastIndexOf(QLatin1Char('-')) + 1;
|
||||||
prefix = compilerName->left(idx);
|
prefix = compilerName->left(idx);
|
||||||
compilerName->remove(0, idx);
|
compilerName->remove(0, idx);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return prefix;
|
return prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -232,6 +232,8 @@ bool MakeStep::init()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
QString relObjectsDir = QDir(pp->workingDirectory()).relativeFilePath(objectsDir);
|
QString relObjectsDir = QDir(pp->workingDirectory()).relativeFilePath(objectsDir);
|
||||||
|
if (relObjectsDir == QLatin1String("."))
|
||||||
|
relObjectsDir.clear();
|
||||||
if (!relObjectsDir.isEmpty())
|
if (!relObjectsDir.isEmpty())
|
||||||
relObjectsDir += QLatin1Char('/');
|
relObjectsDir += QLatin1Char('/');
|
||||||
QString objectFile = relObjectsDir +
|
QString objectFile = relObjectsDir +
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ public:
|
|||||||
// should probably try to make it relatve to some import path, not to the document path
|
// should probably try to make it relatve to some import path, not to the document path
|
||||||
QString relativeDir = dir.relativeFilePath(path);
|
QString relativeDir = dir.relativeFilePath(path);
|
||||||
QString name = relativeDir.replace(QLatin1Char('/'), QLatin1Char('.'));
|
QString name = relativeDir.replace(QLatin1Char('/'), QLatin1Char('.'));
|
||||||
if (!name.isEmpty())
|
if (!name.isEmpty() && name != QLatin1String("."))
|
||||||
typeName.prepend(name + QLatin1Char('.'));
|
typeName.prepend(name + QLatin1Char('.'));
|
||||||
} else if (importInfo.isValid() && importInfo.type() == ImportType::QrcDirectory) {
|
} else if (importInfo.isValid() && importInfo.type() == ImportType::QrcDirectory) {
|
||||||
QString path = QrcParser::normalizedQrcDirectoryPath(importInfo.path());
|
QString path = QrcParser::normalizedQrcDirectoryPath(importInfo.path());
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ public:
|
|||||||
virtual bool eventFilter(QObject *o, QEvent *e);
|
virtual bool eventFilter(QObject *o, QEvent *e);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void finalizeRequest();
|
|
||||||
void proposalComputed();
|
void proposalComputed();
|
||||||
void processProposalItem(AssistProposalItem *proposalItem);
|
void processProposalItem(AssistProposalItem *proposalItem);
|
||||||
void handlePrefixExpansion(const QString &newPrefix);
|
void handlePrefixExpansion(const QString &newPrefix);
|
||||||
@@ -251,7 +250,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
|
|||||||
connect(m_requestRunner, &ProcessorRunner::finished,
|
connect(m_requestRunner, &ProcessorRunner::finished,
|
||||||
this, &CodeAssistantPrivate::proposalComputed);
|
this, &CodeAssistantPrivate::proposalComputed);
|
||||||
connect(m_requestRunner, &ProcessorRunner::finished,
|
connect(m_requestRunner, &ProcessorRunner::finished,
|
||||||
this, &CodeAssistantPrivate::finalizeRequest);
|
m_requestRunner, &QObject::deleteLater);
|
||||||
connect(m_requestRunner, &ProcessorRunner::finished,
|
connect(m_requestRunner, &ProcessorRunner::finished,
|
||||||
q, &CodeAssistant::finished);
|
q, &CodeAssistant::finished);
|
||||||
assistInterface->prepareForAsyncUse();
|
assistInterface->prepareForAsyncUse();
|
||||||
@@ -383,12 +382,6 @@ void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix)
|
|||||||
notifyChange();
|
notifyChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeAssistantPrivate::finalizeRequest()
|
|
||||||
{
|
|
||||||
if (ProcessorRunner *runner = qobject_cast<ProcessorRunner *>(sender()))
|
|
||||||
delete runner;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CodeAssistantPrivate::finalizeProposal()
|
void CodeAssistantPrivate::finalizeProposal()
|
||||||
{
|
{
|
||||||
stopAutomaticProposalTimer();
|
stopAutomaticProposalTimer();
|
||||||
@@ -550,6 +543,7 @@ CodeAssistant::CodeAssistant() : d(new CodeAssistantPrivate(this))
|
|||||||
|
|
||||||
CodeAssistant::~CodeAssistant()
|
CodeAssistant::~CodeAssistant()
|
||||||
{
|
{
|
||||||
|
destroyContext();
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Submodule src/shared/qbs updated: a34e10961d...549274d305
@@ -409,6 +409,7 @@ private slots:
|
|||||||
void undef();
|
void undef();
|
||||||
void concat();
|
void concat();
|
||||||
void excessive_nesting();
|
void excessive_nesting();
|
||||||
|
void multi_byte_code_point_in_expansion();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Remove all #... lines, and 'simplify' string, to allow easily comparing the result
|
// Remove all #... lines, and 'simplify' string, to allow easily comparing the result
|
||||||
@@ -2064,6 +2065,26 @@ void tst_Preprocessor::excessive_nesting()
|
|||||||
QCOMPARE(prep, output);
|
QCOMPARE(prep, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_Preprocessor::multi_byte_code_point_in_expansion()
|
||||||
|
{
|
||||||
|
Environment env;
|
||||||
|
Preprocessor preprocess(0, &env);
|
||||||
|
const QByteArray input =
|
||||||
|
"#define FOO(x) x\n"
|
||||||
|
"FOO(arg" UC_U00FC "\n)\n";
|
||||||
|
|
||||||
|
const QByteArray actual = preprocess.run(QLatin1String("<stdin>"), input);
|
||||||
|
|
||||||
|
const QByteArray expected =
|
||||||
|
"# 1 \"<stdin>\"\n"
|
||||||
|
"\n"
|
||||||
|
"# expansion begin 17,3 2:4\n"
|
||||||
|
"arg" UC_U00FC "\n"
|
||||||
|
"# expansion end\n"
|
||||||
|
"# 4 \"<stdin>\"\n";
|
||||||
|
QCOMPARE(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_Preprocessor::compare_input_output(bool keepComments)
|
void tst_Preprocessor::compare_input_output(bool keepComments)
|
||||||
{
|
{
|
||||||
QFETCH(QByteArray, input);
|
QFETCH(QByteArray, input);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ include(../../../qttest.pri)
|
|||||||
include($$IDE_SOURCE_TREE/src/rpath.pri)
|
include($$IDE_SOURCE_TREE/src/rpath.pri)
|
||||||
DEFINES += QMLJS_BUILD_DIR
|
DEFINES += QMLJS_BUILD_DIR
|
||||||
|
|
||||||
QT +=script xml
|
QT += qml xml
|
||||||
# direct dependency on qmljs for quicker turnaround when editing them
|
# direct dependency on qmljs for quicker turnaround when editing them
|
||||||
INCLUDEPATH+=$$IDE_SOURCE_TREE/src/libs
|
INCLUDEPATH+=$$IDE_SOURCE_TREE/src/libs
|
||||||
INCLUDEPATH+=$$IDE_SOURCE_TREE/src/libs/qmljs
|
INCLUDEPATH+=$$IDE_SOURCE_TREE/src/libs/qmljs
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"filename"
|
"filename"
|
||||||
"creator/README"
|
"creator/README.md"
|
||||||
"creator/qtcreator.pri"
|
"creator/qtcreator.pri"
|
||||||
"creator/tests/manual/qml/testfiles_quick2/views.qml"
|
"creator/tests/manual/qml/testfiles_quick2/views.qml"
|
||||||
"creator/share/qtcreator/glsl/glsl_120.frag"
|
"creator/share/qtcreator/glsl/glsl_120.frag"
|
||||||
|
|||||||
|
@@ -31,7 +31,8 @@
|
|||||||
source("../../shared/qtcreator.py")
|
source("../../shared/qtcreator.py")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
test.warning("This test is known to fail, see QTCREATORBUG-14828. Skipping it.")
|
if platform.system() == 'Darwin':
|
||||||
|
test.warning("This needs a Qt 5.4 kit. Skipping it.")
|
||||||
return
|
return
|
||||||
pathCreator = os.path.join(srcPath, "creator", "qtcreator.qbs")
|
pathCreator = os.path.join(srcPath, "creator", "qtcreator.qbs")
|
||||||
if not neededFilePresent(pathCreator):
|
if not neededFilePresent(pathCreator):
|
||||||
@@ -41,12 +42,19 @@ def main():
|
|||||||
if not startedWithoutPluginError():
|
if not startedWithoutPluginError():
|
||||||
return
|
return
|
||||||
openQbsProject(pathCreator)
|
openQbsProject(pathCreator)
|
||||||
|
switchViewTo(ViewConstants.PROJECTS)
|
||||||
|
clickButton(waitForObject(":*Qt Creator.Add Kit_QPushButton"))
|
||||||
|
menuItem = Targets.getStringForTarget(Targets.DESKTOP_541_GCC)
|
||||||
|
activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1' "
|
||||||
|
"window=':Qt Creator_Core::Internal::MainWindow'}", menuItem))
|
||||||
|
switchToBuildOrRunSettingsFor(2, 1, ProjectSettings.BUILD)
|
||||||
|
switchViewTo(ViewConstants.EDIT)
|
||||||
test.log("Start parsing project")
|
test.log("Start parsing project")
|
||||||
naviTreeView = "{column='0' container=':Qt Creator_Utils::NavigationTreeView' text~='qtcreator( \[\S+\])?' type='QModelIndex'}"
|
rootNodeTemplate = "{column='0' container=':Qt Creator_Utils::NavigationTreeView' text~='%s( \[\S+\])?' type='QModelIndex'}"
|
||||||
ntwObject = waitForObject(naviTreeView)
|
ntwObject = waitForObject(rootNodeTemplate % "qtcreator.qbs")
|
||||||
if waitFor("ntwObject.model().rowCount(ntwObject) > 2", 200000): # No need to wait for C++-parsing
|
if waitFor("ntwObject.model().rowCount(ntwObject) > 2", 200000): # No need to wait for C++-parsing
|
||||||
test.log("Parsing project done") # we only need the project
|
test.log("Parsing project done") # we only need the project
|
||||||
else:
|
else:
|
||||||
test.warning("Parsing project timed out")
|
test.warning("Parsing project timed out")
|
||||||
compareProjectTree(naviTreeView, "projecttree_creator.tsv")
|
compareProjectTree(rootNodeTemplate % "Qt Creator", "projecttree_creator.tsv")
|
||||||
invokeMenuItem("File", "Exit")
|
invokeMenuItem("File", "Exit")
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -31,7 +31,7 @@
|
|||||||
source("../../shared/qtcreator.py")
|
source("../../shared/qtcreator.py")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
pathReadme = srcPath + "/creator/README"
|
pathReadme = srcPath + "/creator/README.md"
|
||||||
if not neededFilePresent(pathReadme):
|
if not neededFilePresent(pathReadme):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user