Changeset 3778


Ignore:
Timestamp:
May 24, 2008, 1:34:12 PM (12 years ago)
Author:
yura
Message:
  • Creating needed folders in output folder.
Location:
devel-tools/trunk/eclipse/org.refal.rfpdt.core/src/org/refal/rfpdt/core
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • devel-tools/trunk/eclipse/org.refal.rfpdt.core/src/org/refal/rfpdt/core/RfpBuilder.java

    r3766 r3778  
    11package org.refal.rfpdt.core;
    22
    3 import java.io.ByteArrayInputStream;
    43import java.io.InputStream;
    54import java.io.InputStreamReader;
     
    5756    }
    5857
    59     private void createClassFile (String className, byte[] bytes) {
    60         try {
    61             IFile classFile = getRfpProject().getClassFile(className);
    62             if (classFile.exists())
    63                 classFile.delete(true, false, null);
    64             InputStream inputStream = new ByteArrayInputStream(bytes);
    65             classFile.create(inputStream, true, null);
    66             classFile.setDerived(true);
    67             inputStream.close();
    68         } catch (Exception e) {
    69             RfpCore.log(e);
    70         }
    71     }
    72 
    7358    private void deleteClassFiles (IFile file) {
    7459        RfpProject rfpProject = getRfpProject();
     
    7661        if (moduleName == null)
    7762            return;
    78         IFile classFile = rfpProject.getClassFile(moduleName);
    79         try {
    80             for (int i = 0; true; i++) {
    81                 if (classFile.exists())
    82                     classFile.delete(true, false, null);
    83                 else
    84                     break;
    85                 classFile = rfpProject.getClassFile(moduleName + "$" + i);
    86             }
    87         } catch (CoreException e) {
    88             RfpCore.log(e);
    89         }
     63        rfpProject.deleteClassFiles(moduleName);
    9064    }
    9165
     
    354328                    .toExpr(rfpProject.getCompilerOptionAddLineNumber()), Native.toExpr(rfpProject
    355329                    .getCompilerOptionAddSource()), ast, res);
    356             // rfpc.CompileASToJBC(ast, res);
    357330            deleteClassFiles(file);
    358331            for (Comparable<?> p : res.getExpr()) {
    359332                Expr e = (Expr) p;
    360                 createClassFile((String) e.at(0), (byte[]) ((Reference) e.at(1)).object);
     333                getRfpProject().writeClassFile((String) e.at(0), (byte[]) ((Reference) e.at(1)).object);
    361334            }
    362335        } catch (RefalException e) {
  • devel-tools/trunk/eclipse/org.refal.rfpdt.core/src/org/refal/rfpdt/core/RfpPreBuilder.java

    r3704 r3778  
    11package org.refal.rfpdt.core;
    22
    3 import java.io.ByteArrayInputStream;
    4 import java.io.InputStream;
    53import java.io.InputStreamReader;
    64import java.io.Reader;
     
    3937    }
    4038
    41     private void createClassFile (String className, byte[] bytes) {
    42         try {
    43             IFile classFile = getRfpProject().getClassFile(className);
    44             if (classFile.exists())
    45                 classFile.delete(true, false, null);
    46             InputStream inputStream = new ByteArrayInputStream(bytes);
    47             classFile.create(inputStream, true, null);
    48             classFile.setDerived(true);
    49             inputStream.close();
    50         } catch (Exception e) {
    51             RfpCore.log(e);
    52         }
    53     }
    54 
    55     private void deleteClassFiles (String moduleName) {
    56         RfpProject rfpProject = getRfpProject();
    57         IFile classFile = rfpProject.getClassFile(moduleName);
    58         try {
    59             for (int i = 0; true; i++) {
    60                 if (classFile.exists())
    61                     classFile.delete(true, false, null);
    62                 else
    63                     break;
    64                 classFile = rfpProject.getClassFile(moduleName + "$" + i);
    65             }
    66         } catch (CoreException e) {
    67             RfpCore.log(e);
    68         }
    69     }
    70 
    7139    private static class IdeCompilerEnvironment implements CompilerEnvironment {
    7240        private final RfpProject project;
     
    156124
    157125    private void checkAndCompileModuleImplem (String moduleName) {
    158         deleteClassFiles(moduleName);
     126        getRfpProject().deleteClassFiles(moduleName);
    159127        IdeCompilerEnvironment env = new IdeCompilerEnvironment(getRfpProject(), moduleName);
    160128        AstImplem astImplem = Checker.getModuleImplementation(env);
    161129        byte[] jbc = RefalInterfaceComplier.compile(astImplem);
    162         createClassFile(moduleName, jbc);
     130        getRfpProject().writeClassFile(moduleName, jbc);
    163131    }
    164132
  • devel-tools/trunk/eclipse/org.refal.rfpdt.core/src/org/refal/rfpdt/core/RfpProject.java

    r3766 r3778  
    11package org.refal.rfpdt.core;
    22
     3import java.io.ByteArrayInputStream;
     4
    35import org.eclipse.core.resources.IFile;
     6import org.eclipse.core.resources.IFolder;
    47import org.eclipse.core.resources.IProject;
     8import org.eclipse.core.resources.IResource;
     9import org.eclipse.core.resources.IResourceStatus;
    510import org.eclipse.core.resources.IWorkspaceRoot;
     11import org.eclipse.core.runtime.CoreException;
    612import org.eclipse.core.runtime.IPath;
    713import org.eclipse.jdt.core.IClasspathEntry;
    814import org.eclipse.jdt.core.IJavaProject;
    915import org.eclipse.jdt.core.JavaCore;
     16import org.eclipse.jdt.core.JavaModelException;
    1017
    1118public class RfpProject {
     
    2734        return javaProject;
    2835    }
    29    
     36
    3037    public IFile getFile (String fileName) {
    3138        return project.getFile(fileName);
     
    3643    }
    3744
    38     public IFile getClassFile (String moduleName) {
     45    public void writeClassFile (String className, byte[] bytes) {
     46        try {
     47            IFile classFile = getClassFile(className);
     48            if (classFile == null)
     49                return;
     50            if (classFile.exists()) {
     51                if (!classFile.isDerived())
     52                    classFile.setDerived(true);
     53                classFile.setContents(new ByteArrayInputStream(bytes), IResource.FORCE, null);
     54            } else {
     55                try {
     56                    classFile.create(new ByteArrayInputStream(bytes), IResource.FORCE | IResource.DERIVED, null);
     57                } catch (CoreException e) {
     58                    if (e.getStatus().getCode() == IResourceStatus.RESOURCE_NOT_FOUND) {
     59                        String[] paths = className.split("\\.");
     60                        IPath path = javaProject.getOutputLocation();
     61                        for (int i = 0; i < paths.length - 1; i++) {
     62                            path = path.append(paths[i]);
     63                            IFolder folder = workspaceRoot.getFolder(path);
     64                            if (!folder.exists())
     65                                folder.create(IResource.FORCE | IResource.DERIVED, false, null);
     66                        }
     67                        classFile.create(new ByteArrayInputStream(bytes), IResource.FORCE | IResource.DERIVED, null);
     68                    } else
     69                        throw e;
     70                }
     71            }
     72        } catch (CoreException e) {
     73            RfpCore.log(e);
     74        }
     75    }
     76
     77    public void deleteClassFiles (String moduleName) {
     78        try {
     79            IFile classFile = getClassFile(moduleName);
     80            for (int i = 0; true; i++) {
     81                if (classFile == null)
     82                    return;
     83                if (classFile.exists())
     84                    classFile.delete(true, false, null);
     85                else
     86                    break;
     87                classFile = getClassFile(moduleName + "$" + i);
     88            }
     89        } catch (CoreException e) {
     90            RfpCore.log(e);
     91        }
     92    }
     93
     94    /** May return <code>null</code>! */
     95    private IFile getClassFile (String moduleName) {
    3996        try {
    4097            return workspaceRoot.getFile(javaProject.getOutputLocation()
    4198                    .append(moduleName.replace('.', '/') + ".class"));
    42         } catch (Exception e) {
     99        } catch (JavaModelException e) {
    43100            RfpCore.log(e);
    44101        }
     
    46103    }
    47104
     105    /** May return <code>null</code>! */
    48106    public IFile getSource (String moduleName, String ext) {
    49107        try {
     
    55113                        return file;
    56114                }
    57         } catch (Exception e) {
     115        } catch (JavaModelException e) {
    58116            RfpCore.log(e);
    59117        }
     
    65123        return rfpProject == null ? null : rfpProject.getModuleName(file);
    66124    }
    67    
     125
    68126    /** May return <code>null</code>! */
    69127    public String getModuleName (IFile file) {
     
    76134                        return filePath.removeFirstSegments(entryPath.segmentCount()).toString().replace('/', '.');
    77135                }
    78         } catch (Exception e) {
     136        } catch (JavaModelException e) {
    79137            RfpCore.log(e);
    80138        }
    81139        return null;
    82140    }
    83    
     141
    84142    private boolean addLineNumber = true;
    85143    private boolean addVariableNames = true;
    86144    private boolean addSource = true;
    87    
     145
    88146    public boolean getCompilerOptionAddLineNumber () {
    89147        return addLineNumber;
Note: See TracChangeset for help on using the changeset viewer.