Package org.locationtech.udig.jconsole.java

Source Code of org.locationtech.udig.jconsole.java.JavaCodeScanner

/*******************************************************************************
* Copyright (c) 2000, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.locationtech.udig.jconsole.java;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.EndOfLineRule;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
import org.eclipse.jface.text.rules.RuleBasedScanner;
import org.eclipse.jface.text.rules.SingleLineRule;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;
import org.eclipse.swt.SWT;

import org.locationtech.udig.jconsole.util.JavaColorProvider;
import org.locationtech.udig.jconsole.util.JavaWhitespaceDetector;
import org.locationtech.udig.jconsole.util.JavaWordDetector;
import org.locationtech.udig.jconsole.util.Keywords;

/**
* A Java code scanner.
*/
public class JavaCodeScanner extends RuleBasedScanner {

    private static List<String> moduleFieldsNameList = new ArrayList<String>();
    private static List<String> moduleClassesNameList = new ArrayList<String>();

    /**
     * Creates a Java code scanner with the given color provider.
     *
     * @param provider the color provider
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    public JavaCodeScanner( JavaColorProvider provider ) {

        // TODO review this if oms modules should be added
        //
        // HashMap<String, List<ModuleDescription>> modulesMap =
        // JConsolePlugin.getDefault().gatherModules();
        // Collection<List<ModuleDescription>> modulesDescriptions = modulesMap.values();
        // for( List<ModuleDescription> modulesDescriptionList : modulesDescriptions ) {
        // for( ModuleDescription moduleDescription : modulesDescriptionList ) {
        // List<FieldData> inputsList = moduleDescription.getInputsList();
        // for( FieldData inFieldData : inputsList ) {
        // moduleFieldsNameList.add(inFieldData.fieldName);
        // }
        // List<FieldData> outputsList = moduleDescription.getOutputsList();
        // for( FieldData outFieldData : outputsList ) {
        // moduleFieldsNameList.add(outFieldData.fieldName);
        // }
        // // String name = moduleDescription.getName();
        // String className = moduleDescription.getClassName();
        // moduleClassesNameList.add(className);
        // }
        // }

        IToken string = new Token(new TextAttribute(provider.getColor(JavaColorProvider.STRING)));
        IToken comment = new Token(new TextAttribute(provider.getColor(JavaColorProvider.SINGLE_LINE_COMMENT)));

        IToken keywordTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.KEYWORD), null, SWT.BOLD));
        IToken methodTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.METHOD), null, SWT.ITALIC));
        IToken typeTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.TYPE)));
        IToken constantsTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.CONSTANTS)));
        IToken geoscriptTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.GEOSCRIPT), null, SWT.BOLD));

        IToken other = new Token(new TextAttribute(provider.getColor(JavaColorProvider.DEFAULT)));
        IToken modulesFieldsTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.MODULES_FIELDS)));
        IToken omsComponentsTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.OMS_COMPONENTS)));
        IToken omsModulesTok = new Token(new TextAttribute(provider.getColor(JavaColorProvider.OMS_MODULES)));

        List rules = new ArrayList();

        // Add rule for single line comments.
        rules.add(new EndOfLineRule("//", comment)); //$NON-NLS-1$

        // Add rule for gstrings
        rules.add(new MultiLineRule("\"\"\"", "\"\"\"", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$
        // Add rule for strings
        rules.add(new SingleLineRule("\"", "\"", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$
        // and character constants.
        rules.add(new SingleLineRule("'", "'", string, '\\')); //$NON-NLS-2$ //$NON-NLS-1$
        //        rules.add(new SingleLineRule("'", "'", omsModulesTok, '\\')); //$NON-NLS-2$ //$NON-NLS-1$

        // Add generic whitespace rule.
        rules.add(new WhitespaceRule(new JavaWhitespaceDetector()));

        // Add word rule for keywords, types, and constants.
        WordRule wordRule = new WordRule(new JavaWordDetector(), other);

        List<String> keywords = Keywords.getValues(Keywords.KEYWORDS);
        for( int i = 0; i < keywords.size(); i++ )
            wordRule.addWord(keywords.get(i), keywordTok);

        List<String> types = Keywords.getValues(Keywords.TYPES);
        for( int i = 0; i < types.size(); i++ )
            wordRule.addWord(types.get(i), typeTok);

        List<String> constants = Keywords.getValues(Keywords.CONSTANTS);
        for( int i = 0; i < constants.size(); i++ )
            wordRule.addWord(constants.get(i), constantsTok);

        List<String> geoscript = Keywords.getValues(Keywords.GEOSCRIPT);
        for( int i = 0; i < geoscript.size(); i++ )
            wordRule.addWord(geoscript.get(i), geoscriptTok);

        List<String> jgtModules = Keywords.getValues(Keywords.JGTMODULES);
        for( int i = 0; i < jgtModules.size(); i++ )
            wordRule.addWord(jgtModules.get(i), geoscriptTok);

        List<String> method = Keywords.getValues(Keywords.METHODS);
        for( int i = 0; i < method.size(); i++ )
            wordRule.addWord(method.get(i), methodTok);

        List<String> jgt_method = Keywords.getValues(Keywords.JGTMETHODS);
        for( int i = 0; i < jgt_method.size(); i++ )
            wordRule.addWord(jgt_method.get(i), methodTok);

        List<String> oms = Keywords.getValues(Keywords.OMS);
        for( int i = 0; i < oms.size(); i++ ) {
            wordRule.addWord(oms.get(i), omsComponentsTok);
        }

        for( String moduleFieldsName : moduleFieldsNameList ) {
            wordRule.addWord(moduleFieldsName, modulesFieldsTok);
        }
        for( String moduleClassesName : moduleClassesNameList ) {
            wordRule.addWord(moduleClassesName, omsModulesTok);
        }

        rules.add(wordRule);

        IRule[] result = new IRule[rules.size()];
        rules.toArray(result);
        setRules(result);
    }
}
TOP

Related Classes of org.locationtech.udig.jconsole.java.JavaCodeScanner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.