tools/java/src/stx/libjava/tools/compiler/CompilerAdapter.java
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 16 Sep 2013 01:04:57 +0100
branchdevelopment
changeset 2733 3d97124aebf5
parent 2732 7d1a1fb5b01a
child 2735 e20dd8496371
permissions -rw-r--r--
Fixes for syntax highlighting. Even full class source is fully parser and indexed as the parser seems to be fast enough (at least at i5 CPU).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
     1
package stx.libjava.tools.compiler;
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
import java.util.HashMap;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
import java.util.Locale;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
import java.util.Map;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
import org.eclipse.jdt.internal.compiler.ClassFile;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
import org.eclipse.jdt.internal.compiler.CompilationResult;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
import org.eclipse.jdt.internal.compiler.ICompilerRequestor;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
import org.eclipse.jdt.internal.compiler.IProblemFactory;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    18
import stx.libjava.tools.Source;
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    19
import stx.libjava.tools.environment.Environment;
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    20
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
public class CompilerAdapter implements ICompilerRequestor {
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    22
	protected Environment environment;
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
	protected CompilationResult result;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
	
2488
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    25
	public CompilerAdapter() {
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    26
		this(ClassLoader.getSystemClassLoader());
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    27
	}
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    28
	
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    29
	public CompilerAdapter(ClassLoader cl) {
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    30
		environment = new Environment(cl);	
2488
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    31
	}
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
	public CompilationResult getResult() {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
		return result;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
	}
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
2488
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    37
	public ClassLoader getClassLoader() {
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    38
		return environment.getClassLoader();
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    39
	}
5395660e3366 Fixed ECJ compiler adapter to search classes using provided class loader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2477
diff changeset
    40
	
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
	/**
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
	 * Compiles classes in given source. The resulting .class files are added
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
	 * to an internal list which can be later retrieved by getClassFiles().
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
	 * 
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
	 * @param source source code of the class as String.   
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
	 * @return true, if compilation succeeded, false otherwise.
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
	 */
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    48
	public boolean compile(String source) {
2733
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    49
	    return compile(source, true);
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    50
	}
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    51
	
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    52
	/**
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    53
     * Compiles classes in given source. The resulting .class files are added
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    54
     * to an internal list which can be later retrieved by getClassFiles() - 
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    55
     * but only if @param generate is true. 
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    56
     * 
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    57
     * @param source source code of the class as String.
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    58
     * @param generate if false, .class files are not generated (used to check source for errors)   
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    59
     * @return true, if compilation succeeded, false otherwise.
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    60
     */
3d97124aebf5 Fixes for syntax highlighting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2732
diff changeset
    61
	public boolean compile(String source, boolean generate) {
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
		ICompilerRequestor requestor = this;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
		IErrorHandlingPolicy policy = DefaultErrorHandlingPolicies.exitAfterAllProblems();
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
	    IProblemFactory problemFactory = new DefaultProblemFactory(Locale.getDefault());
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    65
	    Source[] units = new Source[1];
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    66
	    units[0] = new Source(source);
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    67
	    units[0].setName();
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
		
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
		org.eclipse.jdt.internal.compiler.Compiler compiler = new org.eclipse.jdt.internal.compiler.Compiler(environment, policy, getDefaultCompilerOptions(), requestor, problemFactory);
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
		compiler.compile(units);
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
		return getResult().hasErrors();
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
	}
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
	
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
	/**
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    75
	 * Same as compile(String), for compatibility with old interface
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    76
	 * 
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    77
	 * @deprecated
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    78
	 */
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    79
	public boolean compile(String name, String source) {
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    80
	    return compile(source);
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    81
	}
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    82
	
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
    83
	/**
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
	 * Returns a list of JavaClassFiles that contains results of the compilation. 
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
	 * 
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
	 * @return resulting class files
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
	 */
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
	public ClassFile[] getClassFiles() {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
		return getResult().getClassFiles();
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
	}
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
	
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
	public static Map<String, Object> getDefaultCompilerSettings() {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
		String javaSpecVersion = System.getProperty("java.specification.version");
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
        Map<String, Object> settings = new HashMap<String, Object>();
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
        settings.put(CompilerOptions.OPTION_Source, javaSpecVersion);
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        settings.put(CompilerOptions.OPTION_TargetPlatform, javaSpecVersion);
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
        settings.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.IGNORE);
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
        return settings;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
	}
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    public static CompilerOptions getDefaultCompilerOptions() {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    	return new CompilerOptions(getDefaultCompilerSettings());
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    }
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
	@Override
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
	public void acceptResult(CompilationResult result) {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
		this.result = result;
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
		for (ClassFile cf : this.result.getClassFiles()) {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
			StringBuilder sb = new StringBuilder();
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
			for (int i = 0; i < cf.getCompoundName().length; i++) {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
				sb.append(cf.getCompoundName()[i]);
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
				if (i < cf.getCompoundName().length - 1) {
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
					sb.append('.');
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
				}
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
			}
2728
658220e93dc9 Java package reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2488
diff changeset
   116
			environment.types.put(sb.toString(), cf.getBytes());
2477
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
		}
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
	}
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
	
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
6e37b62e21b5 Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
}