Changeset 1218

Show
Ignore:
Timestamp:
07/07/08 14:31:31 (2 months ago)
Author:
phoenix
Message:

Major changes: updated Mmrnmhrm to DLTK 0.95 and Eclipse 3.4
Minor fixes.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/mmrnmhrm.core/.classpath

    r676 r1218  
    11<?xml version="1.0" encoding="UTF-8"?> 
    22<classpath> 
    3     <classpathentry kind="src" path="src"/> 
    43    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> 
    54    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> 
     5    <classpathentry kind="src" path="src"/> 
    66    <classpathentry kind="output" path="bin"/> 
    77</classpath> 
  • trunk/mmrnmhrm.core/.settings/org.eclipse.jdt.core.prefs

    r711 r1218  
    1 #Tue Aug 28 14:20:01 BST 2007 
     1#Sun Jul 06 13:43:08 BST 2008 
    22eclipse.preferences.version=1 
     3org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 
     4org.eclipse.jdt.core.compiler.compliance=1.5 
    35org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning 
     6org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 
    47org.eclipse.jdt.core.compiler.problem.autoboxing=ignore 
    58org.eclipse.jdt.core.compiler.problem.deprecation=warning 
     
    811org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore 
    912org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore 
     13org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 
    1014org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore 
    1115org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled 
     
    5559org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning 
    5660org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning 
     61org.eclipse.jdt.core.compiler.source=1.5 
  • trunk/mmrnmhrm.core/plugin.properties

    r711 r1218  
    66 
    77localDeeApplication=D Application (Mmrnmhrm) 
     8 
     9sourceParser.description=Dee Source Parser description 
     10sourceParser.name=Dee Source Parser 
  • trunk/mmrnmhrm.core/plugin.xml

    r906 r1218  
    33<plugin> 
    44   <extension 
    5          id="deenature" 
     5         id="nature" 
    66         name="Dee nature" 
    77         point="org.eclipse.core.resources.natures"> 
     
    1111   </extension> 
    1212   <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 
    1329         point="org.eclipse.dltk.core.language"> 
    1430      <language 
    1531            class="mmrnmhrm.core.dltk.DeeLanguageToolkit" 
    16             nature="mmrnmhrm.core.deenature"> 
     32            nature="mmrnmhrm.core.nature"> 
    1733      </language> 
    1834   </extension> 
     
    2137      <parser 
    2238            class="mmrnmhrm.core.dltk.DeeSourceElementParser" 
    23             nature="mmrnmhrm.core.deenature" 
     39            nature="mmrnmhrm.core.nature" 
    2440            priority="0"> 
    2541      </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> 
    2655   </extension> 
    2756   <extension 
     
    4675   </extension> 
    4776   <extension 
    48          point="org.eclipse.core.runtime.contentTypes"> 
    49       <content-type 
    50             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    <extension 
    5877         point="org.eclipse.core.expressions.definitions"> 
    5978      <definition 
     
    6382            <test 
    6483                  property="org.eclipse.core.resources.projectNature" 
    65                   value="mmrnmhrm.core.deenature"> 
     84                  value="mmrnmhrm.core.nature"> 
    6685            </test> 
    6786         </adapt> 
     
    7392            <test 
    7493                  property="org.eclipse.core.resources.projectNature" 
    75                   value="mmrnmhrm.core.deenature"> 
     94                  value="mmrnmhrm.core.nature"> 
    7695            </test> 
    7796         </adapt> 
     
    7998   </extension> 
    8099   <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> 
    85107   </extension> 
    86108   <extension 
     
    88110      <seachFactory 
    89111            class="mmrnmhrm.core.dltk.search.DeeSearchFactory" 
    90             nature="mmrnmhrm.core.deenature"> 
     112            nature="mmrnmhrm.core.nature"> 
    91113      </seachFactory> 
    92114   </extension> 
     
    95117      <interpreterInstallType 
    96118            class="mmrnmhrm.core.launch.DeeDmdInstallType" 
    97             id="mmrnmhrm.core.launching.interpreterInstallType1"> 
     119            id="mmrnmhrm.core.launching.deeDmdInstallType"> 
    98120      </interpreterInstallType> 
    99121   </extension> 
     
    103125      <builder 
    104126            class="mmrnmhrm.core.build.DeeDLTKScriptBuilder" 
    105             nature="mmrnmhrm.core.deenature"> 
     127            nature="mmrnmhrm.core.nature"> 
    106128      </builder> 
    107129   </extension> 
  • trunk/mmrnmhrm.core/src/mmrnmhrm/core/build/DeeProjectBuilder.java

    r906 r1218  
    55import java.util.Map; 
    66 
    7 import melnorme.miscutil.Assert
     7import mmrnmhrm.core.DeeCore
    88import mmrnmhrm.core.model.DeeModel; 
    99import mmrnmhrm.core.model.DeeProjectOptions; 
     
    3636    @Override 
    3737    protected void startupOnInitialize() { 
    38         assertTrue(getModelProject() != null); 
     38        assertTrue(getProject() != null); 
    3939    } 
    4040 
    41     private IScriptProject getModelProject()
     41    private IScriptProject getModelProject() throws CoreException
    4242        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); 
    4446        return scriptProject; 
    4547    } 
    4648     
    47     private DeeProjectOptions getProjectOptions()
     49    private DeeProjectOptions getProjectOptions() throws CoreException
    4850        return DeeModel.getDeeProjectInfo(getModelProject()); 
    4951    } 
  • trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DLTKModuleResolver.java

    r804 r1218  
    99 
    1010import org.eclipse.core.runtime.CoreException; 
     11import org.eclipse.core.runtime.IPath; 
    1112import org.eclipse.dltk.core.IExternalSourceModule; 
    1213import org.eclipse.dltk.core.IModelElement; 
     
    1617import org.eclipse.dltk.core.ISourceModule; 
    1718import org.eclipse.dltk.core.ModelException; 
     19import org.eclipse.dltk.core.environment.EnvironmentPathUtils; 
    1820 
    1921import dtool.ast.definitions.Module; 
     
    4951                    ISourceModule modUnit = pkgFrag.getSourceModule(modName+fileext); 
    5052                    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); 
    5355                    } 
    5456                } 
     
    6264        return modUnit != null && modUnit.exists() 
    6365        // XXX: DLTK bug workaround:  
    64         // modUnit.exists() true on external source modules of libraries 
     66        // modUnit.exists() true on ANY external source modules of libraries 
    6567        // we should make a test case for this 
    6668            && externalReallyExists(modUnit) 
     
    7173        if(!(modUnit instanceof IExternalSourceModule)) 
    7274            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(); 
    7478    } 
    7579 
  • trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeLanguageToolkit.java

    r749 r1218  
    55import mmrnmhrm.core.model.DeeNature; 
    66 
     7import org.eclipse.core.resources.IResource; 
     8import org.eclipse.core.runtime.IPath; 
    79import org.eclipse.core.runtime.IStatus; 
    810import org.eclipse.core.runtime.Status; 
    911import org.eclipse.dltk.core.AbstractLanguageToolkit; 
    1012import org.eclipse.dltk.core.IDLTKLanguageToolkit; 
    11 import org.eclipse.dltk.core.IModelElement; 
     13import org.eclipse.dltk.core.environment.IEnvironment; 
    1214 
    1315public class DeeLanguageToolkit extends AbstractLanguageToolkit  { 
    1416 
    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"; 
    1818 
    1919    private static final IDLTKLanguageToolkit instance = new DeeLanguageToolkit(); 
     
    2222        return instance ; 
    2323    } 
    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; 
    3427    } 
    3528 
     
    4437    } 
    4538     
    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(); 
    4747        if(DeeNameRules.isValidCompilationUnitName(name)) { 
    48             return new Status(IStatus.OK, DeeCore.PLUGIN_ID, null)
     48            return Status.OK_STATUS
    4949        } 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); 
    5251        } 
    5352    } 
    5453     
    55      
    56      
    57     /* TODO: when DLTK supports is, validate packages 
    5854    @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    } 
    6259 
    6360} 
  • trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeParserUtil.java

    r758 r1218  
    11package mmrnmhrm.core.dltk; 
    22 
    3 import static melnorme.miscutil.Assert.assertNotNull; 
    4  
     3import org.eclipse.dltk.ast.declarations.ModuleDeclaration; 
    54import org.eclipse.dltk.core.ISourceModule; 
    6 import org.eclipse.dltk.core.ISourceModuleInfoCache; 
    7 import org.eclipse.dltk.core.ISourceModuleInfoCache.ISourceModuleInfo; 
     5import org.eclipse.dltk.core.SourceParserUtil; 
    86 
    97import dtool.ast.definitions.Module; 
    108 
    11 public abstract class ParsingUtil { 
     9public abstract class DeeParserUtil { 
    1210 
    13     @SuppressWarnings("restriction") 
    14     public static ISourceModuleInfo getSourceModuleInfo(ISourceModule module) { 
     11    /* 
     12    private static ISourceModuleInfo getSourceModuleInfo(ISourceModule module) { 
    1513        ISourceModuleInfoCache sourceModuleInfoCache; 
    1614        sourceModuleInfoCache = org.eclipse.dltk.internal.core.ModelManager. 
    1715            getModelManager().getSourceModuleInfoCache(); 
    1816        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); 
    1927    } 
    2028 
    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; 
    2440    } 
    2541 
  • trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceElementParser.java

    r804 r1218  
    11package mmrnmhrm.core.dltk; 
    22 
    3 import melnorme.miscutil.ExceptionAdapter; 
    43import mmrnmhrm.core.DeeCore; 
    5 import mmrnmhrm.core.DeeCorePreferences; 
    6 import mmrnmhrm.core.LangCore; 
     4import mmrnmhrm.core.model.DeeNature; 
    75 
    8 import org.eclipse.core.resources.IFile; 
    9 import org.eclipse.core.runtime.IPath; 
    10 import org.eclipse.core.runtime.Path; 
    116import 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; 
     7import org.eclipse.dltk.compiler.task.ITaskReporter; 
     8import org.eclipse.dltk.compiler.task.TodoTaskAstParser; 
     9import org.eclipse.dltk.compiler.task.TodoTaskPreferences; 
     10import org.eclipse.dltk.core.AbstractSourceElementParser; 
     11import org.eclipse.dltk.core.SourceParserUtil; 
    1812import org.eclipse.dltk.core.ISourceModuleInfoCache.ISourceModuleInfo; 
    1913 
    20 import dtool.Logg; 
    21 import dtool.ast.definitions.Module; 
    22  
    23 public class DeeSourceElementParser implements ISourceElementParser { 
     14public class DeeSourceElementParser extends AbstractSourceElementParser { 
    2415  
    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() { 
    3517    } 
    3618 
    37     //@Override 
    38     public void setReporter(IProblemReporter reporter) { 
    39         this.fReporter = reporter
     19    @Override 
     20    protected String getNatureId() { 
     21        return DeeNature.NATURE_ID
    4022    } 
    4123     
    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        } 
    4442    } 
    4543 
    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            } 
    5655        } 
    57          
    58         //assertNotNull(module); 
    59         //assertTrue(module.exists()); 
    60         // create a parser, that gives us an AST 
    61         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 null 
    79             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 settings 
    94         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; 
    10856    } 
    10957 
    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     } 
    11958 
    12059} 
  • trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceElementProvider.java

    r758 r1218  
    2828public final class DeeSourceElementProvider extends ASTNeoUpTreeVisitor { 
    2929 
    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; 
    3235 
    3336    public DeeSourceElementProvider(ISourceElementRequestor requestor) { 
     
    4649    } 
    4750     
    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 
    60161 
    61162    protected static void setupDefUnitTypeInfo(DefUnit defAggr, 
     
    141242    } 
    142243     
     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     
    143259    private ISourceElementRequestor.MethodInfo createMethodInfo(DefinitionFunction elem) { 
    144260        ISourceElementRequestor.MethodInfo methodInfo = new ISourceElementRequestor.MethodInfo(); 
     
    166282        return fieldInfo; 
    167283    } 
    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     
    278285 
    279286} 
  • trunk/mmrnmhrm.core/src/mmrnmhrm/core/dltk/DeeSourceParser.java

    r906 r1218  
    22 
    33import static melnorme.miscutil.Assert.assertTrue; 
     4import mmrnmhrm.core.DeeCore; 
    45import mmrnmhrm.core.DeeCorePreferences; 
    56import mmrnmhrm.core.LangCore; 
    67 
     8import org.eclipse.core.resources.IFile; 
    79import org.eclipse.core.runtime.CoreException; 
    8 import org.eclipse.dltk.ast.declarations.ISourceParser; 
     10import org.eclipse.core.runtime.IPath; 
     11import org.eclipse.core.runtime.Path; 
     12import org.eclipse.dltk.ast.declarations.ModuleDeclaration; 
     13import org.eclipse.dltk.ast.parser.AbstractSourceParser; 
     14import org.eclipse.dltk.ast.parser.ISourceParser; 
    915import org.eclipse.dltk.compiler.problem.IProblemReporter; 
     16import org.eclipse.dltk.core.DLTKCore; 
     17import org.eclipse.dltk.core.ISourceModule; 
     18import org.eclipse.dltk.core.environment.EnvironmentPathUtils; 
    1019 
    1120import descent.core.compiler.IProblem; 
     
    1423import dtool.descentadapter.DescentASTConverter; 
    1524 
    16 public class DeeSourceParser implements ISourceParser { 
     25public class DeeSourceParser extends AbstractSourceParser { 
    1726     
    1827    private static final class DescentProblemAdapter implements 
     
    5059    } 
    5160     
    52     /** Used by reconciler. */ 
    5361    //@Override 
    54     public DeeModuleDeclaration parse(char[] fileName, char[] source, 
    55             IProblemReporter reporter) { 
     62    public ModuleDeclaration parse(char[] fileName, char[] source, IProblemReporter reporter) { 
    5663        int langVersion = DeeCorePreferences.getInt(DeeCorePreferences.LANG_VERSION); 
    5764        return parseModule(source, langVersion, reporter, fileName); 
     65         
     66         
    5867    } 
    5968 
    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) { 
    6271        Parser parser = new Parser(langVersion, source); 
    6372        parser.setProblemReporter(DescentProblemAdapter.create(reporter)); 
     
    7079        } 
    7180        assertTrue(dmdModule.length == source.length); 
    72         DeeModuleDeclaration moduleDec = new DeeModuleDeclaration(dmdModule); 
     81        DeeModuleDeclaration deeModuleDecl = new DeeModuleDeclaration(dmdModule); 
    7382        if(dmdModule.hasSyntaxErrors() 
    7483                && !DeeCorePreferences.getBoolean(DeeCorePreferences.ADAPT_MALFORMED_DMD_AST)) { 
    7584            // DontLet's try to convert a malformed AST 
    76             return moduleDec
     85            return deeModuleDecl
    7786        } 
    7887        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