All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sap.psr.vulas.java.sign.CompilationUtils Maven / Gradle / Ivy

There is a newer version: 3.1.15
Show newest version
/**
 * This file is part of Eclipse Steady.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved.
 */
package com.sap.psr.vulas.java.sign;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jdt.internal.compiler.CompilationResult;
import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies;
import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
import org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.parser.Parser;
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
import org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
import org.eclipse.jdt.internal.core.util.CommentRecorderParser;

import com.sap.psr.vulas.shared.util.FileUtil;

import ch.uzh.ifi.seal.changedistiller.ast.java.Comment;
import ch.uzh.ifi.seal.changedistiller.ast.java.CommentCollector;
import ch.uzh.ifi.seal.changedistiller.ast.java.JavaCompilation;

/**
 * Helper class to create the ASTSignature instances using ChangeDistiller.
 */
public final class CompilationUtils {
	
	private static final Log log = LogFactory.getLog(CompilationUtils.class);

	private CompilationUtils() {}

    /**
     * 

compileSource.

* * @param source a {@link java.lang.String} object. * @return a {@link ch.uzh.ifi.seal.changedistiller.ast.java.JavaCompilation} object. */ public static JavaCompilation compileSource(String source) { //Compiler Options CompilerOptions options = getDefaultCompilerOptions(); //CommentRecorder Parser parser = createCommentRecorderParser(options); //Create Compilation Unit from Source ICompilationUnit cu = createCompilationunit(source, ""); //Compilation Result CompilationResult compilationResult = createDefaultCompilationResult(cu, options); return new JavaCompilation(parser.parse(cu, compilationResult), parser.scanner); } private static CompilerOptions getDefaultCompilerOptions() { CompilerOptions options = new CompilerOptions(); options.docCommentSupport = true; options.complianceLevel = ClassFileConstants.JDK1_7; options.sourceLevel = ClassFileConstants.JDK1_7; options.targetJDK = ClassFileConstants.JDK1_7; return options; } private static ICompilationUnit createCompilationunit(String _source_code, String filename) { char[] source_code = _source_code.toCharArray(); ICompilationUnit cu = new CompilationUnit(source_code, filename, null); return cu; } /** * Returns the generated {@link JavaCompilation} from the file identified by the given filename. * * @param _filename * of the file to compile * @return the compilation of the file */ public static JavaCompilation compileFile(String _filename) { JavaCompilation jc = null; try { final String src = FileUtil.readFile(_filename); final CompilerOptions options = getDefaultCompilerOptions(); final Parser parser = createCommentRecorderParser(options); final ICompilationUnit cu = createCompilationunit(src, _filename); final CompilationResult compilationResult = createDefaultCompilationResult(cu, options); jc = new JavaCompilation(parser.parse(cu, compilationResult), parser.scanner); } catch (IOException e) { log.error(e); } return jc; } /** * Create a CommentRecorderParser * @param options - compiler options * @return */ private static Parser createCommentRecorderParser(CompilerOptions options) { Parser parser = new CommentRecorderParser(new ProblemReporter( DefaultErrorHandlingPolicies.proceedWithAllProblems(), options, new DefaultProblemFactory()), false); return parser; } private static CompilationResult createDefaultCompilationResult(ICompilationUnit cu, CompilerOptions options) { CompilationResult compilationResult = new CompilationResult(cu, 0, 0, options.maxProblemsPerUnit); return compilationResult; } /** *

extractComments.

* * @param sCompilationUnit a {@link ch.uzh.ifi.seal.changedistiller.ast.java.JavaCompilation} object. * @return a {@link java.util.List} object. */ public static List extractComments(JavaCompilation sCompilationUnit) { CommentCollector collector = new CommentCollector(sCompilationUnit.getCompilationUnit(), sCompilationUnit.getSource()); collector.collect(); return collector.getComments(); } /** *

findMethod.

* * @param cu a {@link org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration} object. * @param methodName a {@link java.lang.String} object. * @return a {@link org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration} object. */ public static AbstractMethodDeclaration findMethod(CompilationUnitDeclaration cu, String methodName) { for (TypeDeclaration type : cu.types) { for (AbstractMethodDeclaration method : type.methods) { if (String.valueOf(method.selector).equals(methodName)) { return method; } } } return null; } /** *

findField.

* * @param cu a {@link org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration} object. * @param fieldName a {@link java.lang.String} object. * @return a {@link org.eclipse.jdt.internal.compiler.ast.FieldDeclaration} object. */ public static FieldDeclaration findField(CompilationUnitDeclaration cu, String fieldName) { for (TypeDeclaration type : cu.types) { for (FieldDeclaration field : type.fields) { if (String.valueOf(field.name).equals(fieldName)) { return field; } } } return null; } /** *

findType.

* * @param cu a {@link org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration} object. * @param typeName a {@link java.lang.String} object. * @return a {@link org.eclipse.jdt.internal.compiler.ast.TypeDeclaration} object. */ public static TypeDeclaration findType(CompilationUnitDeclaration cu, String typeName) { for (TypeDeclaration type : cu.types) { for (TypeDeclaration memberType : type.memberTypes) { if (String.valueOf(memberType.name).equals(typeName)) { return memberType; } } } return null; } /** *

getFile.

* * @param filename a {@link java.lang.String} object. * @return a {@link java.io.File} object. */ public static File getFile(String filename) { return new File(filename); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy