1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 18:26:01 +02:00

Merge remote-tracking branch 'origin/master' into bug_45203

This commit is contained in:
Sergey Prigogin 2013-01-24 20:43:18 -08:00
commit b9396d3a4a
229 changed files with 5416 additions and 1935 deletions

View file

@ -21,7 +21,7 @@ import org.eclipse.core.runtime.IPath;
*/
public class AutotoolsProblemMarkerInfo {
public static enum Type{PACKAGE, HEADER, PROG, FILE, GENERIC}
public static enum Type{PACKAGE, HEADER, PROG, LIB, FILE, GENERIC}
private ProblemMarkerInfo marker;

View file

@ -175,6 +175,8 @@ public class ErrorParser extends MarkerGenerator implements IErrorParser {
return AutotoolsProblemMarkerInfo.Type.HEADER;
if (typeString.equals("file"))
return AutotoolsProblemMarkerInfo.Type.FILE;
if (typeString.equals("lib"))
return AutotoolsProblemMarkerInfo.Type.LIB;
return null;
}

View file

@ -147,6 +147,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
detector.processLine("#define \t MACRO_1 VALUE");
detector.processLine("#define MACRO_2 \t VALUE");
detector.processLine("#define MACRO_3 VALUE \t");
detector.processLine("#define MACRO_4 VALUE + 1");
detector.shutdownForLanguage();
detector.shutdown();
@ -155,6 +156,7 @@ public class GCCBuiltinSpecsDetectorTest extends BaseTestCase {
assertEquals(new CMacroEntry("MACRO_1", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(new CMacroEntry("MACRO_2", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(new CMacroEntry("MACRO_3", "VALUE", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(new CMacroEntry("MACRO_4", "VALUE + 1", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY), entries.get(index++));
assertEquals(index, entries.size());
}

View file

@ -2522,7 +2522,13 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
* The function never returns number smaller than 1.
*/
public int getOptimalParallelJobNum() {
return Runtime.getRuntime().availableProcessors();
// Bug 398426: On my Mac running parallel builds at full tilt hangs the desktop.
// Need to pull it back one.
int j = Runtime.getRuntime().availableProcessors();
if (j > 1 && Platform.getOS().equals(Platform.OS_MACOSX))
return j - 1;
else
return j;
}
/**

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2009, 2011 Andrew Gvozdev and others.
* Copyright (c) 2009, 2013 Andrew Gvozdev and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,7 +12,9 @@
package org.eclipse.cdt.managedbuilder.internal.language.settings.providers;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.cdt.core.AbstractExecutableExtensionBase;
import org.eclipse.cdt.core.CCorePlugin;
@ -59,7 +61,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
languageSettings = getLanguageSettings(rcDescription);
}
List<ICLanguageSettingEntry> list = new ArrayList<ICLanguageSettingEntry>();
Set<ICLanguageSettingEntry> set = new LinkedHashSet<ICLanguageSettingEntry>();
if (languageSettings != null) {
for (ICLanguageSetting langSetting : languageSettings) {
@ -86,8 +88,8 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
IStringVariableManager mngr = VariablesPlugin.getDefault().getStringVariableManager();
String projectRootedPath = mngr.generateVariableExpression("workspace_loc", rc.getProject().getName()) + Path.SEPARATOR + pathStr; //$NON-NLS-1$
ICLanguageSettingEntry projectRootedEntry = (ICLanguageSettingEntry) CDataUtil.createEntry(kind, projectRootedPath, projectRootedPath, null, entry.getFlags());
if (! list.contains(projectRootedEntry)) {
list.add(projectRootedEntry);
if (!set.contains(projectRootedEntry)) {
set.add(projectRootedEntry);
}
}
} catch (CdtVariableException e) {
@ -97,8 +99,8 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
}
}
if (! list.contains(entry)) {
list.add(entry);
if (!set.contains(entry)) {
set.add(entry);
}
}
}
@ -107,7 +109,7 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
}
}
}
return LanguageSettingsStorage.getPooledList(list);
return LanguageSettingsStorage.getPooledList(new ArrayList<ICLanguageSettingEntry>(set));
}
/**

View file

@ -45,7 +45,7 @@ public class GCCBuiltinSpecsDetector extends ToolchainBuiltinSpecsDetector imple
new IncludePathOptionParser("#include <(\\S.*)>", "$1", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY),
new IncludePathOptionParser("#framework <(\\S.*)>", "$1", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY | ICSettingEntry.FRAMEWORKS_MAC),
new MacroOptionParser("#define\\s+(\\S*\\(.*?\\))\\s*(.*)", "$1", "$2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY),
new MacroOptionParser("#define\\s+(\\S*)\\s*(\\S*)", "$1", "$2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY),
new MacroOptionParser("#define\\s+(\\S*)\\s*(.*)", "$1", "$2", ICSettingEntry.BUILTIN | ICSettingEntry.READONLY),
};
/**

View file

@ -32,7 +32,7 @@ BuilderSettingsTab_8=&Expand Env. Variable Refs in Makefiles
BuilderSettingsTab_9=Build settings
BuilderSettingsTab_10=Stop on first build error
BuilderSettingsTab_EnableParallelBuild=Enable parallel build
BuilderSettingsTab_UseOptimalJobs=Use number of processors ({0})
BuilderSettingsTab_UseOptimalJobs=Use optimal jobs ({0})
BuilderSettingsTab_UseParallelJobs=Use parallel jobs:
BuilderSettingsTab_UseUnlimitedJobs=Use unlimited jobs
BuilderSettingsTab_14=Workbench Build Behavior

View file

@ -35,7 +35,7 @@ import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.core.parser.tests.ast2.AST2BaseTest;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase;
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor;
import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser;
@ -83,7 +83,7 @@ public abstract class CodanFastCxxAstTestCase extends TestCase {
protected IASTTranslationUnit parse(String code, ParserLanguage lang, boolean gcc) {
FileContent codeReader = FileContent.create("code.c", code.toCharArray());
IScannerInfo scannerInfo = new ScannerInfo();
IScanner scanner = AST2BaseTest.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner = AST2TestBase.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
ISourceCodeParser parser2 = null;
if (lang == ParserLanguage.CPP) {
ICPPParserExtensionConfiguration config = null;

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %fragmentName.aix
Bundle-SymbolicName: org.eclipse.cdt.core.aix; singleton:=true
Bundle-Version: 5.1.1.qualifier
Bundle-Version: 5.3.0.qualifier
Bundle-Vendor: %providerName
Fragment-Host: org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)"
Bundle-Localization: plugin

View file

@ -7,14 +7,21 @@
#ifdef __cplusplus
extern "C" {
#endif
/* Inaccessible static: hasPTY */
/*
* Class: org_eclipse_cdt_utils_pty_PTY
* Method: openMaster
* Signature: ()Ljava/lang/String;
* Signature: (Z)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster
(JNIEnv *, jobject);
(JNIEnv *, jobject, jboolean);
/*
* Class: org_eclipse_cdt_utils_pty_PTY
* Method: change_window_size
* Signature: (III)I
*/
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size
(JNIEnv *, jobject, jint, jint, jint);
#ifdef __cplusplus
}

View file

@ -29,7 +29,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1
* Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;I)I
*/
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
(JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray, jstring, jint);
(JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray, jstring, jint, jboolean);
/*
* Class: org_eclipse_cdt_utils_spawner_Spawner

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
* Copyright (c) 2003, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
* IBM Corporation - port of 248071
*******************************************************************************/
#include <unistd.h>
@ -16,7 +17,13 @@
#include <errno.h>
extern pid_t exec0(const char *path, char *const argv[],
char *const envp[], const char *dirpath,
int channels[3] );
char *const envp[], const char *dirpath,
int channels[3]);
extern pid_t exec_pty(const char *path, char *const argv[],
char *const envp[], const char *dirpath,
int channels[3], const char *pts_name, int fdm,
int console);
extern int wait0(pid_t pid);

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004 QNX Software Systems and others.
* Copyright (c) 2004, 2013 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* QNX Software Systems - initial API and implementation
* IBM Corporation - port of 248071
*******************************************************************************/
#include "exec0.h"
@ -20,11 +21,11 @@
#include <termios.h>
/* from pfind.c */
extern char *pfind(const char *name);
extern char *pfind(const char *name, char * const envp[]);
pid_t
exec_pty(const char *path, char *const argv[], char *const envp[],
const char *dirpath, int channels[3], const char *pts_name, int fdm)
const char *dirpath, int channels[3], const char *pts_name, int fdm, int console)
{
int pipe2[2];
pid_t childpid;
@ -34,7 +35,7 @@ exec_pty(const char *path, char *const argv[], char *const envp[],
* We use pfind() to check that the program exists and is an executable.
* If not pass the error up. Also execve() wants a full path.
*/
full_path = pfind(path);
full_path = pfind(path, envp);
if (full_path == NULL) {
fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : "");
return -1;
@ -43,7 +44,7 @@ exec_pty(const char *path, char *const argv[], char *const envp[],
/*
* Make sure we can create our pipes before forking.
*/
if (channels != NULL) {
if (channels != NULL && console) {
if (pipe(pipe2) < 0) {
fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
free(full_path);
@ -64,6 +65,11 @@ exec_pty(const char *path, char *const argv[], char *const envp[],
if (channels != NULL) {
int fds;
if (!console && setsid() < 0) {
perror("setsid()");
return -1;
}
fds = ptys_open(fdm, pts_name);
if (fds < 0) {
fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno));
@ -71,17 +77,28 @@ exec_pty(const char *path, char *const argv[], char *const envp[],
}
/* Close the read end of pipe2 */
if (close(pipe2[0]) == -1)
if (console && close(pipe2[0]) == -1)
perror("close(pipe2[0]))");
/* close the master, no need in the child */
close(fdm);
set_noecho(fds);
if (console) {
set_noecho(fds);
if (setpgid(getpid(), getpid()) < 0) {
perror("setpgid()");
return -1;
}
}
/* redirections */
dup2(fds, STDIN_FILENO); /* dup stdin */
dup2(fds, STDOUT_FILENO); /* dup stdout */
dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
if (console) {
dup2(pipe2[1], STDERR_FILENO); /* dup stderr */
} else {
dup2(fds, STDERR_FILENO); /* dup stderr */
}
close(fds); /* done with fds. */
}
@ -104,16 +121,20 @@ exec_pty(const char *path, char *const argv[], char *const envp[],
} else if (childpid != 0) { /* parent */
set_noecho(fdm);
if (console) {
set_noecho(fdm);
}
if (channels != NULL) {
/* close the write end of pipe1 */
if (close(pipe2[1]) == -1)
perror("close(pipe2[1])");
channels[0] = fdm; /* Input Stream. */
channels[1] = fdm; /* Output Stream. */
channels[2] = pipe2[0]; /* stderr Stream. */
/*channels[2] = fdm; Input Stream. */
if (console) {
/* close the write end of pipe1 */
if (close(pipe2[1]) == -1)
perror("close(pipe2[1])");
channels[2] = pipe2[0]; /* stderr Stream. */
} else {
channels[2] = fdm; /* Error Stream. */
}
}
free(full_path);

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
* Copyright (c) 2003, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
* IBM Corporation - port of 248071
*******************************************************************************/
#include "exec0.h"
@ -19,7 +20,7 @@
#include <stdlib.h>
/* from pfind.c */
extern char *pfind(const char *name);
extern char *pfind(const char *name, char * const envp[]);
pid_t
exec0(const char *path, char *const argv[], char *const envp[],
@ -33,7 +34,7 @@ exec0(const char *path, char *const argv[], char *const envp[],
* We use pfind() to check that the program exists and is an executable.
* If not pass the error up. Also execve() wants a full path.
*/
full_path = pfind(path);
full_path = pfind(path, envp);
if (full_path == NULL) {
fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : "");
return -1;
@ -91,6 +92,8 @@ exec0(const char *path, char *const argv[], char *const envp[],
close(fd++);
}
setpgid(getpid(), getpid());
if (envp[0] == NULL) {
execv(full_path, argv);
} else {
@ -135,9 +138,19 @@ int wait0(pid_t pid)
int status;
int val = -1;
if (pid < 0 || waitpid(pid, &status, 0) < 0)
if (pid < 0)
return -1;
for (;;) {
if (waitpid(pid, &status, 0) < 0) {
if (errno == EINTR) {
// interrupted system call - retry
continue;
}
}
break;
}
if (WIFEXITED(status)) {
val = WEXITSTATUS(status);
}

View file

@ -30,7 +30,7 @@
*/
int ptym_open (char *pts_name);
int ptys_open (int fdm, char * pts_name);
int ptys_open (int fdm, const char * pts_name);
void set_noecho(int fd);
int

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
/******************************************************************************
* Copyright (c) 2003, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,11 +8,12 @@
* Contributors:
* IBM Corporation - initial API and implementation
* QNX Software Systems
* IBM Corporation - port of 248071
*******************************************************************************/
#ifndef _OPENPTY_H
#define _OPENPTY_H
int ptym_open (char *pts_name);
int ptys_open (int fdm, char * pts_name);
int ptys_open (int fdm, const char * pts_name);
void set_noecho(int fd);
#endif

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
* Copyright (c) 2003, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
* IBM Corporation - port of 248071
*******************************************************************************/
/*
@ -23,8 +24,25 @@
#define PATH_MAX 1024
#endif
#define PATH_DEF "PATH="
const int path_def_len = 5; /* strlen(PATH_DEF); */
char * path_val(char * const envp[])
{
int i;
if (envp == NULL || envp[0] == NULL)
return getenv("PATH" );
for(i = 0; envp[i] != NULL; i++){
char* p = envp[i];
if(!strncmp(PATH_DEF, p, path_def_len)){
return p + path_def_len;
}
}
return NULL;
}
char * pfind(const char *name)
char * pfind(const char *name, char * const envp[])
{
char *tok;
char *sp;
@ -46,7 +64,7 @@ char * pfind(const char *name)
}
/* Search in the PATH environment. */
path = getenv("PATH" );
path = path_val( envp );
if (path == NULL || strlen(path) <= 0) {
fprintf(stderr, "Unable to get $PATH.\n");
@ -79,7 +97,7 @@ int main(int argc, char **argv)
char *fullpath;
for (i=1; i<argc; i++) {
fullpath = pfind(argv[i]);
fullpath = pfind(argv[i], NULL);
if (fullpath == NULL)
printf("Unable to find %s in $PATH.\n", argv[i]);
else

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
* Copyright (c) 2003, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,8 +8,9 @@
* Contributors:
* IBM Corporation - initial API and implementation
* QNX Software Systems
* IBM Corporation - port of 248071
*******************************************************************************/
#include <sys/ioctl.h>
#include "PTY.h"
#include "openpty.h"
@ -19,7 +20,7 @@
* Signature: ()I
*/
JNIEXPORT jstring JNICALL
Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj) {
Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj, jboolean console) {
jfieldID fid; /* Store the field ID */
jstring jstr = NULL;
int master = -1;
@ -30,8 +31,10 @@ Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj) {
master = ptym_open(line);
if (master >= 0) {
/* turn off echo */
set_noecho(master);
// turn off echo
if (console) {
set_noecho(master);
}
/* Get a reference to the obj's class */
cls = (*env)->GetObjectClass(env, jobj);
@ -48,3 +51,22 @@ Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj) {
}
return jstr;
}
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size
(JNIEnv *env, jobject jobj, jint fdm, jint width, jint height)
{
#ifdef TIOCGWINSZ
struct winsize win;
win.ws_col = width;
win.ws_row = height;
win.ws_xpixel = 0;
win.ws_ypixel = 0;
return ioctl(fdm, TIOCSWINSZ, &win);
#else
return 0;
#endif
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and others.
* Copyright (c) 2003, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,6 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
* QNX Software Systems
* IBM Corporation - port of 248071
*******************************************************************************/
#include <unistd.h>
@ -90,13 +91,13 @@ static void free_c_array(char **c_array)
*/
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
(JNIEnv *env, jobject jobj, jobjectArray jcmd, jobjectArray jenv, jstring jdir, jintArray jchannels,
jstring jslaveName, jint masterFD)
jstring jslaveName, jint masterFD, jboolean console)
{
jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0);
const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
const char *pts_name = (*env)->GetStringUTFChars(env, jslaveName, NULL);
char **cmd;
char **envp;
char **cmd = NULL;
char **envp = NULL;
int fd[3];
pid_t pid = -1;
@ -120,7 +121,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
fprintf(stderr, "pts_name: %s\n", pts_name);
#endif
pid = exec_pty(cmd[0], cmd, envp, dirpath, fd, pts_name, masterFD);
pid = exec_pty(cmd[0], cmd, envp, dirpath, fd, pts_name, masterFD, console);
if (pid < 0)
goto bail_out;
@ -147,8 +148,8 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv * env, jobject jobj,
jstring jdir)
{
const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
char **cmd;
char **envp;
char **cmd = NULL;
char **envp = NULL;
pid_t pid = -1;
cmd = alloc_c_array(env, jcmd);
@ -194,8 +195,8 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv * env, jobject jobj,
{
jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0);
const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
char **cmd;
char **envp;
char **cmd = NULL;
char **envp = NULL;
int fd[3];
pid_t pid = -1;

View file

@ -11,7 +11,7 @@
<relativePath>../../pom.xml</relativePath>
</parent>
<version>5.1.1-SNAPSHOT</version>
<version>5.3.0-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.core.aix</artifactId>
<packaging>eclipse-plugin</packaging>

View file

@ -8,10 +8,6 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*
* Created on Sept 28, 2004
*/
package org.eclipse.cdt.core.parser.tests;
import java.io.ByteArrayInputStream;
@ -36,127 +32,110 @@ import org.eclipse.core.runtime.NullProgressMonitor;
/**
* @author dsteffle
*/
public class FileBasePluginTest extends TestCase {
public class FileBasePluginTestCase extends TestCase {
static NullProgressMonitor monitor;
static IWorkspace workspace;
static IProject project;
static FileManager fileManager;
static int numProjects = 0;
static int numProjects;
static Class className;
static ICProject cPrj;
public FileBasePluginTest() {
public FileBasePluginTestCase() {
}
public FileBasePluginTest(String name) {
public FileBasePluginTestCase(String name) {
super(name);
}
private void initialize(Class aClassName){
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
private void initialize(Class aClassName) {
if (CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null) {
//(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
monitor = new NullProgressMonitor();
workspace = ResourcesPlugin.getWorkspace();
try {
cPrj = CProjectHelper.createCCProject("ParserTestProject", "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ //$NON-NLS-2$
project = cPrj.getProject();
// ugly
if (className == null || !className.equals(aClassName)) {
className = aClassName;
numProjects++;
}
} catch ( CoreException e ) {
/*boo*/
} catch (CoreException e) {
// Ignore
}
if (project == null)
throw new NullPointerException("Unable to create project"); //$NON-NLS-1$
//Create file manager
fileManager = new FileManager();
}
}
public FileBasePluginTest(String name, Class className)
{
public FileBasePluginTestCase(String name, Class className) {
super(name);
initialize(className);
}
public void cleanupProject() throws Exception {
numProjects--;
try{
try {
if (numProjects == 0) {
project.delete( true, false, monitor );
project.delete(true, false, monitor);
project = null;
}
} catch( Throwable e ){
/*boo*/
} catch (Throwable e) {
// Ignore
}
}
@Override
protected void tearDown() throws Exception {
if( project == null || !project.exists() )
if (project == null || !project.exists())
return;
IResource [] members = project.members();
for( int i = 0; i < members.length; i++ ){
if( members[i].getName().equals( ".project" ) || members[i].getName().equals( ".cproject" ) ) //$NON-NLS-1$ //$NON-NLS-2$
for (int i = 0; i < members.length; i++) {
if (members[i].getName().equals(".project") || members[i].getName().equals(".cproject")) //$NON-NLS-1$ //$NON-NLS-2$
continue;
if (members[i].getName().equals(".settings"))
continue;
try{
members[i].delete( false, monitor );
} catch( Throwable e ){
/*boo*/
try {
members[i].delete(false, monitor);
} catch (Throwable e) {
// Ignore
}
}
}
// below can be used to work with large files (too large for memory)
// protected IFile importFile(String fileName) throws Exception {
// IFile file = cPrj.getProject().getFile(fileName);
// if (!file.exists()) {
// try{
// FileInputStream fileIn = new FileInputStream(
// CTestPlugin.getDefault().getFileInPlugin(new Path("resources/parser/" + fileName)));
// file.create(fileIn,false, monitor);
// } catch (CoreException e) {
// e.printStackTrace();
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
// }
//
// return file;
// }
protected IFolder importFolder(String folderName) throws Exception {
IFolder folder = project.getProject().getFolder(folderName);
//Create file input stream
if( !folder.exists() )
folder.create( false, false, monitor );
// Create file input stream
if (!folder.exists())
folder.create(false, false, monitor);
return folder;
}
public IFile importFile(String fileName, String contents ) throws Exception{
//Obtain file handle
public IFile importFile(String fileName, String contents) throws Exception {
// Obtain file handle
IFile file = project.getProject().getFile(fileName);
InputStream stream = new ByteArrayInputStream( contents.getBytes() );
//Create file input stream
if( file.exists() )
file.setContents( stream, false, false, monitor );
else
file.create( stream, false, monitor );
InputStream stream = new ByteArrayInputStream(contents.getBytes());
// Create file input stream
if (file.exists()) {
file.setContents(stream, false, false, monitor);
} else {
file.create(stream, false, monitor);
}
fileManager.addFile(file);
return file;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2009, 2010 IBM Corporation and others.
* Copyright (c) 2009, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -9,6 +9,7 @@
* Mike Kucera (IBM)
* Sergey Prigogin (Google)
* Markus Schorn (Wind River Systems)
* Nathan Ridge
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.ast2;
@ -28,19 +29,19 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
/**
* Tests for classes implementing IASTImplicitNameOwner interface.
*/
public class AST2CPPImplicitNameTests extends AST2BaseTest {
public class AST2CPPImplicitNameTests extends AST2TestBase {
public AST2CPPImplicitNameTests() {
}
public AST2CPPImplicitNameTests(String name) {
super(name);
}
public static TestSuite suite() {
return suite(AST2CPPImplicitNameTests.class);
}
public IASTImplicitName[] getImplicitNames(IASTTranslationUnit tu, String contents, String section, int len) {
final int offset = contents.indexOf(section);
assertTrue(offset >= 0);
@ -75,25 +76,25 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
IASTImplicitName n;
n = ba.assertImplicitName("+= 5", 2, ICPPMethod.class);
assertSame(n.resolveBinding(), col.getName(14).resolveBinding());
n = ba.assertImplicitName("+ p", 1, ICPPMethod.class);
assertSame(n.resolveBinding(), col.getName(4).resolveBinding());
n = ba.assertImplicitName("- p", 1, ICPPMethod.class);
assertSame(n.resolveBinding(), col.getName(8).resolveBinding());
n = ba.assertImplicitName("* p", 1, ICPPFunction.class);
assertSame(n.resolveBinding(), col.getName(17).resolveBinding());
n = ba.assertImplicitName("/ p", 1, ICPPFunction.class);
assertSame(n.resolveBinding(), col.getName(23).resolveBinding());
n = ba.assertImplicitName("-p;", 1, ICPPMethod.class);
assertSame(n.resolveBinding(), col.getName(12).resolveBinding());
ba.assertNoImplicitName("<< 6", 2);
ba.assertNoImplicitName("+p;", 1);
}
@ -136,9 +137,9 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
IASTTranslationUnit tu = ba.getTranslationUnit();
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
ba.assertNoImplicitName("&Y::x;", 1);
IASTImplicitName n = ba.assertImplicitName("&y;", 1, ICPPFunction.class);
assertSame(n.resolveBinding(), col.getName(9).resolveBinding());
}
@ -165,20 +166,20 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
// p2->doA();
// }
public void testArrowOperator() throws Exception {
String contents = getAboveComment();
String contents = getAboveComment();
IASTTranslationUnit tu = parse(contents, ParserLanguage.CPP);
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
IASTImplicitName[] implicits = getImplicitNames(tu, contents, "->doA();", 2);
assertNotNull(implicits);
assertEquals(2, implicits.length);
assertSame(implicits[1].getBinding(), col.getName(4).resolveBinding());
assertSame(implicits[0].getBinding(), col.getName(12).resolveBinding());
}
// struct A {
// int x;
// };
@ -224,15 +225,15 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
ba.assertNoImplicitName(", b, c, d); // func", 1);
ba.assertNoImplicitName(", c, d); // func", 1);
ba.assertNoImplicitName(", d); // func", 1);
IASTImplicitName opAB = ba.assertImplicitName(", b, c, d; // expr", 1, ICPPFunction.class);
IASTImplicitName opCC = ba.assertImplicitName(", c, d; // expr", 1, ICPPFunction.class);
ba.assertNoImplicitName(", d; // expr", 1);
IASTTranslationUnit tu = ba.getTranslationUnit();
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
assertSame(opAB.resolveBinding(), col.getName(5).resolveBinding());
assertSame(opCC.resolveBinding(), col.getName(11).resolveBinding());
}
@ -255,20 +256,20 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
// }
public void testCommaOperator2() throws Exception {
BindingAssertionHelper ba = new BindingAssertionHelper(getAboveComment(), true);
IASTImplicitName opAB = ba.assertImplicitName(", b, c, d", 1, ICPPMethod.class);
IASTImplicitName opCC = ba.assertImplicitName(", c, d", 1, ICPPFunction.class);
IASTImplicitName opDD = ba.assertImplicitName(", d", 1, ICPPMethod.class);
IASTTranslationUnit tu = ba.getTranslationUnit();
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
// 6, 11, 15
assertSame(opAB.resolveBinding(), col.getName(6).resolveBinding());
assertSame(opCC.resolveBinding(), col.getName(15).resolveBinding());
assertSame(opDD.resolveBinding(), col.getName(11).resolveBinding());
ba.assertNonProblem("ee;", 2);
}
@ -289,7 +290,7 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
IASTTranslationUnit tu = ba.getTranslationUnit();
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
IASTImplicitName n1 = ba.assertImplicitName("(b); // 1", 1, ICPPMethod.class);
IASTImplicitName n2 = ba.assertImplicitName("); // 1", 1, ICPPMethod.class);
assertSame(n1.resolveBinding(), n2.resolveBinding());
@ -298,14 +299,14 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
// there should be no overlap
ba.assertNoImplicitName("b); // 1", 1);
assertSame(col.getName(1).resolveBinding(), n1.resolveBinding());
n1 = ba.assertImplicitName("(); // 2", 1, ICPPMethod.class);
n2 = ba.assertImplicitName("); // 2", 1, ICPPMethod.class);
assertSame(n1.resolveBinding(), n2.resolveBinding());
assertFalse(n1.isAlternate());
assertTrue(n2.isAlternate());
assertSame(col.getName(3).resolveBinding(), n1.resolveBinding());
n1 = ba.assertImplicitName("(1, 2); // 3", 1, ICPPMethod.class);
n2 = ba.assertImplicitName("); // 3", 1, ICPPMethod.class);
assertSame(n1.resolveBinding(), n2.resolveBinding());
@ -348,7 +349,7 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
IASTTranslationUnit tu = ba.getTranslationUnit();
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
IASTImplicitName n1 = ba.assertImplicitName("[0]); //1", 1, ICPPMethod.class);
ba.assertNoImplicitName("0]); //1", 1);
IASTImplicitName n2 = ba.assertImplicitName("]); //1", 1, ICPPMethod.class);
@ -356,7 +357,7 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
assertFalse(n1.isAlternate());
assertTrue(n2.isAlternate());
assertSame(col.getName(1).resolveBinding(), n1.resolveBinding());
n1 = ba.assertImplicitName("[q]); //2", 1, ICPPMethod.class);
ba.assertNoImplicitName("q]); //2", 1);
n2 = ba.assertImplicitName("]); //2", 1, ICPPMethod.class);
@ -384,21 +385,21 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
assertEquals(2, names.length);
IASTImplicitName destructor = names[0];
IASTImplicitName delete = names[1];
IASTTranslationUnit tu = ba.getTranslationUnit();
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
assertSame(col.getName(1).resolveBinding(), destructor.resolveBinding());
assertSame(col.getName(2).resolveBinding(), delete.resolveBinding());
names = ba.getImplicitNames("delete[] x;", 6);
assertEquals(1, names.length);
assertSame(col.getName(4).resolveBinding(), names[0].resolveBinding());
ba.assertNoImplicitName("delete 1;", 6);
}
// struct A {
// void operator delete(void * a);
// };
@ -416,15 +417,15 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
BindingAssertionHelper bh= new BindingAssertionHelper(getAboveComment(), true);
IBinding m= bh.assertNonProblem("operator delete(void * a)", 15);
IBinding f= bh.assertNonProblem("operator delete(void * b)", 15);
IASTImplicitName[] names = bh.getImplicitNames("delete a;", 6);
assertEquals(2, names.length);
assertEquals(2, names.length);
assertTrue(((ICPPMethod) names[0].resolveBinding()).isDestructor());
assertSame(m, names[1].resolveBinding());
names = bh.getImplicitNames("delete b;", 6);
assertTrue(((ICPPMethod) names[0].resolveBinding()).isDestructor());
assertEquals(2, names.length);
assertEquals(2, names.length);
assertSame(f, names[1].resolveBinding());
}
@ -443,13 +444,13 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
BindingAssertionHelper bh= new BindingAssertionHelper(getAboveComment(), true);
IBinding m= bh.assertNonProblem("operator new(size_t a)", 12);
IBinding f= bh.assertNonProblem("operator new(size_t b)", 12);
IASTImplicitName[] names = bh.getImplicitNames("new A;", 3);
assertEquals(1, names.length);
assertEquals(2, names.length);
assertSame(m, names[0].resolveBinding());
names = bh.getImplicitNames("new B;", 3);
assertEquals(1, names.length);
assertEquals(2, names.length);
assertSame(f, names[0].resolveBinding());
}
@ -461,9 +462,9 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
public void testImplicitNewAndDelete() throws Exception {
BindingAssertionHelper ba = new BindingAssertionHelper(getAboveComment(), true);
ba.assertNoImplicitName("new X", 3);
ba.assertNoImplicitName("delete[]", 6);
ba.assertNoImplicitName("delete[]", 6);
}
// typedef long unsigned int size_t
// struct nothrow_t {};
// extern const nothrow_t nothrow;
@ -491,7 +492,7 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
assertSame(col.getName(9).resolveBinding(), n2.resolveBinding());
assertSame(col.getName(14).resolveBinding(), n3.resolveBinding());
}
// int test() {
// throw;
// }
@ -551,7 +552,7 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
IASTImplicitName v = ba.assertImplicitName("v(p)", 1, ICPPConstructor.class);
assertSame(ctor1, v.resolveBinding());
}
// enum A {aa};
// struct B{ operator A();};
// bool operator==(A, A); // overrides the built-in operator.
@ -567,5 +568,5 @@ public class AST2CPPImplicitNameTests extends AST2BaseTest {
ICPPFunction op = ba.assertNonProblem("operator==", 0);
IASTImplicitName a = ba.assertImplicitName("==b", 2, ICPPFunction.class);
assertSame(op, a.resolveBinding());
}
}
}

View file

@ -46,7 +46,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
/**
* Examples taken from the c++-specification.
*/
public class AST2CPPSpecTest extends AST2SpecBaseTest {
public class AST2CPPSpecTest extends AST2SpecTestBase {
public AST2CPPSpecTest() {
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2012 IBM Corporation and others.
* Copyright (c) 2004, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -139,7 +139,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
import org.eclipse.cdt.internal.core.index.IndexCPPSignatureUtil;
import org.eclipse.cdt.internal.core.parser.ParserException;
public class AST2CPPTests extends AST2BaseTest {
public class AST2CPPTests extends AST2TestBase {
public AST2CPPTests() {
}
@ -260,7 +260,7 @@ public class AST2CPPTests extends AST2BaseTest {
assertEquals(declNames.length, i);
assertEquals(defNames.length, j);
}
@Override
protected void assertSameType(IType first, IType second){
assertNotNull(first);
@ -1201,10 +1201,10 @@ public class AST2CPPTests extends AST2BaseTest {
// }
public void testVirtualParentLookup() throws Exception {
IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP);
CPPNameCollector collector = new CPPNameCollector();
CPPNameCollector collector = new CPPNameCollector(true);
tu.accept(collector);
assertEquals(collector.size(), 15);
assertEquals(collector.size(), 16);
ICPPClassType D = (ICPPClassType) collector.getName(0).resolveBinding();
ICPPField x = (ICPPField) collector.getName(1).resolveBinding();
@ -1215,7 +1215,7 @@ public class AST2CPPTests extends AST2BaseTest {
assertInstances(collector, D, 3);
assertInstances(collector, C, 2);
assertInstances(collector, B, 2);
assertInstances(collector, A, 2);
assertInstances(collector, A, 3);
assertInstances(collector, ctor, 1);
assertInstances(collector, x, 2);
}
@ -1230,10 +1230,10 @@ public class AST2CPPTests extends AST2BaseTest {
// }
public void testAmbiguousVirtualParentLookup() throws Exception {
IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP);
CPPNameCollector collector = new CPPNameCollector();
CPPNameCollector collector = new CPPNameCollector(true);
tu.accept(collector);
assertEquals(collector.size(), 15);
assertEquals(collector.size(), 16);
ICPPClassType D = (ICPPClassType) collector.getName(0).resolveBinding();
ICPPField x1 = (ICPPField) collector.getName(1).resolveBinding();
@ -1241,13 +1241,13 @@ public class AST2CPPTests extends AST2BaseTest {
ICPPClassType B = (ICPPClassType) collector.getName(4).resolveBinding();
ICPPClassType A = (ICPPClassType) collector.getName(6).resolveBinding();
ICPPConstructor ctor = A.getConstructors()[0];
IProblemBinding x2 = (IProblemBinding) collector.getName(14).resolveBinding();
IProblemBinding x2 = (IProblemBinding) collector.getName(15).resolveBinding();
assertEquals(x2.getID(), IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP);
assertInstances(collector, D, 3);
assertInstances(collector, C, 2);
assertInstances(collector, B, 2);
assertInstances(collector, A, 2);
assertInstances(collector, A, 3);
assertInstances(collector, ctor, 1);
assertInstances(collector, x1, 1);
}
@ -1843,7 +1843,7 @@ public class AST2CPPTests extends AST2BaseTest {
ICPPMethod dtor = (ICPPMethod) col.getName(13).resolveBinding();
assertNotNull(dtor);
assertEquals(dtor.getName(), "~C"); //$NON-NLS-1$
assertInstances(col, C, 6);
assertInstances(col, C, 7);
assertInstances(col, op, 3);
assertInstances(col, other, 4);
@ -1993,7 +1993,7 @@ public class AST2CPPTests extends AST2BaseTest {
assertInstances(col, pb, 2);
assertInstances(col, mutate, 2);
assertInstances(col, B, 2);
assertInstances(col, B, 3);
}
// struct S { int i; };
@ -2511,7 +2511,7 @@ public class AST2CPPTests extends AST2BaseTest {
// }
public void testBug86267() throws Exception {
IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP);
CPPNameCollector col = new CPPNameCollector();
CPPNameCollector col = new CPPNameCollector(true);
tu.accept(col);
ICPPClassType D1 = (ICPPClassType) col.getName(2).resolveBinding();
@ -2549,7 +2549,7 @@ public class AST2CPPTests extends AST2BaseTest {
ICPPMethod op = (ICPPMethod) col.getName(3).resolveBinding();
IParameter other = (IParameter) col.getName(5).resolveBinding();
assertInstances(col, C, 6);
assertInstances(col, C, 7);
assertInstances(col, f, 2);
assertInstances(col, op, 3);
assertInstances(col, other, 4);
@ -4052,11 +4052,11 @@ public class AST2CPPTests extends AST2BaseTest {
// X x = new X(y);
public void testBug90654_1() throws Exception {
IASTTranslationUnit tu = parse(getAboveComment(), ParserLanguage.CPP);
CPPNameCollector col = new CPPNameCollector();
CPPNameCollector col = new CPPNameCollector(true);
tu.accept(col);
ICPPConstructor ctor1 = (ICPPConstructor) col.getName(1).resolveBinding();
ICPPConstructor ctor = (ICPPConstructor) col.getName(11).resolveBinding();
ICPPConstructor ctor = (ICPPConstructor) col.getName(12).resolveBinding();
assertSame(ctor, ctor1);
}
@ -8382,20 +8382,24 @@ public class AST2CPPTests extends AST2BaseTest {
// fH({1}); // H(G(1))
// }
public void testListInitialization_302412f() throws Exception {
ICPPConstructor ctor;
IProblemBinding problem;
String code= getAboveComment();
BindingAssertionHelper bh= new BindingAssertionHelper(code, true);
bh.assertProblem("f({1,1})", 1);
ctor= bh.assertNonProblem("F({1,1})", 1);
bh.assertImplicitName("F({1,1})", 1, ICPPConstructor.class);
bh.assertNonProblem("fF({1,1})", 2);
bh.assertNonProblem("fG(1)", 2);
bh.assertNonProblem("fG({1})", 2);
ctor= bh.assertNonProblem("H(1)", 1);
problem= bh.assertProblem("H({1})", 1);
assertEquals(IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, problem.getID());
bh.assertImplicitName("H(1)", 1, ICPPConstructor.class);
bh.assertNoImplicitName("H({1})", 1);
// TODO(nathanridge): Perhaps we should store implicit names even if they
// resolve to ProblemBindings. Then we can do the stronger check in the
// 3 commented lines below.
//IASTImplicitName n= bh.assertImplicitName("H({1})", 1, IProblemBinding.class);
//problem= (IProblemBinding) n.resolveBinding();
//assertEquals(IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, problem.getID());
bh.assertProblem("fH(1)", 2);
bh.assertNonProblem("fH({1})", 2);
}
@ -9823,7 +9827,7 @@ public class AST2CPPTests extends AST2BaseTest {
}
// struct Base {
// virtual void mFuncDecl();
// virtual void mFuncDecl();
// virtual void mFuncDef(){}
// };
// struct S : public Base {
@ -9851,9 +9855,9 @@ public class AST2CPPTests extends AST2BaseTest {
assertInstance(declarator, ICPPASTFunctionDeclarator.class);
assertVirtualSpecifiers((ICPPASTFunctionDeclarator)declarator, true, false);
}
// struct Base {
// virtual void mFuncDecl();
// virtual void mFuncDecl();
// virtual void mFuncDef(){}
// };
// struct S : public Base {
@ -10025,7 +10029,7 @@ public class AST2CPPTests extends AST2BaseTest {
// double vdouble;
// long double vlongdouble;
// UnscopedEnum vue;
//
//
// // Narrowing conversions
// fint({vdouble});
// ffloat({vlongdouble});
@ -10083,7 +10087,7 @@ public class AST2CPPTests extends AST2BaseTest {
helper.assertNonProblemOnFirstIdentifier("fint({vbool");
helper.assertNonProblemOnFirstIdentifier("fint({vchar");
}
// namespace std {
// struct string {};
// struct exception {};

View file

@ -15,7 +15,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
/**
* @author dsteffle
*/
public class AST2CSpecTest extends AST2SpecBaseTest {
public class AST2CSpecTest extends AST2SpecTestBase {
public AST2CSpecTest() {
}

View file

@ -8,10 +8,6 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*
* Created on Sept 28, 2004
*/
package org.eclipse.cdt.core.parser.tests.ast2;
import java.io.ByteArrayInputStream;
@ -39,116 +35,116 @@ import org.eclipse.core.runtime.NullProgressMonitor;
/**
* @author dsteffle
*/
public class AST2FileBasePluginTest extends TestCase {
public class AST2FileBasePluginTestCase extends TestCase {
static NullProgressMonitor monitor;
static IWorkspace workspace;
static IProject project;
static FileManager fileManager;
static int numProjects = 0;
static int numProjects;
static Class className;
static ICProject cPrj;
public AST2FileBasePluginTest() {
public AST2FileBasePluginTestCase() {
}
public AST2FileBasePluginTest(String name) {
public AST2FileBasePluginTestCase(String name) {
super(name);
}
private void initialize(Class aClassName){
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
private void initialize(Class aClassName) {
if (CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null) {
//(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
monitor = new NullProgressMonitor();
workspace = ResourcesPlugin.getWorkspace();
try {
cPrj = CProjectHelper.createCCProject("AST2BasedProjectMofo", "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ //$NON-NLS-2$
project = cPrj.getProject();
// ugly
if (className == null || !className.equals(aClassName)) {
className = aClassName;
numProjects++;
}
} catch ( CoreException e ) {
/*boo*/
} catch (CoreException e) {
// Ignore
}
if (project == null)
throw new NullPointerException("Unable to create project"); //$NON-NLS-1$
//Create file manager
// Create file manager
fileManager = new FileManager();
}
}
public AST2FileBasePluginTest(String name, Class className)
{
public AST2FileBasePluginTestCase(String name, Class className) {
super(name);
initialize(className);
}
public void cleanupProject() throws Exception {
numProjects--;
try{
try {
if (numProjects == 0) {
project.delete( true, false, monitor );
project.delete(true, false, monitor);
project = null;
}
} catch( Throwable e ){
/*boo*/
} catch (Throwable e) {
// Ignore
}
}
@Override
protected void tearDown() throws Exception {
if( project == null || !project.exists() )
if (project == null || !project.exists())
return;
IResource [] members = project.members();
for( int i = 0; i < members.length; i++ ){
if( members[i].getName().equals( ".project" ) || members[i].getName().equals( ".cproject" ) ) //$NON-NLS-1$ //$NON-NLS-2$
IResource[] members = project.members();
for (int i = 0; i < members.length; i++) {
if (members[i].getName().equals(".project") || members[i].getName().equals(".cproject")) //$NON-NLS-1$ //$NON-NLS-2$
continue;
if (members[i].getName().equals(".settings"))
continue;
try{
members[i].delete( false, monitor );
} catch( Throwable e ){
/*boo*/
try {
members[i].delete(false, monitor);
} catch (Throwable e) {
// Ignore
}
}
}
protected IFolder importFolder(String folderName) throws Exception {
IFolder folder = project.getProject().getFolder(folderName);
//Create file input stream
if( !folder.exists() )
folder.create( false, false, monitor );
// Create file input stream
if (!folder.exists())
folder.create(false, false, monitor);
return folder;
}
public IFile importFile(String fileName, String contents ) throws Exception{
//Obtain file handle
public IFile importFile(String fileName, String contents) throws Exception {
// Obtain file handle
IFile file = project.getProject().getFile(fileName);
InputStream stream = new ByteArrayInputStream( contents.getBytes() );
//Create file input stream
if( file.exists() )
file.setContents( stream, false, false, monitor );
else
file.create( stream, false, monitor );
InputStream stream = new ByteArrayInputStream(contents.getBytes());
// Create file input stream
if (file.exists()) {
file.setContents(stream, false, false, monitor);
} else {
file.create(stream, false, monitor);
}
fileManager.addFile(file);
return file;
}
protected StringBuilder[] getContents(int sections) throws IOException {
return TestSourceReader.getContentsForTest(
CTestPlugin.getDefault().getBundle(), "parser", getClass(), getName(), sections);
}
}

View file

@ -59,7 +59,7 @@ import org.eclipse.cdt.internal.core.dom.parser.c.ICInternalBinding;
/**
* @author dsteffle
*/
public class AST2KnRTests extends AST2BaseTest {
public class AST2KnRTests extends AST2TestBase {
public AST2KnRTests() {
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2010 IBM Corporation and others.
* Copyright (c) 2005, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
* Nathan Ridge
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.ast2;
@ -26,6 +27,7 @@ import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
import org.eclipse.cdt.core.dom.ast.IEnumeration;
import org.eclipse.cdt.core.dom.ast.IField;
@ -46,7 +48,7 @@ import org.eclipse.core.resources.IFile;
/**
* @author dsteffle
*/
public class AST2SelectionParseTest extends AST2SelectionParseBaseTest {
public class AST2SelectionParseTest extends AST2SelectionParseTestBase {
public AST2SelectionParseTest() {
}
@ -352,9 +354,10 @@ public class AST2SelectionParseTest extends AST2SelectionParseBaseTest {
assertTrue(node instanceof IASTTypeId);
assertEquals(((IASTNamedTypeSpecifier)((IASTTypeId)node).getDeclSpecifier()).getName().toString(), "Gonzo"); //$NON-NLS-1$
name = ((IASTNamedTypeSpecifier)((IASTTypeId)node).getDeclSpecifier()).getName();
assertNotNull(name.resolveBinding());
assertTrue(name.resolveBinding() instanceof ICPPConstructor);
assertEquals(((ICPPConstructor)name.resolveBinding()).getName(), "Gonzo"); //$NON-NLS-1$
name = TestUtil.findImplicitName(name);
IBinding binding = name.resolveBinding();
assertTrue(binding instanceof ICPPConstructor);
assertEquals(((ICPPConstructor)binding).getName(), "Gonzo"); //$NON-NLS-1$
break;
default:
assertTrue(node instanceof IASTName);
@ -736,9 +739,10 @@ public class AST2SelectionParseTest extends AST2SelectionParseBaseTest {
assertTrue(node instanceof IASTTypeId);
assertEquals(((IASTNamedTypeSpecifier)((IASTTypeId)node).getDeclSpecifier()).getName().toString(), "B"); //$NON-NLS-1$
IASTName name = ((IASTNamedTypeSpecifier)((IASTTypeId)node).getDeclSpecifier()).getName();
assertNotNull(name.resolveBinding());
assertTrue(name.resolveBinding() instanceof ICPPConstructor);
assertEquals(((ICPPConstructor)name.resolveBinding()).getName(), "B"); //$NON-NLS-1$
name = TestUtil.findImplicitName(name);
IBinding binding = name.resolveBinding();
assertTrue(binding instanceof ICPPConstructor);
assertEquals(((ICPPConstructor)binding).getName(), "B"); //$NON-NLS-1$
}
public void testBug72712_2() throws Exception{

View file

@ -29,7 +29,7 @@ import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.core.parser.tests.FileBasePluginTest;
import org.eclipse.cdt.core.parser.tests.FileBasePluginTestCase;
import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor;
import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser;
import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser;
@ -40,18 +40,18 @@ import org.eclipse.core.resources.IFile;
/**
* @author dsteffle
*/
public class AST2SelectionParseBaseTest extends FileBasePluginTest {
public class AST2SelectionParseTestBase extends FileBasePluginTestCase {
public AST2SelectionParseBaseTest() {
public AST2SelectionParseTestBase() {
}
public AST2SelectionParseBaseTest(String name) {
public AST2SelectionParseTestBase(String name) {
super(name);
}
private static final IParserLogService NULL_LOG = new NullLogService();
public AST2SelectionParseBaseTest(String name, Class className) {
public AST2SelectionParseTestBase(String name, Class className) {
super(name, className);
}
@ -76,7 +76,7 @@ public class AST2SelectionParseBaseTest extends FileBasePluginTest {
protected IASTTranslationUnit parse(String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems) throws ParserException {
FileContent codeReader = FileContent.create("<test-code>", code.toCharArray());
ScannerInfo scannerInfo = new ScannerInfo();
IScanner scanner= AST2BaseTest.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner= AST2TestBase.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
ISourceCodeParser parser2 = null;
if (lang == ParserLanguage.CPP) {

View file

@ -41,12 +41,12 @@ import org.eclipse.cdt.internal.core.parser.ParserException;
/**
* @author dsteffle
*/
public class AST2SpecBaseTest extends AST2BaseTest {
public AST2SpecBaseTest() {
public class AST2SpecTestBase extends AST2TestBase {
public AST2SpecTestBase() {
super();
}
public AST2SpecBaseTest(String name) {
public AST2SpecTestBase(String name) {
super(name);
}
@ -101,7 +101,7 @@ public class AST2SpecBaseTest extends AST2BaseTest {
boolean useGNUExtensions, boolean expectNoProblems, boolean checkBindings,
int expectedProblemBindings, String[] problems) throws ParserException {
ScannerInfo scannerInfo = new ScannerInfo();
IScanner scanner= AST2BaseTest.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner= AST2TestBase.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
ISourceCodeParser parser2 = null;
if (lang == ParserLanguage.CPP) {

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2012 IBM Corporation and others.
* Copyright (c) 2005, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -44,6 +44,7 @@ import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.IBasicType;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
import org.eclipse.cdt.core.dom.ast.IEnumerator;
import org.eclipse.cdt.core.dom.ast.IField;
import org.eclipse.cdt.core.dom.ast.IFunction;
import org.eclipse.cdt.core.dom.ast.IFunctionType;
@ -55,6 +56,7 @@ import org.eclipse.cdt.core.dom.ast.IScope;
import org.eclipse.cdt.core.dom.ast.ISemanticProblem;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.dom.ast.IValue;
import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExplicitTemplateInstantiation;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamedTypeSpecifier;
@ -101,7 +103,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
import org.eclipse.cdt.internal.core.parser.ParserException;
public class AST2TemplateTests extends AST2BaseTest {
public class AST2TemplateTests extends AST2TestBase {
public AST2TemplateTests() {
}
@ -2371,11 +2373,11 @@ public class AST2TemplateTests extends AST2BaseTest {
public void testCPPConstructorTemplateSpecialization() throws Exception {
IASTTranslationUnit tu = parse(getAboveComment(), CPP, true, true);
CPPNameCollector col = new CPPNameCollector();
CPPNameCollector col = new CPPNameCollector(true);
tu.accept(col);
ICPPASTTemplateId tid= (ICPPASTTemplateId) col.getName(20);
IASTName cn= col.getName(21);
IASTImplicitName tid= (IASTImplicitName) col.getName(20);
IASTName cn= col.getName(22);
assertInstance(cn.resolveBinding(), ICPPClassTemplate.class); // *D*<int>(5, 6)
assertInstance(cn.resolveBinding(), ICPPClassType.class); // *D*<int>(5, 6)
assertInstance(tid.resolveBinding(), ICPPTemplateInstance.class); // *D<int>*(5, 6)
@ -3840,7 +3842,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// };
public void testNestedTemplates_259872_1() throws Exception {
BindingAssertionHelper bh= new BindingAssertionHelper(getAboveComment(), CPP);
bh.assertNonProblem("A<B, int>", 9, ICPPConstructor.class);
bh.assertNonProblem("A<B, int>", 9, ICPPClassType.class);
}
// template <typename CL, typename T>
@ -3865,7 +3867,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// };
public void testNestedTemplates_259872_2() throws Exception {
BindingAssertionHelper bh= new BindingAssertionHelper(getAboveComment(), CPP);
bh.assertNonProblem("A<B, int>", 9, ICPPConstructor.class);
bh.assertNonProblem("A<B, int>", 9, ICPPClassType.class);
}
// template <class T>
@ -6219,24 +6221,24 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testSimpleAliasDeclaration() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
CPPNameCollector collector = getCPPNameCollector(assertionHelper.getTranslationUnit());
ICPPClassType S = assertionHelper.assertNonProblem("struct S {", "S", ICPPClassType.class);
ICPPField x = assertionHelper.assertNonProblem("int x", "x", ICPPField.class);
ITypedef Alias = assertionHelper.assertNonProblem("using Alias = S", "Alias", ITypedef.class);
IFunction foo = assertionHelper.assertNonProblem("void foo() {", "foo", IFunction.class);
IVariable myA = assertionHelper.assertNonProblem("Alias myA", "myA", IVariable.class);
assertInstances(collector, S, 2);
assertInstances(collector, x, 2);
assertInstances(collector, Alias, 2);
assertInstances(collector, foo, 1);
assertInstances(collector, myA, 2);
}
// template<typename T>
// struct S {
// T x;
@ -6248,7 +6250,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testSpecifiedTemplateAliasDeclaration() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
CPPNameCollector collector = getCPPNameCollector(assertionHelper.getTranslationUnit());
@ -6257,7 +6259,7 @@ public class AST2TemplateTests extends AST2BaseTest {
ITypedef Alias = assertionHelper.assertNonProblem("using Alias = S<int>;", "Alias", ITypedef.class);
IVariable myA = assertionHelper.assertNonProblem("Alias myA;", "myA", IVariable.class);
ICPPSpecialization xRef = assertionHelper.assertNonProblem("myA.x = 42;", "x", ICPPSpecialization.class);
assertInstances(collector, S, 2);
assertInstances(collector, Alias, 2);
@ -6273,13 +6275,13 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasBasicType() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
CPPNameCollector collector = getCPPNameCollector(assertionHelper.getTranslationUnit());
ICPPAliasTemplate Alias = assertionHelper.assertNonProblem("using Alias = int;", "Alias", ICPPAliasTemplate.class);
ICPPAliasTemplateInstance aliasFloatInstance = assertionHelper.assertNonProblem("Alias<float> myA;", "Alias<float>", ICPPAliasTemplateInstance.class);
assertInstances(collector, Alias, 2);
assertSameType(aliasFloatInstance, new CPPBasicType(IBasicType.Kind.eInt, 0));
}
@ -6296,7 +6298,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasDeclaration() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
CPPNameCollector collector = getCPPNameCollector(assertionHelper.getTranslationUnit());
@ -6334,9 +6336,9 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasDeclarationMultipleParameters() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPField t1 = assertionHelper.assertNonProblem("T1 t1;", "t1", ICPPField.class);
ICPPField t2 = assertionHelper.assertNonProblem("T2 t2;", "t2", ICPPField.class);
ICPPField t3 = assertionHelper.assertNonProblem("T3 t3;", "t3", ICPPField.class);
@ -6377,9 +6379,9 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasDeclarationTemplateArgument() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPField t = assertionHelper.assertNonProblem("T t;", "t", ICPPField.class);
ICPPAliasTemplateInstance TAliasSInt = assertionHelper.assertNonProblem("TAlias<S<int>> myA;", "TAlias<S<int>>", ICPPAliasTemplateInstance.class);
ICPPSpecialization tRef = assertionHelper.assertNonProblem("myA.t = S<int>()", "t", ICPPSpecialization.class);
@ -6400,9 +6402,9 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasAsTemplateArgument() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPField t = assertionHelper.assertNonProblem("T t;", "t", ICPPField.class);
ICPPTemplateInstance STAliasInt = assertionHelper.assertNonProblem("S<TAlias<int>> myA;", "S<TAlias<int>>", ICPPTemplateInstance.class);
ICPPSpecialization tRef = assertionHelper.assertNonProblem("myA.t = S<int>();", "t", ICPPSpecialization.class);
@ -6423,9 +6425,9 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasDeclarationValueArgument() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPField buff = assertionHelper.assertNonProblem("int buff [Size];", "buff", ICPPField.class);
ICPPSpecialization buffRef = assertionHelper.assertNonProblem("myA.buff[0] = 1;", "buff", ICPPSpecialization.class);
@ -6446,9 +6448,9 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasDefaultArguments() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPField buff = assertionHelper.assertNonProblem("T buff [Size];", "buff", ICPPField.class);
ICPPAliasTemplateInstance myA = assertionHelper.assertNonProblem("TAlias<> myA;", "TAlias<>", ICPPAliasTemplateInstance.class);
ICPPSpecialization buffRef = assertionHelper.assertNonProblem("myA.buff[0] = 1;", "buff", ICPPSpecialization.class);
@ -6470,9 +6472,9 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasTemplateArgument() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPField t = assertionHelper.assertNonProblem("T t;", "t", ICPPField.class);
ICPPSpecialization tRef = assertionHelper.assertNonProblem(" myA.t = S<int>();", "t", ICPPSpecialization.class);
ICPPClassSpecialization Sint = assertionHelper.assertNonProblem("myA.t = S<int>();", "S<int>", ICPPClassSpecialization.class);
@ -6497,9 +6499,9 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasAsFunctionParameter() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPFunction bar = assertionHelper.assertNonProblem("void bar(TAlias<int> arg){", "bar", ICPPFunction.class);
ICPPFunction barRefAlias = assertionHelper.assertNonProblem("bar(myA);", "bar", ICPPFunction.class);
ICPPFunction barRefSInt = assertionHelper.assertNonProblem("bar(myS);", "bar", ICPPFunction.class);
@ -6522,7 +6524,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasAsFunctionArgument() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPFunction bar = assertionHelper.assertNonProblem("void bar(S<int> arg){", "bar", ICPPFunction.class);
@ -6571,7 +6573,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testSimpleFunctionAliasDeclaration() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
CPPNameCollector collector = getCPPNameCollector(assertionHelper.getTranslationUnit());
@ -6596,7 +6598,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasForTemplateReference() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPClassSpecialization SInt = assertionHelper.assertNonProblem("S<int> myS;", "S<int>", ICPPClassSpecialization.class);
@ -6612,7 +6614,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testSimpleFunctionTemplateAliasDeclaration() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
CPPNameCollector collector = getCPPNameCollector(assertionHelper.getTranslationUnit());
@ -6632,7 +6634,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testSimpleFunctionReferenceTemplateAliasDeclaration() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
CPPNameCollector collector = getCPPNameCollector(assertionHelper.getTranslationUnit());
@ -6657,7 +6659,7 @@ public class AST2TemplateTests extends AST2BaseTest {
// }
public void testTemplatedAliasTemplateParameter() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPField t = assertionHelper.assertNonProblem("T t;", "t", ICPPField.class);
@ -6680,10 +6682,11 @@ public class AST2TemplateTests extends AST2BaseTest {
// Alias<int> intAlias;
public void testAliasDeclarationContext() throws Exception {
parseAndCheckBindings();
BindingAssertionHelper assertionHelper = getAssertionHelper();
ICPPAliasTemplateInstance AliasInt = assertionHelper.assertNonProblem("Alias<int> intAlias;", "Alias<int>", ICPPAliasTemplateInstance.class);
ICPPAliasTemplateInstance AliasInt =
assertionHelper.assertNonProblem("Alias<int> intAlias;", "Alias<int>", ICPPAliasTemplateInstance.class);
assertEquals("Alias<int>", AliasInt.getName());
assertEquals("NS", AliasInt.getQualifiedName()[0]);
assertEquals("Alias<int>", AliasInt.getQualifiedName()[1]);
@ -7004,4 +7007,26 @@ public class AST2TemplateTests extends AST2BaseTest {
public void testDependentExpressions_395243d() throws Exception {
parseAndCheckBindings();
}
// template <typename T>
// struct B {
// enum { value = 1 };
// };
//
// template <typename T>
// struct C {
// enum { id = B<T>::value };
// };
//
// void test() {
// int x = C<bool>::id;
// }
public void _testDependentEnumValue_389009() throws Exception {
BindingAssertionHelper ah = getAssertionHelper();
IEnumerator binding = ah.assertNonProblem("C<bool>::id", "id");
IValue value = binding.getValue();
Long num = value.numericalValue();
assertNotNull(num);
assertEquals(1, num.longValue());
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2012 IBM Corporation and others.
* Copyright (c) 2004, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -95,7 +95,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
/**
* @author aniefer
*/
public class AST2BaseTest extends BaseTestCase {
public class AST2TestBase extends BaseTestCase {
public final static String TEST_CODE = "<testcode>";
protected static final IParserLogService NULL_LOG = new NullLogService();
protected static boolean sValidateCopy;
@ -121,14 +121,14 @@ public class AST2BaseTest extends BaseTestCase {
return map;
}
public AST2BaseTest() {
public AST2TestBase() {
super();
}
public AST2BaseTest(String name) {
public AST2TestBase(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
sValidateCopy= true;
@ -138,7 +138,7 @@ public class AST2BaseTest extends BaseTestCase {
protected IASTTranslationUnit parse(String code, ParserLanguage lang) throws ParserException {
return parse(code, lang, false, true);
}
protected IASTTranslationUnit parse(String code, ParserLanguage lang, boolean useGNUExtensions) throws ParserException {
return parse(code, lang, useGNUExtensions, true);
}
@ -147,10 +147,10 @@ public class AST2BaseTest extends BaseTestCase {
boolean expectNoProblems) throws ParserException {
return parse(code, lang, useGNUExtensions, expectNoProblems, false);
}
protected IASTTranslationUnit parse(String code, ParserLanguage lang, boolean useGNUExtensions,
boolean expectNoProblems, boolean skipTrivialInitializers) throws ParserException {
IScanner scanner = createScanner(FileContent.create(TEST_CODE, code.toCharArray()), lang, ParserMode.COMPLETE_PARSE,
IScanner scanner = createScanner(FileContent.create(TEST_CODE, code.toCharArray()), lang, ParserMode.COMPLETE_PARSE,
createScannerInfo(useGNUExtensions));
configureScanner(scanner);
AbstractGNUSourceCodeParser parser = null;
@ -170,12 +170,12 @@ public class AST2BaseTest extends BaseTestCase {
} else {
config = new ANSICParserExtensionConfiguration();
}
parser = new GNUCSourceParser(scanner, ParserMode.COMPLETE_PARSE, NULL_LOG, config, null);
}
if (skipTrivialInitializers)
parser.setSkipTrivialExpressionsInAggregateInitializers(true);
IASTTranslationUnit tu = parser.parse();
assertTrue(tu.isFrozen());
if (sValidateCopy)
@ -183,7 +183,7 @@ public class AST2BaseTest extends BaseTestCase {
if (parser.encounteredError() && expectNoProblems)
throw new ParserException("FAILURE"); //$NON-NLS-1$
if (lang == ParserLanguage.C && expectNoProblems) {
assertEquals(CVisitor.getProblems(tu).length, 0);
assertEquals(tu.getPreprocessorProblems().length, 0);
@ -193,7 +193,7 @@ public class AST2BaseTest extends BaseTestCase {
}
if (expectNoProblems)
assertEquals(0, tu.getPreprocessorProblems().length);
return tu;
}
@ -215,7 +215,7 @@ public class AST2BaseTest extends BaseTestCase {
configuration= GPPScannerExtensionConfiguration.getInstance(scannerInfo);
}
IScanner scanner;
scanner= new CPreprocessor(codeReader, scannerInfo, lang, NULL_LOG, configuration,
scanner= new CPreprocessor(codeReader, scannerInfo, lang, NULL_LOG, configuration,
IncludeFileContentProvider.getSavedFilesProvider());
return scanner;
}
@ -263,7 +263,7 @@ public class AST2BaseTest extends BaseTestCase {
}
protected void validateSimpleBinaryExpressionC(String code, int operand) throws ParserException {
IASTBinaryExpression e = (IASTBinaryExpression) getExpressionFromStatementInCode(code, ParserLanguage.C);
IASTBinaryExpression e = (IASTBinaryExpression) getExpressionFromStatementInCode(code, ParserLanguage.C);
assertNotNull(e);
assertEquals(e.getOperator(), operand);
IASTIdExpression x = (IASTIdExpression) e.getOperand1();
@ -290,8 +290,8 @@ public class AST2BaseTest extends BaseTestCase {
ASTComparer.assertCopy(tu, copy);
return (T) copy;
}
static protected class CNameCollector extends ASTVisitor {
{
shouldVisitNames = true;
@ -309,29 +309,35 @@ public class AST2BaseTest extends BaseTestCase {
return null;
return nameList.get(idx);
}
public int size() {
return nameList.size();
}
}
}
protected void assertInstances(CNameCollector collector, IBinding binding, int num) throws Exception {
int count = 0;
assertNotNull(binding);
for (int i = 0; i < collector.size(); i++) {
if (collector.getName(i).resolveBinding() == binding)
count++;
}
assertEquals(count, num);
}
static protected class CPPNameCollector extends ASTVisitor {
{
shouldVisitNames = true;
public CPPNameCollector() {
this(false); // don't visit implicit names by default
}
public CPPNameCollector(boolean shouldVisitImplicitNames) {
this.shouldVisitNames = true;
this.shouldVisitImplicitNames = shouldVisitImplicitNames;
}
public List<IASTName> nameList = new ArrayList<IASTName>();
@Override
@ -349,7 +355,7 @@ public class AST2BaseTest extends BaseTestCase {
public int size() {
return nameList.size();
}
public void dump() {
for (int i= 0; i < size(); i++) {
IASTName name= getName(i);
@ -365,7 +371,7 @@ public class AST2BaseTest extends BaseTestCase {
if (collector.getName(i).resolveBinding() == binding)
count++;
}
assertEquals(num, count);
}
@ -386,42 +392,42 @@ public class AST2BaseTest extends BaseTestCase {
String expressionString = ASTStringUtil.getExpressionString(exp);
assertEquals(str, expressionString);
}
protected void isParameterSignatureEqual(IASTDeclarator decltor, String str) {
assertTrue(decltor instanceof IASTFunctionDeclarator);
final String[] sigArray = ASTStringUtil.getParameterSignatureArray((IASTFunctionDeclarator) decltor);
assertEquals(str, "(" + ASTStringUtil.join(sigArray, ", ") + ")");
}
protected void isSignatureEqual(IASTDeclarator declarator, String expected) {
String signature= ASTStringUtil.getSignatureString(declarator);
assertEquals(expected, signature);
}
protected void isSignatureEqual(IASTDeclSpecifier declSpec, String str) {
assertEquals(str, ASTStringUtil.getSignatureString(declSpec, null));
}
protected void isSignatureEqual(IASTTypeId typeId, String str) {
assertEquals(str, ASTStringUtil.getSignatureString(typeId.getDeclSpecifier(), typeId.getAbstractDeclarator()));
}
protected void isTypeEqual(IASTDeclarator decltor, String str) {
assertEquals(str, ASTTypeUtil.getType(decltor));
}
protected void isTypeEqual(IASTTypeId typeId, String str) {
assertEquals(str, ASTTypeUtil.getType(typeId));
}
protected void isTypeEqual(IType type, String str) {
assertEquals(str, ASTTypeUtil.getType(type));
}
protected void isParameterTypeEqual(IFunctionType fType, String str) {
assertEquals(str, ASTTypeUtil.getParameterTypeString(fType));
}
static protected class CNameResolver extends ASTVisitor {
{
shouldVisitNames = true;
@ -449,9 +455,9 @@ public class AST2BaseTest extends BaseTestCase {
public int size() {
return nameList.size();
}
}
}
static protected class CPPNameResolver extends ASTVisitor {
{
shouldVisitNames = true;
@ -479,13 +485,13 @@ public class AST2BaseTest extends BaseTestCase {
public int size() {
return nameList.size();
}
}
}
protected String getAboveComment() throws IOException {
return getContents(1)[0].toString();
}
protected CharSequence[] getContents(int sections) throws IOException {
CTestPlugin plugin = CTestPlugin.getDefault();
if (plugin == null)
@ -502,14 +508,14 @@ public class AST2BaseTest extends BaseTestCase {
}
return clazz.cast(o);
}
protected static void assertField(IBinding binding, String fieldName, String ownerName) {
assertInstance(binding, IField.class);
assertEquals(fieldName, binding.getName());
ICompositeType struct = ((IField) binding).getCompositeTypeOwner();
assertEquals(ownerName, struct.getName());
}
protected class BindingAssertionHelper {
protected IASTTranslationUnit tu;
protected String contents;
@ -562,7 +568,7 @@ public class AST2BaseTest extends BaseTestCase {
IBinding binding= binding(section, len);
if (binding instanceof IProblemBinding) {
IProblemBinding problem= (IProblemBinding) binding;
fail("ProblemBinding for name: " + section.substring(0, len) + " (" + renderProblemID(problem.getID()) + ")");
fail("ProblemBinding for name: " + section.substring(0, len) + " (" + renderProblemID(problem.getID()) + ")");
}
if (binding == null) {
fail("Null binding resolved for name: " + section.substring(0, len));
@ -611,12 +617,12 @@ public class AST2BaseTest extends BaseTestCase {
IASTName name = findImplicitName(section, len);
final String selection = section.substring(0, len);
assertNotNull("did not find \"" + selection + "\"", name);
assertInstance(name, IASTImplicitName.class);
IASTImplicitNameOwner owner = (IASTImplicitNameOwner) name.getParent();
IASTImplicitName[] implicits = owner.getImplicitNames();
assertNotNull(implicits);
if (implicits.length > 1) {
boolean found = false;
for (IASTImplicitName n : implicits) {
@ -627,34 +633,34 @@ public class AST2BaseTest extends BaseTestCase {
}
assertTrue(found);
}
assertEquals(selection, name.getRawSignature());
IBinding binding = name.resolveBinding();
assertNotNull(binding);
assertInstance(binding, bindingClass);
return (IASTImplicitName) name;
}
public void assertNoImplicitName(String section, int len) {
IASTName name = findImplicitName(section, len);
final String selection = section.substring(0, len);
assertNull("found name \"" + selection + "\"", name);
}
public IASTImplicitName[] getImplicitNames(String section, int len) {
IASTName name = findImplicitName(section, len);
IASTImplicitNameOwner owner = (IASTImplicitNameOwner) name.getParent();
IASTImplicitName[] implicits = owner.getImplicitNames();
return implicits;
}
public IASTName findName(String section, int len) {
final int offset = contents.indexOf(section);
assertTrue("Section \"" + section + "\" not found", offset >= 0);
IASTNodeSelector selector = tu.getNodeSelector(null);
return selector.findName(offset, len);
}
public IASTName findName(String context, String name) {
if (context == null) {
context = contents;
@ -712,7 +718,7 @@ public class AST2BaseTest extends BaseTestCase {
}
return "Unknown problem ID";
}
public <T extends IBinding> T assertNonProblem(String section, int len, Class... cs) {
if (len <= 0)
len += section.length();
@ -744,10 +750,10 @@ public class AST2BaseTest extends BaseTestCase {
final String selection = section.substring(0, len);
assertNotNull("No AST name for \"" + selection + "\"", astName);
assertEquals(selection, astName.getRawSignature());
IBinding binding = astName.resolveBinding();
assertNotNull("No binding for " + astName.getRawSignature(), binding);
return astName.resolveBinding();
}
@ -755,10 +761,10 @@ public class AST2BaseTest extends BaseTestCase {
IASTName astName = findName(context, name);
assertNotNull("No AST name for \"" + name + "\"", astName);
assertEquals(name, astName.getRawSignature());
IBinding binding = astName.resolveBinding();
assertNotNull("No binding for " + astName.getRawSignature(), binding);
return astName.resolveBinding();
}
}
@ -770,10 +776,10 @@ public class AST2BaseTest extends BaseTestCase {
final protected IASTTranslationUnit parseAndCheckBindings(String code, ParserLanguage lang, boolean useGnuExtensions) throws Exception {
return parseAndCheckBindings(code, lang, useGnuExtensions, false);
}
final protected IASTTranslationUnit parseAndCheckBindings(String code, ParserLanguage lang, boolean useGnuExtensions,
boolean skipTrivialInitializers) throws Exception {
IASTTranslationUnit tu = parse(code, lang, useGnuExtensions, true, skipTrivialInitializers);
IASTTranslationUnit tu = parse(code, lang, useGnuExtensions, true, skipTrivialInitializers);
CNameCollector col = new CNameCollector();
tu.accept(col);
assertNoProblemBindings(col);

View file

@ -17,7 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.parser.ParserLanguage;
public class AST2UtilOldTests extends AST2BaseTest {
public class AST2UtilOldTests extends AST2TestBase {
public AST2UtilOldTests() {
}
public AST2UtilOldTests(String name) {

View file

@ -27,7 +27,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.ExpressionEvaluator;
/**
* @author dsteffle
*/
public class AST2UtilTests extends AST2BaseTest {
public class AST2UtilTests extends AST2TestBase {
public AST2UtilTests() {
}

View file

@ -19,7 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
import org.eclipse.cdt.core.parser.ParserLanguage;
public class ASTCPPSpecDefectTests extends AST2BaseTest {
public class ASTCPPSpecDefectTests extends AST2TestBase {
public ASTCPPSpecDefectTests() {
}

View file

@ -28,7 +28,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
/**
* Testcases for inactive code in ast.
*/
public class ASTInactiveCodeTests extends AST2BaseTest {
public class ASTInactiveCodeTests extends AST2TestBase {
public static TestSuite suite() {
return suite(ASTInactiveCodeTests.class);

View file

@ -28,7 +28,7 @@ import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser;
public class ASTNodeSelectorTest extends AST2BaseTest {
public class ASTNodeSelectorTest extends AST2TestBase {
static public TestSuite suite() {
return suite(ASTNodeSelectorTest.class);
@ -55,7 +55,7 @@ public class ASTNodeSelectorTest extends AST2BaseTest {
fCode= getContents(1)[0].toString();
FileContent codeReader = FileContent.create("<test-code>", fCode.toCharArray());
ScannerInfo scannerInfo = new ScannerInfo();
IScanner scanner= AST2BaseTest.createScanner(codeReader, ParserLanguage.CPP, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner= AST2TestBase.createScanner(codeReader, ParserLanguage.CPP, ParserMode.COMPLETE_PARSE, scannerInfo);
GNUCPPSourceParser parser= new GNUCPPSourceParser(scanner, ParserMode.COMPLETE_PARSE, new NullLogService(), new GPPParserExtensionConfiguration());
fTu= parser.parse();
fSelector= fTu.getNodeSelector(null);

View file

@ -18,7 +18,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.AccessContext;
import org.eclipse.cdt.internal.core.parser.ParserException;
public class AccessControlTests extends AST2BaseTest {
public class AccessControlTests extends AST2TestBase {
protected class AccessAssertionHelper extends BindingAssertionHelper {
AccessAssertionHelper(String contents) throws ParserException {

View file

@ -13,22 +13,22 @@ package org.eclipse.cdt.core.parser.tests.ast2;
import org.eclipse.cdt.core.dom.CDOM;
import org.eclipse.cdt.core.dom.IASTServiceProvider.UnsupportedDialectException;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.parser.tests.FileBasePluginTest;
import org.eclipse.cdt.core.parser.tests.FileBasePluginTestCase;
import org.eclipse.core.resources.IFile;
/**
* @author dsteffle
*/
public class CDOMBaseTest extends FileBasePluginTest {
public class CDOMTestBase extends FileBasePluginTestCase {
public CDOMBaseTest() {
public CDOMTestBase() {
}
public CDOMBaseTest(String name) {
public CDOMTestBase(String name) {
super(name);
}
public CDOMBaseTest(String name, Class className) {
public CDOMTestBase(String name, Class className) {
super(name, className);
}

View file

@ -26,7 +26,7 @@ import org.eclipse.core.runtime.jobs.Job;
/**
* @author dsteffle
*/
public class CodeReaderCacheTest extends CDOMBaseTest {
public class CodeReaderCacheTest extends CDOMTestBase {
public CodeReaderCacheTest() {
}

View file

@ -23,7 +23,7 @@ import org.eclipse.cdt.internal.core.parser.ParserException;
* @author Guido Zgraggen
*
*/
public class CommentTests extends AST2BaseTest {
public class CommentTests extends AST2TestBase {
public static TestSuite suite() {
return suite(CommentTests.class);

View file

@ -1,13 +1,14 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* Copyright (c) 2004, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
* Markus Schorn (Wind River Systems)
* IBM - Initial API and implementation
* Markus Schorn (Wind River Systems)
* Nathan Ridge
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.ast2;
@ -102,9 +103,13 @@ public class CompleteParser2Tests extends BaseTestCase {
}
static private class CPPNameCollector extends ASTVisitor {
{
shouldVisitNames = true;
public CPPNameCollector() {
this(false); // don't visit implicit names by default
}
public CPPNameCollector(boolean shouldVisitImplicitNames) {
this.shouldVisitNames = true;
this.shouldVisitImplicitNames = shouldVisitImplicitNames;
}
public List nameList = new ArrayList();
@Override
public int visit(IASTName name){
@ -141,7 +146,7 @@ public class CompleteParser2Tests extends BaseTestCase {
if (nameCollector.getName(i).resolveBinding() == binding)
count++;
assertEquals(count, num);
assertEquals(num, count);
}
protected void assertInstances(CNameCollector nameCollector, IBinding binding, int num) throws Exception {
int count = 0;
@ -149,7 +154,7 @@ public class CompleteParser2Tests extends BaseTestCase {
if (nameCollector.getName(i).resolveBinding() == binding)
count++;
assertEquals(count, num);
assertEquals(num, count);
}
protected IASTTranslationUnit parse(String code, boolean expectedToPass,
ParserLanguage lang) throws Exception {
@ -172,7 +177,7 @@ public class CompleteParser2Tests extends BaseTestCase {
FileContent codeReader = FileContent.create("<test-code>", code.toCharArray());
ScannerInfo scannerInfo = new ScannerInfo();
ISourceCodeParser parser2 = null;
IScanner scanner= AST2BaseTest.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner= AST2TestBase.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
if (lang == ParserLanguage.CPP) {
ICPPParserExtensionConfiguration config = null;
if (gcc)
@ -750,7 +755,7 @@ public class CompleteParser2Tests extends BaseTestCase {
}
public void testConstructorChain() throws Exception {
IASTTranslationUnit tu = parse("int x = 5;\n class A \n{ public : \n int a; \n A() : a(x) { } };");
IASTTranslationUnit tu = parse("int x = 5;\n class A \n{ public : \n int a; \n A() : a(x) { } };");
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
@ -1053,7 +1058,7 @@ public class CompleteParser2Tests extends BaseTestCase {
}
public void testScoping() throws Exception {
IASTTranslationUnit tu = parse("void foo() { int x = 3; if (x == 1) { int x = 4; } else int x = 2; }");
IASTTranslationUnit tu = parse("void foo() { int x = 3; if (x == 1) { int x = 4; } else int x = 2; }");
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
@ -1098,7 +1103,7 @@ public class CompleteParser2Tests extends BaseTestCase {
}
public void testBug42872() throws Exception {
IASTTranslationUnit tu = parse("struct B {}; struct D : B {}; void foo(D* dp) { B* bp = dynamic_cast<B*>(dp); }");
IASTTranslationUnit tu = parse("struct B {}; struct D : B {}; void foo(D* dp) { B* bp = dynamic_cast<B*>(dp); }");
CPPNameCollector col = new CPPNameCollector();
tu.accept(col);
@ -1112,14 +1117,14 @@ public class CompleteParser2Tests extends BaseTestCase {
public void testBug43503A() throws Exception {
IASTTranslationUnit tu = parse("class SD_01 { void f_SD_01() {}}; int main(){ SD_01 * a = new SD_01(); a->f_SD_01(); } ");
CPPNameCollector col = new CPPNameCollector();
CPPNameCollector col = new CPPNameCollector(true);
tu.accept(col);
assertEquals(col.size(), 8);
assertEquals(col.size(), 9);
ICPPClassType SD_01 = (ICPPClassType) col.getName(0).resolveBinding();
ICPPMethod f_SD_01 = (ICPPMethod) col.getName(1).resolveBinding();
ICPPConstructor ctor = SD_01.getConstructors()[0];
assertInstances(col, SD_01, 2);
assertInstances(col, SD_01, 3);
assertInstances(col, ctor, 1);
assertInstances(col, f_SD_01, 2);
}
@ -1204,10 +1209,10 @@ public class CompleteParser2Tests extends BaseTestCase {
buff.append("} \n");
IASTTranslationUnit tu = parse(buff.toString());
CPPNameCollector col = new CPPNameCollector();
CPPNameCollector col = new CPPNameCollector(true);
tu.accept(col);
assertEquals(col.size(), 17);
assertEquals(col.size(), 18);
ICompositeType SD_02 = (ICompositeType) col.getName(0).resolveBinding();
ICPPMethod f_SD_02 = (ICPPMethod) col.getName(1).resolveBinding();
ICPPClassType SD_01 = (ICPPClassType) col.getName(2).resolveBinding();
@ -1217,7 +1222,7 @@ public class CompleteParser2Tests extends BaseTestCase {
assertInstances(col, SD_02, 2);
assertInstances(col, f_SD_02, 2);
assertInstances(col, SD_01, 3);
assertInstances(col, SD_01, 4);
assertInstances(col, ctor, 1);
assertInstances(col, next, 2);
assertInstances(col, f_SD_01, 4);
@ -1268,10 +1273,10 @@ public class CompleteParser2Tests extends BaseTestCase {
public void testBug44342() throws Exception {
IASTTranslationUnit tu = parse("class A { void f(){} void f(int){} }; int main(){ A * a = new A(); a->f();} ");
CPPNameCollector col = new CPPNameCollector();
CPPNameCollector col = new CPPNameCollector(true);
tu.accept(col);
assertEquals(col.size(), 10);
assertEquals(col.size(), 11);
ICPPClassType A = (ICPPClassType) col.getName(0).resolveBinding();
ICPPMethod f1 = (ICPPMethod) col.getName(1).resolveBinding();
ICPPMethod f2 = (ICPPMethod) col.getName(2).resolveBinding();
@ -1279,7 +1284,7 @@ public class CompleteParser2Tests extends BaseTestCase {
ICPPConstructor ctor = A.getConstructors()[0];
IVariable a = (IVariable) col.getName(6).resolveBinding();
assertInstances(col, A, 2);
assertInstances(col, A, 3);
assertInstances(col, f1, 2);
assertInstances(col, f2, 1);
assertInstances(col, ctor, 1);
@ -1288,7 +1293,7 @@ public class CompleteParser2Tests extends BaseTestCase {
public void testCDesignatedInitializers() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("struct Inner { int a,b,c; };");
buffer.append("struct Inner { int a,b,c; };");
buffer.append("struct A { int x; int y[]; struct Inner innerArray[]; int z[]; };");
buffer.append("struct A myA = { .x = 4, .y[3] = 4, .y[4] = 3, .innerArray[0].a = 3, .innerArray[1].b = 5, .innerArray[2].c=6, .z = { 1,4,5} };");
parse(buffer.toString(), true, ParserLanguage.C);
@ -1314,7 +1319,7 @@ public class CompleteParser2Tests extends BaseTestCase {
" _Bool b; " +
" f(b);" +
" f(g((_Bool) 1) );" +
"}",
"}",
true, ParserLanguage.C);
}
@ -1337,7 +1342,7 @@ public class CompleteParser2Tests extends BaseTestCase {
public void testBug44925() throws Exception {
StringBuffer buffer = new StringBuffer();
buffer.append("class MyClass { };");
buffer.append("class MyClass { };");
buffer.append("class MyClass myObj1;");
buffer.append("enum MyEnum { Item1 };");
buffer.append("enum MyEnum myObj2;");
@ -1420,23 +1425,23 @@ public class CompleteParser2Tests extends BaseTestCase {
buffer.append("void main() { N::A * a = new N::A(); a->f(); } ");
IASTTranslationUnit tu = parse(buffer.toString());
CPPNameCollector col = new CPPNameCollector();
CPPNameCollector col = new CPPNameCollector(true);
tu.accept(col);
assertEquals(col.size(), 13);
assertEquals(col.size(), 14);
ICPPNamespace N = (ICPPNamespace) col.getName(0).resolveBinding();
IFunction f = (IFunction) col.getName(1).resolveBinding();
ICPPClassType A = (ICPPClassType) col.getName(2).resolveBinding();
ICPPConstructor ctor = A.getConstructors()[0];
IProblemBinding fp = (IProblemBinding) col.getName(12).resolveBinding();
IProblemBinding fp = (IProblemBinding) col.getName(13).resolveBinding();
assertEquals(fp.getID(), IProblemBinding.SEMANTIC_NAME_NOT_FOUND);
assertInstances(col, N, 3);
assertInstances(col, f, 1);
assertInstances(col, A, 3);
assertInstances(col, ctor, 2);
assertInstances(col, A, 5);
assertInstances(col, ctor, 1);
}
public void testBug43110() throws Exception {
@ -1994,7 +1999,7 @@ public class CompleteParser2Tests extends BaseTestCase {
writer.write("int main(int argc, char **argv) {\n");
writer.write("FILE * file = 0;\n");
writer.write("static_function(file);\n");
writer.write("return 0;\n");
writer.write("return 0;\n");
writer.write("}\n");
parse(writer.toString());
}
@ -2046,8 +2051,8 @@ public class CompleteParser2Tests extends BaseTestCase {
writer.write("};\n");
writer.write("\n");
writer.write("template<typename T>\n");
writer.write("inline T526026< T >\n");
writer.write("operator+(typename T526026<T>::diff d, const T526026<T> & x)\n");
writer.write("inline T526026< T >\n");
writer.write("operator+(typename T526026<T>::diff d, const T526026<T> & x)\n");
writer.write("{ return T526026< T >(); }\n");
writer.write("}\n");
parse(writer.toString(), false);
@ -2055,7 +2060,7 @@ public class CompleteParser2Tests extends BaseTestCase {
public void testBug71094() throws Exception {
Writer writer = new StringWriter();
writer.write("using namespace DOESNOTEXIST;\n");
writer.write("using namespace DOESNOTEXIST;\n");
writer.write("class A { int x; };\n");
parse(writer.toString(), false);
}
@ -2223,7 +2228,7 @@ public class CompleteParser2Tests extends BaseTestCase {
public void testBug74328() throws Exception {
Writer writer = new StringWriter();
writer.write("int\n");
writer.write("int\n");
writer.write("main(int argc, char **argv) {\n");
writer.write(" char *sign;\n");
writer.write("sign = \"\"; // IProblem generated here, syntax error\n");

View file

@ -19,7 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
* @author jcamelon
*
*/
public class DOMGCCSelectionParseExtensionsTest extends DOMSelectionParseBaseTest {
public class DOMGCCSelectionParseExtensionsTest extends DOMSelectionParseTestBase {
public DOMGCCSelectionParseExtensionsTest() {
}

View file

@ -44,7 +44,7 @@ import org.eclipse.core.runtime.content.IContentType;
/**
* @author jcamelon
*/
public class DOMLocationInclusionTests extends AST2FileBasePluginTest {
public class DOMLocationInclusionTests extends AST2FileBasePluginTestCase {
public DOMLocationInclusionTests() {
}

View file

@ -35,7 +35,7 @@ import org.eclipse.cdt.core.dom.ast.IMacroBinding;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.internal.core.parser.ParserException;
public class DOMLocationMacroTests extends AST2BaseTest {
public class DOMLocationMacroTests extends AST2TestBase {
final ParserLanguage[] languages = new ParserLanguage[] { ParserLanguage.C, ParserLanguage.CPP };

View file

@ -73,7 +73,7 @@ import org.eclipse.cdt.internal.core.parser.ParserException;
/**
* @author jcamelon
*/
public class DOMLocationTests extends AST2BaseTest {
public class DOMLocationTests extends AST2TestBase {
public DOMLocationTests() {
}

View file

@ -32,7 +32,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
* @author Emanuel Graf
*
*/
public class DOMPreprocessorInformationTest extends AST2BaseTest {
public class DOMPreprocessorInformationTest extends AST2TestBase {
public void testPragma() throws Exception {
String msg = "GCC poison printf sprintf fprintf";

View file

@ -23,16 +23,16 @@ import org.eclipse.core.resources.IFile;
* @author johnc
*
*/
public class DOMSelectionParseBaseTest extends DOMFileBasePluginTest {
public class DOMSelectionParseTestBase extends DOMFileBasePluginTest {
public DOMSelectionParseBaseTest() {
public DOMSelectionParseTestBase() {
}
public DOMSelectionParseBaseTest(String name) {
public DOMSelectionParseTestBase(String name) {
super(name);
}
public DOMSelectionParseBaseTest(String name, Class className) {
public DOMSelectionParseTestBase(String name, Class className) {
super(name, className);
}

View file

@ -30,7 +30,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
/**
* Testcases related to recovery from invalid syntax.
*/
public class FaultToleranceTests extends AST2BaseTest {
public class FaultToleranceTests extends AST2TestBase {
public static TestSuite suite() {
return suite(FaultToleranceTests.class);

View file

@ -31,7 +31,7 @@ import org.eclipse.cdt.internal.core.dom.parser.c.CFunction;
import org.eclipse.cdt.internal.core.model.ASTStringUtil;
import org.eclipse.cdt.internal.core.parser.ParserException;
public class GCCCompleteParseExtensionsTest extends AST2BaseTest {
public class GCCCompleteParseExtensionsTest extends AST2TestBase {
public GCCCompleteParseExtensionsTest() {
}

View file

@ -29,7 +29,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
/**
* @author aniefer
*/
public class GCCTests extends AST2BaseTest {
public class GCCTests extends AST2TestBase {
public GCCTests() {
}

View file

@ -23,7 +23,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
/**
* @author jcamelon
*/
public class ImageLocationTests extends AST2BaseTest {
public class ImageLocationTests extends AST2TestBase {
private static final int CODE = IASTImageLocation.REGULAR_CODE;
private static final int MACRO = IASTImageLocation.MACRO_DEFINITION;

View file

@ -44,7 +44,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
/**
* Testcases for non-gnu language extensions.
*/
public class LanguageExtensionsTest extends AST2BaseTest {
public class LanguageExtensionsTest extends AST2TestBase {
protected static final int SIZEOF_EXTENSION = 0x1;
protected static final int FUNCTION_STYLE_ASM = 0x2;

View file

@ -1335,7 +1335,7 @@ public class QuickParser2Tests extends TestCase {
ParserLanguage lang, boolean gcc) throws Exception {
FileContent codeReader = FileContent.create("<test-code>", code.toCharArray());
IScannerInfo scannerInfo = new ScannerInfo();
IScanner scanner= AST2BaseTest.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner= AST2TestBase.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
ISourceCodeParser parser2 = null;
if (lang == ParserLanguage.CPP) {
ICPPParserExtensionConfiguration config = null;

View file

@ -20,7 +20,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil;
/**
* Directly tests parts of the semantics package
*/
public class SemanticsTests extends AST2BaseTest {
public class SemanticsTests extends AST2TestBase {
public SemanticsTests() {}
public SemanticsTests(String name) { super(name); }

View file

@ -18,7 +18,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.internal.core.pdom.indexer.TodoTaskParser;
import org.eclipse.cdt.internal.core.pdom.indexer.TodoTaskParser.Task;
public class TaskParserTest extends AST2BaseTest {
public class TaskParserTest extends AST2TestBase {
public static TestSuite suite() {
return suite(TaskParserTest.class);

View file

@ -0,0 +1,36 @@
/*******************************************************************************
* Copyright (c) 2013 Nathan Ridge.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nathan Ridge - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.ast2;
import org.eclipse.cdt.core.dom.ast.IASTImplicitName;
import org.eclipse.cdt.core.dom.ast.IASTImplicitNameOwner;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
public class TestUtil {
/**
* Searches the AST upward from the given starting node to find the
* nearest IASTImplicitNameOwner and returns its first implicit name,
* or null if it has no implicit names.
*/
public static IASTName findImplicitName(IASTNode node) {
while (node != null) {
if (node instanceof IASTImplicitNameOwner) {
IASTImplicitName[] implicitNames = ((IASTImplicitNameOwner) node).getImplicitNames();
if (implicitNames != null && implicitNames.length > 0) {
return implicitNames[0];
}
}
node = node.getParent();
}
return null;
}
}

View file

@ -21,7 +21,7 @@ import org.eclipse.cdt.internal.core.parser.ParserException;
/**
* Tests for ClassTypeHelper class.
*/
public class TypeTraitsTests extends AST2BaseTest {
public class TypeTraitsTests extends AST2TestBase {
public TypeTraitsTests() {
}

View file

@ -23,7 +23,7 @@ import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
/**
* Unit tests for CPPVariableReadWriteFlags and CVariableReadWriteFlags classes.
*/
public class VariableReadWriteFlagsTest extends AST2BaseTest {
public class VariableReadWriteFlagsTest extends AST2TestBase {
private static final int READ = PDOMName.READ_ACCESS;
private static final int WRITE = PDOMName.WRITE_ACCESS;

View file

@ -38,7 +38,7 @@ import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.core.parser.tests.ast2.AST2BaseTest;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase;
import org.eclipse.cdt.core.testplugin.CTestPlugin;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
@ -53,7 +53,7 @@ public class CompletionTestBase extends BaseTestCase {
protected IASTCompletionNode getCompletionNode(String code, ParserLanguage lang, boolean useGNUExtensions) throws ParserException {
FileContent codeReader = FileContent.create("<test-code>", code.trim().toCharArray());
ScannerInfo scannerInfo = new ScannerInfo();
IScanner scanner= AST2BaseTest.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner= AST2TestBase.createScanner(codeReader, lang, ParserMode.COMPLETE_PARSE, scannerInfo);
ISourceCodeParser parser = null;
if( lang == ParserLanguage.CPP )

View file

@ -28,7 +28,7 @@ import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.core.parser.tests.ast2.AST2BaseTest;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase;
import org.eclipse.cdt.core.parser.tests.rewrite.RewriteBaseTest;
import org.eclipse.cdt.core.parser.tests.rewrite.TestHelper;
import org.eclipse.cdt.core.parser.tests.rewrite.TestSourceFile;
@ -95,7 +95,7 @@ public class ASTWriterTest extends RewriteBaseTest {
ParserLanguage language = getLanguage(testFile);
boolean useGNUExtensions = getGNUExtension(testFile);
IScanner scanner = AST2BaseTest.createScanner(codeReader, language, ParserMode.COMPLETE_PARSE, scannerInfo);
IScanner scanner = AST2TestBase.createScanner(codeReader, language, ParserMode.COMPLETE_PARSE, scannerInfo);
ISourceCodeParser parser = null;
if (language == ParserLanguage.CPP) {

View file

@ -1,12 +1,13 @@
/*******************************************************************************
* Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
* Copyright (c) 2007, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Schorn - initial API and implementation
* Markus Schorn - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.scanner;
@ -201,7 +202,29 @@ public class LexerTests extends BaseTestCase {
id("ab");
eof();
}
public void testLessColonColon() throws Exception {
// 2.5-3
// <: is treated as digraph [
init("<::>");
token(IToken.tLBRACKET);
token(IToken.tRBRACKET);
eof();
// <: is treated as digraph [
init("<:::");
token(IToken.tLBRACKET);
token(IToken.tCOLONCOLON);
eof();
// <:: is treated as < and ::
init("<::A");
token(IToken.tLT);
token(IToken.tCOLONCOLON);
token(IToken.tIDENTIFIER);
eof();
}
public void testWindowsLineEnding() throws Exception {
init("\n\n");
nl(); nl(); eof();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2012 Symbian Software Systems and others.
* Copyright (c) 2006, 2013 Symbian Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -10,6 +10,7 @@
* IBM Corporation
* Markus Schorn (Wind River Systems)
* Sergey Prigogin (Google)
* Nathan Ridge
*******************************************************************************/
package org.eclipse.cdt.internal.index.tests;
@ -83,7 +84,7 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
super.tearDown();
}
protected IASTName findName(String section, int len) {
protected IASTName findName(String section, int len, boolean preferImplicitName) {
if (len == 0)
len= section.length();
for (int i = 0; i < strategy.getAstCount(); i++) {
@ -91,15 +92,27 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
final IASTNodeSelector nodeSelector = ast.getNodeSelector(null);
final int offset = strategy.getAstSource(i).indexOf(section);
if (offset >= 0) {
IASTName name= nodeSelector.findName(offset, len);
if (name == null)
name= nodeSelector.findImplicitName(offset, len);
return name;
if (preferImplicitName) {
return nodeSelector.findImplicitName(offset, len);
} else {
IASTName name= nodeSelector.findName(offset, len);
if (name == null)
name= nodeSelector.findImplicitName(offset, len);
return name;
}
}
}
return null;
}
protected IASTName findName(String section, int len) {
return findName(section, len, false);
}
protected IASTName findImplicitName(String section, int len) {
return findName(section, len, true);
}
/**
* Attempts to get an IBinding from the initial specified number of characters
@ -129,9 +142,37 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
assertInstance(binding, clazz, cs);
return clazz.cast(binding);
}
/**
* Attempts to get an IBinding attached to an implicit name from the initial specified
* number of characters from the specified code fragment. Fails the test if
* <ul>
* <li> There is not a unique implicit name with the specified criteria
* <li> The binding associated with the implicit name is null or a problem binding
* <li> The binding is not an instance of the specified class
* </ul>
* @param section the code fragment to search for in the AST. The first occurrence of an identical section is used.
* @param len the length of the specified section to use as a name
* @param clazz an expected class type or interface that the binding should extend/implement
* @return the associated implicit name's binding
*/
protected <T> T getBindingFromImplicitASTName(String section, int len, Class<T> clazz, Class ... cs) {
if (len < 1) {
len= section.length()+len;
}
IASTName name= findImplicitName(section, len);
assertNotNull("Name not found for \"" + section + "\"", name);
assertEquals(section.substring(0, len), name.getRawSignature());
IBinding binding = name.resolveBinding();
assertNotNull("No binding for " + name.getRawSignature(), binding);
assertFalse("Binding is a ProblemBinding for name \"" + name.getRawSignature() + "\"", IProblemBinding.class.isAssignableFrom(name.resolveBinding().getClass()));
assertInstance(binding, clazz, cs);
return clazz.cast(binding);
}
/*
* @see IndexBindingResolutionTestBase#getBindingFromASTName(Class, String, int)
* @see IndexBindingResolutionTestBase#getBindingFromASTName(String, int, Class<T>, Class ...)
*/
protected <T extends IBinding> T getBindingFromASTName(String section, int len) {
if (len <= 0)
@ -146,6 +187,23 @@ public abstract class IndexBindingResolutionTestBase extends BaseTestCase {
assertFalse("Binding is a ProblemBinding for name \"" + name.getRawSignature() + "\"", IProblemBinding.class.isAssignableFrom(name.resolveBinding().getClass()));
return (T) binding;
}
/*
* @see IndexBindingResolutionTestBase#getBindingFromImplicitASTName(String, int, Class<T>, Class ...)
*/
protected <T extends IBinding> T getBindingFromImplicitASTName(String section, int len) {
if (len <= 0)
len += section.length();
IASTName name= findImplicitName(section, len);
assertNotNull("Name not found for \"" + section + "\"", name);
assertEquals(section.substring(0, len), name.getRawSignature());
IBinding binding = name.resolveBinding();
assertNotNull("No binding for " + name.getRawSignature(), binding);
assertFalse("Binding is a ProblemBinding for name \"" + name.getRawSignature() + "\"", IProblemBinding.class.isAssignableFrom(name.resolveBinding().getClass()));
return (T) binding;
}
/**
* Attempts to verify that the resolved binding for a name is a problem binding.

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2010 Wind River Systems, Inc. and others.
* Copyright (c) 2006, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,6 +8,7 @@
* Contributors:
* Markus Schorn - initial API and implementation
* Andrew Ferguson (Symbian)
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.index.tests;
@ -42,20 +43,20 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
public ProjectWithDepProj() { setStrategy(new ReferencedProject(false)); }
public static TestSuite suite() { return suite(ProjectWithDepProj.class); }
}
public static void addTests(TestSuite suite) {
public static void addTests(TestSuite suite) {
suite.addTest(SingleProject.suite());
suite.addTest(ProjectWithDepProj.suite());
}
// #include <stdio.h>
// #include <stdio.h>
// void func1(void) {
// int i = 0;
// for (i=0; i<10;i++) {
// printf("%i", i);
// }
// }
// #include "header.h"
//
// int main(void) {
@ -77,7 +78,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
}
// void func1(void);
// #include "header.h"
//
// int main(void) {
@ -87,7 +88,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
IBinding b0 = getBindingFromASTName("func1;", 5);
assertTrue(b0 instanceof IFunction);
}
// typedef struct {
// int utm;
// } usertype;
@ -132,7 +133,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
assertInstance(type, IEnumeration.class);
assertTrue(type instanceof IEnumeration);
}
// int globalVar;
// // don't include header
@ -268,10 +269,10 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
e= (IEnumeration) b1;
ei= e.getEnumerators();
assertEquals(1, ei.length);
}
}
// // no header needed
// typedef struct {
// int member;
// } t_struct;
@ -289,7 +290,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
assertTrue(tdIndex instanceof IIndexBinding);
assertTrue(tdAST instanceof ITypedef);
assertTrue(tdIndex instanceof ITypedef);
IType tAST= ((ITypedef) tdAST).getType();
IType tIndex= ((ITypedef) tdIndex).getType();
assertTrue(tAST instanceof ICompositeType);
@ -304,7 +305,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
assertTrue(tdIndex instanceof IIndexBinding);
assertTrue(tdAST instanceof ITypedef);
assertTrue(tdIndex instanceof ITypedef);
tAST= ((ITypedef) tdAST).getType();
tIndex= ((ITypedef) tdIndex).getType();
assertTrue(tAST instanceof ICompositeType);
@ -319,7 +320,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
assertTrue(tdIndex instanceof IIndexBinding);
assertTrue(tdAST instanceof ITypedef);
assertTrue(tdIndex instanceof ITypedef);
tAST= ((ITypedef) tdAST).getType();
tIndex= ((ITypedef) tdIndex).getType();
assertTrue(tAST instanceof IEnumeration);
@ -327,13 +328,13 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
assertTrue(tAST.isSameType(tIndex));
assertTrue(tIndex.isSameType(tAST));
}
// struct outer {
// union {
// int var1;
// };
// };
// #include "header.h"
// void test() {
// struct outer x;
@ -354,7 +355,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
// int var1;
// };
// };
// #include "header.h"
// void test() {
// union outer x;
@ -369,14 +370,14 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
assertTrue(outer instanceof ICCompositeTypeScope);
assertEquals("outer", outer.getScopeName().toString());
}
// int myFunc();
// int myFunc(var)
// int var;
// {
// return var;
// }
// int var;
// {
// return var;
// }
// int main(void) {
// return myFunc(0);
// }
@ -390,7 +391,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
assertTrue(params[0].getType() instanceof IBasicType);
assertEquals(IBasicType.Kind.eInt, ((IBasicType) params[0].getType()).getKind());
}
// typedef struct S S;
// void setValue(S *pSelf, int value);
@ -404,7 +405,7 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
IBinding b = getBindingFromASTName("value =", 5);
assertTrue(b instanceof IField);
}
// void f255(
// int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int,
// int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int,
@ -439,8 +440,8 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
// int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int,
// int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int,
// int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
// void test() {
// void test() {
// f255(
// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -463,8 +464,8 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
public void testFunctionsWithManyParameters_Bug319186() throws Exception {
getBindingFromASTName("f255", 0);
getBindingFromASTName("f256", 0);
}
}
// struct B {
// float f;
// };
@ -474,5 +475,17 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
// };
public void testDesignatedInitializer_Bug210019() throws Exception {
IField f= getBindingFromASTName("f", 0);
}
}
// struct S {
// int data;
// };
// void test(void (*f)(void*)) {
// struct S *i;
// f(&i->data);
// }
public void testBug394151() throws Exception {
IParameter f= getBindingFromASTName("f(", 1);
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Symbian Software Systems and others.
* Copyright (c) 2007, 2013 Symbian Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -9,6 +9,7 @@
* Andrew Ferguson (Symbian) - Initial implementation
* Markus Schorn (Wind River Systems)
* Sergey Prigogin (Google)
* Nathan Ridge
*******************************************************************************/
package org.eclipse.cdt.internal.index.tests;
@ -1490,9 +1491,7 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti
assertFalse(b0 instanceof IIndexBinding);
ICPPConstructor b1 = getBindingFromASTName("B(int x)", 1, ICPPConstructor.class);
assertFalse(b1 instanceof IIndexBinding);
ICPPConstructor b2 = getBindingFromASTName("B(0)", 1, ICPPConstructor.class);
assertFalse(b2 instanceof IIndexBinding);
assertEquals(b1, b2);
ICPPClassType b2 = getBindingFromASTName("B(0)", 1, ICPPClassType.class);
ICPPMethod b3 = getBindingFromASTName("m(0)", 1, ICPPMethod.class);
assertFalse(b3 instanceof IIndexBinding);
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2012 Symbian Software Systems and others.
* Copyright (c) 2007, 2013 Symbian Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -300,7 +300,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// X<A> xa= new X<A>();
// }
public void testUnindexedConstructorInstance() {
IBinding b0= getBindingFromASTName("X<A>()", 4);
IBinding b0= getBindingFromImplicitASTName("X<A>()", 4);
assertInstance(b0, ICPPConstructor.class);
}
@ -409,7 +409,7 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa
// assertEquals(3, _ctcs.length); // two implicit plus the constructor template
IBinding b2= getBindingFromASTName("D<int>(", 1);
IBinding b3= getBindingFromASTName("D<int>(", 6);
IBinding b3= getBindingFromImplicitASTName("D<int>(", 6);
assertInstance(b2, ICPPClassTemplate.class); // *D*<int>(5, 6)
assertInstance(b2, ICPPClassType.class); // *D*<int>(5, 6)

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2009, 2012 Wind River Systems, Inc. and others.
* Copyright (c) 2009, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,9 +8,12 @@
* Contributors:
* Markus Schorn - initial API and implementation
* Sergey Prigogin (Google)
* Chris Recoskie (IBM Corporation)
*******************************************************************************/
package org.eclipse.cdt.core.parser;
import java.io.File;
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.model.ITranslationUnit;
@ -133,6 +136,11 @@ public abstract class FileContent {
public static FileContent adapt(CodeReader reader) {
if (reader == null)
return null;
return create(reader.getPath(), reader.buffer);
long fileReadTime = System.currentTimeMillis();
CharArray chars = new CharArray(reader.buffer);
String filePath = reader.getPath();
File file = new File(filePath);
return new InternalFileContent(filePath, chars, file.lastModified(), file.length(), fileReadTime);
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2008, 2011 Wind River Systems, Inc. and others.
* Copyright (c) 2008, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* Markus Schorn - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser;
@ -33,11 +34,11 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I
setName(name);
setValue(value);
}
protected void copyAbstractEnumerator(ASTEnumerator copy, CopyStyle style) {
protected <T extends ASTEnumerator> T copy(T copy, CopyStyle style) {
copy.setName(name == null ? null : name.copy(style));
copy.setValue(value == null ? null : value.copy(style));
copy.setOffsetAndLength(this);
return super.copy(copy, style);
}
@Override
@ -125,23 +126,26 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I
}
private void createEnumValues(IASTEnumerationSpecifier parent) {
IValue previousExplicitValue = null;
int delta = 0;
IASTEnumerator[] etors= parent.getEnumerators();
long cv= -1;
boolean isknown= true;
for (IASTEnumerator etor : etors) {
cv++;
IValue val;
IASTExpression expr= etor.getValue();
if (expr != null) {
IValue val= Value.create(expr, Value.MAX_RECURSION_DEPTH);
Long nv= val.numericalValue();
isknown= false;
if (nv != null) {
isknown= true;
cv= nv.longValue();
val= Value.create(expr, Value.MAX_RECURSION_DEPTH);
previousExplicitValue = val;
delta = 1;
} else {
if (previousExplicitValue != null) {
val = Value.incrementedValue(previousExplicitValue, delta);
} else {
val = Value.create(delta);
}
delta++;
}
if (etor instanceof ASTEnumerator) {
((ASTEnumerator) etor).integralValue= isknown ? Value.create(cv) : Value.UNKNOWN;
((ASTEnumerator) etor).integralValue= val;
}
}
}

View file

@ -129,7 +129,11 @@ public class SizeofCalculator {
sizeof_long_long = getSize(sizeofMacros, "__SIZEOF_LONG_LONG__", maxAlignment); //$NON-NLS-1$
sizeof_int128 = getSize(sizeofMacros, "__SIZEOF_INT128__", maxAlignment); //$NON-NLS-1$
sizeof_short = getSize(sizeofMacros, "__SIZEOF_SHORT__", maxAlignment); //$NON-NLS-1$
sizeof_bool = getSize(sizeofMacros, "__SIZEOF_BOOL__", maxAlignment); //$NON-NLS-1$
SizeAndAlignment size = getSize(sizeofMacros, "__SIZEOF_BOOL__", maxAlignment); //$NON-NLS-1$
// __SIZEOF_BOOL__ is not defined by GCC but sizeof(bool) is needed for template resolution.
if (size == null)
size = SIZE_1;
sizeof_bool = size;
sizeof_wchar_t = getSize(sizeofMacros, "__SIZEOF_WCHAR_T__", maxAlignment); //$NON-NLS-1$
sizeof_float = getSize(sizeofMacros, "__SIZEOF_FLOAT__", maxAlignment); //$NON-NLS-1$
sizeof_complex_float = getSizeOfPair(sizeof_float);
@ -152,7 +156,7 @@ public class SizeofCalculator {
sizeof_long_long = null;
sizeof_int128 = size_16;
sizeof_short = null;
sizeof_bool = null;
sizeof_bool = SIZE_1;
sizeof_wchar_t = null;
sizeof_float = null;
sizeof_complex_float = null;

View file

@ -39,6 +39,7 @@ import org.eclipse.cdt.core.dom.ast.IASTBinaryTypeIdExpression;
import org.eclipse.cdt.core.dom.ast.IASTCastExpression;
import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression;
import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory;
import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression;
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression;
@ -53,16 +54,20 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.IValue;
import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerClause;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.SizeAndAlignment;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinary;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFixed;
import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.TypeTraits;
import org.eclipse.cdt.internal.core.parser.scanner.ExpressionEvaluator;
import org.eclipse.cdt.internal.core.parser.scanner.ExpressionEvaluator.EvalException;
@ -77,6 +82,7 @@ public class Value implements IValue {
public static final int MAX_RECURSION_DEPTH = 25;
public static final Value UNKNOWN= new Value("<unknown>".toCharArray(), null); //$NON-NLS-1$
public static final Value NOT_INITIALIZED= new Value("<__>".toCharArray(), null); //$NON-NLS-1$
private static final IType INT_TYPE= new CPPBasicType(ICPPBasicType.Kind.eInt, 0);
private static final Number VALUE_CANNOT_BE_DETERMINED = new Number() {
@Override
@ -271,6 +277,16 @@ public class Value implements IValue {
return UNKNOWN;
}
public static IValue incrementedValue(IValue value, int increment) {
Long val = value.numericalValue();
if (val != null) {
return create(val.longValue() + increment);
}
ICPPEvaluation arg1 = value.getEvaluation();
EvalFixed arg2 = new EvalFixed(INT_TYPE, ValueCategory.PRVALUE, create(increment));
return create(new EvalBinary(IASTBinaryExpression.op_plus, arg1, arg2));
}
private static Number applyUnaryTypeIdOperator(int operator, IType type, IASTNode point) {
switch (operator) {
case op_sizeof:

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
* Copyright (c) 2007, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* Markus Schorn - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser;
@ -191,7 +192,7 @@ public abstract class VariableReadWriteFlags {
final IType type= functionNameExpression.getExpressionType();
if (type instanceof IFunctionType) {
return rwArgumentForFunctionCall((IFunctionType) type, i, indirection);
} else {
} else if (funcCall instanceof IASTImplicitNameOwner) {
IASTImplicitName[] implicitNames = ((IASTImplicitNameOwner) funcCall).getImplicitNames();
if (implicitNames.length == 1) {
IASTImplicitName name = implicitNames[0];

View file

@ -1,12 +1,12 @@
/*******************************************************************************
* Copyright (c) 2005, 2011 IBM Corporation and others.
* Copyright (c) 2005, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* John Camelon (IBM Rational Software) - Initial API and implementation
* John Camelon (IBM Rational Software) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.c;
@ -34,11 +34,6 @@ public class CASTEnumerator extends ASTEnumerator {
@Override
public CASTEnumerator copy(CopyStyle style) {
CASTEnumerator copy = new CASTEnumerator();
copyAbstractEnumerator(copy, style);
if (style == CopyStyle.withLocations) {
copy.setCopyLocation(this);
}
return copy;
return copy(new CASTEnumerator(), style);
}
}

View file

@ -1,13 +1,13 @@
/*******************************************************************************
* Copyright (c) 2004, 2011 IBM Corporation and others.
* Copyright (c) 2004, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* John Camelon (IBM) - Initial API and implementation
* Markus Schorn (Wind River Systems)
* John Camelon (IBM) - Initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
@ -35,11 +35,6 @@ public class CPPASTEnumerator extends ASTEnumerator {
@Override
public CPPASTEnumerator copy(CopyStyle style) {
CPPASTEnumerator copy = new CPPASTEnumerator();
copyAbstractEnumerator(copy, style);
if (style == CopyStyle.withLocations) {
copy.setCopyLocation(this);
}
return copy;
return copy(new CPPASTEnumerator(), style);
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2012 IBM Corporation and others.
* Copyright (c) 2004, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -550,14 +550,6 @@ public class CPPSemantics {
if (parent instanceof ICPPASTConstructorChainInitializer) {
return true;
}
if (parent instanceof ICPPASTNamedTypeSpecifier) {
parent= parent.getParent();
if (parent instanceof IASTTypeId && parent.getParent() instanceof ICPPASTNewExpression) {
IASTDeclarator dtor = ((IASTTypeId) parent).getAbstractDeclarator();
if (dtor != null && dtor.getPointerOperators().length == 0)
return true;
}
}
return false;
}
@ -3103,27 +3095,43 @@ public class CPPSemantics {
return null;
IType type = ((ICPPVariable) binding).getType();
try {
type = SemanticUtil.getNestedType(type, TDEF | CVTYPE);
if (!(type instanceof ICPPClassType))
return null;
if (type instanceof ICPPClassTemplate || type instanceof ICPPUnknownType || type instanceof ISemanticProblem)
return null;
type = SemanticUtil.getNestedType(type, TDEF | CVTYPE);
if (!(type instanceof ICPPClassType))
return null;
if (type instanceof ICPPClassTemplate || type instanceof ICPPUnknownType || type instanceof ISemanticProblem)
return null;
final ICPPClassType classType = (ICPPClassType) type;
return findImplicitlyCalledConstructor((ICPPClassType) type, initializer, name);
}
public static ICPPConstructor findImplicitlyCalledConstructor(ICPPASTNewExpression expr) {
IType type = getNestedType(expr.getExpressionType(), TDEF | REF | CVTYPE);
if (!(type instanceof IPointerType))
return null;
type = ((IPointerType) type).getType();
if (type instanceof ICPPClassType) {
return findImplicitlyCalledConstructor((ICPPClassType) type,
expr.getInitializer(), expr.getTypeId());
}
return null;
}
private static ICPPConstructor findImplicitlyCalledConstructor(ICPPClassType type, IASTInitializer initializer,
IASTNode typeId) {
try {
if (initializer instanceof IASTEqualsInitializer) {
// Copy initialization.
IASTEqualsInitializer eqInit= (IASTEqualsInitializer) initializer;
ICPPASTInitializerClause initClause = (ICPPASTInitializerClause) eqInit.getInitializerClause();
final ICPPEvaluation evaluation = initClause.getEvaluation();
IType sourceType= evaluation.getTypeOrFunctionSet(name);
ValueCategory isLValue= evaluation.getValueCategory(name);
IType sourceType= evaluation.getTypeOrFunctionSet(typeId);
ValueCategory isLValue= evaluation.getValueCategory(typeId);
if (sourceType != null) {
Cost c;
if (calculateInheritanceDepth(sourceType, classType, name) >= 0) {
c = Conversions.copyInitializationOfClass(isLValue, sourceType, classType, false, name);
if (calculateInheritanceDepth(sourceType, type, typeId) >= 0) {
c = Conversions.copyInitializationOfClass(isLValue, sourceType, type, false, typeId);
} else {
c = Conversions.checkImplicitConversionSequence(type, sourceType, isLValue, UDCMode.ALLOWED, Context.ORDINARY, name);
c = Conversions.checkImplicitConversionSequence(type, sourceType, isLValue, UDCMode.ALLOWED, Context.ORDINARY, typeId);
}
if (c.converts()) {
ICPPFunction f = c.getUserDefinedConversion();
@ -3136,7 +3144,7 @@ public class CPPSemantics {
// List initialization.
ICPPEvaluation eval= ((ICPPASTInitializerList) initializer).getEvaluation();
if (eval instanceof EvalInitList) {
Cost c= Conversions.listInitializationSequence((EvalInitList) eval, type, UDCMode.ALLOWED, true, name);
Cost c= Conversions.listInitializationSequence((EvalInitList) eval, type, UDCMode.ALLOWED, true, typeId);
if (c.converts()) {
ICPPFunction f = c.getUserDefinedConversion();
if (f instanceof ICPPConstructor)
@ -3145,35 +3153,22 @@ public class CPPSemantics {
}
} else if (initializer instanceof ICPPASTConstructorInitializer) {
// Direct initialization.
return findImplicitlyCalledConstructor(classType,
(ICPPASTConstructorInitializer) initializer, name);
return findImplicitlyCalledConstructor(type,
(ICPPASTConstructorInitializer) initializer, typeId);
} else if (initializer == null) {
// Default initialization.
ICPPConstructor[] ctors = ClassTypeHelper.getConstructors(classType, name);
ICPPConstructor[] ctors = ClassTypeHelper.getConstructors(type, typeId);
for (ICPPConstructor ctor : ctors) {
if (ctor.getRequiredArgumentCount() == 0)
return ctor;
}
return null;
}
} catch (DOMException e) {
} catch (DOMException e) {
}
return null;
return null;
}
public static ICPPConstructor findImplicitlyCalledConstructor(ICPPASTNewExpression expr) {
IType type = getNestedType(expr.getExpressionType(), TDEF | REF | CVTYPE);
if (!(type instanceof IPointerType))
return null;
type = ((IPointerType) type).getType();
IASTInitializer initializer = expr.getInitializer();
if (type instanceof ICPPClassType && initializer instanceof ICPPASTConstructorInitializer) {
return findImplicitlyCalledConstructor((ICPPClassType) type,
(ICPPASTConstructorInitializer) initializer, expr.getTypeId());
}
return null;
}
private static ICPPConstructor findImplicitlyCalledConstructor(ICPPClassType classType,
ICPPASTConstructorInitializer initializer, IASTNode typeId) {
final IASTInitializerClause[] arguments = initializer.getArguments();

View file

@ -1,13 +1,14 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
* Copyright (c) 2007, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Schorn - initial API and implementation
* Mike Kucera (IBM) - UTF string literals
* Markus Schorn - initial API and implementation
* Mike Kucera (IBM) - UTF string literals
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.core.parser.scanner;
@ -195,7 +196,7 @@ final public class Lexer implements ITokenSequence {
Token t= fToken;
Token lt= null;
while (true) {
switch(t.getType()) {
switch (t.getType()) {
case IToken.tCOMPLETION:
if (lt != null) {
fLastToken= lt;
@ -228,7 +229,7 @@ final public class Lexer implements ITokenSequence {
public Token nextDirective() throws OffsetLimitReachedException {
Token t0;
Token t1= fToken;
for(;;) {
for (;;) {
t0= t1;
t1= fetchToken();
final int tt1 = t1.getType();
@ -252,7 +253,7 @@ final public class Lexer implements ITokenSequence {
final int start= fOffset;
final int c= fCharPhase3;
final int d= nextCharPhase3();
switch(c) {
switch (c) {
case END_OF_INPUT:
return newToken(IToken.tEND_OF_INPUT, start);
case '\n':
@ -266,7 +267,7 @@ final public class Lexer implements ITokenSequence {
continue;
case 'L':
switch(d) {
switch (d) {
case 'R':
if (fOptions.fSupportRawStringLiterals) {
markPhase3();
@ -289,7 +290,7 @@ final public class Lexer implements ITokenSequence {
case 'u':
case 'U':
if (fOptions.fSupportUTFLiterals) {
switch(d) {
switch (d) {
case 'R':
if (fOptions.fSupportRawStringLiterals) {
markPhase3();
@ -364,7 +365,7 @@ final public class Lexer implements ITokenSequence {
break;
case '\\':
switch(d) {
switch (d) {
case 'u': case 'U':
nextCharPhase3();
return identifier(start, 2);
@ -376,7 +377,7 @@ final public class Lexer implements ITokenSequence {
return number(start, 1, false);
case '.':
switch(d) {
switch (d) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
nextCharPhase3();
@ -420,7 +421,7 @@ final public class Lexer implements ITokenSequence {
return newToken(IToken.tSEMI, start);
case ':':
switch(d) {
switch (d) {
case ':':
nextCharPhase3();
return newToken(IToken.tCOLONCOLON, start);
@ -564,7 +565,7 @@ final public class Lexer implements ITokenSequence {
return headerName(start, false);
}
switch(d) {
switch (d) {
case '=':
nextCharPhase3();
return newToken(IToken.tLTEQUAL, start);
@ -582,8 +583,19 @@ final public class Lexer implements ITokenSequence {
}
break;
case ':':
nextCharPhase3();
return newDigraphToken(IToken.tLBRACKET, start);
// 2.5-3
markPhase3();
if (nextCharPhase3() != ':') {
return newDigraphToken(IToken.tLBRACKET, start);
}
switch (nextCharPhase3()) {
case ':': case '>':
restorePhase3();
nextCharPhase3();
return newDigraphToken(IToken.tLBRACKET, start);
}
restorePhase3();
break;
case '%':
nextCharPhase3();
return newDigraphToken(IToken.tLBRACE, start);
@ -591,7 +603,7 @@ final public class Lexer implements ITokenSequence {
return newToken(IToken.tLT, start);
case '>':
switch(d) {
switch (d) {
case '=':
nextCharPhase3();
return newToken(IToken.tGTEQUAL, start);
@ -636,7 +648,7 @@ final public class Lexer implements ITokenSequence {
private Token newToken(final int kind, final int offset, final int imageLength) {
final int endOffset= fOffset;
final int sourceLen= endOffset-offset;
final int sourceLen= endOffset - offset;
char[] image;
if (sourceLen != imageLength) {
image= getCharImage(offset, endOffset, imageLength);
@ -719,7 +731,7 @@ final public class Lexer implements ITokenSequence {
int c= fCharPhase3;
loop: while (!done) {
switch(c) {
switch (c) {
case END_OF_INPUT:
if (fSupportContentAssist) {
throw new OffsetLimitReachedException(ORIGIN_LEXER, newToken(tokenType, start, length));
@ -752,19 +764,19 @@ final public class Lexer implements ITokenSequence {
final int delimOffset= fOffset;
int delimEndOffset = delimOffset;
int offset;
for(;; delimEndOffset++) {
for (;; delimEndOffset++) {
if (!fInput.isValidOffset(delimEndOffset)) {
offset= delimEndOffset;
break;
}
if (fInput.get(delimEndOffset) == '(') {
offset= delimEndOffset+1;
offset= delimEndOffset + 1;
break;
}
}
final int delimLength= delimEndOffset-delimOffset;
for(;; offset++) {
final int delimLength= delimEndOffset - delimOffset;
for (;; offset++) {
if (!fInput.isValidOffset(offset)) {
handleProblem(IProblem.SCANNER_UNBOUNDED_STRING, getInputChars(start, offset), start);
break;
@ -772,27 +784,27 @@ final public class Lexer implements ITokenSequence {
final char c= fInput.get(offset);
if (c == ')') {
final int endingDoubleQuoteOffset= offset+delimLength+1;
final int endingDoubleQuoteOffset= offset + delimLength + 1;
if (fInput.isValidOffset(endingDoubleQuoteOffset) && fInput.get(endingDoubleQuoteOffset) == '"') {
boolean prefixMatches= true;
for (int i = 0; i < delimLength; i++) {
if (fInput.get(offset + i + 1) != fInput.get(delimOffset+i)) {
if (fInput.get(offset + i + 1) != fInput.get(delimOffset + i)) {
prefixMatches= false;
break;
}
}
if (prefixMatches) {
offset= endingDoubleQuoteOffset+1;
offset= endingDoubleQuoteOffset + 1;
break;
}
}
}
}
fOffset= offset-1;
fOffset= offset - 1;
fEndOffset= offset;
fCharPhase3= 0;
nextCharPhase3();
return newToken(tokenType, start, offset-start);
return newToken(tokenType, start, offset - start);
}
private Token charLiteral(final int start, final int tokenType) throws OffsetLimitReachedException {
@ -802,7 +814,7 @@ final public class Lexer implements ITokenSequence {
int c= fCharPhase3;
loop: while (!done) {
switch(c) {
switch (c) {
case END_OF_INPUT:
if (fSupportContentAssist) {
throw new OffsetLimitReachedException(ORIGIN_LEXER, newToken(tokenType, start, length));
@ -835,7 +847,7 @@ final public class Lexer implements ITokenSequence {
boolean isPartOfIdentifier= true;
int c= fCharPhase3;
while (true) {
switch(c) {
switch (c) {
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i':
case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
@ -849,7 +861,7 @@ final public class Lexer implements ITokenSequence {
case '\\': // universal character name
markPhase3();
switch(nextCharPhase3()) {
switch (nextCharPhase3()) {
case 'u': case 'U':
length++;
break;
@ -904,7 +916,7 @@ final public class Lexer implements ITokenSequence {
boolean isHex= false;
int c= fCharPhase3;
while (true) {
switch(c) {
switch (c) {
// non-digit
case 'a': case 'b': case 'c': case 'd': case 'f': case 'g': case 'h': case 'i':
case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'q': case 'r':
@ -952,7 +964,7 @@ final public class Lexer implements ITokenSequence {
// universal character name (non-digit)
case '\\':
markPhase3();
switch(nextCharPhase3()) {
switch (nextCharPhase3()) {
case 'u': case 'U':
length++;
break;
@ -1013,7 +1025,7 @@ final public class Lexer implements ITokenSequence {
private int nextCharPhase3() {
int pos= fEndOffset;
do {
if (!isValidOffset(pos+1)) {
if (!isValidOffset(pos + 1)) {
if (!isValidOffset(pos)) {
fOffset= pos;
fEndOffset= pos;
@ -1021,7 +1033,7 @@ final public class Lexer implements ITokenSequence {
return END_OF_INPUT;
}
fOffset= pos;
fEndOffset= pos+1;
fEndOffset= pos + 1;
fCharPhase3= fInput.get(pos);
return fCharPhase3;
}
@ -1030,7 +1042,7 @@ final public class Lexer implements ITokenSequence {
fOffset= pos;
fEndOffset= ++pos;
fCharPhase3= c;
switch(c) {
switch (c) {
// windows line-ending
case '\r':
if (fInput.get(pos) == '\n') {
@ -1080,7 +1092,7 @@ final public class Lexer implements ITokenSequence {
* @return the character encoded or 0.
*/
private char checkTrigraph(char c) {
switch(c) {
switch (c) {
case '=': return '#';
case '\'':return '^';
case '(': return '[';
@ -1101,7 +1113,7 @@ final public class Lexer implements ITokenSequence {
boolean haveBackslash= true;
int result= -1;
loop: while (isValidOffset(pos)) {
switch(fInput.get(pos++)) {
switch (fInput.get(pos++)) {
case '\n':
if (haveBackslash) {
result= pos;
@ -1140,7 +1152,7 @@ final public class Lexer implements ITokenSequence {
* Returns the image from the input without any modification.
*/
public char[] getInputChars(int offset, int endOffset) {
final int length= endOffset-offset;
final int length= endOffset - offset;
if (length <= 0) {
return CharArrayUtils.EMPTY;
}
@ -1160,7 +1172,7 @@ final public class Lexer implements ITokenSequence {
final char[] result= new char[imageLength];
markPhase3();
fEndOffset= offset;
for (int idx=0; idx<imageLength; idx++) {
for (int idx= 0; idx < imageLength; idx++) {
result[idx]= (char) nextCharPhase3();
}
restorePhase3();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2012 QNX Software Systems and others.
* Copyright (c) 2005, 2013 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -13,6 +13,7 @@
* Tim Kelly (Nokia)
* Anna Dushistova (MontaVista)
* Marc-Andre Laperle
* Martin Oberhuber (Wind River) - [397652] fix up-to-date check for PDOM
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom;
@ -23,6 +24,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@ -93,6 +95,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path;
@ -109,6 +112,7 @@ import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.core.runtime.preferences.InstanceScope;
import com.ibm.icu.text.MessageFormat;
import com.ibm.icu.text.SimpleDateFormat;
/**
* Manages PDOM updates and events associated with them. Provides methods for index access.
@ -1529,11 +1533,25 @@ public class PDOMManager implements IWritableIndexManager, IListener {
* @throws CoreException
*/
public boolean isProjectContentSynced(ICProject cproject) throws CoreException {
IStatus s = getProjectContentSyncState(cproject);
return s == null;
}
/**
* Checks whether the index is in sync with the file system.
* @param cproject the project to check
* @return <code>null</code> when the content in the project fragment of the specified project's index
* is complete (contains all sources) and up to date; or an @link{IStatus} indicating the first
* occurrence of an index file found not up-to-date, along with its include trail.
* @throws CoreException in case of a file access or other internal error
*/
public IStatus getProjectContentSyncState(ICProject cproject) throws CoreException {
if (!"true".equals(IndexerPreferences.get(cproject.getProject(), IndexerPreferences.KEY_INDEX_ALL_FILES, null))) //$NON-NLS-1$
return true; // no check performed in this case
return null; // No check is performed in this case
Set<ITranslationUnit> sources= new HashSet<ITranslationUnit>();
cproject.accept(new TranslationUnitCollector(sources, null, new NullProgressMonitor()));
IStatus syncStatus = null;
try {
IIndex index= getIndex(cproject);
@ -1543,8 +1561,9 @@ public class PDOMManager implements IWritableIndexManager, IListener {
IResource resource= tu.getResource();
if (resource instanceof IFile && isSubjectToIndexing(tu.getLanguage())) {
IIndexFileLocation location= IndexLocationFactory.getWorkspaceIFL((IFile) resource);
if (!areSynchronized(new HashSet<IIndexFileLocation>(), index, resource, location)) {
return false;
syncStatus = areSynchronized(new HashSet<IIndexFileLocation>(), index, resource, location);
if (syncStatus != null) {
return syncStatus;
}
}
}
@ -1555,11 +1574,11 @@ public class PDOMManager implements IWritableIndexManager, IListener {
CCorePlugin.log(e);
}
return true;
return null;
}
private boolean isSubjectToIndexing(ILanguage language) {
final int linkageID=language.getLinkageID();
final int linkageID = language.getLinkageID();
for (int id : IDS_FOR_LINKAGES_TO_INDEX) {
if (linkageID == id)
return true;
@ -1568,45 +1587,57 @@ public class PDOMManager implements IWritableIndexManager, IListener {
}
/**
* Recursively checks that the specified file, and its include are up-to-date.
* Recursively checks that the specified file, and its includes are up-to-date.
* @param trail a set of previously checked include file locations
* @param index the index to check against
* @param resource the resource to check from the workspace
* @param location the location to check from the index
* @return whether the specified file, and its includes are up-to-date.
* @return <code>null</code> when whether the specified file, and its includes are up-to-date,
* or a MultiStatus indicating the file found to be not in sync along with it include trail.
* @throws CoreException
*/
private static boolean areSynchronized(Set<IIndexFileLocation> trail, IIndex index, IResource resource, IIndexFileLocation location) throws CoreException {
private static MultiStatus areSynchronized(Set<IIndexFileLocation> trail, IIndex index,
IResource resource, IIndexFileLocation location) throws CoreException {
if (!trail.contains(location)) {
trail.add(location);
IIndexFile[] file= index.getFiles(location);
IIndexFile[] files= index.getFiles(location);
// pre-includes may be listed twice (191989)
if (file.length < 1 || file.length > 2)
return false;
if (files.length <= 0)
return new MultiStatus(CCorePlugin.PLUGIN_ID, IStatus.OK, "No index file found for: " + location, null); //$NON-NLS-1$
if (resource.getLocalTimeStamp() != file[0].getTimestamp())
return false;
for (IIndexFile file : files) {
long diff = resource.getLocalTimeStamp() - file.getTimestamp();
if (diff != 0) {
return new MultiStatus(CCorePlugin.PLUGIN_ID, IStatus.OK,
"Index timestamp for '" //$NON-NLS-1$
+ file.getLocation().getFullPath()
+ "' is " + diff + " msec older than " //$NON-NLS-1$ //$NON-NLS-2$
+ location
+ "(" + SimpleDateFormat.getDateTimeInstance().format(new Date(resource.getLocalTimeStamp())) //$NON-NLS-1$
+ ")", null); //$NON-NLS-1$
}
// if it is up-to-date, the includes have not changed and may
// be read from the index.
IIndexInclude[] includes= index.findIncludes(file[0]);
for (IIndexInclude inc : includes) {
IIndexFileLocation newLocation= inc.getIncludesLocation();
if (newLocation != null) {
String path= newLocation.getFullPath();
if (path != null) {
IResource newResource= ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path));
if (!areSynchronized(trail, index, newResource, newLocation)) {
return false;
// If it is up-to-date, the includes have not changed and may be read from the index.
IIndexInclude[] includes= index.findIncludes(file);
for (IIndexInclude inc : includes) {
IIndexFileLocation newLocation= inc.getIncludesLocation();
if (newLocation != null) {
String path= newLocation.getFullPath();
if (path != null) {
IResource newResource= ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path));
MultiStatus m = areSynchronized(trail, index, newResource, newLocation);
if (m != null) {
m.add(new Status(IStatus.INFO, CCorePlugin.PLUGIN_ID,
"Included by " + file.getLocation().getFullPath())); //$NON-NLS-1$
return m;
}
}
}
}
}
}
return true;
return null;
}
public boolean isFileIndexedUnconditionally(IIndexFileLocation ifl) {

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2009 Symbian Software Systems and others.
* Copyright (c) 2007, 2013 Symbian Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,11 +8,11 @@
* Contributors:
* Andrew Ferguson (Symbian) - Initial implementation
* Markus Schorn (Wind River Systems)
* Martin Oberhuber (Wind River) - [397652] fix up-to-date check for PDOM
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom.export;
import java.io.File;
import com.ibm.icu.text.MessageFormat;
import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
@ -26,9 +26,12 @@ import org.eclipse.cdt.internal.core.pdom.WritablePDOM;
import org.eclipse.cdt.internal.core.pdom.indexer.IndexerPreferences;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import com.ibm.icu.text.MessageFormat;
/**
* An ISafeRunnable which
* <ul>
@ -43,14 +46,28 @@ public class GeneratePDOM {
protected File targetLocation;
protected String indexerID;
protected boolean deleteOnExit;
public GeneratePDOM(IExportProjectProvider pm, String[] applicationArguments, File targetLocation, String indexerID) {
protected boolean checkIndexStatus;
/**
* Runnable to export a PDOM.
* @param checkIndexStatus <code>true</code> to check index completeness before exporting, or
* <code>false</code> to export the index without checking anything
* @since 5.5
*/
public GeneratePDOM(IExportProjectProvider pm, String[] applicationArguments, File targetLocation,
String indexerID, boolean checkIndexStatus) {
this.pm= pm;
this.applicationArguments= applicationArguments;
this.targetLocation= targetLocation;
this.indexerID= indexerID;
this.checkIndexStatus= checkIndexStatus;
}
public GeneratePDOM(IExportProjectProvider pm, String[] applicationArguments, File targetLocation,
String indexerID) {
this(pm, applicationArguments, targetLocation, indexerID, true);
}
/**
* When set, the project created by the associated {@link IExportProjectProvider} will
* be deleted after {@link #run()} completes. By default this is not set.
@ -66,74 +83,77 @@ public class GeneratePDOM {
* @throws CoreException if an internal or invalid configuration error occurs
*/
public final IStatus run() throws CoreException {
boolean isContentSynced= false;
// create the project
// Create the project
pm.setApplicationArguments(applicationArguments);
final ICProject cproject = pm.createProject();
if(cproject==null) {
if (cproject == null) {
fail(MessageFormat.format(Messages.GeneratePDOM_ProjectProviderReturnedNullCProject,
new Object [] {pm.getClass().getName()}));
return null; // cannot be reached, inform the compiler
new Object[] { pm.getClass().getName() }));
return null; // Cannot be reached, inform the compiler
}
IIndexLocationConverter converter= pm.getLocationConverter(cproject);
if(converter==null) {
if (converter == null) {
fail(MessageFormat.format(Messages.GeneratePDOM_NullLocationConverter,
new Object [] {pm.getClass().getName()}));
new Object[] { pm.getClass().getName() }));
}
// index the project
// Index the project
IndexerPreferences.set(cproject.getProject(), IndexerPreferences.KEY_INDEXER_ID, indexerID);
try {
final IIndexManager im = CCorePlugin.getIndexManager();
final IIndexManager manager = CCorePlugin.getIndexManager();
for (int i = 0; i < 20; i++) {
if(CCoreInternals.getPDOMManager().isProjectRegistered(cproject)) {
im.joinIndexer(Integer.MAX_VALUE, new NullProgressMonitor());
if (!im.isIndexerSetupPostponed(cproject)) {
if (CCoreInternals.getPDOMManager().isProjectRegistered(cproject)) {
manager.joinIndexer(Integer.MAX_VALUE, new NullProgressMonitor());
if (!manager.isIndexerSetupPostponed(cproject)) {
break;
}
}
Thread.sleep(200);
}
// check status
isContentSynced= CCoreInternals.getPDOMManager().isProjectContentSynced(cproject);
if(isContentSynced) {
// export a .pdom file
CCoreInternals.getPDOMManager().exportProjectPDOM(cproject, targetLocation, converter);
// write properties to exported PDOM
WritablePDOM exportedPDOM= new WritablePDOM(targetLocation, converter, LanguageManager.getInstance().getPDOMLinkageFactoryMappings());
exportedPDOM.acquireWriteLock(0);
try {
Map<String,String> exportProperties= pm.getExportProperties();
if(exportProperties!=null) {
for(Map.Entry<String,String> entry : exportProperties.entrySet()) {
exportedPDOM.setProperty(entry.getKey(), entry.getValue());
}
}
exportedPDOM.close();
}
finally {
exportedPDOM.releaseWriteLock();
if (checkIndexStatus) {
// Check status
IStatus syncStatus = CCoreInternals.getPDOMManager().getProjectContentSyncState(cproject);
if (syncStatus != null) {
// Add message and error severity
IStatus myStatus = new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, Messages.GeneratePDOM_Incomplete);
MultiStatus m = new MultiStatus(CCorePlugin.PLUGIN_ID, 1, new IStatus[] {myStatus, syncStatus},
Messages.GeneratePDOM_Incomplete, null);
// Log the status right away since legacy clients did not return any status details
CCorePlugin.log(m);
return m;
}
}
} catch(InterruptedException ie) {
// Export a .pdom file
CCoreInternals.getPDOMManager().exportProjectPDOM(cproject, targetLocation, converter);
// Write properties to exported PDOM
WritablePDOM exportedPDOM= new WritablePDOM(targetLocation, converter,
LanguageManager.getInstance().getPDOMLinkageFactoryMappings());
exportedPDOM.acquireWriteLock(0);
try {
Map<String, String> exportProperties= pm.getExportProperties();
if (exportProperties != null) {
for(Map.Entry<String, String> entry : exportProperties.entrySet()) {
exportedPDOM.setProperty(entry.getKey(), entry.getValue());
}
}
exportedPDOM.close();
} finally {
exportedPDOM.releaseWriteLock();
}
} catch (InterruptedException ie) {
String msg= MessageFormat.format(Messages.GeneratePDOM_GenericGenerationFailed, new Object[] {ie.getMessage()});
throw new CoreException(CCorePlugin.createStatus(msg, ie));
} finally {
if(deleteOnExit) {
if (deleteOnExit) {
cproject.getProject().delete(true, new NullProgressMonitor());
}
}
return isContentSynced ?
new Status(IStatus.OK, CCorePlugin.PLUGIN_ID, Messages.GeneratePDOM_Success)
: new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, Messages.GeneratePDOM_Incomplete);
return new Status(IStatus.OK, CCorePlugin.PLUGIN_ID, Messages.GeneratePDOM_Success);
}
private void fail(String message) throws CoreException {

View file

@ -757,6 +757,30 @@
<simple name="valueName"/>
<simple name="appName"/>
</processType>
<processType
name="AddFiles2"
processRunner="org.eclipse.cdt.core.templateengine.process.processes.AddFiles">
<simple name="projectName"/>
<simple name="startPattern"/>
<simple name="endPattern"/>
<complexArray name="files">
<baseType>
<simple name="source"/>
<simple name="target"/>
<simple name="replaceable"/>
</baseType>
</complexArray>
</processType>
<processType
name="AddNature"
processRunner="org.eclipse.cdt.core.templateengine.process.processes.AddNature">
<simple
name="projectName">
</simple>
<simple
name="natureId">
</simple>
</processType>
</extension>
<extension
point="org.eclipse.cdt.core.CProjectDescriptionStorage">

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2008 Symbian Software Limited and others.
* Copyright (c) 2007, 2013 Symbian Software Limited and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -9,6 +9,7 @@
* Bala Torati (Symbian) - Initial API and implementation
* Mark Espiritu (VastSystems) - bug 215283
* Raphael Zulliger (Indel AG) - [367482] fixed resource leak
* Doug Schaefer (QNX) - added different start and end patterns for macros
*******************************************************************************/
package org.eclipse.cdt.core.templateengine.process;
@ -77,21 +78,35 @@ public class ProcessHelper {
* @since 4.0
*/
public static Set<String> getReplaceKeys(String str) {
return getReplaceKeys(str, START_PATTERN, END_PATTERN);
}
/**
* This method returns a vector of all replace marker strings. (e.g.,
* $(item), vector contains 'item' as one item) is the end pattern.
*
* @param str A given string possibly containing markers.
* @param startPattern token to start macro replacement
* @param endPattern token to end macro replacement
* @return the set of names occurring within markers
* @since 5.5
*/
public static Set<String> getReplaceKeys(String str, String startPattern, String endPattern) {
Set<String> replaceStrings = new HashSet<String>();
int start= 0;
int end= 0;
while ((start = str.indexOf(START_PATTERN, start)) >= 0) {
end = str.indexOf(END_PATTERN, start);
while ((start = str.indexOf(startPattern, start)) >= 0) {
end = str.indexOf(endPattern, start);
if (end != -1) {
replaceStrings.add(str.substring(start + START_PATTERN.length(), end));
start = end + END_PATTERN.length();
replaceStrings.add(str.substring(start + startPattern.length(), end));
start = end + endPattern.length();
} else {
start++;
}
}
return replaceStrings;
}
/**
* This method takes a URL as parameter to read the contents, and to add
* into a string buffer.
@ -183,12 +198,24 @@ public class ProcessHelper {
*
* @since 4.0
*/
public static String getValueAfterExpandingMacros(String string, Set<String> macros,
Map<String, String> valueStore) {
public static String getValueAfterExpandingMacros(String string, Set<String> macros, Map<String, String> valueStore) {
return getValueAfterExpandingMacros(string, macros, valueStore, START_PATTERN, END_PATTERN);
}
/**
* @param string
* @param macros
* @param valueStore
* @return the macro value after expanding the macros.
*
* @since 5.5
*/
public static String getValueAfterExpandingMacros(String string, Set<String> macros, Map<String, String> valueStore,
String startPattern, String endPattern) {
for (String key : macros) {
String value = valueStore.get(key);
if (value != null) {
string = string.replace(START_PATTERN + key + END_PATTERN, value);
string = string.replace(startPattern + key + endPattern, value);
}
}
return string;
@ -203,4 +230,5 @@ public class ProcessHelper {
public static String getReplaceMarker(String macro) {
return START_PATTERN + macro + END_PATTERN;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2008 Symbian Software Limited and others.
* Copyright (c) 2007, 2013 Symbian Software Limited and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* Bala Torati (Symbian) - Initial API and implementation
* Doug Schaefer (QNX) - Added overridable start and end patterns
*******************************************************************************/
package org.eclipse.cdt.core.templateengine.process.processes;
@ -29,7 +30,6 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
/**
* Adds Files to the Project
*/
@ -40,9 +40,30 @@ public class AddFiles extends ProcessRunner {
*/
@Override
public void process(TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor) throws ProcessFailureException {
String projectName = args[0].getSimpleValue();
IProject projectHandle = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
ProcessArgument[][] files = args[1].getComplexArrayValue();
IProject projectHandle = null;
ProcessArgument[][] files = null;
String startPattern = null;
String endPattern = null;
for (ProcessArgument arg : args) {
String argName = arg.getName();
if (argName.equals("projectName")) { //$NON-NLS-1$
projectHandle = ResourcesPlugin.getWorkspace().getRoot().getProject(arg.getSimpleValue());
} else if (argName.equals("files")) { //$NON-NLS-1$
files = arg.getComplexArrayValue();
} else if (argName.equals("startPattern")) { //$NON-NLS-1$
startPattern = arg.getSimpleValue();
} else if (argName.equals("endPattern")) { //$NON-NLS-1$
endPattern = arg.getSimpleValue();
}
}
if (projectHandle == null)
throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddFiles.8"))); //$NON-NLS-1$
if (files == null)
throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddFiles.9"))); //$NON-NLS-1$
for(int i=0; i<files.length; i++) {
ProcessArgument[] file = files[i];
String fileSourcePath = file[0].getSimpleValue();
@ -67,7 +88,12 @@ public class AddFiles extends ProcessRunner {
} catch (IOException e) {
throw new ProcessFailureException(Messages.getString("AddFiles.3") + fileSourcePath); //$NON-NLS-1$
}
fileContents = ProcessHelper.getValueAfterExpandingMacros(fileContents, ProcessHelper.getReplaceKeys(fileContents), template.getValueStore());
if (startPattern != null && endPattern != null)
fileContents = ProcessHelper.getValueAfterExpandingMacros(fileContents, ProcessHelper.getReplaceKeys(fileContents, startPattern, endPattern), template.getValueStore(),
startPattern, endPattern);
else
fileContents = ProcessHelper.getValueAfterExpandingMacros(fileContents, ProcessHelper.getReplaceKeys(fileContents), template.getValueStore());
contents = new ByteArrayInputStream(fileContents.getBytes());
} else {
try {

View file

@ -0,0 +1,57 @@
/*******************************************************************************
* Copyright (c) 2013 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Doug Schaefer (QNX) - Initial implementation
*******************************************************************************/
package org.eclipse.cdt.core.templateengine.process.processes;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.templateengine.TemplateCore;
import org.eclipse.cdt.core.templateengine.process.ProcessArgument;
import org.eclipse.cdt.core.templateengine.process.ProcessFailureException;
import org.eclipse.cdt.core.templateengine.process.ProcessRunner;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
/**
* @author dschaefer
* @since 5.5
*
*/
public class AddNature extends ProcessRunner {
@Override
public void process(TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor) throws ProcessFailureException {
IProject project = null;
String natureId = null;
for (ProcessArgument arg : args) {
String argName = arg.getName();
if (argName.equals("projectName")) //$NON-NLS-1$
project = ResourcesPlugin.getWorkspace().getRoot().getProject(arg.getSimpleValue());
else if (argName.equals("natureId")) //$NON-NLS-1$
natureId = arg.getSimpleValue();
}
if (project == null)
throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddNature.noProject"))); //$NON-NLS-1$
if (natureId == null)
throw new ProcessFailureException(getProcessMessage(processId, IStatus.ERROR, Messages.getString("AddNature.noNature"))); //$NON-NLS-1$
try {
CProjectNature.addNature(project, natureId, monitor);
} catch (CoreException e) {
throw new ProcessFailureException(e);
}
}
}

View file

@ -9,13 +9,15 @@
# Bala Torati (Symbian) - Initial API and implementation
###############################################################################
AddFiles.1=Add File failure: template source not found:
AddFiles.1=Add Files failure: template source not found:
AddFiles.2=Add Files failure: template source not found:
AddFiles.3=Add Files failure: cannot read template source:
AddFiles.4=Add File failure: cannot read template source:
AddFiles.4=Add Files failure: cannot read template source:
AddFiles.5=Add Files failure: File already exists.
AddFiles.6=Add Files failure:
AddFiles.7=Add Files failure:
AddFiles.8=Add Files failure: projectName not specified
AddFiles.9=Add Files failure: No files
AddFile.0=Add File failure: template source not found:
AddFile.1=Add File failure: template source not found:
AddFile.2=Add File failure: cannot read template source:
@ -53,3 +55,5 @@ Append.0=Add File failure: template source not found:
Append.1=Copy failure: template source not found:
Append.3=Copy failure: cannot read template source:
Append.4=Append failure: failed while trying to append contents.
AddNature.noProject=Add nature failure: projectName not specified
AddNature.noNature=Add nature failure: nature not specified

View file

@ -20,7 +20,7 @@ import junit.framework.TestSuite;
import org.eclipse.jface.text.IRegion;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.parser.tests.ast2.AST2BaseTest;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase;
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
@ -31,7 +31,7 @@ import org.eclipse.cdt.internal.ui.search.LinkedNamesFinder;
/**
* Tests for LinkedNamesFinder class.
*/
public class LinkedNamesFinderTest extends AST2BaseTest {
public class LinkedNamesFinderTest extends AST2TestBase {
private static class RegionComparator implements Comparator<IRegion> {
@Override
public int compare(IRegion r1, IRegion r2) {

View file

@ -432,7 +432,7 @@ public class CIndenterTest extends BaseUITestCase {
//class MyClass {
//typedef int MyType;
//public:
//int getA() {
//virtual int getA() {
//return a;
//}
//MyClass();
@ -444,7 +444,7 @@ public class CIndenterTest extends BaseUITestCase {
//class MyClass {
// typedef int MyType;
// public:
// int getA() {
// virtual int getA() {
// return a;
// }
// MyClass();

View file

@ -1,11 +1,11 @@
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* Copyright (c) 2000, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Contributors:
* IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems)
* Andrew Ferguson (Symbian)
@ -28,26 +28,21 @@ import org.eclipse.cdt.ui.text.ICPartitions;
import org.eclipse.cdt.internal.ui.text.CTextTools;
/**
* Tests to verify the C partitioning.
* Derived from JavaPartitionerTest.
*/
public class CPartitionerTest extends TestCase {
private CTextTools fTextTools;
private Document fDocument;
protected boolean fDocumentPartitioningChanged;
public CPartitionerTest(String name) {
super(name);
}
@Override
protected void setUp() {
fTextTools= new CTextTools();
fDocument= new Document();
@ -84,7 +79,6 @@ public class CPartitionerTest extends TestCase {
}
protected void checkPartitioning(ITypedRegion[] expectation, ITypedRegion[] result) {
assertEquals("invalid number of partitions", expectation.length, result.length);
for (int i= 0; i < expectation.length; i++) {
@ -92,12 +86,10 @@ public class CPartitionerTest extends TestCase {
ITypedRegion r= result[i];
assertTrue(print(r) + " != " + print(e), r.equals(e));
}
}
public void testInitialPartitioning() {
try {
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx"
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -121,7 +113,6 @@ public class CPartitionerTest extends TestCase {
public void testIntraPartitionChange() {
try {
fDocument.replace(34, 3, "y");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\ny\n/***/\nxxx");
@ -148,7 +139,6 @@ public class CPartitionerTest extends TestCase {
public void testIntraPartitionChange2() {
try {
fDocument.replace(41, 0, "yyy");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/**yyy*/\nxxx");
@ -172,9 +162,9 @@ public class CPartitionerTest extends TestCase {
assertTrue(false);
}
}
public void testInsertNewPartition() {
try {
fDocument.replace(35, 1, "/***/");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx/***/x\n/***/\nxxx");
@ -200,9 +190,9 @@ public class CPartitionerTest extends TestCase {
assertTrue(false);
}
}
public void testInsertStringPartition() {
try {
fDocument.replace(35, 1, "\"yyy\"");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"x\n/***/\nxxx");
@ -228,9 +218,9 @@ public class CPartitionerTest extends TestCase {
assertTrue(false);
}
}
public void testInsertCharacterPartition() {
try {
fDocument.replace(35, 1, "'y'");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"x\n/***/\nxxx");
@ -256,9 +246,9 @@ public class CPartitionerTest extends TestCase {
assertTrue(false);
}
}
public void testInsertPreprocessorPartition() {
try {
fDocument.replace(4, 0, " # include <x.h>\n");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"x\n/***/\nxxx");
// "xxx\n # include <x.h>\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nx\"yyy\"x\n/***/\nxxx");
@ -287,13 +277,11 @@ public class CPartitionerTest extends TestCase {
public void testRemovePartition1() {
try {
fDocument.replace(13, 16, null);
// "xxx\n/*xxx*/\nx/**/\nxxx\n/***/\nxxx");
assertTrue(fDocumentPartitioningChanged);
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
new TypedRegion(0, 4, IDocument.DEFAULT_CONTENT_TYPE),
@ -312,12 +300,10 @@ public class CPartitionerTest extends TestCase {
}
public void testRemovePartition2() {
testJoinPartition3();
fDocumentPartitioningChanged= false;
try {
fDocument.replace(5, 2, null);
// "xxx\nxxx\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx"
@ -340,10 +326,8 @@ public class CPartitionerTest extends TestCase {
}
}
public void testJoinPartitions1() {
try {
fDocument.replace(31, 1, null);
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/*/\nxxx\n/***/\nxxx"
@ -368,7 +352,6 @@ public class CPartitionerTest extends TestCase {
public void testJoinPartitions2() {
try {
fDocument.replace(32, 1, null);
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**\nxxx\n/***/\nxxx"
@ -393,7 +376,6 @@ public class CPartitionerTest extends TestCase {
public void testJoinPartition3() {
try {
fDocument.replace(9, 2, null);
// "xxx\n/*xxx\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx"
@ -416,22 +398,16 @@ public class CPartitionerTest extends TestCase {
}
}
public void testSplitPartition1() {
testJoinPartitions1();
fDocumentPartitioningChanged= false;
try {
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/*/\nxxx\n/***/\nxxx"
fDocument.replace(31, 0, "*");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx"
assertTrue(fDocumentPartitioningChanged);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -440,18 +416,15 @@ public class CPartitionerTest extends TestCase {
}
public void testSplitPartition2() {
testJoinPartitions2();
fDocumentPartitioningChanged= false;
try {
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**\nxxx\n/***/\nxxx"
fDocument.replace(32, 0, "/");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx"
assertTrue(fDocumentPartitioningChanged);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -460,11 +433,9 @@ public class CPartitionerTest extends TestCase {
}
public void testSplitPartition3() {
fDocumentPartitioningChanged= false;
try {
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx"
fDocument.replace(12, 9, "");
// "xxx\n/*xxx*/\nx*/\nxxx\n/**/\nxxx\n/***/\nxxx"
@ -490,7 +461,6 @@ public class CPartitionerTest extends TestCase {
public void testCorruptPartitioning1() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/\n/***/");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -513,7 +483,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(14, 1, IDocument.DEFAULT_CONTENT_TYPE),
new TypedRegion(15, 7, ICPartitions.C_MULTI_LINE_COMMENT)
};
} catch (BadLocationException x) {
assertTrue(false);
}
@ -521,7 +490,6 @@ public class CPartitionerTest extends TestCase {
public void testCorruptPartitioning2() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/\n/***/\n/***/");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -548,7 +516,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(22, 1, IDocument.DEFAULT_CONTENT_TYPE),
new TypedRegion(23, 5, ICPartitions.C_MULTI_LINE_COMMENT)
};
} catch (BadLocationException x) {
assertTrue(false);
}
@ -556,7 +523,6 @@ public class CPartitionerTest extends TestCase {
public void testCorruptPartitioning3() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/\n/**/");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -581,7 +547,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(17, 1, IDocument.DEFAULT_CONTENT_TYPE),
new TypedRegion(18, 5, ICPartitions.C_MULTI_LINE_COMMENT)
};
} catch (BadLocationException x) {
assertTrue(false);
}
@ -589,7 +554,6 @@ public class CPartitionerTest extends TestCase {
public void testOpenPartition1() {
try {
fDocument.replace(42, 1, null);
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***\nxxx"
@ -616,7 +580,6 @@ public class CPartitionerTest extends TestCase {
public void testOpenPartition2() {
try {
fDocument.replace(47, 0, "/*");
// "xxx\n/*xxx*/\nxxx\n/**xxx*/\nxxx\n/**/\nxxx\n/***/\nxxx/*"
@ -646,7 +609,6 @@ public class CPartitionerTest extends TestCase {
public void testPartitionFinder() {
try {
ITypedRegion[] partitioning= fDocument.computePartitioning(0, fDocument.getLength());
for (int i= 0; i < partitioning.length; i++) {
@ -656,7 +618,6 @@ public class CPartitionerTest extends TestCase {
assertTrue(expected.equals(result));
}
}
} catch (BadLocationException x) {
assertTrue(false);
}
@ -664,7 +625,6 @@ public class CPartitionerTest extends TestCase {
public void testExtendPartition() {
try {
fDocument.replace(0, fDocument.getLength(), "/*");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -681,7 +641,6 @@ public class CPartitionerTest extends TestCase {
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -689,7 +648,6 @@ public class CPartitionerTest extends TestCase {
public void testTogglePartition() {
try {
fDocument.replace(0, fDocument.getLength(), "\t/*\n\tx\n\t/*/\n\ty\n//\t*/");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -712,7 +670,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(10, 12, ICPartitions.C_MULTI_LINE_COMMENT)
};
checkPartitioning(expectation2, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -720,7 +677,6 @@ public class CPartitionerTest extends TestCase {
public void testEditing1() {
try {
fDocument.replace(0, fDocument.getLength(), "");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -749,7 +705,6 @@ public class CPartitionerTest extends TestCase {
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -757,7 +712,6 @@ public class CPartitionerTest extends TestCase {
public void testEditing2() {
try {
fDocument.replace(0, fDocument.getLength(), "");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -794,7 +748,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(0, fDocument.getLength(), ICPartitions.C_MULTI_LINE_COMMENT)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -802,7 +755,6 @@ public class CPartitionerTest extends TestCase {
public void testEditing3() {
try {
fDocument.replace(0, fDocument.getLength(), "");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -831,7 +783,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(8, 1, IDocument.DEFAULT_CONTENT_TYPE)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -839,7 +790,6 @@ public class CPartitionerTest extends TestCase {
public void testEditingString() {
try {
fDocument.replace(0, fDocument.getLength(), "");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -904,7 +854,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(5, 2, ICPartitions.C_STRING)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -912,7 +861,6 @@ public class CPartitionerTest extends TestCase {
public void testEditingCharacter() {
try {
fDocument.replace(0, fDocument.getLength(), "");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -977,7 +925,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(5, 2, ICPartitions.C_CHARACTER)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -985,7 +932,6 @@ public class CPartitionerTest extends TestCase {
public void testEditingPreprocessor() {
try {
fDocument.replace(0, fDocument.getLength(), "");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -1096,7 +1042,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(33, 1, IDocument.DEFAULT_CONTENT_TYPE)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1104,7 +1049,6 @@ public class CPartitionerTest extends TestCase {
public void testLineSplicing_Bug124113() {
try {
fDocument.replace(0, fDocument.getLength(), "// comment... \\\\\ncontinued");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -1136,7 +1080,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(0, fDocument.getLength(), ICPartitions.C_CHARACTER)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1144,7 +1087,6 @@ public class CPartitionerTest extends TestCase {
public void testCommentInPreprocessorString() {
try {
fDocument.replace(0, fDocument.getLength(), "#define S \"http://www.foo.bar\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
@ -1160,7 +1102,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(0, fDocument.getLength(), ICPartitions.C_PREPROCESSOR)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1168,7 +1109,6 @@ public class CPartitionerTest extends TestCase {
public void testString1() {
try {
fDocument.replace(0, fDocument.getLength(), "\"[string]\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1184,7 +1124,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(10, 9, ICPartitions.C_STRING)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1192,7 +1131,6 @@ public class CPartitionerTest extends TestCase {
public void testString2() {
try {
fDocument.replace(0, fDocument.getLength(), "\"string\"RRRRRRRR\"string\"nostring");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1202,7 +1140,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(24, 8, IDocument.DEFAULT_CONTENT_TYPE)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1210,7 +1147,6 @@ public class CPartitionerTest extends TestCase {
public void testRawString1() {
try {
fDocument.replace(0, fDocument.getLength(), "R\"(line 1\n/*line 2*/\nline 3\n)\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1235,7 +1171,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(1, fDocument.getLength() - 1, ICPartitions.C_STRING)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1243,7 +1178,6 @@ public class CPartitionerTest extends TestCase {
public void testRawString2() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1261,7 +1195,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(13, fDocument.getLength() - 13, ICPartitions.C_STRING)
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1269,7 +1202,6 @@ public class CPartitionerTest extends TestCase {
public void testRawString3() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\" \"str\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1291,7 +1223,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING),
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1299,7 +1230,6 @@ public class CPartitionerTest extends TestCase {
public void testRawString_Bug352544() {
try {
fDocument.replace(0, fDocument.getLength(), "BAR\"(\";");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1308,7 +1238,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(6, 1, IDocument.DEFAULT_CONTENT_TYPE),
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1316,7 +1245,6 @@ public class CPartitionerTest extends TestCase {
public void testEditingRawString1() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\" \"str\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1351,7 +1279,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING),
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1359,7 +1286,6 @@ public class CPartitionerTest extends TestCase {
public void testEditingRawString2() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\" \"str\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
@ -1402,7 +1328,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(6, fDocument.getLength() - 6, ICPartitions.C_STRING),
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}
@ -1410,8 +1335,7 @@ public class CPartitionerTest extends TestCase {
public void testEditingRawString3() {
try {
fDocument.replace(0, fDocument.getLength(), "/***/R\"(line 1\nline 2\nline 3\n)\" \"str\"");
fDocument.replace(0, fDocument.getLength(), "/***/R\"\"(line 1\nline 2\nline 3\n)\"\" \"str\"");
ITypedRegion[] result= fDocument.computePartitioning(0, fDocument.getLength());
TypedRegion[] expectation= {
new TypedRegion(0, 5, ICPartitions.C_MULTI_LINE_COMMENT),
@ -1433,7 +1357,6 @@ public class CPartitionerTest extends TestCase {
new TypedRegion(fDocument.getLength() - 5, 5, ICPartitions.C_STRING),
};
checkPartitioning(expectation, result);
} catch (BadLocationException x) {
assertTrue(false);
}

View file

@ -1,11 +1,11 @@
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* Copyright (c) 2000, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Contributors:
* IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems) - Adapted for CDT
*******************************************************************************/
@ -20,13 +20,12 @@ import org.eclipse.cdt.internal.ui.editor.SemanticHighlightings;
/**
* Semantic highlighting tests.
*
*
* <p>Derived from JDT.<p>
*
* @since 4.0
*/
public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
private static final boolean PRINT_POSITIONS= false;
private static final Class<?> THIS= SemanticHighlightingTest.class;
@ -101,7 +100,7 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
createPosition(108, 4, 26),
createPosition(112, 4, 25),
createPosition(117, 4, 32),
};
};
if (PRINT_POSITIONS) System.out.println(toString(actual));
assertEqualPositions(expected, actual);
}
@ -121,10 +120,9 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
createPosition(108, 4, 26),
createPosition(112, 4, 25),
createPosition(117, 4, 32),
createPosition(118, 23, 9),
createPosition(122, 4, 15),
createPosition(130, 13, 9),
};
};
Position[] actual= getSemanticHighlightingPositions();
if (PRINT_POSITIONS) System.out.println(toString(actual));
assertEqualPositions(expected, actual);
@ -134,7 +132,7 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
setUpSemanticHighlighting(SemanticHighlightings.STATIC_METHOD_INVOCATION);
Position[] expected= new Position[] {
createPosition(122, 4, 15),
};
};
Position[] actual= getSemanticHighlightingPositions();
if (PRINT_POSITIONS) System.out.println(toString(actual));
assertEqualPositions(expected, actual);
@ -256,6 +254,7 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
createPosition(112, 4, 14),
createPosition(117, 4, 14),
createPosition(118, 4, 9),
createPosition(118, 23, 9),
createPosition(120, 4, 8),
createPosition(129, 4, 8),
createPosition(147, 42, 7),
@ -297,7 +296,6 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
assertEqualPositions(expected, actual);
}
public void testGlobalVariableHighlighting() throws Exception {
setUpSemanticHighlighting(SemanticHighlightings.GLOBAL_VARIABLE);
Position[] actual= getSemanticHighlightingPositions();
@ -421,5 +419,4 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
if (PRINT_POSITIONS) System.out.println(toString(actual));
assertEqualPositions(expected, actual);
}
}

View file

@ -608,6 +608,8 @@ excludedFile.name = C/C++ Files and Folders Excluded from Build
excludedFile.description = Decorates source files and folders excluded from C/C++ build.
includeFolderDecorator.name = C/C++ Missing Include Folders
includeFolderDecorator.description = Decorates missing include folders with error/warning indicator.
CustomBuildSettingsDecorator.name= C/C++ Files and Folders with Customized Build Settings
CustomBuildSettingsDecorator.description= Decorates files and folders when build settings are different from parent resource.
templatesViewName= Templates
@ -629,9 +631,11 @@ LanguageSettingsProviderAssociationExtensionPoint=Language Settings Provider UI
overrideAnnotation.label = C/C++ Override indicators
transfer.EditorAppearance.name = C/C++ Editor Appearance
transfer.EditorAppearance.description = Preference related to how the editor presents the edited code to the user (including colors, fonts, hovers, foldings, etc...)
transfer.EditorAppearance.description = Preferences related to how the editor presents the edited code to the user (including colors, fonts, hovers, foldings, etc...)
transfer.EditorBehavior.name = C/C++ Editor Behavior
transfer.EditorBehavior.description = Preference related to how the editor process the edited code (typing, save action, etc...)
transfer.EditorBehavior.description = Preferences related to how the editor deals with the edited code (typing, save action, etc...)
transfer.CodeStyle.name = C/C++ Code Style
transfer.CodeStyle.description = C/C++ > Code Style preferences
# Refresh Exclusion Contributors
RefreshExclusionContributor.name = Resources

View file

@ -4167,6 +4167,22 @@
</or>
</enablement>
</decorator>
<decorator
adaptable="true"
class="org.eclipse.cdt.internal.ui.viewsupport.CustomBuildSettingsDecorator"
id="org.eclipse.cdt.internal.ui.CustomBuildSettingsDecorator"
label="%CustomBuildSettingsDecorator.name"
lightweight="true"
location="TOP_RIGHT"
state="true">
<description>%CustomBuildSettingsDecorator.description</description>
<enablement>
<or>
<objectClass name="org.eclipse.core.resources.IFile" />
<objectClass name="org.eclipse.core.resources.IFolder" />
</or>
</enablement>
</decorator>
</extension>
<!-- Hyperlinking support -->
@ -4492,6 +4508,7 @@
<extension
point="org.eclipse.ui.preferenceTransfer">
<transfer
icon="icons/view16/c_pers.gif"
id="org.eclipse.cdt.ui.transfer.editor.appearance"
name="%transfer.EditorAppearance.name">
<mapping scope="instance">
@ -4550,6 +4567,7 @@
</description>
</transfer>
<transfer
icon="icons/view16/c_pers.gif"
id="org.eclipse.cdt.ui.transfer.editor.behavior"
name="%transfer.EditorBehavior.name">
<mapping scope="instance">
@ -4583,15 +4601,31 @@
<key name="stickyOccurrences"/>
<key name="markOverloadedOperatorsOccurrences"/>
<key name="scalability." match="prefix"/>
<key
name="content_assist_proposals_timeout">
</key>
<key name="content_assist_proposals_timeout"/>
</entry>
</mapping>
<description>
%transfer.EditorBehavior.description
</description>
</transfer>
<transfer
icon="icons/view16/c_pers.gif"
id="org.eclipse.cdt.ui.transfer.code_style"
name="%transfer.CodeStyle.name">
<mapping scope="instance">
<entry node="org.eclipse.cdt.ui">
<key name="codetemplates." match="prefix"/>
<key name="nameStyle." match="prefix"/>
<key name="formatter_profile"/>
<key name="class_member_ascending_visibility_order"/>
<key name="function_output_parameters_before_input"/>
<key name="function_pass_output_parameters_by_pointer"/>
</entry>
</mapping>
<description>
%transfer.CodeStyle.description
</description>
</transfer>
</extension>
<extension

View file

@ -93,13 +93,12 @@ import org.eclipse.cdt.internal.ui.viewsupport.DecoratingCLabelProvider;
*
* @since 5.0
*/
public abstract class AbstractCModelOutlinePage extends Page implements IContentOutlinePage, ISelectionChangedListener, IAdaptable {
public abstract class AbstractCModelOutlinePage extends Page
implements IContentOutlinePage, ISelectionChangedListener, IAdaptable {
/**
* The default label provider for the outline.
*/
public static class COutlineLabelProvider extends AppearanceAwareLabelProvider {
/**
* Flag whether to show member definitions with qualified or simple names.
*/
@ -148,9 +147,7 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
public OutlineTreeViewer(Composite parent, int flags) {
super(parent, flags);
}
/*
* @see TreeViewer#internalExpandToLevel
*/
@Override
protected void internalExpandToLevel(Widget node, int level) {
if (node instanceof Item) {
@ -210,10 +207,9 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
PreferenceConstants.getPreferenceStore().setValue(PreferenceConstants.OUTLINE_GROUP_INCLUDES, isChecked());
}
public boolean isIncludesGroupingEnabled () {
public boolean isIncludesGroupingEnabled() {
return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.OUTLINE_GROUP_INCLUDES);
}
}
/**
@ -244,10 +240,9 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
PreferenceConstants.getPreferenceStore().setValue(PreferenceConstants.OUTLINE_GROUP_MACROS, isChecked());
}
public boolean isMacroGroupingEnabled () {
public boolean isMacroGroupingEnabled() {
return PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.OUTLINE_GROUP_MACROS);
}
}
/**
@ -257,7 +252,6 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
* @since 3.0
*/
public class ToggleLinkingAction extends AbstractToggleLinkingAction {
/**
* Constructs a new action.
*/
@ -277,7 +271,9 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
}
}
private static final long TEXT_FLAGS = AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | CElementLabels.F_APP_TYPE_SIGNATURE | CElementLabels.M_APP_RETURNTYPE;
private static final long TEXT_FLAGS =
AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | CElementLabels.F_APP_TYPE_SIGNATURE |
CElementLabels.M_APP_RETURNTYPE;
private static final int IMAGE_FLAGS = AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS;
protected ITextEditor fEditor;
protected ITranslationUnit fInput;
@ -374,12 +370,12 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
int offset= tsel.getOffset();
ICElement element= null;
if (fEditor instanceof CEditor) {
element= ((CEditor)fEditor).getElementAt(offset, false);
element= ((CEditor) fEditor).getElementAt(offset, false);
} else if (fInput != null) {
try {
element= fInput.getElementAtOffset(offset);
} catch (CModelException exc) {
CUIPlugin.log(exc);
} catch (CModelException e) {
CUIPlugin.log(e);
}
}
if (element != null) {
@ -407,11 +403,11 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
* Sets the selected element to the one at the current cursor position in the editor.
*/
public void synchronizeSelectionWithEditor() {
if(fInput == null || fEditor == null || fTreeViewer == null)
if (fInput == null || fEditor == null || fTreeViewer == null)
return;
ITextSelection editorSelection = (ITextSelection) fEditor.getSelectionProvider().getSelection();
if(editorSelection == null)
if (editorSelection == null)
return;
int offset = editorSelection.getOffset();
@ -513,7 +509,8 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
site.setSelectionProvider(fTreeViewer);
IActionBars bars= site.getActionBars();
bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY, fTogglePresentation);
bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY,
fTogglePresentation);
fSelectionSearchGroup = createSearchActionGroup();
fOpenViewActionGroup = createOpenViewActionGroup();
@ -529,7 +526,7 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
fTreeViewer.setInput(fInput);
PlatformUI.getWorkbench().getHelpSystem().setHelp(control, ICHelpContextIds.COUTLINE_VIEW);
IHandlerService handlerService= (IHandlerService)site.getService(IHandlerService.class);
IHandlerService handlerService= (IHandlerService) site.getService(IHandlerService.class);
handlerService.activateHandler(CollapseAllHandler.COMMAND_ID, new ActionHandler(fCollapseAllAction));
}
@ -764,7 +761,7 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
public void setInput(ITranslationUnit unit) {
fInput = unit;
if (fTreeViewer != null) {
fTreeViewer.setInput (fInput);
fTreeViewer.setInput(fInput);
}
}
@ -786,5 +783,4 @@ public abstract class AbstractCModelOutlinePage extends Page implements IContent
};
fTreeViewer.addDragSupport(ops, transfers, new CDTViewerDragAdapter(fTreeViewer, dragListeners));
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2012 IBM Corporation and others.
* Copyright (c) 2005, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -1637,7 +1637,7 @@ public class CEditor extends TextEditor implements ICEditor, ISelectionChangedLi
fOutlinePage = new CContentOutlinePage(this);
fOutlinePage.addSelectionChangedListener(this);
}
setOutlinePageInput(fOutlinePage, getEditorInput());
setOutlinePageInputIfNotSame(fOutlinePage, getEditorInput());
return fOutlinePage;
}
@ -2567,6 +2567,16 @@ public class CEditor extends TextEditor implements ICEditor, ISelectionChangedLi
}
}
private static void setOutlinePageInputIfNotSame(CContentOutlinePage page, IEditorInput input) {
if (page != null) {
IWorkingCopyManager manager = CUIPlugin.getDefault().getWorkingCopyManager();
IWorkingCopy workingCopy = manager.getWorkingCopy(input);
if (workingCopy != page.getRoot()) {
page.setInput(workingCopy);
}
}
}
/**
* Determines if folding is enabled.
* @return <code>true</code> if folding is enabled, <code>false</code> otherwise.

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
* Copyright (c) 2006, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,6 +8,7 @@
* Contributors:
* Markus Schorn - initial API and implementation
* Ed Swartz (Nokia)
* Martin Oberhuber (Wind River) - bug 398195: consider external API in IB
*******************************************************************************/
package org.eclipse.cdt.internal.ui.includebrowser;
@ -81,6 +82,7 @@ import org.eclipse.ui.part.ViewPart;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.index.IndexLocationFactory;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel;
@ -214,7 +216,8 @@ public class IBViewPart extends ViewPart implements IShowInSource, IShowInTarget
protected IStatus run(IProgressMonitor monitor) {
try {
final ICProject[] projects= CoreModel.getDefault().getCModel().getCProjects();
IIndex index= CCorePlugin.getIndexManager().getIndex(projects);
IIndex index= CCorePlugin.getIndexManager().getIndex(projects,
IIndexManager.ADD_EXTENSION_FRAGMENTS_INCLUDE_BROWSER);
index.acquireReadLock();
try {
if (!IndexUI.isIndexed(index, input)) {

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007 Wind River Systems, Inc. and others.
* Copyright (c) 2007, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
*
* Contributors:
* Markus Schorn - initial API and implementation
* Martin Oberhuber (Wind River) - bug 398195: consider external API in IB
*******************************************************************************/
package org.eclipse.cdt.internal.ui.includebrowser;
@ -21,6 +22,7 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.index.IIndexInclude;
import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.model.CoreModelUtil;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
@ -70,7 +72,8 @@ public class IncludeBrowserUI {
private static ITranslationUnit findTargetTranslationUnit(IInclude input) throws CoreException, InterruptedException {
ICProject project= input.getCProject();
if (project != null) {
IIndex index= CCorePlugin.getIndexManager().getIndex(project);
IIndex index= CCorePlugin.getIndexManager().getIndex(project,
IIndexManager.ADD_EXTENSION_FRAGMENTS_INCLUDE_BROWSER);
index.acquireReadLock();
try {
IIndexInclude include= IndexUI.elementToInclude(index, input);

View file

@ -439,9 +439,12 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
if (event.getChecked()) {
if (LanguageSettingsManager.isWorkspaceProvider(checkedProvider) && !LanguageSettingsManager.isPreferShared(id)) {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(checkedProvider);
if (rawProvider instanceof ILanguageSettingsEditableProvider) {
newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false);
newProvider = getInitialProvider(id);
if(newProvider == null) {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(checkedProvider);
if (rawProvider instanceof ILanguageSettingsEditableProvider) {
newProvider = LanguageSettingsManager.getProviderCopy((ILanguageSettingsEditableProvider) rawProvider, false);
}
}
}
} else {
@ -479,13 +482,16 @@ public class LanguageSettingsProviderTab extends AbstractCPropertyTab {
newProvider = LanguageSettingsManager.getWorkspaceProvider(id);
} else {
// Toggle to configuration-owned provider
try {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider instanceof ILanguageSettingsEditableProvider) {
newProvider = ((ILanguageSettingsEditableProvider) rawProvider).cloneShallow();
newProvider = getInitialProvider(id);
if(newProvider == null) {
try {
ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
if (rawProvider instanceof ILanguageSettingsEditableProvider) {
newProvider = ((ILanguageSettingsEditableProvider) rawProvider).cloneShallow();
}
} catch (CloneNotSupportedException e) {
CUIPlugin.log("Error cloning provider " + id, e); //$NON-NLS-1$
}
} catch (CloneNotSupportedException e) {
CUIPlugin.log("Error cloning provider " + id, e); //$NON-NLS-1$
}
}
if (newProvider != null) {

View file

@ -202,7 +202,7 @@ LanguageSettingsProviderTab_Reset=Reset
LanguageSettingsProviderTab_ProviderOptions=Language Settings Provider Options
LanguageSettingsProviderTab_SettingEntries=Setting Entries
LanguageSettingsProviderTab_SettingEntriesTooltip=Setting Entries
LanguageSettingsProviderTab_ShareProviders=Share setting entries between projects (global provider)
LanguageSettingsProviderTab_ShareProviders=Use global provider shared between projects
LanguageSettingsProviderTab_StoreEntriesInsideProject=Store entries in project settings folder (easing project migration)
LanguageSettingsProviderTab_TitleResetProviders=Reset Language Settings Providers
LanguageSettingsProviderTab_WorkspaceSettings=Workspace Settings

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* Copyright (c) 2000, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -10,7 +10,6 @@
* Anton Leherbauer (Wind River Systems
* Andrew Ferguson (Symbian)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences;
import java.io.BufferedReader;
@ -81,7 +80,6 @@ import org.eclipse.cdt.internal.ui.text.util.CColorManager;
* @since 4.0
*/
class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
/**
* Item in the highlighting color list.
*/
@ -161,7 +159,6 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
}
private static class SemanticHighlightingColorListItem extends HighlightingColorListItem {
/** Enablement preference key */
private final String fEnableKey;
@ -175,7 +172,8 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
* @param underlineKey the underlineKey preference key
* @param enableKey the enable preference key
*/
public SemanticHighlightingColorListItem(String displayName, String colorKey, String boldKey, String italicKey, String strikethroughKey, String underlineKey, String enableKey) {
public SemanticHighlightingColorListItem(String displayName, String colorKey, String boldKey,
String italicKey, String strikethroughKey, String underlineKey, String enableKey) {
super(displayName, colorKey, boldKey, italicKey, strikethroughKey, underlineKey);
fEnableKey= enableKey;
}
@ -192,9 +190,6 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
* Color list label provider.
*/
private class ColorListLabelProvider extends LabelProvider implements IColorProvider {
/*
* @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
if (element instanceof String)
@ -202,17 +197,11 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
return ((HighlightingColorListItem)element).getDisplayName();
}
/*
* @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
*/
@Override
public Color getBackground(Object element) {
return null;
}
/*
* @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
*/
@Override
public Color getForeground(Object element) {
if (element instanceof SemanticHighlightingColorListItem) {
@ -228,25 +217,15 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
* Color list content provider.
*/
private class ColorListContentProvider implements ITreeContentProvider {
/*
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
@Override
public Object[] getElements(Object inputElement) {
return new String[] {fCodeCategory, fAssemblyCategory, fCommentsCategory, fPreprocessorCategory, fDoxygenCategory};
}
/*
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
@Override
public void dispose() {
}
/*
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@ -564,7 +543,6 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
}
private Control createSyntaxPage(final Composite parent) {
Composite colorComposite= new Composite(parent, SWT.NONE);
GridLayout layout= new GridLayout();
layout.marginHeight= 0;
@ -912,11 +890,11 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
{ createHighlightedRange(13, 16, 4, SemanticHighlightings.ENUMERATOR) },
{ createHighlightedRange(13, 22, 3, SemanticHighlightings.ENUMERATOR) },
{ createHighlightedRange(13, 27, 3, SemanticHighlightings.ENUMERATOR) },
{ createHighlightedRange(14, 14, 11, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(13, 14, 11, SemanticHighlightings.FIELD) },
{ createHighlightedRange(14, 14, 11, SemanticHighlightings.STATIC_FIELD), createHighlightedRange(14, 14, 11, SemanticHighlightings.FIELD) },
{ createHighlightedRange(15, 6, 5, SemanticHighlightings.FIELD) },
{ createHighlightedRange(16, 10, 6, SemanticHighlightings.ENUM) },
{ createHighlightedRange(16, 17, 7, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(15, 17, 7, SemanticHighlightings.METHOD) },
{ createHighlightedRange(17, 7, 6, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(16, 7, 6, SemanticHighlightings.METHOD) },
{ createHighlightedRange(16, 17, 7, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(16, 17, 7, SemanticHighlightings.METHOD) },
{ createHighlightedRange(17, 7, 6, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(17, 7, 6, SemanticHighlightings.METHOD) },
{ createHighlightedRange(17, 14, 6, SemanticHighlightings.ENUM) },
{ createHighlightedRange(17, 21, 1, SemanticHighlightings.PARAMETER_VARIABLE) },
{ createHighlightedRange(18, 8, 5, SemanticHighlightings.LOCAL_VARIABLE_DECLARATION) },
@ -925,9 +903,9 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
{ createHighlightedRange(19, 7, 6, SemanticHighlightings.FUNCTION) },
{ createHighlightedRange(19, 14, 5, SemanticHighlightings.LOCAL_VARIABLE) },
{ createHighlightedRange(20, 4, 7, SemanticHighlightings.METHOD) },
{ createHighlightedRange(21, 4, 12, SemanticHighlightings.STATIC_METHOD_INVOCATION), createHighlightedRange(20, 4, 12, SemanticHighlightings.METHOD) },
{ createHighlightedRange(21, 4, 12, SemanticHighlightings.STATIC_METHOD_INVOCATION), createHighlightedRange(21, 4, 12, SemanticHighlightings.METHOD) },
{ createHighlightedRange(22, 4, 7, SemanticHighlightings.PROBLEM) },
{ createHighlightedRange(24, 14, 12, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(23, 14, 12, SemanticHighlightings.METHOD) },
{ createHighlightedRange(24, 14, 12, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(24, 14, 12, SemanticHighlightings.METHOD) },
};
}

View file

@ -9,7 +9,6 @@
* IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.preferences;
import org.eclipse.swt.widgets.Composite;
@ -19,8 +18,6 @@ import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
/**
* Code coloring preference page.
* <p>
@ -30,41 +27,27 @@ import org.eclipse.cdt.internal.ui.ICHelpContextIds;
* @since 4.0
*/
public class CEditorColoringPreferencePage extends AbstractConfigurationBlockPreferencePage {
/*
* @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#getHelpId()
*/
@Override
protected String getHelpId() {
return ICHelpContextIds.C_EDITOR_COLORS_PREF_PAGE;
}
/*
* @see org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setDescription()
*/
@Override
protected void setDescription() {
String description= PreferencesMessages.CEditorPreferencePage_colors;
setDescription(description);
}
@Override
protected Label createDescriptionLabel(Composite parent) {
return null;
}
/*
* @see org.org.eclipse.ui.internal.editors.text.AbstractConfigurationBlockPreferencePage#setPreferenceStore()
*/
@Override
protected void setPreferenceStore() {
setPreferenceStore(CUIPlugin.getDefault().getPreferenceStore());
}
/*
* @see org.eclipse.ui.internal.editors.text.AbstractConfigureationBlockPreferencePage#createConfigurationBlock(org.eclipse.ui.internal.editors.text.OverlayPreferenceStore)
*/
@Override
protected IPreferenceConfigurationBlock createConfigurationBlock(OverlayPreferenceStore overlayPreferenceStore) {
return new CEditorColoringConfigurationBlock(overlayPreferenceStore);

Some files were not shown because too many files have changed in this diff Show more