Changeset 1218
- Timestamp:
- 07/07/08 14:31:31 (2 months ago)
- Files:
-
- trunk/mmrnmhrm.core/.classpath (modified) (1 diff)
- trunk/mmrnmhrm.core/.settings/org.eclipse.jdt.core.prefs (modified) (3 diffs)
- trunk/mmrnmhrm.core/plugin.properties (modified) (1 diff)
- trunk/mmrnmhrm.core/plugin.xml (modified) (10 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/build/DeeDLTKScriptBuilder.java (deleted)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/build/DeeProjectBuilder.java (modified) (2 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/codeassist (added)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/codeassist/DeeSelectionEngine.java (added)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DLTKModuleResolver.java (modified) (5 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeLanguageToolkit.java (modified) (3 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeParserUtil.java (moved) (moved from trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/ParsingUtil.java) (1 diff)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceElementParser.java (modified) (1 diff)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceElementProvider.java (modified) (4 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceParser.java (modified) (4 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceParserFactory.java (added)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/search/DeeNeoMatchLocatorParser.java (modified) (4 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/search/DeeSearchFactory.java (modified) (2 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/launch/DeeDmdInstallType.java (modified) (5 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/launch/DeeInstall.java (modified) (3 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/launch/DeeInterpreterRunner.java (modified) (2 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/launch/DeeLaunchConfigurationConstants.java (modified) (1 diff)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/launch/DeeLaunchConfigurationDelegate.java (modified) (5 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/model/CompilationUnit.java (modified) (3 diffs)
- trunk/mmrnmhrm.core/src/mmrnmhrm/core/model/DeeNature.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/mmrnmhrm.core/.classpath
r676 r1218 1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <classpath> 3 <classpathentry kind="src" path="src"/>4 3 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> 5 4 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> 5 <classpathentry kind="src" path="src"/> 6 6 <classpathentry kind="output" path="bin"/> 7 7 </classpath> trunk/mmrnmhrm.core/.settings/org.eclipse.jdt.core.prefs
r711 r1218 1 # Tue Aug 28 14:20:01 BST 20071 #Sun Jul 06 13:43:08 BST 2008 2 2 eclipse.preferences.version=1 3 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 4 org.eclipse.jdt.core.compiler.compliance=1.5 3 5 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning 6 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 4 7 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore 5 8 org.eclipse.jdt.core.compiler.problem.deprecation=warning … … 8 11 org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore 9 12 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore 13 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 10 14 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore 11 15 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled … … 55 59 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning 56 60 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning 61 org.eclipse.jdt.core.compiler.source=1.5 trunk/mmrnmhrm.core/plugin.properties
r711 r1218 6 6 7 7 localDeeApplication=D Application (Mmrnmhrm) 8 9 sourceParser.description=Dee Source Parser description 10 sourceParser.name=Dee Source Parser trunk/mmrnmhrm.core/plugin.xml
r906 r1218 3 3 <plugin> 4 4 <extension 5 id=" deenature"5 id="nature" 6 6 name="Dee nature" 7 7 point="org.eclipse.core.resources.natures"> … … 11 11 </extension> 12 12 <extension 13 point="org.eclipse.core.runtime.contentTypes"> 14 <content-type 15 base-type="org.eclipse.core.runtime.text" 16 default-charset="UTF-8" 17 file-extensions="d, di, dh" 18 id="mmrnmhrm.core.content.dsource" 19 name="D Source (Mmrnmhrm)" 20 priority="high"/> 21 </extension> 22 <extension 23 point="org.eclipse.core.runtime.preferences"> 24 <initializer 25 class="mmrnmhrm.core.DeeCorePreferenceInitializer"> 26 </initializer> 27 </extension> 28 <extension 13 29 point="org.eclipse.dltk.core.language"> 14 30 <language 15 31 class="mmrnmhrm.core.dltk.DeeLanguageToolkit" 16 nature="mmrnmhrm.core. deenature">32 nature="mmrnmhrm.core.nature"> 17 33 </language> 18 34 </extension> … … 21 37 <parser 22 38 class="mmrnmhrm.core.dltk.DeeSourceElementParser" 23 nature="mmrnmhrm.core. deenature"39 nature="mmrnmhrm.core.nature" 24 40 priority="0"> 25 41 </parser> 42 </extension> 43 <extension 44 point="org.eclipse.dltk.core.sourceParsers"> 45 <parserContribution 46 natureId="mmrnmhrm.core.nature"> 47 <parser 48 class="mmrnmhrm.core.dltk.DeeSourceParserFactory" 49 description="%sourceParser.description" 50 id="mmrnmhrm.core.SourceParser" 51 name="%sourceParser.name" 52 priority="1"> 53 </parser> 54 </parserContribution> 26 55 </extension> 27 56 <extension … … 46 75 </extension> 47 76 <extension 48 point="org.eclipse.core.runtime.contentTypes">49 <content-type50 base-type="org.eclipse.core.runtime.text"51 default-charset="UTF-8"52 file-extensions="d, di, dh"53 id="mmrnmhrm.core.content.dsource"54 name="D Source (Mmrnmhrm)"55 priority="normal"/>56 </extension>57 <extension58 77 point="org.eclipse.core.expressions.definitions"> 59 78 <definition … … 63 82 <test 64 83 property="org.eclipse.core.resources.projectNature" 65 value="mmrnmhrm.core. deenature">84 value="mmrnmhrm.core.nature"> 66 85 </test> 67 86 </adapt> … … 73 92 <test 74 93 property="org.eclipse.core.resources.projectNature" 75 value="mmrnmhrm.core. deenature">94 value="mmrnmhrm.core.nature"> 76 95 </test> 77 96 </adapt> … … 79 98 </extension> 80 99 <extension 81 point="org.eclipse.core.runtime.preferences"> 82 <initializer 83 class="mmrnmhrm.core.DeeCorePreferenceInitializer"> 84 </initializer> 100 name="TODO" 101 point="org.eclipse.dltk.core.selectionEngine"> 102 <selectionEngine 103 class="mmrnmhrm.core.codeassist.DeeSelectionEngine" 104 nature="mmrnmhrm.core.nature" 105 priority="0"> 106 </selectionEngine> 85 107 </extension> 86 108 <extension … … 88 110 <seachFactory 89 111 class="mmrnmhrm.core.dltk.search.DeeSearchFactory" 90 nature="mmrnmhrm.core. deenature">112 nature="mmrnmhrm.core.nature"> 91 113 </seachFactory> 92 114 </extension> … … 95 117 <interpreterInstallType 96 118 class="mmrnmhrm.core.launch.DeeDmdInstallType" 97 id="mmrnmhrm.core.launching. interpreterInstallType1">119 id="mmrnmhrm.core.launching.deeDmdInstallType"> 98 120 </interpreterInstallType> 99 121 </extension> … … 103 125 <builder 104 126 class="mmrnmhrm.core.build.DeeDLTKScriptBuilder" 105 nature="mmrnmhrm.core. deenature">127 nature="mmrnmhrm.core.nature"> 106 128 </builder> 107 129 </extension> trunk/mmrnmhrm.core/src/mmrnmhrm/core/build/DeeProjectBuilder.java
r906 r1218 5 5 import java.util.Map; 6 6 7 import m elnorme.miscutil.Assert;7 import mmrnmhrm.core.DeeCore; 8 8 import mmrnmhrm.core.model.DeeModel; 9 9 import mmrnmhrm.core.model.DeeProjectOptions; … … 36 36 @Override 37 37 protected void startupOnInitialize() { 38 assertTrue(get ModelProject() != null);38 assertTrue(getProject() != null); 39 39 } 40 40 41 private IScriptProject getModelProject() {41 private IScriptProject getModelProject() throws CoreException { 42 42 IScriptProject scriptProject = DLTKCore.create(getProject()); 43 Assert.isTrue(scriptProject.exists()); 43 if(!scriptProject.exists()) 44 throw DeeCore.createCoreException("Project: " + scriptProject.getElementName() 45 + " does not exist, or is not a DLTK project.", null); 44 46 return scriptProject; 45 47 } 46 48 47 private DeeProjectOptions getProjectOptions() {49 private DeeProjectOptions getProjectOptions() throws CoreException { 48 50 return DeeModel.getDeeProjectInfo(getModelProject()); 49 51 } trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DLTKModuleResolver.java
r804 r1218 9 9 10 10 import org.eclipse.core.runtime.CoreException; 11 import org.eclipse.core.runtime.IPath; 11 12 import org.eclipse.dltk.core.IExternalSourceModule; 12 13 import org.eclipse.dltk.core.IModelElement; … … 16 17 import org.eclipse.dltk.core.ISourceModule; 17 18 import org.eclipse.dltk.core.ModelException; 19 import org.eclipse.dltk.core.environment.EnvironmentPathUtils; 18 20 19 21 import dtool.ast.definitions.Module; … … 49 51 ISourceModule modUnit = pkgFrag.getSourceModule(modName+fileext); 50 52 if(exists(modUnit)) { 51 DeeModuleDeclaration modDecl = ParsingUtil.parseModule(modUnit);52 return ParsingUtil.getNeoASTModule(modDecl);53 DeeModuleDeclaration modDecl = DeeParserUtil.parseModule(modUnit); 54 return DeeParserUtil.getNeoASTModule(modDecl); 53 55 } 54 56 } … … 62 64 return modUnit != null && modUnit.exists() 63 65 // XXX: DLTK bug workaround: 64 // modUnit.exists() true on external source modules of libraries66 // modUnit.exists() true on ANY external source modules of libraries 65 67 // we should make a test case for this 66 68 && externalReallyExists(modUnit) … … 71 73 if(!(modUnit instanceof IExternalSourceModule)) 72 74 return true; 73 return new File(modUnit.getPath().toOSString()).exists(); 75 //modUnit.getUnderlyingResource() of externals is allways null 76 IPath localPath = EnvironmentPathUtils.getLocalPath(modUnit.getPath()); 77 return new File(localPath.toOSString()).exists(); 74 78 } 75 79 trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeLanguageToolkit.java
r749 r1218 5 5 import mmrnmhrm.core.model.DeeNature; 6 6 7 import org.eclipse.core.resources.IResource; 8 import org.eclipse.core.runtime.IPath; 7 9 import org.eclipse.core.runtime.IStatus; 8 10 import org.eclipse.core.runtime.Status; 9 11 import org.eclipse.dltk.core.AbstractLanguageToolkit; 10 12 import org.eclipse.dltk.core.IDLTKLanguageToolkit; 11 import org.eclipse.dltk.core. IModelElement;13 import org.eclipse.dltk.core.environment.IEnvironment; 12 14 13 15 public class DeeLanguageToolkit extends AbstractLanguageToolkit { 14 16 15 private static final String[] DEE_LANGUAGE_FILE_EXTENSIONS = new String[] { 16 "d", "di", "dh" 17 }; 17 private static final String DEE_LANGUAGE_CONTENT_DSOURCE = "mmrnmhrm.core.content.dsource"; 18 18 19 19 private static final IDLTKLanguageToolkit instance = new DeeLanguageToolkit(); … … 22 22 return instance ; 23 23 } 24 25 26 @Override 27 protected String getCorePluginID() { 28 return DeeCore.PLUGIN_ID; 29 } 30 31 @Override 32 public String[] getLanguageFileExtensions() { 33 return DEE_LANGUAGE_FILE_EXTENSIONS; 24 25 public boolean languageSupportZIPBuildpath() { 26 return true; 34 27 } 35 28 … … 44 37 } 45 38 46 public IStatus validateSourceModule(IModelElement parent, String name) { 39 //@Override 40 public String getLanguageContentType() { 41 return DEE_LANGUAGE_CONTENT_DSOURCE; 42 } 43 44 @Override 45 public IStatus validateSourceModule(IResource resource) { 46 String name = resource.getName(); 47 47 if(DeeNameRules.isValidCompilationUnitName(name)) { 48 return new Status(IStatus.OK, DeeCore.PLUGIN_ID, null);48 return Status.OK_STATUS; 49 49 } else { 50 return new Status(IStatus.ERROR, DeeCore.PLUGIN_ID, 51 "Invalid resource name:" + name); 50 return new Status(IStatus.ERROR, DeeCore.PLUGIN_ID, "Invalid resource name:" + name); 52 51 } 53 52 } 54 53 55 56 57 /* TODO: when DLTK supports is, validate packages58 54 @Override 59 public boolean validateSourcePackage(IPath path) { 60 return DeeNameRules.isValidPackageName(path.lastSegment()); 61 }*/ 55 public boolean validateSourcePackage(IPath path, IEnvironment environment) { 56 return true; 57 //return DeeNameRules.isValidPackagePathName(path.toString()); 58 } 62 59 63 60 } trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeParserUtil.java
r758 r1218 1 1 package mmrnmhrm.core.dltk; 2 2 3 import static melnorme.miscutil.Assert.assertNotNull; 4 3 import org.eclipse.dltk.ast.declarations.ModuleDeclaration; 5 4 import org.eclipse.dltk.core.ISourceModule; 6 import org.eclipse.dltk.core.ISourceModuleInfoCache; 7 import org.eclipse.dltk.core.ISourceModuleInfoCache.ISourceModuleInfo; 5 import org.eclipse.dltk.core.SourceParserUtil; 8 6 9 7 import dtool.ast.definitions.Module; 10 8 11 public abstract class ParsingUtil {9 public abstract class DeeParserUtil { 12 10 13 @SuppressWarnings("restriction")14 p ublicstatic ISourceModuleInfo getSourceModuleInfo(ISourceModule module) {11 /* 12 private static ISourceModuleInfo getSourceModuleInfo(ISourceModule module) { 15 13 ISourceModuleInfoCache sourceModuleInfoCache; 16 14 sourceModuleInfoCache = org.eclipse.dltk.internal.core.ModelManager. 17 15 getModelManager().getSourceModuleInfoCache(); 18 16 return sourceModuleInfoCache.get(module); 17 }*/ 18 19 20 /** Gets a DeeModuleDeclaration from a sourceModule, parsing it if necessary. 21 * XXX: what are the conditions to ensure that a ISourceModule is parsed by Dee ?? */ 22 public static DeeModuleDeclaration parseModule(ISourceModule sourceModule) { 23 ModuleDeclaration moduleDeclaration = SourceParserUtil.getModuleDeclaration(sourceModule, null); 24 return getFixedDeeModuleDeclaration(moduleDeclaration, sourceModule); 25 //ISourceModuleInfo info = getSourceModuleInfo(sourceModule); 26 //return DeeSourceElementParser.parseModule(info, sourceModule, null, null, null); 19 27 } 20 28 21 public static DeeModuleDeclaration parseModule(ISourceModule sourceModule) { 22 ISourceModuleInfo info = getSourceModuleInfo(sourceModule); 23 return DeeSourceElementParser.parseModule(info, sourceModule, null, null, null); 29 /** If a moduleDeclaration is a DeeModuleDeclaration, fixes it (set sourceModule) and returns 30 * it, otherwise return null. */ 31 public static DeeModuleDeclaration getFixedDeeModuleDeclaration( 32 ModuleDeclaration moduleDeclaration, ISourceModule sourceModule) { 33 if (moduleDeclaration instanceof DeeModuleDeclaration) { 34 DeeModuleDeclaration deeModuleDecl = (DeeModuleDeclaration) moduleDeclaration; 35 if (deeModuleDecl.neoModule != null) 36 deeModuleDecl.neoModule.setModuleUnit(sourceModule); 37 return deeModuleDecl; 38 } 39 return null; 24 40 } 25 41 trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceElementParser.java
r804 r1218 1 1 package mmrnmhrm.core.dltk; 2 2 3 import melnorme.miscutil.ExceptionAdapter;4 3 import mmrnmhrm.core.DeeCore; 5 import mmrnmhrm.core.DeeCorePreferences; 6 import mmrnmhrm.core.LangCore; 4 import mmrnmhrm.core.model.DeeNature; 7 5 8 import org.eclipse.core.resources.IFile;9 import org.eclipse.core.runtime.IPath;10 import org.eclipse.core.runtime.Path;11 6 import org.eclipse.dltk.ast.declarations.ModuleDeclaration; 12 import org.eclipse.dltk.compiler.ISourceElementRequestor; 13 import org.eclipse.dltk.compiler.problem.IProblemReporter; 14 import org.eclipse.dltk.core.DLTKCore; 15 import org.eclipse.dltk.core.ISourceElementParser; 16 import org.eclipse.dltk.core.ISourceModule; 17 import org.eclipse.dltk.core.ModelException; 7 import org.eclipse.dltk.compiler.task.ITaskReporter; 8 import org.eclipse.dltk.compiler.task.TodoTaskAstParser; 9 import org.eclipse.dltk.compiler.task.TodoTaskPreferences; 10 import org.eclipse.dltk.core.AbstractSourceElementParser; 11 import org.eclipse.dltk.core.SourceParserUtil; 18 12 import org.eclipse.dltk.core.ISourceModuleInfoCache.ISourceModuleInfo; 19 13 20 import dtool.Logg; 21 import dtool.ast.definitions.Module; 22 23 public class DeeSourceElementParser implements ISourceElementParser { 14 public class DeeSourceElementParser extends AbstractSourceElementParser { 24 15 25 private static final String AST_CACHE_KEY = "AST"; 26 27 private ISourceElementRequestor fRequestor = null; 28 private IProblemReporter fReporter = null; 29 30 public DeeSourceElementParser( 31 /* ISourceElementRequestor requestor, 32 IProblemReporter problemReporter*/) { 33 //this.fRequestor = requestor; 34 //this.fReporter = problemReporter; 16 public DeeSourceElementParser() { 35 17 } 36 18 37 //@Override38 p ublic void setReporter(IProblemReporter reporter) {39 this.fReporter = reporter;19 @Override 20 protected String getNatureId() { 21 return DeeNature.NATURE_ID; 40 22 } 41 23 42 public void setRequestor(ISourceElementRequestor requestor ) { 43 this.fRequestor = requestor; 24 public void parseSourceModule(char[] contents, ISourceModuleInfo astCache, char[] filename) { 25 26 ModuleDeclaration moduleDeclaration = SourceParserUtil.getModuleDeclaration(filename, 27 contents, getNatureId(), getProblemReporter(), astCache); 28 29 DeeModuleDeclaration deeModuleDecl = (DeeModuleDeclaration) moduleDeclaration; 30 31 DeeSourceElementProvider provider = new DeeSourceElementProvider(getRequestor()); 32 provider.provide(deeModuleDecl); 33 34 if (getProblemReporter() != null) { 35 final ITaskReporter taskReporter = (ITaskReporter) getProblemReporter() 36 .getAdapter(ITaskReporter.class); 37 if (taskReporter != null) { 38 taskReporter.clearTasks(); 39 parseTasks(taskReporter, contents, moduleDeclaration); 40 } 41 } 44 42 } 45 43 46 @SuppressWarnings("restriction") 47 //@Override 48 public ModuleDeclaration parseSourceModule( 49 char[] contents, ISourceModuleInfo astCache, char[] filename) { 50 51 IPath path = new Path(new String(filename)); 52 ISourceModule module = null; 53 if(!path.isAbsolute()) { 54 IFile file = DeeCore.getWorkspaceRoot().getFile(path); 55 module = DLTKCore.createSourceModuleFrom(file); 44 // TODO, make our own tasks parser. 45 protected void parseTasks(ITaskReporter taskReporter, char[] content, 46 ModuleDeclaration moduleDeclaration) { 47 final TodoTaskPreferences preferences = new TodoTaskPreferences(DeeCore.getInstance() 48 .getPluginPreferences()); 49 if (preferences.isEnabled()) { 50 final TodoTaskAstParser taskParser = new TodoTaskAstParser(taskReporter, preferences, 51 moduleDeclaration); 52 if (taskParser.isValid()) { 53 taskParser.parse(content); 54 } 56 55 } 57 58 //assertNotNull(module);59 //assertTrue(module.exists());60 // create a parser, that gives us an AST61 DeeModuleDeclaration moduleDeclaration = parseModule(astCache, module, contents, fReporter, filename);62 63 DeeSourceElementProvider provider = new DeeSourceElementProvider(fRequestor);64 provider.provide(moduleDeclaration);65 return null;66 //return moduleDeclaration;67 }68 69 70 /** Obtains an AST from the given module, possibly using a cached value.71 * Must supply either sourceModule or source */72 public static DeeModuleDeclaration parseModule(ISourceModuleInfo astCache,73 ISourceModule modUnit, char[] source, IProblemReporter reporter, char[] filename) {74 DeeModuleDeclaration moduleDecl = getCachedModule(astCache);75 if(moduleDecl != null) {76 String str = (modUnit == null) ? "<null>" : modUnit.getElementName();77 Logg.model.println("ParseModule (got AST cache): " + str);78 // setup the moduleUnit nonetheless, cause it can be null79 if(modUnit != null) {80 moduleDecl.neoModule.setModuleUnit(modUnit);81 }82 return moduleDecl;83 }84 85 if(source == null)86 try {87 source = modUnit.getSourceAsCharArray();88 } catch (ModelException e) {89 LangCore.log(e);90 throw ExceptionAdapter.unchecked(e);91 }92 93 // FIXME use project specific settings94 int langVersion = DeeCorePreferences.getInt(DeeCorePreferences.LANG_VERSION);95 96 moduleDecl = DeeSourceParser.parseModule(source, langVersion, reporter, filename);97 String str = (filename == null) ? "<null>" : new String(filename);98 Logg.model.println("ParseModule parsed: ", str);99 Module neoModule = ParsingUtil.getNeoASTModule(moduleDecl);100 //Assert.isNotNull(modUnit);101 if(neoModule != null && modUnit != null)102 neoModule.setModuleUnit(modUnit);103 104 if(astCache != null) {105 astCache.put(AST_CACHE_KEY, moduleDecl);106 }107 return moduleDecl;108 56 } 109 57 110 public static DeeModuleDeclaration getCachedModule(ISourceModuleInfo astCache) {111 if(astCache != null) {112 DeeModuleDeclaration moduleDeclaration;113 moduleDeclaration = (DeeModuleDeclaration) astCache.get(AST_CACHE_KEY);114 if(moduleDeclaration != null)115 return moduleDeclaration;116 }117 return null;118 }119 58 120 59 } trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceElementProvider.java
r758 r1218 28 28 public final class DeeSourceElementProvider extends ASTNeoUpTreeVisitor { 29 29 30 private ISourceElementRequestor requestor; 31 public static final String[] EMPTY_STRING = new String[0]; 30 protected static final String[] EMPTY_STRING = new String[0]; 31 protected static final String OBJECT = "Object"; //$NON-NLS-1$ 32 protected static final String[] OBJECT_SUPER_CLASS_LIST = new String[] {OBJECT}; 33 34 protected ISourceElementRequestor requestor; 32 35 33 36 public DeeSourceElementProvider(ISourceElementRequestor requestor) { … … 46 49 } 47 50 48 49 protected static String[] processClassNames(DefinitionClass defClass) { 50 List<BaseClass> coll = defClass.baseClasses; 51 if(coll == null) 52 return DeeSourceElementProvider.EMPTY_STRING; 53 String[] strs = new String[coll.size()]; 54 Iterator<BaseClass> iter = coll.iterator(); 55 for (int i = 0; i < strs.length; i++) { 56 strs[i] = iter.next().type.toStringAsElement(); 57 } 58 return strs; 59 } 51 @Override 52 public boolean visit(Module node) { 53 //requestor.enterModule(); 54 requestor.enterType(createTypeInfoForModule(node)); 55 /*DeclarationModule md = node.md; 56 String pkgName = ""; 57 if(md != null) { 58 for (int i = 0; i < md.packages.length; i++) { 59 RefIdentifier id = md.packages[i]; 60 if(i == 0) 61 pkgName = pkgName + id.toString(); 62 else 63 pkgName = pkgName + "." + id.toString(); 64 } 65 requestor.acceptPackage(md.getStartPos(), md.getEndPos()-1, pkgName.toCharArray()); 66 } else { 67 //requestor.acceptPackage(0, 0-1, "".toCharArray()); 68 }*/ 69 return true; 70 } 71 72 @Override 73 public void endVisit(Module node) { 74 requestor.exitType(node.sourceEnd() -1); 75 //requestor.exitModule(node.sourceEnd() -1); 76 } 77 78 @Override 79 public boolean visit(DefinitionAggregate elem) { 80 requestor.enterType(createTypeInfoForDefinition(elem)); 81 return true; 82 } 83 @Override 84 public void endVisit(DefinitionAggregate elem) { 85 requestor.exitType(elem.sourceEnd() -1); 86 } 87 88 @Override 89 public boolean visit(DefinitionTemplate elem) { 90 requestor.enterType(createTypeInfoForDefinition(elem)); 91 return true; 92 } 93 @Override 94 public void endVisit(DefinitionTemplate elem) { 95 requestor.exitType(elem.sourceEnd() -1); 96 } 97 98 @Override 99 public boolean visit(DefinitionClass elem) { 100 requestor.enterType(createTypeInfoForClass(elem)); 101 return true; 102 } 103 @Override 104 public void endVisit(DefinitionClass elem) { 105 requestor.exitType(elem.sourceEnd() -1); 106 } 107 108 @Override 109 public boolean visit(DefinitionFunction elem) { 110 requestor.enterMethod(createMethodInfo(elem)); 111 return true; 112 } 113 @Override 114 public void endVisit(DefinitionFunction elem) { 115 requestor.exitMethod(elem.sourceEnd() -1); 116 } 117 118 /* ---------------------------------- */ 119 120 @Override 121 public boolean visit(DefinitionVariable elem) { 122 requestor.enterField(createFieldInfo(elem)); 123 return true; 124 } 125 126 @Override 127 public void endVisit(DefinitionVariable elem) { 128 requestor.exitField(elem.sourceEnd()-1); 129 } 130 131 @Override 132 public boolean visit(DefinitionEnum elem) { 133 requestor.acceptFieldReference(elem.getName().toCharArray(), elem.sourceStart()); 134 return true; 135 } 136 137 @Override 138 public boolean visit(DefinitionTypedef elem) { 139 requestor.acceptFieldReference(elem.getName().toCharArray(), elem.sourceStart()); 140 return true; 141 } 142 143 @Override 144 public boolean visit(DefinitionAlias elem) { 145 requestor.acceptFieldReference(elem.getName().toCharArray(), elem.sourceStart()); 146 return true; 147 } 148 149 150 @Override 151 public boolean visit(NamedReference elem) { 152 requestor.acceptTypeReference(elem.toStringAsElement().toCharArray(), 153 elem.sourceStart() /*-1*/); 154 return true; 155 } 156 157 /* ================================== */ 158 159 160 60 161 61 162 protected static void setupDefUnitTypeInfo(DefUnit defAggr, … … 141 242 } 142 243 244 245 protected static String[] processClassNames(DefinitionClass defClass) { 246 List<BaseClass> coll = defClass.baseClasses; 247 if(coll == null || coll.isEmpty()) 248 //return DeeSourceElementProvider.EMPTY_STRING; 249 return DeeSourceElementProvider.OBJECT_SUPER_CLASS_LIST; 250 String[] strs = new String[coll.size()]; 251 //Collections.reverse(coll); // XXX: DLTK: dunno why, but reversing works better 252 Iterator<BaseClass> iter = coll.iterator(); 253 for (int i = 0; i < strs.length; i++) { 254 strs[i] = iter.next().type.toStringAsElement(); 255 } 256 return strs; 257 } 258 143 259 private ISourceElementRequestor.MethodInfo createMethodInfo(DefinitionFunction elem) { 144 260 ISourceElementRequestor.MethodInfo methodInfo = new ISourceElementRequestor.MethodInfo(); … … 166 282 return fieldInfo; 167 283 } 168 169 /* ================================== */ 170 171 172 173 @Override 174 public boolean visit(Module node) { 175 requestor.enterModule(); 176 requestor.enterType(createTypeInfoForModule(node)); 177 /*DeclarationModule md = node.md; 178 String pkgName = ""; 179 if(md != null) { 180 for (int i = 0; i < md.packages.length; i++) { 181 RefIdentifier id = md.packages[i]; 182 if(i == 0) 183 pkgName = pkgName + id.toString(); 184 else 185 pkgName = pkgName + "." + id.toString(); 186 } 187 requestor.acceptPackage(md.getStartPos(), md.getEndPos()-1, pkgName.toCharArray()); 188 } else { 189 //requestor.acceptPackage(0, 0-1, "".toCharArray()); 190 }*/ 191 return true; 192 } 193 194 @Override 195 public void endVisit(Module node) { 196 requestor.exitType(node.sourceEnd() -1); 197 requestor.exitModule(node.sourceEnd() -1); 198 } 199 200 @Override 201 public boolean visit(DefinitionAggregate elem) { 202 requestor.enterType(createTypeInfoForDefinition(elem)); 203 return true; 204 } 205 @Override 206 public void endVisit(DefinitionAggregate elem) { 207 requestor.exitType(elem.sourceEnd() -1); 208 } 209 210 @Override 211 public boolean visit(DefinitionTemplate elem) { 212 requestor.enterType(createTypeInfoForDefinition(elem)); 213 return true; 214 } 215 @Override 216 public void endVisit(DefinitionTemplate elem) { 217 requestor.exitType(elem.sourceEnd() -1); 218 } 219 220 @Override 221 public boolean visit(DefinitionClass elem) { 222 requestor.enterType(createTypeInfoForClass(elem)); 223 return true; 224 } 225 @Override 226 public void endVisit(DefinitionClass elem) { 227 requestor.exitType(elem.sourceEnd() -1); 228 } 229 230 @Override 231 public boolean visit(DefinitionFunction elem) { 232 requestor.enterMethod(createMethodInfo(elem)); 233 return true; 234 } 235 @Override 236 public void endVisit(DefinitionFunction elem) { 237 requestor.exitMethod(elem.sourceEnd() -1); 238 } 239 240 /* ---------------------------------- */ 241 242 @Override 243 public boolean visit(DefinitionVariable elem) { 244 requestor.enterField(createFieldInfo(elem)); 245 return true; 246 } 247 248 @Override 249 public void endVisit(DefinitionVariable elem) { 250 requestor.exitField(elem.sourceEnd()-1); 251 } 252 253 @Override 254 public boolean visit(DefinitionEnum elem) { 255 //requestor.acceptFieldReference(elem.getName().toCharArray(), elem.sourceStart()); 256 return true; 257 } 258 259 @Override 260 public boolean visit(DefinitionTypedef elem) { 261 //requestor.acceptFieldReference(elem.getName().toCharArray(), elem.sourceStart()); 262 return true; 263 } 264 265 @Override 266 public boolean visit(DefinitionAlias elem) { 267 //requestor.acceptFieldReference(elem.getName().toCharArray(), elem.sourceStart()); 268 return true; 269 } 270 271 272 @Override 273 public boolean visit(NamedReference elem) { 274 requestor.acceptTypeReference(elem.toStringAsElement().toCharArray(), 275 elem.sourceStart()-1); 276 return true; 277 } 284 278 285 279 286 } trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceParser.java
r906 r1218 2 2 3 3 import static melnorme.miscutil.Assert.assertTrue; 4 import mmrnmhrm.core.DeeCore; 4 5 import mmrnmhrm.core.DeeCorePreferences; 5 6 import mmrnmhrm.core.LangCore; 6 7 8 import org.eclipse.core.resources.IFile; 7 9 import org.eclipse.core.runtime.CoreException; 8 import org.eclipse.dltk.ast.declarations.ISourceParser; 10 import org.eclipse.core.runtime.IPath; 11 import org.eclipse.core.runtime.Path; 12 import org.eclipse.dltk.ast.declarations.ModuleDeclaration; 13 import org.eclipse.dltk.ast.parser.AbstractSourceParser; 14 import org.eclipse.dltk.ast.parser.ISourceParser; 9 15 import org.eclipse.dltk.compiler.problem.IProblemReporter; 16 import org.eclipse.dltk.core.DLTKCore; 17 import org.eclipse.dltk.core.ISourceModule; 18 import org.eclipse.dltk.core.environment.EnvironmentPathUtils; 10 19 11 20 import descent.core.compiler.IProblem; … … 14 23 import dtool.descentadapter.DescentASTConverter; 15 24 16 public class DeeSourceParser implements ISourceParser {25 public class DeeSourceParser extends AbstractSourceParser { 17 26 18 27 private static final class DescentProblemAdapter implements … … 50 59 } 51 60 52 /** Used by reconciler. */53 61 //@Override 54 public DeeModuleDeclaration parse(char[] fileName, char[] source, 55 IProblemReporter reporter) { 62 public ModuleDeclaration parse(char[] fileName, char[] source, IProblemReporter reporter) { 56 63 int langVersion = DeeCorePreferences.getInt(DeeCorePreferences.LANG_VERSION); 57 64 return parseModule(source, langVersion, reporter, fileName); 65 66 58 67 } 59 68 60 protected static DeeModuleDeclaration parseModule(char[] source, 61 int langVersion, IProblemReporter reporter, @SuppressWarnings("unused")char[] fileName) {69 protected static DeeModuleDeclaration parseModule(char[] source, int langVersion, 70 IProblemReporter reporter, char[] fileName) { 62 71 Parser parser = new Parser(langVersion, source); 63 72 parser.setProblemReporter(DescentProblemAdapter.create(reporter)); … … 70 79 } 71 80 assertTrue(dmdModule.length == source.length); 72 DeeModuleDeclaration moduleDec= new DeeModuleDeclaration(dmdModule);81 DeeModuleDeclaration deeModuleDecl = new DeeModuleDeclaration(dmdModule); 73 82 if(dmdModule.hasSyntaxErrors() 74 83 && !DeeCorePreferences.getBoolean(DeeCorePreferences.ADAPT_MALFORMED_DMD_AST)) { 75 84 // DontLet's try to convert a malformed AST 76 return moduleDec;85 return deeModuleDecl; 77 86 } 78 87 dtool.ast.definitions.Module neoModule = DescentASTConverter.convertModule(dmdModule); 79 moduleDec.setNeoModule(neoModule); 80 return moduleDec; 88 deeModuleDecl.setNeoModule(neoModule); 89 //setModuleDeclModuleUnit(fileName, deeModuleDecl); 90 return deeModuleDecl; 91 } 92 93 94 private static void setModuleDeclModuleUnit(char[] filename, DeeModuleDeclaration deeModuleDecl) { 95 if(filename == null) 96 return; 97 IPath path = new Path(new String(filename)); 98 ISourceModule module = null; 99 100 if(EnvironmentPathUtils.isFull(path)) { 101 path = EnvironmentPathUtils.getLocalPath(path); 102 } 103 104 if(!path.isAbsolute()) { 105 IFile file = DeeCore.getWorkspaceRoot().getFile(path); 106 module = DLTKCore.createSourceModuleFrom(file); 107 } else { 108 IFile file = DeeCore.getWorkspaceRoot().getFile(path); 109 boolean exists = file.exists(); 110
