Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Leherbauer2011-02-24 10:23:50 +0000
committerAnton Leherbauer2011-02-24 10:23:50 +0000
commit9749e711263b7778d88b5ffbd73c7001af3afe53 (patch)
tree73778e2453d644c4cda8d0514bb76e37d42e71ac
parent56d19301829b80d9aa7d1475452540ad7d5a4889 (diff)
downloadorg.eclipse.cdt-9749e711263b7778d88b5ffbd73c7001af3afe53.tar.gz
org.eclipse.cdt-9749e711263b7778d88b5ffbd73c7001af3afe53.tar.xz
org.eclipse.cdt-9749e711263b7778d88b5ffbd73c7001af3afe53.zip
Bug 316502 - makefile outline doesn't work with alternate encoding
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java56
-rw-r--r--build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/makefile/MakefileReconcilingStrategy.java39
2 files changed, 69 insertions, 26 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java
index c1a4231f212..11c6ea3d6c4 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java
@@ -1,19 +1,22 @@
/*******************************************************************************
- * Copyright (c) 2002, 2010 QNX Software Systems and others.
+ * Copyright (c) 2002, 2011 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:
- * QNX Software Systems - Initial API and implementation
- * Nokia - Bug 163094
+ * QNX Software Systems - Initial API and implementation
+ * Nokia - Bug 163094
+ * Wind River Systems - Bug 316502
*******************************************************************************/
package org.eclipse.cdt.make.core;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.util.ArrayList;
@@ -37,6 +40,7 @@ import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigInfoFactory
import org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCScannerConfigUtil;
import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil;
import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileInfo;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
@@ -61,6 +65,30 @@ import org.osgi.framework.BundleContext;
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class MakeCorePlugin extends Plugin {
+
+ private static class FileStoreReaderProvider implements IMakefileReaderProvider {
+
+ private final String fEncoding;
+
+ private FileStoreReaderProvider(String encoding) {
+ fEncoding = encoding != null ? encoding : ResourcesPlugin.getEncoding();
+ }
+
+ public Reader getReader(URI fileURI) throws IOException {
+ try {
+ final IFileStore store = EFS.getStore(fileURI);
+ final IFileInfo info = store.fetchInfo();
+ if (!info.exists() || info.isDirectory())
+ throw new IOException();
+
+ return new InputStreamReader(store.openInputStream(EFS.NONE, null), fEncoding);
+ } catch (CoreException e) {
+ MakeCorePlugin.log(e);
+ throw new IOException(e.getMessage());
+ }
+ }
+ }
+
public static final String PLUGIN_ID = "org.eclipse.cdt.make.core"; //$NON-NLS-1$
public static final String MAKE_PROJECT_ID = MakeCorePlugin.getUniqueIdentifier() + ".make"; //$NON-NLS-1$
public static final String OLD_BUILDER_ID = "org.eclipse.cdt.core.cbuilder"; //$NON-NLS-1$
@@ -153,7 +181,7 @@ public class MakeCorePlugin extends Plugin {
while (st.hasMoreElements()) {
v.add(st.nextToken());
}
- return v.toArray(new String[v.size()]);
+ return v.toArray(new String[v.size()]);
}
/**
@@ -186,10 +214,19 @@ public class MakeCorePlugin extends Plugin {
return makefile;
}
- static public IMakefile createMakefile(IFileStore file, boolean isGnuStyle, String[] makefileDirs) throws CoreException {
- return createMakefile(file.toURI(), isGnuStyle, makefileDirs, null);
+ public static IMakefile createMakefile(IFileStore file, boolean isGnuStyle, String[] makefileDirs) throws CoreException {
+ return createMakefile(file.toURI(), isGnuStyle, makefileDirs, (String) null);
+ }
+
+ static IMakefile createMakefile(IFileStore file, boolean isGnuStyle, String[] makefileDirs, String encoding) throws CoreException {
+ return createMakefile(file.toURI(), isGnuStyle, makefileDirs, encoding);
}
+ static IMakefile createMakefile(URI fileURI, boolean isGnuStyle, String[] makefileDirs, String encoding) {
+ return createMakefile(fileURI, isGnuStyle, makefileDirs, new FileStoreReaderProvider(encoding));
+ }
+
+
/**
* Create an IMakefile using the given IMakefileReaderProvider to fetch
* contents by name.
@@ -229,13 +266,12 @@ public class MakeCorePlugin extends Plugin {
*
* @param fileURI URI of main file
*/
- public static IMakefile createMakefile(URI fileURI,
- boolean isGnuStyle, String[] makefileDirs) {
- return createMakefile(fileURI, isGnuStyle, makefileDirs, null);
+ public static IMakefile createMakefile(URI fileURI, boolean isGnuStyle, String[] makefileDirs) {
+ return createMakefile(fileURI, isGnuStyle, makefileDirs, (String) null);
}
public IMakefile createMakefile(IFile file) throws CoreException {
- return createMakefile(EFS.getStore(file.getLocationURI()), isMakefileGNUStyle(), getMakefileDirs());
+ return createMakefile(EFS.getStore(file.getLocationURI()), isMakefileGNUStyle(), getMakefileDirs(), file.getCharset());
}
@Override
diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/makefile/MakefileReconcilingStrategy.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/makefile/MakefileReconcilingStrategy.java
index aa46ecc1c50..c6e2af62b7b 100644
--- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/makefile/MakefileReconcilingStrategy.java
+++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/makefile/MakefileReconcilingStrategy.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 QNX Software Systems and others.
+ * Copyright (c) 2000, 2011 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
+ * Wind River Systems - Bug 316502
*******************************************************************************/
package org.eclipse.cdt.make.internal.ui.text.makefile;
@@ -20,18 +21,19 @@ import org.eclipse.cdt.make.internal.ui.editor.IReconcilingParticipant;
import org.eclipse.cdt.make.internal.ui.editor.MakefileContentOutlinePage;
import org.eclipse.cdt.make.internal.ui.editor.MakefileEditor;
import org.eclipse.cdt.make.ui.IWorkingCopyManager;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.reconciler.DirtyRegion;
import org.eclipse.jface.text.reconciler.IReconcilingStrategy;
+import org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
-public class MakefileReconcilingStrategy implements IReconcilingStrategy {
+public class MakefileReconcilingStrategy implements IReconcilingStrategy, IReconcilingStrategyExtension {
- private int fLastRegionOffset;
private ITextEditor fEditor;
private IWorkingCopyManager fManager;
private IDocumentProvider fDocumentProvider;
@@ -40,7 +42,6 @@ public class MakefileReconcilingStrategy implements IReconcilingStrategy {
public MakefileReconcilingStrategy(MakefileEditor editor) {
fOutliner= editor.getOutlinePage();
- fLastRegionOffset = Integer.MAX_VALUE;
fEditor= editor;
fManager= MakeUIPlugin.getDefault().getWorkingCopyManager();
fDocumentProvider= MakeUIPlugin.getDefault().getMakefileDocumentProvider();
@@ -61,23 +62,14 @@ public class MakefileReconcilingStrategy implements IReconcilingStrategy {
* @see IReconcilingStrategy#reconcile(IRegion)
*/
public void reconcile(IRegion region) {
- // We use a trick to avoid running the reconciler multiple times
- // on a file when it gets changed. This is because this gets called
- // multiple times with different regions of the file, we do a
- // complete parse on the first region.
- if(region.getOffset() <= fLastRegionOffset) {
- reconcile();
- }
- fLastRegionOffset = region.getOffset();
+ reconcile();
}
/**
* @see IReconcilingStrategy#reconcile(DirtyRegion, IRegion)
*/
public void reconcile(DirtyRegion dirtyRegion, IRegion region) {
- // FIXME: This seems to generate to much flashing in
- // the contentouline viewer.
- //reconcile();
+ assert false : "This is a non-incremental reconciler"; //$NON-NLS-1$
}
private void reconcile() {
@@ -102,5 +94,20 @@ public class MakefileReconcilingStrategy implements IReconcilingStrategy {
//
}
}
- }
+ }
+
+ /*
+ * @see org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension#setProgressMonitor(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void setProgressMonitor(IProgressMonitor monitor) {
+ // no use for a progress monitor at the moment
+ }
+
+ /*
+ * @see org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension#initialReconcile()
+ */
+ public void initialReconcile() {
+ // no need to reconcile initially
+// reconcile();
+ }
}

Back to the top