From c8ffa1d1193fe03e9a36de093c13f36612761c90 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Wed, 26 Aug 2009 08:36:05 +0000 Subject: [PATCH] Bug 280417 - ArrayIndexOutOfBoundsException in MementoTokenizer causes "could not update landmark markers" error --- .../cdt/internal/core/model/SourceManipulation.java | 10 +++++++++- .../cdt/internal/core/model/TranslationUnit.java | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/SourceManipulation.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/SourceManipulation.java index d0c288723fc..389bb1f97f0 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/SourceManipulation.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/SourceManipulation.java @@ -245,13 +245,16 @@ public class SourceManipulation extends Parent implements ISourceManipulation, I final String elementName; if (token.charAt(0) != CEM_ELEMENTTYPE) { elementName= token; + if (!memento.hasMoreTokens()) return null; token= memento.nextToken(); } else { // anonymous elementName= ""; //$NON-NLS-1$ } // element type - assert token.charAt(0) == CEM_ELEMENTTYPE; + if (token.charAt(0) != CEM_ELEMENTTYPE || !memento.hasMoreTokens()) { + return null; + } String typeString= memento.nextToken(); int elementType; try { @@ -270,6 +273,11 @@ public class SourceManipulation extends Parent implements ISourceManipulation, I if (token.charAt(0) != CEM_PARAMETER) { break; } + if (!memento.hasMoreTokens()) { + params.add(""); //$NON-NLS-1$ + token= null; + break; + } params.add(memento.nextToken()); token= null; } while (memento.hasMoreTokens()); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java index 4cc093cd25e..f3b588da3e1 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java @@ -1016,13 +1016,16 @@ public class TranslationUnit extends Openable implements ITranslationUnit { final String elementName; if (token.charAt(0) != CEM_ELEMENTTYPE) { elementName= token; + if (!memento.hasMoreTokens()) return null; token= memento.nextToken(); } else { // anonymous elementName= ""; //$NON-NLS-1$ } // element type - assert token.charAt(0) == CEM_ELEMENTTYPE; + if (token.charAt(0) != CEM_ELEMENTTYPE || !memento.hasMoreTokens()) { + return null; + } String typeString= memento.nextToken(); int elementType; try { @@ -1041,6 +1044,11 @@ public class TranslationUnit extends Openable implements ITranslationUnit { if (token.charAt(0) != CEM_PARAMETER) { break; } + if (!memento.hasMoreTokens()) { + params.add(""); //$NON-NLS-1$ + token= null; + break; + } params.add(memento.nextToken()); token= null; } while (memento.hasMoreTokens());