JSON officially does not support multiline strings, so we should use
the same mechanism that we already use for the plugin description
(i.e. additionally support arrays of strings which are interpreted
as lines).
This just happens to work because Qt's JSON parser eats it without
choking.
Change-Id: I25ef04600b209775c5a7af916c687fda4a8b1a4d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
- Avoids the hassle of QRC files and manually registering mime types
- Avoids performance regressions because of mime types that are
registered after mime database has been used
- Makes it technically possible to detect that a disabled plugin could
handle a mime type if it was enabled
Change-Id: I373008b1b56e9c6b4853055f20b3eeb112a6eff9
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Plugins can be hidden in the "About Plugins" view by default. Users can
still make them all visible, but the default view can be made less noisy
by hiding plugins that only exist as a base for other plugins.
Plugins that can not run on the current platform are hidden by default
as well.
Change-Id: Iaf2f751c4ea4b3afc605bbbea6611eea042e62c7
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Init all class member pointers to NULL.
This fixes possible crash on exit when dependent
plugin was not loaded (e.g. TextEditor was missing).
In this case plugin's constructor gets called,
initialize() method is _not_ called
and destructor gets called -> crash.
Properly delete dependent plugins on
a plugin which failed to initialize properly.
Fix labels of deleted plugins inside an error dialog
after pressing "Error Details" from "Installed Plugins"
dialog.
Change-Id: Iddc029a0f07dcba2501d734d142fb0e69e9383d3
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Directly destruct the plugin after failed initialization, instead of
letting the plugin loader clean up automatically just before application
destruction (which would be after all other plugins are already
destructed).
Change-Id: Ic459a652fdb99c3e3ee1a7561334ba7075c9c666
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Instead of implicitly disabling plugins if their dependencies are
disabled, implicitly enable plugins if some enabled plugin needs it.
That will avoid issues if people disable plugins (e.g. QmlJSTools et al)
and we later add one of these as a dependency to another plugin (e.g.
make QmakeProjectManager depend on QmlJSTools), which resulted in the
previously enabled plugin being implicitly disabled.
Enabling a plugin in About Plugins now asks for all required
dependencies to be enabled as well.
Disabling a plugin in About Plugins now asks for disabling all plugins
that require it.
Using the -noload command line option now disables all plugins that
require it in addition.
Using the -load command line option now implicitly enables all plugins
that are required.
Multiple -noload and -load options are handled in the order given on the
command line.
Task-number: QTCREATORBUG-9131
Change-Id: I0956106105060a7898a8992e0629009d5ec3ea4d
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Prefer enabled state as a property as opposed to disabled state, and
make setter correspond to getter. Also move setters into private.
Change-Id: I5d002a12f4e540d5b38cc5865490d056ec75f296
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
By default, a clean settings path is used for test environment.
All the default plugins are loaded, although they're not needed.
This change significantly improves loading time for tests.
Change-Id: I24254f3e538e3f0e6d233d0989738dc1ce238209
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Mostly done using the following ruby script:
Dir.glob('**/*.cpp').each { |file|
next if file =~ %r{src/shared/qbs|/qmljs/}
s = File.read(file)
s.scan(/^using namespace (.*);$/) {
ns = $1
t = s.gsub(/^(.*)\b#{ns}::((?!Const)[A-Z])/) { |m|
before = $1
char = $2
if before =~ /"|\/\/|\\|using|SIGNAL|SLOT|Q_/
m
else
before + char
end
}
if t != s
puts file
File.open(file, 'w').write(t)
end
}
}
Change-Id: I919da493d0629b719d328e5e71c96a29d230dfd1
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: hjk <hjk@theqtcompany.com>
De-noise loops, use QVector for items bigger than a pointer.
Change-Id: Idae68dc51a02cb6df9bdf2d920ae2de99c7bde6c
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Instead add an optional attribute "required" to the plugin spec. Since
the locator plugin and find plugin are gone, and I don't see a reason to
prevent disabling the text editor plugin, only Core plugin gets the new
attribute set.
Change-Id: I7a380026ea46173cf00afff4213ca1b3a2578434
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Only methods as programming functions are affected. Besides renaming
some actions like "Switch Between Function Declaration/Definition" this
mostly touches (api) code comments.
This is a follow-up patch to commit 872bfb7.
Change-Id: Icb65e8d73b59a022f8885b14df497169543a3b92
Reviewed-by: hjk <hjk121@nokiamail.com>
Use standard wording and fix some and style issues.
Change-Id: I6c226f8b8600833666f1da34f1f1e71cb333f30a
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
The <platform> element may contain a regular expression
matching the names of the platforms on which the plugin works.
Task-number: QTCREATORBUG-9002
Change-Id: Ic816cfed69a5dd2c4112c976843b9106ba2cbd22
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Reviewed-by: hjk <hjk121@nokiamail.com>
Avoid unnecessary string allocations, fix error reporting
which would pass PluginSpec::name instead of element to the
error message.
Task-number: QTCREATORBUG-9002
Change-Id: I0d136ef27f4226e1ba79e74ddab6b63cf0f20c74
Reviewed-by: hjk <hjk121@nokiamail.com>
QDoc does some magic with the \class and \namespaces
and \brief commands, so the following wording must be used:
"The xxx class yyy ..."
Change-Id: Id231f30e8464898b776888d5423523de404aae34
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This loads a plugin that is disabled by default.
Change-Id: Ibbc9849c417519904fe1e69a46f93a7cc1c7edc8
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
A plugin might be disabled by default for other reasons than being
experimental, e.g. because it is not expected to be needed by the
average user. This is probably becoming more relevant the more plugins
are added, since we want to keep the start-up time reasonable.
Change-Id: I87927596d5c78e14793c5e8d6f0548eff6b58d59
Reviewed-by: hjk <qthjk@ovi.com>
#!/usr/bin/env ruby
Dir.glob('**/*.cpp') { |file|
# skip ast (excluding paste, astpath, and canv'ast'imer)
next if file =~ /ast[^eip]|keywords\.|qualifiers|preprocessor|names.cpp/i
s = File.read(file)
next if s.include?('qlalr')
orig = s.dup
s.gsub!(/\n *if [^\n]*{\n[^\n]*\n\s+}(\s+else if [^\n]* {\n[^\n]*\n\s+})*(\s+else {\n[^\n]*\n\s+})?\n/m) { |m|
res = $&
if res =~ /^\s*(\/\/|[A-Z_]{3,})/ # C++ comment or macro (Q_UNUSED, SDEBUG), do not touch braces
res
else
res.gsub!('} else', 'else')
res.gsub!(/\n +} *\n/m, "\n")
res.gsub(/ *{$/, '')
end
}
s.gsub!(/ *$/, '')
File.open(file, 'wb').write(s) if s != orig
}
Change-Id: I3b30ee60df0986f66c02132c65fc38a3fbb6bbdc
Reviewed-by: hjk <qthjk@ovi.com>
Getting the #include directives ready for Qt5. This includes the
new-project wizards.
Change-Id: Ia9261f1e8faec06b9285b694d2b7e9a095978d2b
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
And use it for some of the plugins. It avoids the plugins to
do the timing on their own, and actually adds guarantees about
the order the delayed initialization is done.
Change-Id: I88ad9b46b24b82c91509774170fe0e7e99e88e4b
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>