/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.parser.statements; import gw.internal.gosu.parser.Statement; import gw.lang.parser.statements.ITerminalStatement; import gw.lang.parser.statements.IUsesStatement; import gw.lang.parser.statements.IUsesStatementList; import java.util.List; public class UsesStatementList extends Statement implements IUsesStatementList { private List<IUsesStatement> _stmts; public UsesStatementList() { } public List<IUsesStatement> getUsesStatements() { return _stmts; } public void setUsesStatements( List<IUsesStatement> stmts ) { _stmts = stmts; } public Object execute() { // no-op return Statement.VOID_RETURN_VALUE; } @Override protected ITerminalStatement getLeastSignificantTerminalStatement_internal( boolean[] bAbsolute ) { bAbsolute[0] = false; return null; } @Override public boolean isNoOp() { return true; } public IUsesStatement conflicts( IUsesStatement stmt ) { String fqn = stmt.getTypeName(); if( fqn == null ) { return null; } String relativeName = getRelativeName( fqn ); boolean bPackage = relativeName.equals( "*" ); for( IUsesStatement csrStmt : _stmts ) { String csrFqn = csrStmt.getTypeName(); if( csrFqn == null ) { continue; } if( csrFqn.equals( fqn ) ) { // Handles duplicate package imports e.g., two or more com.abc.* return csrStmt; } String csrRelativeName = getRelativeName( csrFqn ); if( !bPackage && csrRelativeName.equals( relativeName ) ) { // Handles imports with same relative name e.g., abc.Foo and yoyo.Foo return csrStmt; } } return null; } private String getRelativeName( String fqn ) { if( fqn == null ) { return ""; } int iDot = fqn.lastIndexOf( '.' ); if( iDot >= 0 ) { if( iDot < fqn.length()-1 ) { fqn = fqn.substring( iDot + 1 ); } else { fqn = ""; } } return fqn; } @Override public String toString() { StringBuilder sb = new StringBuilder(); if( _stmts != null ) { for( IUsesStatement stmt : _stmts ) { sb.append( stmt.toString() + "\n" ); } } return sb.toString(); } }