diff --git a/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java index 75c7b3d1c10..974aa96a8be 100644 --- a/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java +++ b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java @@ -10,7 +10,6 @@ package org.eclipse.cdt.build.gcc.core; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -32,6 +31,7 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Platform; import org.eclipse.launchbar.core.target.ILaunchTarget; import org.eclipse.launchbar.core.target.ILaunchTargetManager; @@ -151,23 +151,26 @@ public class GCCToolChain implements IToolChain { if (files.length > 0) { // replace it with a temp file Path parentPath = filePath.getParent(); - int n = 0; - while (true) { - // TODO need to know the language - tmpFile = parentPath.resolve(".sc" + n + ".cpp"); //$NON-NLS-1$ //$NON-NLS-2$ - commandLine.set(i, tmpFile.toString()); - try { - Files.createFile(tmpFile); - break; - } catch (FileAlreadyExistsException e) { - // try again - ++n; - } + String extension = files[0].getFileExtension(); + if (extension == null) { + // Not sure if this is a reasonable choice when there's + // no extension + extension = ".cpp"; //$NON-NLS-1$ + } else { + extension = '.' + extension; } - break; + tmpFile = Files.createTempFile(parentPath, ".sc", extension); //$NON-NLS-1$ + commandLine.set(i, tmpFile.toString()); } } } + if (tmpFile == null) { + // Have to assume there wasn't a source file. Add one in the + // resource's container + IPath parentPath = resource instanceof IFile ? resource.getParent().getLocation() : resource.getLocation(); + tmpFile = Files.createTempFile(parentPath.toFile().toPath(), ".sc", ".cpp"); //$NON-NLS-1$ //$NON-NLS-2$ + commandLine.add(tmpFile.toString()); + } Files.createDirectories(buildDirectory); diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java index 669000a309a..ec3028bb3d4 100644 --- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java +++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/QtBuildConfiguration.java @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.parser.IExtendedScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.internal.qt.core.Activator; import org.eclipse.core.resources.IBuildConfiguration; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; @@ -208,7 +209,16 @@ public class QtBuildConfiguration extends CBuildConfiguration { args.addAll(Arrays.asList(getProperty("QMAKE_CXXFLAGS").split(" "))); //$NON-NLS-1$ //$NON-NLS-2$ args.add("-o"); //$NON-NLS-1$ args.add("-"); //$NON-NLS-1$ - args.add(resource.getLocation().toString()); + + String srcFile; + if (resource instanceof IFile) { + srcFile = resource.getLocation().toOSString(); + // Only add file if it's an IFile + args.add(srcFile); + } else { + // Doesn't matter, the toolchain will create a tmp file for this + srcFile = "scannerInfo.cpp"; //$NON-NLS-1$ + } String[] includePaths = getProperty("INCLUDEPATH").split(" "); //$NON-NLS-1$ //$NON-NLS-2$ for (int i = 0; i < includePaths.length; ++i) { @@ -219,7 +229,7 @@ public class QtBuildConfiguration extends CBuildConfiguration { } ILanguage language = LanguageManager.getInstance() - .getLanguage(CCorePlugin.getContentType(getProject(), resource.getName()), getProject()); // $NON-NLS-1$ + .getLanguage(CCorePlugin.getContentType(getProject(), srcFile), getProject()); // $NON-NLS-1$ Path dir = Paths.get(getProject().getLocationURI()); IExtendedScannerInfo extendedInfo = getToolChain().getScannerInfo(command, args, Arrays.asList(includePaths), resource, dir);