Skip to content

Commit

Permalink
WIP #7 - Implemented dummy visitor and related test
Browse files Browse the repository at this point in the history
  • Loading branch information
jeandersonbc committed Mar 15, 2016
1 parent 7ecf961 commit d86f600
Show file tree
Hide file tree
Showing 5 changed files with 294 additions and 22 deletions.
57 changes: 35 additions & 22 deletions src/icc/ICCLinkFinder.java
Original file line number Diff line number Diff line change
@@ -1,33 +1,46 @@
package icc;

import java.util.HashSet;
import java.util.Set;

import com.github.javaparser.ast.CompilationUnit;

import icc.data.ICCLinkFindingResults;
import icc.visitors.ActivityVisitor;
import icc.visitors.ContentResolverVisitor;
import icc.visitors.ScopeAwareVisitor;
import icc.visitors.ServiceVisitor;
import icc.visitors.StaticBroadcastVisitor;
import icc.visitors.SymbolTableVisitor;

import com.github.javaparser.ast.CompilationUnit;
/**
* This entity is the main entry-point for the ICC analysis. It is responsible
* for detecting ICC links according to a given compilation unit and a set of
* visitors.
*/
public class ICCLinkFinder {
/**
* Finds inter-component communication links for a compilation unit.
*
* @param cu
* The given compilation unit
* @return Analysis results represented as a {@link ICCLinkFindingResults}
*/
public static ICCLinkFindingResults findICCLinks(CompilationUnit cu) {
ICCLinkFindingResults results = new ICCLinkFindingResults();

Set<ScopeAwareVisitor> visitors = new HashSet<>();
visitors.add(new SymbolTableVisitor(results));
visitors.add(new ActivityVisitor(results));
visitors.add(new ServiceVisitor(results));
visitors.add(new StaticBroadcastVisitor(results));
visitors.add(new ContentResolverVisitor(results));

public class ICCLinkFinder
{
public static ICCLinkFindingResults findICCLinks(CompilationUnit cu)
{
ICCLinkFindingResults results = new ICCLinkFindingResults();

SymbolTableVisitor sTVisitor = new SymbolTableVisitor(results);
sTVisitor.visit(cu, null);

ActivityVisitor activityVisitor = new ActivityVisitor(results);
activityVisitor.visit(cu, null);

ServiceVisitor serviceVisitor = new ServiceVisitor(results);
serviceVisitor.visit(cu, null);
for (ScopeAwareVisitor visitor : visitors) {
visitor.visit(cu, null);
}
results.accessStats();

StaticBroadcastVisitor staticBroadcastVisitor = new StaticBroadcastVisitor(results);
staticBroadcastVisitor.visit(cu, null);

results.accessStats();

return results;
}
return results;
}
}
25 changes: 25 additions & 0 deletions src/icc/visitors/ContentResolverVisitor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package icc.visitors;

import java.util.List;

import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.MethodCallExpr;

import icc.data.ICCLinkFindingResults;

public class ContentResolverVisitor extends BaseVisitor {

public ContentResolverVisitor(ICCLinkFindingResults data) {
super(data);
}

@Override
public void visit(MethodCallExpr n, Object arg) {
super.visit(n, arg);
String calleeName = n.getName();
if ("query".equals(calleeName)) {
List<Expression> calleeArguments = n.getArgs();
System.out.println(calleeArguments);
}
}
}
161 changes: 161 additions & 0 deletions test-data/k9/k9-javafiles.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
./TracingPowerManager.java
./MessageHeader.java
./InsertableHtmlContent.java
./MimeBodyPart.java
./CheckBoxListPreference.java
./K9AccountReceptor.java
./Folder.java
./Apg.java
./AutoSyncSdk4.java
./AccountSetupAccountType.java
./MediaScannerNotifier.java
./Message.java
./ToggleScrollView.java
./TrustedSocketFactory.java
./EmailReceivedIntent.java
./ActivityListener.java
./ManageIdentities.java
./CountingOutputStream.java
./ContactsSdk3_4.java
./MimeHeader.java
./Prefs.java
./PgpData.java
./Part.java
./AccountSetupIncoming.java
./SizeFormatter.java
./MessageDateComparator.java
./BodyPart.java
./ColorPickerDialog.java
./Base64.java
./Address.java
./UnavailableStorageException.java
./MessageRetrievalListener.java
./LauncherShortcuts.java
./EditIdentity.java
./IAutoSync.java
./BaseAccount.java
./FontSizes.java
./MessageReference.java
./K9RemoteControl.java
./AttachmentProvider.java
./PushReceiver.java
./FontSizeSettings.java
./Body.java
./MailService.java
./SleepService.java
./WebDavStore.java
./Transport.java
./Flag.java
./Utility.java
./EOLConvertingOutputStream.java
./FolderInfoHolder.java
./AttachmentView.java
./BootReceiver.java
./FolderSettings.java
./WebDavTransport.java
./RemoteControlService.java
./MimeUtility.java
./Store.java
./SmtpTransport.java
./MessageWebView.java
./ColorPickerBox.java
./K9.java
./UnavailableAccountException.java
./Contacts.java
./Editor.java
./CoreReceiver.java
./ShutdownReceiver.java
./SpinnerHelper.java
./PeekableInputStream.java
./AuthenticationFailedException.java
./AccountReceiver.java
./None.java
./BinaryTempFileBody.java
./ImapStore.java
./PushService.java
./ImapSettings.java
./LocalStore.java
./SpinnerOption.java
./Regex.java
./TextBody.java
./Pop3Store.java
./FolderList.java
./ColorChip.java
./EmmaInstrumentation.java
./ContactsSdk5.java
./Iso2022JpToShiftJisInputStream.java
./K9PreferenceActivity.java
./AutoSyncSdk3.java
./AccountSetupNames.java
./MessagingListener.java
./PollService.java
./Identity.java
./FetchProfile.java
./StorageGoneReceiver.java
./Account.java
./Accounts.java
./AccountSetupCheckSettings.java
./Preferences.java
./ContactsSdk5p.java
./AccountSetupOutgoing.java
./MessagingException.java
./StorageReceiver.java
./AccountSetupBasics.java
./K9ListActivity.java
./SearchAccount.java
./ChooseIdentity.java
./Base64OutputStream.java
./LineWrapOutputStream.java
./ChooseAccount.java
./AccountSetupOptions.java
./NotificationSetting.java
./FinishListener.java
./Pusher.java
./MessageView.java
./CertificateValidationException.java
./ImapResponseParser.java
./LockableDatabase.java
./AccessibleWebView.java
./Search.java
./DecoderUtil.java
./AccessibleEmailContentActivity.java
./RemoteControlReceiver.java
./AutoSyncHelper.java
./MimeMultipart.java
./MessagingController.java
./TimePickerPreference.java
./AccountSetupComposition.java
./EmailAddressAdapter.java
./TrustManagerFactory.java
./Storage.java
./K9Activity.java
./DateFormatter.java
./K9ExpandableListActivity.java
./EmailAddressValidator.java
./MessagingControllerPushReceiver.java
./StatusOutputStream.java
./MessageRemovalListener.java
./ChooseFolder.java
./MessageList.java
./CoreService.java
./SearchModifier.java
./MessageProvider.java
./MessageInfoHolder.java
./StorageManager.java
./DomainNameChecker.java
./MessageHelper.java
./Multipart.java
./FolderListFilter.java
./SmtpDataStuffing.java
./SMSInstrumentedReceiver.java
./AutoSyncSdk5.java
./MessageCompose.java
./AccountStats.java
./FixedLengthInputStream.java
./HtmlConverter.java
./AccountSettings.java
./CryptoProvider.java
./ProgressListener.java
./InstrumentedActivity.java
./MimeMessage.java
./SearchSpecification.java
24 changes: 24 additions & 0 deletions tests/icc/visitors/ContentResolverVisitorTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package icc.visitors;

import static org.junit.Assert.fail;

import org.junit.Test;

import com.github.javaparser.ast.CompilationUnit;

import icc.data.ICCLinkFindingResults;

public class ContentResolverVisitorTest {

private static final CompilationUnit compilationUnit = Utils.generateCompilationUnit("Apg.java",
"test-data/k9/src");

@Test
public void test() {
ICCLinkFindingResults r = new ICCLinkFindingResults();
ContentResolverVisitor visitor = new ContentResolverVisitor(r);
visitor.visit(compilationUnit, null);
fail("Not yet implemented");
}

}
49 changes: 49 additions & 0 deletions tests/icc/visitors/Utils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package icc.visitors;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseException;
import com.github.javaparser.ast.CompilationUnit;

public class Utils {

// TODO: This could be really reused in the main function.

/**
* Generates a {@link CompilationUnit} based on the given file and its
* relative parent path.
* <p>
* Example: <blockquote>
* <code>CompilationUnit cu = generateCompilationUnit("Apg.java", "test-data/k9/src");</code>
* </blockquote>
* <p>
* A Runtime Exception will halt the execution if:
* <ol>
* <li>file is not well-formed (ie can't be correctly parsed) or</li>
* <li>file doesn't exists due to unreachable path</li>
* </ol>
*
* @param fileName
* The file name
* @param parentDir
* Relative path to the source code
* @return A parsed compilation unit.
*
*/
public static CompilationUnit generateCompilationUnit(String fileName, String parentDir) {
CompilationUnit compilationUnit = null;
try {
FileInputStream toBeParsed = new FileInputStream(new File(parentDir, fileName));
compilationUnit = JavaParser.parse(toBeParsed);

} catch (FileNotFoundException e) {
throw new RuntimeException(String.format("File \"%s/%s\" couldn't be found!", parentDir, fileName));
} catch (ParseException e) {
throw new RuntimeException(String.format("File named \"%s\" is not well-formed!", fileName));
}
return compilationUnit;
}
}

0 comments on commit d86f600

Please sign in to comment.