Example usage for org.eclipse.jdt.internal.compiler.lookup ImportBinding ImportBinding

List of usage examples for org.eclipse.jdt.internal.compiler.lookup ImportBinding ImportBinding

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.compiler.lookup ImportBinding ImportBinding.

Prototype

public ImportBinding(char[][] compoundName, boolean isOnDemand, Binding binding, ImportReference reference) 

Source Link

Usage

From source file:org.codehaus.jdt.groovy.internal.compiler.ast.GroovyCompilationUnitScope.java

License:Open Source License

@Override
protected ImportBinding[] getDefaultImports() {
    ImportBinding[] defaultImports = super.getDefaultImports(); // picks up 'java.lang'

    List<ImportBinding> importBindings = new ArrayList<ImportBinding>();

    importBindings.add(defaultImports[0]);

    // augment with the groovy additional automatic imports
    Binding importBinding = environment.createPackage(javaIo);
    importBindings.add(new ImportBinding(javaIo, true, importBinding, null));

    importBinding = environment.createPackage(javaNet);
    importBindings.add(new ImportBinding(javaNet, true, importBinding, null));

    importBinding = environment.createPackage(javaUtil);
    importBindings.add(new ImportBinding(javaUtil, true, importBinding, null));

    importBinding = environment.createPackage(groovyLang);
    importBindings.add(new ImportBinding(groovyLang, true, importBinding, null));

    importBinding = environment.createPackage(groovyUtil);
    importBindings.add(new ImportBinding(groovyUtil, true, importBinding, null));

    // And specific imports for BigDecimal and BigInteger
    Binding jmBigDecimal = environment.getType(javaMathBigDecimal);
    importBindings.add(new ImportBinding(javaMathBigDecimal, false, jmBigDecimal, null));

    Binding jmBigInteger = environment.getType(javaMathBigInteger);
    importBindings.add(new ImportBinding(javaMathBigInteger, false, jmBigInteger, null));

    CompilerOptions co = compilerOptions();
    String extraImports = co.groovyExtraImports;
    // TODO support static imports
    // TODO need to refactor (code is copied in JDTResolver)
    if (extraImports != null) {
        try {//from   w  ww.  ja  v a 2  s  . co  m
            String filename = new String(this.referenceContext.getFileName());
            // may be something to do
            StringTokenizer st = new StringTokenizer(extraImports, ";");
            // Form would be 'com.foo.*,com.bar.MyType;.gradle=com.this.*,com.foo.Type"
            // If there is no qualifying suffix it applies to all types

            while (st.hasMoreTokens()) {
                String onesuffix = st.nextToken();
                int equals = onesuffix.indexOf('=');
                boolean shouldApply = false;
                String imports = null;
                if (equals == -1) {
                    // definetly applies
                    shouldApply = true;
                    imports = onesuffix;
                } else {
                    // need to check the suffix
                    String suffix = onesuffix.substring(0, equals);
                    shouldApply = filename.endsWith(suffix);
                    imports = onesuffix.substring(equals + 1);
                }
                StringTokenizer st2 = new StringTokenizer(imports, ",");
                while (st2.hasMoreTokens()) {
                    String nextElement = st2.nextToken();
                    // One of two forms: a.b.c.* or a.b.c.Type
                    if (nextElement.endsWith(".*")) {
                        char[] withoutDotStar = nextElement.substring(0, nextElement.length() - 2)
                                .toCharArray();
                        char[][] cs = CharOperation.splitOn('.', withoutDotStar);
                        importBinding = environment.createPackage(cs);
                        // TODO verify binding exists!
                        importBindings.add(new ImportBinding(cs, true, importBinding, null));
                    } else {
                        char[] type = nextElement.toCharArray();
                        char[][] cs = CharOperation.splitOn('.', type);
                        Binding typeBinding = environment.getType(cs);
                        importBindings.add(new ImportBinding(cs, false, typeBinding, null));
                    }
                }

            }
        } catch (Exception e) {
            new RuntimeException("Problem processing extraImports: " + extraImports, e).printStackTrace();
        }
    }

    return importBindings.toArray(new ImportBinding[importBindings.size()]);
}