From d39f018db6bef040b410367d5c4e67a7049a152e Mon Sep 17 00:00:00 2001 From: Mike Kucera Date: Thu, 22 May 2008 20:13:25 +0000 Subject: [PATCH] bug 233561, NPE when instantiating UPCLanguage --- .../dom/lrparser/BaseExtensibleLanguage.java | 19 ++++++++++++++++--- .../core/dom/lrparser/c99/C99Language.java | 6 ------ .../core/dom/lrparser/cpp/ISOCPPLanguage.java | 7 ------- .../eclipse/cdt/core/dom/upc/UPCLanguage.java | 18 ------------------ 4 files changed, 16 insertions(+), 34 deletions(-) diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java index fa8d8c23f13..59c019ab938 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/BaseExtensibleLanguage.java @@ -12,7 +12,9 @@ package org.eclipse.cdt.core.dom.lrparser; import org.eclipse.cdt.core.dom.ICodeReaderFactory; import org.eclipse.cdt.core.dom.ast.IASTCompletionNode; +import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; +import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage; import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage; import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration; import org.eclipse.cdt.core.index.IIndex; @@ -44,7 +46,7 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage implements private static final boolean DEBUG_PRINT_GCC_AST = false; private static final boolean DEBUG_PRINT_AST = false; - private final ICLanguageKeywords keywords; + private ICLanguageKeywords keywords = null; /** @@ -91,7 +93,7 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage implements - public BaseExtensibleLanguage() { + private void getCLanguageKeywords() { ParserLanguage lang = getParserLanguage(); IScannerExtensionConfiguration config = getScannerExtensionConfiguration(); keywords = new CLanguageKeywords(lang, config); @@ -203,17 +205,28 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage implements } - + public IASTName[] getSelectedNames(IASTTranslationUnit ast, int start, int length) { + return GCCLanguage.getDefault().getSelectedNames(ast, start, length); + } public String[] getBuiltinTypes() { + if(keywords == null) + getCLanguageKeywords(); + return keywords.getBuiltinTypes(); } public String[] getKeywords() { + if(keywords == null) + getCLanguageKeywords(); + return keywords.getKeywords(); } public String[] getPreprocessorKeywords() { + if(keywords == null) + getCLanguageKeywords(); + return keywords.getPreprocessorKeywords(); } diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java index fb4159e6cc1..294d4a538ca 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/c99/C99Language.java @@ -11,9 +11,7 @@ package org.eclipse.cdt.core.dom.lrparser.c99; import org.eclipse.cdt.core.dom.ILinkage; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; -import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage; import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage; import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; import org.eclipse.cdt.core.dom.lrparser.IParser; @@ -76,10 +74,6 @@ public class C99Language extends BaseExtensibleLanguage { return ILinkage.C_LINKAGE_ID; } - public IASTName[] getSelectedNames(IASTTranslationUnit ast, int start, int length) { - return GCCLanguage.getDefault().getSelectedNames(ast, start, length); - } - @Override protected ParserLanguage getParserLanguage() { return ParserLanguage.C; diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java index 0094b6af898..b0520e006e7 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/cpp/ISOCPPLanguage.java @@ -11,9 +11,7 @@ package org.eclipse.cdt.core.dom.lrparser.cpp; import org.eclipse.cdt.core.dom.ILinkage; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage; import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage; import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; import org.eclipse.cdt.core.dom.lrparser.IParser; @@ -78,11 +76,6 @@ public class ISOCPPLanguage extends BaseExtensibleLanguage { return ILinkage.CPP_LINKAGE_ID; } - public IASTName[] getSelectedNames(IASTTranslationUnit ast, int start, int length) { - return GPPLanguage.getDefault().getSelectedNames(ast, start, length); - } - - @Override protected ParserLanguage getParserLanguage() { return ParserLanguage.CPP; diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java index 6c577e741ed..90fd09b0470 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/core/dom/upc/UPCLanguage.java @@ -11,14 +11,12 @@ package org.eclipse.cdt.core.dom.upc; import org.eclipse.cdt.core.dom.ILinkage; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage; import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration; import org.eclipse.cdt.core.dom.lrparser.action.c99.C99ASTNodeFactory; -import org.eclipse.cdt.core.dom.lrparser.c99.C99Language; import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration; import org.eclipse.cdt.core.dom.parser.upc.DOMToUPCTokenMap; import org.eclipse.cdt.core.dom.parser.upc.UPCKeyword; @@ -43,7 +41,6 @@ public class UPCLanguage extends BaseExtensibleLanguage { public static final String ID = PLUGIN_ID + ".upc"; //$NON-NLS-1$ private static final IDOMTokenMap TOKEN_MAP = new DOMToUPCTokenMap(); - private static final C99Language C99_LANGUAGE = C99Language.getDefault(); private static final UPCLanguage myDefault = new UPCLanguage(); private static final String[] upcKeywords = UPCKeyword.getAllKeywords(); @@ -51,7 +48,6 @@ public class UPCLanguage extends BaseExtensibleLanguage { private static final IScannerExtensionConfiguration SCANNER_CONFIGURATION = new ScannerExtensionConfiguration(); - public static UPCLanguage getDefault() { return myDefault; } @@ -80,26 +76,12 @@ public class UPCLanguage extends BaseExtensibleLanguage { public int getLinkageID() { return ILinkage.C_LINKAGE_ID; } - - public IASTName[] getSelectedNames(IASTTranslationUnit ast, int start, int length) { - return C99_LANGUAGE.getSelectedNames(ast, start, length); - } - - @Override - public String[] getBuiltinTypes() { - return C99_LANGUAGE.getBuiltinTypes(); - } @Override public String[] getKeywords() { return upcKeywords; } - @Override - public String[] getPreprocessorKeywords() { - return C99_LANGUAGE.getPreprocessorKeywords(); - } - @Override protected ParserLanguage getParserLanguage() { return ParserLanguage.C;