mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 01:36:01 +02:00
Bug 540373: Cleanup: Format & Remove trailing whitespace
This was done by selecting all projects in Eclipse then Source -> Clean Up... -> choosing: - Format source code - Remove trailing white spaces on all lines and completing the wizard Change-Id: I63685372c6bcc67719bcf145123bcb72e5b00394
This commit is contained in:
parent
35996a5c5c
commit
170e654b47
7984 changed files with 448190 additions and 465755 deletions
|
@ -39,7 +39,7 @@ import org.eclipse.core.runtime.jobs.Job;
|
|||
|
||||
public class AutotoolsNewProjectNature implements IProjectNature {
|
||||
|
||||
public static final String AUTOTOOLS_NATURE_ID = "org.eclipse.cdt.autotools.core.autotoolsNatureV2"; //$NON-NLS-1$
|
||||
public static final String AUTOTOOLS_NATURE_ID = "org.eclipse.cdt.autotools.core.autotoolsNatureV2"; //$NON-NLS-1$
|
||||
public static final String OLD_AUTOTOOLS_NATURE_ID = "org.eclipse.linuxtools.cdt.autotools.core.autotoolsNatureV2"; //$NON-NLS-1$
|
||||
public static final String BUILDER_ID = ManagedBuilderCorePlugin.getUniqueIdentifier() + ".genmakebuilder"; //$NON-NLS-1$
|
||||
/**
|
||||
|
@ -80,7 +80,7 @@ public class AutotoolsNewProjectNature implements IProjectNature {
|
|||
// Add the builder to the project
|
||||
IProjectDescription description = project.getDescription();
|
||||
ICommand[] commands = description.getBuildSpec();
|
||||
if(checkEquals(commands,getBuildCommandsList(description, commands))){
|
||||
if (checkEquals(commands, getBuildCommandsList(description, commands))) {
|
||||
return;
|
||||
}
|
||||
final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
|
||||
|
@ -102,7 +102,7 @@ public class AutotoolsNewProjectNature implements IProjectNature {
|
|||
//need to make sure we are using the most recent ones
|
||||
ICommand[] currentCommands = prDescription.getBuildSpec();
|
||||
ICommand[] newCommands = getBuildCommandsList(prDescription, currentCommands);
|
||||
if(!checkEquals(currentCommands,newCommands)){
|
||||
if (!checkEquals(currentCommands, newCommands)) {
|
||||
prDescription.setBuildSpec(newCommands);
|
||||
proj.setDescription(prDescription, new NullProgressMonitor());
|
||||
}
|
||||
|
@ -134,21 +134,19 @@ public class AutotoolsNewProjectNature implements IProjectNature {
|
|||
backgroundJob.schedule();
|
||||
}
|
||||
|
||||
static boolean checkEquals(ICommand[] commands,
|
||||
ICommand[] newCommands) {
|
||||
if (newCommands.length != commands.length){
|
||||
static boolean checkEquals(ICommand[] commands, ICommand[] newCommands) {
|
||||
if (newCommands.length != commands.length) {
|
||||
return false;
|
||||
}
|
||||
for (int j = 0; j < commands.length; ++j) {
|
||||
if (!commands[j].getBuilderName().equals(newCommands[j].getBuilderName())) {
|
||||
return false;
|
||||
}
|
||||
for (int j = 0; j < commands.length; ++j) {
|
||||
if (!commands[j].getBuilderName().equals(newCommands[j].getBuilderName())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static ICommand[] getBuildCommandsList(IProjectDescription description,
|
||||
ICommand[] commands) {
|
||||
static ICommand[] getBuildCommandsList(IProjectDescription description, ICommand[] commands) {
|
||||
ArrayList<ICommand> commandList = new ArrayList<>();
|
||||
|
||||
// Make sure the Autotools Configuration builder just precedes the Common Builder
|
||||
|
@ -164,8 +162,7 @@ public class AutotoolsNewProjectNature implements IProjectNature {
|
|||
}
|
||||
// Make sure that the Autotools builder precedes the Managed builder
|
||||
// or the Remote Synchronized builder.
|
||||
if (command.getBuilderName().equals(BUILDER_ID) ||
|
||||
command.getBuilderName().equals(REMOTE_BUILDER_ID)) {
|
||||
if (command.getBuilderName().equals(BUILDER_ID) || command.getBuilderName().equals(REMOTE_BUILDER_ID)) {
|
||||
// add Autotools Configuration builder just before builder
|
||||
ICommand newCommand = description.newCommand();
|
||||
newCommand.setBuilderName(AutotoolsConfigurationBuilder.BUILDER_ID);
|
||||
|
|
|
@ -130,7 +130,7 @@ public class AutotoolsPlugin extends AbstractUIPlugin {
|
|||
* @return the resource bundle message
|
||||
*/
|
||||
public static String getFormattedString(String key, String[] args) {
|
||||
return MessageFormat.format(getResourceString(key), (Object[])args);
|
||||
return MessageFormat.format(getResourceString(key), (Object[]) args);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -194,8 +194,7 @@ public class AutotoolsPlugin extends AbstractUIPlugin {
|
|||
* @throws CoreException if project is not valid Autotools project or cfgId does not exist
|
||||
* @since 1.2
|
||||
*/
|
||||
public Map<String, IAutotoolsOption> getAutotoolCfgOptions(IProject project,
|
||||
String cfgId) throws CoreException {
|
||||
public Map<String, IAutotoolsOption> getAutotoolCfgOptions(IProject project, String cfgId) throws CoreException {
|
||||
return AutotoolsConfigurationManager.getInstance().getAutotoolsCfgOptions(project, cfgId);
|
||||
}
|
||||
|
||||
|
@ -209,8 +208,8 @@ public class AutotoolsPlugin extends AbstractUIPlugin {
|
|||
*
|
||||
* @since 1.2
|
||||
*/
|
||||
public void updateAutotoolCfgOptions(IProject project, String cfgId,
|
||||
Map<String,IAutotoolsOption> options) throws CoreException {
|
||||
public void updateAutotoolCfgOptions(IProject project, String cfgId, Map<String, IAutotoolsOption> options)
|
||||
throws CoreException {
|
||||
AutotoolsConfigurationManager.getInstance().updateAutotoolCfgOptions(project, cfgId, options);
|
||||
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ package org.eclipse.cdt.autotools.core;
|
|||
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
|
||||
/**
|
||||
* @since 1.2
|
||||
*/
|
||||
|
|
|
@ -43,7 +43,7 @@ public class AutotoolsConfigurationBuilder extends ACBuilder {
|
|||
public static final String BUILDER_ID = AutotoolsPlugin.getPluginId() + "." + BUILDER_NAME; //$NON-NLS-1$
|
||||
public static final String OLD_BUILDER_ID = "org.eclipse.linuxtools.cdt.autotools.core.genmakebuilderV2"; //$NON-NLS-1$
|
||||
|
||||
private static final String BUILD_STOPPED="AutotoolsMakefileBuilder.message.stopped"; //$NON-NLS-1$
|
||||
private static final String BUILD_STOPPED = "AutotoolsMakefileBuilder.message.stopped"; //$NON-NLS-1$
|
||||
private AutotoolsNewMakeGenerator generator;
|
||||
|
||||
public AutotoolsConfigurationBuilder() {
|
||||
|
@ -51,16 +51,15 @@ public class AutotoolsConfigurationBuilder extends ACBuilder {
|
|||
generator = new AutotoolsNewMakeGenerator();
|
||||
}
|
||||
|
||||
protected boolean isCdtProjectCreated(IProject project){
|
||||
protected boolean isCdtProjectCreated(IProject project) {
|
||||
ICProjectDescription des = CoreModel.getDefault().getProjectDescription(project, false);
|
||||
return des != null && !des.isCdtProjectCreating();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor)
|
||||
throws CoreException {
|
||||
protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
|
||||
IProject project = getProject();
|
||||
if(!isCdtProjectCreated(project))
|
||||
if (!isCdtProjectCreated(project))
|
||||
return project.getReferencedProjects();
|
||||
|
||||
boolean bPerformBuild = true;
|
||||
|
@ -118,15 +117,17 @@ public class AutotoolsConfigurationBuilder extends ACBuilder {
|
|||
if (shouldBuild(CLEAN_BUILD, info)) {
|
||||
IConfiguration icfg = info.getDefaultConfiguration();
|
||||
if (icfg instanceof IMultiConfiguration) {
|
||||
IMultiConfiguration mcfg = (IMultiConfiguration)icfg;
|
||||
IConfiguration[] cfgs = (IConfiguration[])mcfg.getItems();
|
||||
IMultiConfiguration mcfg = (IMultiConfiguration) icfg;
|
||||
IConfiguration[] cfgs = (IConfiguration[]) mcfg.getItems();
|
||||
for (int i = 0; i < cfgs.length; ++i) {
|
||||
IAConfiguration cfg = AutotoolsConfigurationManager.getInstance().getConfiguration(project, icfg.getName());
|
||||
IAConfiguration cfg = AutotoolsConfigurationManager.getInstance().getConfiguration(project,
|
||||
icfg.getName());
|
||||
cfg.setDirty(true);
|
||||
}
|
||||
} else {
|
||||
IAConfiguration cfg = AutotoolsConfigurationManager.getInstance().getConfiguration(project, icfg.getName());
|
||||
cfg.setDirty(true); // Mark Configuration dirty so next build will do full reconfigure
|
||||
IAConfiguration cfg = AutotoolsConfigurationManager.getInstance().getConfiguration(project,
|
||||
icfg.getName());
|
||||
cfg.setDirty(true); // Mark Configuration dirty so next build will do full reconfigure
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -140,8 +141,7 @@ public class AutotoolsConfigurationBuilder extends ACBuilder {
|
|||
result = generator.regenerateMakefiles(false);
|
||||
} catch (CoreException e) {
|
||||
String errMsg = AutotoolsPlugin.getResourceString("MakeGenerator.didnt.generate"); //$NON-NLS-1$
|
||||
result = new MultiStatus(AutotoolsPlugin.getUniqueIdentifier(), IStatus.ERROR,
|
||||
errMsg, e);
|
||||
result = new MultiStatus(AutotoolsPlugin.getUniqueIdentifier(), IStatus.ERROR, errMsg, e);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -160,18 +160,17 @@ public class AutotoolsConfigurationBuilder extends ACBuilder {
|
|||
IBuilder builder = null;
|
||||
if (cfg != null) {
|
||||
builder = cfg.getEditableBuilder();
|
||||
switch (kind) {
|
||||
case IncrementalProjectBuilder.AUTO_BUILD :
|
||||
return builder.isAutoBuildEnable();
|
||||
case IncrementalProjectBuilder.INCREMENTAL_BUILD : // now treated as the same!
|
||||
case IncrementalProjectBuilder.FULL_BUILD :
|
||||
return builder.isFullBuildEnabled() | builder.isIncrementalBuildEnabled() ;
|
||||
case IncrementalProjectBuilder.CLEAN_BUILD :
|
||||
return builder.isCleanBuildEnabled();
|
||||
}
|
||||
switch (kind) {
|
||||
case IncrementalProjectBuilder.AUTO_BUILD:
|
||||
return builder.isAutoBuildEnable();
|
||||
case IncrementalProjectBuilder.INCREMENTAL_BUILD: // now treated as the same!
|
||||
case IncrementalProjectBuilder.FULL_BUILD:
|
||||
return builder.isFullBuildEnabled() | builder.isIncrementalBuildEnabled();
|
||||
case IncrementalProjectBuilder.CLEAN_BUILD:
|
||||
return builder.isCleanBuildEnabled();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -41,12 +41,14 @@ public class AutotoolsEnvironmentVariableSupplier implements IConfigurationEnvir
|
|||
|
||||
private static boolean isVar(String name) {
|
||||
// Windows has case insensitive env var names
|
||||
return Platform.getOS().equals(Platform.OS_WIN32) ? name.equalsIgnoreCase(VerboseEnvironmentVariable.VERBOSE_VAR_NAME)
|
||||
return Platform.getOS().equals(Platform.OS_WIN32)
|
||||
? name.equalsIgnoreCase(VerboseEnvironmentVariable.VERBOSE_VAR_NAME)
|
||||
: name.equals(VerboseEnvironmentVariable.VERBOSE_VAR_NAME);
|
||||
}
|
||||
|
||||
private static IBuildEnvironmentVariable create() {
|
||||
return new VerboseEnvironmentVariable(VERBOSE_VAR_NAME, VERBOSE_VAR_VALUE, IEnvironmentVariable.ENVVAR_PREPEND, null);
|
||||
return new VerboseEnvironmentVariable(VERBOSE_VAR_NAME, VERBOSE_VAR_VALUE,
|
||||
IEnvironmentVariable.ENVVAR_PREPEND, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -120,7 +120,6 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
|
||||
public static final String RUN_IN_CONFIGURE_LAUNCHER = "org.eclipse.cdt.autotools.core.property.launchAutotoolsInContainer"; //$NON-NLS-1$
|
||||
|
||||
|
||||
private IProject project;
|
||||
|
||||
private IProgressMonitor monitor;
|
||||
|
@ -140,8 +139,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
/**
|
||||
* @since 2.0
|
||||
*/
|
||||
public MultiStatus generateMakefiles()
|
||||
throws CoreException {
|
||||
public MultiStatus generateMakefiles() throws CoreException {
|
||||
return regenerateMakefiles(false);
|
||||
}
|
||||
|
||||
|
@ -164,8 +162,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
public void initialize(IProject project, IManagedBuildInfo info,
|
||||
IProgressMonitor monitor) {
|
||||
public void initialize(IProject project, IManagedBuildInfo info, IProgressMonitor monitor) {
|
||||
this.project = project;
|
||||
ICProjectDescription pdesc = CCorePlugin.getDefault().getProjectDescription(project);
|
||||
this.cdesc = pdesc.getActiveConfiguration();
|
||||
|
@ -267,7 +264,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
return rc;
|
||||
}
|
||||
|
||||
private void refresh() throws CoreException{
|
||||
private void refresh() throws CoreException {
|
||||
IRemoteResource remRes = getProject().getAdapter(IRemoteResource.class);
|
||||
if (remRes != null) {
|
||||
remRes.refresh(SubMonitor.convert(monitor));
|
||||
|
@ -293,18 +290,14 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
public MultiStatus regenerateMakefiles(boolean reconfigure) throws CoreException {
|
||||
MultiStatus status = null;
|
||||
if (cfg instanceof IMultiConfiguration) {
|
||||
IMultiConfiguration mfcg = (IMultiConfiguration)cfg;
|
||||
IMultiConfiguration mfcg = (IMultiConfiguration) cfg;
|
||||
Object[] objs = mfcg.getItems();
|
||||
for (int i = 0; i < objs.length; ++i) {
|
||||
IConfiguration icfg = (IConfiguration)objs[i];
|
||||
IConfiguration icfg = (IConfiguration) objs[i];
|
||||
Status rc = regenerateMakefiles(icfg, reconfigure);
|
||||
if (!rc.isOK()) {
|
||||
if(status == null){
|
||||
status = new MultiStatus(
|
||||
AutotoolsPlugin.getUniqueIdentifier(),
|
||||
IStatus.ERROR,
|
||||
"",
|
||||
null);
|
||||
if (status == null) {
|
||||
status = new MultiStatus(AutotoolsPlugin.getUniqueIdentifier(), IStatus.ERROR, "", null);
|
||||
}
|
||||
status.add(rc);
|
||||
}
|
||||
|
@ -312,22 +305,14 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
} else {
|
||||
Status rc = regenerateMakefiles(cfg, reconfigure);
|
||||
if (!rc.isOK()) {
|
||||
if(status == null){
|
||||
status = new MultiStatus(
|
||||
AutotoolsPlugin.getUniqueIdentifier(),
|
||||
IStatus.ERROR,
|
||||
"",
|
||||
null);
|
||||
if (status == null) {
|
||||
status = new MultiStatus(AutotoolsPlugin.getUniqueIdentifier(), IStatus.ERROR, "", null);
|
||||
}
|
||||
status.add(rc);
|
||||
}
|
||||
}
|
||||
if(status == null){
|
||||
status = new MultiStatus(
|
||||
ManagedBuilderCorePlugin.getUniqueIdentifier(),
|
||||
IStatus.OK,
|
||||
"",
|
||||
null);
|
||||
if (status == null) {
|
||||
status = new MultiStatus(ManagedBuilderCorePlugin.getUniqueIdentifier(), IStatus.OK, "", null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
@ -357,14 +342,12 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// Create the top-level directory for the build output
|
||||
if (!createDirectory(buildDir)) {
|
||||
rc = IStatus.ERROR;
|
||||
errMsg = AutotoolsPlugin.getFormattedString("MakeGenerator.createdir.error", //$NON-NLS-1$
|
||||
new String[] {buildDir});
|
||||
status = new MultiStatus(AutotoolsPlugin
|
||||
.getUniqueIdentifier(), rc, errMsg, null);
|
||||
new String[] { buildDir });
|
||||
status = new MultiStatus(AutotoolsPlugin.getUniqueIdentifier(), rc, errMsg, null);
|
||||
}
|
||||
checkCancel();
|
||||
|
||||
|
@ -414,8 +397,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
}
|
||||
makeargs[makeargs.length - 1] = target;
|
||||
rc = runCommand(runInCfgLauncher ? configureLauncher : localCommandLauncher, makeCmd,
|
||||
getProjectLocation(),
|
||||
makeargs,
|
||||
getProjectLocation(), makeargs,
|
||||
AutotoolsPlugin.getResourceString("MakeGenerator.clean.topdir"), //$NON-NLS-1$
|
||||
errMsg, console, consoleStart);
|
||||
consoleStart = false;
|
||||
|
@ -450,7 +432,8 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
IPath makeCmd = builder.getBuildCommand();
|
||||
String target = null;
|
||||
try {
|
||||
target = getProject().getPersistentProperty(AutotoolsPropertyConstants.CLEAN_MAKE_TARGET);
|
||||
target = getProject()
|
||||
.getPersistentProperty(AutotoolsPropertyConstants.CLEAN_MAKE_TARGET);
|
||||
} catch (CoreException ce) {
|
||||
// do nothing
|
||||
}
|
||||
|
@ -464,9 +447,9 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
}
|
||||
makeargs[makeargs.length - 1] = target;
|
||||
rc = runCommand(runInCfgLauncher ? configureLauncher : localCommandLauncher, makeCmd,
|
||||
buildLocation,
|
||||
makeargs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.clean.builddir", new String[]{buildDir}), //$NON-NLS-1$
|
||||
buildLocation, makeargs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.clean.builddir", //$NON-NLS-1$
|
||||
new String[] { buildDir }),
|
||||
errMsg, console, consoleStart);
|
||||
consoleStart = false;
|
||||
}
|
||||
|
@ -489,23 +472,22 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
IPath autogenPath = getAutogenPath(autogenEnvs, autogenCmdParms);
|
||||
|
||||
// Check if we have a config.status (meaning configure has already run).
|
||||
if (!needFullConfigure && configStatus != null && configStatus.exists()) {
|
||||
// If no corresponding Makefile in the same build location, then we
|
||||
// can simply run config.status again to ensure the top level Makefile has been
|
||||
if (!needFullConfigure && configStatus != null && configStatus.exists()) {
|
||||
// If no corresponding Makefile in the same build location, then we
|
||||
// can simply run config.status again to ensure the top level Makefile has been
|
||||
// created.
|
||||
if (makefile == null || !makefile.exists()) {
|
||||
rc = runScript(configureLauncher, configfile, buildLocation, null,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.run.config.status", new String[]{buildDir}), //$NON-NLS-1$
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.run.config.status", //$NON-NLS-1$
|
||||
new String[] { buildDir }),
|
||||
errMsg, console, null, consoleStart);
|
||||
consoleStart = false;
|
||||
}
|
||||
}
|
||||
// Look for configure and configure from scratch
|
||||
else if (configurePath.toFile().exists()) {
|
||||
rc = runScript(configureLauncher, configurePath,
|
||||
buildLocation,
|
||||
configArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.gen.makefile", new String[]{buildDir}), //$NON-NLS-1$
|
||||
rc = runScript(configureLauncher, configurePath, buildLocation, configArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.gen.makefile", new String[] { buildDir }), //$NON-NLS-1$
|
||||
errMsg, console, configureEnvs, consoleStart);
|
||||
consoleStart = false;
|
||||
if (rc != IStatus.ERROR) {
|
||||
|
@ -517,7 +499,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
}
|
||||
}
|
||||
// If no configure, look for autogen.sh which may create configure and
|
||||
// possibly even run it.
|
||||
// possibly even run it.
|
||||
else if (autogenPath.toFile().exists()) {
|
||||
// Remove the existing config.status file since we use it
|
||||
// to figure out if configure was run.
|
||||
|
@ -527,7 +509,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
String[] autogenArgs = getAutogenArgs(autogenCmdParms);
|
||||
rc = runScript(runInCfgLauncher ? configureLauncher : localCommandLauncher, autogenPath,
|
||||
autogenPath.removeLastSegments(1), autogenArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.autogen.sh", new String[]{buildDir}), //$NON-NLS-1$
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.autogen.sh", new String[] { buildDir }), //$NON-NLS-1$
|
||||
errMsg, console, autogenEnvs, consoleStart);
|
||||
consoleStart = false;
|
||||
if (rc != IStatus.ERROR) {
|
||||
|
@ -543,25 +525,25 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
if (!configurePath.toFile().exists()) {
|
||||
// no configure script either...try running autoreconf
|
||||
String[] reconfArgs = new String[1];
|
||||
String reconfCmd = project.getPersistentProperty(AutotoolsPropertyConstants.AUTORECONF_TOOL);
|
||||
String reconfCmd = project
|
||||
.getPersistentProperty(AutotoolsPropertyConstants.AUTORECONF_TOOL);
|
||||
if (reconfCmd == null)
|
||||
reconfCmd = DEFAULT_AUTORECONF;
|
||||
IPath reconfCmdPath = new Path(reconfCmd);
|
||||
reconfArgs[0] = "-i"; //$NON-NLS-1$
|
||||
rc = runScript(runInCfgLauncher ? configureLauncher : localCommandLauncher, reconfCmdPath,
|
||||
getSourcePath(),
|
||||
reconfArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.autoreconf", new String[]{buildDir}), //$NON-NLS-1$
|
||||
getSourcePath(), reconfArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.autoreconf", //$NON-NLS-1$
|
||||
new String[] { buildDir }),
|
||||
errMsg, console, null, consoleStart);
|
||||
consoleStart = false;
|
||||
refresh();
|
||||
}
|
||||
// Check if configure generated and if yes, run it.
|
||||
if (rc != IStatus.ERROR && configurePath.toFile().exists()) {
|
||||
rc = runScript(configureLauncher, configurePath,
|
||||
buildLocation,
|
||||
configArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.gen.makefile", new String[]{buildDir}), //$NON-NLS-1$
|
||||
rc = runScript(configureLauncher, configurePath, buildLocation, configArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.gen.makefile", //$NON-NLS-1$
|
||||
new String[] { buildDir }),
|
||||
errMsg, console, configureEnvs, false);
|
||||
if (rc != IStatus.ERROR) {
|
||||
File makefileFile = buildLocation.append(MAKEFILE).toFile();
|
||||
|
@ -582,9 +564,8 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
IPath makeCmd = builder.getBuildCommand();
|
||||
makeargs[0] = "-f" + getMakefileCVSPath().toOSString(); //$NON-NLS-1$
|
||||
rc = runCommand(runInCfgLauncher ? configureLauncher : localCommandLauncher, makeCmd,
|
||||
getProjectLocation().append(buildDir),
|
||||
makeargs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.makefile.cvs", new String[]{buildDir}), //$NON-NLS-1$
|
||||
getProjectLocation().append(buildDir), makeargs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.makefile.cvs", new String[] { buildDir }), //$NON-NLS-1$
|
||||
errMsg, console, consoleStart);
|
||||
consoleStart = false;
|
||||
if (rc != IStatus.ERROR) {
|
||||
|
@ -596,7 +577,8 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
.equals(configureLauncher.getClass().getName())) {
|
||||
rc = runScript(configureLauncher, configurePath, buildLocation, configArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.gen.makefile", //$NON-NLS-1$
|
||||
new String[] { buildDir }), errMsg, console, configureEnvs, false);
|
||||
new String[] { buildDir }),
|
||||
errMsg, console, configureEnvs, false);
|
||||
}
|
||||
}
|
||||
if (rc != IStatus.ERROR) {
|
||||
|
@ -614,19 +596,17 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
IPath reconfCmdPath = new Path(reconfCmd);
|
||||
reconfArgs[0] = "-i"; //$NON-NLS-1$
|
||||
rc = runScript(runInCfgLauncher ? configureLauncher : localCommandLauncher, reconfCmdPath,
|
||||
getSourcePath(),
|
||||
reconfArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.autoreconf", new String[]{buildDir}), //$NON-NLS-1$
|
||||
getSourcePath(), reconfArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.autoreconf", new String[] { buildDir }), //$NON-NLS-1$
|
||||
errMsg, console, null, consoleStart);
|
||||
consoleStart = false;
|
||||
// Check if configure generated and if yes, run it.
|
||||
if (rc != IStatus.ERROR) {
|
||||
refresh();
|
||||
if (configurePath.toFile().exists()) {
|
||||
rc = runScript(configureLauncher, configurePath,
|
||||
buildLocation,
|
||||
configArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.gen.makefile", new String[]{buildDir}), //$NON-NLS-1$
|
||||
rc = runScript(configureLauncher, configurePath, buildLocation, configArgs,
|
||||
AutotoolsPlugin.getFormattedString("MakeGenerator.gen.makefile", //$NON-NLS-1$
|
||||
new String[] { buildDir }),
|
||||
errMsg, console, configureEnvs, false);
|
||||
if (rc != IStatus.ERROR) {
|
||||
File makefileFile = buildLocation.append(MAKEFILE).toFile();
|
||||
|
@ -638,7 +618,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
}
|
||||
}
|
||||
}
|
||||
// If we didn't create a Makefile, consider that an error.
|
||||
// If we didn't create a Makefile, consider that an error.
|
||||
if (makefile == null || !makefile.exists()) {
|
||||
rc = IStatus.ERROR;
|
||||
errMsg = AutotoolsPlugin.getResourceString("MakeGenerator.didnt.generate"); //$NON-NLS-1$
|
||||
|
@ -649,15 +629,9 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
rc = IStatus.ERROR;
|
||||
} finally {
|
||||
// getGenerationProblems().clear();
|
||||
status = new MultiStatus(AutotoolsPlugin
|
||||
.getUniqueIdentifier(), rc, errMsg, null);
|
||||
status = new MultiStatus(AutotoolsPlugin.getUniqueIdentifier(), rc, errMsg, null);
|
||||
if (rc != IStatus.OK)
|
||||
status.add(new Status (
|
||||
rc,
|
||||
AutotoolsPlugin.getUniqueIdentifier(),
|
||||
0,
|
||||
errMsg,
|
||||
null));
|
||||
status.add(new Status(rc, AutotoolsPlugin.getUniqueIdentifier(), 0, errMsg, null));
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
@ -681,7 +655,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
while (!finished) {
|
||||
Matcher m1 = p1.matcher(command);
|
||||
if (m1.matches()) {
|
||||
command = command.replaceFirst("\\w+[=]\\\".*?\\\"","").trim();
|
||||
command = command.replaceFirst("\\w+[=]\\\".*?\\\"", "").trim();
|
||||
String s = m1.group(1).trim();
|
||||
envVars.add(s.replaceAll("\\\"", ""));
|
||||
} else {
|
||||
|
@ -698,7 +672,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
} else {
|
||||
Matcher m4 = p4.matcher(command);
|
||||
if (m4.matches()) {
|
||||
command = command.replaceFirst("\\w+[=]\\\".*?\\\"","").trim();
|
||||
command = command.replaceFirst("\\w+[=]\\\".*?\\\"", "").trim();
|
||||
String s = m4.group(1).trim();
|
||||
envVars.add(s.replaceAll("\\\"", ""));
|
||||
} else {
|
||||
|
@ -740,7 +714,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
while (!finished) {
|
||||
Matcher m1 = p1.matcher(str);
|
||||
if (m1.matches()) {
|
||||
str = str.replaceFirst("\\w+[=]\\\".*?\\\"","").trim();
|
||||
str = str.replaceFirst("\\w+[=]\\\".*?\\\"", "").trim();
|
||||
String s = m1.group(1).trim();
|
||||
envVars.add(s.replaceAll("\\\"", ""));
|
||||
} else {
|
||||
|
@ -767,11 +741,11 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
return project.getLocation();
|
||||
}
|
||||
|
||||
private IPath getBuildPath(){
|
||||
private IPath getBuildPath() {
|
||||
return new Path(this.buildDir);
|
||||
}
|
||||
|
||||
private IPath getSourcePath(){
|
||||
private IPath getSourcePath() {
|
||||
IPath sourcePath;
|
||||
if (srcDir.isEmpty())
|
||||
sourcePath = getProjectLocation();
|
||||
|
@ -851,8 +825,8 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
|
||||
// Run a command or executable (e.g. make).
|
||||
private int runCommand(ICommandLauncher commandLauncher, IPath commandPath, IPath runPath, String[] args,
|
||||
String jobDescription, String errMsg,
|
||||
IConsole console, boolean consoleStart) throws CoreException, NullPointerException, IOException {
|
||||
String jobDescription, String errMsg, IConsole console, boolean consoleStart)
|
||||
throws CoreException, NullPointerException, IOException {
|
||||
|
||||
int rc = IStatus.OK;
|
||||
|
||||
|
@ -864,14 +838,11 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
|
||||
for (int i = 0; i < configTargets.length; ++i) {
|
||||
// try to resolve the build macros in any argument
|
||||
try{
|
||||
String resolved =
|
||||
ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(
|
||||
configTargets[i],
|
||||
"", //$NON-NLS-1$
|
||||
" ", //$NON-NLS-1$
|
||||
IBuildMacroProvider.CONTEXT_CONFIGURATION,
|
||||
cfg);
|
||||
try {
|
||||
String resolved = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(
|
||||
configTargets[i], "", //$NON-NLS-1$
|
||||
" ", //$NON-NLS-1$
|
||||
IBuildMacroProvider.CONTEXT_CONFIGURATION, cfg);
|
||||
configTargets[i] = resolved;
|
||||
} catch (BuildMacroException e) {
|
||||
}
|
||||
|
@ -880,9 +851,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
String[] msgs = new String[2];
|
||||
msgs[0] = commandPath.toString();
|
||||
msgs[1] = project.getName();
|
||||
monitor.subTask(AutotoolsPlugin.getFormattedString(
|
||||
"MakeGenerator.make.message", msgs)); //$NON-NLS-1$
|
||||
|
||||
monitor.subTask(AutotoolsPlugin.getFormattedString("MakeGenerator.make.message", msgs)); //$NON-NLS-1$
|
||||
|
||||
StringBuilder buf = new StringBuilder();
|
||||
|
||||
|
@ -908,14 +877,13 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
ICommandLauncher launcher = new RemoteCommandLauncher(commandLauncher);
|
||||
launcher.setProject(project);
|
||||
// Set the environment
|
||||
IEnvironmentVariable variables[] =
|
||||
CCorePlugin.getDefault().getBuildEnvironmentManager().getVariables(cdesc, true);
|
||||
IEnvironmentVariable variables[] = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariables(cdesc,
|
||||
true);
|
||||
String[] env = null;
|
||||
ArrayList<String> envList = new ArrayList<>();
|
||||
if (variables != null) {
|
||||
for (int i = 0; i < variables.length; i++) {
|
||||
envList.add(variables[i].getName()
|
||||
+ "=" + variables[i].getValue()); //$NON-NLS-1$
|
||||
envList.add(variables[i].getName() + "=" + variables[i].getValue()); //$NON-NLS-1$
|
||||
}
|
||||
env = envList.toArray(new String[envList.size()]);
|
||||
}
|
||||
|
@ -1038,24 +1006,19 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
// Fix Bug 423192 - use environment variables when checking the Win OS Type using
|
||||
// a shell command as the path to sh may be specified there
|
||||
IEnvironmentVariable variables[] =
|
||||
CCorePlugin.getDefault().getBuildEnvironmentManager().getVariables(cdesc, true);
|
||||
IEnvironmentVariable variables[] = CCorePlugin.getDefault().getBuildEnvironmentManager()
|
||||
.getVariables(cdesc, true);
|
||||
String[] env = new String[0];
|
||||
ArrayList<String> envList = new ArrayList<>();
|
||||
if (variables != null) {
|
||||
for (int i = 0; i < variables.length; i++) {
|
||||
envList.add(variables[i].getName()
|
||||
+ "=" + variables[i].getValue()); //$NON-NLS-1$
|
||||
envList.add(variables[i].getName() + "=" + variables[i].getValue()); //$NON-NLS-1$
|
||||
}
|
||||
env = envList.toArray(new String[envList.size()]);
|
||||
}
|
||||
|
||||
launcher.execute(
|
||||
new Path(SHELL_COMMAND), //$NON-NLS-1$
|
||||
new String[] { "-c", "echo $OSTYPE" }, //$NON-NLS-1$ //$NON-NLS-2$
|
||||
env,
|
||||
buildLocation,
|
||||
SubMonitor.convert(monitor));
|
||||
launcher.execute(new Path(SHELL_COMMAND), new String[] { "-c", "echo $OSTYPE" }, //$NON-NLS-1$ //$NON-NLS-2$
|
||||
env, buildLocation, SubMonitor.convert(monitor));
|
||||
if (launcher.waitAndRead(out, out) == ICommandLauncher.OK)
|
||||
winOSType = out.toString().trim();
|
||||
} catch (CoreException e) {
|
||||
|
@ -1065,62 +1028,61 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
return winOSType;
|
||||
}
|
||||
|
||||
// Get OS name either remotely or locally, depending on the project
|
||||
private String getOSName() {
|
||||
// Get OS name either remotely or locally, depending on the project
|
||||
private String getOSName() {
|
||||
IRemoteResource remRes = getProject().getAdapter(IRemoteResource.class);
|
||||
if (remRes != null) {
|
||||
URI uri = remRes.getActiveLocationURI();
|
||||
IRemoteServicesManager remoteServiceManager = AutotoolsPlugin.getService(IRemoteServicesManager.class);
|
||||
IRemoteConnectionType connectionType = remoteServiceManager.getConnectionType(uri);
|
||||
if (connectionType != null) {
|
||||
IRemoteConnection conn = connectionType.getConnection(uri);
|
||||
if (conn != null) {
|
||||
if (!conn.isOpen()) {
|
||||
try {
|
||||
if (remRes != null) {
|
||||
URI uri = remRes.getActiveLocationURI();
|
||||
IRemoteServicesManager remoteServiceManager = AutotoolsPlugin.getService(IRemoteServicesManager.class);
|
||||
IRemoteConnectionType connectionType = remoteServiceManager.getConnectionType(uri);
|
||||
if (connectionType != null) {
|
||||
IRemoteConnection conn = connectionType.getConnection(uri);
|
||||
if (conn != null) {
|
||||
if (!conn.isOpen()) {
|
||||
try {
|
||||
conn.open(SubMonitor.convert(monitor));
|
||||
} catch (RemoteConnectionException e) {
|
||||
// Ignore and return platform OS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (conn.isOpen()) {
|
||||
return conn.getProperty(IRemoteConnection.OS_NAME_PROPERTY);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return Platform.getOS();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Platform.getOS();
|
||||
}
|
||||
|
||||
// Get the path string. We add a Win check to handle MingW.
|
||||
// For MingW, we would rather represent C:\a\b as /C/a/b which
|
||||
// doesn't cause Makefile to choke. For Cygwin we use /cygdrive/C/a/b
|
||||
private String getPathString(IPath path) {
|
||||
String s = path.toString();
|
||||
if (getOSName().equals(Platform.OS_WIN32)) {
|
||||
if (getWinOSType().equals("cygwin")) {
|
||||
s = s.replaceAll("^([a-zA-Z]):", "/cygdrive/$1");
|
||||
} else {
|
||||
s = s.replaceAll("^([a-zA-Z]):", "/$1");
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
// Get the path string. We add a Win check to handle MingW.
|
||||
// For MingW, we would rather represent C:\a\b as /C/a/b which
|
||||
// doesn't cause Makefile to choke. For Cygwin we use /cygdrive/C/a/b
|
||||
private String getPathString(IPath path) {
|
||||
String s = path.toString();
|
||||
if (getOSName().equals(Platform.OS_WIN32)) {
|
||||
if (getWinOSType().equals("cygwin")) {
|
||||
s = s.replaceAll("^([a-zA-Z]):", "/cygdrive/$1");
|
||||
} else {
|
||||
s = s.replaceAll("^([a-zA-Z]):", "/$1");
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
// Fix any escape characters in sh -c command arguments
|
||||
private String fixEscapeChars(String s) {
|
||||
s = s.replaceAll("\\\\", "\\\\\\\\");
|
||||
s = s.replaceAll("\\(", "\\\\(");
|
||||
s = s.replaceAll("\\)", "\\\\)");
|
||||
return s;
|
||||
}
|
||||
// Fix any escape characters in sh -c command arguments
|
||||
private String fixEscapeChars(String s) {
|
||||
s = s.replaceAll("\\\\", "\\\\\\\\");
|
||||
s = s.replaceAll("\\(", "\\\\(");
|
||||
s = s.replaceAll("\\)", "\\\\)");
|
||||
return s;
|
||||
}
|
||||
|
||||
// Run an autotools script (e.g. configure, autogen.sh, config.status).
|
||||
// Run an autotools script (e.g. configure, autogen.sh, config.status).
|
||||
private int runScript(ICommandLauncher commandLauncher, IPath commandPath, IPath runPath, String[] args,
|
||||
String jobDescription, String errMsg,
|
||||
IConsole console, List<String> additionalEnvs, boolean consoleStart)
|
||||
throws CoreException, NullPointerException, IOException {
|
||||
String jobDescription, String errMsg, IConsole console, List<String> additionalEnvs, boolean consoleStart)
|
||||
throws CoreException, NullPointerException, IOException {
|
||||
|
||||
int rc = IStatus.OK;
|
||||
boolean removePWD = false;
|
||||
|
@ -1134,41 +1096,37 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
if (args == null)
|
||||
configTargets = new String[1];
|
||||
else {
|
||||
configTargets = new String[args.length+1];
|
||||
configTargets = new String[args.length + 1];
|
||||
System.arraycopy(args, 0, configTargets, 1, args.length);
|
||||
}
|
||||
configTargets[0] = getPathString(commandPath);
|
||||
configTargets[0] = getPathString(commandPath);
|
||||
|
||||
// Fix for bug #343879
|
||||
String osName = getOSName();
|
||||
if (osName.equals(Platform.OS_WIN32)
|
||||
|| osName.equals(Platform.OS_MACOSX))
|
||||
removePWD = true;
|
||||
// Fix for bug #343879
|
||||
String osName = getOSName();
|
||||
if (osName.equals(Platform.OS_WIN32) || osName.equals(Platform.OS_MACOSX))
|
||||
removePWD = true;
|
||||
|
||||
// Fix for bug #343731 and bug #371277
|
||||
// Always use sh -c for executing autotool scripts which should
|
||||
// work on all Linux POSIX compliant shells including bash, dash, as
|
||||
// well as Windows and Mac OSX.
|
||||
String command = null;
|
||||
for (String arg : configTargets) {
|
||||
// TODO check for spaces in args
|
||||
if (command == null)
|
||||
command = arg;
|
||||
else
|
||||
command += " " + arg;
|
||||
}
|
||||
configTargets = new String[] { "-c", command };
|
||||
// Fix for bug #343731 and bug #371277
|
||||
// Always use sh -c for executing autotool scripts which should
|
||||
// work on all Linux POSIX compliant shells including bash, dash, as
|
||||
// well as Windows and Mac OSX.
|
||||
String command = null;
|
||||
for (String arg : configTargets) {
|
||||
// TODO check for spaces in args
|
||||
if (command == null)
|
||||
command = arg;
|
||||
else
|
||||
command += " " + arg;
|
||||
}
|
||||
configTargets = new String[] { "-c", command };
|
||||
|
||||
for (int i = 0; i < configTargets.length; ++i) {
|
||||
for (int i = 0; i < configTargets.length; ++i) {
|
||||
// try to resolve the build macros in any argument
|
||||
try{
|
||||
String resolved =
|
||||
ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(
|
||||
configTargets[i],
|
||||
"", //$NON-NLS-1$
|
||||
" ", //$NON-NLS-1$
|
||||
IBuildMacroProvider.CONTEXT_CONFIGURATION,
|
||||
cfg);
|
||||
try {
|
||||
String resolved = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(
|
||||
configTargets[i], "", //$NON-NLS-1$
|
||||
" ", //$NON-NLS-1$
|
||||
IBuildMacroProvider.CONTEXT_CONFIGURATION, cfg);
|
||||
// strip any env-var settings from options
|
||||
// fix for bug #356278
|
||||
if (resolved.length() > 0 && resolved.charAt(0) != '-')
|
||||
|
@ -1181,9 +1139,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
String[] msgs = new String[2];
|
||||
msgs[0] = commandPath.toString();
|
||||
msgs[1] = project.getName();
|
||||
monitor.subTask(AutotoolsPlugin.getFormattedString(
|
||||
"MakeGenerator.make.message", msgs)); //$NON-NLS-1$
|
||||
|
||||
monitor.subTask(AutotoolsPlugin.getFormattedString("MakeGenerator.make.message", msgs)); //$NON-NLS-1$
|
||||
|
||||
StringBuilder buf = new StringBuilder();
|
||||
|
||||
|
@ -1205,13 +1161,12 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
// Display command-line environment variables that have been stripped by us
|
||||
// because launch showCommand won't do this.
|
||||
if (additionalEnvs != null && additionalEnvs.size() > 0) {
|
||||
buf.append(AutotoolsPlugin
|
||||
.getResourceString("MakeGenerator.commandline.envvars"));
|
||||
buf.append(AutotoolsPlugin.getResourceString("MakeGenerator.commandline.envvars"));
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
buf.append("\t");
|
||||
for (int i = 0; i < additionalEnvs.size(); ++i) {
|
||||
String envvar = additionalEnvs.get(i);
|
||||
buf.append(envvar.replaceFirst("(\\w+=)(.*)"," $1\"$2\""));
|
||||
buf.append(envvar.replaceFirst("(\\w+=)(.*)", " $1\"$2\""));
|
||||
}
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
buf.append(System.getProperty("line.separator", "\n")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
@ -1223,8 +1178,8 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
ICommandLauncher launcher = new RemoteCommandLauncher(commandLauncher);
|
||||
launcher.setProject(project);
|
||||
// Set the environment
|
||||
IEnvironmentVariable variables[] =
|
||||
CCorePlugin.getDefault().getBuildEnvironmentManager().getVariables(cdesc, true);
|
||||
IEnvironmentVariable variables[] = CCorePlugin.getDefault().getBuildEnvironmentManager().getVariables(cdesc,
|
||||
true);
|
||||
String[] env = null;
|
||||
ArrayList<String> envList = new ArrayList<>();
|
||||
if (variables != null) {
|
||||
|
@ -1240,11 +1195,10 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
// configure to try and link a file to itself (e.g. projects with a GnuMakefile) and
|
||||
// obliterate the contents. Thus, we remove the trailing separator to be safe.
|
||||
if (variables[i].getName().equals("PWD")) { //$NON-NLS-1$
|
||||
if (value.charAt(value.length()-1) == IPath.SEPARATOR)
|
||||
if (value.charAt(value.length() - 1) == IPath.SEPARATOR)
|
||||
value = value.substring(0, value.length() - 1);
|
||||
}
|
||||
envList.add(variables[i].getName()
|
||||
+ "=" + value); //$NON-NLS-1$
|
||||
envList.add(variables[i].getName() + "=" + value); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
if (additionalEnvs != null)
|
||||
|
@ -1369,10 +1323,11 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
targetElem.setAttribute(TARGET_ATTR_ID, target.getTargetBuilderID());
|
||||
targetElem.setAttribute(TARGET_ATTR_PATH, target.getContainer().getProjectRelativePath().toString());
|
||||
ICStorageElement elem = targetElem.createChild(TARGET_COMMAND);
|
||||
elem.setValue(target.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, builder.getBuildCommand().toOSString()));
|
||||
elem.setValue(
|
||||
target.getBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, builder.getBuildCommand().toOSString()));
|
||||
|
||||
String targetAttr = target.getBuildAttribute(IMakeCommonBuildInfo.BUILD_ARGUMENTS, null);
|
||||
if ( targetAttr != null) {
|
||||
if (targetAttr != null) {
|
||||
elem = targetElem.createChild(TARGET_ARGUMENTS);
|
||||
elem.setValue(targetAttr);
|
||||
}
|
||||
|
@ -1421,8 +1376,8 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
protected static class MakeTargetComparator implements Comparator<Object> {
|
||||
@Override
|
||||
public int compare(Object a, Object b) {
|
||||
IMakeTarget make1 = (IMakeTarget)a;
|
||||
IMakeTarget make2 = (IMakeTarget)b;
|
||||
IMakeTarget make1 = (IMakeTarget) a;
|
||||
IMakeTarget make2 = (IMakeTarget) b;
|
||||
return make1.getName().compareToIgnoreCase(make2.getName());
|
||||
}
|
||||
|
||||
|
@ -1443,11 +1398,10 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
checkCancel();
|
||||
if (monitor == null)
|
||||
monitor = new NullProgressMonitor();
|
||||
String statusMsg = AutotoolsPlugin.getResourceString("MakeGenerator.refresh.MakeTargets"); //$NON-NLS-1$
|
||||
String statusMsg = AutotoolsPlugin.getResourceString("MakeGenerator.refresh.MakeTargets"); //$NON-NLS-1$
|
||||
monitor.subTask(statusMsg);
|
||||
|
||||
IMakeTargetManager makeTargetManager =
|
||||
MakeCorePlugin.getDefault().getTargetManager();
|
||||
IMakeTargetManager makeTargetManager = MakeCorePlugin.getDefault().getTargetManager();
|
||||
|
||||
IMakefile makefile = MakeCorePlugin.createMakefile(makefileFile.toURI(), false, null);
|
||||
ITargetRule[] targets = makefile.getTargetRules();
|
||||
|
@ -1473,9 +1427,8 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
// create and thus avoid an extraneous event notification on a change to
|
||||
// the MakeTarget. The dummy target should have an invalid name for
|
||||
// a normal make target.
|
||||
IMakeTarget dummyTarget = makeTargetManager.createTarget(
|
||||
project, "\ndummyTarget\n", targetBuildID); //$NON-NLS-1$
|
||||
makeTargetManager.setTargets(project, new IMakeTarget[]{dummyTarget});
|
||||
IMakeTarget dummyTarget = makeTargetManager.createTarget(project, "\ndummyTarget\n", targetBuildID); //$NON-NLS-1$
|
||||
makeTargetManager.setTargets(project, new IMakeTarget[] { dummyTarget });
|
||||
|
||||
for (int i = 0; i < targets.length; i++) {
|
||||
target = targets[i].getTarget();
|
||||
|
@ -1487,8 +1440,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
// existing MakeTarget will cause events to occur on every
|
||||
// modification whereas a new MakeTarget not yet added will
|
||||
// not cause this delay.
|
||||
IMakeTarget makeTarget = makeTargetManager.createTarget(
|
||||
project, targetName, targetBuildID);
|
||||
IMakeTarget makeTarget = makeTargetManager.createTarget(project, targetName, targetBuildID);
|
||||
makeTarget.setContainer(project);
|
||||
makeTarget.setStopOnError(isStopOnError);
|
||||
makeTarget.setRunAllBuilders(false);
|
||||
|
@ -1497,12 +1449,10 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
makeTarget.setBuildAttribute(IMakeCommonBuildInfo.BUILD_COMMAND, defaultBuildCommand);
|
||||
|
||||
makeTarget.setBuildAttribute(GENERATED_TARGET, "true"); //$NON-NLS-1$
|
||||
makeTarget.setBuildAttribute(IMakeTarget.BUILD_TARGET,
|
||||
targetName);
|
||||
makeTarget.setBuildAttribute(IMakeTarget.BUILD_TARGET, targetName);
|
||||
|
||||
//TODO: should this be raw build directory in macro form?
|
||||
makeTarget.setBuildAttribute(IMakeCommonBuildInfo.BUILD_LOCATION,
|
||||
buildDir);
|
||||
makeTarget.setBuildAttribute(IMakeCommonBuildInfo.BUILD_LOCATION, buildDir);
|
||||
makeTargets.put(makeTarget.getName(), makeTarget);
|
||||
} catch (CoreException e) {
|
||||
// Duplicate target. Ignore.
|
||||
|
@ -1539,8 +1489,7 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
return !(targetName.endsWith("-am") //$NON-NLS-1$
|
||||
|| targetName.endsWith("PROGRAMS") //$NON-NLS-1$
|
||||
|| targetName.endsWith("-generic") //$NON-NLS-1$
|
||||
|| (targetName.indexOf('$') >= 0)
|
||||
|| (targetName.charAt(0) == '.')
|
||||
|| (targetName.indexOf('$') >= 0) || (targetName.charAt(0) == '.')
|
||||
|| targetName.equals(targetName.toUpperCase()));
|
||||
}
|
||||
|
||||
|
@ -1563,9 +1512,9 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
}
|
||||
}
|
||||
if (c == ' ' && !inComment) {
|
||||
if (buffer.length() > 0){
|
||||
if (buffer.length() > 0) {
|
||||
String str = buffer.toString().trim();
|
||||
if(str.length() > 0){
|
||||
if (str.length() > 0) {
|
||||
aList.add(str);
|
||||
}
|
||||
}
|
||||
|
@ -1575,9 +1524,9 @@ public class AutotoolsNewMakeGenerator extends MarkerGenerator {
|
|||
buffer.append(c);
|
||||
}
|
||||
}
|
||||
if (buffer.length() > 0){
|
||||
if (buffer.length() > 0) {
|
||||
String str = buffer.toString().trim();
|
||||
if(str.length() > 0){
|
||||
if (str.length() > 0) {
|
||||
aList.add(str);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,16 +24,12 @@ import org.eclipse.core.runtime.IPath;
|
|||
*/
|
||||
public class AutotoolsProblemMarkerInfo {
|
||||
|
||||
public static enum Type{
|
||||
PACKAGE,
|
||||
HEADER,
|
||||
PROG,
|
||||
public static enum Type {
|
||||
PACKAGE, HEADER, PROG,
|
||||
/**
|
||||
* @since 1.2
|
||||
*/
|
||||
LIB,
|
||||
FILE,
|
||||
GENERIC
|
||||
LIB, FILE, GENERIC
|
||||
}
|
||||
|
||||
private ProblemMarkerInfo marker;
|
||||
|
@ -42,18 +38,19 @@ public class AutotoolsProblemMarkerInfo {
|
|||
this(file, -1, description, severity, null, null, name, type);
|
||||
}
|
||||
|
||||
public AutotoolsProblemMarkerInfo(IResource file, int lineNumber, String description, int severity, String variableName, Type type) {
|
||||
public AutotoolsProblemMarkerInfo(IResource file, int lineNumber, String description, int severity,
|
||||
String variableName, Type type) {
|
||||
this(file, lineNumber, description, severity, variableName, null, null, type);
|
||||
}
|
||||
|
||||
public AutotoolsProblemMarkerInfo(IResource file, int lineNumber, String description, int severity, String variableName,
|
||||
IPath externalPath, String libraryInfo, Type type) {
|
||||
public AutotoolsProblemMarkerInfo(IResource file, int lineNumber, String description, int severity,
|
||||
String variableName, IPath externalPath, String libraryInfo, Type type) {
|
||||
this.marker = new ProblemMarkerInfo(file, lineNumber, description, severity, variableName, externalPath);
|
||||
|
||||
marker.setAttribute(IAutotoolsMarker.MARKER_PROBLEM_TYPE, type.name());
|
||||
marker.setAttribute(IAutotoolsMarker.MARKER_LIBRARY_INFO, libraryInfo);
|
||||
|
||||
marker.setType (IAutotoolsMarker.AUTOTOOLS_PROBLEM_MARKER);
|
||||
marker.setType(IAutotoolsMarker.AUTOTOOLS_PROBLEM_MARKER);
|
||||
}
|
||||
|
||||
public ProblemMarkerInfo getMarker() {
|
||||
|
@ -64,7 +61,7 @@ public class AutotoolsProblemMarkerInfo {
|
|||
return marker.getAttribute(IAutotoolsMarker.MARKER_PROBLEM_TYPE);
|
||||
}
|
||||
|
||||
public String getLibraryInfo(){
|
||||
public String getLibraryInfo() {
|
||||
return marker.getAttribute(IAutotoolsMarker.MARKER_LIBRARY_INFO);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,24 +16,25 @@ package org.eclipse.cdt.internal.autotools.core;
|
|||
import org.eclipse.cdt.autotools.core.AutotoolsPlugin;
|
||||
import org.eclipse.core.runtime.QualifiedName;
|
||||
|
||||
|
||||
public class AutotoolsPropertyConstants {
|
||||
|
||||
static final String PREFIX = AutotoolsPlugin.getUniqueIdentifier() + "."; //$NON-NLS-1$
|
||||
static final String PREFIX_COMPAT = "org.eclipse.linuxtools.cdt.autotools."; //$NON-NLS-1$
|
||||
public static final String AUTOMAKE_VERSION_STRING = "AutoconfEditorAutomakeVersion"; //$NON-NLS-1$
|
||||
public static final QualifiedName AUTOMAKE_VERSION = new QualifiedName(PREFIX, AUTOMAKE_VERSION_STRING);
|
||||
public static final QualifiedName AUTOMAKE_VERSION_COMPAT = new QualifiedName(PREFIX_COMPAT, AUTOMAKE_VERSION_STRING);
|
||||
public static final QualifiedName AUTOMAKE_VERSION_COMPAT = new QualifiedName(PREFIX_COMPAT,
|
||||
AUTOMAKE_VERSION_STRING);
|
||||
public static final String AUTOCONF_VERSION_STRING = "AutoconfEditorAutoconfVersion"; //$NON-NLS-1$
|
||||
public static final QualifiedName AUTOCONF_VERSION = new QualifiedName(PREFIX, AUTOCONF_VERSION_STRING);
|
||||
public static final QualifiedName AUTOCONF_VERSION_COMPAT = new QualifiedName(PREFIX_COMPAT, AUTOCONF_VERSION_STRING);
|
||||
public static final QualifiedName AUTOCONF_VERSION_COMPAT = new QualifiedName(PREFIX_COMPAT,
|
||||
AUTOCONF_VERSION_STRING);
|
||||
public static final String AUTOCONF_MACRO_VERSIONING = "AutoconfEditorMacroVersioning"; //$NON-NLS-1$
|
||||
public static final QualifiedName AUTOCONF_TOOL = new QualifiedName(PREFIX, "AutoconfToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName AUTOMAKE_TOOL = new QualifiedName(PREFIX, "AutomakeToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName ACLOCAL_TOOL = new QualifiedName(PREFIX, "AclocalToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName AUTOHEADER_TOOL = new QualifiedName(PREFIX, "AutoheaderToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName AUTORECONF_TOOL = new QualifiedName(PREFIX, "AutoreconfToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName LIBTOOLIZE_TOOL = new QualifiedName(PREFIX, "LibtoolizePath"); //$NON-NLS-1$
|
||||
public static final QualifiedName ACLOCAL_TOOL = new QualifiedName(PREFIX, "AclocalToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName AUTOHEADER_TOOL = new QualifiedName(PREFIX, "AutoheaderToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName AUTORECONF_TOOL = new QualifiedName(PREFIX, "AutoreconfToolPath"); //$NON-NLS-1$
|
||||
public static final QualifiedName LIBTOOLIZE_TOOL = new QualifiedName(PREFIX, "LibtoolizePath"); //$NON-NLS-1$
|
||||
public static final QualifiedName CLEAN_DELETE = new QualifiedName(PREFIX, "CleanDelete"); //$NON-NLS-1$
|
||||
public static final QualifiedName CLEAN_MAKE_TARGET = new QualifiedName(PREFIX, "CleanMakeTarget"); //$NON-NLS-1$
|
||||
public static final QualifiedName SCANNER_USE_MAKE_W = new QualifiedName(PREFIX, "ScannerUseMakeW");
|
||||
|
@ -50,7 +51,7 @@ public class AutotoolsPropertyConstants {
|
|||
public static final String AC_VERSION_2_68 = fACVersions[4];
|
||||
public static final String LATEST_AC_VERSION = fACVersions[fACVersions.length - 1];
|
||||
|
||||
public static final String[] fAMVersions = {"1.4-p6", "1.9.5", "1.9.6", "1.11.1"}; //$NON-NLS-1$
|
||||
public static final String[] fAMVersions = { "1.4-p6", "1.9.5", "1.9.6", "1.11.1" }; //$NON-NLS-1$
|
||||
public static final String LATEST_AM_VERSION = fAMVersions[fAMVersions.length - 1];
|
||||
|
||||
public static final String CLEAN_MAKE_TARGET_DEFAULT = "distclean"; //$NON-NLS-1$
|
||||
|
|
|
@ -36,21 +36,18 @@ import org.eclipse.core.runtime.Path;
|
|||
// which is similar to the CDT one.
|
||||
public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
||||
public static final String ID = AutotoolsPlugin.PLUGIN_ID + ".errorParser"; //$NON-NLS-1$
|
||||
private Pattern pkgconfigError =
|
||||
Pattern.compile(".*?(configure:\\s+error:\\s+Package requirements\\s+\\((.*?)\\)\\s+were not met).*"); //$NON-NLS-1$
|
||||
private Pattern genconfigError =
|
||||
Pattern.compile(".*?configure:\\s+error:\\s+(.*)"); //$NON-NLS-1$
|
||||
private Pattern checkingFail =
|
||||
Pattern.compile("checking for (.*)\\.\\.\\. no"); //$NON-NLS-1$
|
||||
private Pattern pkgconfigError = Pattern
|
||||
.compile(".*?(configure:\\s+error:\\s+Package requirements\\s+\\((.*?)\\)\\s+were not met).*"); //$NON-NLS-1$
|
||||
private Pattern genconfigError = Pattern.compile(".*?configure:\\s+error:\\s+(.*)"); //$NON-NLS-1$
|
||||
private Pattern checkingFail = Pattern.compile("checking for (.*)\\.\\.\\. no"); //$NON-NLS-1$
|
||||
|
||||
private Pattern changingConfigDirectory =
|
||||
Pattern.compile("Configuring in (.*)"); //$NON-NLS-1$
|
||||
private Pattern changingConfigDirectory = Pattern.compile("Configuring in (.*)"); //$NON-NLS-1$
|
||||
|
||||
private IPath buildDir;
|
||||
private IPath sourcePath;
|
||||
private IProject project;
|
||||
|
||||
public ErrorParser(){
|
||||
public ErrorParser() {
|
||||
}
|
||||
|
||||
public ErrorParser(IPath sourcePath, IPath buildPath) {
|
||||
|
@ -59,8 +56,7 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean processLine(String line,
|
||||
org.eclipse.cdt.core.ErrorParserManager eoParser) {
|
||||
public boolean processLine(String line, org.eclipse.cdt.core.ErrorParserManager eoParser) {
|
||||
|
||||
if (this.project == null)
|
||||
this.project = eoParser.getProject();
|
||||
|
@ -72,7 +68,7 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
|||
this.sourcePath = eoParser.getProject().getLocation();
|
||||
|
||||
AutotoolsProblemMarkerInfo marker = processLine(line);
|
||||
if ( marker != null){
|
||||
if (marker != null) {
|
||||
// Check to see if addProblemMarker exists.
|
||||
try {
|
||||
Method method = eoParser.getClass().getMethod("addProblemMarker", ProblemMarkerInfo.class);
|
||||
|
@ -94,7 +90,7 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
|||
this.project = eoParser.getProject();
|
||||
|
||||
AutotoolsProblemMarkerInfo marker = processLine(line);
|
||||
if ( marker != null){
|
||||
if (marker != null) {
|
||||
eoParser.addProblemMarker(marker);
|
||||
return true;
|
||||
}
|
||||
|
@ -105,7 +101,7 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
|||
Matcher m;
|
||||
|
||||
m = changingConfigDirectory.matcher(line);
|
||||
if(m.matches()){
|
||||
if (m.matches()) {
|
||||
// set configuration directory.
|
||||
this.buildDir = this.buildDir.append(m.group(1));
|
||||
this.sourcePath = this.sourcePath.append(m.group(1));
|
||||
|
@ -114,7 +110,8 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
|||
|
||||
m = pkgconfigError.matcher(line);
|
||||
if (m.matches()) {
|
||||
return new AutotoolsProblemMarkerInfo(getProject(), -1, m.group(1), SEVERITY_ERROR_BUILD, null, null, m.group(2), AutotoolsProblemMarkerInfo.Type.PACKAGE);
|
||||
return new AutotoolsProblemMarkerInfo(getProject(), -1, m.group(1), SEVERITY_ERROR_BUILD, null, null,
|
||||
m.group(2), AutotoolsProblemMarkerInfo.Type.PACKAGE);
|
||||
}
|
||||
|
||||
m = genconfigError.matcher(line);
|
||||
|
@ -129,7 +126,8 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
|||
// Find the log file containing this check
|
||||
AutotoolsProblemMarkerInfo.Type type = getCheckType(m.group(1));
|
||||
if (type != null)
|
||||
return new AutotoolsProblemMarkerInfo(getProject(), "Missing " + type + " " + m.group(1), SEVERITY_INFO, m.group(1), type);
|
||||
return new AutotoolsProblemMarkerInfo(getProject(), "Missing " + type + " " + m.group(1), SEVERITY_INFO,
|
||||
m.group(1), type);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -201,8 +199,7 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
|
|||
if (!file.exists())
|
||||
return -1;
|
||||
try (LineNumberReader reader = new LineNumberReader(new FileReader(file))) {
|
||||
Pattern errorPattern =
|
||||
Pattern.compile("configure:(\\d+): checking for " + name); //$NON-NLS-1$
|
||||
Pattern errorPattern = Pattern.compile("configure:(\\d+): checking for " + name); //$NON-NLS-1$
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
Matcher m = errorPattern.matcher(line);
|
||||
|
|
|
@ -59,7 +59,7 @@ public class ErrorParserManager extends OutputStream {
|
|||
public static final char ERROR_PARSER_DELIMITER = ';';
|
||||
|
||||
private int nOpens;
|
||||
private int lineCounter=0;
|
||||
private int lineCounter = 0;
|
||||
|
||||
private final IProject fProject;
|
||||
private final MarkerGenerator fMarkerGenerator;
|
||||
|
@ -74,7 +74,6 @@ public class ErrorParserManager extends OutputStream {
|
|||
private OutputStream outputStream;
|
||||
private final StringBuilder currentLine = new StringBuilder();
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -85,7 +84,6 @@ public class ErrorParserManager extends OutputStream {
|
|||
this(project, project.getLocationURI(), markerGenerator);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* URI based constructor.
|
||||
*
|
||||
|
@ -194,7 +192,6 @@ public class ErrorParserManager extends OutputStream {
|
|||
return fDirectoryStack.size();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Parses the input and tries to generate error or warning markers
|
||||
*/
|
||||
|
@ -202,7 +199,7 @@ public class ErrorParserManager extends OutputStream {
|
|||
String lineTrimmed = line.trim();
|
||||
lineCounter++;
|
||||
|
||||
ProblemMarkerInfo marker=null;
|
||||
ProblemMarkerInfo marker = null;
|
||||
|
||||
for (ErrorParser parser : fErrorParsers.values()) {
|
||||
ErrorParser curr = parser;
|
||||
|
@ -217,7 +214,7 @@ public class ErrorParserManager extends OutputStream {
|
|||
}
|
||||
// standard behavior (pre 5.1) is to trim the line
|
||||
String lineToParse = lineTrimmed;
|
||||
if ((types & IErrorParser2.KEEP_UNTRIMMED) !=0 ) {
|
||||
if ((types & IErrorParser2.KEEP_UNTRIMMED) != 0) {
|
||||
// untrimmed lines
|
||||
lineToParse = line;
|
||||
}
|
||||
|
@ -228,11 +225,11 @@ public class ErrorParserManager extends OutputStream {
|
|||
// It should not stop parsing of the rest of output.
|
||||
try {
|
||||
consume = curr.processLine(lineToParse, this);
|
||||
} catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
AutotoolsPlugin.log(e);
|
||||
} finally {
|
||||
if (fErrors.size() > 0) {
|
||||
if (marker==null)
|
||||
if (marker == null)
|
||||
marker = fErrors.get(0);
|
||||
fErrors.clear();
|
||||
}
|
||||
|
@ -240,7 +237,7 @@ public class ErrorParserManager extends OutputStream {
|
|||
|
||||
if (consume)
|
||||
break;
|
||||
}
|
||||
}
|
||||
outputLine(line, marker);
|
||||
}
|
||||
|
||||
|
@ -256,7 +253,7 @@ public class ErrorParserManager extends OutputStream {
|
|||
try {
|
||||
if (marker != null) {
|
||||
if (outputStream instanceof IErrorMarkeredOutputStream) {
|
||||
IErrorMarkeredOutputStream mos = (IErrorMarkeredOutputStream)outputStream;
|
||||
IErrorMarkeredOutputStream mos = (IErrorMarkeredOutputStream) outputStream;
|
||||
mos.write(l, marker);
|
||||
}
|
||||
}
|
||||
|
@ -275,7 +272,6 @@ public class ErrorParserManager extends OutputStream {
|
|||
return lineCounter;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add marker to the list of error markers.
|
||||
*
|
||||
|
@ -304,10 +300,10 @@ public class ErrorParserManager extends OutputStream {
|
|||
* @param varName - variable name.
|
||||
* @param externalPath - external path pointing to a file outside the workspace.
|
||||
*/
|
||||
public void generateExternalMarker(IResource file, int lineNumber, String desc, int severity,
|
||||
String varName, IPath externalPath, String libraryInfo, AutotoolsProblemMarkerInfo.Type type) {
|
||||
AutotoolsProblemMarkerInfo problemMarkerInfo =
|
||||
new AutotoolsProblemMarkerInfo(file, lineNumber, desc, severity, varName, externalPath, libraryInfo, type);
|
||||
public void generateExternalMarker(IResource file, int lineNumber, String desc, int severity, String varName,
|
||||
IPath externalPath, String libraryInfo, AutotoolsProblemMarkerInfo.Type type) {
|
||||
AutotoolsProblemMarkerInfo problemMarkerInfo = new AutotoolsProblemMarkerInfo(file, lineNumber, desc, severity,
|
||||
varName, externalPath, libraryInfo, type);
|
||||
addProblemMarker(problemMarkerInfo);
|
||||
}
|
||||
|
||||
|
@ -316,7 +312,7 @@ public class ErrorParserManager extends OutputStream {
|
|||
*
|
||||
* @param problemMarkerInfo - The marker to be added
|
||||
*/
|
||||
public void addProblemMarker(AutotoolsProblemMarkerInfo problemMarkerInfo){
|
||||
public void addProblemMarker(AutotoolsProblemMarkerInfo problemMarkerInfo) {
|
||||
fErrors.add(problemMarkerInfo.getMarker());
|
||||
fMarkerGenerator.addMarker(problemMarkerInfo);
|
||||
}
|
||||
|
@ -401,8 +397,8 @@ public class ErrorParserManager extends OutputStream {
|
|||
while ((i = buffer.indexOf('\n')) != -1) {
|
||||
String line = buffer.substring(0, i);
|
||||
// get rid of any trailing '\r'
|
||||
if (line.endsWith("\r")) //$NON-NLS-1$
|
||||
line=line.substring(0,line.length()-1);
|
||||
if (line.endsWith("\r")) //$NON-NLS-1$
|
||||
line = line.substring(0, line.length() - 1);
|
||||
processLine(line);
|
||||
previousLine = line;
|
||||
buffer = buffer.substring(i + 1); // skip the \n and advance
|
||||
|
@ -418,42 +414,39 @@ public class ErrorParserManager extends OutputStream {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts a location {@link IPath} to an {@link URI}. Contrary to
|
||||
* {@link URIUtil#toURI(IPath)} this method does not assume that the path belongs
|
||||
* to local file system.
|
||||
*
|
||||
* The returned URI uses the scheme and authority of the current working directory
|
||||
* as returned by {@link #getWorkingDirectoryURI()}
|
||||
*
|
||||
* Converts a location {@link IPath} to an {@link URI}. Contrary to
|
||||
* {@link URIUtil#toURI(IPath)} this method does not assume that the path belongs
|
||||
* to local file system.
|
||||
*
|
||||
* The returned URI uses the scheme and authority of the current working directory
|
||||
* as returned by {@link #getWorkingDirectoryURI()}
|
||||
*
|
||||
* @param path - the path to convert to URI.
|
||||
* @return URI
|
||||
* @since 5.1
|
||||
*/
|
||||
private URI toURI(IPath path) {
|
||||
// try {
|
||||
URI baseURI = getWorkingDirectoryURI();
|
||||
String uriString = path.toString();
|
||||
// try {
|
||||
URI baseURI = getWorkingDirectoryURI();
|
||||
String uriString = path.toString();
|
||||
|
||||
// On Windows "C:/folder/" -> "/C:/folder/"
|
||||
if (path.isAbsolute() && uriString.charAt(0) != IPath.SEPARATOR)
|
||||
uriString = IPath.SEPARATOR + uriString;
|
||||
// On Windows "C:/folder/" -> "/C:/folder/"
|
||||
if (path.isAbsolute() && uriString.charAt(0) != IPath.SEPARATOR)
|
||||
uriString = IPath.SEPARATOR + uriString;
|
||||
|
||||
return EFSExtensionManager.getDefault().createNewURIFromPath(baseURI, uriString);
|
||||
return EFSExtensionManager.getDefault().createNewURIFromPath(baseURI, uriString);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param ids - array of error parser IDs
|
||||
* @return error parser IDs delimited with error parser delimiter ";"
|
||||
* @since 5.2
|
||||
*/
|
||||
public static String toDelimitedString(String[] ids) {
|
||||
String result=""; //$NON-NLS-1$
|
||||
String result = ""; //$NON-NLS-1$
|
||||
for (String id : ids) {
|
||||
if (result.length()==0) {
|
||||
if (result.length() == 0) {
|
||||
result = id;
|
||||
} else {
|
||||
result += ERROR_PARSER_DELIMITER + id;
|
||||
|
|
|
@ -19,7 +19,7 @@ import java.util.ResourceBundle;
|
|||
|
||||
public class MakeMessages {
|
||||
|
||||
private static final String RESOURCE_BUNDLE= MakeMessages.class.getName();
|
||||
private static final String RESOURCE_BUNDLE = MakeMessages.class.getName();
|
||||
private static ResourceBundle fgResourceBundle;
|
||||
static {
|
||||
try {
|
||||
|
|
|
@ -69,8 +69,7 @@ public abstract class MarkerGenerator {
|
|||
if (errorVar != null) {
|
||||
marker.setAttribute(IAutotoolsMarker.MARKER_VARIABLE, errorVar);
|
||||
}
|
||||
}
|
||||
catch (CoreException e) {
|
||||
} catch (CoreException e) {
|
||||
AutotoolsPlugin.log(e.getStatus());
|
||||
}
|
||||
|
||||
|
@ -96,12 +95,13 @@ public abstract class MarkerGenerator {
|
|||
ProblemMarkerInfo info = autotoolsMarker.getMarker();
|
||||
|
||||
try {
|
||||
IResource markerResource = info.file ;
|
||||
if (markerResource==null) {
|
||||
IResource markerResource = info.file;
|
||||
if (markerResource == null) {
|
||||
markerResource = getProject();
|
||||
}
|
||||
IMarker[] cur = markerResource.findMarkers(IAutotoolsMarker.AUTOTOOLS_PROBLEM_MARKER, true, IResource.DEPTH_ONE);
|
||||
// IMarker[] cur = markerResource.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_ONE);
|
||||
IMarker[] cur = markerResource.findMarkers(IAutotoolsMarker.AUTOTOOLS_PROBLEM_MARKER, true,
|
||||
IResource.DEPTH_ONE);
|
||||
// IMarker[] cur = markerResource.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_ONE);
|
||||
/*
|
||||
* Try to find matching markers and don't put in duplicates
|
||||
*/
|
||||
|
@ -110,14 +110,15 @@ public abstract class MarkerGenerator {
|
|||
int line = ((Integer) cur[i].getAttribute(IMarker.LOCATION)).intValue();
|
||||
int sev = ((Integer) cur[i].getAttribute(IMarker.SEVERITY)).intValue();
|
||||
String mesg = (String) cur[i].getAttribute(IMarker.MESSAGE);
|
||||
if (line == info.lineNumber && sev == mapMarkerSeverity(info.severity) && mesg.equals(info.description)) {
|
||||
if (line == info.lineNumber && sev == mapMarkerSeverity(info.severity)
|
||||
&& mesg.equals(info.description)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IMarker marker = markerResource.createMarker(IAutotoolsMarker.AUTOTOOLS_PROBLEM_MARKER);
|
||||
// IMarker marker = markerResource.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
|
||||
// IMarker marker = markerResource.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
|
||||
marker.setAttribute(IMarker.LOCATION, info.lineNumber);
|
||||
marker.setAttribute(IMarker.MESSAGE, info.description);
|
||||
marker.setAttribute(IMarker.SEVERITY, mapMarkerSeverity(info.severity));
|
||||
|
@ -133,28 +134,26 @@ public abstract class MarkerGenerator {
|
|||
|
||||
// Add all other client defined attributes.
|
||||
Map<String, String> attributes = info.getAttributes();
|
||||
if (attributes != null){
|
||||
if (attributes != null) {
|
||||
for (Entry<String, String> entry : attributes.entrySet()) {
|
||||
marker.setAttribute(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
catch (CoreException e) {
|
||||
} catch (CoreException e) {
|
||||
AutotoolsPlugin.log(e.getStatus());
|
||||
}
|
||||
}
|
||||
|
||||
private int mapMarkerSeverity(int severity) {
|
||||
switch (severity) {
|
||||
case SEVERITY_ERROR_BUILD :
|
||||
case SEVERITY_ERROR_RESOURCE :
|
||||
return IMarker.SEVERITY_ERROR;
|
||||
case SEVERITY_INFO :
|
||||
return IMarker.SEVERITY_INFO;
|
||||
case SEVERITY_WARNING :
|
||||
return IMarker.SEVERITY_WARNING;
|
||||
case SEVERITY_ERROR_BUILD:
|
||||
case SEVERITY_ERROR_RESOURCE:
|
||||
return IMarker.SEVERITY_ERROR;
|
||||
case SEVERITY_INFO:
|
||||
return IMarker.SEVERITY_INFO;
|
||||
case SEVERITY_WARNING:
|
||||
return IMarker.SEVERITY_WARNING;
|
||||
}
|
||||
return IMarker.SEVERITY_ERROR;
|
||||
}
|
||||
|
@ -175,7 +174,7 @@ public abstract class MarkerGenerator {
|
|||
IMarker[] markers;
|
||||
try {
|
||||
markers = project.findMarkers(IAutotoolsMarker.AUTOTOOLS_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE);
|
||||
// markers = project.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE);
|
||||
// markers = project.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE);
|
||||
} catch (CoreException e) {
|
||||
// Handled just about every case in the sanity check
|
||||
return;
|
||||
|
|
|
@ -21,11 +21,11 @@ public class MarkerResolutionGenerator implements IMarkerResolutionGenerator {
|
|||
|
||||
@Override
|
||||
public IMarkerResolution[] getResolutions(IMarker marker) {
|
||||
// System.out.println("in marker resolution, library info is " + marker.getAttribute(IAutotoolsMarker.MARKER_LIBRARY_INFO, ""));
|
||||
// String libraryInfo = marker.getAttribute(IAutotoolsMarker.MARKER_LIBRARY_INFO, null);
|
||||
// if (libraryInfo != null) {
|
||||
// return new IMarkerResolution[] {new PkgconfigErrorResolution(libraryInfo)};
|
||||
// };
|
||||
// System.out.println("in marker resolution, library info is " + marker.getAttribute(IAutotoolsMarker.MARKER_LIBRARY_INFO, ""));
|
||||
// String libraryInfo = marker.getAttribute(IAutotoolsMarker.MARKER_LIBRARY_INFO, null);
|
||||
// if (libraryInfo != null) {
|
||||
// return new IMarkerResolution[] {new PkgconfigErrorResolution(libraryInfo)};
|
||||
// };
|
||||
return new IMarkerResolution[0];
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ public class PkgconfigErrorResolution implements IMarkerResolution {
|
|||
protected StringBuffer fBuffer;
|
||||
|
||||
public ConsoleOutputStream() {
|
||||
fBuffer= new StringBuffer();
|
||||
fBuffer = new StringBuffer();
|
||||
}
|
||||
|
||||
public synchronized String readBuffer() {
|
||||
|
@ -51,10 +51,10 @@ public class PkgconfigErrorResolution implements IMarkerResolution {
|
|||
fBuffer.append(new String(ascii));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public synchronized void write(byte[] b, int off, int len) {
|
||||
fBuffer.append(new String(b, off, len));
|
||||
}
|
||||
fBuffer.append(new String(b, off, len));
|
||||
}
|
||||
}
|
||||
|
||||
private static final String PKG_UPDATE_MSG = "UpdatePackage.msg"; //$NON-NLS-1$
|
||||
|
@ -71,7 +71,7 @@ public class PkgconfigErrorResolution implements IMarkerResolution {
|
|||
|
||||
@Override
|
||||
public String getLabel() {
|
||||
return AutotoolsPlugin.getFormattedString(PKG_UPDATE_MSG, new String[] {pkgName});
|
||||
return AutotoolsPlugin.getFormattedString(PKG_UPDATE_MSG, new String[] { pkgName });
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -85,23 +85,20 @@ public class PkgconfigErrorResolution implements IMarkerResolution {
|
|||
// Note, that we won't have any pkgconfig path settings from the configure call
|
||||
// so we can't handle the situation where the user doesn't have pkgconfig files
|
||||
// stored in the usual place.
|
||||
IPath pkgconfigPath =
|
||||
new Path("/usr/lib/pkgconfig").append(pkgName+".pc"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
IPath pkgconfigPath = new Path("/usr/lib/pkgconfig").append(pkgName + ".pc"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
// Get a launcher for the config command
|
||||
RemoteCommandLauncher launcher = new RemoteCommandLauncher();
|
||||
IPath commandPath = new Path("rpm"); //$NON-NLS-1$
|
||||
String[] commandArgs =
|
||||
new String[] {"-q", //$NON-NLS-1$
|
||||
String[] commandArgs = new String[] { "-q", //$NON-NLS-1$
|
||||
"--queryformat", //$NON-NLS-1$
|
||||
"%{NAME}", //$NON-NLS-1$
|
||||
"--whatprovides", //$NON-NLS-1$
|
||||
pkgconfigPath.toOSString()};
|
||||
pkgconfigPath.toOSString() };
|
||||
try {
|
||||
// Use CDT launcher to run rpm to query the package that provides
|
||||
// the pkgconfig .pc file for the package in question.
|
||||
ConsoleOutputStream output = new ConsoleOutputStream();
|
||||
Process proc = launcher.execute(commandPath, commandArgs, null,
|
||||
new Path("."), new NullProgressMonitor());
|
||||
Process proc = launcher.execute(commandPath, commandArgs, null, new Path("."), new NullProgressMonitor());
|
||||
if (proc != null) {
|
||||
try {
|
||||
// Close the input of the process since we will never write to
|
||||
|
@ -109,8 +106,7 @@ public class PkgconfigErrorResolution implements IMarkerResolution {
|
|||
proc.getOutputStream().close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
if (launcher.waitAndRead(output, output, new NullProgressMonitor())
|
||||
!= ICommandLauncher.OK) {
|
||||
if (launcher.waitAndRead(output, output, new NullProgressMonitor()) != ICommandLauncher.OK) {
|
||||
AutotoolsPlugin.logErrorMessage(launcher.getErrorMessage());
|
||||
} else {
|
||||
String result = output.readBuffer();
|
||||
|
|
|
@ -30,7 +30,6 @@ import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
|||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
|
||||
public class AutotoolsConfiguration implements IAConfiguration {
|
||||
|
||||
public static class Option {
|
||||
|
@ -94,51 +93,53 @@ public class AutotoolsConfiguration implements IAConfiguration {
|
|||
// All options following a category are children of that category
|
||||
// in a tree view, up to the next category.
|
||||
private static Option[] configOpts = new Option[] {
|
||||
new Option(AutotoolsOptionConstants.TOOL_CONFIGURE, IConfigureOption.TOOL),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_GENERAL, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_CONFIGDIR, IConfigureOption.INTERNAL),
|
||||
new Option(AutotoolsOptionConstants.OPT_CACHE_FILE, "cache_file", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_HELP, IConfigureOption.BIN),
|
||||
new Option(AutotoolsOptionConstants.OPT_NO_CREATE, "no_create", IConfigureOption.BIN), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_QUIET, IConfigureOption.BIN),
|
||||
new Option(AutotoolsOptionConstants.OPT_VERSION, IConfigureOption.BIN),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_PLATFORM, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_HOST, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_BUILD, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_TARGET, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_DIRECTORIES, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_PREFIX, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_EXEC_PREFIX, "exec_prefix", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_LIBDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_BINDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SBINDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_INCLUDEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_DATADIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SYSCONFDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_INFODIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_MANDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SRCDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_LOCALSTATEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SHAREDSTATEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_LIBEXECDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_OLDINCLUDEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_FILENAMES, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_PROGRAM_PREFIX, "program_prefix", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_PROGRAM_SUFFIX, "program_suffix", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_PROGRAM_TRANSFORM_NAME, "program_transform_name", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_ENVVAR, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_ENVVAR, IConfigureOption.ENVVAR),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_FEATURES, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_ENABLE_MAINTAINER_MODE, "enable_maintainer_mode", IConfigureOption.BIN), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.FLAG_CFLAGS, "cflags", AutotoolsOptionConstants.FLAG_CFLAGS_FLAGS, IConfigureOption.FLAG), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_CFLAGS_DEBUG, "cflags_debug", IConfigureOption.FLAGVALUE), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new Option(AutotoolsOptionConstants.OPT_CFLAGS_GPROF, "cflags_gprof", IConfigureOption.FLAGVALUE), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new Option(AutotoolsOptionConstants.OPT_CFLAGS_GCOV, "cflags_gcov", IConfigureOption.FLAGVALUE), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new Option(AutotoolsOptionConstants.OPT_USER, IConfigureOption.MULTIARG),
|
||||
new Option(AutotoolsOptionConstants.TOOL_AUTOGEN, "autogen", "autogen.sh", IConfigureOption.TOOL), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_OPTIONS, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_AUTOGENOPTS, IConfigureOption.MULTIARG),
|
||||
};
|
||||
new Option(AutotoolsOptionConstants.TOOL_CONFIGURE, IConfigureOption.TOOL),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_GENERAL, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_CONFIGDIR, IConfigureOption.INTERNAL),
|
||||
new Option(AutotoolsOptionConstants.OPT_CACHE_FILE, "cache_file", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_HELP, IConfigureOption.BIN),
|
||||
new Option(AutotoolsOptionConstants.OPT_NO_CREATE, "no_create", IConfigureOption.BIN), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_QUIET, IConfigureOption.BIN),
|
||||
new Option(AutotoolsOptionConstants.OPT_VERSION, IConfigureOption.BIN),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_PLATFORM, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_HOST, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_BUILD, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_TARGET, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_DIRECTORIES, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_PREFIX, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_EXEC_PREFIX, "exec_prefix", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_LIBDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_BINDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SBINDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_INCLUDEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_DATADIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SYSCONFDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_INFODIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_MANDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SRCDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_LOCALSTATEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_SHAREDSTATEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_LIBEXECDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.OPT_OLDINCLUDEDIR, IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_FILENAMES, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_PROGRAM_PREFIX, "program_prefix", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_PROGRAM_SUFFIX, "program_suffix", IConfigureOption.STRING), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.OPT_PROGRAM_TRANSFORM_NAME, "program_transform_name", //$NON-NLS-1$
|
||||
IConfigureOption.STRING),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_ENVVAR, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_ENVVAR, IConfigureOption.ENVVAR),
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_FEATURES, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_ENABLE_MAINTAINER_MODE, "enable_maintainer_mode", //$NON-NLS-1$
|
||||
IConfigureOption.BIN),
|
||||
new Option(AutotoolsOptionConstants.FLAG_CFLAGS, "cflags", AutotoolsOptionConstants.FLAG_CFLAGS_FLAGS, //$NON-NLS-1$
|
||||
IConfigureOption.FLAG),
|
||||
new Option(AutotoolsOptionConstants.OPT_CFLAGS_DEBUG, "cflags_debug", IConfigureOption.FLAGVALUE), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new Option(AutotoolsOptionConstants.OPT_CFLAGS_GPROF, "cflags_gprof", IConfigureOption.FLAGVALUE), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new Option(AutotoolsOptionConstants.OPT_CFLAGS_GCOV, "cflags_gcov", IConfigureOption.FLAGVALUE), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
new Option(AutotoolsOptionConstants.OPT_USER, IConfigureOption.MULTIARG),
|
||||
new Option(AutotoolsOptionConstants.TOOL_AUTOGEN, "autogen", "autogen.sh", IConfigureOption.TOOL), //$NON-NLS-1$
|
||||
new Option(AutotoolsOptionConstants.CATEGORY_OPTIONS, IConfigureOption.CATEGORY),
|
||||
new Option(AutotoolsOptionConstants.OPT_AUTOGENOPTS, IConfigureOption.MULTIARG), };
|
||||
|
||||
private static Option[] toolList;
|
||||
|
||||
|
@ -214,8 +215,8 @@ public class AutotoolsConfiguration implements IAConfiguration {
|
|||
"org.eclipse.linuxtools.cdt.autotools.core.buildType.debug")) { //$NON-NLS-1$
|
||||
defaultValue = "CFLAGS='-g -O0'"; //$NON-NLS-1$
|
||||
try {
|
||||
if (project.hasNature(CCProjectNature.CC_NATURE_ID))
|
||||
defaultValue += " CXXFLAGS='-g -O0'"; //$NON-NLS-1$
|
||||
if (project.hasNature(CCProjectNature.CC_NATURE_ID))
|
||||
defaultValue += " CXXFLAGS='-g -O0'"; //$NON-NLS-1$
|
||||
} catch (CoreException e) {
|
||||
// do nothing
|
||||
}
|
||||
|
@ -244,9 +245,8 @@ public class AutotoolsConfiguration implements IAConfiguration {
|
|||
configOptions.put(opt.name, f);
|
||||
break;
|
||||
case IConfigureOption.FLAGVALUE:
|
||||
FlagValueConfigureOption fv
|
||||
= new FlagValueConfigureOption(opt.name, opt.transformedName,
|
||||
this, ConfigureMessages.getParameter(opt.transformedName));
|
||||
FlagValueConfigureOption fv = new FlagValueConfigureOption(opt.name, opt.transformedName, this,
|
||||
ConfigureMessages.getParameter(opt.transformedName));
|
||||
if (defaultValue != null)
|
||||
fv.setValue(defaultValue);
|
||||
lastFlag.addChild(opt.name);
|
||||
|
@ -276,8 +276,7 @@ public class AutotoolsConfiguration implements IAConfiguration {
|
|||
for (int j = i + 1; j < configOpts.length; ++j) {
|
||||
Option o = configOpts[j];
|
||||
int type = o.getType();
|
||||
if (type != IConfigureOption.CATEGORY &&
|
||||
type != IConfigureOption.TOOL)
|
||||
if (type != IConfigureOption.CATEGORY && type != IConfigureOption.TOOL)
|
||||
options.add(o);
|
||||
else
|
||||
return options.toArray(new Option[options.size()]);
|
||||
|
|
|
@ -131,7 +131,6 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
return cfg;
|
||||
}
|
||||
|
||||
|
||||
public synchronized boolean isConfigurationAlreadySaved(IProject project, ICConfigurationDescription cfgd) {
|
||||
Map<String, IAConfiguration> cfgs = getSavedConfigs(project);
|
||||
if (cfgs != null)
|
||||
|
@ -189,7 +188,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
saveConfigs(project);
|
||||
}
|
||||
|
||||
public synchronized void replaceProjectConfigurations(IProject project, Map<String, IAConfiguration> cfgs, ICConfigurationDescription[] cfgds) {
|
||||
public synchronized void replaceProjectConfigurations(IProject project, Map<String, IAConfiguration> cfgs,
|
||||
ICConfigurationDescription[] cfgds) {
|
||||
String projectName = project.getName();
|
||||
configs.put(projectName, cfgs);
|
||||
saveConfigs(project, cfgds);
|
||||
|
@ -223,8 +223,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
cfgId = cfgIdNode.getNodeValue();
|
||||
else if (nameNode != null) {
|
||||
String cfgName = nameNode.getNodeValue();
|
||||
ICConfigurationDescription cfgd =
|
||||
CoreModel.getDefault().getProjectDescription(project).getConfigurationByName(cfgName);
|
||||
ICConfigurationDescription cfgd = CoreModel.getDefault().getProjectDescription(project)
|
||||
.getConfigurationByName(cfgName);
|
||||
if (cfgd != null)
|
||||
cfgId = cfgd.getId();
|
||||
else
|
||||
|
@ -276,7 +276,7 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
}
|
||||
|
||||
public synchronized IAConfiguration getTmpConfiguration(IProject p, ICConfigurationDescription cfgd) {
|
||||
Map <String, IAConfiguration> list = getTmpConfigs(p);
|
||||
Map<String, IAConfiguration> list = getTmpConfigs(p);
|
||||
IAConfiguration acfg = list.get(cfgd.getId());
|
||||
if (acfg != null) {
|
||||
return acfg;
|
||||
|
@ -298,7 +298,7 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
public synchronized boolean cloneCfg(IProject p, String oldId, ICConfigurationDescription cfgd) {
|
||||
if (isConfigurationAlreadySaved(p, cfgd))
|
||||
return true;
|
||||
Map <String, IAConfiguration> tmpList = getTmpConfigs(p);
|
||||
Map<String, IAConfiguration> tmpList = getTmpConfigs(p);
|
||||
String newId = cfgd.getId();
|
||||
// Don't bother if the new configuration is already on the tmp list
|
||||
IAConfiguration cfg = tmpList.get(newId);
|
||||
|
@ -307,7 +307,7 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
// Otherwise, try and find the old id to copy the configuration from
|
||||
// or punt if not found
|
||||
IAConfiguration oldCfg = null;
|
||||
Map <String, IAConfiguration> savedList = getSavedConfigs(p);
|
||||
Map<String, IAConfiguration> savedList = getSavedConfigs(p);
|
||||
if (savedList != null)
|
||||
oldCfg = savedList.get(oldId);
|
||||
if (oldCfg != null) {
|
||||
|
@ -325,7 +325,7 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
}
|
||||
|
||||
private Map<String, IAConfiguration> getTmpConfigs(IProject p) {
|
||||
Map <String, IAConfiguration> tmpList = tmpConfigs.get(p.getName());
|
||||
Map<String, IAConfiguration> tmpList = tmpConfigs.get(p.getName());
|
||||
if (tmpList == null) {
|
||||
tmpList = new HashMap<>();
|
||||
tmpConfigs.put(p.getName(), tmpList);
|
||||
|
@ -339,7 +339,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
|
||||
public synchronized void saveConfigs(IProject project) {
|
||||
synchronized (project) {
|
||||
ICConfigurationDescription[] cfgds = CoreModel.getDefault().getProjectDescription(project).getConfigurations();
|
||||
ICConfigurationDescription[] cfgds = CoreModel.getDefault().getProjectDescription(project)
|
||||
.getConfigurations();
|
||||
saveConfigs(project, cfgds);
|
||||
}
|
||||
}
|
||||
|
@ -353,8 +354,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
for (int j = 0; j < tools.length; ++j) {
|
||||
ITool tool = tools[j];
|
||||
if (tool.getName().equals("configure")) { //$NON-NLS-1$
|
||||
IOption option =
|
||||
tool.getOptionBySuperClassId("org.eclipse.linuxtools.cdt.autotools.core.option.configure.name"); //$NON-NLS-1$
|
||||
IOption option = tool
|
||||
.getOptionBySuperClassId("org.eclipse.linuxtools.cdt.autotools.core.option.configure.name"); //$NON-NLS-1$
|
||||
IHoldsOptions h = tool;
|
||||
try {
|
||||
IOption optionToSet = h.getOptionToSet(option, false);
|
||||
|
@ -445,11 +446,11 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
|
||||
IResource res = root.findMember(projectName, false);
|
||||
if (res == null || res.getType() != IResource.PROJECT) {
|
||||
AutotoolsPlugin.logErrorMessage(ConfigureMessages.getFormattedString(CFG_CANT_SAVE,
|
||||
new String[]{projectName}));
|
||||
AutotoolsPlugin.logErrorMessage(
|
||||
ConfigureMessages.getFormattedString(CFG_CANT_SAVE, new String[] { projectName }));
|
||||
return;
|
||||
}
|
||||
IProject project = (IProject)res;
|
||||
IProject project = (IProject) res;
|
||||
IPath output = project.getLocation().append(CFG_FILE_NAME);
|
||||
File f = output.toFile();
|
||||
if (!f.exists())
|
||||
|
@ -496,7 +497,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
Option option = optionList[j];
|
||||
IConfigureOption opt = cfg.getOption(option.getName());
|
||||
if (!opt.isCategory())
|
||||
p.println("<option id=\"" + option.getName() + "\" value=\"" + opt.getValue() + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
p.println("<option id=\"" + option.getName() + "\" value=\"" + opt.getValue() //$NON-NLS-1$//$NON-NLS-2$
|
||||
+ "\"/>"); //$NON-NLS-1$
|
||||
}
|
||||
p.println("</configuration>"); //$NON-NLS-1$
|
||||
}
|
||||
|
@ -553,7 +555,6 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
private IConfigureOption option;
|
||||
private final static String UNMODIFIABLE_CONFIG_OPTION = "CfgOptions.Unmodifiable.Option"; //$NON-NLS-1$
|
||||
|
||||
|
||||
public AutotoolsOption(IConfigureOption option) {
|
||||
this.option = option;
|
||||
}
|
||||
|
@ -610,8 +611,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
/**
|
||||
* @since 1.2
|
||||
*/
|
||||
public synchronized Map<String, IAutotoolsOption> getAutotoolsCfgOptions(IProject project,
|
||||
String cfgId) throws CoreException {
|
||||
public synchronized Map<String, IAutotoolsOption> getAutotoolsCfgOptions(IProject project, String cfgId)
|
||||
throws CoreException {
|
||||
|
||||
// Verify project is valid Autotools project
|
||||
if (project == null || !project.hasNature(AutotoolsNewProjectNature.AUTOTOOLS_NATURE_ID)) {
|
||||
|
@ -620,8 +621,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
}
|
||||
|
||||
// Verify configuration id is valid
|
||||
ICConfigurationDescription cfgd =
|
||||
CoreModel.getDefault().getProjectDescription(project).getConfigurationById(cfgId);
|
||||
ICConfigurationDescription cfgd = CoreModel.getDefault().getProjectDescription(project)
|
||||
.getConfigurationById(cfgId);
|
||||
IConfiguration icfg = ManagedBuildManager.getConfigurationForDescription(cfgd);
|
||||
if (icfg == null) {
|
||||
throw new CoreException(new Status(IStatus.ERROR, AutotoolsPlugin.PLUGIN_ID,
|
||||
|
@ -637,8 +638,8 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
for (Iterator<Entry<String, IConfigureOption>> i = cfgOptions.entrySet().iterator(); i.hasNext();) {
|
||||
Map.Entry<String, IConfigureOption> entry = i.next();
|
||||
String name = entry.getKey();
|
||||
IAutotoolsOption configOption =
|
||||
new AutotoolsOption(entry.getValue().copy((AutotoolsConfiguration)dummyCfg));
|
||||
IAutotoolsOption configOption = new AutotoolsOption(
|
||||
entry.getValue().copy((AutotoolsConfiguration) dummyCfg));
|
||||
options.put(name, configOption);
|
||||
}
|
||||
|
||||
|
@ -649,7 +650,7 @@ public class AutotoolsConfigurationManager implements IResourceChangeListener {
|
|||
* @since 1.2
|
||||
*/
|
||||
public synchronized void updateAutotoolCfgOptions(IProject project, String cfgId,
|
||||
Map<String,IAutotoolsOption> options) throws CoreException {
|
||||
Map<String, IAutotoolsOption> options) throws CoreException {
|
||||
|
||||
// Verify project is valid Autotools project
|
||||
if (project == null || !project.hasNature(AutotoolsNewProjectNature.AUTOTOOLS_NATURE_ID)) {
|
||||
|
|
|
@ -28,8 +28,7 @@ import org.eclipse.cdt.managedbuilder.core.ManagedOptionValueHandler;
|
|||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
public class AutotoolsOptionValueHandler extends ManagedOptionValueHandler
|
||||
implements IOptionApplicability {
|
||||
public class AutotoolsOptionValueHandler extends ManagedOptionValueHandler implements IOptionApplicability {
|
||||
|
||||
public static final String DEFAULT_BUILD_DIR = "build"; //$NON-NLS-1$
|
||||
public static final String CONFIGURE_TOOL_ID = "org.eclipse.linuxtools.cdt.autotools.core.gnu.toolchain.tool.configure"; //$NON-NLS-1$
|
||||
|
@ -41,25 +40,21 @@ public class AutotoolsOptionValueHandler extends ManagedOptionValueHandler
|
|||
|
||||
//FIXME: Use holder to set option value, not the "option" parameter
|
||||
@Override
|
||||
public boolean handleValue(IBuildObject buildObject,
|
||||
IHoldsOptions holder,
|
||||
IOption option,
|
||||
String extraArgument, int event)
|
||||
{
|
||||
public boolean handleValue(IBuildObject buildObject, IHoldsOptions holder, IOption option, String extraArgument,
|
||||
int event) {
|
||||
// Get the current value of the build dir option.
|
||||
String value = (String)option.getValue();
|
||||
String value = (String) option.getValue();
|
||||
|
||||
if (buildObject instanceof IConfiguration &&
|
||||
(event == IManagedOptionValueHandler.EVENT_OPEN)) {
|
||||
// SortedSet<Integer> nums = new TreeSet<Integer>();
|
||||
IConfiguration configuration = (IConfiguration)buildObject;
|
||||
if (buildObject instanceof IConfiguration && (event == IManagedOptionValueHandler.EVENT_OPEN)) {
|
||||
// SortedSet<Integer> nums = new TreeSet<Integer>();
|
||||
IConfiguration configuration = (IConfiguration) buildObject;
|
||||
ICConfigurationDescription cfgd = ManagedBuildManager.getDescriptionForConfiguration(configuration);
|
||||
if (option.getName().equals("Name") && cfgd != null) {
|
||||
String cfgId = cfgd.getId();
|
||||
if (!value.isEmpty() && !value.equals(cfgId)) {
|
||||
// we have a cloned configuration and we know that the
|
||||
// clonee's name is the value of the option
|
||||
IProject project = (IProject)configuration.getManagedProject().getOwner();
|
||||
IProject project = (IProject) configuration.getManagedProject().getOwner();
|
||||
String autoName = null;
|
||||
String autoNameTemplate = null;
|
||||
// Check if we are supposed to automatically name the build directory for any
|
||||
|
@ -72,7 +67,7 @@ public class AutotoolsOptionValueHandler extends ManagedOptionValueHandler
|
|||
}
|
||||
if (autoName == null || autoName.equals(AutotoolsPropertyConstants.TRUE)) {
|
||||
autoNameTemplate = "${workspace_loc:/" + project.getName() + //$NON-NLS-1$
|
||||
"}/build-" + fixName(configuration.getName()); //$NON-NLS-1$
|
||||
"}/build-" + fixName(configuration.getName()); //$NON-NLS-1$
|
||||
IBuilder cfgBuilder = configuration.getEditableBuilder();
|
||||
cfgBuilder.setBuildPath(autoNameTemplate);
|
||||
}
|
||||
|
@ -106,22 +101,18 @@ public class AutotoolsOptionValueHandler extends ManagedOptionValueHandler
|
|||
// IOptionApplicability methods
|
||||
|
||||
@Override
|
||||
public boolean isOptionEnabled(IBuildObject configuration,
|
||||
IHoldsOptions holder, IOption option) {
|
||||
public boolean isOptionEnabled(IBuildObject configuration, IHoldsOptions holder, IOption option) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOptionUsedInCommandLine(IBuildObject configuration,
|
||||
IHoldsOptions holder, IOption option) {
|
||||
public boolean isOptionUsedInCommandLine(IBuildObject configuration, IHoldsOptions holder, IOption option) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOptionVisible(IBuildObject configuration,
|
||||
IHoldsOptions holder, IOption option) {
|
||||
public boolean isOptionVisible(IBuildObject configuration, IHoldsOptions holder, IOption option) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -37,10 +37,10 @@ public class BinConfigureOption extends AbstractConfigurationOption {
|
|||
|
||||
@Override
|
||||
public String getParameter() {
|
||||
if (isParmSet())
|
||||
return getParameterName();
|
||||
else
|
||||
return ""; //$NON-NLS-1$
|
||||
if (isParmSet())
|
||||
return getParameterName();
|
||||
else
|
||||
return ""; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -20,8 +20,7 @@ import java.util.ResourceBundle;
|
|||
public class ConfigureMessages {
|
||||
private static final String BUNDLE_NAME = ConfigureMessages.class.getName();
|
||||
|
||||
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
|
||||
.getBundle(BUNDLE_NAME);
|
||||
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
|
||||
|
||||
private ConfigureMessages() {
|
||||
}
|
||||
|
@ -37,6 +36,7 @@ public class ConfigureMessages {
|
|||
public static String getParameter(String name) {
|
||||
return getString("Option.configure." + name + ".parm"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the string from the resource bundle,
|
||||
* or 'key' if not found.
|
||||
|
@ -61,7 +61,7 @@ public class ConfigureMessages {
|
|||
* @return the resource bundle message
|
||||
*/
|
||||
public static String getFormattedString(String key, String[] args) {
|
||||
return MessageFormat.format(getString(key), (Object[])args);
|
||||
return MessageFormat.format(getString(key), (Object[]) args);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ public class FlagConfigureOption extends AbstractConfigurationOption {
|
|||
IConfigureOption o = cfg.getOption(fvname);
|
||||
if (o.isParmSet()) {
|
||||
if (o instanceof IFlagConfigureValueOption) {
|
||||
parm.append(separator).append(((IFlagConfigureValueOption)o).getFlags());
|
||||
parm.append(separator).append(((IFlagConfigureValueOption) o).getFlags());
|
||||
separator = " "; //$NON-NLS-1$
|
||||
haveParm = true;
|
||||
}
|
||||
|
|
|
@ -19,14 +19,12 @@ public class FlagValueConfigureOption extends BinConfigureOption implements IFla
|
|||
|
||||
private String flags;
|
||||
|
||||
public FlagValueConfigureOption(String name, String msgName, AutotoolsConfiguration cfg,
|
||||
String flags) {
|
||||
public FlagValueConfigureOption(String name, String msgName, AutotoolsConfiguration cfg, String flags) {
|
||||
super(name, msgName, cfg);
|
||||
this.flags = flags;
|
||||
}
|
||||
|
||||
private FlagValueConfigureOption(String name, AutotoolsConfiguration cfg, String value,
|
||||
String flags) {
|
||||
private FlagValueConfigureOption(String name, AutotoolsConfiguration cfg, String value, String flags) {
|
||||
super(name, cfg);
|
||||
this.setValue(value);
|
||||
this.flags = flags;
|
||||
|
|
|
@ -27,8 +27,7 @@ public class InternalConfigureOption extends AbstractConfigurationOption {
|
|||
this.value = ""; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
private InternalConfigureOption(String name, AutotoolsConfiguration cfg,
|
||||
String value) {
|
||||
private InternalConfigureOption(String name, AutotoolsConfiguration cfg, String value) {
|
||||
super(name, cfg);
|
||||
this.value = value;
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@ package org.eclipse.cdt.internal.autotools.core.configure;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class MultiArgConfigureOption extends AbstractConfigurationOption {
|
||||
|
||||
private String value;
|
||||
|
@ -33,8 +32,7 @@ public class MultiArgConfigureOption extends AbstractConfigurationOption {
|
|||
this.value = ""; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
private MultiArgConfigureOption(String name, AutotoolsConfiguration cfg,
|
||||
String value) {
|
||||
private MultiArgConfigureOption(String name, AutotoolsConfiguration cfg, String value) {
|
||||
super(name, cfg);
|
||||
this.value = value;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.core.configure;
|
||||
|
||||
|
||||
public class StringConfigureOption extends AbstractConfigurationOption {
|
||||
|
||||
private String value;
|
||||
|
@ -28,8 +27,7 @@ public class StringConfigureOption extends AbstractConfigurationOption {
|
|||
this.value = ""; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
private StringConfigureOption(String name, AutotoolsConfiguration cfg,
|
||||
String value) {
|
||||
private StringConfigureOption(String name, AutotoolsConfiguration cfg, String value) {
|
||||
super(name, cfg);
|
||||
this.value = value;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,6 @@ import org.eclipse.core.runtime.IPath;
|
|||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new Project in the workspace.
|
||||
*/
|
||||
|
@ -54,7 +53,8 @@ public class NewAutotoolsProject extends ProcessRunner {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void process(TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor) throws ProcessFailureException {
|
||||
public void process(TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor)
|
||||
throws ProcessFailureException {
|
||||
String projectName = args[0].getSimpleValue();
|
||||
String location = args[1].getSimpleValue();
|
||||
String artifactExtension = args[2].getSimpleValue();
|
||||
|
@ -134,7 +134,8 @@ public class NewAutotoolsProject extends ProcessRunner {
|
|||
if (!option.isExtensionElement()) {
|
||||
option.setValue(val);
|
||||
} else {
|
||||
IOption newOption = config.getToolChain().createOption(option, option.getId() + "." + ManagedBuildManager.getRandomNumber(), option.getName(), false); //$NON-NLS-1$
|
||||
IOption newOption = config.getToolChain().createOption(option,
|
||||
option.getId() + "." + ManagedBuildManager.getRandomNumber(), option.getName(), false); //$NON-NLS-1$
|
||||
newOption.setValue(val);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,11 +45,11 @@ public class SetAutotoolsStringOptionValue extends ProcessRunner {
|
|||
}
|
||||
|
||||
ProcessArgument[][] resourcePathObjects = args[1].getComplexArrayValue();
|
||||
for(int i=0; i<resourcePathObjects.length; i++) {
|
||||
for (int i = 0; i < resourcePathObjects.length; i++) {
|
||||
ProcessArgument[] resourcePathObject = resourcePathObjects[i];
|
||||
String id = resourcePathObject[0].getSimpleValue();
|
||||
String value = resourcePathObject[1].getSimpleValue();
|
||||
setOptionValue(projectHandle, id, value);
|
||||
setOptionValue(projectHandle, id, value);
|
||||
}
|
||||
|
||||
workspaceDesc.setAutoBuilding(autoBuilding);
|
||||
|
@ -62,12 +62,11 @@ public class SetAutotoolsStringOptionValue extends ProcessRunner {
|
|||
private void setOptionValue(IProject projectHandle, String id, String value) {
|
||||
|
||||
AutotoolsConfigurationManager.getInstance().syncConfigurations(projectHandle);
|
||||
ICConfigurationDescription[] cfgds =
|
||||
CoreModel.getDefault().getProjectDescription(projectHandle).getConfigurations();
|
||||
ICConfigurationDescription[] cfgds = CoreModel.getDefault().getProjectDescription(projectHandle)
|
||||
.getConfigurations();
|
||||
if (cfgds != null && cfgds.length >= 1) {
|
||||
IAConfiguration iaConfig =
|
||||
AutotoolsConfigurationManager.getInstance().getConfiguration(projectHandle,
|
||||
cfgds[0].getId());
|
||||
IAConfiguration iaConfig = AutotoolsConfigurationManager.getInstance().getConfiguration(projectHandle,
|
||||
cfgds[0].getId());
|
||||
iaConfig.setOption(id, value);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,16 +19,8 @@ import org.junit.runners.Suite;
|
|||
|
||||
/** On Windows requires either Cygwin or MinGW to be in PATH */
|
||||
@RunWith(Suite.class)
|
||||
@Suite.SuiteClasses({
|
||||
AutotoolsProjectTest0.class,
|
||||
AutotoolsProjectNatureTest.class,
|
||||
AutotoolsProjectTest1.class,
|
||||
AutotoolsProjectTest2.class,
|
||||
AutotoolsVirtualFolderTest.class,
|
||||
AutotoolsEnvironmentVarTest.class,
|
||||
LibtoolGCCBuildCommandParserTest.class,
|
||||
UpdateConfigureTest.class,
|
||||
EditorTests.class
|
||||
})
|
||||
@Suite.SuiteClasses({ AutotoolsProjectTest0.class, AutotoolsProjectNatureTest.class, AutotoolsProjectTest1.class,
|
||||
AutotoolsProjectTest2.class, AutotoolsVirtualFolderTest.class, AutotoolsEnvironmentVarTest.class,
|
||||
LibtoolGCCBuildCommandParserTest.class, UpdateConfigureTest.class, EditorTests.class })
|
||||
public class AutomatedIntegrationSuite {
|
||||
}
|
||||
|
|
|
@ -88,4 +88,3 @@ public class AutotoolsEnvironmentVarTest {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,17 +23,18 @@ import org.junit.Before;
|
|||
import org.junit.Test;
|
||||
|
||||
public class AutotoolsProjectNatureTest {
|
||||
@Before
|
||||
public void setUp() throws CoreException {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
}
|
||||
@Before
|
||||
public void setUp() throws CoreException {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutotoolsProjectNature() throws Exception {
|
||||
IProject testProject = ProjectTools.createProject("testProject");
|
||||
if(testProject == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
if (testProject == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
assertTrue(testProject.hasNature(AutotoolsNewProjectNature.AUTOTOOLS_NATURE_ID));
|
||||
testProject.delete(true, false, ProjectTools.getMonitor());
|
||||
}
|
||||
|
|
|
@ -30,23 +30,24 @@ import org.junit.Test;
|
|||
public class AutotoolsProjectTest0 {
|
||||
|
||||
private IProject testProject;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
public void setUp() throws Exception {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
testProject = ProjectTools.createProject("testProject0");
|
||||
if (testProject == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
testProject.open(new NullProgressMonitor());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test sample project which has a hello world program. The top-level
|
||||
* configure is found in the top-level directory. The hello world source
|
||||
* is found in sample/hello.c.
|
||||
* @throws Exception
|
||||
*/
|
||||
/**
|
||||
* Test sample project which has a hello world program. The top-level
|
||||
* configure is found in the top-level directory. The hello world source
|
||||
* is found in sample/hello.c.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testAutotoolsProject0() throws Exception {
|
||||
Path p = new Path("zip/project1.zip");
|
||||
|
@ -72,6 +73,7 @@ public class AutotoolsProjectTest0 {
|
|||
x = new org.eclipse.core.runtime.Path("sample/Makefile");
|
||||
assertTrue(testProject.exists(x));
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
testProject.refreshLocal(IResource.DEPTH_INFINITE, null);
|
||||
|
|
|
@ -30,25 +30,26 @@ import org.junit.Test;
|
|||
public class AutotoolsProjectTest1 {
|
||||
|
||||
private IProject testProject;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
public void setUp() throws Exception {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
testProject = ProjectTools.createProject("testProject1");
|
||||
if (testProject == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
testProject.open(new NullProgressMonitor());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test sample project which has a hello world program. The top-level
|
||||
* configure is found in the subdirectory src which also contains the
|
||||
* subdirectory sample. The hello world source is found in
|
||||
* src/sample/hello.c so configuration must create multiple
|
||||
* Makefiles.
|
||||
* @throws Exception
|
||||
*/
|
||||
/**
|
||||
* Test sample project which has a hello world program. The top-level
|
||||
* configure is found in the subdirectory src which also contains the
|
||||
* subdirectory sample. The hello world source is found in
|
||||
* src/sample/hello.c so configuration must create multiple
|
||||
* Makefiles.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testAutotoolsProject1() throws Exception {
|
||||
Path p = new Path("zip/project1.zip");
|
||||
|
@ -75,6 +76,7 @@ public class AutotoolsProjectTest1 {
|
|||
x = new org.eclipse.core.runtime.Path("sample/Makefile");
|
||||
assertTrue(testProject.exists(x));
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
testProject.refreshLocal(IResource.DEPTH_INFINITE, null);
|
||||
|
|
|
@ -33,25 +33,26 @@ import org.junit.Test;
|
|||
public class AutotoolsProjectTest2 {
|
||||
|
||||
private IProject testProject;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
public void setUp() throws Exception {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
testProject = ProjectTools.createProject("testProject2");
|
||||
if (testProject == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
testProject.open(new NullProgressMonitor());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test sample project which has a hello world program. The top-level
|
||||
* contains autogen.sh which will build configure, but not run it.
|
||||
* The hello world source is found in
|
||||
* src/sample/hello.c so configuration must create multiple
|
||||
* Makefiles.
|
||||
* @throws Exception
|
||||
*/
|
||||
/**
|
||||
* Test sample project which has a hello world program. The top-level
|
||||
* contains autogen.sh which will build configure, but not run it.
|
||||
* The hello world source is found in
|
||||
* src/sample/hello.c so configuration must create multiple
|
||||
* Makefiles.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testAutotoolsProject2() throws Exception {
|
||||
Path p = new Path("zip/project2.zip");
|
||||
|
@ -89,6 +90,7 @@ public class AutotoolsProjectTest2 {
|
|||
x = new org.eclipse.core.runtime.Path("sample/Makefile");
|
||||
assertTrue(testProject.exists(x));
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
testProject.refreshLocal(IResource.DEPTH_INFINITE, null);
|
||||
|
|
|
@ -60,23 +60,22 @@ import org.eclipse.ui.wizards.datatransfer.ImportOperation;
|
|||
import org.eclipse.ui.wizards.datatransfer.ZipFileStructureProvider;
|
||||
import org.osgi.framework.FrameworkUtil;
|
||||
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class ProjectTools {
|
||||
|
||||
static IWorkspace workspace;
|
||||
static IWorkspaceRoot root;
|
||||
static NullProgressMonitor monitor;
|
||||
static String pluginRoot;
|
||||
static ConvertProjectWizardPage page;
|
||||
static boolean setupComplete;
|
||||
static IWorkspaceRoot root;
|
||||
static NullProgressMonitor monitor;
|
||||
static String pluginRoot;
|
||||
static ConvertProjectWizardPage page;
|
||||
static boolean setupComplete;
|
||||
|
||||
/**
|
||||
* Setup routine for tests.
|
||||
* @return true if setup successful, false otherwise
|
||||
* @throws CoreException
|
||||
*/
|
||||
public static boolean setup() throws CoreException {
|
||||
/**
|
||||
* Setup routine for tests.
|
||||
* @return true if setup successful, false otherwise
|
||||
* @throws CoreException
|
||||
*/
|
||||
public static boolean setup() throws CoreException {
|
||||
if (!setupComplete) {
|
||||
IWorkspaceDescription desc;
|
||||
workspace = ResourcesPlugin.getWorkspace();
|
||||
|
@ -105,7 +104,7 @@ public class ProjectTools {
|
|||
workspace.build(IncrementalProjectBuilder.FULL_BUILD, getMonitor());
|
||||
workspace.getRoot().refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
|
||||
} catch (CoreException e) {
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -145,7 +144,7 @@ public class ProjectTools {
|
|||
// if the path points to an actual object, use its resource to get its run path location
|
||||
// which will handle any linked directories
|
||||
if (project.findMember(filePath) != null)
|
||||
runPath = project.findMember(filePath).getLocation().removeLastSegments(1);
|
||||
runPath = project.findMember(filePath).getLocation().removeLastSegments(1);
|
||||
String[] args = new String[2];
|
||||
args[0] = "+x";
|
||||
// if the path points to an actual object, use its resource to get its location
|
||||
|
@ -155,8 +154,7 @@ public class ProjectTools {
|
|||
else // otherwise, just append to project location
|
||||
args[1] = project.getLocation().append(filePath).toOSString();
|
||||
try {
|
||||
Process proc = launcher.execute(commandPath, args, new String[0],
|
||||
runPath, new NullProgressMonitor());
|
||||
Process proc = launcher.execute(commandPath, args, new String[0], runPath, new NullProgressMonitor());
|
||||
if (proc != null) {
|
||||
try {
|
||||
// Close the input of the process since we will never write to
|
||||
|
@ -194,11 +192,12 @@ public class ProjectTools {
|
|||
@Override
|
||||
public void applyOptions(IProject project, IProgressMonitor monitor) {
|
||||
setCurrentProject(project);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IConfiguration[] getSelectedConfigurations() {
|
||||
IProjectType projectType = ManagedBuildManager.getExtensionProjectType("org.eclipse.linuxtools.cdt.autotools.core.projectType"); //$NON-NLS-1$
|
||||
IProjectType projectType = ManagedBuildManager
|
||||
.getExtensionProjectType("org.eclipse.linuxtools.cdt.autotools.core.projectType"); //$NON-NLS-1$
|
||||
return projectType.getConfigurations();
|
||||
}
|
||||
}
|
||||
|
@ -212,12 +211,13 @@ public class ProjectTools {
|
|||
IProject testProject = root.getProject(name);
|
||||
if (testProject == null) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
IProjectDescription description = workspace.newProjectDescription(name);
|
||||
try {
|
||||
testProject.create(monitor);
|
||||
testProject.open(monitor);
|
||||
IProject newProject = CCorePlugin.getDefault().createCDTProject(description, testProject, SubMonitor.convert(monitor,25));
|
||||
IProject newProject = CCorePlugin.getDefault().createCDTProject(description, testProject,
|
||||
SubMonitor.convert(monitor, 25));
|
||||
ConvertToAutotoolsProjectWizardTest wizard = new ConvertToAutotoolsProjectWizardTest();
|
||||
wizard.addPages();
|
||||
ConvertToAutotoolsProjectWizardPage page = new ConvertToAutotoolsProjectWizardPage("test", wizard);
|
||||
|
@ -242,10 +242,12 @@ public class ProjectTools {
|
|||
cfg.setConfigToolDirectory(dir);
|
||||
}
|
||||
|
||||
private static void importFilesFromZip(ZipFile srcZipFile, IPath destPath, IProgressMonitor monitor) throws InvocationTargetException {
|
||||
ZipFileStructureProvider structureProvider= new ZipFileStructureProvider(srcZipFile);
|
||||
private static void importFilesFromZip(ZipFile srcZipFile, IPath destPath, IProgressMonitor monitor)
|
||||
throws InvocationTargetException {
|
||||
ZipFileStructureProvider structureProvider = new ZipFileStructureProvider(srcZipFile);
|
||||
try {
|
||||
ImportOperation op= new ImportOperation(destPath, structureProvider.getRoot(), structureProvider, new ImportOverwriteQuery());
|
||||
ImportOperation op = new ImportOperation(destPath, structureProvider.getRoot(), structureProvider,
|
||||
new ImportOverwriteQuery());
|
||||
op.run(monitor);
|
||||
} catch (InterruptedException e) {
|
||||
// should not happen
|
||||
|
@ -264,10 +266,9 @@ public class ProjectTools {
|
|||
// running aclocal, autoconf, and automake
|
||||
launcher.showCommand(true);
|
||||
IPath commandPath = new Path("sh");
|
||||
String[] cmdargs = new String[]{"genfiles.sh"};
|
||||
String[] cmdargs = new String[] { "genfiles.sh" };
|
||||
try {
|
||||
Process proc = launcher.execute(commandPath, cmdargs, new String[0],
|
||||
runPath, new NullProgressMonitor());
|
||||
Process proc = launcher.execute(commandPath, cmdargs, new String[0], runPath, new NullProgressMonitor());
|
||||
if (proc != null) {
|
||||
try {
|
||||
// Close the input of the process since we will never write to
|
||||
|
@ -276,8 +277,8 @@ public class ProjectTools {
|
|||
} catch (IOException e) {
|
||||
}
|
||||
|
||||
if (launcher.waitAndRead(stdout, stderr, SubMonitor.convert(
|
||||
monitor, IProgressMonitor.UNKNOWN)) != CommandLauncher.OK) {
|
||||
if (launcher.waitAndRead(stdout, stderr,
|
||||
SubMonitor.convert(monitor, IProgressMonitor.UNKNOWN)) != CommandLauncher.OK) {
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
|
@ -289,7 +290,8 @@ public class ProjectTools {
|
|||
return true;
|
||||
}
|
||||
|
||||
private static void importFilesFromZipAndGenerate(ZipFile srcZipFile, IPath destPath, IProgressMonitor monitor) throws InvocationTargetException {
|
||||
private static void importFilesFromZipAndGenerate(ZipFile srcZipFile, IPath destPath, IProgressMonitor monitor)
|
||||
throws InvocationTargetException {
|
||||
importFilesFromZip(srcZipFile, destPath, monitor);
|
||||
if (!generateFiles(destPath))
|
||||
throw new InvocationTargetException(new Exception("Unsuccessful test file generation"));
|
||||
|
@ -310,16 +312,16 @@ public class ProjectTools {
|
|||
* @throws CoreException Creation failed
|
||||
*/
|
||||
public static IContainer addSourceContainer(IProject jproject, String containerName) throws CoreException {
|
||||
IProject project= jproject.getProject();
|
||||
IContainer container= null;
|
||||
IProject project = jproject.getProject();
|
||||
IContainer container = null;
|
||||
if (containerName == null || containerName.length() == 0) {
|
||||
container= project;
|
||||
container = project;
|
||||
} else {
|
||||
IFolder folder= project.getFolder(containerName);
|
||||
IFolder folder = project.getFolder(containerName);
|
||||
if (!folder.exists()) {
|
||||
createFolder(folder, false, true, null);
|
||||
}
|
||||
container= folder;
|
||||
container = folder;
|
||||
}
|
||||
|
||||
return container;
|
||||
|
@ -338,9 +340,10 @@ public class ProjectTools {
|
|||
* @throws CoreException Creation failed
|
||||
* @throws IOException Creation failed
|
||||
*/
|
||||
public static IContainer addSourceContainerWithImport(IProject project, String containerName, File zipFile, boolean generate) throws InvocationTargetException, CoreException, IOException {
|
||||
try (ZipFile file= new ZipFile(zipFile)){
|
||||
IContainer root= addSourceContainer(project, containerName);
|
||||
public static IContainer addSourceContainerWithImport(IProject project, String containerName, File zipFile,
|
||||
boolean generate) throws InvocationTargetException, CoreException, IOException {
|
||||
try (ZipFile file = new ZipFile(zipFile)) {
|
||||
IContainer root = addSourceContainer(project, containerName);
|
||||
if (generate)
|
||||
importFilesFromZipAndGenerate(file, root.getFullPath(), null);
|
||||
else
|
||||
|
@ -361,8 +364,10 @@ public class ProjectTools {
|
|||
* @throws CoreException Creation failed
|
||||
* @throws IOException Creation failed
|
||||
*/
|
||||
public static IContainer addSourceContainerWithImport(IProject project, String containerName, Path zipFilePath, boolean generate) throws InvocationTargetException, CoreException, IOException {
|
||||
File zipFile = new File(FileLocator.toFileURL(FileLocator.find(FrameworkUtil.getBundle(ProjectTools.class), zipFilePath, null)).getFile());
|
||||
public static IContainer addSourceContainerWithImport(IProject project, String containerName, Path zipFilePath,
|
||||
boolean generate) throws InvocationTargetException, CoreException, IOException {
|
||||
File zipFile = new File(FileLocator
|
||||
.toFileURL(FileLocator.find(FrameworkUtil.getBundle(ProjectTools.class), zipFilePath, null)).getFile());
|
||||
return addSourceContainerWithImport(project, containerName, zipFile, generate);
|
||||
}
|
||||
|
||||
|
@ -377,7 +382,8 @@ public class ProjectTools {
|
|||
* @throws CoreException Creation failed
|
||||
* @throws IOException Creation failed
|
||||
*/
|
||||
public static IContainer addSourceContainerWithImport(IProject project, String containerName, Path zipFilePath) throws InvocationTargetException, CoreException, IOException {
|
||||
public static IContainer addSourceContainerWithImport(IProject project, String containerName, Path zipFilePath)
|
||||
throws InvocationTargetException, CoreException, IOException {
|
||||
return addSourceContainerWithImport(project, containerName, zipFilePath, false);
|
||||
}
|
||||
|
||||
|
@ -405,7 +411,8 @@ public class ProjectTools {
|
|||
* @return
|
||||
* @throws CoreException
|
||||
*/
|
||||
public static IFolder createLinkedFolder(IProject project, String folderName, final URI linkTarget) throws Exception {
|
||||
public static IFolder createLinkedFolder(IProject project, String folderName, final URI linkTarget)
|
||||
throws Exception {
|
||||
final IFolder folderHandle = root.getFolder(project.getFullPath().append(folderName));
|
||||
|
||||
WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
|
||||
|
@ -439,11 +446,12 @@ public class ProjectTools {
|
|||
* <code> org.eclipse.ui.dialogs.ContainerGenerator</code> is too heavy
|
||||
* (creates a runnable)
|
||||
*/
|
||||
public static void createFolder(IFolder folder, boolean force, boolean local, IProgressMonitor monitor) throws CoreException {
|
||||
public static void createFolder(IFolder folder, boolean force, boolean local, IProgressMonitor monitor)
|
||||
throws CoreException {
|
||||
if (!folder.exists()) {
|
||||
IContainer parent= folder.getParent();
|
||||
IContainer parent = folder.getParent();
|
||||
if (parent instanceof IFolder) {
|
||||
createFolder((IFolder)parent, force, local, null);
|
||||
createFolder((IFolder) parent, force, local, null);
|
||||
}
|
||||
folder.create(force, local, monitor);
|
||||
}
|
||||
|
|
|
@ -56,22 +56,23 @@ import org.xml.sax.SAXException;
|
|||
public class UpdateConfigureTest {
|
||||
|
||||
private IProject testProject;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
testProject = ProjectTools.createProject("testProject2");
|
||||
if (testProject == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
testProject.open(new NullProgressMonitor());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test setting the special advanced options for gcov, gprof, and debug flags. Verify that
|
||||
* the configure script sets both the C and C++ flags.
|
||||
* @throws Exception
|
||||
*/
|
||||
/**
|
||||
* Test setting the special advanced options for gcov, gprof, and debug flags. Verify that
|
||||
* the configure script sets both the C and C++ flags.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testGprofGcovDebugFlagOptions() throws Exception {
|
||||
Path p = new Path("zip/project2.zip");
|
||||
|
@ -80,10 +81,12 @@ public class UpdateConfigureTest {
|
|||
ProjectTools.setConfigDir(testProject, "src");
|
||||
ProjectTools.markExecutable(testProject, "src/autogen.sh");
|
||||
assertTrue(ProjectTools.build());
|
||||
ICConfigurationDescription cfgDes = CoreModel.getDefault().getProjectDescription(testProject).getActiveConfiguration();
|
||||
ICConfigurationDescription cfgDes = CoreModel.getDefault().getProjectDescription(testProject)
|
||||
.getActiveConfiguration();
|
||||
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(cfgDes);
|
||||
assertTrue(cfg.getName().equals("Build (GNU)"));
|
||||
Map<String, IAutotoolsOption> opts = AutotoolsConfigurationManager.getInstance().getAutotoolsCfgOptions(testProject, cfg.getId());
|
||||
Map<String, IAutotoolsOption> opts = AutotoolsConfigurationManager.getInstance()
|
||||
.getAutotoolsCfgOptions(testProject, cfg.getId());
|
||||
|
||||
IAutotoolsOption k = opts.get(AutotoolsOptionConstants.OPT_CFLAGS_GPROF);
|
||||
k.setValue("true");
|
||||
|
@ -155,11 +158,11 @@ public class UpdateConfigureTest {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting and updating configuration options for an Autotools Project. The top-level
|
||||
* contains autogen.sh which will build configure, but not run it.
|
||||
* @throws Exception
|
||||
*/
|
||||
/**
|
||||
* Test getting and updating configuration options for an Autotools Project. The top-level
|
||||
* contains autogen.sh which will build configure, but not run it.
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test
|
||||
public void testGetAndUpdateConfigureOptions() throws Exception {
|
||||
Path p = new Path("zip/project2.zip");
|
||||
|
@ -168,10 +171,12 @@ public class UpdateConfigureTest {
|
|||
ProjectTools.setConfigDir(testProject, "src");
|
||||
ProjectTools.markExecutable(testProject, "src/autogen.sh");
|
||||
assertTrue(ProjectTools.build());
|
||||
ICConfigurationDescription cfgDes = CoreModel.getDefault().getProjectDescription(testProject).getActiveConfiguration();
|
||||
ICConfigurationDescription cfgDes = CoreModel.getDefault().getProjectDescription(testProject)
|
||||
.getActiveConfiguration();
|
||||
IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(cfgDes);
|
||||
assertTrue(cfg.getName().equals("Build (GNU)"));
|
||||
Map<String, IAutotoolsOption> opts = AutotoolsConfigurationManager.getInstance().getAutotoolsCfgOptions(testProject, cfg.getId());
|
||||
Map<String, IAutotoolsOption> opts = AutotoolsConfigurationManager.getInstance()
|
||||
.getAutotoolsCfgOptions(testProject, cfg.getId());
|
||||
IAutotoolsOption configdir = opts.get(AutotoolsOptionConstants.OPT_CONFIGDIR);
|
||||
assertEquals(configdir.getType(), IAutotoolsOption.INTERNAL);
|
||||
assertTrue(configdir.getValue().equals("src"));
|
||||
|
@ -399,7 +404,6 @@ public class UpdateConfigureTest {
|
|||
assertEquals(k.getValue(), ""); //$NON-NLS-1$
|
||||
k.setValue("target");
|
||||
|
||||
|
||||
k = opts.get(AutotoolsOptionConstants.OPT_USER);
|
||||
assertTrue(k.canUpdate());
|
||||
assertEquals(k.getType(), IAutotoolsOption.MULTIARG);
|
||||
|
@ -415,7 +419,8 @@ public class UpdateConfigureTest {
|
|||
// Verify last option changed has changed in our copy, but not
|
||||
// in the actual options
|
||||
assertEquals(k.getValue(), "true");
|
||||
Map<String, IAutotoolsOption> opts2 = AutotoolsConfigurationManager.getInstance().getAutotoolsCfgOptions(testProject, cfg.getId());
|
||||
Map<String, IAutotoolsOption> opts2 = AutotoolsConfigurationManager.getInstance()
|
||||
.getAutotoolsCfgOptions(testProject, cfg.getId());
|
||||
IAutotoolsOption k2 = opts2.get(AutotoolsOptionConstants.OPT_VERSION);
|
||||
assertEquals(k2.getValue(), "false");
|
||||
|
||||
|
@ -552,7 +557,7 @@ public class UpdateConfigureTest {
|
|||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException|ParserConfigurationException|SAXException e) {
|
||||
} catch (IOException | ParserConfigurationException | SAXException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
|
|
@ -40,38 +40,30 @@ import org.junit.After;
|
|||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class AutomakeColourizationTests {
|
||||
|
||||
private ProjectTools tools;
|
||||
private IProject project;
|
||||
private IFile makefileAmFile;
|
||||
|
||||
static String makefileAmContents =
|
||||
"# This is a comment" + "\n" +
|
||||
"if CONDITION" + "\n" +
|
||||
"MACRO = case1" + "\n" +
|
||||
"else" + "\n" +
|
||||
"MACRO = case2" + "\n" +
|
||||
"$(MACRO)" + "\n" +
|
||||
"${MACRO}" + "\n" +
|
||||
"";
|
||||
static String makefileAmContents = "# This is a comment" + "\n" + "if CONDITION" + "\n" + "MACRO = case1" + "\n"
|
||||
+ "else" + "\n" + "MACRO = case2" + "\n" + "$(MACRO)" + "\n" + "${MACRO}" + "\n" + "";
|
||||
private IWorkbench workbench;
|
||||
private AutomakefileCodeScanner codeScanner;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
tools = new ProjectTools();
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
public void setUp() throws Exception {
|
||||
tools = new ProjectTools();
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
|
||||
project = ProjectTools.createProject("testProjectACT");
|
||||
project = ProjectTools.createProject("testProjectACT");
|
||||
|
||||
if(project == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
if (project == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
|
||||
project.open(new NullProgressMonitor());
|
||||
project.open(new NullProgressMonitor());
|
||||
|
||||
Display.getDefault().syncExec(() -> {
|
||||
try {
|
||||
|
@ -95,11 +87,12 @@ public class AutomakeColourizationTests {
|
|||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
IToken getNextToken() {
|
||||
return codeScanner.nextToken();
|
||||
}
|
||||
|
||||
IToken getNextToken() {
|
||||
return codeScanner.nextToken();
|
||||
}
|
||||
@Test
|
||||
public void testAutomakeEditorColourization() {
|
||||
// # This is a comment
|
||||
|
@ -222,6 +215,7 @@ public class AutomakeColourizationTests {
|
|||
attribute = (TextAttribute) token.getData();
|
||||
assertEquals(ColorManager.MAKE_MACRO_REF_RGB, attribute.getForeground().getRGB());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
project.delete(true, false, ProjectTools.getMonitor());
|
||||
|
|
|
@ -28,26 +28,25 @@ import org.eclipse.ui.PlatformUI;
|
|||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class AutomakeEditorTests {
|
||||
|
||||
private ProjectTools tools;
|
||||
private IProject project;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
tools = new ProjectTools();
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
}
|
||||
public void setUp() throws Exception {
|
||||
tools = new ProjectTools();
|
||||
if (!ProjectTools.setup())
|
||||
fail("could not perform basic project workspace setup");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAutomakeEditorAssociation() throws Exception {
|
||||
project = ProjectTools.createProject("testProjectAET");
|
||||
|
||||
if(project == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
if (project == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
|
||||
project.open(new NullProgressMonitor());
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@ import org.junit.After;
|
|||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class AutomakeTextHoverTest {
|
||||
|
||||
private ProjectTools tools;
|
||||
|
@ -51,27 +50,24 @@ public class AutomakeTextHoverTest {
|
|||
// ie. '\techo ' == 6 characters
|
||||
"MACRO = case1" + "\n" +
|
||||
// 14
|
||||
"target1:" + "\n" +
|
||||
// 23 (before the tab)
|
||||
// 32 is after the M in MACRO
|
||||
"\t" + "echo $(MACRO)" + "\n" +
|
||||
// 38 (before the tab)
|
||||
"\t" + "echo $@" + "\n" +
|
||||
"\n" +
|
||||
// 48
|
||||
"target2: target1" + "\n" +
|
||||
// 65 (before the tab)
|
||||
"\t" + "echo ${MACRO}" + "\n" +
|
||||
// 80 (before the tab)
|
||||
"\t" + "echo $@" + "\n" +
|
||||
// 89 (before the tab)
|
||||
"\t" + "echo $<" + "\n" +
|
||||
"\n" +
|
||||
// 99
|
||||
"target3: target1 target2" + "\n" +
|
||||
// 124 (before the tab)
|
||||
"\t" + "echo $?" + "\n" +
|
||||
"";
|
||||
"target1:" + "\n" +
|
||||
// 23 (before the tab)
|
||||
// 32 is after the M in MACRO
|
||||
"\t" + "echo $(MACRO)" + "\n" +
|
||||
// 38 (before the tab)
|
||||
"\t" + "echo $@" + "\n" + "\n" +
|
||||
// 48
|
||||
"target2: target1" + "\n" +
|
||||
// 65 (before the tab)
|
||||
"\t" + "echo ${MACRO}" + "\n" +
|
||||
// 80 (before the tab)
|
||||
"\t" + "echo $@" + "\n" +
|
||||
// 89 (before the tab)
|
||||
"\t" + "echo $<" + "\n" + "\n" +
|
||||
// 99
|
||||
"target3: target1 target2" + "\n" +
|
||||
// 124 (before the tab)
|
||||
"\t" + "echo $?" + "\n" + "";
|
||||
private IWorkbench workbench;
|
||||
|
||||
@Before
|
||||
|
@ -82,7 +78,7 @@ public class AutomakeTextHoverTest {
|
|||
|
||||
project = ProjectTools.createProject("testProjectATHT");
|
||||
|
||||
if(project == null) {
|
||||
if (project == null) {
|
||||
fail("Unable to create test project");
|
||||
}
|
||||
|
||||
|
@ -131,6 +127,7 @@ public class AutomakeTextHoverTest {
|
|||
assertEquals("target1", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetHoverInfoTargetName2() {
|
||||
// hover between the $ and the @ in target2
|
||||
|
@ -149,6 +146,7 @@ public class AutomakeTextHoverTest {
|
|||
assertEquals("target2", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetHoverInfoForTargetDependency() {
|
||||
// hover between the $ and the < in target2
|
||||
|
@ -167,6 +165,7 @@ public class AutomakeTextHoverTest {
|
|||
assertEquals("target1", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetHoverInfoForTargetDependencies() {
|
||||
// hover between the $ and the ? in target3
|
||||
|
@ -186,6 +185,7 @@ public class AutomakeTextHoverTest {
|
|||
textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetHoverForMacro1() {
|
||||
Display.getDefault().syncExec(() -> {
|
||||
|
@ -204,6 +204,7 @@ public class AutomakeTextHoverTest {
|
|||
assertEquals("case1", textHover.getHoverInfo(automakeEditor.getAutomakeSourceViewer(), hoverRegion));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetHoverForMacro2() {
|
||||
// hover between the M and the A in the ${MACRO} reference in target2
|
||||
|
|
|
@ -17,10 +17,6 @@ import org.junit.runner.RunWith;
|
|||
import org.junit.runners.Suite;
|
||||
|
||||
@RunWith(Suite.class)
|
||||
@Suite.SuiteClasses({
|
||||
AutomakeColourizationTests.class,
|
||||
AutomakeTextHoverTest.class,
|
||||
AutomakeEditorTests.class
|
||||
})
|
||||
@Suite.SuiteClasses({ AutomakeColourizationTests.class, AutomakeTextHoverTest.class, AutomakeEditorTests.class })
|
||||
public class EditorTests {
|
||||
}
|
||||
|
|
|
@ -125,8 +125,7 @@ public abstract class AbstractTest {
|
|||
SWTBotShell shell = bot.shell("Preferences");
|
||||
shell.activate();
|
||||
bot.text().setText("Workspace");
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), "General",
|
||||
"Workspace"));
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), "General", "Workspace"));
|
||||
SWTBotCheckBox buildAuto = bot.checkBox("Build automatically");
|
||||
if (buildAuto != null && buildAuto.isChecked()) {
|
||||
buildAuto.click();
|
||||
|
@ -135,10 +134,8 @@ public abstract class AbstractTest {
|
|||
// Ensure that the C/C++ perspective is chosen automatically
|
||||
// and doesn't require user intervention
|
||||
bot.text().setText("Perspectives");
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), "General",
|
||||
"Perspectives"));
|
||||
clickRadioButtonInGroup("Always open",
|
||||
"Open the associated perspective when creating a new project");
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), "General", "Perspectives"));
|
||||
clickRadioButtonInGroup("Always open", "Open the associated perspective when creating a new project");
|
||||
bot.button("OK").click();
|
||||
|
||||
AbstractTest.projectName = projectName;
|
||||
|
@ -146,18 +143,15 @@ public abstract class AbstractTest {
|
|||
shell = bot.shell("New Project");
|
||||
shell.activate();
|
||||
bot.text().setText("C Project");
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), "C/C++",
|
||||
"C Project"));
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), "C/C++", "C Project"));
|
||||
bot.button("Next >").click();
|
||||
|
||||
bot.textWithLabel("Project name:").setText(projectName);
|
||||
bot.tree().expandNode("GNU Autotools")
|
||||
.select("Hello World ANSI C Autotools Project");
|
||||
bot.tree().expandNode("GNU Autotools").select("Hello World ANSI C Autotools Project");
|
||||
bot.button("Finish").click();
|
||||
bot.waitUntil(Conditions.shellCloses(shell));
|
||||
|
||||
IProjectNature nature = checkProject().getNature(
|
||||
"org.eclipse.cdt.autotools.core.autotoolsNatureV2");
|
||||
IProjectNature nature = checkProject().getNature("org.eclipse.cdt.autotools.core.autotoolsNatureV2");
|
||||
assertNotNull(nature);
|
||||
|
||||
projectExplorer = bot.viewByTitle("Project Explorer");
|
||||
|
@ -186,8 +180,7 @@ public abstract class AbstractTest {
|
|||
* @param node
|
||||
* The text of the node to select.
|
||||
*/
|
||||
public NodeAvailableAndSelect(SWTBotTree tree, String parent,
|
||||
String node) {
|
||||
public NodeAvailableAndSelect(SWTBotTree tree, String parent, String node) {
|
||||
this.tree = tree;
|
||||
this.node = node;
|
||||
this.parent = parent;
|
||||
|
@ -215,10 +208,8 @@ public abstract class AbstractTest {
|
|||
*/
|
||||
public static void enterProjectFolder() {
|
||||
projectExplorer.setFocus();
|
||||
projectExplorer.bot().tree().select(projectName).contextMenu("Go Into")
|
||||
.click();
|
||||
bot.waitUntil(waitForWidget(WidgetMatcherFactory.withText(projectName),
|
||||
projectExplorer.getWidget()));
|
||||
projectExplorer.bot().tree().select(projectName).contextMenu("Go Into").click();
|
||||
bot.waitUntil(waitForWidget(WidgetMatcherFactory.withText(projectName), projectExplorer.getWidget()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -233,8 +224,7 @@ public abstract class AbstractTest {
|
|||
// If the "Forward" button is not found, already at the top level.
|
||||
return;
|
||||
}
|
||||
SWTBotToolbarButton backButton = projectExplorer
|
||||
.toolbarPushButton("Back to Workspace");
|
||||
SWTBotToolbarButton backButton = projectExplorer.toolbarPushButton("Back to Workspace");
|
||||
if (backButton.isEnabled()) {
|
||||
backButton.click();
|
||||
bot.waitUntil(widgetIsEnabled(forwardButton));
|
||||
|
@ -247,8 +237,7 @@ public abstract class AbstractTest {
|
|||
* other radio button in the group that is already selected. Workaround for
|
||||
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=344484
|
||||
*/
|
||||
public static void clickRadioButtonInGroup(String mnemonicText,
|
||||
final String inGroup) {
|
||||
public static void clickRadioButtonInGroup(String mnemonicText, final String inGroup) {
|
||||
UIThreadRunnable.syncExec(() -> {
|
||||
@SuppressWarnings("unchecked")
|
||||
Matcher<Button> matcher = allOf(inGroup(inGroup), widgetOfType(Button.class),
|
||||
|
@ -270,13 +259,11 @@ public abstract class AbstractTest {
|
|||
bot.radioInGroup(mnemonicText, inGroup).click();
|
||||
}
|
||||
|
||||
public static void clickContextMenu(AbstractSWTBot<? extends Control> bot,
|
||||
String... texts) {
|
||||
public static void clickContextMenu(AbstractSWTBot<? extends Control> bot, String... texts) {
|
||||
new SWTBotMenu(ContextMenuHelper.contextMenu(bot, texts)).click();
|
||||
}
|
||||
|
||||
public static void clickVolatileContextMenu(
|
||||
AbstractSWTBot<? extends Control> bot, String... texts) {
|
||||
public static void clickVolatileContextMenu(AbstractSWTBot<? extends Control> bot, String... texts) {
|
||||
int tries = 0;
|
||||
final int maxTries = 2;
|
||||
while (true) {
|
||||
|
@ -292,8 +279,7 @@ public abstract class AbstractTest {
|
|||
}
|
||||
|
||||
public static void clickProjectContextMenu(String... texts) {
|
||||
clickVolatileContextMenu(bot.viewByTitle("Project Explorer").bot()
|
||||
.tree().select(projectName), texts);
|
||||
clickVolatileContextMenu(bot.viewByTitle("Project Explorer").bot().tree().select(projectName), texts);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -314,15 +300,12 @@ public abstract class AbstractTest {
|
|||
menu.click();
|
||||
}
|
||||
|
||||
public static SWTBotShell openProperties(String parentCategory,
|
||||
String category) {
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Properties");
|
||||
public static SWTBotShell openProperties(String parentCategory, String category) {
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Properties");
|
||||
SWTBotShell shell = bot.shell("Properties for " + projectName);
|
||||
shell.activate();
|
||||
bot.text().setText(category);
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), parentCategory,
|
||||
category));
|
||||
bot.waitUntil(new NodeAvailableAndSelect(bot.tree(), parentCategory, category));
|
||||
shell.activate();
|
||||
return shell;
|
||||
}
|
||||
|
@ -340,10 +323,8 @@ public abstract class AbstractTest {
|
|||
public static SWTBotView viewConsole(String consoleType) {
|
||||
SWTBotView view = bot.viewByPartName("Console");
|
||||
view.setFocus();
|
||||
SWTBotToolbarDropDownButton b = view
|
||||
.toolbarDropDownButton("Display Selected Console");
|
||||
org.hamcrest.Matcher<MenuItem> withRegex = withRegex(".*" + consoleType
|
||||
+ ".*");
|
||||
SWTBotToolbarDropDownButton b = view.toolbarDropDownButton("Display Selected Console");
|
||||
org.hamcrest.Matcher<MenuItem> withRegex = withRegex(".*" + consoleType + ".*");
|
||||
focusMainShell();
|
||||
b.menuItem(withRegex).click();
|
||||
try {
|
||||
|
@ -379,8 +360,7 @@ public abstract class AbstractTest {
|
|||
for (final SWTBotShell shell : shells) {
|
||||
if (!shell.equals(mainShell)) {
|
||||
String shellTitle = shell.getText();
|
||||
if (shellTitle.length() > 0
|
||||
&& !shellTitle.startsWith("Quick Access")) {
|
||||
if (shellTitle.length() > 0 && !shellTitle.startsWith("Quick Access")) {
|
||||
UIThreadRunnable.syncExec(() -> {
|
||||
if (shell.widget.getParent() != null && !shell.isOpen()) {
|
||||
shell.close();
|
||||
|
|
|
@ -25,15 +25,14 @@ import org.junit.runners.Suite;
|
|||
|
||||
@RunWith(Suite.class)
|
||||
@Suite.SuiteClasses({
|
||||
/*
|
||||
*
|
||||
* TestToolActions.class,
|
||||
* TestEnvironmentVars.class,
|
||||
* TestMakeTargets.class,
|
||||
* SetConfigurationParameter.class,
|
||||
*/
|
||||
AutoconfTests.class
|
||||
})
|
||||
/*
|
||||
*
|
||||
* TestToolActions.class,
|
||||
* TestEnvironmentVars.class,
|
||||
* TestMakeTargets.class,
|
||||
* SetConfigurationParameter.class,
|
||||
*/
|
||||
AutoconfTests.class })
|
||||
|
||||
public class AutomatedIntegrationSuite {
|
||||
// needed for this class to compile
|
||||
|
@ -41,9 +40,7 @@ public class AutomatedIntegrationSuite {
|
|||
public static void beforeClassMethod() {
|
||||
// Verify that the necessary binaries are available, and if they are not,
|
||||
// the tests will be ignored.
|
||||
String[] testBinaryCommands = { "libtool --version",
|
||||
"autoconf --version",
|
||||
"automake --version" };
|
||||
String[] testBinaryCommands = { "libtool --version", "autoconf --version", "automake --version" };
|
||||
try {
|
||||
for (String cmd : testBinaryCommands) {
|
||||
Process process = ProcessFactory.getFactory().exec(cmd);
|
||||
|
|
|
@ -62,8 +62,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
// Set the configure parameters to be --enable-jeff via user-defined
|
||||
// options
|
||||
SWTBotShell shell = openProperties("Autotools", "Configure Settings");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
SWTBotText text = bot.textWithLabel("Additional command-line options");
|
||||
text.typeText("--enable-jeff");
|
||||
bot.button("OK").click();
|
||||
|
@ -71,8 +70,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
|
||||
// Create new build configurations that will be used throughout tests
|
||||
projectExplorer.bot().tree().select(projectName);
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Build Configurations", "Manage...");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Build Configurations", "Manage...");
|
||||
shell = bot.shell(projectName + ": Manage Configurations");
|
||||
shell.activate();
|
||||
bot.button("New...").click();
|
||||
|
@ -80,8 +78,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
shell.activate();
|
||||
SWTBotText t = bot.textWithLabel("Name:");
|
||||
t.setText("debug");
|
||||
AbstractTest.clickRadioButtonInGroup("Existing configuration",
|
||||
"Copy settings from");
|
||||
AbstractTest.clickRadioButtonInGroup("Existing configuration", "Copy settings from");
|
||||
bot.button("OK").click();
|
||||
shell = bot.shell(projectName + ": Manage Configurations");
|
||||
shell.activate();
|
||||
|
@ -90,8 +87,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
shell.activate();
|
||||
t = bot.textWithLabel("Name:");
|
||||
t.setText("default");
|
||||
AbstractTest.clickRadioButtonInGroup("Default configuration",
|
||||
"Copy settings from");
|
||||
AbstractTest.clickRadioButtonInGroup("Default configuration", "Copy settings from");
|
||||
bot.button("OK").click();
|
||||
shell = bot.shell(projectName + ": Manage Configurations");
|
||||
shell.activate();
|
||||
|
@ -145,8 +141,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
@Test
|
||||
public void t2canBuildWithConfigParm() throws Exception {
|
||||
projectExplorer.bot().tree().select(projectName);
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Build Project");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Build Project");
|
||||
|
||||
// Wait until the project is built
|
||||
SWTBotShell shell = bot.shell("Build Project");
|
||||
|
@ -192,8 +187,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
|
||||
String output = viewConsole("Configure").bot().styledText().getText();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(
|
||||
".*WARNING:.*unrecognized.*--enable-jeff.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(".*WARNING:.*unrecognized.*--enable-jeff.*", Pattern.DOTALL);
|
||||
Matcher m = p.matcher(output);
|
||||
assertTrue(m.matches());
|
||||
|
||||
|
@ -201,8 +195,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
// Verifies fix for bug: #308261
|
||||
long oldDate = f.lastModified();
|
||||
projectExplorer.bot().tree().select(projectName);
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Build Project");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Build Project");
|
||||
path = project.getLocation();
|
||||
// We need to wait until the a.out file is created so
|
||||
// sleep a bit and look for it...give up after 120 seconds
|
||||
|
@ -225,8 +218,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
@Test
|
||||
public void t3newConfigCopiesParms() throws Exception {
|
||||
projectExplorer.bot().tree().select(projectName);
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Build Configurations", "Manage...");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Build Configurations", "Manage...");
|
||||
SWTBotShell shell = bot.shell(projectName + ": Manage Configurations");
|
||||
shell.activate();
|
||||
shell = bot.shell(projectName + ": Manage Configurations");
|
||||
|
@ -248,8 +240,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
}
|
||||
}
|
||||
assertTrue(configs.getText().contains("debug"));
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
SWTBotText text = bot.textWithLabel("Additional command-line options");
|
||||
String val = text.getText();
|
||||
assertEquals("--enable-jeff", val);
|
||||
|
@ -266,16 +257,14 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
bot.tree().expandNode("Autotools").select("Configure Settings");
|
||||
configs = bot.comboBoxWithLabel("Configuration: ");
|
||||
configs.setSelection("default");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
text = bot.textWithLabel("Additional command-line options");
|
||||
val = text.getText();
|
||||
assertEquals("", val);
|
||||
bot.button("OK").click();
|
||||
// Build the project again and verify we get a build-debug directory
|
||||
projectExplorer.bot().tree().select(projectName);
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Build Project");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Build Project");
|
||||
IWorkspace workspace = ResourcesPlugin.getWorkspace();
|
||||
assertNotNull(workspace);
|
||||
IWorkspaceRoot root = workspace.getRoot();
|
||||
|
@ -362,8 +351,7 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
}
|
||||
assertEquals(2, foundUser);
|
||||
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Build Configurations", "Manage...");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Build Configurations", "Manage...");
|
||||
shell = bot.shell(projectName + ": Manage Configurations");
|
||||
shell.activate();
|
||||
table = bot.table();
|
||||
|
@ -392,15 +380,13 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
SWTBotShell shell = bot.shell("Properties for " + projectName);
|
||||
shell.activate();
|
||||
configs = bot.comboBoxWithLabel("Configuration: ");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
SWTBotText text = bot.textWithLabel("Additional command-line options");
|
||||
String setting = text.getText();
|
||||
assertEquals("--enable-jeff", setting);
|
||||
configs.setFocus();
|
||||
configs.setSelection("debug");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
text = bot.textWithLabel("Additional command-line options");
|
||||
setting = text.getText();
|
||||
assertEquals("", setting);
|
||||
|
@ -412,16 +398,14 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
configs = bot.comboBoxWithLabel("Configuration: ");
|
||||
configs.setSelection("debug");
|
||||
assertTrue(configs.getText().contains("debug"));
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
text = bot.textWithLabel("Additional command-line options");
|
||||
setting = text.getText();
|
||||
assertEquals("--enable-jeff", setting);
|
||||
configs.setFocus();
|
||||
configs.setSelection("default");
|
||||
assertTrue(configs.getText().contains("default"));
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
text = bot.textWithLabel("Additional command-line options");
|
||||
setting = text.getText();
|
||||
assertEquals("", setting);
|
||||
|
@ -455,16 +439,14 @@ public class SetConfigurationParameter extends AbstractTest {
|
|||
configs = bot.comboBoxWithLabel("Configuration: ");
|
||||
assertTrue(configs.getText().contains("release"));
|
||||
assertTrue(configs.getText().contains("Active"));
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
SWTBotText text = bot.textWithLabel("Additional command-line options");
|
||||
String setting = text.getText();
|
||||
assertEquals("--enable-jeff", setting);
|
||||
configs.setFocus();
|
||||
configs.setSelection("debug");
|
||||
assertTrue(configs.getText().contains("debug"));
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
text = bot.textWithLabel("Additional command-line options");
|
||||
setting = text.getText();
|
||||
assertEquals("", setting);
|
||||
|
|
|
@ -45,15 +45,13 @@ public class TestEnvironmentVars extends AbstractTest {
|
|||
SWTBotShell shell = openProperties("Autotools", "Configure Settings");
|
||||
// Set the configure parameters to be --enable-jeff via user-defined
|
||||
// options
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure")
|
||||
.select("Advanced");
|
||||
bot.treeWithLabel("Configure Settings").expandNode("configure").select("Advanced");
|
||||
SWTBotText text = bot.textWithLabel("Additional command-line options");
|
||||
text.typeText("${some_var}");
|
||||
bot.button("OK").click();
|
||||
bot.waitUntil(Conditions.shellCloses(shell), 120000);
|
||||
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Reconfigure Project");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Reconfigure Project");
|
||||
IPath path = checkProject().getLocation();
|
||||
File f = null;
|
||||
// We need to wait until the config.status file is created so
|
||||
|
@ -96,8 +94,7 @@ public class TestEnvironmentVars extends AbstractTest {
|
|||
shell.activate();
|
||||
bot.button("OK").click();
|
||||
bot.waitUntil(Conditions.shellCloses(shell));
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Reconfigure Project");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Reconfigure Project");
|
||||
|
||||
IPath path = checkProject().getLocation();
|
||||
File f = null;
|
||||
|
@ -148,20 +145,16 @@ public class TestEnvironmentVars extends AbstractTest {
|
|||
bot.textWithLabel("Command").setText("");
|
||||
// Choose three different forms, some using quotes to allow blanks in
|
||||
// them
|
||||
bot.textWithLabel("Command")
|
||||
.typeText(
|
||||
"some_var1=\"a boat\" some_var2='a train' some_var3=car fake_configure some_var4=\"a wagon\" some_var5='a plane' some_var6=skates");
|
||||
bot.textWithLabel("Command").typeText(
|
||||
"some_var1=\"a boat\" some_var2='a train' some_var3=car fake_configure some_var4=\"a wagon\" some_var5='a plane' some_var6=skates");
|
||||
bot.button("OK").click();
|
||||
// Reconfigure the project and make sure the env variables are seen in
|
||||
// the script
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Reconfigure Project");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Reconfigure Project");
|
||||
focusMainShell();
|
||||
SWTBotView consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
Pattern p = Pattern.compile(
|
||||
".*a boat.*a train.*car.*a wagon.*a plane.*skates.*",
|
||||
Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(".*a boat.*a train.*car.*a wagon.*a plane.*skates.*", Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
}
|
||||
|
||||
|
|
|
@ -60,8 +60,7 @@ public class TestMakeTargets extends AbstractTest {
|
|||
assertTrue(f.exists());
|
||||
|
||||
projectExplorer.bot().tree().getTreeItem(projectName).select();
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName),
|
||||
"Build Targets", "Build...");
|
||||
clickContextMenu(projectExplorer.bot().tree().select(projectName), "Build Targets", "Build...");
|
||||
shell = bot.shell("Build Targets");
|
||||
shell.activate();
|
||||
bot.table().getTableItem("info").select();
|
||||
|
@ -79,8 +78,7 @@ public class TestMakeTargets extends AbstractTest {
|
|||
bot.button("Build").click();
|
||||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
p = Pattern.compile(".*make check.*Making check in src.*",
|
||||
Pattern.DOTALL);
|
||||
p = Pattern.compile(".*make check.*Making check in src.*", Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
}
|
||||
|
||||
|
|
|
@ -71,8 +71,8 @@ public class TestToolActions extends AbstractTest {
|
|||
SWTBotView consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(".*Invoking aclocal in.*" + projectName
|
||||
+ ".*aclocal --help.*Usage: aclocal.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(".*Invoking aclocal in.*" + projectName + ".*aclocal --help.*Usage: aclocal.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
// Verify we still don't have an aclocal.m4 file yet
|
||||
f = new File(path.toOSString());
|
||||
|
@ -85,8 +85,7 @@ public class TestToolActions extends AbstractTest {
|
|||
bot.button("OK").click();
|
||||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
p = Pattern.compile(".*Invoking aclocal in.*" + projectName
|
||||
+ ".*aclocal.*", Pattern.DOTALL);
|
||||
p = Pattern.compile(".*Invoking aclocal in.*" + projectName + ".*aclocal.*", Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
// We need to wait until the aclocal.m4 file is created so
|
||||
// sleep a bit and look for it...give up after 20 seconds
|
||||
|
@ -115,8 +114,7 @@ public class TestToolActions extends AbstractTest {
|
|||
SWTBotView consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(".*Invoking autoconf in.*" + projectName
|
||||
+ ".*autoconf.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(".*Invoking autoconf in.*" + projectName + ".*autoconf.*", Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
// We need to wait until the configure file is created so
|
||||
// sleep a bit and look for it...give up after 20 seconds
|
||||
|
@ -134,13 +132,11 @@ public class TestToolActions extends AbstractTest {
|
|||
// explorer menu directly from the configure.ac file.
|
||||
assertTrue(f.delete());
|
||||
enterProjectFolder();
|
||||
clickVolatileContextMenu(
|
||||
projectExplorer.bot().tree().select("configure.ac"),
|
||||
"Invoke Autotools", "Invoke Autoconf");
|
||||
clickVolatileContextMenu(projectExplorer.bot().tree().select("configure.ac"), "Invoke Autotools",
|
||||
"Invoke Autoconf");
|
||||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
p = Pattern.compile(".*Invoking autoconf in.*" + projectName
|
||||
+ ".*autoconf.*", Pattern.DOTALL);
|
||||
p = Pattern.compile(".*Invoking autoconf in.*" + projectName + ".*autoconf.*", Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
// We need to wait until the configure file is created so
|
||||
// sleep a bit and look for it...give up after 20 seconds
|
||||
|
@ -181,8 +177,8 @@ public class TestToolActions extends AbstractTest {
|
|||
SWTBotView consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(".*Invoking automake in.*" + projectName
|
||||
+ ".*automake --help.*Usage:.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(".*Invoking automake in.*" + projectName + ".*automake --help.*Usage:.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
// Verify we still don't have Makefile.in files yet
|
||||
f = new File(path.toOSString());
|
||||
|
@ -201,8 +197,8 @@ public class TestToolActions extends AbstractTest {
|
|||
bot.button("OK").click();
|
||||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
p = Pattern.compile(".*Invoking automake in.*" + projectName
|
||||
+ ".*automake --add-missing Makefile src/Makefile.*",
|
||||
p = Pattern.compile(
|
||||
".*Invoking automake in.*" + projectName + ".*automake --add-missing Makefile src/Makefile.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
// We need to wait until the Makefile.in files are created so
|
||||
|
@ -234,8 +230,9 @@ public class TestToolActions extends AbstractTest {
|
|||
SWTBotView consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(".*Invoking libtoolize in.*" + projectName
|
||||
+ ".*libtoolize --help.*Usage: .*libtoolize.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(
|
||||
".*Invoking libtoolize in.*" + projectName + ".*libtoolize --help.*Usage: .*libtoolize.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
}
|
||||
|
||||
|
@ -250,8 +247,9 @@ public class TestToolActions extends AbstractTest {
|
|||
SWTBotView consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(".*Invoking autoheader in.*" + projectName
|
||||
+ ".*autoheader --help.*Usage:.*autoheader.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(
|
||||
".*Invoking autoheader in.*" + projectName + ".*autoheader --help.*Usage:.*autoheader.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
}
|
||||
|
||||
|
@ -288,8 +286,9 @@ public class TestToolActions extends AbstractTest {
|
|||
SWTBotView consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(".*Invoking autoreconf in.*" + projectName
|
||||
+ ".*autoreconf --help.*Usage: .*autoreconf.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(
|
||||
".*Invoking autoreconf in.*" + projectName + ".*autoreconf --help.*Usage: .*autoreconf.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
clickProjectContextMenu("Invoke Autotools", "Invoke Autoreconf");
|
||||
shell = bot.shell("Autoreconf Options");
|
||||
|
@ -434,8 +433,8 @@ public class TestToolActions extends AbstractTest {
|
|||
SWTBotView consoleView = viewConsole("Autotools");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
Pattern p = Pattern.compile(".*Invoking aclocal in.*" + projectName
|
||||
+ ".*automake --help.*Usage:.*automake.*", Pattern.DOTALL);
|
||||
Pattern p = Pattern.compile(".*Invoking aclocal in.*" + projectName + ".*automake --help.*Usage:.*automake.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
|
||||
clickProjectContextMenu("Invoke Autotools", "Invoke Automake");
|
||||
|
@ -446,8 +445,8 @@ public class TestToolActions extends AbstractTest {
|
|||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
p = Pattern.compile(".*Invoking automake in.*" + projectName
|
||||
+ ".*autoconf --help.*Usage:.*autoconf.*", Pattern.DOTALL);
|
||||
p = Pattern.compile(".*Invoking automake in.*" + projectName + ".*autoconf --help.*Usage:.*autoconf.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
|
||||
clickProjectContextMenu("Invoke Autotools", "Invoke Autoheader");
|
||||
|
@ -458,8 +457,8 @@ public class TestToolActions extends AbstractTest {
|
|||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
p = Pattern.compile(".*Invoking autoheader in.*" + projectName
|
||||
+ ".*autoreconf --help.*Usage:.*autoreconf.*", Pattern.DOTALL);
|
||||
p = Pattern.compile(".*Invoking autoheader in.*" + projectName + ".*autoreconf --help.*Usage:.*autoreconf.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
|
||||
clickProjectContextMenu("Invoke Autotools", "Invoke Autoreconf");
|
||||
|
@ -470,8 +469,8 @@ public class TestToolActions extends AbstractTest {
|
|||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
p = Pattern.compile(".*Invoking autoreconf in.*" + projectName
|
||||
+ ".*libtoolize --help.*Usage:.*libtoolize.*", Pattern.DOTALL);
|
||||
p = Pattern.compile(".*Invoking autoreconf in.*" + projectName + ".*libtoolize --help.*Usage:.*libtoolize.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
|
||||
clickProjectContextMenu("Invoke Autotools", "Invoke Libtoolize");
|
||||
|
@ -482,8 +481,8 @@ public class TestToolActions extends AbstractTest {
|
|||
consoleView = bot.viewByPartName("Console");
|
||||
consoleView.setFocus();
|
||||
// Verify we got some help output to the console
|
||||
p = Pattern.compile(".*Invoking libtoolize in.*" + projectName
|
||||
+ ".*aclocal --help.*Usage:.*aclocal.*", Pattern.DOTALL);
|
||||
p = Pattern.compile(".*Invoking libtoolize in.*" + projectName + ".*aclocal --help.*Usage:.*aclocal.*",
|
||||
Pattern.DOTALL);
|
||||
bot.waitUntil(consoleTextMatches(consoleView, p));
|
||||
}
|
||||
|
||||
|
|
|
@ -17,11 +17,7 @@ import org.junit.runner.RunWith;
|
|||
import org.junit.runners.Suite;
|
||||
|
||||
@RunWith(Suite.class)
|
||||
@Suite.SuiteClasses({
|
||||
TestMacroParser.class,
|
||||
TestTokenizer.class,
|
||||
TestShellParser.class
|
||||
})
|
||||
@Suite.SuiteClasses({ TestMacroParser.class, TestTokenizer.class, TestShellParser.class })
|
||||
public class AutoconfTests {
|
||||
|
||||
}
|
||||
|
|
|
@ -125,22 +125,21 @@ public abstract class BaseParserTest {
|
|||
if (!allowErrors) {
|
||||
if (!errors.isEmpty())
|
||||
fail("got errors" + errors.get(0));
|
||||
}
|
||||
else
|
||||
} else
|
||||
assertFalse(errors.isEmpty());
|
||||
|
||||
return root2;
|
||||
}
|
||||
|
||||
protected void checkError(String msgKey) {
|
||||
for (ParseException exc: errors) {
|
||||
for (ParseException exc : errors) {
|
||||
if (exc.getMessage().contains(msgKey))
|
||||
return;
|
||||
}
|
||||
String any = "";
|
||||
if (!errors.isEmpty())
|
||||
any = ", but saw " + errors.get(0).toString();
|
||||
fail("did not find error: " + msgKey + any );
|
||||
fail("did not find error: " + msgKey + any);
|
||||
}
|
||||
|
||||
protected void checkError(String msgKey, int line) {
|
||||
|
@ -160,7 +159,8 @@ public abstract class BaseParserTest {
|
|||
if (possible == null)
|
||||
fail("did not find any error: " + msgKey);
|
||||
else
|
||||
fail("did not find error: " + msgKey + " on line: " + line +", but found one at " + possible.getLineNumber());
|
||||
fail("did not find error: " + msgKey + " on line: " + line + ", but found one at "
|
||||
+ possible.getLineNumber());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -176,8 +176,7 @@ public abstract class BaseParserTest {
|
|||
validateSourceElement(element);
|
||||
AutoconfElement[] kids = element.getChildren();
|
||||
for (int i = 0; i < kids.length; i++) {
|
||||
if (kids[i].getStartOffset() < element.getStartOffset()
|
||||
|| kids[i].getEndOffset() > element.getEndOffset())
|
||||
if (kids[i].getStartOffset() < element.getStartOffset() || kids[i].getEndOffset() > element.getEndOffset())
|
||||
fail(describeElement(kids[i]) + " not inside parent " + describeElement(element));
|
||||
validateSourceTree(kids[i]);
|
||||
}
|
||||
|
@ -226,15 +225,15 @@ public abstract class BaseParserTest {
|
|||
assertEquals(elements.length, assertTreeStructure(tree, elements, 0));
|
||||
}
|
||||
|
||||
private int assertTreeStructure(AutoconfElement tree, String[] elements,
|
||||
int elementIdx) {
|
||||
private int assertTreeStructure(AutoconfElement tree, String[] elements, int elementIdx) {
|
||||
AutoconfElement[] kids = tree.getChildren();
|
||||
for (int j = 0; j < kids.length; j++) {
|
||||
if (elementIdx >= elements.length || elements[elementIdx] == null) {
|
||||
if (elementIdx >= elements.length || elements[elementIdx] == null) {
|
||||
fail("extra children in " + tree + " at " + kids[j]);
|
||||
}
|
||||
if (!kids[j].getName().equals(elements[elementIdx]))
|
||||
fail("did not match " + elements[elementIdx] + ", instead got " + kids[j].getClass().getSimpleName() + "=" + kids[j].getName());
|
||||
fail("did not match " + elements[elementIdx] + ", instead got " + kids[j].getClass().getSimpleName()
|
||||
+ "=" + kids[j].getName());
|
||||
|
||||
elementIdx++;
|
||||
if (kids[j].getChildren().length > 0) {
|
||||
|
|
|
@ -25,7 +25,6 @@ import org.eclipse.cdt.autotools.ui.editors.parser.AutoconfMacroElement;
|
|||
import org.eclipse.cdt.autotools.ui.editors.parser.AutoconfParser;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
/**
|
||||
* Test parsing with macros
|
||||
* @author eswartz
|
||||
|
@ -41,9 +40,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
@Test
|
||||
public void testComments() {
|
||||
//
|
||||
String text =
|
||||
"dnl first line\n" +
|
||||
"dnl second line\n";
|
||||
String text = "dnl first line\n" + "dnl second line\n";
|
||||
AutoconfElement root = parse(text);
|
||||
Object[] kids = root.getChildren();
|
||||
// these are stripped
|
||||
|
@ -54,9 +51,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
@Test
|
||||
public void testMacroParsing1() {
|
||||
//
|
||||
String text =
|
||||
"AC_REQUIRE([AM_SANITY_CHECK])\n" +
|
||||
"";
|
||||
String text = "AC_REQUIRE([AM_SANITY_CHECK])\n" + "";
|
||||
AutoconfElement root = parse(text);
|
||||
assertTreeStructure(root, new String[] { "AC_REQUIRE", "AM_SANITY_CHECK", null });
|
||||
|
||||
|
@ -71,7 +66,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
assertEquals(1, args.length);
|
||||
assertTrue(args[0] instanceof AutoconfMacroArgumentElement);
|
||||
|
||||
assertEquals("AM_SANITY_CHECK", ((AutoconfMacroArgumentElement)args[0]).getName());
|
||||
assertEquals("AM_SANITY_CHECK", ((AutoconfMacroArgumentElement) args[0]).getName());
|
||||
assertEquals("AM_SANITY_CHECK", macro.getParameter(0));
|
||||
|
||||
// keep quotes in source
|
||||
|
@ -82,9 +77,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
@Test
|
||||
public void testMacroParsing2() {
|
||||
//
|
||||
String text =
|
||||
"AC_TWO_ARGS(first,second)\n" +
|
||||
"";
|
||||
String text = "AC_TWO_ARGS(first,second)\n" + "";
|
||||
AutoconfElement root = parse(text);
|
||||
assertTreeStructure(root, new String[] { "AC_TWO_ARGS", "first", "second", null });
|
||||
|
||||
|
@ -98,9 +91,9 @@ public class TestMacroParser extends BaseParserTest {
|
|||
AutoconfElement[] args = macro.getChildren();
|
||||
assertEquals(2, args.length);
|
||||
assertTrue(args[0] instanceof AutoconfMacroArgumentElement);
|
||||
assertEquals("first", ((AutoconfMacroArgumentElement)args[0]).getName());
|
||||
assertEquals("first", ((AutoconfMacroArgumentElement) args[0]).getName());
|
||||
assertTrue(args[1] instanceof AutoconfMacroArgumentElement);
|
||||
assertEquals("second", ((AutoconfMacroArgumentElement)args[1]).getName());
|
||||
assertEquals("second", ((AutoconfMacroArgumentElement) args[1]).getName());
|
||||
assertEquals("first", macro.getParameter(0));
|
||||
assertEquals("second", macro.getParameter(1));
|
||||
|
||||
|
@ -112,9 +105,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
@Test
|
||||
public void testMacroParsing3() {
|
||||
//
|
||||
String text =
|
||||
"AC_ONE_ARG( [quoted( arg ), second] )\n" +
|
||||
"";
|
||||
String text = "AC_ONE_ARG( [quoted( arg ), second] )\n" + "";
|
||||
AutoconfElement root = parse(text);
|
||||
assertTreeStructure(root, new String[] { "AC_ONE_ARG", "quoted( arg ), second", null });
|
||||
|
||||
|
@ -130,7 +121,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
assertTrue(args[0] instanceof AutoconfMacroArgumentElement);
|
||||
|
||||
// spaces removed from outermost arguments, but not inner
|
||||
assertEquals("quoted( arg ), second", ((AutoconfMacroArgumentElement)args[0]).getName());
|
||||
assertEquals("quoted( arg ), second", ((AutoconfMacroArgumentElement) args[0]).getName());
|
||||
assertEquals("quoted( arg ), second", macro.getParameter(0));
|
||||
|
||||
assertEqualSource("[quoted( arg ), second]", args[0]);
|
||||
|
@ -140,11 +131,8 @@ public class TestMacroParser extends BaseParserTest {
|
|||
@Test
|
||||
public void testMacroParsing4() {
|
||||
//
|
||||
String text =
|
||||
"AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],\r\n" +
|
||||
" [AM_AUTOMAKE_VERSION([1.4-p6])])\r\n" +
|
||||
"\r\n" +
|
||||
"";
|
||||
String text = "AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],\r\n"
|
||||
+ " [AM_AUTOMAKE_VERSION([1.4-p6])])\r\n" + "\r\n" + "";
|
||||
AutoconfElement root = parse(text);
|
||||
AutoconfElement[] kids = root.getChildren();
|
||||
assertEquals(1, kids.length);
|
||||
|
@ -166,30 +154,15 @@ public class TestMacroParser extends BaseParserTest {
|
|||
public void testMacroParsing5() {
|
||||
// check that complex shell constructs don't throw off the
|
||||
// parser, and also that we don't mistake shell tokens in a macro argument
|
||||
String arg2 =
|
||||
"AC_MSG_CHECKING(for working $2)\n" +
|
||||
"# Run test in a subshell; some versions of sh will print an error if\n" +
|
||||
"# an executable is not found, even if stderr is redirected.\n" +
|
||||
"# Redirect stdin to placate older versions of autoconf. Sigh.\n" +
|
||||
"if ($2 --version) < /dev/null > /dev/null 2>&1; then\n" +
|
||||
" $1=$2\n" +
|
||||
" AC_MSG_RESULT(found)\n" +
|
||||
"else\n" +
|
||||
" $1=\"$3/missing $2\"\n" +
|
||||
" AC_MSG_RESULT(missing)\n" +
|
||||
"fi\n" +
|
||||
"AC_SUBST($1)";
|
||||
String text =
|
||||
"AC_DEFUN([AM_MISSING_PROG],\n" +
|
||||
"[" + arg2 + "])\n" +
|
||||
"";
|
||||
String arg2 = "AC_MSG_CHECKING(for working $2)\n"
|
||||
+ "# Run test in a subshell; some versions of sh will print an error if\n"
|
||||
+ "# an executable is not found, even if stderr is redirected.\n"
|
||||
+ "# Redirect stdin to placate older versions of autoconf. Sigh.\n"
|
||||
+ "if ($2 --version) < /dev/null > /dev/null 2>&1; then\n" + " $1=$2\n" + " AC_MSG_RESULT(found)\n"
|
||||
+ "else\n" + " $1=\"$3/missing $2\"\n" + " AC_MSG_RESULT(missing)\n" + "fi\n" + "AC_SUBST($1)";
|
||||
String text = "AC_DEFUN([AM_MISSING_PROG],\n" + "[" + arg2 + "])\n" + "";
|
||||
AutoconfElement root = parse(text);
|
||||
assertTreeStructure(root, new String[] {
|
||||
"AC_DEFUN",
|
||||
"AM_MISSING_PROG",
|
||||
arg2,
|
||||
null,
|
||||
});
|
||||
assertTreeStructure(root, new String[] { "AC_DEFUN", "AM_MISSING_PROG", arg2, null, });
|
||||
AutoconfElement[] kids = root.getChildren();
|
||||
assertEquals(1, kids.length);
|
||||
assertTrue(kids[0] instanceof AutoconfMacroElement);
|
||||
|
@ -210,9 +183,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
@Test
|
||||
public void testMacroParsing6() {
|
||||
// empty arguments
|
||||
String text =
|
||||
"AC_DEFUN( ,\n" +
|
||||
")\n";
|
||||
String text = "AC_DEFUN( ,\n" + ")\n";
|
||||
AutoconfElement root = parse(text);
|
||||
AutoconfElement[] kids = root.getChildren();
|
||||
assertEquals(1, kids.length);
|
||||
|
@ -232,32 +203,27 @@ public class TestMacroParser extends BaseParserTest {
|
|||
|
||||
@Test
|
||||
public void testWithErrorUnmatchedLeftParen() {
|
||||
String text =
|
||||
"AC_BAD_MACRO(\n";
|
||||
String text = "AC_BAD_MACRO(\n";
|
||||
|
||||
AutoconfElement root = parse(text, true);
|
||||
assertEquals(1, root.getChildren().length);
|
||||
assertTrue(root.getChildren()[0] instanceof AutoconfMacroElement);
|
||||
checkError(AutoconfEditorMessages.getString(AutoconfParser.UNMATCHED_LEFT_PARENTHESIS));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWithErrorUnmatchedRightParen() {
|
||||
String text =
|
||||
"AC_BAD_MACRO())\n";
|
||||
String text = "AC_BAD_MACRO())\n";
|
||||
|
||||
AutoconfElement root = parse(text, true);
|
||||
assertEquals(1, root.getChildren().length);
|
||||
assertTrue(root.getChildren()[0] instanceof AutoconfMacroElement);
|
||||
checkError(AutoconfEditorMessages.getString(AutoconfParser.UNMATCHED_RIGHT_PARENTHESIS));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoFalseUnmatchedRightParen() {
|
||||
String text =
|
||||
"AC_BAD_MACRO()\n" +
|
||||
"(\n"+
|
||||
"cd foo;\n"+
|
||||
"if test -f myfile; then exit 1; fi\n"+
|
||||
")\n";
|
||||
String text = "AC_BAD_MACRO()\n" + "(\n" + "cd foo;\n" + "if test -f myfile; then exit 1; fi\n" + ")\n";
|
||||
|
||||
// nothing but the macro and 'if' is detected as meaningful
|
||||
AutoconfElement root = parse(text);
|
||||
|
@ -268,8 +234,7 @@ public class TestMacroParser extends BaseParserTest {
|
|||
|
||||
@Test
|
||||
public void testNestedMacro() {
|
||||
String text =
|
||||
"AC_1(AC_2())\n";
|
||||
String text = "AC_1(AC_2())\n";
|
||||
|
||||
AutoconfElement root = parse(text);
|
||||
assertEquals(1, root.getChildren().length);
|
||||
|
|
|
@ -32,31 +32,18 @@ public class TestShellParser extends BaseParserTest {
|
|||
|
||||
@Test
|
||||
public void testHERE() {
|
||||
String HERE_TEXT =
|
||||
"\n"+
|
||||
"while true; do \n"+
|
||||
"AM_INIT_AUTOMAKE([confusion], [$2], EOF)\n"+
|
||||
"done\n";
|
||||
String text = "cat <<EOF"+
|
||||
HERE_TEXT +
|
||||
"EOF\n" +
|
||||
"blah";
|
||||
String HERE_TEXT = "\n" + "while true; do \n" + "AM_INIT_AUTOMAKE([confusion], [$2], EOF)\n" + "done\n";
|
||||
String text = "cat <<EOF" + HERE_TEXT + "EOF\n" + "blah";
|
||||
AutoconfElement tree = parse(text);
|
||||
|
||||
// only see a macro call, not a loop
|
||||
assertTreeStructure(tree, new String[] { "AM_INIT_AUTOMAKE", "confusion", "$2", "EOF", null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHERE2() {
|
||||
String HERE_TEXT =
|
||||
"\n"+
|
||||
"while true; do \n"+
|
||||
"AM_INIT_AUTOMAKE([confusion], [$2], EOF)\n"+
|
||||
"done\n";
|
||||
String text = "cat <<-EOF"+
|
||||
HERE_TEXT +
|
||||
"EOF\n" +
|
||||
"blah";
|
||||
String HERE_TEXT = "\n" + "while true; do \n" + "AM_INIT_AUTOMAKE([confusion], [$2], EOF)\n" + "done\n";
|
||||
String text = "cat <<-EOF" + HERE_TEXT + "EOF\n" + "blah";
|
||||
AutoconfElement tree = parse(text);
|
||||
|
||||
// only see a macro call, not a loop
|
||||
|
@ -65,209 +52,156 @@ public class TestShellParser extends BaseParserTest {
|
|||
|
||||
@Test
|
||||
public void testIf0() {
|
||||
String text = "# comment\n"+
|
||||
"\tif true; then\n" +
|
||||
"\t\tfoo;\n"+
|
||||
"\tfi\n";
|
||||
String text = "# comment\n" + "\tif true; then\n" + "\t\tfoo;\n" + "\tfi\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] { "if" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIf1() {
|
||||
String text = "# comment\n"+
|
||||
"\tif true; then\n" +
|
||||
"\t\tAC_SOMETHING();\n"+
|
||||
"\tfi\n";
|
||||
String text = "# comment\n" + "\tif true; then\n" + "\t\tAC_SOMETHING();\n" + "\tfi\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] { "if", "AC_SOMETHING", "", null, null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfElse0() {
|
||||
String text = "# comment\n"+
|
||||
"\tif true; then\n" +
|
||||
"\t\tfoo;\n"+
|
||||
"\telse\n"+
|
||||
"\t\tbar;\n"+
|
||||
"\tfi\n";
|
||||
String text = "# comment\n" + "\tif true; then\n" + "\t\tfoo;\n" + "\telse\n" + "\t\tbar;\n" + "\tfi\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] { "if", "else", null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfElse1() {
|
||||
String text = "# comment\n"+
|
||||
"\tif true; then\n" +
|
||||
"\t\tAC_ONE(...);\n"+
|
||||
"\telse\n"+
|
||||
"\t\tAC_TWO(AC_THREE());\n"+
|
||||
"\tfi\n";
|
||||
String text = "# comment\n" + "\tif true; then\n" + "\t\tAC_ONE(...);\n" + "\telse\n"
|
||||
+ "\t\tAC_TWO(AC_THREE());\n" + "\tfi\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"if",
|
||||
"AC_ONE",
|
||||
"...",
|
||||
null,
|
||||
"else",
|
||||
"AC_TWO",
|
||||
"AC_THREE",
|
||||
"AC_THREE",
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null});
|
||||
assertTreeStructure(tree, new String[] { "if", "AC_ONE", "...", null, "else", "AC_TWO", "AC_THREE", "AC_THREE",
|
||||
"", null, null, null, null, null });
|
||||
|
||||
AutoconfElement[] kids = tree.getChildren();
|
||||
assertEqualSource("AC_ONE(...)", kids[0].getChildren()[0]);
|
||||
assertEqualSource("AC_TWO(AC_THREE())", kids[0].getChildren()[1].getChildren()[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIf2() {
|
||||
String text =
|
||||
"if blah\n" +
|
||||
"then fi\n";
|
||||
String text = "if blah\n" + "then fi\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] { "if" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfElif() {
|
||||
String text = "# comment\n"+
|
||||
"\tif true; then\n" +
|
||||
"\t\tAC_ONE(...);\n"+
|
||||
"\telif false; then \n"+
|
||||
"\t\tAC_TWO(...);\n"+
|
||||
"\tfi\n";
|
||||
String text = "# comment\n" + "\tif true; then\n" + "\t\tAC_ONE(...);\n" + "\telif false; then \n"
|
||||
+ "\t\tAC_TWO(...);\n" + "\tfi\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"if",
|
||||
"AC_ONE",
|
||||
"...",
|
||||
null,
|
||||
"elif",
|
||||
"AC_TWO",
|
||||
"...",
|
||||
null,
|
||||
null,
|
||||
null });
|
||||
assertTreeStructure(tree,
|
||||
new String[] { "if", "AC_ONE", "...", null, "elif", "AC_TWO", "...", null, null, null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfErr1() {
|
||||
String text =
|
||||
"if then fi\n";
|
||||
String text = "if then fi\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(1, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.INVALID_SPECIFIER, "then"));
|
||||
assertTreeStructure(tree, new String[] { "if" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfErr2() {
|
||||
String text =
|
||||
"if true; do fi\n";
|
||||
String text = "if true; do fi\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(1, errors.size());
|
||||
checkError(AutoconfEditorMessages.getString(AutoconfParser.INVALID_DO));
|
||||
assertTreeStructure(tree, new String[] { "if" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfErr3() {
|
||||
String text =
|
||||
"if; else bar; fi\n";
|
||||
String text = "if; else bar; fi\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(1, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.MISSING_SPECIFIER, "then"));
|
||||
assertTreeStructure(tree, new String[] { "if", "else", null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfErr4() {
|
||||
String text =
|
||||
"if true; then stmt fi\n";
|
||||
String text = "if true; then stmt fi\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(1, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.INVALID_TERMINATION, "fi"));
|
||||
assertTreeStructure(tree, new String[] { "if" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfErr5() {
|
||||
String text =
|
||||
"if true; then\n";
|
||||
String text = "if true; then\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(1, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.UNTERMINATED_CONSTRUCT, "if"));
|
||||
assertTreeStructure(tree, new String[] { "if" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfErr6() {
|
||||
String text =
|
||||
"if true; then foo; else\n";
|
||||
String text = "if true; then foo; else\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(2, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.UNTERMINATED_CONSTRUCT, "if"));
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.UNTERMINATED_CONSTRUCT, "else"));
|
||||
assertTreeStructure(tree, new String[] { "if", "else", null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhile() {
|
||||
String text =
|
||||
"while true; do foo; done\n";
|
||||
String text = "while true; do foo; done\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] { "while" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhile2() {
|
||||
String text =
|
||||
"while true\n" +
|
||||
"do\n"+
|
||||
"AC_SOMETHING(...); done\n";
|
||||
String text = "while true\n" + "do\n" + "AC_SOMETHING(...); done\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] { "while", "AC_SOMETHING", "...", null, null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhileErr() {
|
||||
String text =
|
||||
"while; AC_SOMETHING(...) done\n";
|
||||
String text = "while; AC_SOMETHING(...) done\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(2, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.MISSING_SPECIFIER, "do"));
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.INVALID_TERMINATION, "done"));
|
||||
assertTreeStructure(tree, new String[] { "while", "AC_SOMETHING", "...", null, null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWhileErr2() {
|
||||
String text =
|
||||
"while true; do AC_SOMETHING(...)\n";
|
||||
String text = "while true; do AC_SOMETHING(...)\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(1, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.UNTERMINATED_CONSTRUCT, "while"));
|
||||
assertTreeStructure(tree, new String[] { "while", "AC_SOMETHING", "...", null, null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCase() {
|
||||
String text =
|
||||
"case $VAL in\n"+
|
||||
"linux-*-*) AC_FIRST($VAL) ; true ;;\n"+
|
||||
"bsd-* | macosx-*) : ;;\n"+
|
||||
"*) echo \"I dunno $VAL\";;\n"+
|
||||
"esac\n";
|
||||
String text = "case $VAL in\n" + "linux-*-*) AC_FIRST($VAL) ; true ;;\n" + "bsd-* | macosx-*) : ;;\n"
|
||||
+ "*) echo \"I dunno $VAL\";;\n" + "esac\n";
|
||||
AutoconfElement tree = parse(text, false);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"case",
|
||||
"linux-*-*",
|
||||
"AC_FIRST",
|
||||
"$VAL",
|
||||
null,
|
||||
null,
|
||||
"bsd-* | macosx-*",
|
||||
"*",
|
||||
null
|
||||
});
|
||||
assertTreeStructure(tree,
|
||||
new String[] { "case", "linux-*-*", "AC_FIRST", "$VAL", null, null, "bsd-* | macosx-*", "*", null });
|
||||
|
||||
AutoconfElement[] kids = tree.getChildren();
|
||||
assertEquals(1, kids.length);
|
||||
assertTrue(kids[0] instanceof AutoconfCaseElement);
|
||||
|
||||
AutoconfCaseElement caseEl = (AutoconfCaseElement) kids[0];
|
||||
assertEqualSource(text.substring(0, text.length()-1), caseEl);
|
||||
assertEqualSource(text.substring(0, text.length() - 1), caseEl);
|
||||
|
||||
assertEquals(3, caseEl.getChildren().length);
|
||||
|
||||
|
@ -289,10 +223,10 @@ public class TestShellParser extends BaseParserTest {
|
|||
assertEquals(0, caseCond.getChildren().length);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCaseErr() {
|
||||
String text =
|
||||
"case $VAL; linux-*-*) AC_FIRST($VAL) ; true esac\n";
|
||||
String text = "case $VAL; linux-*-*) AC_FIRST($VAL) ; true esac\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(2, errors.size());
|
||||
checkError(AutoconfEditorMessages.getString(AutoconfParser.INVALID_IN));
|
||||
|
@ -308,10 +242,10 @@ public class TestShellParser extends BaseParserTest {
|
|||
assertEqualSource("AC_FIRST($VAL)", caseCond.getChildren()[0]);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCaseErr2() {
|
||||
String text =
|
||||
"case $VAL in\n";
|
||||
String text = "case $VAL in\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertEquals(1, errors.size());
|
||||
checkError(AutoconfEditorMessages.getFormattedString(AutoconfParser.UNTERMINATED_CONSTRUCT, "case"));
|
||||
|
@ -319,137 +253,84 @@ public class TestShellParser extends BaseParserTest {
|
|||
assertTreeStructure(tree, new String[] { "case" });
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testForIn() {
|
||||
// don't get upset by 'in'
|
||||
String text =
|
||||
"for VAL in 1 2 3 4; do echo $VAL; done\n";
|
||||
String text = "for VAL in 1 2 3 4; do echo $VAL; done\n";
|
||||
AutoconfElement tree = parse(text, false);
|
||||
|
||||
assertTreeStructure(tree, new String[] { "for" });
|
||||
AutoconfElement[] kids = tree.getChildren();
|
||||
|
||||
AutoconfElement forEl = kids[0];
|
||||
assertEqualSource(text.substring(0, text.length()-1), forEl);
|
||||
assertEqualSource(text.substring(0, text.length() - 1), forEl);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testForDo() {
|
||||
// don't get upset by parentheses
|
||||
String text =
|
||||
"for (( AC_1; AC_2(); AC_3(...) )); do echo $VAL; done\n";
|
||||
String text = "for (( AC_1; AC_2(); AC_3(...) )); do echo $VAL; done\n";
|
||||
AutoconfElement tree = parse(text, false);
|
||||
|
||||
assertTreeStructure(tree, new String[] { "for", "AC_1", "AC_2", "", null, "AC_3", "...", null, null });
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUntil() {
|
||||
String text =
|
||||
"until false; do AC_SOMETHING(...); done\n";
|
||||
String text = "until false; do AC_SOMETHING(...); done\n";
|
||||
AutoconfElement tree = parse(text, false);
|
||||
assertTreeStructure(tree, new String[] { "until", "AC_SOMETHING", "...", null, null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelect() {
|
||||
String text =
|
||||
"select VAR in 1 2 3; do AC_SOMETHING(...); done\n"+
|
||||
"select VAR; do AC_SOMETHING; done\n";
|
||||
String text = "select VAR in 1 2 3; do AC_SOMETHING(...); done\n" + "select VAR; do AC_SOMETHING; done\n";
|
||||
|
||||
AutoconfElement tree = parse(text, false);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"select",
|
||||
"AC_SOMETHING",
|
||||
"...",
|
||||
null,
|
||||
null,
|
||||
"select",
|
||||
"AC_SOMETHING",
|
||||
null
|
||||
});
|
||||
assertTreeStructure(tree,
|
||||
new String[] { "select", "AC_SOMETHING", "...", null, null, "select", "AC_SOMETHING", null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testComplex1() {
|
||||
String text =
|
||||
"AM_INIT_AUTOMAKE([foo1], 1.96)\n" +
|
||||
"while true; do \n" +
|
||||
" var=shift;\n" +
|
||||
" if [ test -f \"$var\"] ; then\n"+
|
||||
" AC_SOMETHING($var);\n"+
|
||||
" fi\n"+
|
||||
"done;\n"+
|
||||
"AM_GENERATE(Makefile)\n";
|
||||
String text = "AM_INIT_AUTOMAKE([foo1], 1.96)\n" + "while true; do \n" + " var=shift;\n"
|
||||
+ " if [ test -f \"$var\"] ; then\n" + " AC_SOMETHING($var);\n" + " fi\n" + "done;\n"
|
||||
+ "AM_GENERATE(Makefile)\n";
|
||||
AutoconfElement tree = parse(text, false);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"AM_INIT_AUTOMAKE",
|
||||
"foo1",
|
||||
"1.96",
|
||||
null,
|
||||
"while",
|
||||
"if",
|
||||
"AC_SOMETHING",
|
||||
"$var",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"AM_GENERATE",
|
||||
"Makefile",
|
||||
null
|
||||
});
|
||||
assertTreeStructure(tree, new String[] { "AM_INIT_AUTOMAKE", "foo1", "1.96", null, "while", "if",
|
||||
"AC_SOMETHING", "$var", null, null, null, "AM_GENERATE", "Makefile", null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testComplex2() {
|
||||
String text =
|
||||
"if true; then\n" +
|
||||
"AC_CANONICAL_HOST\n" +
|
||||
"else\n" +
|
||||
"case foo in \n" +
|
||||
" 3) 1 ;;\n" +
|
||||
"esac;\n" +
|
||||
"fi\n";
|
||||
String text = "if true; then\n" + "AC_CANONICAL_HOST\n" + "else\n" + "case foo in \n" + " 3) 1 ;;\n"
|
||||
+ "esac;\n" + "fi\n";
|
||||
AutoconfElement tree = parse(text, false);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"if",
|
||||
"AC_CANONICAL_HOST",
|
||||
"else",
|
||||
"case",
|
||||
"3",
|
||||
null,
|
||||
null,
|
||||
null
|
||||
});
|
||||
assertTreeStructure(tree, new String[] { "if", "AC_CANONICAL_HOST", "else", "case", "3", null, null, null });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEarlyClose() {
|
||||
String text =
|
||||
"if true; then foo ; fi\n"+
|
||||
"fi\n"+
|
||||
"while true; do done;\n";
|
||||
String text = "if true; then foo ; fi\n" + "fi\n" + "while true; do done;\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"if",
|
||||
"while"
|
||||
});
|
||||
assertTreeStructure(tree, new String[] { "if", "while" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOverlapping() {
|
||||
String text =
|
||||
"for foo\n"+
|
||||
"if bar\n";
|
||||
String text = "for foo\n" + "if bar\n";
|
||||
AutoconfElement tree = parse(text, true);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"for",
|
||||
"if"
|
||||
});
|
||||
assertTreeStructure(tree, new String[] { "for", "if" });
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDollar() {
|
||||
// dollars guard keywords
|
||||
String text =
|
||||
"if [ $if == 3 ] ; then $for; fi\n";
|
||||
String text = "if [ $if == 3 ] ; then $for; fi\n";
|
||||
AutoconfElement tree = parse(text);
|
||||
assertTreeStructure(tree, new String[] {
|
||||
"if"
|
||||
});
|
||||
assertTreeStructure(tree, new String[] { "if" });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ import org.eclipse.jface.text.Document;
|
|||
import org.eclipse.jface.text.IDocument;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
/**
|
||||
* Test autoconf tokenizer. The tokenizer mainly is used to detect boundaries and keywords
|
||||
* and is not a full shell tokenizer.
|
||||
|
@ -69,6 +68,7 @@ public class TestTokenizer {
|
|||
protected void checkNoErrors() {
|
||||
assertEquals(0, tokenizerErrors.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmpty() {
|
||||
IDocument document = createDocument("");
|
||||
|
@ -76,6 +76,7 @@ public class TestTokenizer {
|
|||
checkNoErrors();
|
||||
assertEquals(0, tokens.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEOL1() {
|
||||
IDocument document = createDocument("\n");
|
||||
|
@ -84,6 +85,7 @@ public class TestTokenizer {
|
|||
assertEquals(1, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEOL2() {
|
||||
IDocument document = createDocument("\r\n");
|
||||
|
@ -92,6 +94,7 @@ public class TestTokenizer {
|
|||
assertEquals(1, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.EOL, "\r\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEOL3() {
|
||||
IDocument document = createDocument("\n\r\n\n");
|
||||
|
@ -102,6 +105,7 @@ public class TestTokenizer {
|
|||
checkToken(tokens.get(1), document, ITokenConstants.EOL, "\r\n");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellText() {
|
||||
// default mode is shell
|
||||
|
@ -110,13 +114,12 @@ public class TestTokenizer {
|
|||
List<Token> tokens = tokenize(document, false);
|
||||
checkNoErrors();
|
||||
assertEquals(4, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"random");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "random");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.EOL, "\n");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.WORD,
|
||||
"stuff");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.WORD, "stuff");
|
||||
checkToken(tokens.get(3), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellTokens() {
|
||||
// default mode is shell
|
||||
|
@ -125,18 +128,16 @@ public class TestTokenizer {
|
|||
List<Token> tokens = tokenize(document, false);
|
||||
checkNoErrors();
|
||||
assertEquals(8, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.SH_WHILE,
|
||||
"while");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.WORD,
|
||||
"true");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.SH_WHILE, "while");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.WORD, "true");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.SEMI, ";");
|
||||
checkToken(tokens.get(3), document, ITokenConstants.SH_DO, "do");
|
||||
checkToken(tokens.get(4), document, ITokenConstants.WORD, "ls");
|
||||
checkToken(tokens.get(5), document, ITokenConstants.SEMI, ";");
|
||||
checkToken(tokens.get(6), document, ITokenConstants.SH_DONE,
|
||||
"done");
|
||||
checkToken(tokens.get(6), document, ITokenConstants.SH_DONE, "done");
|
||||
checkToken(tokens.get(7), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellTokens2() {
|
||||
// don't misread partial tokens
|
||||
|
@ -145,11 +146,10 @@ public class TestTokenizer {
|
|||
List<Token> tokens = tokenize(document, false);
|
||||
checkNoErrors();
|
||||
assertEquals(2, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"while_stuff");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.WORD,
|
||||
"incase");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "while_stuff");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.WORD, "incase");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellTokens3() {
|
||||
// don't interpret m4 strings in shell mode
|
||||
|
@ -160,6 +160,7 @@ public class TestTokenizer {
|
|||
assertEquals(1, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.SH_STRING_BACKTICK, "foo'", 5);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellTokens4() {
|
||||
String text = "echo $if $((foo)) $\n";
|
||||
|
@ -181,6 +182,7 @@ public class TestTokenizer {
|
|||
checkToken(tokens.get(10), document, ITokenConstants.EOL, "\n");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellTokens5() {
|
||||
String text = "while do select for until done\n";
|
||||
|
@ -197,6 +199,7 @@ public class TestTokenizer {
|
|||
checkToken(tokens.get(6), document, ITokenConstants.EOL, "\n");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellComments() {
|
||||
// comments are stripped and ignored in the shell mode
|
||||
|
@ -205,10 +208,10 @@ public class TestTokenizer {
|
|||
List<Token> tokens = tokenize(document, false);
|
||||
checkNoErrors();
|
||||
assertEquals(2, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.SH_FOR,
|
||||
"for");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.SH_FOR, "for");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellComments2() {
|
||||
// comments are stripped and ignored in the shell mode
|
||||
|
@ -221,6 +224,7 @@ public class TestTokenizer {
|
|||
checkToken(tokens.get(1), document, ITokenConstants.EOL, "\n");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4Tokens0() {
|
||||
String text = "while_stuff incase";
|
||||
|
@ -228,56 +232,49 @@ public class TestTokenizer {
|
|||
List<Token> tokens = tokenize(document, true);
|
||||
checkNoErrors();
|
||||
assertEquals(2, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"while_stuff");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.WORD,
|
||||
"incase");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "while_stuff");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.WORD, "incase");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellStrings() {
|
||||
String QUOTED =
|
||||
"ls -la \"*.c\"";
|
||||
String QUOTED = "ls -la \"*.c\"";
|
||||
String text = "echo `" + QUOTED + "`\n";
|
||||
IDocument document = createDocument(text);
|
||||
List<Token> tokens = tokenize(document, false);
|
||||
checkNoErrors();
|
||||
assertEquals(3, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"echo");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.SH_STRING_BACKTICK,
|
||||
QUOTED, QUOTED.length() + 2);
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "echo");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.SH_STRING_BACKTICK, QUOTED, QUOTED.length() + 2);
|
||||
checkToken(tokens.get(2), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellStrings2() {
|
||||
String QUOTED =
|
||||
"ls -la 'space file'";
|
||||
String QUOTED = "ls -la 'space file'";
|
||||
String text = "echo \"" + QUOTED + "\"\n";
|
||||
IDocument document = createDocument(text);
|
||||
List<Token> tokens = tokenize(document, false);
|
||||
checkNoErrors();
|
||||
assertEquals(3, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"echo");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.SH_STRING_DOUBLE,
|
||||
QUOTED, QUOTED.length() + 2);
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "echo");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.SH_STRING_DOUBLE, QUOTED, QUOTED.length() + 2);
|
||||
checkToken(tokens.get(2), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShellStrings3() {
|
||||
String QUOTED =
|
||||
"echo \"*.c\" | sed s/[a-z]/[A-Z]/g";
|
||||
String QUOTED = "echo \"*.c\" | sed s/[a-z]/[A-Z]/g";
|
||||
String text = "echo '" + QUOTED + "'\n";
|
||||
IDocument document = createDocument(text);
|
||||
List<Token> tokens = tokenize(document, false);
|
||||
checkNoErrors();
|
||||
assertEquals(3, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"echo");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.SH_STRING_SINGLE,
|
||||
QUOTED, QUOTED.length() + 2);
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "echo");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.SH_STRING_SINGLE, QUOTED, QUOTED.length() + 2);
|
||||
checkToken(tokens.get(2), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4Tokens1() {
|
||||
String text = "define(`hi\', `HI\')\n";
|
||||
|
@ -285,18 +282,16 @@ public class TestTokenizer {
|
|||
List<Token> tokens = tokenize(document, true);
|
||||
checkNoErrors();
|
||||
assertEquals(7, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"define");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "define");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.LPAREN, "(");
|
||||
// strings are unquoted in token text
|
||||
checkToken(tokens.get(2), document, ITokenConstants.M4_STRING,
|
||||
"hi", 4);
|
||||
checkToken(tokens.get(2), document, ITokenConstants.M4_STRING, "hi", 4);
|
||||
checkToken(tokens.get(3), document, ITokenConstants.COMMA, ",");
|
||||
checkToken(tokens.get(4), document, ITokenConstants.M4_STRING,
|
||||
"HI", 4);
|
||||
checkToken(tokens.get(4), document, ITokenConstants.M4_STRING, "HI", 4);
|
||||
checkToken(tokens.get(5), document, ITokenConstants.RPAREN, ")");
|
||||
checkToken(tokens.get(6), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4Comments() {
|
||||
String text = "dnl # comment\n";
|
||||
|
@ -305,9 +300,9 @@ public class TestTokenizer {
|
|||
checkNoErrors();
|
||||
assertEquals(2, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "dnl");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.M4_COMMENT,
|
||||
"# comment\n");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.M4_COMMENT, "# comment\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4Comments2() {
|
||||
String text = "dnl /* word(`quoted')\n" + "*/\n";
|
||||
|
@ -319,10 +314,10 @@ public class TestTokenizer {
|
|||
List<Token> tokens = tokenize(tokenizer);
|
||||
assertEquals(3, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "dnl");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.M4_COMMENT,
|
||||
"/* word(`quoted')\n*/");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.M4_COMMENT, "/* word(`quoted')\n*/");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4Strings1() {
|
||||
// double quotes only removes one level of quotes
|
||||
|
@ -333,10 +328,10 @@ public class TestTokenizer {
|
|||
|
||||
List<Token> tokens = tokenize(tokenizer);
|
||||
assertEquals(2, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.M4_STRING,
|
||||
"`double'", 8 + 1 + 1);
|
||||
checkToken(tokens.get(0), document, ITokenConstants.M4_STRING, "`double'", 8 + 1 + 1);
|
||||
checkToken(tokens.get(1), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4Strings2() {
|
||||
String text = "myword(!!boundary==)\n";
|
||||
|
@ -347,14 +342,13 @@ public class TestTokenizer {
|
|||
|
||||
List<Token> tokens = tokenize(tokenizer);
|
||||
assertEquals(5, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"myword");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "myword");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.LPAREN, "(");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.M4_STRING,
|
||||
"boundary", 8 + 2 + 2);
|
||||
checkToken(tokens.get(2), document, ITokenConstants.M4_STRING, "boundary", 8 + 2 + 2);
|
||||
checkToken(tokens.get(3), document, ITokenConstants.RPAREN, ")");
|
||||
checkToken(tokens.get(4), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4Tokens2() {
|
||||
// dollar is not seen in m4 mode (only important when expanding)
|
||||
|
@ -365,8 +359,7 @@ public class TestTokenizer {
|
|||
|
||||
List<Token> tokens = tokenize(tokenizer);
|
||||
assertEquals(8, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD,
|
||||
"define");
|
||||
checkToken(tokens.get(0), document, ITokenConstants.WORD, "define");
|
||||
checkToken(tokens.get(1), document, ITokenConstants.LPAREN, "(");
|
||||
checkToken(tokens.get(2), document, ITokenConstants.WORD, "foo");
|
||||
checkToken(tokens.get(3), document, ITokenConstants.COMMA, ",");
|
||||
|
@ -375,21 +368,22 @@ public class TestTokenizer {
|
|||
checkToken(tokens.get(6), document, ITokenConstants.RPAREN, ")");
|
||||
checkToken(tokens.get(7), document, ITokenConstants.EOL, "\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testM4QuoteNesting() {
|
||||
String quote = "this is `nested\'!";
|
||||
String text = "`" + quote +"'\n";
|
||||
String text = "`" + quote + "'\n";
|
||||
IDocument document = createDocument(text);
|
||||
AutoconfTokenizer tokenizer = createTokenizer(document);
|
||||
tokenizer.setM4Context(true);
|
||||
|
||||
List<Token> tokens = tokenize(tokenizer);
|
||||
assertEquals(2, tokens.size());
|
||||
checkToken(tokens.get(0), document, ITokenConstants.M4_STRING,
|
||||
quote, quote.length() + 2);
|
||||
checkToken(tokens.get(0), document, ITokenConstants.M4_STRING, quote, quote.length() + 2);
|
||||
checkToken(tokens.get(1), document, ITokenConstants.EOL, "\n");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMixedContext() {
|
||||
String text = "AM_INIT([arg])if true\n";
|
||||
|
@ -447,12 +441,11 @@ public class TestTokenizer {
|
|||
assertSame(document, token.getDocument());
|
||||
assertTrue(token.getOffset() >= 0);
|
||||
assertTrue(token.getType() == ITokenConstants.EOF || token.getLength() > 0);
|
||||
assertEquals(document.get().substring(token.getOffset(),
|
||||
token.getOffset() + token.getLength()), token.getText());
|
||||
assertEquals(document.get().substring(token.getOffset(), token.getOffset() + token.getLength()),
|
||||
token.getText());
|
||||
}
|
||||
|
||||
private void checkToken(Token token, IDocument document, int type,
|
||||
String text) {
|
||||
private void checkToken(Token token, IDocument document, int type, String text) {
|
||||
assertEquals(type, token.getType());
|
||||
assertSame(document, token.getDocument());
|
||||
assertTrue(token.getOffset() >= 0);
|
||||
|
@ -460,8 +453,7 @@ public class TestTokenizer {
|
|||
assertEquals(text.length(), token.getLength());
|
||||
}
|
||||
|
||||
private void checkToken(Token token, IDocument document, int type,
|
||||
String text, int length) {
|
||||
private void checkToken(Token token, IDocument document, int type, String text, int length) {
|
||||
assertEquals(type, token.getType());
|
||||
assertSame(document, token.getDocument());
|
||||
assertTrue(token.getOffset() >= 0);
|
||||
|
|
|
@ -146,7 +146,7 @@ public class AutotoolsUIPlugin extends AbstractUIPlugin {
|
|||
* Returns the active workbench page or <code>null</code> if none.
|
||||
*/
|
||||
public static IWorkbenchPage getActivePage() {
|
||||
IWorkbenchWindow window= getActiveWorkbenchWindow();
|
||||
IWorkbenchWindow window = getActiveWorkbenchWindow();
|
||||
if (window != null) {
|
||||
return window.getActivePage();
|
||||
}
|
||||
|
|
|
@ -35,8 +35,7 @@ public class AcInitElement extends AutoconfMacroElement {
|
|||
if (this.getChildren().length == 0)
|
||||
return;
|
||||
|
||||
if (VersionComparator.compare(version,
|
||||
AutotoolsPropertyConstants.AC_VERSION_2_59) >= 0){
|
||||
if (VersionComparator.compare(version, AutotoolsPropertyConstants.AC_VERSION_2_59) >= 0) {
|
||||
if (this.getChildren().length < 2)
|
||||
return;
|
||||
|
||||
|
@ -49,7 +48,7 @@ public class AcInitElement extends AutoconfMacroElement {
|
|||
return;
|
||||
}
|
||||
|
||||
private void validateMultipleArguments () throws InvalidMacroException{
|
||||
private void validateMultipleArguments() throws InvalidMacroException {
|
||||
|
||||
// There are no restrictions on the first argument.
|
||||
|
||||
|
@ -57,7 +56,7 @@ public class AcInitElement extends AutoconfMacroElement {
|
|||
AutoconfElement argument = this.getChildren()[1];
|
||||
// match a digit followed by a dot zero or more times
|
||||
// but always end with a digit
|
||||
if (!argument.getName().matches("(\\d*\\.)*((\\d+))")){
|
||||
if (!argument.getName().matches("(\\d*\\.)*((\\d+))")) {
|
||||
throw new InvalidMacroException(AutoconfEditorMessages.getString(BAD_VERSION_NUMBER), argument);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.eclipse.jface.text.source.ISourceViewer;
|
|||
import org.eclipse.jface.text.source.LineRange;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
|
||||
public class AutoconfAnnotationHover implements IAnnotationHover, IAnnotationHoverExtension {
|
||||
|
||||
/**
|
||||
|
@ -44,7 +43,7 @@ public class AutoconfAnnotationHover implements IAnnotationHover, IAnnotationHov
|
|||
|
||||
if (position.getOffset() > -1 && position.getLength() > -1) {
|
||||
try {
|
||||
int markerLine= document.getLineOfOffset(position.getOffset());
|
||||
int markerLine = document.getLineOfOffset(position.getOffset());
|
||||
if (line == markerLine)
|
||||
return 1;
|
||||
if (markerLine <= line && line <= document.getLineOfOffset(position.getOffset() + position.getLength()))
|
||||
|
@ -69,27 +68,27 @@ public class AutoconfAnnotationHover implements IAnnotationHover, IAnnotationHov
|
|||
*/
|
||||
protected List<Annotation> getAnnotationsForLine(ISourceViewer viewer, int line) {
|
||||
|
||||
IDocument document= viewer.getDocument();
|
||||
IAnnotationModel model= viewer.getAnnotationModel();
|
||||
IDocument document = viewer.getDocument();
|
||||
IAnnotationModel model = viewer.getAnnotationModel();
|
||||
|
||||
if (model == null)
|
||||
return null;
|
||||
|
||||
List<Annotation> exact= new ArrayList<>();
|
||||
List<Annotation> including= new ArrayList<>();
|
||||
List<Annotation> exact = new ArrayList<>();
|
||||
List<Annotation> including = new ArrayList<>();
|
||||
|
||||
Iterator<?> e = model.getAnnotationIterator();
|
||||
while (e.hasNext()) {
|
||||
Object o= e.next();
|
||||
Object o = e.next();
|
||||
if (o instanceof Annotation) {
|
||||
Annotation a= (Annotation) o;
|
||||
Annotation a = (Annotation) o;
|
||||
switch (compareRulerLine(model.getPosition(a), document, line)) {
|
||||
case 1:
|
||||
exact.add(a);
|
||||
break;
|
||||
case 2:
|
||||
including.add(a);
|
||||
break;
|
||||
case 1:
|
||||
exact.add(a);
|
||||
break;
|
||||
case 2:
|
||||
including.add(a);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -106,18 +105,18 @@ public class AutoconfAnnotationHover implements IAnnotationHover, IAnnotationHov
|
|||
|
||||
// optimization
|
||||
Annotation annotation = annotations.get(0);
|
||||
String message= annotation.getText();
|
||||
String message = annotation.getText();
|
||||
if (message != null && message.trim().length() > 0)
|
||||
return formatSingleMessage(message);
|
||||
|
||||
} else {
|
||||
|
||||
List<String> messages= new ArrayList<>();
|
||||
List<String> messages = new ArrayList<>();
|
||||
|
||||
Iterator<Annotation> e= annotations.iterator();
|
||||
Iterator<Annotation> e = annotations.iterator();
|
||||
while (e.hasNext()) {
|
||||
Annotation annotation = e.next();
|
||||
String message= annotation.getText();
|
||||
String message = annotation.getText();
|
||||
if (message != null && message.trim().length() > 0)
|
||||
messages.add(message.trim());
|
||||
}
|
||||
|
@ -133,12 +132,11 @@ public class AutoconfAnnotationHover implements IAnnotationHover, IAnnotationHov
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Formats a message as HTML text.
|
||||
*/
|
||||
private String formatSingleMessage(String message) {
|
||||
StringBuilder buffer= new StringBuilder();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
HTMLPrinter.addPageProlog(buffer);
|
||||
HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(message));
|
||||
HTMLPrinter.addPageEpilog(buffer);
|
||||
|
@ -149,12 +147,13 @@ public class AutoconfAnnotationHover implements IAnnotationHover, IAnnotationHov
|
|||
* Formats several message as HTML text.
|
||||
*/
|
||||
private String formatMultipleMessages(List<String> messages) {
|
||||
StringBuilder buffer= new StringBuilder();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
HTMLPrinter.addPageProlog(buffer);
|
||||
HTMLPrinter.addParagraph(buffer, HTMLPrinter.convertToHTMLContent(AutoconfEditorMessages.getString("AutoconfAnnotationHover.multipleMarkers"))); //$NON-NLS-1$
|
||||
HTMLPrinter.addParagraph(buffer, HTMLPrinter
|
||||
.convertToHTMLContent(AutoconfEditorMessages.getString("AutoconfAnnotationHover.multipleMarkers"))); //$NON-NLS-1$
|
||||
|
||||
HTMLPrinter.startBulletList(buffer);
|
||||
Iterator<String> e= messages.iterator();
|
||||
Iterator<String> e = messages.iterator();
|
||||
while (e.hasNext())
|
||||
HTMLPrinter.addBullet(buffer, HTMLPrinter.convertToHTMLContent(e.next()));
|
||||
HTMLPrinter.endBulletList(buffer);
|
||||
|
@ -167,7 +166,6 @@ public class AutoconfAnnotationHover implements IAnnotationHover, IAnnotationHov
|
|||
// We need to use the extension to get a Hover Control Creator which
|
||||
// handles html.
|
||||
|
||||
|
||||
@Override
|
||||
public IInformationControlCreator getHoverControlCreator() {
|
||||
return new IInformationControlCreator() {
|
||||
|
|
|
@ -38,10 +38,9 @@ import org.eclipse.swt.SWT;
|
|||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
|
||||
|
||||
public class AutoconfCodeScanner extends RuleBasedScanner {
|
||||
|
||||
private Map<String, IToken> fTokenMap= new HashMap<>();
|
||||
private Map<String, IToken> fTokenMap = new HashMap<>();
|
||||
private String[] fPropertyNamesColor;
|
||||
|
||||
/**
|
||||
|
@ -55,37 +54,31 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
*/
|
||||
private String[] fPropertyNamesItalic;
|
||||
|
||||
private static String[] keywords = {
|
||||
"case", "do", "done", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"esac", "if", "elif", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"else", "fi", "for", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"in", "then" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
private static String[] keywords = { "case", "do", "done", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"esac", "if", "elif", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"else", "fi", "for", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"in", "then" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
static final String[] fTokenProperties = new String[] {
|
||||
ColorManager.AUTOCONF_COMMENT_COLOR,
|
||||
ColorManager.AUTOCONF_KEYWORD_COLOR,
|
||||
ColorManager.AUTOCONF_ACMACRO_COLOR,
|
||||
ColorManager.AUTOCONF_AMMACRO_COLOR,
|
||||
ColorManager.AUTOCONF_VAR_REF_COLOR,
|
||||
ColorManager.AUTOCONF_VAR_SET_COLOR,
|
||||
ColorManager.AUTOCONF_CODESEQ_COLOR,
|
||||
ColorManager.AUTOCONF_DEFAULT_COLOR,
|
||||
};
|
||||
static final String[] fTokenProperties = new String[] { ColorManager.AUTOCONF_COMMENT_COLOR,
|
||||
ColorManager.AUTOCONF_KEYWORD_COLOR, ColorManager.AUTOCONF_ACMACRO_COLOR,
|
||||
ColorManager.AUTOCONF_AMMACRO_COLOR, ColorManager.AUTOCONF_VAR_REF_COLOR,
|
||||
ColorManager.AUTOCONF_VAR_SET_COLOR, ColorManager.AUTOCONF_CODESEQ_COLOR,
|
||||
ColorManager.AUTOCONF_DEFAULT_COLOR, };
|
||||
|
||||
public AutoconfCodeScanner() {
|
||||
|
||||
initialize();
|
||||
|
||||
IToken other= getToken(ColorManager.AUTOCONF_DEFAULT_COLOR);
|
||||
IToken other = getToken(ColorManager.AUTOCONF_DEFAULT_COLOR);
|
||||
IToken keyword = getToken(ColorManager.AUTOCONF_KEYWORD_COLOR);
|
||||
IToken comment= getToken(ColorManager.AUTOCONF_COMMENT_COLOR);
|
||||
IToken comment = getToken(ColorManager.AUTOCONF_COMMENT_COLOR);
|
||||
IToken string = getToken(ColorManager.AUTOCONF_DEFAULT_COLOR);
|
||||
IToken varRef = getToken(ColorManager.AUTOCONF_VAR_REF_COLOR);
|
||||
IToken acmacro = getToken(ColorManager.AUTOCONF_ACMACRO_COLOR);
|
||||
IToken ammacro = getToken(ColorManager.AUTOCONF_AMMACRO_COLOR);
|
||||
IToken code = getToken(ColorManager.AUTOCONF_CODESEQ_COLOR);
|
||||
|
||||
List<IRule> rules= new ArrayList<>();
|
||||
List<IRule> rules = new ArrayList<>();
|
||||
|
||||
// Add rule for single line comments.
|
||||
rules.add(new EndOfLineRule("dnl", comment)); //$NON-NLS-1$
|
||||
|
@ -93,8 +86,7 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
|
||||
// Add special recursive rule for strings which allows variable
|
||||
// references to be internally tokenized.
|
||||
RecursiveSingleLineRule stringRule =
|
||||
new RecursiveSingleLineRule("\"", "\"", string, '\\'); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
RecursiveSingleLineRule stringRule = new RecursiveSingleLineRule("\"", "\"", string, '\\'); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
stringRule.addRule(new SingleLineRule("${", "}", varRef)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
rules.add(stringRule);
|
||||
|
||||
|
@ -119,8 +111,8 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
rules.add(new InlineDataRule(code));
|
||||
|
||||
// Add word rule for keywords.
|
||||
WordRule wordRule= new WordRule(new AutoconfWordDetector(), Token.UNDEFINED);
|
||||
for (int i= 0; i < keywords.length; i++)
|
||||
WordRule wordRule = new WordRule(new AutoconfWordDetector(), Token.UNDEFINED);
|
||||
for (int i = 0; i < keywords.length; i++)
|
||||
wordRule.addWord(keywords[i], keyword);
|
||||
rules.add(wordRule);
|
||||
|
||||
|
@ -134,7 +126,7 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
|
||||
setDefaultReturnToken(other);
|
||||
|
||||
IRule[] result= new IRule[rules.size()];
|
||||
IRule[] result = new IRule[rules.size()];
|
||||
rules.toArray(result);
|
||||
setRules(result);
|
||||
}
|
||||
|
@ -153,9 +145,10 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
|
||||
private int indexOf(String property) {
|
||||
if (property != null) {
|
||||
int length= fPropertyNamesColor.length;
|
||||
for (int i= 0; i < length; i++) {
|
||||
if (property.equals(fPropertyNamesColor[i]) || property.equals(fPropertyNamesBold[i]) || property.equals(fPropertyNamesItalic[i]))
|
||||
int length = fPropertyNamesColor.length;
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (property.equals(fPropertyNamesColor[i]) || property.equals(fPropertyNamesBold[i])
|
||||
|| property.equals(fPropertyNamesItalic[i]))
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
@ -167,9 +160,9 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
}
|
||||
|
||||
public void adaptToPreferenceChange(PropertyChangeEvent event) {
|
||||
String p= event.getProperty();
|
||||
int index= indexOf(p);
|
||||
Token token= getToken(fPropertyNamesColor[index]);
|
||||
String p = event.getProperty();
|
||||
int index = indexOf(p);
|
||||
Token token = getToken(fPropertyNamesColor[index]);
|
||||
if (fPropertyNamesColor[index].equals(p))
|
||||
adaptToColorChange(event, token);
|
||||
else if (fPropertyNamesBold[index].equals(p))
|
||||
|
@ -179,46 +172,48 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
}
|
||||
|
||||
protected void adaptToColorChange(PropertyChangeEvent event, Token token) {
|
||||
RGB rgb= null;
|
||||
Object value= event.getNewValue();
|
||||
RGB rgb = null;
|
||||
Object value = event.getNewValue();
|
||||
if (value instanceof RGB) {
|
||||
rgb= (RGB) value;
|
||||
rgb = (RGB) value;
|
||||
} else if (value instanceof String) {
|
||||
rgb= StringConverter.asRGB((String) value);
|
||||
rgb = StringConverter.asRGB((String) value);
|
||||
}
|
||||
|
||||
if (rgb != null) {
|
||||
TextAttribute attr= (TextAttribute) token.getData();
|
||||
token.setData(new TextAttribute(ColorManager.getDefault().getColor(rgb), attr.getBackground(), attr.getStyle()));
|
||||
TextAttribute attr = (TextAttribute) token.getData();
|
||||
token.setData(
|
||||
new TextAttribute(ColorManager.getDefault().getColor(rgb), attr.getBackground(), attr.getStyle()));
|
||||
}
|
||||
}
|
||||
|
||||
protected void adaptToStyleChange(PropertyChangeEvent event, Token token, int styleAttribute) {
|
||||
if (token == null) {
|
||||
if (token == null) {
|
||||
return;
|
||||
}
|
||||
boolean eventValue= false;
|
||||
Object value= event.getNewValue();
|
||||
boolean eventValue = false;
|
||||
Object value = event.getNewValue();
|
||||
if (value instanceof Boolean) {
|
||||
eventValue= ((Boolean) value).booleanValue();
|
||||
eventValue = ((Boolean) value).booleanValue();
|
||||
} else if (IPreferenceStore.TRUE.equals(value)) {
|
||||
eventValue= true;
|
||||
eventValue = true;
|
||||
}
|
||||
|
||||
TextAttribute attr= (TextAttribute) token.getData();
|
||||
boolean activeValue= (attr.getStyle() & styleAttribute) == styleAttribute;
|
||||
TextAttribute attr = (TextAttribute) token.getData();
|
||||
boolean activeValue = (attr.getStyle() & styleAttribute) == styleAttribute;
|
||||
if (activeValue != eventValue) {
|
||||
token.setData(new TextAttribute(attr.getForeground(), attr.getBackground(), eventValue ? attr.getStyle() | styleAttribute : attr.getStyle() & ~styleAttribute));
|
||||
token.setData(new TextAttribute(attr.getForeground(), attr.getBackground(),
|
||||
eventValue ? attr.getStyle() | styleAttribute : attr.getStyle() & ~styleAttribute));
|
||||
}
|
||||
}
|
||||
|
||||
protected TextAttribute createTextAttribute(String colorID, String boldKey, String italicKey) {
|
||||
Color color= null;
|
||||
Color color = null;
|
||||
if (colorID != null) {
|
||||
color= AutoconfEditor.getPreferenceColor(colorID);
|
||||
color = AutoconfEditor.getPreferenceColor(colorID);
|
||||
}
|
||||
IPreferenceStore store= AutotoolsPlugin.getDefault().getPreferenceStore();
|
||||
int style= store.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
|
||||
IPreferenceStore store = AutotoolsPlugin.getDefault().getPreferenceStore();
|
||||
int style = store.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
|
||||
if (store.getBoolean(italicKey)) {
|
||||
style |= SWT.ITALIC;
|
||||
}
|
||||
|
@ -230,21 +225,21 @@ public class AutoconfCodeScanner extends RuleBasedScanner {
|
|||
*/
|
||||
public final void initialize() {
|
||||
|
||||
fPropertyNamesColor= getTokenProperties();
|
||||
int length= fPropertyNamesColor.length;
|
||||
fPropertyNamesBold= new String[length];
|
||||
fPropertyNamesItalic= new String[length];
|
||||
fPropertyNamesColor = getTokenProperties();
|
||||
int length = fPropertyNamesColor.length;
|
||||
fPropertyNamesBold = new String[length];
|
||||
fPropertyNamesItalic = new String[length];
|
||||
|
||||
for (int i= 0; i < length; i++) {
|
||||
fPropertyNamesBold[i]= fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_BOLD_SUFFIX;
|
||||
fPropertyNamesItalic[i]= fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_ITALIC_SUFFIX;
|
||||
for (int i = 0; i < length; i++) {
|
||||
fPropertyNamesBold[i] = fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_BOLD_SUFFIX;
|
||||
fPropertyNamesItalic[i] = fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_ITALIC_SUFFIX;
|
||||
addToken(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unread() {
|
||||
--fOffset;
|
||||
fColumn = UNDEFINED;
|
||||
--fOffset;
|
||||
fColumn = UNDEFINED;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ public class AutoconfDocumentProvider extends TextFileDocumentProvider {
|
|||
|
||||
@Override
|
||||
public IDocument getDocument(Object element) {
|
||||
FileInfo info= getFileInfo(element);
|
||||
FileInfo info = getFileInfo(element);
|
||||
if (info != null)
|
||||
return info.fTextFileBuffer.getDocument();
|
||||
return getParentProvider().getDocument(element);
|
||||
|
|
|
@ -19,23 +19,20 @@ import org.eclipse.jface.text.IDocument;
|
|||
import org.eclipse.jface.text.IDocumentExtension3;
|
||||
import org.eclipse.jface.text.IDocumentListener;
|
||||
|
||||
public class AutoconfDocumentSetupParticipant implements
|
||||
IDocumentSetupParticipant, IDocumentListener {
|
||||
public class AutoconfDocumentSetupParticipant implements IDocumentSetupParticipant, IDocumentListener {
|
||||
|
||||
@Override
|
||||
public void setup(IDocument document) {
|
||||
AutoconfPartitioner partitioner =
|
||||
new AutoconfPartitioner(
|
||||
new AutoconfPartitionScanner(),
|
||||
AutoconfPartitioner partitioner = new AutoconfPartitioner(new AutoconfPartitionScanner(),
|
||||
AutoconfPartitionScanner.AUTOCONF_PARTITION_TYPES);
|
||||
partitioner.connect(document, 1);
|
||||
if (document instanceof IDocumentExtension3) {
|
||||
IDocumentExtension3 extension3= (IDocumentExtension3) document;
|
||||
IDocumentExtension3 extension3 = (IDocumentExtension3) document;
|
||||
extension3.setDocumentPartitioner(AutoconfEditor.AUTOCONF_PARTITIONING, partitioner);
|
||||
} else {
|
||||
document.setDocumentPartitioner(partitioner);
|
||||
}
|
||||
// document.addDocumentListener(this);
|
||||
// document.addDocumentListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -86,24 +86,22 @@ import org.eclipse.ui.texteditor.TextEditorAction;
|
|||
import org.eclipse.ui.texteditor.TextOperationAction;
|
||||
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
|
||||
|
||||
|
||||
public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IProjectPropertyListener {
|
||||
|
||||
public final static String AUTOCONF_PARTITIONING= "autoconf_partitioning"; //$NON-NLS-1$
|
||||
public final static String AUTOCONF_PARTITIONING = "autoconf_partitioning"; //$NON-NLS-1$
|
||||
|
||||
private AutoconfPartitionScanner fPartitionScanner;
|
||||
private RuleBasedScanner fCodeScanner;
|
||||
private RuleBasedScanner fMacroCodeScanner;
|
||||
private static volatile AutoconfDocumentProvider fDocumentProvider;
|
||||
private AutoconfElement rootElement;
|
||||
private AutoconfContentOutlinePage outlinePage;
|
||||
private AutoconfParser fParser;
|
||||
private IEditorInput input;
|
||||
private IProject fProject;
|
||||
|
||||
private AutoconfPartitionScanner fPartitionScanner;
|
||||
private RuleBasedScanner fCodeScanner;
|
||||
private RuleBasedScanner fMacroCodeScanner;
|
||||
private static volatile AutoconfDocumentProvider fDocumentProvider;
|
||||
private AutoconfElement rootElement;
|
||||
private AutoconfContentOutlinePage outlinePage;
|
||||
private AutoconfParser fParser;
|
||||
private IEditorInput input;
|
||||
private IProject fProject;
|
||||
|
||||
/** The information provider used to present focusable information shells. */
|
||||
private InformationPresenter fInformationPresenter;
|
||||
/** The information provider used to present focusable information shells. */
|
||||
private InformationPresenter fInformationPresenter;
|
||||
/**
|
||||
* This editor's projection support
|
||||
*/
|
||||
|
@ -116,15 +114,14 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
*/
|
||||
private ListenerList<IReconcilingParticipant> fReconcilingListeners = new ListenerList<>(ListenerList.IDENTITY);
|
||||
|
||||
public AutoconfEditor() {
|
||||
super();
|
||||
}
|
||||
|
||||
public AutoconfEditor() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
protected void initializeEditor() {
|
||||
super.initializeEditor();
|
||||
setDocumentProvider(getAutoconfDocumentProvider());
|
||||
super.initializeEditor();
|
||||
setDocumentProvider(getAutoconfDocumentProvider());
|
||||
IPreferenceStore[] stores = new IPreferenceStore[2];
|
||||
stores[0] = AutotoolsPlugin.getDefault().getPreferenceStore();
|
||||
stores[1] = EditorsUI.getPreferenceStore();
|
||||
|
@ -132,58 +129,54 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
setPreferenceStore(chainedStore);
|
||||
setSourceViewerConfiguration(new AutoconfSourceViewerConfiguration(chainedStore, this));
|
||||
AutotoolsEditorPreferenceConstants.initializeDefaultValues(stores[0]);
|
||||
AutoconfEditorPreferencePage.initDefaults(stores[0]);
|
||||
}
|
||||
AutoconfEditorPreferencePage.initDefaults(stores[0]);
|
||||
}
|
||||
|
||||
public static AutoconfDocumentProvider getAutoconfDocumentProvider() {
|
||||
if (fDocumentProvider == null)
|
||||
fDocumentProvider= new AutoconfDocumentProvider();
|
||||
return fDocumentProvider;
|
||||
}
|
||||
public static AutoconfDocumentProvider getAutoconfDocumentProvider() {
|
||||
if (fDocumentProvider == null)
|
||||
fDocumentProvider = new AutoconfDocumentProvider();
|
||||
return fDocumentProvider;
|
||||
}
|
||||
|
||||
public AutoconfElement getRootElement() {
|
||||
return rootElement;
|
||||
}
|
||||
public AutoconfElement getRootElement() {
|
||||
return rootElement;
|
||||
}
|
||||
|
||||
public void setRootElement(AutoconfElement element) {
|
||||
rootElement = element;
|
||||
}
|
||||
public void setRootElement(AutoconfElement element) {
|
||||
rootElement = element;
|
||||
}
|
||||
|
||||
public ISourceViewer getViewer() {
|
||||
return getSourceViewer();
|
||||
}
|
||||
public ISourceViewer getViewer() {
|
||||
return getSourceViewer();
|
||||
}
|
||||
|
||||
protected IDocument getInputDocument() {
|
||||
return getDocumentProvider().getDocument(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doSetInput(IEditorInput newInput) throws CoreException
|
||||
{
|
||||
// If this editor is for a project file, remove this editor as a property
|
||||
// change listener.
|
||||
if (fProject != null)
|
||||
AutotoolsPropertyManager.getDefault().removeProjectPropertyListener(fProject, this);
|
||||
this.fProject = null;
|
||||
@Override
|
||||
protected void doSetInput(IEditorInput newInput) throws CoreException {
|
||||
// If this editor is for a project file, remove this editor as a property
|
||||
// change listener.
|
||||
if (fProject != null)
|
||||
AutotoolsPropertyManager.getDefault().removeProjectPropertyListener(fProject, this);
|
||||
this.fProject = null;
|
||||
super.doSetInput(newInput);
|
||||
this.input = newInput;
|
||||
|
||||
if (input instanceof IFileEditorInput) {
|
||||
IFile f = ((IFileEditorInput)input).getFile();
|
||||
IFile f = ((IFileEditorInput) input).getFile();
|
||||
fProject = f.getProject();
|
||||
// This is a project file. We want to be notified if the Autoconf editor
|
||||
// properties are changed such that the macro versions are changed.
|
||||
AutotoolsPropertyManager.getDefault().addProjectPropertyListener(fProject, this);
|
||||
}
|
||||
getOutlinePage().setInput(input);
|
||||
try
|
||||
{
|
||||
try {
|
||||
IDocument document = getInputDocument();
|
||||
|
||||
setRootElement(reparseDocument(document));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -204,74 +197,74 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
return super.getAdapter(required);
|
||||
}
|
||||
|
||||
|
||||
public AutoconfContentOutlinePage getOutlinePage() {
|
||||
public AutoconfContentOutlinePage getOutlinePage() {
|
||||
if (outlinePage == null) {
|
||||
outlinePage= new AutoconfContentOutlinePage(this);
|
||||
outlinePage = new AutoconfContentOutlinePage(this);
|
||||
if (getEditorInput() != null)
|
||||
outlinePage.setInput(getEditorInput());
|
||||
}
|
||||
return outlinePage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a scanner for creating Autoconf partitions.
|
||||
*
|
||||
* @return a scanner for creating Autoconf partitions
|
||||
*/
|
||||
public AutoconfParser getAutoconfParser() {
|
||||
if (fParser == null) {
|
||||
AutoconfErrorHandler errorHandler = new AutoconfErrorHandler(input);
|
||||
IAutoconfMacroValidator macroValidator = new AutoconfEditorMacroValidator(this);
|
||||
fParser = new AutoconfParser(errorHandler, new AutoconfMacroDetector(), macroValidator);
|
||||
}
|
||||
return fParser;
|
||||
}
|
||||
/**
|
||||
* Return a scanner for creating Autoconf partitions.
|
||||
*
|
||||
* @return a scanner for creating Autoconf partitions
|
||||
*/
|
||||
public AutoconfParser getAutoconfParser() {
|
||||
if (fParser == null) {
|
||||
AutoconfErrorHandler errorHandler = new AutoconfErrorHandler(input);
|
||||
IAutoconfMacroValidator macroValidator = new AutoconfEditorMacroValidator(this);
|
||||
fParser = new AutoconfParser(errorHandler, new AutoconfMacroDetector(), macroValidator);
|
||||
}
|
||||
return fParser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a scanner for creating Autoconf partitions.
|
||||
*
|
||||
* @return a scanner for creating Autoconf partitions
|
||||
*/
|
||||
public AutoconfPartitionScanner getAutoconfPartitionScanner() {
|
||||
if (fPartitionScanner == null)
|
||||
fPartitionScanner= new AutoconfPartitionScanner();
|
||||
return fPartitionScanner;
|
||||
}
|
||||
* Return a scanner for creating Autoconf partitions.
|
||||
*
|
||||
* @return a scanner for creating Autoconf partitions
|
||||
*/
|
||||
public AutoconfPartitionScanner getAutoconfPartitionScanner() {
|
||||
if (fPartitionScanner == null)
|
||||
fPartitionScanner = new AutoconfPartitionScanner();
|
||||
return fPartitionScanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Autoconf code scanner.
|
||||
*
|
||||
* @return the Autoconf code scanner
|
||||
*/
|
||||
public RuleBasedScanner getAutoconfCodeScanner() {
|
||||
if (fCodeScanner == null)
|
||||
fCodeScanner= new AutoconfCodeScanner();
|
||||
return fCodeScanner;
|
||||
}
|
||||
/**
|
||||
* Returns the Autoconf code scanner.
|
||||
*
|
||||
* @return the Autoconf code scanner
|
||||
*/
|
||||
public RuleBasedScanner getAutoconfCodeScanner() {
|
||||
if (fCodeScanner == null)
|
||||
fCodeScanner = new AutoconfCodeScanner();
|
||||
return fCodeScanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Autoconf code scanner.
|
||||
*
|
||||
* @return the Autoconf code scanner
|
||||
*/
|
||||
public RuleBasedScanner getAutoconfMacroCodeScanner() {
|
||||
if (fMacroCodeScanner == null)
|
||||
fMacroCodeScanner= new AutoconfMacroCodeScanner();
|
||||
return fMacroCodeScanner;
|
||||
}
|
||||
/**
|
||||
* Returns the Autoconf code scanner.
|
||||
*
|
||||
* @return the Autoconf code scanner
|
||||
*/
|
||||
public RuleBasedScanner getAutoconfMacroCodeScanner() {
|
||||
if (fMacroCodeScanner == null)
|
||||
fMacroCodeScanner = new AutoconfMacroCodeScanner();
|
||||
return fMacroCodeScanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the preference color, identified by the given preference.
|
||||
*/
|
||||
public static Color getPreferenceColor(String key) {
|
||||
return ColorManager.getDefault().getColor(PreferenceConverter.getColor(AutotoolsPlugin.getDefault().getPreferenceStore(), key));
|
||||
return ColorManager.getDefault()
|
||||
.getColor(PreferenceConverter.getColor(AutotoolsPlugin.getDefault().getPreferenceStore(), key));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleProjectPropertyChanged(IProject project, String property) {
|
||||
if (property.equals(AutotoolsPropertyConstants.AUTOCONF_MACRO_VERSIONING)) {
|
||||
ISourceViewer sourceViewer= getSourceViewer();
|
||||
ISourceViewer sourceViewer = getSourceViewer();
|
||||
if (sourceViewer == null)
|
||||
return;
|
||||
handleVersionChange(sourceViewer);
|
||||
|
@ -291,45 +284,44 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
IDocument document = getInputDocument();
|
||||
|
||||
setRootElement(reparseDocument(document));
|
||||
}
|
||||
catch (Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private AutoconfElement reparseDocument(IDocument document) {
|
||||
AutoconfParser parser = getAutoconfParser();
|
||||
((AutoconfErrorHandler)parser.getErrorHandler()).removeAllExistingMarkers();
|
||||
((AutoconfErrorHandler) parser.getErrorHandler()).removeAllExistingMarkers();
|
||||
|
||||
return parser.parse(document);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
|
||||
ISourceViewer sourceViewer= getSourceViewer();
|
||||
ISourceViewer sourceViewer = getSourceViewer();
|
||||
if (sourceViewer == null)
|
||||
return;
|
||||
|
||||
String property = event.getProperty();
|
||||
String property = event.getProperty();
|
||||
|
||||
AutoconfCodeScanner scanner = (AutoconfCodeScanner)getAutoconfCodeScanner();
|
||||
if (scanner != null) {
|
||||
if (scanner.affectsBehavior(event)) {
|
||||
scanner.adaptToPreferenceChange(event);
|
||||
sourceViewer.invalidateTextPresentation();
|
||||
}
|
||||
}
|
||||
AutoconfCodeScanner scanner = (AutoconfCodeScanner) getAutoconfCodeScanner();
|
||||
if (scanner != null) {
|
||||
if (scanner.affectsBehavior(event)) {
|
||||
scanner.adaptToPreferenceChange(event);
|
||||
sourceViewer.invalidateTextPresentation();
|
||||
}
|
||||
}
|
||||
|
||||
if (AutotoolsEditorPreferenceConstants.AUTOCONF_VERSION.equals(property) ||
|
||||
AutotoolsEditorPreferenceConstants.AUTOMAKE_VERSION.equals(property)) {
|
||||
handleVersionChange(sourceViewer);
|
||||
} else if (AutotoolsEditorPreferenceConstants.EDITOR_FOLDING_ENABLED.equals(property)) {
|
||||
if (AutotoolsEditorPreferenceConstants.AUTOCONF_VERSION.equals(property)
|
||||
|| AutotoolsEditorPreferenceConstants.AUTOMAKE_VERSION.equals(property)) {
|
||||
handleVersionChange(sourceViewer);
|
||||
} else if (AutotoolsEditorPreferenceConstants.EDITOR_FOLDING_ENABLED.equals(property)) {
|
||||
if (sourceViewer instanceof ProjectionViewer) {
|
||||
ProjectionViewer projectionViewer= (ProjectionViewer) sourceViewer;
|
||||
ProjectionViewer projectionViewer = (ProjectionViewer) sourceViewer;
|
||||
if (fProjectionFileUpdater != null)
|
||||
fProjectionFileUpdater.uninstall();
|
||||
// either freshly enabled or provider changed
|
||||
fProjectionFileUpdater= new ProjectionFileUpdater();
|
||||
fProjectionFileUpdater = new ProjectionFileUpdater();
|
||||
if (fProjectionFileUpdater != null) {
|
||||
fProjectionFileUpdater.install(this, projectionViewer);
|
||||
}
|
||||
|
@ -340,239 +332,250 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
super.handlePreferenceStoreChanged(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Information provider used to present focusable information shells.
|
||||
*
|
||||
* @since 3.1.1
|
||||
*/
|
||||
private static final class InformationProvider implements IInformationProvider, IInformationProviderExtension, IInformationProviderExtension2 {
|
||||
/**
|
||||
* Information provider used to present focusable information shells.
|
||||
*
|
||||
* @since 3.1.1
|
||||
*/
|
||||
private static final class InformationProvider
|
||||
implements IInformationProvider, IInformationProviderExtension, IInformationProviderExtension2 {
|
||||
|
||||
private IRegion fHoverRegion;
|
||||
private Object fHoverInfo;
|
||||
private IInformationControlCreator fControlCreator;
|
||||
private IRegion fHoverRegion;
|
||||
private Object fHoverInfo;
|
||||
private IInformationControlCreator fControlCreator;
|
||||
|
||||
InformationProvider(IRegion hoverRegion, Object hoverInfo, IInformationControlCreator controlCreator) {
|
||||
fHoverRegion= hoverRegion;
|
||||
fHoverInfo= hoverInfo;
|
||||
fControlCreator= controlCreator;
|
||||
}
|
||||
@Override
|
||||
InformationProvider(IRegion hoverRegion, Object hoverInfo, IInformationControlCreator controlCreator) {
|
||||
fHoverRegion = hoverRegion;
|
||||
fHoverInfo = hoverInfo;
|
||||
fControlCreator = controlCreator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegion getSubject(ITextViewer textViewer, int invocationOffset) {
|
||||
return fHoverRegion;
|
||||
}
|
||||
@Override
|
||||
return fHoverRegion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInformation(ITextViewer textViewer, IRegion subject) {
|
||||
return fHoverInfo.toString();
|
||||
}
|
||||
return fHoverInfo.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public Object getInformation2(ITextViewer textViewer, IRegion subject) {
|
||||
return fHoverInfo;
|
||||
}
|
||||
@Override
|
||||
return fHoverInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IInformationControlCreator getInformationPresenterControlCreator() {
|
||||
return fControlCreator;
|
||||
}
|
||||
}
|
||||
return fControlCreator;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This action behaves in two different ways: If there is no current text
|
||||
* hover, the tooltip is displayed using information presenter. If there is
|
||||
* a current text hover, it is converted into a information presenter in
|
||||
* order to make it sticky.
|
||||
* @since 3.1.1
|
||||
*/
|
||||
class InformationDispatchAction extends TextEditorAction {
|
||||
/**
|
||||
* This action behaves in two different ways: If there is no current text
|
||||
* hover, the tooltip is displayed using information presenter. If there is
|
||||
* a current text hover, it is converted into a information presenter in
|
||||
* order to make it sticky.
|
||||
* @since 3.1.1
|
||||
*/
|
||||
class InformationDispatchAction extends TextEditorAction {
|
||||
|
||||
/** The wrapped text operation action. */
|
||||
private final TextOperationAction fTextOperationAction;
|
||||
/** The wrapped text operation action. */
|
||||
private final TextOperationAction fTextOperationAction;
|
||||
|
||||
/**
|
||||
* Creates a dispatch action.
|
||||
*
|
||||
* @param resourceBundle the resource bundle
|
||||
* @param prefix the prefix
|
||||
* @param textOperationAction the text operation action
|
||||
*/
|
||||
public InformationDispatchAction(ResourceBundle resourceBundle, String prefix, final TextOperationAction textOperationAction) {
|
||||
super(resourceBundle, prefix, AutoconfEditor.this);
|
||||
if (textOperationAction == null)
|
||||
throw new IllegalArgumentException();
|
||||
fTextOperationAction= textOperationAction;
|
||||
}
|
||||
/**
|
||||
* Creates a dispatch action.
|
||||
*
|
||||
* @param resourceBundle the resource bundle
|
||||
* @param prefix the prefix
|
||||
* @param textOperationAction the text operation action
|
||||
*/
|
||||
public InformationDispatchAction(ResourceBundle resourceBundle, String prefix,
|
||||
final TextOperationAction textOperationAction) {
|
||||
super(resourceBundle, prefix, AutoconfEditor.this);
|
||||
if (textOperationAction == null)
|
||||
throw new IllegalArgumentException();
|
||||
fTextOperationAction = textOperationAction;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
ISourceViewer sourceViewer= getSourceViewer();
|
||||
if (sourceViewer == null) {
|
||||
fTextOperationAction.run();
|
||||
return;
|
||||
}
|
||||
ISourceViewer sourceViewer = getSourceViewer();
|
||||
if (sourceViewer == null) {
|
||||
fTextOperationAction.run();
|
||||
return;
|
||||
}
|
||||
|
||||
if (sourceViewer instanceof ITextViewerExtension4) {
|
||||
ITextViewerExtension4 extension4= (ITextViewerExtension4) sourceViewer;
|
||||
if (extension4.moveFocusToWidgetToken())
|
||||
return;
|
||||
}
|
||||
if (sourceViewer instanceof ITextViewerExtension4) {
|
||||
ITextViewerExtension4 extension4 = (ITextViewerExtension4) sourceViewer;
|
||||
if (extension4.moveFocusToWidgetToken())
|
||||
return;
|
||||
}
|
||||
|
||||
if (sourceViewer instanceof ITextViewerExtension2) {
|
||||
// does a text hover exist?
|
||||
ITextHover textHover= ((ITextViewerExtension2) sourceViewer).getCurrentTextHover();
|
||||
if (textHover != null && makeTextHoverFocusable(sourceViewer, textHover))
|
||||
return;
|
||||
}
|
||||
if (sourceViewer instanceof ITextViewerExtension2) {
|
||||
// does a text hover exist?
|
||||
ITextHover textHover = ((ITextViewerExtension2) sourceViewer).getCurrentTextHover();
|
||||
if (textHover != null && makeTextHoverFocusable(sourceViewer, textHover))
|
||||
return;
|
||||
}
|
||||
|
||||
if (sourceViewer instanceof ISourceViewerExtension3) {
|
||||
// does an annotation hover exist?
|
||||
IAnnotationHover annotationHover= ((ISourceViewerExtension3) sourceViewer).getCurrentAnnotationHover();
|
||||
if (annotationHover != null && makeAnnotationHoverFocusable(sourceViewer, annotationHover))
|
||||
return;
|
||||
}
|
||||
if (sourceViewer instanceof ISourceViewerExtension3) {
|
||||
// does an annotation hover exist?
|
||||
IAnnotationHover annotationHover = ((ISourceViewerExtension3) sourceViewer).getCurrentAnnotationHover();
|
||||
if (annotationHover != null && makeAnnotationHoverFocusable(sourceViewer, annotationHover))
|
||||
return;
|
||||
}
|
||||
|
||||
// otherwise, just display the tooltip
|
||||
//fTextOperationAction.run();
|
||||
}
|
||||
// otherwise, just display the tooltip
|
||||
//fTextOperationAction.run();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to make a text hover focusable (or "sticky").
|
||||
*
|
||||
* @param sourceViewer the source viewer to display the hover over
|
||||
* @param textHover the hover to make focusable
|
||||
* @return <code>true</code> if successful, <code>false</code> otherwise
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
/**
|
||||
* Tries to make a text hover focusable (or "sticky").
|
||||
*
|
||||
* @param sourceViewer the source viewer to display the hover over
|
||||
* @param textHover the hover to make focusable
|
||||
* @return <code>true</code> if successful, <code>false</code> otherwise
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
private boolean makeTextHoverFocusable(ISourceViewer sourceViewer, ITextHover textHover) {
|
||||
Point hoverEventLocation= ((ITextViewerExtension2) sourceViewer).getHoverEventLocation();
|
||||
int offset= computeOffsetAtLocation(sourceViewer, hoverEventLocation.x, hoverEventLocation.y);
|
||||
if (offset == -1)
|
||||
return false;
|
||||
Point hoverEventLocation = ((ITextViewerExtension2) sourceViewer).getHoverEventLocation();
|
||||
int offset = computeOffsetAtLocation(sourceViewer, hoverEventLocation.x, hoverEventLocation.y);
|
||||
if (offset == -1)
|
||||
return false;
|
||||
|
||||
try {
|
||||
IRegion hoverRegion= textHover.getHoverRegion(sourceViewer, offset);
|
||||
if (hoverRegion == null)
|
||||
return false;
|
||||
try {
|
||||
IRegion hoverRegion = textHover.getHoverRegion(sourceViewer, offset);
|
||||
if (hoverRegion == null)
|
||||
return false;
|
||||
|
||||
String hoverInfo= textHover.getHoverInfo(sourceViewer, hoverRegion);
|
||||
String hoverInfo = textHover.getHoverInfo(sourceViewer, hoverRegion);
|
||||
|
||||
IInformationControlCreator controlCreator= null;
|
||||
if (textHover instanceof IInformationProviderExtension2)
|
||||
controlCreator= ((IInformationProviderExtension2)textHover).getInformationPresenterControlCreator();
|
||||
IInformationControlCreator controlCreator = null;
|
||||
if (textHover instanceof IInformationProviderExtension2)
|
||||
controlCreator = ((IInformationProviderExtension2) textHover)
|
||||
.getInformationPresenterControlCreator();
|
||||
|
||||
IInformationProvider informationProvider= new InformationProvider(hoverRegion, hoverInfo, controlCreator);
|
||||
IInformationProvider informationProvider = new InformationProvider(hoverRegion, hoverInfo,
|
||||
controlCreator);
|
||||
|
||||
fInformationPresenter.setOffset(offset);
|
||||
fInformationPresenter.setAnchor(AbstractInformationControlManager.ANCHOR_BOTTOM);
|
||||
fInformationPresenter.setMargins(6, 6); // default values from AbstractInformationControlManager
|
||||
String contentType= TextUtilities.getContentType(sourceViewer.getDocument(), AutoconfPartitionScanner.AUTOCONF_MACRO, offset, true);
|
||||
fInformationPresenter.setInformationProvider(informationProvider, contentType);
|
||||
fInformationPresenter.showInformation();
|
||||
fInformationPresenter.setOffset(offset);
|
||||
fInformationPresenter.setAnchor(AbstractInformationControlManager.ANCHOR_BOTTOM);
|
||||
fInformationPresenter.setMargins(6, 6); // default values from AbstractInformationControlManager
|
||||
String contentType = TextUtilities.getContentType(sourceViewer.getDocument(),
|
||||
AutoconfPartitionScanner.AUTOCONF_MACRO, offset, true);
|
||||
fInformationPresenter.setInformationProvider(informationProvider, contentType);
|
||||
fInformationPresenter.showInformation();
|
||||
|
||||
return true;
|
||||
return true;
|
||||
|
||||
} catch (BadLocationException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} catch (BadLocationException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to make an annotation hover focusable (or "sticky").
|
||||
*
|
||||
* @param sourceViewer the source viewer to display the hover over
|
||||
* @param annotationHover the hover to make focusable
|
||||
* @return <code>true</code> if successful, <code>false</code> otherwise
|
||||
*/
|
||||
private boolean makeAnnotationHoverFocusable(ISourceViewer sourceViewer, IAnnotationHover annotationHover) {
|
||||
IVerticalRulerInfo info= getVerticalRuler();
|
||||
int line= info.getLineOfLastMouseButtonActivity();
|
||||
if (line == -1)
|
||||
return false;
|
||||
/**
|
||||
* Tries to make an annotation hover focusable (or "sticky").
|
||||
*
|
||||
* @param sourceViewer the source viewer to display the hover over
|
||||
* @param annotationHover the hover to make focusable
|
||||
* @return <code>true</code> if successful, <code>false</code> otherwise
|
||||
*/
|
||||
private boolean makeAnnotationHoverFocusable(ISourceViewer sourceViewer, IAnnotationHover annotationHover) {
|
||||
IVerticalRulerInfo info = getVerticalRuler();
|
||||
int line = info.getLineOfLastMouseButtonActivity();
|
||||
if (line == -1)
|
||||
return false;
|
||||
|
||||
try {
|
||||
try {
|
||||
|
||||
// compute the hover information
|
||||
Object hoverInfo;
|
||||
if (annotationHover instanceof IAnnotationHoverExtension) {
|
||||
IAnnotationHoverExtension extension= (IAnnotationHoverExtension) annotationHover;
|
||||
ILineRange hoverLineRange= extension.getHoverLineRange(sourceViewer, line);
|
||||
if (hoverLineRange == null)
|
||||
return false;
|
||||
final int maxVisibleLines= Integer.MAX_VALUE; // allow any number of lines being displayed, as we support scrolling
|
||||
hoverInfo= extension.getHoverInfo(sourceViewer, hoverLineRange, maxVisibleLines);
|
||||
} else {
|
||||
hoverInfo= annotationHover.getHoverInfo(sourceViewer, line);
|
||||
}
|
||||
// compute the hover information
|
||||
Object hoverInfo;
|
||||
if (annotationHover instanceof IAnnotationHoverExtension) {
|
||||
IAnnotationHoverExtension extension = (IAnnotationHoverExtension) annotationHover;
|
||||
ILineRange hoverLineRange = extension.getHoverLineRange(sourceViewer, line);
|
||||
if (hoverLineRange == null)
|
||||
return false;
|
||||
final int maxVisibleLines = Integer.MAX_VALUE; // allow any number of lines being displayed, as we support scrolling
|
||||
hoverInfo = extension.getHoverInfo(sourceViewer, hoverLineRange, maxVisibleLines);
|
||||
} else {
|
||||
hoverInfo = annotationHover.getHoverInfo(sourceViewer, line);
|
||||
}
|
||||
|
||||
// hover region: the beginning of the concerned line to place the control right over the line
|
||||
IDocument document= sourceViewer.getDocument();
|
||||
int offset= document.getLineOffset(line);
|
||||
String contentType= TextUtilities.getContentType(document, AutoconfPartitionScanner.AUTOCONF_MACRO, offset, true);
|
||||
// hover region: the beginning of the concerned line to place the control right over the line
|
||||
IDocument document = sourceViewer.getDocument();
|
||||
int offset = document.getLineOffset(line);
|
||||
String contentType = TextUtilities.getContentType(document, AutoconfPartitionScanner.AUTOCONF_MACRO,
|
||||
offset, true);
|
||||
|
||||
IInformationControlCreator controlCreator= null;
|
||||
IInformationControlCreator controlCreator = null;
|
||||
|
||||
// /*
|
||||
// * XXX: This is a hack to avoid API changes at the end of 3.2,
|
||||
// * and should be fixed for 3.3, see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=137967
|
||||
// */
|
||||
// if ("org.eclipse.jface.text.source.projection.ProjectionAnnotationHover".equals(annotationHover.getClass().getName())) { //$NON-NLS-1$
|
||||
// controlCreator= new IInformationControlCreator() {
|
||||
// public IInformationControl createInformationControl(Shell shell) {
|
||||
// int shellStyle= SWT.RESIZE | SWT.TOOL | getOrientation();
|
||||
// int style= SWT.V_SCROLL | SWT.H_SCROLL;
|
||||
// return new SourceViewerInformationControl(shell, shellStyle, style);
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// } else {
|
||||
if (annotationHover instanceof IInformationProviderExtension2)
|
||||
controlCreator= ((IInformationProviderExtension2) annotationHover).getInformationPresenterControlCreator();
|
||||
else if (annotationHover instanceof IAnnotationHoverExtension)
|
||||
controlCreator= ((IAnnotationHoverExtension) annotationHover).getHoverControlCreator();
|
||||
// }
|
||||
// /*
|
||||
// * XXX: This is a hack to avoid API changes at the end of 3.2,
|
||||
// * and should be fixed for 3.3, see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=137967
|
||||
// */
|
||||
// if ("org.eclipse.jface.text.source.projection.ProjectionAnnotationHover".equals(annotationHover.getClass().getName())) { //$NON-NLS-1$
|
||||
// controlCreator= new IInformationControlCreator() {
|
||||
// public IInformationControl createInformationControl(Shell shell) {
|
||||
// int shellStyle= SWT.RESIZE | SWT.TOOL | getOrientation();
|
||||
// int style= SWT.V_SCROLL | SWT.H_SCROLL;
|
||||
// return new SourceViewerInformationControl(shell, shellStyle, style);
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// } else {
|
||||
if (annotationHover instanceof IInformationProviderExtension2)
|
||||
controlCreator = ((IInformationProviderExtension2) annotationHover)
|
||||
.getInformationPresenterControlCreator();
|
||||
else if (annotationHover instanceof IAnnotationHoverExtension)
|
||||
controlCreator = ((IAnnotationHoverExtension) annotationHover).getHoverControlCreator();
|
||||
// }
|
||||
|
||||
IInformationProvider informationProvider= new InformationProvider(new Region(offset, 0), hoverInfo, controlCreator);
|
||||
IInformationProvider informationProvider = new InformationProvider(new Region(offset, 0), hoverInfo,
|
||||
controlCreator);
|
||||
|
||||
fInformationPresenter.setOffset(offset);
|
||||
fInformationPresenter.setAnchor(AbstractInformationControlManager.ANCHOR_RIGHT);
|
||||
fInformationPresenter.setMargins(4, 0); // AnnotationBarHoverManager sets (5,0), minus SourceViewer.GAP_SIZE_1
|
||||
fInformationPresenter.setInformationProvider(informationProvider, contentType);
|
||||
fInformationPresenter.showInformation();
|
||||
fInformationPresenter.setOffset(offset);
|
||||
fInformationPresenter.setAnchor(AbstractInformationControlManager.ANCHOR_RIGHT);
|
||||
fInformationPresenter.setMargins(4, 0); // AnnotationBarHoverManager sets (5,0), minus SourceViewer.GAP_SIZE_1
|
||||
fInformationPresenter.setInformationProvider(informationProvider, contentType);
|
||||
fInformationPresenter.showInformation();
|
||||
|
||||
return true;
|
||||
return true;
|
||||
|
||||
} catch (BadLocationException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} catch (BadLocationException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// modified version from TextViewer
|
||||
private int computeOffsetAtLocation(ITextViewer textViewer, int x, int y) {
|
||||
// modified version from TextViewer
|
||||
private int computeOffsetAtLocation(ITextViewer textViewer, int x, int y) {
|
||||
|
||||
StyledText styledText= textViewer.getTextWidget();
|
||||
IDocument document= textViewer.getDocument();
|
||||
StyledText styledText = textViewer.getTextWidget();
|
||||
IDocument document = textViewer.getDocument();
|
||||
|
||||
if (document == null)
|
||||
return -1;
|
||||
if (document == null)
|
||||
return -1;
|
||||
|
||||
try {
|
||||
int widgetOffset= styledText.getOffsetAtLocation(new Point(x, y));
|
||||
Point p= styledText.getLocationAtOffset(widgetOffset);
|
||||
if (p.x > x)
|
||||
widgetOffset--;
|
||||
try {
|
||||
int widgetOffset = styledText.getOffsetAtLocation(new Point(x, y));
|
||||
Point p = styledText.getLocationAtOffset(widgetOffset);
|
||||
if (p.x > x)
|
||||
widgetOffset--;
|
||||
|
||||
if (textViewer instanceof ITextViewerExtension5) {
|
||||
ITextViewerExtension5 extension= (ITextViewerExtension5) textViewer;
|
||||
return extension.widgetOffset2ModelOffset(widgetOffset);
|
||||
} else {
|
||||
IRegion visibleRegion= textViewer.getVisibleRegion();
|
||||
return widgetOffset + visibleRegion.getOffset();
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
return -1;
|
||||
}
|
||||
if (textViewer instanceof ITextViewerExtension5) {
|
||||
ITextViewerExtension5 extension = (ITextViewerExtension5) textViewer;
|
||||
return extension.widgetOffset2ModelOffset(widgetOffset);
|
||||
} else {
|
||||
IRegion visibleRegion = textViewer.getVisibleRegion();
|
||||
return widgetOffset + visibleRegion.getOffset();
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the given listener.
|
||||
|
@ -608,108 +611,111 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines is folding enabled.
|
||||
* @return <code>true</code> if folding is enabled, <code>false</code> otherwise.
|
||||
*/
|
||||
/**
|
||||
* Determines is folding enabled.
|
||||
* @return <code>true</code> if folding is enabled, <code>false</code> otherwise.
|
||||
*/
|
||||
boolean isFoldingEnabled() {
|
||||
return AutotoolsPlugin.getDefault().getPreferenceStore().getBoolean(MakefileEditorPreferenceConstants.EDITOR_FOLDING_ENABLED);
|
||||
return AutotoolsPlugin.getDefault().getPreferenceStore()
|
||||
.getBoolean(MakefileEditorPreferenceConstants.EDITOR_FOLDING_ENABLED);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initializeKeyBindingScopes() {
|
||||
setKeyBindingScopes(new String [] { AutotoolsUIPlugin.getUniqueIdentifier() + ".editor.scope" } ); //$NON-NLS-1$
|
||||
setKeyBindingScopes(new String[] { AutotoolsUIPlugin.getUniqueIdentifier() + ".editor.scope" }); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Override
|
||||
protected void createActions() {
|
||||
super.createActions();
|
||||
// TODO: Figure out how to do this later.
|
||||
// fFoldingGroup= new FoldingActionGroup(this, getSourceViewer());
|
||||
super.createActions();
|
||||
// TODO: Figure out how to do this later.
|
||||
// fFoldingGroup= new FoldingActionGroup(this, getSourceViewer());
|
||||
|
||||
// Sticky hover support
|
||||
ResourceAction resAction= new TextOperationAction(AutoconfEditorMessages.getResourceBundle(), "ShowToolTip.", this, ISourceViewer.INFORMATION, true); //$NON-NLS-1$
|
||||
resAction= new InformationDispatchAction(AutoconfEditorMessages.getResourceBundle(), "ShowToolTip.", (TextOperationAction) resAction); //$NON-NLS-1$
|
||||
resAction.setActionDefinitionId(IAutotoolEditorActionDefinitionIds.SHOW_TOOLTIP);
|
||||
setAction("ShowToolTip", resAction); //$NON-NLS-1$
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(resAction, IAutotoolHelpContextIds.SHOW_TOOLTIP_ACTION);
|
||||
// Sticky hover support
|
||||
ResourceAction resAction = new TextOperationAction(AutoconfEditorMessages.getResourceBundle(), "ShowToolTip.", //$NON-NLS-1$
|
||||
this, ISourceViewer.INFORMATION, true);
|
||||
resAction = new InformationDispatchAction(AutoconfEditorMessages.getResourceBundle(), "ShowToolTip.", //$NON-NLS-1$
|
||||
(TextOperationAction) resAction);
|
||||
resAction.setActionDefinitionId(IAutotoolEditorActionDefinitionIds.SHOW_TOOLTIP);
|
||||
setAction("ShowToolTip", resAction); //$NON-NLS-1$
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(resAction, IAutotoolHelpContextIds.SHOW_TOOLTIP_ACTION);
|
||||
|
||||
// Content assist
|
||||
Action action = new ContentAssistAction(AutoconfEditorMessages.getResourceBundle(), "ContentAssistProposal.", this); //$NON-NLS-1$
|
||||
// Content assist
|
||||
Action action = new ContentAssistAction(AutoconfEditorMessages.getResourceBundle(), "ContentAssistProposal.", //$NON-NLS-1$
|
||||
this);
|
||||
action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
|
||||
setAction("ContentAssistProposal", action); //$NON-NLS-1$
|
||||
markAsStateDependentAction("ContentAssistProposal", true); //$NON-NLS-1$
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(action, IAutotoolHelpContextIds.CONTENT_ASSIST);
|
||||
}
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(action, IAutotoolHelpContextIds.CONTENT_ASSIST);
|
||||
}
|
||||
|
||||
/**
|
||||
* The <code>AbstractTextEditor</code> implementation of this
|
||||
* <code>IWorkbenchPart</code> method creates the vertical ruler and
|
||||
* source viewer. Subclasses may extend.
|
||||
*
|
||||
* We attach our own mouseDown listener on the menu bar,
|
||||
* and our own listener for cursor/key/selection events to update cursor position in
|
||||
* status bar.
|
||||
/**
|
||||
* The <code>AbstractTextEditor</code> implementation of this
|
||||
* <code>IWorkbenchPart</code> method creates the vertical ruler and
|
||||
* source viewer. Subclasses may extend.
|
||||
*
|
||||
* We attach our own mouseDown listener on the menu bar,
|
||||
* and our own listener for cursor/key/selection events to update cursor position in
|
||||
* status bar.
|
||||
|
||||
* @param parent Parent composite of the control.
|
||||
*/
|
||||
@Override
|
||||
* @param parent Parent composite of the control.
|
||||
*/
|
||||
@Override
|
||||
public void createPartControl(Composite parent) {
|
||||
super.createPartControl(parent);
|
||||
super.createPartControl(parent);
|
||||
|
||||
// Sticky hover support
|
||||
IInformationControlCreator informationControlCreator= new IInformationControlCreator() {
|
||||
@Override
|
||||
// Sticky hover support
|
||||
IInformationControlCreator informationControlCreator = new IInformationControlCreator() {
|
||||
@Override
|
||||
public IInformationControl createInformationControl(Shell shell) {
|
||||
return new DefaultInformationControl(shell, true);
|
||||
}
|
||||
};
|
||||
return new DefaultInformationControl(shell, true);
|
||||
}
|
||||
};
|
||||
|
||||
fInformationPresenter= new InformationPresenter(informationControlCreator);
|
||||
fInformationPresenter.setSizeConstraints(60, 10, true, true);
|
||||
fInformationPresenter.install(getSourceViewer());
|
||||
fInformationPresenter.setDocumentPartitioning(AutoconfPartitionScanner.AUTOCONF_MACRO);
|
||||
fInformationPresenter = new InformationPresenter(informationControlCreator);
|
||||
fInformationPresenter.setSizeConstraints(60, 10, true, true);
|
||||
fInformationPresenter.install(getSourceViewer());
|
||||
fInformationPresenter.setDocumentPartitioning(AutoconfPartitionScanner.AUTOCONF_MACRO);
|
||||
|
||||
ProjectionViewer projectionViewer= (ProjectionViewer) getSourceViewer();
|
||||
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
|
||||
|
||||
fProjectionSupport= new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
|
||||
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
|
||||
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
|
||||
fProjectionSupport.install();
|
||||
fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
|
||||
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
|
||||
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
|
||||
fProjectionSupport.install();
|
||||
|
||||
if (isFoldingEnabled())
|
||||
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
|
||||
if (isFoldingEnabled())
|
||||
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
|
||||
|
||||
fProjectionFileUpdater= new ProjectionFileUpdater();
|
||||
fProjectionFileUpdater = new ProjectionFileUpdater();
|
||||
if (fProjectionFileUpdater != null) {
|
||||
fProjectionFileUpdater.install(this, projectionViewer);
|
||||
fProjectionFileUpdater.initialize();
|
||||
}
|
||||
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IAutotoolHelpContextIds.AC_EDITOR_VIEW);
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IAutotoolHelpContextIds.AC_EDITOR_VIEW);
|
||||
|
||||
// TODO: Do we need the following two lines?
|
||||
// fEditorSelectionChangedListener= new EditorSelectionChangedListener();
|
||||
// fEditorSelectionChangedListener.install(getSelectionProvider());
|
||||
}
|
||||
// TODO: Do we need the following two lines?
|
||||
// fEditorSelectionChangedListener= new EditorSelectionChangedListener();
|
||||
// fEditorSelectionChangedListener.install(getSelectionProvider());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
|
||||
ISourceViewer viewer = new ProjectionViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(), styles);
|
||||
ISourceViewer viewer = new ProjectionViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(),
|
||||
styles);
|
||||
|
||||
// ensure decoration support has been created and configured.
|
||||
getSourceViewerDecorationSupport(viewer);
|
||||
|
||||
return viewer;
|
||||
}
|
||||
// ensure decoration support has been created and configured.
|
||||
getSourceViewerDecorationSupport(viewer);
|
||||
|
||||
return viewer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (fProjectionFileUpdater != null) {
|
||||
fProjectionFileUpdater.uninstall();
|
||||
fProjectionFileUpdater= null;
|
||||
fProjectionFileUpdater = null;
|
||||
}
|
||||
if (fProject != null) {
|
||||
AutotoolsPropertyManager.getDefault().removeProjectPropertyListener(fProject, this);
|
||||
|
@ -719,11 +725,11 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
|
||||
@Override
|
||||
protected void performRevert() {
|
||||
ProjectionViewer projectionViewer= (ProjectionViewer) getSourceViewer();
|
||||
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
|
||||
projectionViewer.setRedraw(false);
|
||||
try {
|
||||
|
||||
boolean projectionMode= projectionViewer.isProjectionMode();
|
||||
boolean projectionMode = projectionViewer.isProjectionMode();
|
||||
if (projectionMode) {
|
||||
projectionViewer.disableProjection();
|
||||
if (fProjectionFileUpdater != null)
|
||||
|
@ -743,7 +749,7 @@ public class AutoconfEditor extends TextEditor implements IAutotoolsEditor, IPro
|
|||
}
|
||||
}
|
||||
|
||||
public IProject getProject() {
|
||||
public IProject getProject() {
|
||||
return this.fProject;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,6 @@ import org.eclipse.core.resources.IProject;
|
|||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.jface.text.BadLocationException;
|
||||
|
||||
|
||||
/**
|
||||
* Validate a macro call by checking against the stored macro prototypes
|
||||
*/
|
||||
|
@ -44,8 +43,7 @@ public class AutoconfEditorMacroValidator implements IAutoconfMacroValidator {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void validateMacroCall(AutoconfMacroElement macro)
|
||||
throws ParseException, InvalidMacroException {
|
||||
public void validateMacroCall(AutoconfMacroElement macro) throws ParseException, InvalidMacroException {
|
||||
AutoconfPrototype p = AutoconfTextHover.getPrototype(macro.getName(), fEditor);
|
||||
if (p != null) {
|
||||
boolean tooFew = false;
|
||||
|
@ -81,22 +79,16 @@ public class AutoconfEditorMacroValidator implements IAutoconfMacroValidator {
|
|||
if (!justRight) {
|
||||
if (tooFew) {
|
||||
String formatString = AutoconfEditorMessages.getFormattedString(AUTOCONF_MACRO_ARGS_TOO_FEW,
|
||||
AutotoolsPlugin.getDefault().getPreferenceStore().getString(AutotoolsEditorPreferenceConstants.AUTOCONF_VERSION),
|
||||
AutotoolsPlugin.getDefault().getPreferenceStore()
|
||||
.getString(AutotoolsEditorPreferenceConstants.AUTOCONF_VERSION),
|
||||
p.getName(), Integer.toString(minParms));
|
||||
throw new ParseException(
|
||||
formatString,
|
||||
start, end,
|
||||
lineNumber, 0, length,
|
||||
IMarker.SEVERITY_WARNING);
|
||||
throw new ParseException(formatString, start, end, lineNumber, 0, length, IMarker.SEVERITY_WARNING);
|
||||
} else if (tooMany) {
|
||||
String formatString = AutoconfEditorMessages.getFormattedString(AUTOCONF_MACRO_ARGS_TOO_MANY,
|
||||
AutotoolsPlugin.getDefault().getPreferenceStore().getString(AutotoolsEditorPreferenceConstants.AUTOCONF_VERSION),
|
||||
AutotoolsPlugin.getDefault().getPreferenceStore()
|
||||
.getString(AutotoolsEditorPreferenceConstants.AUTOCONF_VERSION),
|
||||
p.getName(), Integer.toString(maxParms));
|
||||
throw new ParseException(
|
||||
formatString,
|
||||
start, end,
|
||||
lineNumber, 0, length,
|
||||
IMarker.SEVERITY_WARNING);
|
||||
throw new ParseException(formatString, start, end, lineNumber, 0, length, IMarker.SEVERITY_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,15 +18,14 @@ import java.text.MessageFormat;
|
|||
import java.util.MissingResourceException;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
|
||||
/**
|
||||
* AutoconfEditorMessages
|
||||
*/
|
||||
public class AutoconfEditorMessages {
|
||||
|
||||
private static final String RESOURCE_BUNDLE= AutoconfEditorMessages.class.getName();
|
||||
private static final String RESOURCE_BUNDLE = AutoconfEditorMessages.class.getName();
|
||||
|
||||
private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
|
||||
private static ResourceBundle fgResourceBundle = ResourceBundle.getBundle(RESOURCE_BUNDLE);
|
||||
|
||||
private AutoconfEditorMessages() {
|
||||
}
|
||||
|
@ -42,6 +41,7 @@ public class AutoconfEditorMessages {
|
|||
return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a string from the resource bundle and formats it with the argument
|
||||
*
|
||||
|
@ -49,16 +49,17 @@ public class AutoconfEditorMessages {
|
|||
* @since 3.0
|
||||
*/
|
||||
public static String getFormattedString(String key, Object arg) {
|
||||
String format= null;
|
||||
String format = null;
|
||||
try {
|
||||
format= fgResourceBundle.getString(key);
|
||||
format = fgResourceBundle.getString(key);
|
||||
} catch (MissingResourceException e) {
|
||||
return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
|
||||
}
|
||||
if (arg == null)
|
||||
arg= ""; //$NON-NLS-1$
|
||||
arg = ""; //$NON-NLS-1$
|
||||
return MessageFormat.format(format, new Object[] { arg });
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a string from the resource bundle and formats it with the arguments
|
||||
*
|
||||
|
@ -66,16 +67,16 @@ public class AutoconfEditorMessages {
|
|||
* @since 3.0
|
||||
*/
|
||||
public static String getFormattedString(String key, Object arg1, Object arg2) {
|
||||
String format= null;
|
||||
String format = null;
|
||||
try {
|
||||
format= fgResourceBundle.getString(key);
|
||||
format = fgResourceBundle.getString(key);
|
||||
} catch (MissingResourceException e) {
|
||||
return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
|
||||
}
|
||||
if (arg1 == null)
|
||||
arg1= ""; //$NON-NLS-1$
|
||||
arg1 = ""; //$NON-NLS-1$
|
||||
if (arg2 == null)
|
||||
arg2= ""; //$NON-NLS-1$
|
||||
arg2 = ""; //$NON-NLS-1$
|
||||
return MessageFormat.format(format, new Object[] { arg1, arg2 });
|
||||
}
|
||||
|
||||
|
@ -86,18 +87,18 @@ public class AutoconfEditorMessages {
|
|||
* @since 3.0
|
||||
*/
|
||||
public static String getFormattedString(String key, Object arg1, Object arg2, Object arg3) {
|
||||
String format= null;
|
||||
String format = null;
|
||||
try {
|
||||
format= fgResourceBundle.getString(key);
|
||||
format = fgResourceBundle.getString(key);
|
||||
} catch (MissingResourceException e) {
|
||||
return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
|
||||
}
|
||||
if (arg1 == null)
|
||||
arg1= ""; //$NON-NLS-1$
|
||||
arg1 = ""; //$NON-NLS-1$
|
||||
if (arg2 == null)
|
||||
arg2= ""; //$NON-NLS-1$
|
||||
arg2 = ""; //$NON-NLS-1$
|
||||
if (arg3 == null)
|
||||
arg3= ""; //$NON-NLS-1$
|
||||
arg3 = ""; //$NON-NLS-1$
|
||||
return MessageFormat.format(format, new Object[] { arg1, arg2, arg3 });
|
||||
}
|
||||
|
||||
|
@ -108,9 +109,9 @@ public class AutoconfEditorMessages {
|
|||
* @since 3.0
|
||||
*/
|
||||
public static String getFormattedString(String key, boolean arg) {
|
||||
String format= null;
|
||||
String format = null;
|
||||
try {
|
||||
format= fgResourceBundle.getString(key);
|
||||
format = fgResourceBundle.getString(key);
|
||||
} catch (MissingResourceException e) {
|
||||
return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ import org.eclipse.jface.text.source.Annotation;
|
|||
import org.eclipse.jface.text.source.AnnotationModel;
|
||||
import org.eclipse.ui.IEditorInput;
|
||||
|
||||
|
||||
public class AutoconfErrorHandler implements IAutoconfErrorHandler {
|
||||
|
||||
public static final String CDT_ANNOTATION_INFO = "org.eclipse.cdt.ui.info"; //$NON-NLS-1$
|
||||
|
@ -40,7 +39,8 @@ public class AutoconfErrorHandler implements IAutoconfErrorHandler {
|
|||
private AnnotationModel fAnnotationModel;
|
||||
|
||||
public AutoconfErrorHandler(IEditorInput input) {
|
||||
this.fAnnotationModel = (AnnotationModel)AutoconfEditor.getAutoconfDocumentProvider().getAnnotationModel(input);
|
||||
this.fAnnotationModel = (AnnotationModel) AutoconfEditor.getAutoconfDocumentProvider()
|
||||
.getAnnotationModel(input);
|
||||
}
|
||||
|
||||
// TODO: no quickfixes yet implemented, but maybe in the future
|
||||
|
@ -77,19 +77,17 @@ public class AutoconfErrorHandler implements IAutoconfErrorHandler {
|
|||
else if (e.getSeverity() == CDT_WARNING)
|
||||
annotationType = CDT_ANNOTATION_WARNING;
|
||||
Annotation annotation = new AutoconfAnnotation(annotationType, true, e.getLocalizedMessage());
|
||||
Position p = new Position(charStart.intValue(),charEnd.intValue() - charStart.intValue());
|
||||
Position p = new Position(charStart.intValue(), charEnd.intValue() - charStart.intValue());
|
||||
fAnnotationModel.addAnnotation(annotation, p);
|
||||
annotations.put(p, annotation);
|
||||
}
|
||||
|
||||
public void removeAllExistingMarkers()
|
||||
{
|
||||
public void removeAllExistingMarkers() {
|
||||
fAnnotationModel.removeAllAnnotations();
|
||||
annotations.clear();
|
||||
}
|
||||
|
||||
public void removeExistingMarkers(int offset, int length)
|
||||
{
|
||||
public void removeExistingMarkers(int offset, int length) {
|
||||
Iterator<Annotation> i = fAnnotationModel.getAnnotationIterator();
|
||||
while (i.hasNext()) {
|
||||
Annotation annotation = i.next();
|
||||
|
|
|
@ -42,10 +42,10 @@ public class AutoconfIdentifierRule implements IPredicateRule {
|
|||
@Override
|
||||
public IToken evaluate(ICharacterScanner scanner, boolean resume) {
|
||||
int c = scanner.read();
|
||||
if (Character.isLetterOrDigit((char)c) || fExtraChars.indexOf((char)c) >= 0) {
|
||||
if (Character.isLetterOrDigit((char) c) || fExtraChars.indexOf((char) c) >= 0) {
|
||||
do {
|
||||
c = scanner.read();
|
||||
} while (Character.isLetterOrDigit((char)c) || fExtraChars.indexOf((char)c) >= 0);
|
||||
} while (Character.isLetterOrDigit((char) c) || fExtraChars.indexOf((char) c) >= 0);
|
||||
scanner.unread();
|
||||
return fToken;
|
||||
}
|
||||
|
|
|
@ -28,4 +28,3 @@ public class AutoconfKeywordDetector implements IWordDetector {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ public class AutoconfMacro implements Comparable<Object> {
|
|||
public boolean equals(Object x) {
|
||||
if (x == null)
|
||||
return false;
|
||||
AutoconfMacro y = (AutoconfMacro)x;
|
||||
AutoconfMacro y = (AutoconfMacro) x;
|
||||
return getName().equals(y.getName());
|
||||
}
|
||||
|
||||
|
|
|
@ -36,10 +36,9 @@ import org.eclipse.swt.SWT;
|
|||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.RGB;
|
||||
|
||||
|
||||
public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
||||
|
||||
private Map<String, IToken> fTokenMap= new HashMap<>();
|
||||
private Map<String, IToken> fTokenMap = new HashMap<>();
|
||||
private String[] fPropertyNamesColor;
|
||||
|
||||
private int quoteLevel;
|
||||
|
@ -55,37 +54,31 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
*/
|
||||
private String[] fPropertyNamesItalic;
|
||||
|
||||
private static String[] keywords = {
|
||||
"case", "do", "done", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"esac", "if", "elif", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"else", "fi", "for", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"in", "then" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
private static String[] keywords = { "case", "do", "done", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"esac", "if", "elif", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"else", "fi", "for", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"in", "then" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
static final String[] fTokenProperties = new String[] {
|
||||
ColorManager.AUTOCONF_COMMENT_COLOR,
|
||||
ColorManager.AUTOCONF_KEYWORD_COLOR,
|
||||
ColorManager.AUTOCONF_ACMACRO_COLOR,
|
||||
ColorManager.AUTOCONF_AMMACRO_COLOR,
|
||||
ColorManager.AUTOCONF_VAR_REF_COLOR,
|
||||
ColorManager.AUTOCONF_VAR_SET_COLOR,
|
||||
ColorManager.AUTOCONF_CODESEQ_COLOR,
|
||||
ColorManager.AUTOCONF_DEFAULT_COLOR,
|
||||
};
|
||||
static final String[] fTokenProperties = new String[] { ColorManager.AUTOCONF_COMMENT_COLOR,
|
||||
ColorManager.AUTOCONF_KEYWORD_COLOR, ColorManager.AUTOCONF_ACMACRO_COLOR,
|
||||
ColorManager.AUTOCONF_AMMACRO_COLOR, ColorManager.AUTOCONF_VAR_REF_COLOR,
|
||||
ColorManager.AUTOCONF_VAR_SET_COLOR, ColorManager.AUTOCONF_CODESEQ_COLOR,
|
||||
ColorManager.AUTOCONF_DEFAULT_COLOR, };
|
||||
|
||||
public AutoconfMacroCodeScanner() {
|
||||
|
||||
initialize();
|
||||
|
||||
IToken other= getToken(ColorManager.AUTOCONF_DEFAULT_COLOR);
|
||||
IToken other = getToken(ColorManager.AUTOCONF_DEFAULT_COLOR);
|
||||
IToken keyword = getToken(ColorManager.AUTOCONF_KEYWORD_COLOR);
|
||||
IToken comment= getToken(ColorManager.AUTOCONF_COMMENT_COLOR);
|
||||
IToken comment = getToken(ColorManager.AUTOCONF_COMMENT_COLOR);
|
||||
IToken string = getToken(ColorManager.AUTOCONF_DEFAULT_COLOR);
|
||||
IToken varRef = getToken(ColorManager.AUTOCONF_VAR_REF_COLOR);
|
||||
IToken acmacro = getToken(ColorManager.AUTOCONF_ACMACRO_COLOR);
|
||||
IToken ammacro = getToken(ColorManager.AUTOCONF_AMMACRO_COLOR);
|
||||
IToken code = getToken(ColorManager.AUTOCONF_CODESEQ_COLOR);
|
||||
|
||||
List<IRule> rules= new ArrayList<>();
|
||||
List<IRule> rules = new ArrayList<>();
|
||||
|
||||
// Add rule for single line comments.
|
||||
rules.add(new RestrictedEndOfLineRule("dnl", "[]", comment)); //$NON-NLS-1$
|
||||
|
@ -93,8 +86,7 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
|
||||
// Add special recursive rule for strings which allows variable
|
||||
// references to be internally tokenized.
|
||||
RecursiveSingleLineRule stringRule =
|
||||
new RecursiveSingleLineRule("\"", "\"", string, '\\'); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
RecursiveSingleLineRule stringRule = new RecursiveSingleLineRule("\"", "\"", string, '\\'); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
stringRule.addRule(new SingleLineRule("${", "}", varRef)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
rules.add(stringRule);
|
||||
|
||||
|
@ -116,8 +108,8 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
rules.add(new InlineDataRule(code));
|
||||
|
||||
// Add word rule for keywords.
|
||||
WordRule wordRule= new WordRule(new AutoconfWordDetector(), other);
|
||||
for (int i= 0; i < keywords.length; i++)
|
||||
WordRule wordRule = new WordRule(new AutoconfWordDetector(), other);
|
||||
for (int i = 0; i < keywords.length; i++)
|
||||
wordRule.addWord(keywords[i], keyword);
|
||||
rules.add(wordRule);
|
||||
|
||||
|
@ -129,7 +121,7 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
|
||||
rules.add(new WhitespaceRule(new AutoconfWhitespaceDetector()));
|
||||
|
||||
IRule[] result= new IRule[rules.size()];
|
||||
IRule[] result = new IRule[rules.size()];
|
||||
rules.toArray(result);
|
||||
setRules(result);
|
||||
}
|
||||
|
@ -162,9 +154,10 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
|
||||
private int indexOf(String property) {
|
||||
if (property != null) {
|
||||
int length= fPropertyNamesColor.length;
|
||||
for (int i= 0; i < length; i++) {
|
||||
if (property.equals(fPropertyNamesColor[i]) || property.equals(fPropertyNamesBold[i]) || property.equals(fPropertyNamesItalic[i]))
|
||||
int length = fPropertyNamesColor.length;
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (property.equals(fPropertyNamesColor[i]) || property.equals(fPropertyNamesBold[i])
|
||||
|| property.equals(fPropertyNamesItalic[i]))
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
@ -192,9 +185,9 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
}
|
||||
|
||||
public void adaptToPreferenceChange(PropertyChangeEvent event) {
|
||||
String p= event.getProperty();
|
||||
int index= indexOf(p);
|
||||
Token token= getToken(fPropertyNamesColor[index]);
|
||||
String p = event.getProperty();
|
||||
int index = indexOf(p);
|
||||
Token token = getToken(fPropertyNamesColor[index]);
|
||||
if (fPropertyNamesColor[index].equals(p))
|
||||
adaptToColorChange(event, token);
|
||||
else if (fPropertyNamesBold[index].equals(p))
|
||||
|
@ -204,46 +197,48 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
}
|
||||
|
||||
protected void adaptToColorChange(PropertyChangeEvent event, Token token) {
|
||||
RGB rgb= null;
|
||||
Object value= event.getNewValue();
|
||||
RGB rgb = null;
|
||||
Object value = event.getNewValue();
|
||||
if (value instanceof RGB) {
|
||||
rgb= (RGB) value;
|
||||
rgb = (RGB) value;
|
||||
} else if (value instanceof String) {
|
||||
rgb= StringConverter.asRGB((String) value);
|
||||
rgb = StringConverter.asRGB((String) value);
|
||||
}
|
||||
|
||||
if (rgb != null) {
|
||||
TextAttribute attr= (TextAttribute) token.getData();
|
||||
token.setData(new TextAttribute(ColorManager.getDefault().getColor(rgb), attr.getBackground(), attr.getStyle()));
|
||||
TextAttribute attr = (TextAttribute) token.getData();
|
||||
token.setData(
|
||||
new TextAttribute(ColorManager.getDefault().getColor(rgb), attr.getBackground(), attr.getStyle()));
|
||||
}
|
||||
}
|
||||
|
||||
protected void adaptToStyleChange(PropertyChangeEvent event, Token token, int styleAttribute) {
|
||||
if (token == null) {
|
||||
if (token == null) {
|
||||
return;
|
||||
}
|
||||
boolean eventValue= false;
|
||||
Object value= event.getNewValue();
|
||||
boolean eventValue = false;
|
||||
Object value = event.getNewValue();
|
||||
if (value instanceof Boolean) {
|
||||
eventValue= ((Boolean) value).booleanValue();
|
||||
eventValue = ((Boolean) value).booleanValue();
|
||||
} else if (IPreferenceStore.TRUE.equals(value)) {
|
||||
eventValue= true;
|
||||
eventValue = true;
|
||||
}
|
||||
|
||||
TextAttribute attr= (TextAttribute) token.getData();
|
||||
boolean activeValue= (attr.getStyle() & styleAttribute) == styleAttribute;
|
||||
TextAttribute attr = (TextAttribute) token.getData();
|
||||
boolean activeValue = (attr.getStyle() & styleAttribute) == styleAttribute;
|
||||
if (activeValue != eventValue) {
|
||||
token.setData(new TextAttribute(attr.getForeground(), attr.getBackground(), eventValue ? attr.getStyle() | styleAttribute : attr.getStyle() & ~styleAttribute));
|
||||
token.setData(new TextAttribute(attr.getForeground(), attr.getBackground(),
|
||||
eventValue ? attr.getStyle() | styleAttribute : attr.getStyle() & ~styleAttribute));
|
||||
}
|
||||
}
|
||||
|
||||
protected TextAttribute createTextAttribute(String colorID, String boldKey, String italicKey) {
|
||||
Color color= null;
|
||||
Color color = null;
|
||||
if (colorID != null) {
|
||||
color= AutoconfEditor.getPreferenceColor(colorID);
|
||||
color = AutoconfEditor.getPreferenceColor(colorID);
|
||||
}
|
||||
IPreferenceStore store= AutotoolsPlugin.getDefault().getPreferenceStore();
|
||||
int style= store.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
|
||||
IPreferenceStore store = AutotoolsPlugin.getDefault().getPreferenceStore();
|
||||
int style = store.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
|
||||
if (store.getBoolean(italicKey)) {
|
||||
style |= SWT.ITALIC;
|
||||
}
|
||||
|
@ -256,21 +251,21 @@ public class AutoconfMacroCodeScanner extends RuleBasedScanner {
|
|||
public final void initialize() {
|
||||
|
||||
resetQuoteLevel();
|
||||
fPropertyNamesColor= getTokenProperties();
|
||||
int length= fPropertyNamesColor.length;
|
||||
fPropertyNamesBold= new String[length];
|
||||
fPropertyNamesItalic= new String[length];
|
||||
fPropertyNamesColor = getTokenProperties();
|
||||
int length = fPropertyNamesColor.length;
|
||||
fPropertyNamesBold = new String[length];
|
||||
fPropertyNamesItalic = new String[length];
|
||||
|
||||
for (int i= 0; i < length; i++) {
|
||||
fPropertyNamesBold[i]= fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_BOLD_SUFFIX;
|
||||
fPropertyNamesItalic[i]= fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_ITALIC_SUFFIX;
|
||||
for (int i = 0; i < length; i++) {
|
||||
fPropertyNamesBold[i] = fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_BOLD_SUFFIX;
|
||||
fPropertyNamesItalic[i] = fPropertyNamesColor[i] + AutotoolsEditorPreferenceConstants.EDITOR_ITALIC_SUFFIX;
|
||||
addToken(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unread() {
|
||||
--fOffset;
|
||||
fColumn = UNDEFINED;
|
||||
--fOffset;
|
||||
fColumn = UNDEFINED;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,9 +25,7 @@ import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
|
|||
import org.eclipse.jface.text.contentassist.IContextInformation;
|
||||
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
|
||||
|
||||
|
||||
public class AutoconfMacroContentAssistProcessor implements
|
||||
IContentAssistProcessor {
|
||||
public class AutoconfMacroContentAssistProcessor implements IContentAssistProcessor {
|
||||
|
||||
protected AutoconfEditor editor;
|
||||
|
||||
|
@ -50,8 +48,7 @@ public class AutoconfMacroContentAssistProcessor implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,
|
||||
int offset) {
|
||||
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
|
||||
|
||||
IDocument document = viewer.getDocument();
|
||||
String prefix = ""; //$NON-NLS-1$
|
||||
|
@ -80,11 +77,12 @@ public class AutoconfMacroContentAssistProcessor implements
|
|||
if (macros[i].hasParms()) {
|
||||
// Provide parameter info as context information that
|
||||
// is tied to the completion proposal.
|
||||
ci = new AutoconfMacroProposalContextInformation(macros[i].getParms(), macros[i].getParms());
|
||||
ci = new AutoconfMacroProposalContextInformation(macros[i].getParms(),
|
||||
macros[i].getParms());
|
||||
ci.setContextInformationPosition(offset - prefixLen + cursorPos - 1);
|
||||
}
|
||||
ICompletionProposal cp = new CompletionProposal(template, offset - prefixLen, prefixLen, cursorPos, null,
|
||||
name, ci, AutoconfTextHover.getIndexedInfo(name, editor));
|
||||
ICompletionProposal cp = new CompletionProposal(template, offset - prefixLen, prefixLen,
|
||||
cursorPos, null, name, ci, AutoconfTextHover.getIndexedInfo(name, editor));
|
||||
validList.add(cp);
|
||||
}
|
||||
}
|
||||
|
@ -96,8 +94,7 @@ public class AutoconfMacroContentAssistProcessor implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public IContextInformation[] computeContextInformation(ITextViewer viewer,
|
||||
int offset) {
|
||||
public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -35,5 +35,4 @@ public class AutoconfMacroDamagerRepairer extends DefaultDamagerRepairer {
|
|||
super(scanner);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -45,16 +45,16 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
@Override
|
||||
public void install(IContextInformation info, ITextViewer viewer, int documentPosition) {
|
||||
|
||||
fPosition= documentPosition;
|
||||
fViewer= viewer;
|
||||
fInformation= info;
|
||||
fPosition = documentPosition;
|
||||
fViewer = viewer;
|
||||
fInformation = info;
|
||||
|
||||
fCurrentParameter= -1;
|
||||
fCurrentParameter = -1;
|
||||
}
|
||||
|
||||
private int getStringEnd(IDocument d, int pos, int end, char ch) throws BadLocationException {
|
||||
while (pos < end) {
|
||||
char curr= d.getChar(pos);
|
||||
char curr = d.getChar(pos);
|
||||
pos++;
|
||||
if (curr == '\\') {
|
||||
// ignore escaped characters
|
||||
|
@ -66,8 +66,8 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
return end;
|
||||
}
|
||||
|
||||
private int getCharCount(IDocument document, int start, int end,
|
||||
char increment, char decrement, boolean considerNesting) throws BadLocationException {
|
||||
private int getCharCount(IDocument document, int start, int end, char increment, char decrement,
|
||||
boolean considerNesting) throws BadLocationException {
|
||||
|
||||
Assert.isTrue((increment != 0 || decrement != 0) && increment != decrement);
|
||||
|
||||
|
@ -81,49 +81,49 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
while (start < end) {
|
||||
char curr = document.getChar(start++);
|
||||
switch (curr) {
|
||||
case 'd':
|
||||
if (start < end - 2) {
|
||||
char next= document.getChar(start);
|
||||
if (next == 'n') {
|
||||
// a comment starts, advance to the comment end
|
||||
next = document.getChar(start + 1);
|
||||
if (next == 'l')
|
||||
case 'd':
|
||||
if (start < end - 2) {
|
||||
char next = document.getChar(start);
|
||||
if (next == 'n') {
|
||||
// a comment starts, advance to the comment end
|
||||
next = document.getChar(start + 1);
|
||||
if (next == 'l')
|
||||
// dnl-comment: nothing to do anymore on this line
|
||||
start= end;
|
||||
}
|
||||
start = end;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case '"':
|
||||
case '\'':
|
||||
start = getStringEnd(document, start, end, curr);
|
||||
break;
|
||||
default:
|
||||
if ('[' == curr)
|
||||
++macroQuotingLevel;
|
||||
else if (']' == curr)
|
||||
--macroQuotingLevel;
|
||||
if (macroQuotingLevel != 0)
|
||||
break;
|
||||
case '"':
|
||||
case '\'':
|
||||
start= getStringEnd(document, start, end, curr);
|
||||
break;
|
||||
default:
|
||||
if ('[' == curr)
|
||||
++ macroQuotingLevel;
|
||||
else if (']' == curr)
|
||||
-- macroQuotingLevel;
|
||||
if (macroQuotingLevel != 0)
|
||||
if (considerNesting) {
|
||||
if ('(' == curr)
|
||||
++macroNestingLevel;
|
||||
else if (')' == curr) {
|
||||
--macroNestingLevel;
|
||||
}
|
||||
if (macroNestingLevel != 0)
|
||||
break;
|
||||
if (considerNesting) {
|
||||
if ('(' == curr)
|
||||
++ macroNestingLevel;
|
||||
else if (')' == curr) {
|
||||
-- macroNestingLevel;
|
||||
}
|
||||
if (macroNestingLevel != 0)
|
||||
break;
|
||||
}
|
||||
if (increment != 0) {
|
||||
if (curr == increment) {
|
||||
++charCount;
|
||||
}
|
||||
}
|
||||
if (increment != 0) {
|
||||
if (curr == increment) {
|
||||
++charCount;
|
||||
}
|
||||
}
|
||||
|
||||
if (decrement != 0) {
|
||||
if (curr == decrement) {
|
||||
-- charCount;
|
||||
}
|
||||
if (decrement != 0) {
|
||||
if (curr == decrement) {
|
||||
--charCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,8 +137,8 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
if (position < fPosition)
|
||||
return false;
|
||||
|
||||
IDocument document= fViewer.getDocument();
|
||||
IRegion line= document.getLineInformationOfOffset(fPosition);
|
||||
IDocument document = fViewer.getDocument();
|
||||
IRegion line = document.getLineInformationOfOffset(fPosition);
|
||||
|
||||
if (position > line.getOffset() + line.getLength())
|
||||
return false;
|
||||
|
@ -153,9 +153,9 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
@Override
|
||||
public boolean updatePresentation(int position, TextPresentation presentation) {
|
||||
|
||||
int currentParameter= -1;
|
||||
int currentParameter = -1;
|
||||
try {
|
||||
currentParameter= getCharCount(fViewer.getDocument(), fPosition, position, ',', (char) 0, true);
|
||||
currentParameter = getCharCount(fViewer.getDocument(), fPosition, position, ',', (char) 0, true);
|
||||
} catch (BadLocationException x) {
|
||||
return false;
|
||||
}
|
||||
|
@ -166,22 +166,22 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
}
|
||||
|
||||
presentation.clear();
|
||||
fCurrentParameter= currentParameter;
|
||||
fCurrentParameter = currentParameter;
|
||||
|
||||
//Don't presume what has been done to the string, rather use as is
|
||||
String s= fInformation.getInformationDisplayString();
|
||||
String s = fInformation.getInformationDisplayString();
|
||||
|
||||
//@@@ This is obviously going to have problems with functions such
|
||||
//int myfunction(int (*function_argument)(void * extra, int param), void * extra)
|
||||
//int myfunction(/*A comment, indeed */int a);
|
||||
int start= 0;
|
||||
int occurrences= 0;
|
||||
int start = 0;
|
||||
int occurrences = 0;
|
||||
while (occurrences < fCurrentParameter) {
|
||||
int found= s.indexOf(',', start);
|
||||
int found = s.indexOf(',', start);
|
||||
if (found == -1)
|
||||
break;
|
||||
start= found + 1;
|
||||
++ occurrences;
|
||||
start = found + 1;
|
||||
++occurrences;
|
||||
}
|
||||
|
||||
if (occurrences < fCurrentParameter) {
|
||||
|
@ -190,11 +190,11 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
}
|
||||
|
||||
if (start == -1)
|
||||
start= 0;
|
||||
start = 0;
|
||||
|
||||
int end= s.indexOf(',', start);
|
||||
int end = s.indexOf(',', start);
|
||||
if (end == -1)
|
||||
end= s.length();
|
||||
end = s.length();
|
||||
|
||||
if (start > 0)
|
||||
presentation.addStyleRange(new StyleRange(0, start, null, null, SWT.NORMAL));
|
||||
|
@ -208,4 +208,3 @@ public class AutoconfMacroParameterListValidator implements IContextInformationV
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ import org.eclipse.jface.text.rules.IWhitespaceDetector;
|
|||
import org.eclipse.jface.text.rules.IWordDetector;
|
||||
import org.eclipse.jface.text.rules.Token;
|
||||
|
||||
|
||||
public class AutoconfMacroPartitionRule implements IPredicateRule {
|
||||
/**
|
||||
* The default token to be returned on success and if nothing else has been
|
||||
|
@ -61,19 +60,17 @@ public class AutoconfMacroPartitionRule implements IPredicateRule {
|
|||
while (!finished && c != ICharacterScanner.EOF) {
|
||||
if (c == '[') {
|
||||
++quoteDepth;
|
||||
}
|
||||
else if (c == ']') {
|
||||
} else if (c == ']') {
|
||||
--quoteDepth;
|
||||
if (quoteDepth < 0)
|
||||
finished = true;
|
||||
}
|
||||
if (quoteDepth == 0) {
|
||||
if (c == ')') {
|
||||
--depth;
|
||||
if (depth <= 0)
|
||||
finished = true;
|
||||
}
|
||||
else if (c == '(') {
|
||||
--depth;
|
||||
if (depth <= 0)
|
||||
finished = true;
|
||||
} else if (c == '(') {
|
||||
++depth;
|
||||
}
|
||||
}
|
||||
|
@ -83,8 +80,8 @@ public class AutoconfMacroPartitionRule implements IPredicateRule {
|
|||
|
||||
@Override
|
||||
public IToken evaluate(ICharacterScanner scanner, boolean resume) {
|
||||
// if (resume)
|
||||
// return Token.UNDEFINED;
|
||||
// if (resume)
|
||||
// return Token.UNDEFINED;
|
||||
return evaluate(scanner);
|
||||
}
|
||||
|
||||
|
@ -93,10 +90,10 @@ public class AutoconfMacroPartitionRule implements IPredicateRule {
|
|||
int c = scanner.read();
|
||||
fBuffer.setLength(0);
|
||||
|
||||
fBuffer.append((char)c);
|
||||
fBuffer.append((char) c);
|
||||
if (c == 'A') {
|
||||
c = scanner.read();
|
||||
fBuffer.append((char)c);
|
||||
fBuffer.append((char) c);
|
||||
if (c != 'C' && c != 'H' && c != 'M') {
|
||||
unreadBuffer(scanner);
|
||||
return Token.UNDEFINED;
|
||||
|
@ -104,7 +101,7 @@ public class AutoconfMacroPartitionRule implements IPredicateRule {
|
|||
fDetector = generalMacroWordDetector;
|
||||
} else if (c == 'm') {
|
||||
c = scanner.read();
|
||||
fBuffer.append((char)c);
|
||||
fBuffer.append((char) c);
|
||||
if (c != 4) {
|
||||
unreadBuffer(scanner);
|
||||
return Token.UNDEFINED;
|
||||
|
@ -115,21 +112,18 @@ public class AutoconfMacroPartitionRule implements IPredicateRule {
|
|||
return Token.UNDEFINED;
|
||||
}
|
||||
|
||||
c = scanner.read();
|
||||
while (c != ICharacterScanner.EOF
|
||||
&& fDetector.isWordPart((char) c)) {
|
||||
c = scanner.read();
|
||||
while (c != ICharacterScanner.EOF && fDetector.isWordPart((char) c)) {
|
||||
fBuffer.append((char) c);
|
||||
c = scanner.read();
|
||||
}
|
||||
|
||||
if (c != ICharacterScanner.EOF) {
|
||||
if (c == ';' || fWsDetector.isWhitespace((char)c)) {
|
||||
if (c == ';' || fWsDetector.isWhitespace((char) c)) {
|
||||
// We are done
|
||||
}
|
||||
else if (c == '(') {
|
||||
} else if (c == '(') {
|
||||
matchParentheses(scanner);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
scanner.unread();
|
||||
unreadBuffer(scanner);
|
||||
return Token.UNDEFINED;
|
||||
|
|
|
@ -51,20 +51,22 @@ public class AutoconfMacroProposalContextInformation implements IContextInformat
|
|||
* @param informationDisplayString the string to be displayed when presenting the context information,
|
||||
* may not be <code>null</code>
|
||||
*/
|
||||
public AutoconfMacroProposalContextInformation(Image image, String contextDisplayString, String informationDisplayString) {
|
||||
public AutoconfMacroProposalContextInformation(Image image, String contextDisplayString,
|
||||
String informationDisplayString) {
|
||||
//Assert.isNotNull(informationDisplayString);
|
||||
fImage= image;
|
||||
fContextDisplayString= contextDisplayString;
|
||||
fInformationDisplayString= informationDisplayString;
|
||||
fImage = image;
|
||||
fContextDisplayString = contextDisplayString;
|
||||
fInformationDisplayString = informationDisplayString;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (object instanceof IContextInformation) {
|
||||
IContextInformation contextInformation= (IContextInformation) object;
|
||||
boolean equals= fInformationDisplayString.equalsIgnoreCase(contextInformation.getInformationDisplayString());
|
||||
IContextInformation contextInformation = (IContextInformation) object;
|
||||
boolean equals = fInformationDisplayString
|
||||
.equalsIgnoreCase(contextInformation.getInformationDisplayString());
|
||||
if (fContextDisplayString != null)
|
||||
equals= equals && fContextDisplayString.equalsIgnoreCase(contextInformation.getContextDisplayString());
|
||||
equals = equals && fContextDisplayString.equalsIgnoreCase(contextInformation.getContextDisplayString());
|
||||
return equals;
|
||||
}
|
||||
return false;
|
||||
|
@ -98,7 +100,7 @@ public class AutoconfMacroProposalContextInformation implements IContextInformat
|
|||
return fInformationPosition;
|
||||
}
|
||||
|
||||
public void setContextInformationPosition( int pos ){
|
||||
public void setContextInformationPosition(int pos) {
|
||||
fInformationPosition = pos;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,8 +41,7 @@ public class AutoconfMacroRule implements IRule {
|
|||
|
||||
private String fStartingSequence;
|
||||
|
||||
public AutoconfMacroRule(String startingSequence,
|
||||
IWordDetector detector, IToken inToken) {
|
||||
public AutoconfMacroRule(String startingSequence, IWordDetector detector, IToken inToken) {
|
||||
token = inToken;
|
||||
fDetector = detector;
|
||||
fStartingSequence = startingSequence;
|
||||
|
@ -62,14 +61,12 @@ public class AutoconfMacroRule implements IRule {
|
|||
c = scanner.read();
|
||||
}
|
||||
|
||||
while (c != ICharacterScanner.EOF
|
||||
&& fDetector.isWordPart((char) c)) {
|
||||
while (c != ICharacterScanner.EOF && fDetector.isWordPart((char) c)) {
|
||||
fBuffer.append((char) c);
|
||||
c = scanner.read();
|
||||
}
|
||||
|
||||
if (c != ICharacterScanner.EOF && c != '(' && c != ';'
|
||||
&& !fWsDetector.isWhitespace((char)c)) {
|
||||
if (c != ICharacterScanner.EOF && c != '(' && c != ';' && !fWsDetector.isWhitespace((char) c)) {
|
||||
unreadBuffer(scanner);
|
||||
return Token.UNDEFINED;
|
||||
}
|
||||
|
|
|
@ -19,8 +19,7 @@ public class AutoconfMacroWordDetector implements IWordDetector {
|
|||
|
||||
@Override
|
||||
public boolean isWordPart(char c) {
|
||||
return ((Character.isLetter(c) && Character.isUpperCase(c)) ||
|
||||
Character.isDigit(c) || c == '_');
|
||||
return ((Character.isLetter(c) && Character.isUpperCase(c)) || Character.isDigit(c) || c == '_');
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,8 +19,7 @@ public class AutoconfPKGWordDetector implements IWordDetector {
|
|||
|
||||
@Override
|
||||
public boolean isWordPart(char c) {
|
||||
return ((Character.isLetter(c) && Character.isUpperCase(c)) ||
|
||||
Character.isDigit(c) || c == '_');
|
||||
return ((Character.isLetter(c) && Character.isUpperCase(c)) || Character.isDigit(c) || c == '_');
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,8 +27,7 @@ public class AutoconfPartitionScanner extends RuleBasedPartitionScanner {
|
|||
|
||||
public final static String AUTOCONF_MACRO = "autoconf_macro"; //$NON-NLS-1$
|
||||
public final static String AUTOCONF_COMMENT = "autoconf_comment"; //$NON-NLS-1$
|
||||
final static String[] AUTOCONF_PARTITION_TYPES=
|
||||
new String[] { AUTOCONF_MACRO, AUTOCONF_COMMENT };
|
||||
final static String[] AUTOCONF_PARTITION_TYPES = new String[] { AUTOCONF_MACRO, AUTOCONF_COMMENT };
|
||||
|
||||
/**
|
||||
* Creates the partitioner and sets up the appropriate rules.
|
||||
|
@ -36,14 +35,13 @@ public class AutoconfPartitionScanner extends RuleBasedPartitionScanner {
|
|||
public AutoconfPartitionScanner() {
|
||||
super();
|
||||
|
||||
List<IRule> rules= new ArrayList<>();
|
||||
List<IRule> rules = new ArrayList<>();
|
||||
Token macro = new Token(AUTOCONF_MACRO);
|
||||
Token comment = new Token(AUTOCONF_COMMENT);
|
||||
|
||||
// Add rule for target bodies.
|
||||
rules.add(new AutoconfMacroPartitionRule(macro));
|
||||
|
||||
|
||||
rules.add(new EndOfLineRule("dnl", comment)); //$NON-NLS-1$
|
||||
rules.add(new SingleLineRule("\\#", null, Token.UNDEFINED));
|
||||
rules.add(new EndOfLineRule("#", comment, '\\')); //$NON-NLS-1$
|
||||
|
@ -52,7 +50,7 @@ public class AutoconfPartitionScanner extends RuleBasedPartitionScanner {
|
|||
// names inside them.
|
||||
rules.add(new AutoconfIdentifierRule(Token.UNDEFINED));
|
||||
|
||||
IPredicateRule[] result= new IPredicateRule[rules.size()];
|
||||
IPredicateRule[] result = new IPredicateRule[rules.size()];
|
||||
rules.toArray(result);
|
||||
setPredicateRules(result);
|
||||
}
|
||||
|
|
|
@ -34,29 +34,23 @@ public class AutoconfPartitioner extends FastPartitioner {
|
|||
// method. We cannot do it at connect time because the document may be zero length
|
||||
// at the time and we will end up getting default partitioning from then on.
|
||||
@Override
|
||||
public ITypedRegion[] computePartitioning(int offset, int length,
|
||||
boolean includeZeroLength) {
|
||||
public ITypedRegion[] computePartitioning(int offset, int length, boolean includeZeroLength) {
|
||||
ITypedRegion[] regions = super.computePartitioning(offset, length, includeZeroLength);
|
||||
// Uncomment the following line to see partitioning.
|
||||
// printPartitions(regions);
|
||||
// printPartitions(regions);
|
||||
return regions;
|
||||
}
|
||||
|
||||
public void printPartitions(ITypedRegion[] partitions)
|
||||
{
|
||||
for (int i = 0; i < partitions.length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
public void printPartitions(ITypedRegion[] partitions) {
|
||||
for (int i = 0; i < partitions.length; i++) {
|
||||
try {
|
||||
System.out.print("Partition type: " + partitions[i].getType() //$NON-NLS-1$
|
||||
+ ", offset: " + partitions[i].getOffset() //$NON-NLS-1$
|
||||
+ ", length: " + partitions[i].getLength() //$NON-NLS-1$
|
||||
+"\nText:\n" //$NON-NLS-1$
|
||||
+ "\nText:\n" //$NON-NLS-1$
|
||||
+ super.fDocument.get(partitions[i].getOffset(), partitions[i].getLength())
|
||||
+ "\n---------------------------\n\n\n"); //$NON-NLS-1$
|
||||
}
|
||||
catch (BadLocationException e)
|
||||
{
|
||||
} catch (BadLocationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,17 +21,16 @@ import org.eclipse.jface.text.reconciler.DirtyRegion;
|
|||
import org.eclipse.jface.text.reconciler.IReconcilingStrategy;
|
||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||
|
||||
|
||||
public class AutoconfReconcilingStrategy implements IReconcilingStrategy {
|
||||
|
||||
AutoconfContentOutlinePage outline;
|
||||
// int lastRegionOffset;
|
||||
// int lastRegionOffset;
|
||||
AutoconfEditor editor;
|
||||
IDocumentProvider documentProvider;
|
||||
|
||||
public AutoconfReconcilingStrategy(AutoconfEditor editor) {
|
||||
outline= editor.getOutlinePage();
|
||||
// lastRegionOffset = Integer.MAX_VALUE;
|
||||
outline = editor.getOutlinePage();
|
||||
// lastRegionOffset = Integer.MAX_VALUE;
|
||||
this.editor = editor;
|
||||
documentProvider = editor.getDocumentProvider();
|
||||
}
|
||||
|
@ -40,7 +39,7 @@ public class AutoconfReconcilingStrategy implements IReconcilingStrategy {
|
|||
public void reconcile(IRegion partition) {
|
||||
try {
|
||||
AutoconfParser parser = editor.getAutoconfParser();
|
||||
((AutoconfErrorHandler)parser.getErrorHandler()).removeAllExistingMarkers();
|
||||
((AutoconfErrorHandler) parser.getErrorHandler()).removeAllExistingMarkers();
|
||||
|
||||
editor.setRootElement(parser.parse(documentProvider.getDocument(editor.getEditorInput())));
|
||||
outline.update();
|
||||
|
|
|
@ -29,9 +29,7 @@ import org.eclipse.jface.text.source.IAnnotationHover;
|
|||
import org.eclipse.jface.text.source.ISourceViewer;
|
||||
import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
|
||||
|
||||
|
||||
public class AutoconfSourceViewerConfiguration extends
|
||||
TextSourceViewerConfiguration {
|
||||
public class AutoconfSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
||||
|
||||
private ITextHover acHover;
|
||||
private IAnnotationHover aaHover;
|
||||
|
@ -65,9 +63,8 @@ public class AutoconfSourceViewerConfiguration extends
|
|||
|
||||
@Override
|
||||
public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
|
||||
return new String[] { IDocument.DEFAULT_CONTENT_TYPE,
|
||||
AutoconfPartitionScanner.AUTOCONF_MACRO,
|
||||
AutoconfPartitionScanner.AUTOCONF_COMMENT};
|
||||
return new String[] { IDocument.DEFAULT_CONTENT_TYPE, AutoconfPartitionScanner.AUTOCONF_MACRO,
|
||||
AutoconfPartitionScanner.AUTOCONF_COMMENT };
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -86,11 +83,12 @@ public class AutoconfSourceViewerConfiguration extends
|
|||
|
||||
@Override
|
||||
public IReconciler getReconciler(ISourceViewer sourceViewer) {
|
||||
MonoReconciler reconciler= new MonoReconciler(new AutoconfReconcilingStrategy(fEditor), false);
|
||||
MonoReconciler reconciler = new MonoReconciler(new AutoconfReconcilingStrategy(fEditor), false);
|
||||
reconciler.setDelay(1000);
|
||||
reconciler.setProgressMonitor(new NullProgressMonitor());
|
||||
return reconciler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
|
||||
return new AutoconfPresentationReconciler();
|
||||
|
|
|
@ -13,7 +13,6 @@ package org.eclipse.cdt.autotools.ui.editors;
|
|||
import org.eclipse.cdt.internal.autotools.ui.editors.automake.IReconcilingParticipant;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
|
||||
public interface IAutotoolsEditor extends ITextEditor {
|
||||
|
||||
/**
|
||||
|
|
|
@ -49,11 +49,11 @@ public class InlineDataRule implements IRule {
|
|||
protected boolean confirmDelimeter(ICharacterScanner scanner, char[] delimeter) {
|
||||
int c = scanner.read();
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
buffer.append((char)c);
|
||||
buffer.append((char) c);
|
||||
for (int i = 1; i < delimeter.length; ++i) {
|
||||
if (c == delimeter[i]) {
|
||||
c = scanner.read();
|
||||
buffer.append((char)c);
|
||||
buffer.append((char) c);
|
||||
} else {
|
||||
for (int j = buffer.length() - 1; j >= 0; j--)
|
||||
scanner.unread();
|
||||
|
@ -63,6 +63,7 @@ public class InlineDataRule implements IRule {
|
|||
scanner.unread();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IToken evaluate(ICharacterScanner scanner) {
|
||||
int c = scanner.read();
|
||||
|
@ -81,23 +82,21 @@ public class InlineDataRule implements IRule {
|
|||
char[][] lineDelimeters = scanner.getLegalLineDelimiters();
|
||||
StringBuilder endMarkerBuffer = new StringBuilder();
|
||||
if (c == '-') {
|
||||
fBuffer.append((char)c);
|
||||
fBuffer.append((char) c);
|
||||
c = scanner.read();
|
||||
} else if (c == '\'') {
|
||||
fBuffer.append((char)c);
|
||||
fBuffer.append((char) c);
|
||||
c = scanner.read();
|
||||
}
|
||||
|
||||
while (c != ICharacterScanner.EOF &&
|
||||
Character.isJavaIdentifierPart((char)c) &&
|
||||
c != '\'') {
|
||||
fBuffer.append((char)c);
|
||||
endMarkerBuffer.append((char)c);
|
||||
while (c != ICharacterScanner.EOF && Character.isJavaIdentifierPart((char) c) && c != '\'') {
|
||||
fBuffer.append((char) c);
|
||||
endMarkerBuffer.append((char) c);
|
||||
c = scanner.read();
|
||||
}
|
||||
|
||||
if (c == '\'') {
|
||||
fBuffer.append((char)c);
|
||||
fBuffer.append((char) c);
|
||||
c = scanner.read();
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,6 @@ import org.eclipse.jface.text.rules.ITokenScanner;
|
|||
|
||||
public class MultilineRuleDamagerRepairer extends DefaultDamagerRepairer {
|
||||
|
||||
|
||||
/**
|
||||
* Creates a damager/repairer that uses the given scanner. The scanner may not be <code>null</code>
|
||||
* and is assumed to return only token that carry text attributes.
|
||||
|
|
|
@ -21,31 +21,40 @@ public class ParseException extends Exception {
|
|||
int lineNumber;
|
||||
int startColumn;
|
||||
int endColumn;
|
||||
|
||||
public int getEndColumn() {
|
||||
return endColumn;
|
||||
}
|
||||
|
||||
public void setEndColumn(int endColumn) {
|
||||
this.endColumn = endColumn;
|
||||
}
|
||||
|
||||
public int getLineNumber() {
|
||||
return lineNumber;
|
||||
}
|
||||
|
||||
public void setLineNumber(int lineNumber) {
|
||||
this.lineNumber = lineNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public int getStartColumn() {
|
||||
return startColumn;
|
||||
}
|
||||
|
||||
public void setStartColumn(int startColumn) {
|
||||
this.startColumn = startColumn;
|
||||
}
|
||||
|
||||
public ParseException(String message, int lineNumber, int startColumn, int endColumn, int severity) {
|
||||
super();
|
||||
this.message = message;
|
||||
|
@ -54,9 +63,11 @@ public class ParseException extends Exception {
|
|||
this.endColumn = endColumn;
|
||||
this.severity = severity;
|
||||
}
|
||||
|
||||
public int getSeverity() {
|
||||
return severity;
|
||||
}
|
||||
|
||||
public void setSeverity(int severity) {
|
||||
this.severity = severity;
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ public class RecursiveSingleLineRule extends SingleLineRule {
|
|||
private int endBoundary;
|
||||
private String startSequence;
|
||||
private String endSequence;
|
||||
|
||||
/**
|
||||
* Creates a rule for the given starting and ending sequence
|
||||
* which, if detected, will return the specified token.
|
||||
|
@ -72,7 +73,8 @@ public class RecursiveSingleLineRule extends SingleLineRule {
|
|||
* @param breaksOnEOF indicates whether the end of the file successfully terminates this rule
|
||||
* @since 2.1
|
||||
*/
|
||||
public RecursiveSingleLineRule(String startSequence, String endSequence, IToken token, char escapeCharacter, boolean breaksOnEOF) {
|
||||
public RecursiveSingleLineRule(String startSequence, String endSequence, IToken token, char escapeCharacter,
|
||||
boolean breaksOnEOF) {
|
||||
super(startSequence, endSequence, token, escapeCharacter, breaksOnEOF);
|
||||
this.startSequence = startSequence;
|
||||
this.endSequence = endSequence;
|
||||
|
@ -99,7 +101,8 @@ public class RecursiveSingleLineRule extends SingleLineRule {
|
|||
* terminate the line, even if <code>breakOnEOL</code> is true
|
||||
* @since 3.0
|
||||
*/
|
||||
public RecursiveSingleLineRule(String startSequence, String endSequence, IToken token, char escapeCharacter, boolean breaksOnEOF, boolean escapeContinuesLine) {
|
||||
public RecursiveSingleLineRule(String startSequence, String endSequence, IToken token, char escapeCharacter,
|
||||
boolean breaksOnEOF, boolean escapeContinuesLine) {
|
||||
super(startSequence, endSequence, token, escapeCharacter, breaksOnEOF, escapeContinuesLine);
|
||||
this.startSequence = startSequence;
|
||||
this.endSequence = endSequence;
|
||||
|
@ -118,7 +121,7 @@ public class RecursiveSingleLineRule extends SingleLineRule {
|
|||
// The current internal rule index will help us determine which
|
||||
// one.
|
||||
if (evalIndex < rules.size()) {
|
||||
SingleLineRule x = (SingleLineRule)rules.get(evalIndex);
|
||||
SingleLineRule x = (SingleLineRule) rules.get(evalIndex);
|
||||
return x.getSuccessToken();
|
||||
}
|
||||
return super.getSuccessToken();
|
||||
|
@ -153,8 +156,7 @@ public class RecursiveSingleLineRule extends SingleLineRule {
|
|||
// Back up scanner to just after start sequence.
|
||||
backupScanner(scanner, startIndex + startSequence.length());
|
||||
return super.getSuccessToken();
|
||||
}
|
||||
else
|
||||
} else
|
||||
// Outer rule doesn't hold.
|
||||
return Token.UNDEFINED;
|
||||
}
|
||||
|
@ -168,7 +170,7 @@ public class RecursiveSingleLineRule extends SingleLineRule {
|
|||
column = start;
|
||||
while (column < endBoundary) {
|
||||
while (evalIndex < rules.size()) {
|
||||
SingleLineRule x = (SingleLineRule)rules.get(evalIndex);
|
||||
SingleLineRule x = (SingleLineRule) rules.get(evalIndex);
|
||||
IToken token = x.evaluate(scanner, false);
|
||||
if (!token.isUndefined()) {
|
||||
// Found internal token. If we had to read to get
|
||||
|
|
|
@ -30,6 +30,7 @@ public class RestrictedEndOfLineRule extends EndOfLineRule {
|
|||
private int endIndex;
|
||||
private String startSequence;
|
||||
private String restrictedChars;
|
||||
|
||||
/**
|
||||
* Creates a rule for the given starting and ending sequence
|
||||
* which, if detected, will return the specified token.
|
||||
|
@ -71,7 +72,8 @@ public class RestrictedEndOfLineRule extends EndOfLineRule {
|
|||
* @param breaksOnEOF indicates whether the end of the file successfully terminates this rule
|
||||
* @since 2.1
|
||||
*/
|
||||
public RestrictedEndOfLineRule(String startSequence, String restrictedChars, IToken token, char escapeCharacter, boolean breaksOnEOF) {
|
||||
public RestrictedEndOfLineRule(String startSequence, String restrictedChars, IToken token, char escapeCharacter,
|
||||
boolean breaksOnEOF) {
|
||||
super(startSequence, token, escapeCharacter, breaksOnEOF);
|
||||
this.startSequence = startSequence;
|
||||
this.restrictedChars = restrictedChars;
|
||||
|
@ -80,12 +82,10 @@ public class RestrictedEndOfLineRule extends EndOfLineRule {
|
|||
endIndex = 0;
|
||||
}
|
||||
|
||||
|
||||
public void addRule(SingleLineRule rule) {
|
||||
rules.add(rule);
|
||||
}
|
||||
|
||||
|
||||
protected void backupScanner(ICharacterScanner scanner, int position) {
|
||||
int count = scanner.getColumn() - position;
|
||||
while (count-- > 0)
|
||||
|
@ -108,8 +108,7 @@ public class RestrictedEndOfLineRule extends EndOfLineRule {
|
|||
endIndex = scanner.getColumn();
|
||||
// Back up scanner to just after start sequence.
|
||||
backupScanner(scanner, startIndex + startSequence.length());
|
||||
}
|
||||
else
|
||||
} else
|
||||
// Base rule doesn't hold.
|
||||
return Token.UNDEFINED;
|
||||
}
|
||||
|
@ -121,8 +120,7 @@ public class RestrictedEndOfLineRule extends EndOfLineRule {
|
|||
column = start;
|
||||
while (column < endIndex) {
|
||||
int ch = scanner.read();
|
||||
if (ch == ICharacterScanner.EOF
|
||||
|| restrictedChars.indexOf(ch) >= 0) {
|
||||
if (ch == ICharacterScanner.EOF || restrictedChars.indexOf(ch) >= 0) {
|
||||
scanner.unread();
|
||||
return getSuccessToken();
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@ import org.eclipse.ui.part.IPageSite;
|
|||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
|
||||
|
||||
|
||||
public class AutoconfContentOutlinePage extends ContentOutlinePage {
|
||||
|
||||
private ITextEditor editor;
|
||||
|
@ -50,14 +49,14 @@ public class AutoconfContentOutlinePage extends ContentOutlinePage {
|
|||
}
|
||||
|
||||
protected ISelection updateSelection(ISelection sel) {
|
||||
ArrayList<AutoconfElement> newSelection= new ArrayList<>();
|
||||
ArrayList<AutoconfElement> newSelection = new ArrayList<>();
|
||||
if (sel instanceof IStructuredSelection) {
|
||||
Iterator<?> iter = ((IStructuredSelection) sel).iterator();
|
||||
for (;iter.hasNext();) {
|
||||
for (; iter.hasNext();) {
|
||||
//ICElement elem= fInput.findEqualMember((ICElement)iter.next());
|
||||
Object o = iter.next();
|
||||
if (o instanceof AutoconfElement) {
|
||||
newSelection.add((AutoconfElement)o);
|
||||
newSelection.add((AutoconfElement) o);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,11 +68,9 @@ public class AutoconfContentOutlinePage extends ContentOutlinePage {
|
|||
//update the tree viewer state
|
||||
final TreeViewer viewer = getTreeViewer();
|
||||
|
||||
if (viewer != null)
|
||||
{
|
||||
if (viewer != null) {
|
||||
final Control control = viewer.getControl();
|
||||
if (control != null && !control.isDisposed())
|
||||
{
|
||||
if (control != null && !control.isDisposed()) {
|
||||
control.getDisplay().asyncExec(() -> {
|
||||
if (!control.isDisposed()) {
|
||||
ISelection sel = viewer.getSelection();
|
||||
|
@ -90,7 +87,7 @@ public class AutoconfContentOutlinePage extends ContentOutlinePage {
|
|||
|
||||
super.createControl(parent);
|
||||
|
||||
TreeViewer viewer= getTreeViewer();
|
||||
TreeViewer viewer = getTreeViewer();
|
||||
viewer.setContentProvider(new AutoconfContentProvider(editor));
|
||||
viewer.setLabelProvider(new AutoconfLabelProvider());
|
||||
viewer.addSelectionChangedListener(this);
|
||||
|
@ -105,8 +102,7 @@ public class AutoconfContentOutlinePage extends ContentOutlinePage {
|
|||
* Change in selection
|
||||
*/
|
||||
@Override
|
||||
public void selectionChanged(SelectionChangedEvent event)
|
||||
{
|
||||
public void selectionChanged(SelectionChangedEvent event) {
|
||||
super.selectionChanged(event);
|
||||
|
||||
//find out which item in tree viewer we have selected, and set highlight range accordingly
|
||||
|
@ -114,8 +110,7 @@ public class AutoconfContentOutlinePage extends ContentOutlinePage {
|
|||
if (selection.isEmpty()) {
|
||||
editor.resetHighlightRange();
|
||||
} else {
|
||||
AutoconfElement element = (AutoconfElement) ((IStructuredSelection) selection)
|
||||
.getFirstElement();
|
||||
AutoconfElement element = (AutoconfElement) ((IStructuredSelection) selection).getFirstElement();
|
||||
|
||||
try {
|
||||
int offset = element.getStartOffset();
|
||||
|
|
|
@ -24,7 +24,6 @@ import org.eclipse.jface.viewers.Viewer;
|
|||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
|
||||
public class AutoconfContentProvider implements ITreeContentProvider {
|
||||
|
||||
private IDocumentProvider documentProvider;
|
||||
|
@ -47,27 +46,20 @@ public class AutoconfContentProvider implements ITreeContentProvider {
|
|||
|
||||
@Override
|
||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||
if (oldInput != null)
|
||||
{
|
||||
if (oldInput != null) {
|
||||
IDocument document = documentProvider.getDocument(oldInput);
|
||||
if (document != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (document != null) {
|
||||
try {
|
||||
document.removePositionCategory(SECTION_POSITIONS);
|
||||
}
|
||||
catch (BadPositionCategoryException x)
|
||||
{
|
||||
} catch (BadPositionCategoryException x) {
|
||||
}
|
||||
document.removePositionUpdater(positionUpdater);
|
||||
}
|
||||
}
|
||||
|
||||
if (newInput != null)
|
||||
{
|
||||
if (newInput != null) {
|
||||
IDocument document = documentProvider.getDocument(newInput);
|
||||
if (document != null)
|
||||
{
|
||||
if (document != null) {
|
||||
document.addPositionCategory(SECTION_POSITIONS);
|
||||
document.addPositionUpdater(positionUpdater);
|
||||
}
|
||||
|
@ -77,7 +69,7 @@ public class AutoconfContentProvider implements ITreeContentProvider {
|
|||
@Override
|
||||
public Object[] getChildren(Object parentElement) {
|
||||
if (parentElement instanceof AutoconfElement) {
|
||||
AutoconfElement element = (AutoconfElement)parentElement;
|
||||
AutoconfElement element = (AutoconfElement) parentElement;
|
||||
return element.getChildren();
|
||||
}
|
||||
return new Object[0];
|
||||
|
@ -91,7 +83,7 @@ public class AutoconfContentProvider implements ITreeContentProvider {
|
|||
@Override
|
||||
public boolean hasChildren(Object element) {
|
||||
if (element instanceof AutoconfElement) {
|
||||
return ((AutoconfElement)element).hasChildren();
|
||||
return ((AutoconfElement) element).hasChildren();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ import org.eclipse.jface.viewers.ILabelProvider;
|
|||
import org.eclipse.jface.viewers.ILabelProviderListener;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
|
||||
|
||||
public class AutoconfLabelProvider implements ILabelProvider {
|
||||
|
||||
public AutoconfLabelProvider() {
|
||||
|
@ -72,9 +71,9 @@ public class AutoconfLabelProvider implements ILabelProvider {
|
|||
else if (element instanceof AutoconfWhileElement)
|
||||
return AutotoolsUIPluginImages.get(AutotoolsUIPluginImages.IMG_OBJS_WHILE);
|
||||
else if (element instanceof AutoconfUntilElement)
|
||||
return AutotoolsUIPluginImages.get(AutotoolsUIPluginImages.IMG_OBJS_WHILE); // TODO
|
||||
return AutotoolsUIPluginImages.get(AutotoolsUIPluginImages.IMG_OBJS_WHILE); // TODO
|
||||
else if (element instanceof AutoconfSelectElement)
|
||||
return AutotoolsUIPluginImages.get(AutotoolsUIPluginImages.IMG_OBJS_WHILE); // TODO
|
||||
return AutotoolsUIPluginImages.get(AutotoolsUIPluginImages.IMG_OBJS_WHILE); // TODO
|
||||
else if (element instanceof AutoconfMacroElement)
|
||||
return AutotoolsUIPluginImages.get(AutotoolsUIPluginImages.IMG_OBJS_ACMACRO);
|
||||
else if (element instanceof AutoconfMacroArgumentElement)
|
||||
|
@ -85,7 +84,7 @@ public class AutoconfLabelProvider implements ILabelProvider {
|
|||
@Override
|
||||
public String getText(Object element) {
|
||||
if (element instanceof AutoconfElement) {
|
||||
AutoconfElement e = (AutoconfElement)element;
|
||||
AutoconfElement e = (AutoconfElement) element;
|
||||
String result;
|
||||
String name = e.getName();
|
||||
if (name.length() > 31)
|
||||
|
|
|
@ -40,7 +40,6 @@ public class AutoconfElement {
|
|||
this.children = new ArrayList<>();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String source = getSource();
|
||||
|
@ -95,7 +94,6 @@ public class AutoconfElement {
|
|||
this.name = string;
|
||||
}
|
||||
|
||||
|
||||
public String getVar() {
|
||||
return var;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ public class AutoconfMacroArgumentElement extends AutoconfElement {
|
|||
public AutoconfMacroArgumentElement() {
|
||||
super(""); // //$NON-NLS-N$
|
||||
}
|
||||
|
||||
public AutoconfMacroArgumentElement(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
* Ed Swartz (NOKIA Inc) - support standalone parser
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.autotools.ui.editors.parser;
|
||||
|
||||
/**
|
||||
* A call to a macro.
|
||||
* <p>
|
||||
|
@ -32,6 +33,7 @@ public class AutoconfMacroElement extends AutoconfElement {
|
|||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getParameterCount() {
|
||||
return children.size();
|
||||
}
|
||||
|
@ -47,7 +49,7 @@ public class AutoconfMacroElement extends AutoconfElement {
|
|||
* @param verions Autoconf to be used to validate this macro.
|
||||
* @throws InvalidMacroException
|
||||
*/
|
||||
public void validate (String version) throws InvalidMacroException {}
|
||||
|
||||
public void validate(String version) throws InvalidMacroException {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,17 +30,14 @@ import org.eclipse.jface.text.IDocument;
|
|||
import org.eclipse.ui.IStorageEditorInput;
|
||||
import org.eclipse.ui.texteditor.MarkerUtilities;
|
||||
|
||||
|
||||
public class AutoconfOutlineErrorHandler {
|
||||
|
||||
public static final String PARSE_ERROR_MARKER_ID = AutotoolsUIPlugin.PLUGIN_ID
|
||||
+ ".outlineparsefileerror"; //$NON-NLS-1$
|
||||
public static final String PARSE_ERROR_MARKER_ID = AutotoolsUIPlugin.PLUGIN_ID + ".outlineparsefileerror"; //$NON-NLS-1$
|
||||
|
||||
private IFile file;
|
||||
private IDocument document;
|
||||
|
||||
public AutoconfOutlineErrorHandler(IStorageEditorInput input, IDocument document)
|
||||
{
|
||||
public AutoconfOutlineErrorHandler(IStorageEditorInput input, IDocument document) {
|
||||
this.document = document;
|
||||
IWorkspaceRoot root = CCorePlugin.getWorkspace().getRoot();
|
||||
try {
|
||||
|
@ -101,7 +98,7 @@ public class AutoconfOutlineErrorHandler {
|
|||
if (!file.exists())
|
||||
return;
|
||||
|
||||
try {
|
||||
try {
|
||||
file.deleteMarkers(PARSE_ERROR_MARKER_ID, true, IResource.DEPTH_ZERO);
|
||||
} catch (CoreException e1) {
|
||||
e1.printStackTrace();
|
||||
|
@ -112,7 +109,7 @@ public class AutoconfOutlineErrorHandler {
|
|||
if (!file.exists())
|
||||
return;
|
||||
|
||||
try {
|
||||
try {
|
||||
IMarker[] markers = file.findMarkers(PARSE_ERROR_MARKER_ID, true, IResource.DEPTH_ZERO);
|
||||
// Delete all markers that start in the given document range.
|
||||
for (int i = 0; i < markers.length; ++i) {
|
||||
|
@ -127,8 +124,8 @@ public class AutoconfOutlineErrorHandler {
|
|||
}
|
||||
}
|
||||
|
||||
private Integer getCharOffset(int lineNumber, int columnNumber) {
|
||||
try {
|
||||
private Integer getCharOffset(int lineNumber, int columnNumber) {
|
||||
try {
|
||||
return Integer.valueOf(document.getLineOffset(lineNumber) + columnNumber);
|
||||
} catch (BadLocationException e) {
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -24,7 +24,6 @@ import org.eclipse.core.resources.IMarker;
|
|||
import org.eclipse.jface.text.BadLocationException;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
|
||||
|
||||
/**
|
||||
* Tokenizing autoconf parser, based on original work by Jeff Johnston
|
||||
* @author eswartz
|
||||
|
@ -47,8 +46,8 @@ public class AutoconfParser {
|
|||
public static final String IMPROPER_CASE_CONDITION = "ImproperCaseCondition"; //$NON-NLS-1$
|
||||
public static final String UNTERMINATED_CASE_CONDITION = "UnterminatedCaseCondition"; //$NON-NLS-1$
|
||||
public static final String UNTERMINATED_INLINE_DOCUMENT = "UnterminatedInlineDocument"; //$NON-NLS-1$
|
||||
public static final String INCOMPLETE_INLINE_MARKER="IncompleteInlineMarker"; //$NON-NLS-1$
|
||||
public static final String MISSING_INLINE_MARKER="MissingInlineMarker"; //$NON-NLS-1$
|
||||
public static final String INCOMPLETE_INLINE_MARKER = "IncompleteInlineMarker"; //$NON-NLS-1$
|
||||
public static final String MISSING_INLINE_MARKER = "MissingInlineMarker"; //$NON-NLS-1$
|
||||
public static final String UNMATCHED_RIGHT_PARENTHESIS = "UnmatchedRightParenthesis"; //$NON-NLS-1$
|
||||
public static final String UNMATCHED_LEFT_PARENTHESIS = "UnmatchedLeftParenthesis"; //$NON-NLS-1$
|
||||
|
||||
|
@ -57,13 +56,11 @@ public class AutoconfParser {
|
|||
private AutoconfTokenizer tokenizer;
|
||||
private IAutoconfMacroDetector macroDetector;
|
||||
|
||||
private static final String M4_BUILTINS =
|
||||
"define undefine defn pushdef popdef indir builtin ifdef ifelse shift reverse cond " + //$NON-NLS-1$
|
||||
"dumpdef traceon traceoff debugmode debugfile dnl changequote changecom changeword " + //$NON-NLS-1$
|
||||
"m4wrap " + //$NON-NLS-1$
|
||||
"include sinclude divert undivert divnum len index regexp substr translit patsubst " + //$NON-NLS-1$
|
||||
"format incr decr eval syscmd esyscmd sysval mkstemp maketemp errprint m4exit " + //$NON-NLS-1$
|
||||
"__file__ __line__ __program__ "; //$NON-NLS-1$
|
||||
private static final String M4_BUILTINS = "define undefine defn pushdef popdef indir builtin ifdef ifelse shift reverse cond " //$NON-NLS-1$
|
||||
+ "dumpdef traceon traceoff debugmode debugfile dnl changequote changecom changeword " + "m4wrap "
|
||||
+ "include sinclude divert undivert divnum len index regexp substr translit patsubst "
|
||||
+ "format incr decr eval syscmd esyscmd sysval mkstemp maketemp errprint m4exit "
|
||||
+ "__file__ __line__ __program__ ";
|
||||
|
||||
private static List<String> m4builtins = new ArrayList<>();
|
||||
static {
|
||||
|
@ -76,8 +73,7 @@ public class AutoconfParser {
|
|||
* @param macroDetector
|
||||
* @param macroValidator
|
||||
*/
|
||||
public AutoconfParser(IAutoconfErrorHandler errorHandler,
|
||||
IAutoconfMacroDetector macroDetector,
|
||||
public AutoconfParser(IAutoconfErrorHandler errorHandler, IAutoconfMacroDetector macroDetector,
|
||||
IAutoconfMacroValidator macroValidator) {
|
||||
this.errorHandler = errorHandler;
|
||||
this.macroDetector = macroDetector;
|
||||
|
@ -119,7 +115,6 @@ public class AutoconfParser {
|
|||
return root;
|
||||
}
|
||||
|
||||
|
||||
static class BlockEndCondition extends Exception {
|
||||
/**
|
||||
*
|
||||
|
@ -211,10 +206,8 @@ public class AutoconfParser {
|
|||
private Token parseBlockExpression(Token open, AutoconfElement block) throws BlockEndCondition {
|
||||
Token token;
|
||||
try {
|
||||
if (block instanceof AutoconfIfElement
|
||||
|| block instanceof AutoconfElifElement
|
||||
|| block instanceof AutoconfCaseElement
|
||||
|| block instanceof AutoconfWhileElement) {
|
||||
if (block instanceof AutoconfIfElement || block instanceof AutoconfElifElement
|
||||
|| block instanceof AutoconfCaseElement || block instanceof AutoconfWhileElement) {
|
||||
token = parseExpression(block);
|
||||
} else if (block instanceof AutoconfForElement) {
|
||||
token = parseForExpression(block);
|
||||
|
@ -239,16 +232,12 @@ public class AutoconfParser {
|
|||
}
|
||||
|
||||
if (token.getType() == ITokenConstants.SH_DO) {
|
||||
checkBlockValidity(block, token,
|
||||
new Class[] { AutoconfForElement.class, AutoconfWhileElement.class },
|
||||
checkBlockValidity(block, token, new Class[] { AutoconfForElement.class, AutoconfWhileElement.class },
|
||||
INVALID_DO);
|
||||
}
|
||||
else if (token.getType() == ITokenConstants.SH_THEN) {
|
||||
checkBlockValidity(block, token,
|
||||
new Class[] { AutoconfIfElement.class, AutoconfElifElement.class },
|
||||
} else if (token.getType() == ITokenConstants.SH_THEN) {
|
||||
checkBlockValidity(block, token, new Class[] { AutoconfIfElement.class, AutoconfElifElement.class },
|
||||
INVALID_THEN);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
String exp;
|
||||
if (block instanceof AutoconfIfElement || block instanceof AutoconfElifElement)
|
||||
exp = "then";
|
||||
|
@ -372,6 +361,7 @@ public class AutoconfParser {
|
|||
|
||||
return text;
|
||||
}
|
||||
|
||||
private void setSourceStart(AutoconfElement block, Token open) {
|
||||
int offset = open.getOffset();
|
||||
block.setDocument(open.getDocument());
|
||||
|
@ -413,18 +403,17 @@ public class AutoconfParser {
|
|||
case ITokenConstants.EOF:
|
||||
AutoconfElement element = parent;
|
||||
while (element != null && !(element instanceof AutoconfRootElement)) {
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, element.getName()));
|
||||
handleError(token,
|
||||
AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, element.getName()));
|
||||
element = element.getParent();
|
||||
}
|
||||
throw new BlockEndCondition(token);
|
||||
|
||||
|
||||
// 1. Check for end of statement
|
||||
// 1. Check for end of statement
|
||||
case ITokenConstants.EOL:
|
||||
case ITokenConstants.SEMI:
|
||||
return;
|
||||
|
||||
|
||||
// 2. Check macro expansions
|
||||
case ITokenConstants.WORD:
|
||||
checkMacro(parent, token);
|
||||
|
@ -452,9 +441,7 @@ public class AutoconfParser {
|
|||
|
||||
case ITokenConstants.SH_ELIF:
|
||||
checkLineStart(token, atStart);
|
||||
checkBlockValidity(
|
||||
parent, token,
|
||||
new Class[] { AutoconfIfElement.class, AutoconfElifElement.class },
|
||||
checkBlockValidity(parent, token, new Class[] { AutoconfIfElement.class, AutoconfElifElement.class },
|
||||
INVALID_ELIF);
|
||||
parseBlock(parent, token, new AutoconfElifElement());
|
||||
token = tokenizer.peekToken();
|
||||
|
@ -462,9 +449,7 @@ public class AutoconfParser {
|
|||
|
||||
case ITokenConstants.SH_ELSE:
|
||||
checkLineStart(token, atStart);
|
||||
checkBlockValidity(
|
||||
parent, token,
|
||||
new Class[] { AutoconfIfElement.class, AutoconfElifElement.class },
|
||||
checkBlockValidity(parent, token, new Class[] { AutoconfIfElement.class, AutoconfElifElement.class },
|
||||
INVALID_ELSE);
|
||||
parseBlock(parent, token, new AutoconfElseElement());
|
||||
token = tokenizer.peekToken();
|
||||
|
@ -472,14 +457,12 @@ public class AutoconfParser {
|
|||
|
||||
case ITokenConstants.SH_FI:
|
||||
checkLineStart(token, atStart);
|
||||
checkBlockValidity(
|
||||
parent, token,
|
||||
checkBlockValidity(parent, token,
|
||||
new Class[] { AutoconfIfElement.class, AutoconfElifElement.class, AutoconfElseElement.class },
|
||||
INVALID_FI);
|
||||
throw new BlockEndCondition(token);
|
||||
|
||||
|
||||
// 4. Look for for/while loops
|
||||
// 4. Look for for/while loops
|
||||
case ITokenConstants.SH_FOR:
|
||||
checkLineStart(token, atStart);
|
||||
parseBlock(parent, token, new AutoconfForElement());
|
||||
|
@ -502,37 +485,29 @@ public class AutoconfParser {
|
|||
|
||||
case ITokenConstants.SH_DONE:
|
||||
checkLineStart(token, atStart);
|
||||
checkBlockValidity(
|
||||
parent, token,
|
||||
new Class[] { AutoconfForElement.class, AutoconfWhileElement.class,
|
||||
AutoconfUntilElement.class, AutoconfSelectElement.class },
|
||||
INVALID_DONE);
|
||||
checkBlockValidity(parent, token, new Class[] { AutoconfForElement.class, AutoconfWhileElement.class,
|
||||
AutoconfUntilElement.class, AutoconfSelectElement.class }, INVALID_DONE);
|
||||
throw new BlockEndCondition(token);
|
||||
|
||||
// 5. Look for case statements
|
||||
// 5. Look for case statements
|
||||
case ITokenConstants.SH_CASE:
|
||||
checkLineStart(token, atStart);
|
||||
parseCaseBlock(parent, token, new AutoconfCaseElement());
|
||||
break;
|
||||
|
||||
case ITokenConstants.SH_CASE_CONDITION_END:
|
||||
checkBlockValidity(
|
||||
parent, token,
|
||||
new Class[] { AutoconfCaseConditionElement.class },
|
||||
checkBlockValidity(parent, token, new Class[] { AutoconfCaseConditionElement.class },
|
||||
IMPROPER_CASE_CONDITION);
|
||||
throw new BlockEndCondition(token);
|
||||
|
||||
case ITokenConstants.SH_ESAC:
|
||||
checkLineStart(token, atStart);
|
||||
checkBlockValidity(
|
||||
parent, token,
|
||||
checkBlockValidity(parent, token,
|
||||
// note: we don't strictly recurse here, so accept either parent
|
||||
new Class[] { AutoconfCaseElement.class, AutoconfCaseConditionElement.class },
|
||||
INVALID_ESAC);
|
||||
new Class[] { AutoconfCaseElement.class, AutoconfCaseConditionElement.class }, INVALID_ESAC);
|
||||
throw new BlockEndCondition(token);
|
||||
|
||||
|
||||
// 6. Check for HERE documents
|
||||
// 6. Check for HERE documents
|
||||
case ITokenConstants.SH_HERE:
|
||||
case ITokenConstants.SH_HERE_DASH:
|
||||
|
||||
|
@ -566,7 +541,8 @@ public class AutoconfParser {
|
|||
while (true) {
|
||||
token = tokenizer.readToken();
|
||||
if (token.getType() == ITokenConstants.EOF) {
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, parent.getName()));
|
||||
handleError(token,
|
||||
AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, parent.getName()));
|
||||
break;
|
||||
} else if (token.getType() == ITokenConstants.EOL) {
|
||||
atEOL = true;
|
||||
|
@ -574,7 +550,8 @@ public class AutoconfParser {
|
|||
if (atEOL && token.getText().equals(hereTag)) {
|
||||
// only the end if it is also followed by EOL without any whitespace
|
||||
Token eol = tokenizer.readToken();
|
||||
if (eol.getType() == ITokenConstants.EOL && eol.getOffset() == token.getOffset() + token.getLength()) {
|
||||
if (eol.getType() == ITokenConstants.EOL
|
||||
&& eol.getOffset() == token.getOffset() + token.getLength()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -607,7 +584,7 @@ public class AutoconfParser {
|
|||
case ITokenConstants.EOF:
|
||||
throw new BlockEndCondition(token);
|
||||
|
||||
// 2. Check macro expansions
|
||||
// 2. Check macro expansions
|
||||
case ITokenConstants.WORD:
|
||||
token = checkMacro(parent, token);
|
||||
break;
|
||||
|
@ -624,12 +601,11 @@ public class AutoconfParser {
|
|||
|
||||
case ITokenConstants.SH_IN:
|
||||
// in 'for' or 'select, an 'in' may occur before 'do'
|
||||
if (!(parent instanceof AutoconfForElement)
|
||||
&& !(parent instanceof AutoconfSelectElement))
|
||||
if (!(parent instanceof AutoconfForElement) && !(parent instanceof AutoconfSelectElement))
|
||||
return token;
|
||||
// fall through
|
||||
|
||||
// 5. Abort on unexpected tokens
|
||||
// 5. Abort on unexpected tokens
|
||||
case ITokenConstants.SH_DO:
|
||||
case ITokenConstants.SH_THEN:
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString(INVALID_SPECIFIER, token.getText()));
|
||||
|
@ -684,27 +660,29 @@ public class AutoconfParser {
|
|||
}
|
||||
|
||||
// 4. Abort on unexpected tokens
|
||||
else switch (token.getType()) {
|
||||
case ITokenConstants.SH_THEN:
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString(INVALID_SPECIFIER, token.getText()));
|
||||
tokenizer.unreadToken(token);
|
||||
// close enough...
|
||||
//throw new ExprEndCondition(token);
|
||||
return token;
|
||||
else
|
||||
switch (token.getType()) {
|
||||
case ITokenConstants.SH_THEN:
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString(INVALID_SPECIFIER, token.getText()));
|
||||
tokenizer.unreadToken(token);
|
||||
// close enough...
|
||||
//throw new ExprEndCondition(token);
|
||||
return token;
|
||||
|
||||
case ITokenConstants.SH_ESAC:
|
||||
case ITokenConstants.SH_CASE:
|
||||
case ITokenConstants.SH_CASE_CONDITION_END:
|
||||
case ITokenConstants.SH_FOR:
|
||||
case ITokenConstants.SH_IF:
|
||||
case ITokenConstants.SH_ELIF:
|
||||
case ITokenConstants.SH_ELSE:
|
||||
case ITokenConstants.SH_FI:
|
||||
case ITokenConstants.SH_DONE:
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, parent.getName()));
|
||||
tokenizer.unreadToken(token);
|
||||
throw new BlockEndCondition(token);
|
||||
}
|
||||
case ITokenConstants.SH_ESAC:
|
||||
case ITokenConstants.SH_CASE:
|
||||
case ITokenConstants.SH_CASE_CONDITION_END:
|
||||
case ITokenConstants.SH_FOR:
|
||||
case ITokenConstants.SH_IF:
|
||||
case ITokenConstants.SH_ELIF:
|
||||
case ITokenConstants.SH_ELSE:
|
||||
case ITokenConstants.SH_FI:
|
||||
case ITokenConstants.SH_DONE:
|
||||
handleError(token,
|
||||
AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, parent.getName()));
|
||||
tokenizer.unreadToken(token);
|
||||
throw new BlockEndCondition(token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -735,38 +713,39 @@ public class AutoconfParser {
|
|||
// 3. Check expression terminators
|
||||
else if (parent instanceof AutoconfCaseElement && token.getType() == ITokenConstants.SH_IN) {
|
||||
return token;
|
||||
}
|
||||
else if (parent instanceof AutoconfCaseConditionElement && token.getType() == ITokenConstants.RPAREN) {
|
||||
} else if (parent instanceof AutoconfCaseConditionElement && token.getType() == ITokenConstants.RPAREN) {
|
||||
return token;
|
||||
}
|
||||
|
||||
// 4. Abort on unexpected tokens
|
||||
else switch (token.getType()) {
|
||||
case ITokenConstants.SEMI:
|
||||
case ITokenConstants.SH_IN:
|
||||
case ITokenConstants.RPAREN:
|
||||
case ITokenConstants.SH_DO:
|
||||
case ITokenConstants.SH_THEN:
|
||||
if (parent instanceof AutoconfCaseElement)
|
||||
handleError(token, AutoconfEditorMessages.getString(INVALID_IN));
|
||||
else
|
||||
handleError(token, AutoconfEditorMessages.getString(IMPROPER_CASE_CONDITION));
|
||||
// close enough...
|
||||
return token;
|
||||
else
|
||||
switch (token.getType()) {
|
||||
case ITokenConstants.SEMI:
|
||||
case ITokenConstants.SH_IN:
|
||||
case ITokenConstants.RPAREN:
|
||||
case ITokenConstants.SH_DO:
|
||||
case ITokenConstants.SH_THEN:
|
||||
if (parent instanceof AutoconfCaseElement)
|
||||
handleError(token, AutoconfEditorMessages.getString(INVALID_IN));
|
||||
else
|
||||
handleError(token, AutoconfEditorMessages.getString(IMPROPER_CASE_CONDITION));
|
||||
// close enough...
|
||||
return token;
|
||||
|
||||
case ITokenConstants.SH_ESAC:
|
||||
case ITokenConstants.SH_CASE:
|
||||
case ITokenConstants.SH_CASE_CONDITION_END:
|
||||
case ITokenConstants.SH_FOR:
|
||||
case ITokenConstants.SH_IF:
|
||||
case ITokenConstants.SH_ELIF:
|
||||
case ITokenConstants.SH_ELSE:
|
||||
case ITokenConstants.SH_FI:
|
||||
case ITokenConstants.SH_DONE:
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, parent.getName()));
|
||||
tokenizer.unreadToken(token);
|
||||
throw new BlockEndCondition(token);
|
||||
}
|
||||
case ITokenConstants.SH_ESAC:
|
||||
case ITokenConstants.SH_CASE:
|
||||
case ITokenConstants.SH_CASE_CONDITION_END:
|
||||
case ITokenConstants.SH_FOR:
|
||||
case ITokenConstants.SH_IF:
|
||||
case ITokenConstants.SH_ELIF:
|
||||
case ITokenConstants.SH_ELSE:
|
||||
case ITokenConstants.SH_FI:
|
||||
case ITokenConstants.SH_DONE:
|
||||
handleError(token,
|
||||
AutoconfEditorMessages.getFormattedString(UNTERMINATED_CONSTRUCT, parent.getName()));
|
||||
tokenizer.unreadToken(token);
|
||||
throw new BlockEndCondition(token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -779,11 +758,7 @@ public class AutoconfParser {
|
|||
* @param token
|
||||
* @param classes
|
||||
*/
|
||||
private void checkBlockValidity(
|
||||
AutoconfElement parent,
|
||||
Token token,
|
||||
Class<?>[] classes,
|
||||
String errorMessage) {
|
||||
private void checkBlockValidity(AutoconfElement parent, Token token, Class<?>[] classes, String errorMessage) {
|
||||
for (int i = 0; i < classes.length; i++) {
|
||||
if (classes[i].isInstance(parent)) {
|
||||
return;
|
||||
|
@ -800,8 +775,8 @@ public class AutoconfParser {
|
|||
*
|
||||
* @return
|
||||
*/
|
||||
private AutoconfMacroElement createMacroElement (String name){
|
||||
if (name.equals("AC_INIT")){ //$NON-NLS-1$
|
||||
private AutoconfMacroElement createMacroElement(String name) {
|
||||
if (name.equals("AC_INIT")) { //$NON-NLS-1$
|
||||
return new AcInitElement(name);
|
||||
}
|
||||
return new AutoconfMacroElement(name);
|
||||
|
@ -855,7 +830,7 @@ public class AutoconfParser {
|
|||
parm1 = macro.getParameter(1);
|
||||
|
||||
tokenizer.setM4Quote(parm0, parm1);
|
||||
} else if ("changecom".equals(name)) { //$NON-NLS-1$
|
||||
} else if ("changecom".equals(name)) { //$NON-NLS-1$
|
||||
// change comment delimiters
|
||||
validateMacroParameterCount(macro, token, 2);
|
||||
|
||||
|
@ -875,8 +850,7 @@ public class AutoconfParser {
|
|||
}
|
||||
|
||||
// now validate that the macro is properly terminated
|
||||
if (!(parent instanceof AutoconfMacroArgumentElement)
|
||||
&& !(parent instanceof AutoconfMacroElement)
|
||||
if (!(parent instanceof AutoconfMacroArgumentElement) && !(parent instanceof AutoconfMacroElement)
|
||||
&& !(parent instanceof AutoconfForElement)) {
|
||||
Token peek = tokenizer.peekToken();
|
||||
if (peek.getType() == ITokenConstants.RPAREN) {
|
||||
|
@ -889,11 +863,11 @@ public class AutoconfParser {
|
|||
|
||||
private void validateMacroParameterCount(AutoconfMacroElement macro, Token token, int count) {
|
||||
if (macro.getParameterCount() < count) {
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString("M4MacroArgsTooFew",
|
||||
macro.getName(), Integer.valueOf(2))); //$NON-NLS-1$
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString("M4MacroArgsTooFew", macro.getName(),
|
||||
Integer.valueOf(2))); //$NON-NLS-1$
|
||||
} else if (macro.getParameterCount() > count) {
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString("M4MacroArgsTooMany",
|
||||
macro.getName(), Integer.valueOf(2))); //$NON-NLS-1$
|
||||
handleError(token, AutoconfEditorMessages.getFormattedString("M4MacroArgsTooMany", macro.getName(),
|
||||
Integer.valueOf(2))); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -967,8 +941,7 @@ public class AutoconfParser {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (token.getType() == ITokenConstants.COMMA
|
||||
|| token.getType() == ITokenConstants.RPAREN
|
||||
if (token.getType() == ITokenConstants.COMMA || token.getType() == ITokenConstants.RPAREN
|
||||
|| token.getType() == ITokenConstants.EOF) {
|
||||
|
||||
arg.setName(argBuffer.toString());
|
||||
|
@ -1049,13 +1022,8 @@ public class AutoconfParser {
|
|||
} catch (BadLocationException e) {
|
||||
// Don't care if we blow up trying to issue marker
|
||||
}
|
||||
errorHandler.handleError(new ParseException(
|
||||
message,
|
||||
token.getOffset(),
|
||||
token.getOffset() + token.getLength(),
|
||||
lineNumber,
|
||||
startColumn, endColumn,
|
||||
severity));
|
||||
errorHandler.handleError(new ParseException(message, token.getOffset(),
|
||||
token.getOffset() + token.getLength(), lineNumber, startColumn, endColumn, severity));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1063,7 +1031,7 @@ public class AutoconfParser {
|
|||
* Figure out the error location and create a marker and message for it.
|
||||
* @param exception
|
||||
*/
|
||||
protected void handleError (InvalidMacroException exception) {
|
||||
protected void handleError(InvalidMacroException exception) {
|
||||
AutoconfElement element = exception.getBadElement();
|
||||
|
||||
if (errorHandler != null) {
|
||||
|
@ -1078,13 +1046,8 @@ public class AutoconfParser {
|
|||
} catch (BadLocationException e) {
|
||||
// Don't care if we blow up trying to issue marker
|
||||
}
|
||||
errorHandler.handleError(new ParseException(
|
||||
exception.getMessage(),
|
||||
element.getStartOffset(),
|
||||
element.getEndOffset(),
|
||||
lineNumber,
|
||||
startColumn, endColumn,
|
||||
IMarker.SEVERITY_ERROR));
|
||||
errorHandler.handleError(new ParseException(exception.getMessage(), element.getStartOffset(),
|
||||
element.getEndOffset(), lineNumber, startColumn, endColumn, IMarker.SEVERITY_ERROR));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1092,4 +1055,3 @@ public class AutoconfParser {
|
|||
return errorHandler;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@ import org.eclipse.core.resources.IMarker;
|
|||
import org.eclipse.jface.text.BadLocationException;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
|
||||
|
||||
/**
|
||||
* This tokenizer traverses autotools-style text (m4 or configure.ac) to support the
|
||||
* autoconf parser. It tracks the current context (m4 macro call or shell commands)
|
||||
|
@ -329,9 +328,11 @@ public class AutoconfTokenizer {
|
|||
}
|
||||
|
||||
if (quoteLevel > 0) {
|
||||
handleError(startOffset, offset, AutoconfEditorMessages.getFormattedString(UNMATCHED_LEFT_QUOTE, m4CloseQuote));
|
||||
handleError(startOffset, offset,
|
||||
AutoconfEditorMessages.getFormattedString(UNMATCHED_LEFT_QUOTE, m4CloseQuote));
|
||||
} else if (quoteLevel < 0) {
|
||||
handleError(startOffset, offset, AutoconfEditorMessages.getFormattedString(UNMATCHED_RIGHT_QUOTE, m4OpenQuote));
|
||||
handleError(startOffset, offset,
|
||||
AutoconfEditorMessages.getFormattedString(UNMATCHED_RIGHT_QUOTE, m4OpenQuote));
|
||||
}
|
||||
|
||||
return makeToken(ITokenConstants.M4_STRING, buffer.toString());
|
||||
|
@ -365,8 +366,7 @@ public class AutoconfTokenizer {
|
|||
return makeToken(type, buffer.toString());
|
||||
}
|
||||
|
||||
private void handleError(int start, int end,
|
||||
String message) {
|
||||
private void handleError(int start, int end, String message) {
|
||||
if (errorHandler != null) {
|
||||
int lineNumber = 0;
|
||||
int startColumn = 0;
|
||||
|
@ -379,11 +379,7 @@ public class AutoconfTokenizer {
|
|||
} catch (BadLocationException e) {
|
||||
// Don't care if we blow up trying to issue marker
|
||||
}
|
||||
errorHandler.handleError(new ParseException(
|
||||
message,
|
||||
start, end,
|
||||
lineNumber,
|
||||
startColumn, endColumn,
|
||||
errorHandler.handleError(new ParseException(message, start, end, lineNumber, startColumn, endColumn,
|
||||
IMarker.SEVERITY_ERROR));
|
||||
}
|
||||
}
|
||||
|
@ -413,9 +409,8 @@ public class AutoconfTokenizer {
|
|||
}
|
||||
|
||||
private Token makeToken(int type) {
|
||||
return new Token(type,
|
||||
new String(chars, startOffset, offset - startOffset),
|
||||
document, startOffset, offset - startOffset);
|
||||
return new Token(type, new String(chars, startOffset, offset - startOffset), document, startOffset,
|
||||
offset - startOffset);
|
||||
}
|
||||
|
||||
private Token makeToken(int type, String text) {
|
||||
|
@ -427,7 +422,7 @@ public class AutoconfTokenizer {
|
|||
}
|
||||
|
||||
private boolean isLeadIdentifierChar(char ch) {
|
||||
return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '_';
|
||||
return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '_';
|
||||
}
|
||||
|
||||
public Token peekToken() {
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
package org.eclipse.cdt.autotools.ui.editors.parser;
|
||||
|
||||
|
||||
/**
|
||||
* Clients implement this interface to handle errors encountered while parsing.
|
||||
* @author eswartz
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
package org.eclipse.cdt.autotools.ui.editors.parser;
|
||||
|
||||
|
||||
/**
|
||||
* Clients implement this interface to identify what identifiers represent
|
||||
* macros for the autoconf tree.
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
package org.eclipse.cdt.autotools.ui.editors.parser;
|
||||
|
||||
|
||||
/**
|
||||
* Clients implement this interface to validate macro calls.
|
||||
* @author eswartz
|
||||
|
|
|
@ -93,5 +93,4 @@ public interface ITokenConstants {
|
|||
/** an sh backtick-quoted string */
|
||||
int SH_STRING_BACKTICK = 69;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -23,34 +23,42 @@ public class ParseException extends Exception {
|
|||
int endColumn;
|
||||
private int startOffset;
|
||||
private int endOffset;
|
||||
|
||||
public int getEndColumn() {
|
||||
return endColumn;
|
||||
}
|
||||
|
||||
public void setEndColumn(int endColumn) {
|
||||
this.endColumn = endColumn;
|
||||
}
|
||||
|
||||
public int getLineNumber() {
|
||||
return lineNumber;
|
||||
}
|
||||
|
||||
public void setLineNumber(int lineNumber) {
|
||||
this.lineNumber = lineNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public int getStartColumn() {
|
||||
return startColumn;
|
||||
}
|
||||
|
||||
public void setStartColumn(int startColumn) {
|
||||
this.startColumn = startColumn;
|
||||
}
|
||||
public ParseException(String message,
|
||||
int startOffset, int endOffset,
|
||||
int lineNumber, int startColumn, int endColumn, int severity) {
|
||||
|
||||
public ParseException(String message, int startOffset, int endOffset, int lineNumber, int startColumn,
|
||||
int endColumn, int severity) {
|
||||
super();
|
||||
this.message = message;
|
||||
this.startOffset = startOffset;
|
||||
|
@ -60,15 +68,19 @@ public class ParseException extends Exception {
|
|||
this.endColumn = endColumn;
|
||||
this.severity = severity;
|
||||
}
|
||||
|
||||
public int getSeverity() {
|
||||
return severity;
|
||||
}
|
||||
|
||||
public void setSeverity(int severity) {
|
||||
this.severity = severity;
|
||||
}
|
||||
|
||||
public int getStartOffset() {
|
||||
return startOffset;
|
||||
}
|
||||
|
||||
public int getEndOffset() {
|
||||
return endOffset;
|
||||
}
|
||||
|
|
|
@ -15,8 +15,7 @@ package org.eclipse.cdt.internal.autotools.ui;
|
|||
|
||||
import org.eclipse.cdt.managedbuilder.ui.properties.AbstractCBuildPropertyTab;
|
||||
|
||||
public abstract class AbstractAutotoolsCPropertyTab extends
|
||||
AbstractCBuildPropertyTab {
|
||||
public abstract class AbstractAutotoolsCPropertyTab extends AbstractCBuildPropertyTab {
|
||||
|
||||
@Override
|
||||
public boolean isIndexerAffected() {
|
||||
|
|
|
@ -25,7 +25,6 @@ import org.eclipse.jface.resource.ImageDescriptor;
|
|||
import org.eclipse.jface.resource.ImageRegistry;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
|
||||
|
||||
/**
|
||||
* Bundle of all images used by the C plugin.
|
||||
*/
|
||||
|
@ -39,41 +38,41 @@ public class AutotoolsUIPluginImages {
|
|||
|
||||
static {
|
||||
try {
|
||||
fgIconBaseURL= new URL(AutotoolsUIPlugin.getDefault().getBundle().getEntry("/"), "icons/" ); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
fgIconBaseURL = new URL(AutotoolsUIPlugin.getDefault().getBundle().getEntry("/"), "icons/"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} catch (MalformedURLException e) {
|
||||
CUIPlugin.log(e);
|
||||
}
|
||||
}
|
||||
private static final String NAME_PREFIX= AutotoolsUIPlugin.PLUGIN_ID + '.';
|
||||
private static final int NAME_PREFIX_LENGTH= NAME_PREFIX.length();
|
||||
private static final String NAME_PREFIX = AutotoolsUIPlugin.PLUGIN_ID + '.';
|
||||
private static final int NAME_PREFIX_LENGTH = NAME_PREFIX.length();
|
||||
|
||||
public static final String T_OBJ= "ac16/"; //$NON-NLS-1$
|
||||
public static final String T_BUILD= "elcl16/"; //$NON-NLS-1$
|
||||
public static final String T_OBJ = "ac16/"; //$NON-NLS-1$
|
||||
public static final String T_BUILD = "elcl16/"; //$NON-NLS-1$
|
||||
|
||||
public static final String IMG_OBJS_IF= NAME_PREFIX + "if_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_ELSE= NAME_PREFIX + "else_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_ELIF= NAME_PREFIX + "elif_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_CASE= NAME_PREFIX + "case_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_CONDITION= NAME_PREFIX + "condition_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_FOR= NAME_PREFIX + "for_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_WHILE= NAME_PREFIX + "while_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_ACMACRO= NAME_PREFIX + "acmacro_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_AMMACRO= NAME_PREFIX + "ammacro_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_IF = NAME_PREFIX + "if_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_ELSE = NAME_PREFIX + "else_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_ELIF = NAME_PREFIX + "elif_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_CASE = NAME_PREFIX + "case_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_CONDITION = NAME_PREFIX + "condition_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_FOR = NAME_PREFIX + "for_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_WHILE = NAME_PREFIX + "while_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_ACMACRO = NAME_PREFIX + "acmacro_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_AMMACRO = NAME_PREFIX + "ammacro_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_OBJS_ACMACRO_ARG = NAME_PREFIX + "acmacro_arg_obj.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_BUILD_CONFIG = NAME_PREFIX + "build_configs.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_CFG_CATEGORY = NAME_PREFIX + "config_category.gif"; //$NON-NLS-1$
|
||||
public static final String IMG_CFG_TOOL = NAME_PREFIX + "config_tool.gif"; //$NON-NLS-1$
|
||||
|
||||
public static final ImageDescriptor DESC_OBJS_IF= createManaged(T_OBJ, IMG_OBJS_IF);
|
||||
public static final ImageDescriptor DESC_OBJS_ELSE= createManaged(T_OBJ, IMG_OBJS_ELSE);
|
||||
public static final ImageDescriptor DESC_OBJS_ELIF= createManaged(T_OBJ, IMG_OBJS_ELIF);
|
||||
public static final ImageDescriptor DESC_OBJS_CASE= createManaged(T_OBJ, IMG_OBJS_CASE);
|
||||
public static final ImageDescriptor DESC_OBJS_IF = createManaged(T_OBJ, IMG_OBJS_IF);
|
||||
public static final ImageDescriptor DESC_OBJS_ELSE = createManaged(T_OBJ, IMG_OBJS_ELSE);
|
||||
public static final ImageDescriptor DESC_OBJS_ELIF = createManaged(T_OBJ, IMG_OBJS_ELIF);
|
||||
public static final ImageDescriptor DESC_OBJS_CASE = createManaged(T_OBJ, IMG_OBJS_CASE);
|
||||
public static final ImageDescriptor DESC_OBJS_CONDITION = createManaged(T_OBJ, IMG_OBJS_CONDITION);
|
||||
public static final ImageDescriptor DESC_OBJS_FOR= createManaged(T_OBJ, IMG_OBJS_FOR);
|
||||
public static final ImageDescriptor DESC_OBJS_WHILE= createManaged(T_OBJ, IMG_OBJS_WHILE);
|
||||
public static final ImageDescriptor DESC_OBJS_ACMACRO= createManaged(T_OBJ, IMG_OBJS_ACMACRO);
|
||||
public static final ImageDescriptor DESC_OBJS_AMMACRO= createManaged(T_OBJ, IMG_OBJS_AMMACRO);
|
||||
public static final ImageDescriptor DESC_OBJS_ACMACRO_ARG= createManaged(T_OBJ, IMG_OBJS_ACMACRO_ARG);
|
||||
public static final ImageDescriptor DESC_OBJS_FOR = createManaged(T_OBJ, IMG_OBJS_FOR);
|
||||
public static final ImageDescriptor DESC_OBJS_WHILE = createManaged(T_OBJ, IMG_OBJS_WHILE);
|
||||
public static final ImageDescriptor DESC_OBJS_ACMACRO = createManaged(T_OBJ, IMG_OBJS_ACMACRO);
|
||||
public static final ImageDescriptor DESC_OBJS_AMMACRO = createManaged(T_OBJ, IMG_OBJS_AMMACRO);
|
||||
public static final ImageDescriptor DESC_OBJS_ACMACRO_ARG = createManaged(T_OBJ, IMG_OBJS_ACMACRO_ARG);
|
||||
public static final ImageDescriptor DESC_BUILD_CONFIG = createManaged(T_BUILD, IMG_BUILD_CONFIG);
|
||||
public static final ImageDescriptor DESC_CFG_CATEGORY = createManaged(T_BUILD, IMG_CFG_CATEGORY);
|
||||
public static final ImageDescriptor DESC_CFG_TOOL = createManaged(T_BUILD, IMG_CFG_TOOL);
|
||||
|
@ -83,7 +82,8 @@ public class AutotoolsUIPluginImages {
|
|||
}
|
||||
|
||||
private static ImageDescriptor createManaged(ImageRegistry registry, String prefix, String name) {
|
||||
ImageDescriptor result= ImageDescriptor.createFromURL(makeIconFileURL(prefix, name.substring(NAME_PREFIX_LENGTH)));
|
||||
ImageDescriptor result = ImageDescriptor
|
||||
.createFromURL(makeIconFileURL(prefix, name.substring(NAME_PREFIX_LENGTH)));
|
||||
registry.put(name, result);
|
||||
return result;
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ public class AutotoolsUIPluginImages {
|
|||
}
|
||||
|
||||
private static URL makeIconFileURL(String prefix, String name) {
|
||||
StringBuilder buffer= new StringBuilder(prefix);
|
||||
StringBuilder buffer = new StringBuilder(prefix);
|
||||
buffer.append(name);
|
||||
try {
|
||||
return new URL(fgIconBaseURL, buffer.toString());
|
||||
|
@ -111,10 +111,10 @@ public class AutotoolsUIPluginImages {
|
|||
* Sets all available image descriptors for the given action.
|
||||
*/
|
||||
public static void setImageDescriptors(IAction action, String type, String relPath) {
|
||||
if (relPath.startsWith(NAME_PREFIX))
|
||||
relPath= relPath.substring(NAME_PREFIX_LENGTH);
|
||||
if (relPath.startsWith(NAME_PREFIX))
|
||||
relPath = relPath.substring(NAME_PREFIX_LENGTH);
|
||||
action.setDisabledImageDescriptor(create("d" + type, relPath)); //$NON-NLS-1$
|
||||
// action.setHoverImageDescriptor(create("c" + type, relPath)); //$NON-NLS-1$
|
||||
// action.setHoverImageDescriptor(create("c" + type, relPath)); //$NON-NLS-1$
|
||||
action.setImageDescriptor(create("e" + type, relPath)); //$NON-NLS-1$
|
||||
|
||||
// We are still not sure about this, let see TF results first.
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui;
|
||||
|
||||
|
||||
public class CBuildStepsConsole extends Console {
|
||||
private static final String CONTEXT_MENU_ID = "CAutotoolsBuildStepsConsole"; //$NON-NLS-1$
|
||||
private static final String CONSOLE_NAME = ConsoleMessages.getString("BuildStepsConsole.name"); //$NON-NLS-1$
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.autotools.ui;
|
||||
|
||||
|
||||
public class CConfigureConsole extends Console {
|
||||
private static final String CONTEXT_MENU_ID = "CAutotoolsConfigureConsole"; //$NON-NLS-1$
|
||||
private static final String CONSOLE_NAME = ConsoleMessages.getString("ConfigureConsole.name"); //$NON-NLS-1$
|
||||
|
|
|
@ -18,7 +18,6 @@ import org.eclipse.jface.text.IDocument;
|
|||
import org.eclipse.jface.text.IRegion;
|
||||
import org.eclipse.jface.text.Region;
|
||||
|
||||
|
||||
/**
|
||||
* This is a helper class for the text editor to be able to determine, given a
|
||||
* particular offset in a document, various candidates segments for things like
|
||||
|
@ -28,7 +27,7 @@ public class CWordFinder {
|
|||
|
||||
private static final char CBRACE_L = '{';
|
||||
private static final char CBRACE_R = '}';
|
||||
private static final char BRACE_R = ')';
|
||||
private static final char BRACE_R = ')';
|
||||
|
||||
/**
|
||||
* This method determines for a given offset into a given document what the
|
||||
|
@ -233,16 +232,18 @@ public class CWordFinder {
|
|||
if (bracketcount-- == 0) {
|
||||
do {
|
||||
c = document.getChar(pos--);
|
||||
if (c == BRACE_R) return false;
|
||||
if (c == BRACE_R)
|
||||
return false;
|
||||
} while (Character.isWhitespace(c));
|
||||
// container block seems to be not a function or statement body
|
||||
pos++; // step back one symbol
|
||||
bracketcount = 0; // let's search for upper block
|
||||
pos++; // step back one symbol
|
||||
bracketcount = 0; // let's search for upper block
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (BadLocationException x) { /* Ignore */ }
|
||||
} catch (BadLocationException x) {
|
||||
/* Ignore */ }
|
||||
// return true in case of unknown result or exception
|
||||
return true;
|
||||
}
|
||||
|
@ -255,18 +256,19 @@ public class CWordFinder {
|
|||
* string to search in.
|
||||
* @return number of LFs met.
|
||||
*/
|
||||
public static int countLFs (String s) {
|
||||
public static int countLFs(String s) {
|
||||
int counter = 0;
|
||||
char lf = 0;
|
||||
char c;
|
||||
for (int i=0; i<s.length(); i++) {
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
c = s.charAt(i);
|
||||
if (lf == 0) {
|
||||
if (c == '\n' || c == '\r') {
|
||||
lf = c;
|
||||
counter++;
|
||||
}
|
||||
} else if (lf == c) counter++;
|
||||
} else if (lf == c)
|
||||
counter++;
|
||||
}
|
||||
return counter;
|
||||
}
|
||||
|
@ -278,9 +280,10 @@ public class CWordFinder {
|
|||
* text to check
|
||||
* @return true if curled brace found.
|
||||
*/
|
||||
public static boolean hasCBraces (String s) {
|
||||
if (s.indexOf(CBRACE_L) > -1 || s.indexOf(CBRACE_R) > -1) return true;
|
||||
else return false;
|
||||
public static boolean hasCBraces(String s) {
|
||||
if (s.indexOf(CBRACE_L) > -1 || s.indexOf(CBRACE_R) > -1)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue